佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
查看: 2758|回复: 2

冒险地图将DEF与英雄编号关联的例子

[复制链接]

该用户从未签到

152

回帖

7319

金币

6

精华

论坛嘉宾

Rank: 9Rank: 9Rank: 9

积分
759

退役版主

发表于 2017-12-21 20:07:41 | 显示全部楼层 |阅读模式
本帖最后由 sakuya452 于 2017-12-28 23:22 编辑

如果没啥BUG,我就和以前一样先跑路了

测试交给大家,多试久点,不急之前已知的与大型MOD封神同时使用下,进入一次战斗后,则下次载入地图(包括载入存档),就会crash的问题,稍微查了下,封神某脚本触发战斗时就将z802变量清0了..还用了z801变量空间,撞车撞的好巧,因此我更换下自己脚本的使用的z变量

最好测试时尽可能排除其它脚本的干扰,以减少因为脚本冲突而出错的可能性
  1. ZVSE

  2. **使用z809-z810的空间来记录新状态的数据,z811用于释放申请的内存,请勿作它用

  3. **首次PI或GM0前不触发,如果下一次会触发PI或GM0,则在PI或GM0前,且在清零v、z变量以及SN:W变量并释放其引用前触发
  4. !?FU56003;
  5. !!UN:C4715914/4/210209931;                      [帧逻辑还原部分1
  6. !!UN:C4715918/2/1;
  7. !!UN:C4715920/1/0;                              ]

  8. !!UN:C4715587/4/210144395;                      [帧逻辑还原部分2
  9. !!UN:C4715591/2/1;
  10. !!UN:C4715593/1/0;                              ]

  11. !!UN:C4716662/4/210144395;                      [帧逻辑还原部分3
  12. !!UN:C4716666/2/1;
  13. !!UN:C4716668/1/0;                              ]

  14. !!UN:C4261535/4/210209931;                      [帧逻辑还原部分4
  15. !!UN:C4261539/2/1;
  16. !!UN:C4261541/1/0;                              ]

  17. !!UN:C4260351/4/210209931;                      [帧逻辑还原部分5
  18. !!UN:C4260355/2/1;
  19. !!UN:C4260357/1/0;                              ]

  20. !!UN:C4260227/4/210732171;                      [帧逻辑还原部分6,改了就还原呗
  21. !!UN:C4260231/2/1;
  22. !!UN:C4260233/1/0;                              ]

  23. !!UN:C4261411/4/210732171;                      [帧逻辑还原部分7,改了就还原呗
  24. !!UN:C4261415/2/1;
  25. !!UN:C4261417/1/0;                              ]

  26. !!UN:C4223727/1/232;                            [载入逻辑还原
  27. !!UN:C4223728/4/1398476;                        ]

  28. !!UN:C4223759/1/232;                            [特殊处理还原
  29. !!UN:C4223760/4/943644;                         ]

  30. !!UN:C7677353/1/185;                            [跳转到z800的指令部分还原1
  31. !!UN:C7677354/4/42643408;                       ]

  32. !!UN:C5193633/1/232;                            [跳转到z800的指令部分还原2
  33. !!UN:C5193634/4/419818;                         ]

  34. !?PI;
  35. !!FU60000:P800801802;

  36. !?GM0;
  37. !!FU60000:P800801802;

  38. !?FU60000;
  39. !!FU&x1<>800801802:E;

  40. !!SN:L^Kernel32.dll^/?y1;
  41. !!SN:Ay1/^VirtualAlloc^/?y2 Ay1/^VirtualFree^/?y3;
  42. !!SN:L^angel.dll^/?y1;
  43. !!SN:Ay1/^SaveEventParams^/?y4 Ay1/^GenerateCustomErmEvent^/?y5 Ay1/^RestoreEventParams^/?y6;

  44. !!SN:Ey2/1/0/8192/1060864/64;
  45. !!FU&v1=0:E;
  46. !!SN:W^startAddress^/v1;
  47. !!SN:W^myOffsetAddress^/v1;
  48. !!SN:W^startAddress^/?y10;
  49. !!VRy20:Sy10+512;
  50. !!SN:W^defStartAddress^/y20;

  51. !!UN:C4715914/1/232;                            [帧逻辑修改部分1
  52. !!VRy9:Sy10-4715915-4;
  53. !!UN:C4715915/4/y9;
  54. !!UN:C4715919/2/37008;

  55. !!UN:Cy10/4/2329030994;
  56. !!VRy10:+4;
  57. !!UN:Cy10/4/210449491;
  58. !!VRy10:+4;
  59. !!UN:Cy10/1/149;
  60. !!VRy10:+1;
  61. !!UN:Cy10/4/y20;
  62. !!VRy10:+4;
  63. !!UN:Cy10/2/50010;
  64. !!VRy10:+2;                                     ]

  65. !!UN:C4715587/1/232;                            [帧逻辑修改部分2
  66. !!VRy9:Sy10-4715588-4;
  67. !!UN:C4715588/4/y9;
  68. !!UN:C4715592/2/37008;

  69. !!UN:Cy10/4/2329030994;
  70. !!VRy10:+4;
  71. !!UN:Cy10/4/210449495;
  72. !!VRy10:+4;
  73. !!UN:Cy10/1/149;
  74. !!VRy10:+1;
  75. !!UN:Cy10/4/y20;
  76. !!VRy10:+4;
  77. !!UN:Cy10/2/50010;
  78. !!VRy10:+2;                                     ]

  79. !!UN:C4716662/1/232;                            [帧逻辑修改部分3
  80. !!VRy9:Sy10-4716663-4-15;
  81. !!UN:C4716663/4/y9;
  82. !!UN:C4716667/2/37008;                          ]

  83. !!UN:C4261535/1/232;                            [帧逻辑修改部分4
  84. !!VRy9:Sy10-4261536-4;
  85. !!UN:C4261536/4/y9;
  86. !!UN:C4261540/2/37008;

  87. !!UN:Cy10/4/2329030994;
  88. !!VRy10:+4;
  89. !!UN:Cy10/4/210449494;
  90. !!VRy10:+4;
  91. !!UN:Cy10/1/149;
  92. !!VRy10:+1;
  93. !!UN:Cy10/4/y20;
  94. !!VRy10:+4;
  95. !!UN:Cy10/2/50010;
  96. !!VRy10:+2;                                     ]

  97. !!UN:C4260351/1/232;                            [帧逻辑修改部分5
  98. !!VRy9:Sy10-4260352-4-15;
  99. !!UN:C4260352/4/y9;
  100. !!UN:C4260356/2/37008;                          ]

  101. !!UN:C4260227/1/232;                            [帧逻辑修改部分6,感觉没啥影响,可以去掉测测
  102. !!VRy9:Sy10-4260228-4;
  103. !!UN:C4260228/4/y9;
  104. !!UN:C4260232/2/37008;

  105. !!UN:Cy10/4/2329030994;
  106. !!VRy10:+4;
  107. !!UN:Cy10/4/76231766;
  108. !!VRy10:+4;
  109. !!UN:Cy10/1/149;
  110. !!VRy10:+1;
  111. !!UN:Cy10/4/y20;
  112. !!VRy10:+4;
  113. !!UN:Cy10/2/50010;
  114. !!VRy10:+2;                                     ]

  115. !!UN:C4261411/1/232;                            [帧逻辑修改部分7,感觉没啥影响,可以去掉测测
  116. !!VRy9:Sy10-4261412-4-15;
  117. !!UN:C4261412/4/y9;
  118. !!UN:C4261416/2/37008;                          ]

  119. !!UN:C4223727/1/233;                            [载入英雄def资源时另存到自己的地址处,并为每个编号非特殊英雄分配一个地址
  120. !!VRy9:Sy10-4223728-4;
  121. !!UN:C4223728/4/y9;

  122. !!UN:Cy10/1/232;
  123. !!VRy10:+1;
  124. !!VRy9:S5622208-y10-4;
  125. !!UN:Cy10/4/y9;
  126. !!VRy10:+4;
  127. !!UN:Cy10/4/99008864;
  128. !!VRy10:+4;
  129. !!UN:Cy10/2/48781;
  130. !!VRy10:+2;
  131. !!UN:Cy10/4/y20;
  132. !!VRy10:+4;
  133. !!UN:Cy10/1/185;
  134. !!VRy10:+1;
  135. !!UN:Cy10/4/8;
  136. !!VRy10:+4;
  137. !!UN:Cy10/4/3915492339;
  138. !!VRy10:+4;
  139. !!VRy9:S4223732-y10-4;
  140. !!UN:Cy10/4/y9;
  141. !!VRy10:+4;                                     ]

  142. !!UN:C4223759/1/233;                            [处理编号中特殊英雄部分
  143. !!VRy9:Sy10-4223760-4;
  144. !!UN:C4223760/4/y9;

  145. !!UN:Cy10/2/41312;
  146. !!VRy10:+2;
  147. !!UN:Cy10/4/y20;
  148. !!VRy10:+4;
  149. !!UN:Cy10/1/163;
  150. !!VRy10:+1;
  151. !!VRy9:Sy20+576;
  152. !!UN:Cy10/4/y9;
  153. !!VRy10:+4;
  154. !!UN:Cy10/1/163;
  155. !!VRy10:+1;
  156. !!VRy9:Sy20+584;
  157. !!UN:Cy10/4/y9;
  158. !!VRy10:+4;
  159. !!UN:Cy10/1/163;
  160. !!VRy10:+1;
  161. !!VRy9:Sy20+608;
  162. !!UN:Cy10/4/y9;
  163. !!VRy10:+4;

  164. !!UN:Cy10/1/161;
  165. !!VRy10:+1;
  166. !!VRy9:Sy20+64;
  167. !!UN:Cy10/4/y9;
  168. !!VRy10:+4;
  169. !!UN:Cy10/1/163;
  170. !!VRy10:+1;
  171. !!VRy9:Sy20+592;
  172. !!UN:Cy10/4/y9;
  173. !!VRy10:+4;

  174. !!UN:Cy10/1/161;
  175. !!VRy10:+1;
  176. !!VRy9:Sy20+160;
  177. !!UN:Cy10/4/y9;
  178. !!VRy10:+4;
  179. !!UN:Cy10/1/163;
  180. !!VRy10:+1;
  181. !!VRy9:Sy20+588;
  182. !!UN:Cy10/4/y9;
  183. !!VRy10:+4;

  184. !!UN:Cy10/1/161;
  185. !!VRy10:+1;
  186. !!VRy9:Sy20+192;
  187. !!UN:Cy10/4/y9;
  188. !!VRy10:+4;
  189. !!UN:Cy10/1/163;
  190. !!VRy10:+1;
  191. !!VRy9:Sy20+620;
  192. !!UN:Cy10/4/y9;
  193. !!VRy10:+4;

  194. !!UN:Cy10/1/161;
  195. !!VRy10:+1;
  196. !!VRy9:Sy20+256;
  197. !!UN:Cy10/4/y9;
  198. !!VRy10:+4;
  199. !!UN:Cy10/1/163;
  200. !!VRy10:+1;
  201. !!VRy9:Sy20+600;
  202. !!UN:Cy10/4/y9;
  203. !!VRy10:+4;

  204. !!UN:Cy10/1/161;
  205. !!VRy10:+1;
  206. !!VRy9:Sy20+320;
  207. !!UN:Cy10/4/y9;
  208. !!VRy10:+4;
  209. !!UN:Cy10/1/163;
  210. !!VRy10:+1;
  211. !!VRy9:Sy20+604;
  212. !!UN:Cy10/4/y9;
  213. !!VRy10:+4;
  214. !!UN:Cy10/1/163;
  215. !!VRy10:+1;
  216. !!VRy9:Sy20+612;
  217. !!UN:Cy10/4/y9;
  218. !!VRy10:+4;

  219. !!UN:Cy10/1/161;
  220. !!VRy10:+1;
  221. !!VRy9:Sy20+384;
  222. !!UN:Cy10/4/y9;
  223. !!VRy10:+4;
  224. !!UN:Cy10/1/163;
  225. !!VRy10:+1;
  226. !!VRy9:Sy20+596;
  227. !!UN:Cy10/4/y9;
  228. !!VRy10:+4;
  229. !!UN:Cy10/1/163;
  230. !!VRy10:+1;
  231. !!VRy9:Sy20+616;
  232. !!UN:Cy10/4/y9;
  233. !!VRy10:+4;

  234. !!UN:Cy10/1/161;
  235. !!VRy10:+1;
  236. !!VRy9:Sy20+480;
  237. !!UN:Cy10/4/y9;
  238. !!VRy10:+4;
  239. !!UN:Cy10/1/163;
  240. !!VRy10:+1;
  241. !!VRy9:Sy20+580;
  242. !!UN:Cy10/4/y9;
  243. !!VRy10:+4;

  244. !!UN:Cy10/1/232;                                56002触发器部分,用于载入后还原数据
  245. !!VRy10:+1;
  246. !!VRy9:Sy4-y10-4;
  247. !!UN:Cy10/4/y9;
  248. !!VRy10:+4;
  249. !!UN:Cy10/1/104;
  250. !!VRy10:+1;
  251. !!UN:Cy10/4/56002;
  252. !!VRy10:+4;
  253. !!UN:Cy10/1/232;
  254. !!VRy10:+1;
  255. !!VRy9:Sy5-y10-4;
  256. !!UN:Cy10/4/y9;
  257. !!VRy10:+4;
  258. !!UN:Cy10/1/232;
  259. !!VRy10:+1;
  260. !!VRy9:Sy6-y10-4;
  261. !!UN:Cy10/4/y9;
  262. !!VRy10:+4;

  263. !!UN:Cy10/2/59489;
  264. !!VRy10:+2;
  265. !!VRy9:S5167408-y10-4;
  266. !!UN:Cy10/4/y9;
  267. !!VRy10:+4;
  268. !!UN:Cy10/1/233;
  269. !!VRy10:+1;
  270. !!VRy9:S4223764-y10-4;
  271. !!UN:Cy10/4/y9;
  272. !!VRy10:+4;                                     ]

  273. !!VRy10:S10012648;                              [z811变量空间

  274. !!UN:C7677353/1/233;                             载入地图时PI或GM0前释放内存部分
  275. !!VRy9:Sy10-7677354-4;
  276. !!UN:C7677354/4/y9;

  277. !!UN:Cy10/2/26720;
  278. !!VRy10:+2;
  279. !!UN:Cy10/4/32768;
  280. !!VRy10:+4;
  281. !!UN:Cy10/2/106;
  282. !!VRy10:+2;
  283. !!UN:Cy10/1/104;
  284. !!VRy10:+1;
  285. !!SN:W^startAddress^/?y9;
  286. !!UN:Cy10/4/y9;
  287. !!VRy10:+4;
  288. !!UN:Cy10/1/232;
  289. !!VRy10:+1;
  290. !!VRy9:Sy3-y10-4;
  291. !!UN:Cy10/4/y9;
  292. !!VRy10:+4;

  293. !!UN:Cy10/1/232;                                 56003触发器部分,用于载入地图时还原指令
  294. !!VRy10:+1;
  295. !!VRy9:Sy4-y10-4;
  296. !!UN:Cy10/4/y9;
  297. !!VRy10:+4;
  298. !!UN:Cy10/1/104;
  299. !!VRy10:+1;
  300. !!UN:Cy10/4/56003;
  301. !!VRy10:+4;
  302. !!UN:Cy10/1/232;
  303. !!VRy10:+1;
  304. !!VRy9:Sy5-y10-4;
  305. !!UN:Cy10/4/y9;
  306. !!VRy10:+4;
  307. !!UN:Cy10/1/232;
  308. !!VRy10:+1;
  309. !!VRy9:Sy6-y10-4;
  310. !!UN:Cy10/4/y9;
  311. !!VRy10:+4;
  312. !!UN:Cy10/2/47457;
  313. !!VRy10:+2;
  314. !!UN:Cy10/4/42643408;
  315. !!VRy10:+4;
  316. !!UN:Cy10/1/233;
  317. !!VRy10:+1;
  318. !!VRy9:S7677358-y10-4;
  319. !!UN:Cy10/4/y9;
  320. !!VRy10:+4;

  321. !!UN:C5193633/1/233;                             退出程序时执行的释放内存指令部分
  322. !!VRy9:Sy10-5193634-4;
  323. !!UN:C5193634/4/y9;

  324. !!UN:Cy10/1/232;
  325. !!VRy10:+1;
  326. !!VRy9:S5613456-y10-4;
  327. !!UN:Cy10/4/y9;
  328. !!VRy10:+4;
  329. !!UN:Cy10/2/26720;
  330. !!VRy10:+2;
  331. !!UN:Cy10/4/32768;
  332. !!VRy10:+4;
  333. !!UN:Cy10/2/106;
  334. !!VRy10:+2;
  335. !!UN:Cy10/1/104;
  336. !!VRy10:+1;
  337. !!SN:W^startAddress^/?y9;
  338. !!UN:Cy10/4/y9;
  339. !!VRy10:+4;
  340. !!UN:Cy10/1/232;
  341. !!VRy10:+1;
  342. !!VRy9:Sy3-y10-4;
  343. !!UN:Cy10/4/y9;
  344. !!VRy10:+4;
  345. !!UN:Cy10/2/59745;
  346. !!VRy10:+2;
  347. !!VRy9:S5193638-y10-4;
  348. !!UN:Cy10/4/y9;
  349. !!VRy10:+4;                                     ]

  350. **以上如无必要,请勿修改

  351. **载入18个原本的英雄def字符串资源后触发
  352. !?FU56002;
  353. !!VRy1:S10011624;                               z809地址
  354. !!SN:W^defStartAddress^/?y20;
  355. !!DO60001/0/155/1:Py1/y20;                      遍历英雄编号

  356. !?FU60001;
  357. !!VRy1:Sx16*4+x1;                               [按自己的逻辑使用z变量空间的值来还原状态,根据情况可能要扩大使用的z变量空间
  358. !!UN:Cy1/4/?y2;
  359. !!FU&y2=0:E;
  360. !!SN:E5622208/2/y2;
  361. !!VRy3:Sx16*4+x2;
  362. !!UN:Cy3/4/v1;                                  ]

  363. **冒险地图右键换欧灵和塞亚和姆拉克爵士def
  364. !?CM0;
  365. !!SN:W^defStartAddress^/?y20;     获取用于存放对应英雄编号的def的自己结构首地址
  366. !!VRy10:S10011624;                z809地址

  367. **绕个弯获取55C9C0函数所需的def字符串资源地址
  368. !!VRy1:S0 R17;                    18个英雄类型def
  369. !!VRy2:Sy1*4+6682024;             65F5A8开始的每4个字节,存放着 地图上英雄类型def字符串的地址,随机从18个中选一个
  370. !!UN:Cy2/4/?y3;                   从选到的指针处获取def字符串资源地址

  371. !!SN:E5622208/2/y3;               传递def字符串地址参数获取显示def依据的指针,存放在返回值中
  372. !!VRy5:S144*4+y20;                这个地址开始处的4字节是显示编号0的英雄def,再加4是编号1的,再多4就是下一个的,依次类推
  373. !!UN:Cy5/4/v1;                    修改姆拉克爵士def

  374. **将英雄编号与def字符串资源地址绑定的逻辑,为了载入时能还原状态,请务必在修改某编号英雄def后,
  375. **按逻辑在指定的z变量空间(本例中是z798-z799)中指定位置记录下来,如改了欧灵def(编号0),本例中
  376. **就是在(z798地址+(编号*4))处写入4字节数据(就是为了修改英雄def而调用55C9C0函数时传递的参数)
  377. !!VRy9:S144*4+y10;
  378. !!UN:Cy9/4/y3;

  379. **直接从字符串资源中选择,将其地址作为参数来调用55C9C0函数,在内存地址0065FF88附近都是def字符串资源,
  380. **根据情况可能会需要修改定位和还原逻辑
  381. **当然,不是所有def都能正确显示,要尽量符合英雄def的规范
  382. !!VRy1:S0 R2;
  383. !!VRy2:Sy1*12+6683928;            65FD18处是一种船,从3种船中选一个
  384. !!SN:E5622208/2/y2;               [修改欧灵def,传说中的沙漠之舟?
  385. !!VRy5:S0*4+y20;
  386. !!UN:Cy5/4/v1;                    ]

  387. !!VRy9:S0*4+y10;                  [同样记录下
  388. !!UN:Cy9/4/y2;                    ]

  389. **根据指定文件内存在的def文件名字符串(应该不区分大小写,以0为结束标志)替换,但暂且不保存,因为涉及还原逻辑的修改
  390. !!VRz812:S^avwazure.def^;
  391. !!SN:E5622208/2/10013160;         [修改塞亚def,嗯,这是只圣龙,10013160为z812变量地址
  392. !!VRy5:S13*4+y20;
  393. !!UN:Cy5/4/v1;                    ]
复制代码

评分

2

查看全部评分

  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4949

    回帖

    3万

    金币

    35

    精华

    超级版主

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

    积分
    34677

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

    发表于 2017-12-21 21:16:49 | 显示全部楼层
    哇靠,这么复杂,难怪我看不下去。

    给楼主大大的赞赏


    先记下来,有空就测试测试。
    感谢楼主的贡献
  • TA的每日心情
    慵懒
    2019-8-17 09:46
  • 签到天数: 1158 天

    连续签到: 2 天

    [LV.10]圣龙

    2万

    回帖

    91万

    金币

    7

    精华

    论坛嘉宾

    守望论坛的稻草人

    Rank: 9Rank: 9Rank: 9

    积分
    87641

    社区QQ达人论坛守望者金牌裁判杰出贡献魅力之星TE联赛冠军

    发表于 2017-12-22 12:00:38 | 显示全部楼层
    哥完全看不懂
    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 英雄注册|Register

    本版积分规则

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

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

    GMT+8, 2024-12-24 02:14 , Processed in 0.396957 second(s), 14 queries , Gzip On, File On.

    Powered by Discuz! X3.4

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

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