找回密码
 点一下
查看: 2024|回复: 7

请教一下AttachObject()函数是怎么用的

[复制链接]
发表于 2007-10-26 15:39:23 | 显示全部楼层 |阅读模式
上次在这里下了张带AI的图,发现有AI控制的英雄身上都会有个“定时器”来定时运行AI函数体,条件是先将指定的AI绑定到英雄身上,AttachObject()有三个参数,本人菜菜,不能理解中间那个string类型的参数究竟是什么,有达人解释一下吗,顺便希望能具体讲讲AttachObject()是怎么用的哈,最好附个简单的程序什么的 谢谢先~
发表于 2007-10-26 16:26:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-10-26 17:03:18 | 显示全部楼层
function AILoop takes nothing returns nothing
endfunction

function StartAI takes unit hero returns nothing
    local timer m = CreateTimer()
    call AttachObject(m, "hero", hero)   
    call TimerStart(m, 0, false, function AILoop)
    set m = null
endfunction

程序如是

AI Tutorial Arena.w3x

43 KB, 下载次数: 23

回复

使用道具 举报

发表于 2007-10-26 18:47:26 | 显示全部楼层
我在everguo的基础上补充一下吧。

native StoreInteger takes gamecache cache,string missionKey,string key,integer value returns nothing

这是一个Blizzard的默认函数,它的作用是把一个整数存储进一个名为“cache”的游戏缓存里。因为一个缓存可以存储很多东西,为了不混淆,它会给存储的整数加一个文字索引 - missionKey,和一个自定义的字串 - key, 这个missionKey和key就是存储的整数的唯一标识。

本来这个函数只可以保存整数,用途不大。后来有某位高人发现了一个bug,就是著名的return bug,这个bug可以返回游戏中任何一个对象的整数内存地址。大家都知道,内存里放的东西,其整数内存地址都是唯一的,所以正好可以用来做  missionKey。加上这个bug还可以逆运算,通过给出的内存地址,得出该对象,所以只要我们在缓存里保存好所需对象的整数地址,就可以在任何需要的时候再把它拿出来。于是就有了everguo上面说的内容。
回复

使用道具 举报

发表于 2007-10-27 01:39:49 | 显示全部楼层
AttachObject()<--------------这个不是CJ函数,好像也不是BJ函数。
------------------------------------------------------------------------------------
此外,回复3楼的说明:

H2I返回的不是内存地址,而是类似内存地址的一个“War3地址”,好像该地址表示的是一个结构的初始War3存储单元位置。

曾经有人提出一个F2I的算法:

function F2I takes code f returns integer
    return f
    return 0
endfunction

这个好像是返回一个函数的执行指针,极有可能是内存地址。
回复

使用道具 举报

发表于 2007-10-27 01:46:26 | 显示全部楼层
同时补充一点。

每秒钟执行3000次以上StoreInteger()的操作会让机器开始卡,但是GetStoredInteger()每秒执行1w次以上才会卡。

但是每秒钟执行10w次set a = 10的操作机器仍然运行很流畅。

War3还有一个特性是在机器很卡的时候,部分运行数据会丢失。

测试图的原理是编写一个仇恨系统(用缓存做),为每个野生单位分配一个仇恨列表,并且在受到攻击的时候检索这个列表,判断如何操作。

当重复记录230~290个单位的仇恨数据的时候就会出现问题。
回复

使用道具 举报

 楼主| 发表于 2007-10-27 11:03:04 | 显示全部楼层
谢谢各位鸟,不过迷迷糊糊
回复

使用道具 举报

发表于 2007-10-29 19:53:47 | 显示全部楼层
eff好强啊,佩服一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-23 12:59 , Processed in 0.093438 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表