完美单机155端gs修改:允许10次转生
最近找了一个单机版155端,看到某个SF支持10次转生,但本身155版只支持2次转生。
好奇之下就研究了一下GS修改,居然找到的S端源码,虽然有点老,但参考之下修改成功了。
使用IDA打开 gs 文件,要修改2处。
修改第1处:
.text:0821E97C ; ---------------------------------------------------------------------------
.text:0821E97C
.text:0821E97C loc_821E97C: ; CODE XREF: player_reincarnation::CheckCondition(void)+36↑j
.text:0821E97C sub esp, 0Ch
.text:0821E97F push [ebp+arg_0] ; this
.text:0821E982 call _ZN20player_reincarnation8GetTimesEv ; player_reincarnation::GetTimes(void)
.text:0821E987 add esp, 10h
// 源码是 if(GetTimes() >= REINCARNATION_TIMES_LIMIT) return false;
// 编译后优化为了 > 1 就返回 false
// 需要将这里的 cmp eax, 1 改为 cmp eax, 9
.text:0821E98A cmp eax, 1
.text:0821E98D jbe short loc_821E998
.text:0821E98F mov [ebp+var_10], 0
.text:0821E996 jmp short loc_821E9FD
.text:0821E998 ; ---------------------------------------------------------------------------
用16进制编译器定位到 0x0821E98A - 0x08048000 = 0x1D698A 处,将
75 08 E8 B9 34 E4 FF 83 C4 10 83 F8 01 改为
75 08 E8 B9 34 E4 FF 83 C4 10 83 F8 09。
修改第2处:
.text:0821EFF3 loc_821EFF3: ; CODE XREF: player_reincarnation::CheckActivateTome(void)+33↑j
.text:0821EFF3 sub esp, 0Ch
.text:0821EFF6 push [ebp+this]
.text:0821EFF9 call _ZNK5abase6vectorIN20player_reincarnation6RecordENS_13default_allocEE4sizeEv ; abase::vector<player_reincarnation::Record,abase::default_alloc>::size(void)
.text:0821EFFE add esp, 10h
// 源码是 if(_records.size() == REINCARNATION_TIMES_LIMIT)
// 所以将这里的 cmp eax, 2 改为 cmp eax, 0xA
.text:0821F001 cmp eax, 2
.text:0821F004 jnz short loc_821F05E
.text:0821F006 mov [ebp+var_5], 1
.text:0821F00A mov [ebp+var_C], 0
用16进制编译器定位到 0x0821F001 - 0x08048000 = 0x1D7001 处,将
10 83 F8 02 75 58 C6 45 FB 01 C7 45 F4 00 00 00 改为
10 83 F8 0A 75 58 C6 45 FB 01 C7 45 F4 00 00 00。
客户端不知道要不要修改,我直接用某SF的文件就成了。

浙公网安备 33010602011771号