sakuya452 发表于 2013-11-30 07:47:49

增加两个触发器时点并整合以前的一些功能

本帖最后由 sakuya452 于 2014-1-3 14:50 编辑

必须要用更多时间去学习其他东西,所以对应的就没什么时间用在WOG上了

ERA新版本要是多个退出地图时的时点就好了,可以用来还原:)

利用全局Z变量在开始新地图游戏或载入存档时自动清空的特性,也可以在Z变量设置指令用于退出一个地图游戏时对注入的指令进行还原,这样可以省去频繁的修改了,但是目前这么少的脚本运行起来不怎么影响速度:)

ZVSE

**示例脚本
**不再使用程序中的既有内存空间,指令地址不会有冲突了(检查只要去检查指令本身就行),除非被人针对。
**不想用的去掉调用相关函数触发器的接收器命令就行,比如去掉死亡一击修复功能,则把所有含有死亡一击注释的接收器命令注释掉,触发器无所谓

!?PI;
!!SN:L^Kernel32.dll^/?y1;
!!SN:Ay1/^VirtualAlloc^/?y2 Ay1/^VirtualFree^/?y3;
!!SN:W^Kernel32.VirtualAlloc.Address^/y2 W^Kernel32.VirtualFree.Address^/y3;
!!SN:L^angel.dll^/?y1;
!!SN:Ay1/^SaveEventParams^/?y2 Ay1/^GenerateCustomErmEvent^/?y3 Ay1/^RestoreEventParams^/?y4;
!!SN:W^angeldll.Address^/y1 W^angel.SaveEventParams.Address^/y2 W^angel.GenerateCustomErmEvent.Address^/y3 W^angel.RestoreEventParams.Address^/y4;
!!SN:W^tempAddress^/0 W^firstAddress^/0;


!?GM0;
!!SN:L^Kernel32.dll^/?y1;
!!SN:Ay1/^VirtualAlloc^/?y2 Ay1/^VirtualFree^/?y3;
!!SN:W^Kernel32.VirtualAlloc.Address^/y2 W^Kernel32.VirtualFree.Address^/y3;
!!SN:L^angel.dll^/?y1;
!!SN:Ay1/^SaveEventParams^/?y2 Ay1/^GenerateCustomErmEvent^/?y3 Ay1/^RestoreEventParams^/?y4;
!!SN:W^angeldll.Address^/y1 W^angel.SaveEventParams.Address^/y2 W^angel.GenerateCustomErmEvent.Address^/y3 W^angel.RestoreEventParams.Address^/y4;
!!SN:W^tempAddress^/0 W^firstAddress^/0;

!?BF&1000;
!!SN:W^Kernel32.VirtualAlloc.Address^/?y1;
!!SN:Ey1/1/0/8192/1060864/64;
!!FU&v1=0:E;
!!SN:W^firstAddress^/v1;
!!SN:W^tempAddress^/v1;
!!FU60000:P1/1/0/0;                        死亡一击修复相关,和以前的例子不共用
*!FU60000:P2/1;                            更换魔法书中伤害显示所依据的力量系数,和以前的例子不共用
!!FU60000:P3/1;                            格挡降防修复2,和以前的例子2不共用,更正了以前例子2的一个错误
!!FU60000:P56000/1;                        56000触发器和56001触发器相关,和以前的例子不共用

!?BG0&1000;
!!SN:W^firstAddress^/?y1;
!!FU&y1=0:E;
!!FU60000:P1/1/1/0;                        死亡一击修复相关,和以前的例子不共用

!?BA53&1000;
!!SN:W^Kernel32.VirtualFree.Address^/?y1 W^firstAddress^/?y2;
!!FU&y2=0:E;
!!FU60000:P1/0;                           死亡一击修复相关,和以前的例子不共用
*!FU60000:P2/0;                           更换魔法书中伤害显示所依据的力量系数,和以前的例子不共用
!!FU60000:P3/0;                           格挡降防修复2,和以前的例子2不共用,更正了以前例子2的一个错误
!!FU60000:P56000/0;                     56000触发器和56001触发器相关,和以前的例子不共用
!!SN:Ey1/1/y2/0/32768;


