魔兽地图吧's Archiver

rahxephon 发表于 2008-2-15 13:22

JAPI添加本地函数 -- 文件操作,系统日期,多类型音乐播放(修正文件读写实数错误)

应暗月的需求写了这个东西,就是使用JAPI为WAR3添加局域网下也能进行的文件读写操作的本地函数

[color=blue]新注意:用LOADER启动的WE或WAR3不能同时存在,否则将会有一个无法使用添加的函数[/color]

[color=red]又更新点函数,可以让WAR3播放任意格式的音乐(只要机器上有相应解码器)具体见附件[/color]
[color=red][color=black]更新点函数,还是帮暗月做的,可以获得当前系统日期,时间,具体见附件(包含文件操作函数在内)[/color][/color]

(什么是JAPI?这东西实在强大,是国外某高手写的HOOKWAR3函数的库文件,这东西能让你向WAR3添加任何你想要的功能,前不久U9还说要用这个将WAR3变成网游...--!,不过目前能找到使用说明的版本还是那个1.0,N年前的东西了,我在适用过程中发现BUG无数,不过还能凑合用,目前最好应该是和NEWGENPACK一起的那个版本,可惜没说明,还没搞明白怎么用...以后再说了- -)

这东西以前C-A写过,我这个和他的差不多,基本函数都一样,如果你感觉没搞懂他那个的话可以来试试我这个

[color=red]发布第二版,使用最新的[/color]NEWGENPACK[color=red]的JAPI(没有函数说明,压栈方式都改了难怪不能直接替换,费了半天才自己琢磨出来)
现在已经不会出现无法HOOK造成无法游戏的问题了,只要你的函数声明没错就一定能运行,依然存在的BUG是REAL无法存取(问题已解决),明天或晚些时候会写新的JAPI使用说明填补这个空白(网上只能找到1.00的,就是白银翻译的那篇,过时太久了)

新的版本完全摆脱JAPI的native文件夹限制,只需要自己写DLL放在哪都可以了.......
[/color]
[size=2][color=red][color=black]可以忽略的内容(注意:JAPI的最严重BUG就可能是HOOK不上--,也就是进入游戏后因为函数没能正确添加而造成无法游戏,这种情况下需要完全退出WAR3,重新进入才行,我测试最多时重新进入4次才成功--,因此不要看见演示图无法游戏或使用这些函数自己写的地图无法游戏就认为这东西完全无法使用,有耐心才行--...,等我搞明白新版本的JAPI估计就能解决这问题了- -)版本1的BUG,现在没了[/color][/color][/size][size=1]
[/size]
[color=blue]使用读写函数时请向地图导入附件中的common.j,附件中的补丁要求放在WAR3目录下,而且注册表要完整,进入游戏和WE都要使用附件中的LOADER程序才行[/color]

综上所述,个人始终感觉这东西无法推广,也没有推广的意义(不知道U9用这个把WAR3变网游后会怎么样),鉴于暗月的要求还是放出来了

以下是基本说明:

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[color=blue]JAPI添加本地函数 -- 基本文件操作函数[/color] -- RahXephon

和SOAR CHIN的文件读写补丁基本一样,使用时将下列函数添加到common.j当中,导入地图中改名为scripts\common.j,然后在地图中使用下列函数即可(在说明文件夹下有整合好的),当然进入游戏和WE都要使用目录下的loader程序

基本功能:可以实现在局域网游戏下进行文件的读写操作

//执行打开文件的操作,并返回文件句柄(fileid),filename为目标文件名,不存在的情况下自动生成(不使用路径情况下,默认为WAR3目录)
native War3FileOpen takes string filename returns integer

//执行关闭文件操作,释放文件句柄(fileid),关闭后文件不可被读写,fileid为War3FileOpen的返回值
native War3FileClose takes integer fileid returns nothing

//执行文件读取整数操作,返回值为当前文件读写指针所指向的整数
native War3ReadInt takes integer fileid returns integer

//执行文件读取实数操作,返回值为当前文件读写指针所指向的实数
native War3ReadReal takes integer fileid returns real

//执行文件读取字符串操作,返回值为当前文件读写指针所指向的字符串
native War3ReadString takes integer fileid returns string

//执行文件写入整数操作,value为待写入数据,写入前文件读写指针所指向的位置,返回值为1则操作成功
native War3WriteInt takes integer fileid, integer value returns integer

//执行文件写入实数操作,value为待写入数据,写入前文件读写指针所指向的位置,返回值为1则操作成功
native War3WriteReal takes integer fileid, real value returns integer

//执行文件写入字符串操作,value为待写入数据,写入前文件读写指针所指向的位置,返回值为1则操作成功
native War3WriteString takes integer fileid, string value returns integer

//执行移动当前文件读写指针位置操作,offset为偏移量,startpos为相对起始点(0:文件开始,1:当前指针位置,2:文件末尾),返回值为操作后指针位置
native War3FileSeek takes integer fileid, integer offset, integer startpos returns integer

//执行文件删除操作,删除指定文件filename,返回值为1则操作成功
native War3FileDelete takes string filename returns integer

在附加的演示地图中简单的写了几个封装函数,可以较简单的使用以上函数,同时也可作为函数使用范例

以上函数中和实数(real)类型相关的函数工作可能不正常,目前原因未知,初步估计和JAPI相关,有待改进

//系统日期和时间函数

native War3GetDay takes nothing returns integer   //返回日
native War3GetMon takes nothing returns integer   //返回月
native War3GetYear takes nothing returns integer  //返回年
native War3GetSec takes nothing returns integer   //返回秒
native War3GetMin takes nothing returns integer   //返回分
native War3GetHour takes nothing returns integer //返回时

