佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
查看: 2841|回复: 5

【ERM】如何获取圣侏儒守卫的堆栈编号

[复制链接]
  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4949

    回帖

    3万

    金币

    35

    精华

    超级版主

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    34677

    论坛守望者论坛元老杰出贡献

     楼主| 发表于 2021-2-1 17:14:12 | 显示全部楼层 |阅读模式
    本帖最后由 贤知有您 于 2021-2-1 17:26 编辑

    最近常和Archer30讨论erm脚本,其中有一个问题比较有趣。
    问题:在战场第一回合,如何获得圣侏儒守卫的堆栈编号(比如用于调整守卫的数据)?

    圣侏儒周围一圈会衍生出守卫来(放置生物),初看起来,要获取守卫只要检测圣侏儒周围一圈即可。
    圣侏儒的守卫生物类型,只有2个要素,第一是英雄的所属,第二是塔楼的圣侏儒升级后守卫也会升级。
    那么,判别侏儒守卫,只需要判定圣侏儒周围6格范围的坐标,及坐标上是否有对应的生物类型。

    严谨著称的Archer30一眼就看出问题来,只要有战术的话,这种判断就不一定能生效。

    这样一来,貌似还真没有一个准确处理的方式了。我想,也许只能用hook才能完美处理了。
    结果在研究hook的时候,突然想起圣侏儒的守卫特征细节来。
    当圣侏儒自身死亡后,它的守卫能够重新获得速度(开始时速度都是0),这个速度值是和守卫类型有关的。
    既然游戏可以判别出哪个生物属于守卫,说明守卫是有一定的特征的(必定有数据记录)。
    经过一番摸索终于找到了这个内部标志(数组结构),现摘录出来供大家参考。

    (以下脚本使用了era2.8以上版本的循环语句,如果要用于era2.46需要把re的语法改为DO循环或者SN:G之类。)

    1. !?BR&v997=0; [在战场第一回合触发,此时圣侏儒守卫已经放置完毕]
    2. !!UN:C42336844/4/?y2; [获得圣侏儒守卫的堆栈的数量]
    3. !!VRy2:-1; [为方便循环写法,这里-1,后面循环从0开始]
    4. !!re y1/0/y2/1:;[遍历每队守卫]
    5.    !!VRy4:Sy1*16+42013744; [内部数据结构的地址,每队守卫分别有4个数据]
    6.    !!VRy5:Sy4+4; [数据分别是:源圣侏儒堆栈编号/守卫堆栈编号/守卫生物类型/守卫生物原始速度]
    7.    !!VRy6:Sy4+8;
    8.    !!VRy7:Sy4+12;
    9.    !!UN:Cy4/4/?y14 Cy5/4/?y15 Cy6/4/?y16 Cy7/4/?y17; [获得数据的值]
    10.    !!if&y14>=0/y14<42/y15>=0/y15<42:;[这里只是严谨性考虑的条件判断]
    11.      !!IF:M^源圣侏儒堆栈编号=%Y14 ,守卫堆栈编号=%Y15 ,守卫生物类型=%Y16 ,守卫生物原始速度=%Y17^;
    12.      <....这里放置你要处理的代码....>
    13.    !!en:;
    14. !!en:;
    复制代码


    补充一下:
    1.ERA3.1之后的版本BR触发器进行过改造,第0回合只触发一次。而旧版(比如era2.46)的第0回合有可能触发2次(跟战术有关),需要留意一下。
    2.圣侏儒守卫的堆栈记录,只有在战斗开始时有效。在战斗期间,由于堆栈编号(相关数据)可能会被重新利用,不能保证准确性。


     成长值: 14230

  • TA的每日心情
    郁闷
    2024-8-28 13:33
  • 签到天数: 1611 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    5754

    回帖

    3万

    金币

    9

    精华

    管理员

    ERA Project Team
    WoG俄文论坛版主

    Rank: 12Rank: 12Rank: 12

    积分
    105315

    社区QQ达人论坛守望者脚本测试狂杰出贡献年度明星魅力之星宣传部长

    发表于 2021-4-19 03:16:00 | 显示全部楼层
    这里贴一个用楼主的方式写好的圣诞妖精平衡性修改脚本。仅适用于ERA 3
    脚本的前面的变量数值(!#SN:W开头的语句)可以直接按照玩家需求进行设置(改变末尾的数字即可)。
    分别可以对圣诞守卫的生命值、攻击力、防御力、弹药量、施法次数和每个圣诞妖精的霹雳寒冰伤害值进行设置。
    1. ZVSE2
    2. *Set Santa Guards attributes here*
    3. *It detects the monsters around Santa Gremlins and changes their attributes*

    4. !#SN:W^Santas_guards_health^/2;
    5. !#SN:W^Santas_guards_attack^/2;
    6. !#SN:W^Santas_guards_defense^/2;
    7. !#SN:W^Santas_guards_shots^/1;        
    8. !#SN:W^Santas_guards_casts^/1;

    9. !#SN:W^Santas_damage_scaling^/5;        [Ice Bolt damage per unit]


    10. ****************************************************************************************************


    11. !?FU(santa_LoadGlobalConfig);

    12. !!VRi^Santas_guards_health^:F1/(INT_MAX);
    13. !!VRi^Santas_guards_attack^:F0/(INT_MAX);
    14. !!VRi^Santas_guards_defense^:F0/(INT_MAX);
    15. !!VRi^Santas_guards_shots^:F0/(INT_MAX);
    16. !!VRi^Santas_guards_casts^:F0/(INT_MAX);

    17. !!VRi^Santas_damage_scaling^:F0/(INT_MAX);

    18. !#FU(santa_LoadGlobalConfig);


    19. !?FU(OnBattleRound)&v997=0;
    20. !!UN:C42336844/4/?(value:y);               [Hawaiing's UN:C stuff, dunno]
    21. !!VR(value):-1;
    22. !!re i/0/(value)/1;
    23.   !!VR(stackSantaAdd:y):Si *16 +42013744;
    24.   !!VR(stackGuardAdd:y):S(stackSantaAdd)+4;
    25.   *!VR(monGuardAdd:y):S(stackSantaAdd)+8;  [mon type and original speed of guards, currently not needed]
    26.   *!VR(speedGuardAdd:y):S(stackSantaAdd)+12;
    27.   !!UN:C(stackGuardAdd)/4/?(stackGuard:y); [now we have stack ids of guards]
    28.   *!UN:C(stackSantaAdd)/4/?(stackSanta:y) C(monGuardAdd)/4/?(monGuard:y) C(speedGuardAdd)/4/?(speedGuard:y); [currently not needed]
    29.   !!if&(stackGuard)>=0/(stackGuard)<42;
    30.       *!IF:M^guard_stack=%(stackGuard)^;   [TEST ONLY. remove before release]
    31.       !!BM(stackGuard):Hi^Santas_guards_health^ Ai^Santas_guards_attack^ Di^Santas_guards_defense^;
    32.       !!BM(stackGuard):F?(flags:y) E?(casts:y);
    33.       !!VR(flags):&4;
    34.       !!BM(stackGuard)&(flags)=4:U3/i^Santas_guards_shots^;
    35.       !!BM(stackGuard)&(casts)>0:Ei^Santas_guards_casts^;
    36.   !!en;
    37. !!en;


    38. *Set the damage of the Ice Bolt attack from Santas*
    39. !?MR1;                                     [*Magical Combat Improvements*]

    40. !!BG:A?(action:y) N?(stack:y); [Get Action, Spell Number and Creature Number]
    41. !!BM(stack):T?(mon:y) N?(num:y);           [Get Creature Type and Number of Creatures]
    42. !!MR:F?(dmg:y);
    43. !!if&(action)=10/(mon)=173/(dmg)>0/(num)>0:; [If Santa Gremlins casting Ice Bolt]
    44.     !!VR(dmgNew:y):S(num) *i^Santas_damage_scaling^; [calc new damage]
    45.     !!MR:F(dmgNew);                        [Set new Damage]
    46. !!en:;
    复制代码






    点评

    我直接复制您的脚本后发现圣诞妖精的伤害没有改变;是不是第54行的 S?(spell:y) 语句无法检测到生物的施法编号?教程上写的是一般用于英雄施法,生物的话只能返回数值-1 然后我想试着用BM(stack):C?(spell:y)/d/d/d  详情 回复 发表于 2024-6-15 18:06
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-12-9 01:09
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]火元素使者

    1839

    回帖

    8223

    金币

    8

    精华

    版主

    Rank: 10Rank: 10Rank: 10

    积分
    10807

    社区QQ达人

    发表于 2021-2-2 00:03:52 | 显示全部楼层
    记下了,不过感觉不会用得上
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-13 15:03
  • 签到天数: 117 天

    连续签到: 2 天

    [LV.6]地狱战马

    261

    回帖

    6662

    金币

    0

    精华

    5级 Honorable Hero

    Rank: 5Rank: 5

    积分
    4330
    发表于 2021-2-2 09:02:13 | 显示全部楼层
    不明觉厉,敬仰敬仰
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-7-3 21:35
  • 签到天数: 66 天

    连续签到: 1 天

    [LV.6]地狱战马

    60

    回帖

    1万

    金币

    0

    精华

    4级 Famous Hero

    Rank: 4

    积分
    1390

    社区QQ达人

    发表于 2024-6-15 18:06:55 | 显示全部楼层
    Archer30 发表于 2021-4-19 03:16
    这里贴一个用楼主的方式写好的圣诞妖精平衡性修改脚本。仅适用于ERA 3。
    脚本的前面的变量数值(!#SN:W开 ...

    我直接复制您的脚本后发现圣诞妖精的伤害没有改变;是不是第54行的 S?(spell:y) 语句无法检测到生物的施法编号?教程上写的是一般用于英雄施法,生物的话只能返回数值-1
    然后我想试着用BM(stack):C?(spell:y)/d/d/d/d来检测生物施法,发现会报错提示BM:C的参数只能设置
    所以最后我只能删除(spell)=16这一段了,毕竟圣诞妖精施法种类只有一种


    点评

    这里不应该检查BG:S,你改的内容是对的  详情 回复 发表于 2024-6-15 22:45
    回复 支持 反对

    使用道具 举报

     成长值: 14230

  • TA的每日心情
    郁闷
    2024-8-28 13:33
  • 签到天数: 1611 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    5754

    回帖

    3万

    金币

    9

    精华

    管理员

    ERA Project Team
    WoG俄文论坛版主

    Rank: 12Rank: 12Rank: 12

    积分
    105315

    社区QQ达人论坛守望者脚本测试狂杰出贡献年度明星魅力之星宣传部长

    发表于 2024-6-15 22:45:21 | 显示全部楼层
    堕落尜尕 发表于 2024-6-15 18:06
    我直接复制您的脚本后发现圣诞妖精的伤害没有改变;是不是第54行的 S?(spell:y) 语句无法检测到生物的施 ...

    这里不应该检查BG:S,你改的内容是对的
    回复 支持 反对

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 英雄注册|Register

    本版积分规则

    捐赠
    关注我们,英3Mod一网打尽!

    WoG中文站 ( 辽B2-20210485-10 )|辽公网安备 21128202000228 号

    GMT+8, 2024-11-23 09:01 , Processed in 0.673932 second(s), 15 queries , Gzip On, File On.

    Powered by Discuz! X3.4

    Copyright © 2004-2022, Beijing Second Sight Technology Co., LTD.

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