**死亡一击修复相关,和以前的例子不共用
!?FU60000;
!!FU&x1<>1:E;
!!if&x2<>0:;
!!if&x3=0:;
    !!SN:W^tempAddress^/?y10 W^firstAddress^/?y11;
    !!VRy10&y10<>y11:+4;
    !!SN:W^stackDSchance.Address^/y10;
    !!VRy10:+46;
    !!UN:C4470497/1/233;
    !!VRy9:Sy10-4470498-4;
    !!UN:C4470498/4/y9;
    !!UN:C4470502/1/144;

    !!UN:Cy10/4/4171139923;
    !!VRy10:+4;
    !!UN:Cy10/4/2197815296;
    !!VRy10:+4;
    !!UN:Cy10/4/62654;
    !!VRy10:+4;
    !!UN:Cy10/4/57933824;
    !!VRy10:+4;
    !!UN:Cy10/4/974504835;
    !!VRy10:+4;
    !!UN:Cy10/1/131;
    !!VRy10:+1;
    !!SN:W^stackDSchance.Address^/?y9;
    !!UN:Cy10/4/y9;
    !!VRy10:+4;
    !!UN:Cy10/1/91;
    !!VRy10:+1;
    !!UN:Cy10/2/36623;
    !!VRy10:+2;
    !!VRy9:S4470926-y10-4;
    !!UN:Cy10/4/y9;
    !!VRy10:+4;
    !!UN:Cy10/1/233;
    !!VRy10:+1;
    !!VRy9:S4470503-y10-4;
    !!UN:Cy10/4/y9;
    !!VRy10:+5;
    !!SN:W^tempAddress^/y10;
!!el:;
    !!if&x4=0:;
      !!SN:W^stackDSchance.Address^/?y9;
      !!BG:A?y1;
      !!if|y1=6/y1=7:;
      !!BG:N?y2 E?y3;
      !!if&y2>-1/y2<42:;
          !!SN:W^stackDSchance^/0;
          !!VRy4:Sy2*-1-1;
          !!DO60000/6/13/1:P1/1/1/1/y4/0;               获取攻击单位死亡一击几率存到 stackDSchance中
          !!SN:W^stackDSchance^/?y10;
          !!VRy10&y10<0:S0;
          !!VRy10&y10>100:S100;
          !!VRy11:Sy2+y9;
          !!UN:Cy11/1/y10;
      !!en:;
      !!if&y3>-1/y3<42:;
          !!SN:W^stackDSchance^/0;
          !!VRy4:Sy3*-1-1;
          !!DO60000/6/13/1:P1/1/1/1/y4/0;                  获取被攻击单位死亡一击几率存到 stackDSchance中
          !!SN:W^stackDSchance^/?y10;
          !!VRy10&y10<0:S0;
          !!VRy10&y10>100:S100;
          !!VRy11:Sy3+y9;
          !!UN:Cy11/1/y10;
      !!en:;
      !!en:;
    !!el:;
      !!FU&x6<>0:E;
      !!EAx5:Bx16/?y21/?y22/d/d/d/d/d/d/d/d/d/d/d/d;
      !!FU|y21<>1/y22<>101:E;

      !!UN:C6919200/4/?y1;
      !!VRy2:Sx5*-1-1*1352+y1+21708;
      !!SN:E7455085/1/y2/1;
      !!UN:C8682900/4/?y3;

      !!EAx5&y3=0:Bx16/d/d/d/?y23/d/d/d/d/d/d/d/d/d/d;
      !!EAx5&y3=1:Bx16/d/d/d/d/?y23/d/d/d/d/d/d/d/d/d;
      !!EAx5&y3=2:Bx16/d/d/d/d/d/?y23/d/d/d/d/d/d/d/d;
      !!EAx5&y3=3:Bx16/d/d/d/d/d/d/?y23/d/d/d/d/d/d/d;
      !!EAx5&y3=4:Bx16/d/d/d/d/d/d/d/?y23/d/d/d/d/d/d;
      !!EAx5&y3=5:Bx16/d/d/d/d/d/d/d/d/?y23/d/d/d/d/d;
      !!EAx5&y3=6:Bx16/d/d/d/d/d/d/d/d/d/?y23/d/d/d/d;
      !!EAx5&y3=7:Bx16/d/d/d/d/d/d/d/d/d/d/?y23/d/d/d;
      !!EAx5&y3=8:Bx16/d/d/d/d/d/d/d/d/d/d/d/?y23/d/d;
      !!EAx5&y3=9:Bx16/d/d/d/d/d/d/d/d/d/d/d/d/?y23/d;
      !!EAx5&y3=10:Bx16/d/d/d/d/d/d/d/d/d/d/d/d/d/?y23;
      !!SN:W^stackDSchance^/y23;
      !!VRx6:S1;
    !!en:;
