- 好友
- 0
- 在线时间
- 0 小时
- 最后登录
- 2024-3-22
见习骑士
- UID
- 3174756
- 第纳尔
- 332
- 精华
- 0
- 互助
- 15
- 荣誉
- 0
- 贡献
- 0
- 魅力
- 191
- 注册时间
- 2020-4-23
鲜花( 4) 鸡蛋( 0)
|
楼主 |
发表于 2024-2-16 13:44:58
|
显示全部楼层
本帖最后由 nmsnb111 于 2024-2-16 13:46 编辑
这次修改因为w跟网上根据原版文件给出的修改方法偏差实在太大,而且代码我确实也看不懂,所以昨天晚上和今天上午一直在研究站里大佬们发的反编译教学贴
还好电脑里py charm都没卸载,万万没想到玩个童年回忆的游戏能用上
接下来我也从代码上给大家解释一下:
- <font color="#000000">("cf_check_hero_can_escape_from_player",
- [
- (store_script_param_1, ":var_0"),</font>
- # 读取第一个参数,储存为局部变量0;结合下文。局部变量0第一个参数/是敌方领袖(没有特殊兵种的部队也会有以一个常规兵种作为领袖,就像野怪会有一个单位与我们对话)
- <font color="#000000"> (assign, ":var_1", 0),</font>
- # 将局部变量1赋值为0,以表示胜利的战斗是一场常规的交战
- # 下方开始的分支为判断是否非领主但有特殊领袖(指特殊存在和任务请求生成的单位)的部队
- <font color="#000000"> (try_begin),
- (check_quest_active, "qst_persuade_lords_to_make_peace"),</font>
- # 检测我们是否有请求求和的任务
- <font color="#000000"> (this_or_next|quest_slot_eq, "qst_persuade_lords_to_make_peace", 2, ":var_0"),</font>
- # 判断求和任务的对象是否是击败的敌方部队,这里进行了两次判断
- <font color="#000000"> (quest_slot_eq, "qst_persuade_lords_to_make_peace", 4, ":var_0"),</font>
- # 同样是判断求和任务的对象是否是这个敌方部队,似乎在这个变量槽中第2个和第4个值都可以进行检定
- <font color="#000000"> (assign, ":var_1", 1),</font>
- # 将局部变量1赋值为1,所以这场战斗将会有其他涉及,不再是常规战斗,不会进行后续的
- <font color="#000000"> (else_try),
- (ge, ":var_0", "trp_sea_raider_leader"),</font>
- # 这两个应该是任务触发的兵种?
- <font color="#000000"> (neg|ge, ":var_0", "trp_bandit_leaders_end"),</font>
- # 他们两个的兵种编号实际上是相邻的,这两行即是判断对方部队是否是这两个部队
- <font color="#000000"> (try_begin),
- (check_quest_active, "qst_learn_where_merchant_brother_is"),</font>
- # 判断寻找商人的任务是否触发
- <font color="#000000"> (assign, ":var_1", 1),</font>
- # 若触发,则给局部变量1赋值为1,在原版的module_scripts.py文件里看到将此值赋为1的后面有注释#always catched即总是抓捕
- <font color="#000000"> (else_try),
- (assign, ":var_1", -1),</font>
- # 若没有触发,则给局部变量1赋值为1,在原版的module_scripts.py文件里看到将此值赋为-1的后面有注释#always run.即总是逃脱
- <font color="#000000"> (try_end),</font>
- #总之这个分支是一个任务请求的判断,对我们需要的武将/将领俘虏基本没有影响
- <font color="#000000"> (try_end),</font>
- # 到此为止的分支为判断是否非领主但有特殊领袖的部队;如果是,局部变量1的值将会改变,则说明战斗是特殊的
- # 下方开始的分支为判断交战部队是否有领主;若有领主,以局部变量0的值为id的部队(即对方部队)变量槽中的第311个值应为1
- <font color="#000000"> (try_begin),
- (troop_slot_eq, ":var_0", 311, 1),
- (troop_set_slot, ":var_0", 311, 0),
- (try_end),</font>
- # 到此为止的分支为判断交战部队是否有领主;如果有,则会将以局部变量0的值为id的部队变量槽中的第311个值;我怀疑是与领主有关的变量)从1变为0,即移除对方部队中的领主,可能用于生成战斗结束后的溃军
- <font color="#000000"> (assign, ":var_2", 0),</font>
- # 将局部变量2赋值为0——我观察代码然后与游戏实测结合,如果在这个脚本操作列表运行完成后,这个局部变量2的值最终为1最终就能抓捕成功了
- # 以下是我们想要的武将捕获/逃脱概率的内容
- <font color="#000000"> (try_begin),
- (eq, ":var_1", 0),</font>
- # 若局部变量1的值仍为0,即是一场常规的交战
- <font color="#000000"> (eq, "$g_next_menu", "mnu_castle_taken"),</font>
- # 判断下一个界面是否是攻城,即确定这场战斗是否是攻城战
- <font color="#000000"> (store_random_in_range, ":var_3", <b><font color="#ff0000">75</font></b>, 100),</font>
- # 将局部变量3赋值为75到99中的随机数;将<font color="#ff0000"><b>75</b></font>改为<b><font color="#ff0000">99</font></b>,即可实现<b>攻城战必定俘虏</b>
- <font color="#000000"> (troop_get_slot, ":var_4", ":var_0", 312),</font>
- # 将局部变量0的值为id的部队变量槽中的第312个值赋值为局部变量4的值;由于module_constants.py里根本没有311和312号,可能是MOD制作时定义在某个文件里的,所以实在不能确定局部变量4是什么
- <font color="#000000"> (ge, ":var_3", ":var_4"),</font>
- # 判断局部变量3的值是否大于等于局部变量4的值;这里还有一个问题就是这里攻城战的代码分支根本就没有给局部变量2赋值啊,那应该是怎么样都抓不到的;不过游戏实测也是更容易抓到的,这段代码的结构还是不够理解
- <font color="#000000"> (else_try),
- (eq, ":var_1", 0),</font>
- # 若局部变量1的值仍为0,即是一场常规的交战
- <font color="#000000"> (store_random_in_range, ":var_3", <b><font color="#ff0000">0</font></b>, 100),</font>
- # 将局部变量3赋值为0到99中的随机数,这里就可以确定这个局部变量3就是与俘获相关的概率了,而且是<b>成功的概率</b>,所以越大越好,我们把
- <font color="#000000"> (troop_get_slot, ":var_4", ":var_0", 312),</font>
- # 将局部变量0的值为id的部队变量槽中的第312个值赋值为局部变量4的值;我怀疑这个局部变量4的值是这些武将本身的逃脱概率,可能是共用这一个值,所以实际上每个人逃脱的几率都一样
- <font color="#000000"> (neg|ge, ":var_3", ":var_4"),</font>
- # 判断局部变量3的值是否小于局部变量4的值;我不明白这里为什么要用neg反过来判断大小,总之实测之后应该把0改成99而不是改100改成1,就能实现野战必定俘虏了
- <font color="#000000"> (assign, ":var_2", 1),</font>
- # 将局部变量2赋值为1,赋值为1实际上就代表抓捕成功
- <font color="#000000"> (else_try),
- (eq, ":var_1", -1),</font>
- # 如果局部变量1的值为-1
- <font color="#000000"> (assign, ":var_2", 1),</font>
- # 将局部变量2赋值为1;看到这里其实我还是很疑惑的,可能局部变量2的值有别的含义,或者风云三国MOD去除了那个任务必定逃脱的设定
- <font color="#000000"> (try_end),
- (eq, ":var_2", 1),</font>
- # 这一行在try_end之后啊,应该根本就不触发才对;但是看代码结构,似乎跟攻城战的代码是接续的
-
- <font color="#000000">]),</font>
复制代码 这里要鸣谢站里留贴的大大们,虽然他们可能很久没有再玩这款游戏了,但是实在是启迪后生了,大有裨益
header_operations.py命令翻译20121226
大型伪技术文档:txt修改究竟是什么?(8.11 暂时完结)
|
|