//音乐播放函数

native War3MusicOpen takes string musicname returns integer //打开音乐
native War3MusicPlay takes nothing returns integer  //播放音乐
native War3MusicPause takes nothing returns integer  //暂停音乐
native War3MusicClose takes nothing returns integer  //关闭音乐

[[i] 本帖最后由 rahxephon 于 2008-2-20 20:26 编辑 [/i]]

feelerly 发表于 2008-2-15 15:14

先感谢Rex大大做这个补丁先.
这个补丁推广确实有些难呃~~~
实现War3读取磁盘文件, 对于开发联机存档有些帮助. 偶研究过单机存档, 目前对缓存的存档比较感兴趣.
对于实现War3"网游", 个人觉得没什么必要的, 做为研究可以深入, 但实现这个东西, 意义不大.

rahxephon 发表于 2008-2-15 18:36

恩,更新了,虽然知道这东西没什么人看,不过还是应该负责的改进已有BUG,现在使用最新的JAPI了,方便了很多,晚些时候写新JAPI的使用说明,填补目前网上没有任何介绍的空白- -

feelerly 发表于 2008-2-16 12:02

米办法的说~~~毕竟大家的技术还木有达到一定的高度, 看这个相当于看天书~~~不过以后肯定有人会研究这个的~~~

七夜的瞳 发表于 2008-2-16 12:54

素的 素的  我也来研究一下- -

shingoscar 发表于 2008-2-16 14:47

看了以后仍然一脸的迷茫

rahxephon 发表于 2008-2-16 20:14

恩,说得还是比较简略,刚开始看不明白很正常,其实就是加了几个WAR3没有的本地函数,把这些函数当普通的JASS函数用就行了

新添加日期和时间函数,本来还想加一个检测任意按钮按下和释放的事件(就像JASS本来就支持的方向键检测),不过后来发现这东西会造成数据不同步,只能单机用,也就没什么意义了......

shingoscar 发表于 2008-2-17 10:40

(葱头:28) 大哥,教教我这个怎么编出来的吧

龙小天 发表于 2008-2-17 11:29

u9要做war3网游?自主开发还是代理? 闷

rahxephon 发表于 2008-2-17 15:38

哦,估计U9又是几个脑残的家伙学会JAPI的使用后冒出来的注意,通过给WAR3添加一些网络函数,据说实现游戏玩家可以随时加入一张地图的功能(地图很大,大地图用我的WOW8助手就能做到),保存玩家数据到服务器之类,所以是自主开发,不过按我的理解这东西做出来也不一定有多少人玩

[[i] 本帖最后由 rahxephon 于 2008-2-17 16:34 编辑 [/i]]

rahxephon 发表于 2008-2-17 16:02

又更新了,可以播放任意类型音乐了,不过只能播放外部文件,MPQ内不行

feelerly 发表于 2008-2-17 18:47

:hi
强大的国能~~~~要是能播话MPQ内的音乐就好了~~~要不再来个播放影片之类的~~~(这个功能很耗的, 相当无用).~~~~呵呵~~目前, 还在研究这些功能中, 如果弄得好的话, 估计可以做出一套外部存档系统来的.

嘿咻┽猫 发表于 2008-2-18 12:35

天呐```
WE真是无所不能
人脑真是无所不能
看完以后觉得我太渺小了```

七夜的瞳 发表于 2008-2-19 10:31

看了老师的两篇文章  突然发现自己真的素太渺小- -

rahxephon 发表于 2008-2-20 20:26

再度修正文件读写实数的错误问题,原来WAR3在实数做参数时传进来的是指针- -......

堕落圣童 发表于 2008-2-20 20:39

[quote]原帖由 [i]七夜的瞳[/i] 于 2008-2-19 10:31 发表 [url=http://bbs.wow8.org/redirect.php?goto=findpost&pid=575091&ptid=47960][img]http://bbs.wow8.org/images/common/back.gif[/img][/url]
看了老师的两篇文章  突然发现自己真的素太渺小- - [/quote]
.........

feelerly 发表于 2008-2-22 19:32

这久有些忙的说~~~
感谢大大对偶的帮助和支持。
虽然, 要求大大帮偶做这个无法推广的东西, 有些浪费时间, 但我想以后, 或许不久将来, 总会有人接触到这方面。呵呵~~
说实在的, 做那个WOW8专业版编辑器,如果没有大大的帮助,可能不会那么成功地做出这款WE。 现在终于开始可以学习编程了。以后我会努力学习的。期待有一天能有小成~

261001126 发表于 2008-2-27 21:06

我一直期待的。。。。。

C基础太差。。。。。

感谢!

关注!

hke 发表于 2008-5-15 19:43

老R的东西不支持不行额

151373880 发表于 2008-6-25 06:24

RE

额...现在才看到..前段时间听某人提醒过...看了一下...目前推广是比较看..不过作为个人研究还是比较不错的...
研究去了...

151373880 发表于 2008-6-25 06:28

额...现在才看到..前段时间听某人提醒过...看了一下...目前推广是比较看..不过作为个人研究还是比较不错的...
研究去了...

wS敗類oU 发表于 2008-7-21 08:44

这个怎么用?

口支口支 发表于 2008-9-19 12:05

JAPI只是单机测试一下有用,联机用不了。

剑魔 发表于 2008-9-19 18:38

实在够呛。。。

firefly_hw 发表于 2008-9-21 11:50

辛苦LZ了
    来看看!~!~!~

22353255 发表于 2008-10-17 13:50

[quote]对于实现War3"网游", 个人觉得没什么必要的, 做为研 ... [/quote]
呵呵,就算改成了网游,这东西还是归暴雪的(葱头:03)

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.