!!en:;
!!el:;
!!UN:C4470497/2/36623;
!!UN:C4470499/4/423;
!!en:;


**更换魔法书中伤害显示所依据的力量系数,和以前的例子不共用
!?FU60000;
!!FU&x1<>2:E;
!!if&x2<>0:;
!!SN:W^tempAddress^/?y10 W^firstAddress^/?y11;
!!VRy10&y10<>y11:+4;
!!SN:W^MDshow.Address^/y10;            在别的地方获取这个地址来赋值
!!VRy10:+6;
!!UN:C5881802/1/233;
!!VRy9:Sy10-5881803-4;
!!UN:C5881803/4/y9;
!!UN:C5881807/1/144;

!!UN:Cy10/1/161;
!!VRy10:+1;
!!SN:W^MDshow.Address^/?y9;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/4/91537541;
!!VRy10:+4;
!!UN:Cy10/1/233;
!!VRy10:+1;
!!VRy9:S5881831-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/4/75006346;
!!VRy10:+4;
!!UN:Cy10/2/0;
!!VRy10:+2;
!!UN:Cy10/1/233;
!!VRy10:+1;
!!VRy9:S5881808-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+5;
!!SN:W^tempAddress^/y10;
!!el:;
!!UN:C5881802/4/75006346;
!!UN:C5881806/2/0;
!!en:;


**格挡降防修复2,和以前的例子2不共用,更正了以前例子2的一个错误(由于疏忽,在变量赋值前就使用了它的值会导致崩溃)
!?FU60000;
!!FU&x1<>2:E;
!!if&x2<>0:;
!!SN:W^tempAddress^/?y10 W^firstAddress^/?y11;
!!VRy10&y10<>y11:+4;
!!SN:W^stackblockevent.Address^/y10;
!!VRy10:+46;
!!UN:C7456398/1/233;
!!VRy9:Sy10-7456399-4;
!!UN:C7456399/4/y9;
!!UN:C7456403/1/144;

!!UN:Cy10/4/4169239376;
!!VRy10:+4;
!!UN:Cy10/4/2197815296;
!!VRy10:+4;
!!UN:Cy10/4/62649;
!!VRy10:+4;
!!UN:Cy10/4/57933824;
!!VRy10:+4;
!!UN:Cy10/4/3323314307;
!!VRy10:+4;
!!UN:Cy10/1/128;
!!VRy10:+1;
!!SN:W^stackblockevent.Address^/?y9;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/1;
!!VRy10:+1;
!!UN:Cy10/2/59736;
!!VRy10:+2;
!!VRy9:S7456404-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;

!!UN:C4621928/1/233;
!!VRy9:Sy10-4621929-4;
!!UN:C4621929/4/y9;
!!UN:C4621933/1/144;

