打印

新地图的制做方法,还有些ACI的东西

本主题由 8787 于 2007-10-25 22:04 加入精华

新地图的制做方法,还有些ACI的东西

半年多了还没有人找出加新地图的方法,我说说我以前用的方法,不过我当时自己写的程序和ACI代码被我当年一气之下全删了,所以也没有什么现成的可以用的东西,只是凭记忆写写大概的过程

先把传奇三的地图提取出来,传奇三MAP文件的格式应该很多人都知道,前几个DW是字图长和宽,后面全是一个单元一个单元的数据,每单元数据里第几位不记的了是个能不能行走的标记。全提取出来,形成一个 ACI里叫BUFFER
大概是这么个意思
int x_len=**;
int y_len=**;
byte map_data=new byte[x_len * y_len+8]; //加8还是+4我记不太清了。DW加8 WORD 加4。自己找个解开看看就行了
map_data 前面的两个DW还是W我记不太清了。多试试吧,好象是DW
还有一个重要的区别 ACI的地图文件里的 高低位有些是反着的。可能是ACI天生带来的,把一个DW填为10时,有时要写 10 00 00 00 有时要写成 00 00 00 10 ,这个自己多试试吧,相信很多人已经做到这一步了。 最关键的一步就是把这个 BUFFER 用ACI自己的压缩方式压缩一下,再写到文件里,这样的一个一个文件就是组成 mir3_map.fs 的部件。不是有人已经把这个文件给分解开来了么,看看分解后的一个个文件,那就是经过压缩过的。 ACI里压缩和解压缩的函数是 compress() 和 decompress 函数原型我记不太清了,好象是  buffer compress(buffer) 自己多试试吧。
还有更简单的方式  load_map(string mir3_map_file) 可以直接把传奇三地图文件提取到ACI里,用这个函数可以让百宝箱直接使用传奇三的地图文件,我没试过,刚写的时候突然想到这个问题,有兴趣的可以试一下
对应的函数 save_map() 这个函数把已经load_map()的地图数据写到硬盘里,是压缩过的还是没有压缩过的我记不太清了

呵呵,说到这里,还有最后的一步,读写文件。这个我不知道有没有人能实现 read_file() 读二进制 read_file_ex() 读文本文件和 write_file() . 函数原型参考ANSI C。实在不行自己猜也就猜出来的,当时我也是猜出来的。

要想读写文件,必须要有255的权限,用正常的ACI是不行的。要用到另一个函数,可以越过 权限直接运行最高权限的脚本,run_script_from_server( (buffer) string) 好象是这样的,时间太久我也记不太清了

这样一路下来,应该没有什么问题了吧。至于加密的那些ZD文件,只不过是有一个文件头,用二UE 打开一看就知道了。有特殊文件头的。读入后面的数据然后 decompress() 就得到文本文件了。没有特殊文件头的,就当做明文处理。

如果是自己研究摸索出来的,拿去赚钱无可厚非,如果是看了上面我写的东西才搞出来的,那就不要拿去卖钱了,做好了拿出来共享一下吧。实在觉的亏,那就少少收一点吧。
就是这样子了,没啥好说的了,上面都说的很清楚了,有不明白的地方自己再研究吧,就不要再来问我了。

TOP

谢谢老牛了,BBX前途还是很光明的

TOP

ACI是可以编译的,不管你信不信。
BBX 采用的是 C/S 模式 看到的那个只是一个界面,不过是空壳罢了。界面的东西全在 gamebbx.dl 里 函数入口我记不太清了。自己找找就行了。能在内存里看到的那些明码的ACI 全是 gamebbx.dll里带的。
百宝箱运行时 先把 artifact.dll 载入内存 这就是虚拟机的内核。 artifact.dll 监听两个端口,一个是 等待gamebbx.dll连接的。一个是TELNET 端口。注意BBX3.0之前 TELNET端口是不自动打开的。要用函数才能打开,打开后 telnet ip port 就可以连接上了。TELNET 密码是 什么我不记的了。是三个字母,好象可以在打开TELNET的时候设定密码,具体我也记不太清了 函数可能是 telnet_on(int port , string tlnet_password)  ? 我也记不太清了。 通过TELNET 界面不受权限255的限制。 还有一个函数可以打开一个控制台 可惜太久我不记的了。同样,BBX还提供了访问系统注册表的功能。还有一系列的WINDOWS下的函数 比如 msg_box 还有一个可以输入的界面。BBX2.6下打开控制界面的是 宏 win 要求255权限 一样,这个界面也不受权限影响。而且这是一个调试信息输出的界面。ACI里 所有的调试信息都是输出到这个界面的。

想起什么再来写。

TOP

在BBX 2。6版本 artifact.dll中带着两个个文件,名字我忘记了。虚拟机一运行就执行这两个个编译过的ACI脚本,这两个文件才是内核,平常所用到的函数也全在里面,用UE打开就能找到所有的函数名了。因为编译过的ACI里函数名是不加密的。这两个文件名可以在内存中找到。直接 read_file(file_name) 再write_file()就可以把这两个文件保存下来了。

总的来说 BBX是个不错的开发外挂的平台,可惜就是没有一个好的调试器,所以写代码容易,写正确的代码就难了。因为用的虚拟机,所以要想用调试的方法来破这个平台,几乎是不可能的。要想破,只能用ACI来破。

接口
    那些什么on什么on什么的接口函数就不用说了,定时调用就是了。哈哈。ACI里也有C#的反射?可以判定变量和函数的类型等等。指针是不提供的,只可以传址。不过应该有函数指针,我也不会用
线程同步
    写ACI如果搞不好线程同步,基本上是废的。呵呵,没记错的话是用 create_event() 和 wait_event()  好象还有信号灯的函数 create_semphore()?
网络库
    ACI里也有标准的SOCKET实现。 socket() listen()  bind() receive() send()  send_to()? 可以支持TCP 和UDP
有兴趣可以用ACI来写外挂,除了调试的因素。呵呵。

TOP

好  贴
^_^

TOP

好 贴

就是没看懂,晕!!

TOP

老牛 希望你能重新出山 我们大家欢迎你 劈里啪啦~
给大家带来更好的东东 绝情你也只做了1层啊 呵呵

TOP

我在QQ里请教了你添加地图的事
你在这做了回应 真的很感谢你

TOP

认真拜读中~

TOP

哇。。好东西啊。。顶上去
看别人的帖子一定要回帖!发个“顶”字也是对别人的安慰和尊重!
[swf]http://www.56.com/p_25170477.swf[/swf]

TOP

老牛就是牛啊!
当初谁把不气的阿!呵呵
记得还帮过我呢!再次感谢中!呵呵
顶~

TOP

补充以下BBX都不叫用了
牛哥就别辛苦想了阿 呵呵

TOP

超级猛帖,感谢老牛分享~~

研究一下!!!

TOP

好贴啊,虽然不玩了还是要顶上去 ...
当岁月交给了你,你就成了岁月~!
           
                                   ——岁月!

TOP

看了好几遍!还是看不太懂!!

TOP

当前时区 GMT+8, 现在时间是 2008-10-11 23:35
新ICP备05002317号
Powered by Discuz! 6.0.0 © 2001-2007 Comsenz Inc.
Processed in 0.075302 second(s), 8 queries, Gzip enabled
TOP
清除 Cookies - 联系我们 - 网络游戏代理 - Archiver - - WAP
Designed By Discuz! 百宝箱论坛