群英Ⅲ吧 关注:12,973贴子:215,569
  • 8回复贴,共1

关于调整触发必杀技时各必杀技选择顺序的代码

只看楼主收藏回复

游戏中必杀技的触发几率与武力及选择的必杀技数目成正比,但必杀技触发时各已选必杀技并不是等概率发动的,必杀技组合决定了必杀技触发时各必杀技发动的概率,这一点有网友@lastwisher已经注意到了,并总结出了规律,与代码相符。这里先介绍下游戏中的算法然后给出修改代码。
游戏中用1~8分别代表连刺、大喝、拖刀、气旋、挑斩、一击、生擒和乱舞,当触发必杀技后,游戏中先产生一个1~8的随机数,然后检测武将是否已选择该数对应的必杀技,若是,则发动此必杀技;若否,则该数加1后继续检测,当然若数已到8则下次检测从1开始;最多检测8次。可见这是一个循环检测,各必杀技依次压制下一个,大家可以自己分析出来。
比如大喝气旋的组合,二者的发动概率比值为6:2,具体而言随机数为5、6、7、8、1、2时选择结果均为大喝,只有随机数为3、4时选择结果才是气旋。再如大喝拖刀乱舞的组合,三者的发动概率比值为5:2:1。
有网友想调整必杀技选择时的顺序,现给出代码并说明如何按自己的喜好修改。
共修改三处代码,最左侧为修改地址,中间为二进制代码,右侧为指令,当然要用OllyDBG修改。
0045B722 E8 BD080A00 CALL 004FBFE4
004FBFE4 8B41 04 MOV EAX,DWORD PTR DS:[ECX+4]
004FBFE7 034424 04 ADD EAX,DWORD PTR SS:[ESP+4]
004FBFEB 0FB608 MOVZX ECX,BYTE PTR DS:[EAX]
004FBFEE 49 DEC ECX
004FBFEF 8D81 F8BF4F00 LEA EAX,DWORD PTR DS:[ECX+4FBFF8]
004FBFF5 C2 0400 RETN 4
004FBFF8 01 DB 01
004FBFF9 02 DB 02
004FBFFA 03 DB 03
004FBFFB 04 DB 04
004FBFFC 05 DB 05
004FBFFD 06 DB 06
004FBFFE 07 DB 07
004FBFFF 08 DB 08
注意:其中写着DB的在相应地址处应通过右键菜单中的"二进制编辑Binary---->编辑Edit"来写入。另外我这里没有修改顺序,大家自行修改,比如要交换挑斩(5)和一击(6)的顺序,只需要交换5和6的顺序即可。再如改为2、4、1、6、5、3、7、8则是乱舞压大喝、大喝压气旋、气旋压连刺、连刺压一击、一击压挑斩、挑斩压拖刀、拖刀压生擒、生擒压乱舞。
0043C696 74 12 JE SHORT Sango3_I.0043C6AA
0043C698 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
0043C69B 83EA 01 SUB EDX,1
0043C69E 0FB682 F8BF4F00 MOVZX EAX,BYTE PTR DS:[EDX+4FBFF8]
0043C6A5 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX
0043C6A8 EB 19 JMP SHORT Sango3_I.0043C6C3
0043C6AA 837D F4 08 CMP DWORD PTR SS:[EBP-C],8
0043C6AE 7C 07 JL SHORT Sango3_I.0043C6B7
0043C6B0 C745 F4 00000000 MOV DWORD PTR SS:[EBP-C],0
0043C6B7 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
0043C6BA 83C1 01 ADD ECX,1
0043C6BD 90 NOP
0043C6BE 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
0043C6C1 EB B1 JMP SHORT Sango3_I.0043C674
0043C6C3 837D F4 08 CMP DWORD PTR SS:[EBP-C],8
修改完后,分别选择三处修改后的代码,选择右键菜单的copy to executable----->selection,在最后跳出的窗口中选右键菜单中的save file保存文件,注意保存时另取一名称,以免覆盖原程序。


IP属地:山东1楼2023-11-02 12:03回复
    沙发🛋️,话说老哥能否把持有必杀,修改成可带7个以上。目前最多只能带6个,我改成7个,只要读取存档就报错……


    IP属地:广东来自Android客户端3楼2023-11-02 14:02
    收起回复
      学习了,我一直以为将必杀点亮了,就是一样的概率,如果特殊必杀,例如生擒不满足触发条件,就会增加另外两个的概率。


      IP属地:广东来自Android客户端4楼2023-11-02 15:27
      回复
        厉害


        IP属地:江苏来自iPhone客户端5楼2023-11-02 22:41
        回复


          IP属地:广东来自Android客户端9楼2023-11-04 01:07
          回复
            如果循环到生擒和挑战但不符合触发条件,是继续往下一个循环还是重新随机循环?


            IP属地:浙江来自Android客户端10楼2023-11-04 08:38
            收起回复