!!UN:Cy10/4/8491147;
!!VRy10:+4;
!!UN:Cy10/4/96862208;
!!VRy10:+4;
!!UN:Cy10/4/4621945;
!!VRy10:+4;
!!UN:Cy10/4/2559267587;
!!VRy10:+4;
!!UN:Cy10/4/245;
!!VRy10:+4;
!!UN:Cy10/4/15841411;
!!VRy10:+4;
!!UN:Cy10/4/1946157056;
!!VRy10:+4;
!!UN:Cy10/4/365134595;
!!VRy10:+4;
!!UN:Cy10/2/48000;
!!VRy10:+2;
!!SN:W^stackblockevent.Address^/?y9;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/4/4145443840;
!!VRy10:+4;
!!UN:Cy10/4/194;
!!VRy10:+4;
!!UN:Cy10/4/3322377480;
!!VRy10:+4;
!!UN:Cy10/4/1183217925;
!!VRy10:+4;
!!UN:Cy10/4/2210792448;
!!VRy10:+4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/0;
!!VRy10:+1;
!!UN:Cy10/2/59739;
!!VRy10:+2;
!!VRy9:S4621934-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+5;
!!SN:W^tempAddress^/y10;
!!el:;
!!UN:C7456398/4/51841;
!!UN:C7456402/2/2048;
!!UN:C4621928/4/8491147;
!!UN:C4621932/2/0;
!!UN:C4621945/1/3;
!!en:;


**56000触发器和56001触发器相关,和以前的例子不共用,56001增加一个函数参数,用于检查单位的当次行动结束时是否表示回合结束
**(0是,1否,从1改为0的话会立即开始新回合,从0改为1的话未检查效果,最好只用于检查)

**1.FU77006和FU77007是在下一个行动单位的处理函数中获得可以行动的单位后才会被调
**用的,没有可行动的单位则调用新回合处理函数做一些必要处理,然后调用新回合
**开始后的首次行动处理函数来决定行动单位(这两个调用的都是同一个函数,只不过前一个
**的时点是在任意单位行动后调用,后一个只在每个回合开始时,调用一次)

**2.战斗中增加 FU56000(在MF1之后,完成士气判定后,BR前,FU77006前,以及在调用
**下一个行动单位处理函数前触发,新回合开始后的首次行动处理函数调用时不会触发)
**和FU56001(在调用下一个行动单位处理函数后调用新回合处理函数前触发,新回合开始后的
**首次行动处理函数调用时同FU56000不触发,如果有可以进行行动的单位,则在该回合
**FU77007后触发)触发器

**3.FU56000做一些相应处理,FU56001用来做一些还原处理。例,要让一个单位在下一个
**行动单位的处理函数中通过检查获得行动权,就要处理一些相关标志(如去掉结束标志,
**等待标志等,等待标志不去掉的话,在非等待处理阶段时是不会通过检查的),以及临时
**提高速度到全场最大(?,其中等待的处理过程忘记了,所以是问号),FU56001就是用来
**还原速度以及做一些其他事

**4.这两个新增触发器应该和其他战斗触发器可用的接收器一致
!?FU60000;
!!FU&x1<>56000/x1<>56001:E;
!!if&x2<>0:;
!!SN:W^angeldll.Address^/?y1 W^angel.SaveEventParams.Address^/?y2 W^angel.GenerateCustomErmEvent.Address^/?y3 W^angel.RestoreEventParams.Address^/?y4;
!!FU|y2<=0/y3<=0/y4<=0:E;
!!SN:W^tempAddress^/?y10 W^firstAddress^/?y11;
!!VRy10&y10<>y11:+4;
!!UN:C4691363/1/233;
!!VRy9:Sy10-4691364-4;
!!UN:C4691364/4/y9;

