- 积分
- 34677
- 威望
- 499
- 魅力
- 507
- 经验
- 20326
- 热心度
- 9
- 注册时间
- 2006-3-13
- 最后登录
- 2024-9-30
- 主题
- 134
- 回帖
- 4949
- 精华
- 35
- 阅读权限
- 150
TA的每日心情 | 郁闷 2015-6-6 16:12 |
---|
签到天数: 52 天 连续签到: 1 天 [LV.5]女巫
超级版主
- 积分
- 34677
|
本帖最后由 贤知有您 于 2021-2-1 17:26 编辑
最近常和Archer30讨论erm脚本,其中有一个问题比较有趣。
问题:在战场第一回合,如何获得圣侏儒守卫的堆栈编号(比如用于调整守卫的数据)?
圣侏儒周围一圈会衍生出守卫来(放置生物),初看起来,要获取守卫只要检测圣侏儒周围一圈即可。
圣侏儒的守卫生物类型,只有2个要素,第一是英雄的所属,第二是塔楼的圣侏儒升级后守卫也会升级。
那么,判别侏儒守卫,只需要判定圣侏儒周围6格范围的坐标,及坐标上是否有对应的生物类型。
严谨著称的Archer30一眼就看出问题来,只要有战术的话,这种判断就不一定能生效。
这样一来,貌似还真没有一个准确处理的方式了。我想,也许只能用hook才能完美处理了。
结果在研究hook的时候,突然想起圣侏儒的守卫特征细节来。
当圣侏儒自身死亡后,它的守卫能够重新获得速度(开始时速度都是0),这个速度值是和守卫类型有关的。
既然游戏可以判别出哪个生物属于守卫,说明守卫是有一定的特征的(必定有数据记录)。
经过一番摸索终于找到了这个内部标志(数组结构),现摘录出来供大家参考。
(以下脚本使用了era2.8以上版本的循环语句,如果要用于era2.46需要把re的语法改为DO循环或者SN:G之类。)
- !?BR&v997=0; [在战场第一回合触发,此时圣侏儒守卫已经放置完毕]
- !!UN:C42336844/4/?y2; [获得圣侏儒守卫的堆栈的数量]
- !!VRy2:-1; [为方便循环写法,这里-1,后面循环从0开始]
- !!re y1/0/y2/1:;[遍历每队守卫]
- !!VRy4:Sy1*16+42013744; [内部数据结构的地址,每队守卫分别有4个数据]
- !!VRy5:Sy4+4; [数据分别是:源圣侏儒堆栈编号/守卫堆栈编号/守卫生物类型/守卫生物原始速度]
- !!VRy6:Sy4+8;
- !!VRy7:Sy4+12;
- !!UN:Cy4/4/?y14 Cy5/4/?y15 Cy6/4/?y16 Cy7/4/?y17; [获得数据的值]
- !!if&y14>=0/y14<42/y15>=0/y15<42:;[这里只是严谨性考虑的条件判断]
- !!IF:M^源圣侏儒堆栈编号=%Y14 ,守卫堆栈编号=%Y15 ,守卫生物类型=%Y16 ,守卫生物原始速度=%Y17^;
- <....这里放置你要处理的代码....>
- !!en:;
- !!en:;
复制代码
补充一下:
1.ERA3.1之后的版本BR触发器进行过改造,第0回合只触发一次。而旧版(比如era2.46)的第0回合有可能触发2次(跟战术有关),需要留意一下。
2.圣侏儒守卫的堆栈记录,只有在战斗开始时有效。在战斗期间,由于堆栈编号(相关数据)可能会被重新利用,不能保证准确性。
|
|