!!UN:Cy10/2/59488;
!!VRy10:+2;
!!VRy9:Sy2-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/104;
!!VRy10:+1;
!!UN:Cy10/4/56000;                            修改这个值可以更换触发的触发器号
!!VRy10:+4;
!!UN:Cy10/1/232;
!!VRy10:+1;
!!VRy9:Sy3-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/24673;
!!VRy10:+2;
!!UN:Cy10/1/232;
!!VRy10:+1;
!!VRy9:Sy4-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/59489;
!!VRy10:+2;
!!VRy9:S4607072-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/20576;
!!VRy10:+2;
!!UN:Cy10/1/232;
!!VRy10:+1;
!!VRy9:Sy2-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/1423;
!!VRy10:+2;
!!VRy9:Sy1+1079044;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/104;
!!VRy10:+1;
!!UN:Cy10/4/56001;                            修改这个值可以更换触发的触发器号
!!VRy10:+4;
!!UN:Cy10/1/232;
!!VRy10:+1;
!!VRy9:Sy3-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/41313;
!!VRy10:+2;
!!VRy9:Sy1+1079044;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/59488;
!!VRy10:+2;
!!VRy9:Sy4-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/59745;
!!VRy10:+2;
!!VRy9:S4691368-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+6;
!!SN:W^tempAddress^/y10;
!!el:;
!!UN:C4691363/1/232;
!!UN:C4691364/4/4294883000;
!!en:;




以下是一个戟兵移动或移动且攻击后多次行动的例子 @沧海一粟 ,应该能满足你的需求。也可以在FU56000中找一个没有不能行动的异常状态单位做桥,在FU77006中转移控制权。多次行动有视恐惧的方法,就要先让单位有无惧或者让恐惧判定临时失效,然后自己模拟几率恐惧,触发自己模拟的恐惧时,行动计数减1,同时播放恐惧受伤动画。反正触发器给出了,怎么实现就要自己多想想

ZVSE
**调整了下测试用例

!?BF&1000;
!!SN:W^tempStack^/-1 W^tempSpeed^/-1 W^tempFlag^/0;

!?BG0&1000;
!!SN:W^tempAction^/-1;
!!BG:N?y1 A?y2;
!!BMy1:T?y3;
!!SN&y3=1:W^tempAction^/y2;

**脚本新增,同FU77006和FU77007之类的自定义触发器有些参数不能正确获取,比如堆栈之前的行动命令编号,猜测是内部指令在BG0中用完后就清0了
**有一点要说明,要让防御单位再动,必须要删除其防御标志(同时防御力减去其获得的防御奖励数值),不然会陷入无限再动的死循环(生物标志造成的),这不是以上脚本带来的,而是程序原来的算法机制的问题
**还有一个例外,恐惧是在单位的行动处理函数里检查的,由于其中条件跳转结构影响,不方便进行自定义处理(一个时点总有它方便和不方便处理的地方,如同FU77006之类的一样)。这个的影响是,要给予行动优先权的单位或做桥的单位此时会成为全场最后一个行动的单位情况下,若触发了恐惧,那就必定要跳回合了,一般的做法让其“无惧”
!?FU56000&1000;
!!SN:W^tempStack^/-1 W^tempSpeed^/-1 W^tempFlag^/0;    tempFlag标志表示是否在FU56000对目标进行过处理
!!SN:W^tempAction^/?y2;
!!BG:N?y1;                                        [一些FU77006或FU77007中可以获取的参数值也可以在这里获取,不包括函数参数(获取或设置都是未定义的值,在这个时点没什么有价值的可用参数,所以我去掉了 ,很多时候只要知道地址,就可以用UN:C来获取必要的参数,它是目前ERM/ERA中的万能接收器),当然在BG0中获取并记录比较好
!!BMy1:T?y3 F?y4 N?y5;                            ]
!!if&y3=1/y5>0:;       测试用例只考虑简单条件,实际用的时候自行检查相关异常状态等。之前的复合条件“与”和“或”的问题多多,现在分开来
!!if|y2=6/y2=2:;
    !!VRy4:&-67108865;
    !!BMy1:Fy4 S?y6 S9999;
    !!SN:W^tempStack^/y1 W^tempSpeed^/y6 W^tempFlag^/1;
!!en:;
!!en:;

!?FU77006&1000;   如能正常获得行动权,就在这里还原速度等参数,不然会有移动格数显示问题
!!SN:W^tempStack^/?y1 W^tempSpeed^/?y2 W^tempFlag^/?y3;
!!if&y3=1:;
!!BMy1:Sy2;
!!en:;

**脚本新增,同FU77006和FU77007之类的自定义触发器有些参数不能正确获取,比如堆栈之前的行动命令编号,猜测是内部指令在BG0中用完后就清0了
!?FU56001&1000;   如恐惧时新回合前的FU77006就得不到调用,这里作为最终还原点,也可以在FU56000中给目标单位临时添加无惧
!!SN:W^tempStack^/?y1 W^tempSpeed^/?y2 W^tempFlag^/?y3;
!!if&y3=1:;
!!BMy1:Sy2;
!!SN:W^tempSpeed^/-1 W^tempSpeed^/-1 W^tempFlag^/0;
!!en:;

贤知有您 发表于 2013-11-30 10:17:07

非常佩服楼主的脚本.
我有个疑问,如果在这种新触发器中,使用一些特殊语句,改变了原本正常运行的流程, 会不会发生不可预料的情况.

不过楼主倒是提供了一个构建新触发器的方法,值得借鉴.

sakuya452 发表于 2013-11-30 14:03:15

本帖最后由 sakuya452 于 2013-11-30 15:17 编辑

贤知有您 发表于 2013-11-30 10:17
非常佩服楼主的脚本.
我有个疑问,如果在这种新触发器中,使用一些特殊语句,改变了原本正常运行的流程, 会不 ...
原触发器没什么问题,用这种新触发器也应该不会有问题,当然前提是在脚本地址不冲突的情况下(所有这类脚本的大前提,甚至是一些SN:E的前提,因为也有使用或操作内存地址的SN:E,比如你的可指定堆栈的魔法动画效果,使用了V变量所在的地址,用UN:C修改对应V变量地址的值也能达到同样效果或者造成逻辑错误或者直接出错,只需要和平常一样说下,在动画前不要使用对应的V变量/地址就行了),其实WOG已为我们提供了这类脚本现成的使用空间,就是全局Z变量所在的内存地址空间,一个Z变量占用512字节,指令注入的好,都可以完成一个或几个功能了,用5合1中的工具可以查到全局Z变量的起始地址。

反正全局Z变量不常用,留着也是留着,拿来用,可以省去学习内存分配和释放的相关知识,以及一些需要LoadLibrary的情况,对虚拟内存地址和分配机制不了解的话,建议首选Z变量来使用和练习,然后看看自己注入的指令用了多少个字节,占用了哪些Z变量,占用Z变量的一部分也算占用一个,剩余部分以后还可以自己规划使用,例,超出512字节就算占用了2个或以上(超过1024字节)等

看懂的话,以后你想添加多少个自定义触发器以及带几个参数都没问题,靠你了

;jx;最后,说这类脚本是娱乐的,多是因为破坏平衡相对较严重,而不是怕占用或被占用地址,因为上述原因,都可以移动到Z变量空间作为正常脚本应用,甚至做成通用脚本,当然也要求注入的指令运行过程不会出现意外错误(就如同ERM/ERA的语法错误或值范围错误等等),还要对功能的实现做出一些选择(就算有1000个Z变量,考虑到ERM/ERA脚本要使用一些的情况,数量还是相对较少的,虽然已经可以实现很多个精悍的功能了,节约是好事)

贤知有您 发表于 2013-11-30 17:12:18

sakuya452 发表于 2013-11-30 14:03
原触发器没什么问题,用这种新触发器也应该不会有问题,当然前提是在脚本地址不冲突的情况下(所有这类脚 ...

感谢楼主的解答.
而且我发现可以从你的代码和汇编中学到很多.非常感谢.

听楼主的语气貌似不想再对WOG上消磨更多时间.
我们很诚恳地希望楼主可以继续研究,给我们带来更多有趣的发现或功能.

sakuya452 发表于 2013-11-30 19:08:26

本帖最后由 sakuya452 于 2013-11-30 19:13 编辑

贤知有您 发表于 2013-11-30 17:12
感谢楼主的解答.
而且我发现可以从你的代码和汇编中学到很多.非常感谢.


不要猜疑太多,我要学的东西太多,精力实在有限,毕竟以后要靠其他技能吃饭的,所以不能总是在WOG上花费时间。我都会尽量用一些相对容易理解的逻辑来写脚本或汇编指令,以让更多人容易掌握些

我也获得了你不少的帮助,多谢指教啦;hap;稳定了或有空还是会回来继续研究的,不用强求,自由些对大家都好;hap;而且也基本做完了沧海版主的需求,没啥事了:deyi:

兽哥哥 发表于 2013-11-30 20:48:30

有时间就回来逛逛,大家都是有生活的,搞论坛都是利用的业余时间,能理解。但是不要说再见。;go;

renlinfeng 发表于 2013-11-30 20:50:59

;juwe;我很惭愧因为长时间不来竟然不认识楼主大神这号存在

沧海一粟 发表于 2013-12-2 17:50:32

谢谢楼主的分享,这几天工作多,一直没时间上来回复,实在不好意思。
新触发器...只能无法用语言表达的强悍!实在太强悍了。
老的例子我测试过了,其中两个问题楼主已经说明并解决,一个是动作参数的获取问题(貌似攻击目标堆栈这些获取不了,还有就是有些生物动作参数不准确,即使用固定变量去获取好像也会不准确),二是例子中关于防御标志生物的问题,除了正常的士气,防御生物是不能给再动标志的,如果再次还是别减直接禁了,因为防御后的生物会临时加防御,如果减去了防御标志防御力就变成固定增加了,不公平,呵呵),三是感觉士气会在新触发器前触发,如果再动刚好触发士气就直接不动了,四是这个触发器有点类似全局性的改变,即使改变了生物类型,比如枪兵换成其它生物后不退出游戏直接重开,枪兵一样会有再动能力,感觉不是很好控制。
还是真诚 地楼主有空能多来论坛,为我们这些WOG爱好者们多奉献如此精彩绝伦的作品,像楼主这样的热心又极其专业的人士真的不多啊。另外,弱弱地说句,我们的兽管理猿已经把楼主前期的作品直接推销到HC论坛去了,是吧——洛基?

sakuya452 发表于 2013-12-2 18:14:36

本帖最后由 sakuya452 于 2017-12-8 18:04 编辑

沧海一粟 发表于 2013-12-2 17:50
谢谢楼主的分享,这几天工作多,一直没时间上来回复,实在不好意思。
新触发器...只能无法用语言表达的强 ...
千万不要这样,每个人的价值观不同,不能强加的。他们有需求会自己解决,要么就来这边查资料。:shangxin:别的我不理,至少不要推销我的

防御单位再动已经说明了,防御力要同时减去其获得的防御奖励数值。士气标志也可以在56000中进行检查和控制(给予其它单位行动优先权前首先要确认当前单位已行动完毕,多次行动的也要确认它是否士气或者死亡等),不会有你说的士气影响不动的问题(如果有请举例说明,我会去检查问题在哪),最后一个,你说的改变了生物类型(同样的怎么改,也请和我说一下,我会去检查),肯定改的不是生物的类型编号,因为我的例子中用的生物类型编号做条件检查的,自然就一样通过检查。战场生物类型的编号是否改变,请检查堆栈地址+34(16进制) 中4字节的值

更多的问题,还需要了解这个时点上程序更多的细节才能正确处理

其实,我还想写一篇附注贴子作前置说明的。不过就写些简单的在这吧,应该也够了

songfx 发表于 2013-12-2 18:41:01

我只想说,我赶上好时候了。看到有人教有人学有人分享有人反馈。天时地利人和,你们都是游戏和论坛的福星。

ma6620 发表于 2013-12-2 18:53:58

                                                
学习一下

blacksolar 发表于 2015-5-24 15:27:38

新人膜拜下高手,努力学习,争取能看懂。;om;
页: [1]
查看完整版本: 增加两个触发器时点并整合以前的一些功能

捐赠