Board logo

标题: HP回复类策略的计算 [打印本页]

作者: godtype    时间: 2008-11-5 22:05     标题: HP回复类策略的计算

趁这几天家中病人的情况稍有好转,有了一些空闲时间,研究了一下之前一直想修改的HP回复类策略,包括HP回复量的公式和哪些策略可以进行HP回复。高人可以无视本帖。
0043C548  /$ 55                   PUSH EBP
0043C549  |. 8BEC                 MOV EBP,ESP
0043C54B  |. 83EC 10              SUB ESP,10
0043C54E  |. 56                   PUSH ESI
0043C54F  |. 894D F4              MOV DWORD PTR SS:[EBP-C],ECX
0043C552  |. 8B45 F4              MOV EAX,DWORD PTR SS:[EBP-C]
0043C555  |. 8B08                 MOV ECX,DWORD PTR DS:[EAX]
0043C557  |. 6BC9 48              IMUL ECX,ECX,48
0043C55A  |. 81C1 0000D600        ADD ECX,0D60000
0043C560  |. 894D F8              MOV DWORD PTR SS:[EBP-8],ECX
0043C563  |. C745 FC 00000000     MOV DWORD PTR SS:[EBP-4],0
0043C56A  |. 8B55 08              MOV EDX,DWORD PTR SS:[EBP+8]
0043C56D  |. 81E2 FF000000        AND EDX,0FF
0043C573  |. 8955 F0              MOV DWORD PTR SS:[EBP-10],EDX
0043C576  |. 8B45 F0              MOV EAX,DWORD PTR SS:[EBP-10]
0043C579  |. 83E8 26              SUB EAX,26  ——减去编号26之前的策略
0043C57C  |. 8945 F0              MOV DWORD PTR SS:[EBP-10],EAX
0043C57F  |. 837D F0 1D           CMP DWORD PTR SS:[EBP-10],1D  ——比较一下是否最后一条策略(即原白虎,白虎编号43,43h-26h=1Dh)
0043C583  |. 0F87 FA000000        JA 0043C683
0043C589  |. 8B55 F0              MOV EDX,DWORD PTR SS:[EBP-10]
0043C58C  |. 33C9                 XOR ECX,ECX
0043C58E  |. 8A8A 1AC74300        MOV CL,BYTE PTR DS:[EDX+43C71A]
0043C594  |. FF248D F6C64300      JMP DWORD PTR DS:[ECX*4+43C6F6]

0043C59B  |> 8B4D 0C              MOV ECX,DWORD PTR SS:[EBP+C]
0043C59E  |. 81E1 FF000000        AND ECX,0FF
0043C5A4  |. 6BC9 24              IMUL ECX,ECX,24
0043C5A7  |. 81C1 502C4B00        ADD ECX,004B2C50
0043C5AD  |. E8 31300000          CALL 0043F5E3
0043C5B2  |. 33D2                 XOR EDX,EDX
0043C5B4  |. B9 0A000000          MOV ECX,0A
0043C5B9  |. F7F1                 DIV ECX
0043C5BB  |. 83C0 28              ADD EAX,28

以上红色部分就是小补给和援队的回复量计算,即精神力/10+40
0043C5BE  |. 8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
0043C5C1  |. 837D 10 00           CMP DWORD PTR SS:[EBP+10],0
0043C5C5  |. 75 2F                JNZ SHORT 0043C5F6
0043C5C7  |. 8B4D F4              MOV ECX,DWORD PTR SS:[EBP-C]
0043C5CA  |. E8 B0300000          CALL 0043F67F
0043C5CF  |. 8BF0                 MOV ESI,EAX
0043C5D1  |. 68 C8000000          PUSH 0C8                                 ; /Arg1 = 000000C8
0043C5D6  |. E8 38350400          CALL 0047FB13                     ; \0047FB13
0043C5DB  |. 83C4 04              ADD ESP,4
0043C5DE  |. 3BF0                 CMP ESI,EAX
0043C5E0  |. 76 14                JBE SHORT 0043C5F6
0043C5E2  |. 6A 06                PUSH 6                                   ; /Arg1 = 00000006
0043C5E4  |. E8 2A350400          CALL 0047FB13                     ; \0047FB13
0043C5E9  |. 83C4 04              ADD ESP,4
0043C5EC  |. 8B55 FC              MOV EDX,DWORD PTR SS:[EBP-4]
0043C5EF  |. 8D4402 05            LEA EAX,DWORD PTR DS:[EDX+EAX+5]
0043C5F3  |. 8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
0043C5F6  |> E9 88000000          JMP 0043C683

0043C5FB  |> 8B4D 0C              MOV ECX,DWORD PTR SS:[EBP+C]
0043C5FE  |. 81E1 FF000000        AND ECX,0FF
0043C604  |. 6BC9 24              IMUL ECX,ECX,24
0043C607  |. 81C1 502C4B00        ADD ECX,004B2C50
0043C60D  |. E8 D12F0000          CALL 0043F5E3
0043C612  |. D1E8                 SHR EAX,1
0043C614  |. 83C0 46              ADD EAX,46

以上红色部分就是大补给、援军、输送、白虎的回复量计算,即精神力/2+70
0043C617  |. 8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
0043C61A  |. 837D 10 00           CMP DWORD PTR SS:[EBP+10],0
0043C61E  |. 75 2F                JNZ SHORT 0043C64F
0043C620  |. 8B4D F4              MOV ECX,DWORD PTR SS:[EBP-C]
0043C623  |. E8 57300000          CALL 0043F67F
0043C628  |. 8BF0                 MOV ESI,EAX
0043C62A  |. 68 C8000000          PUSH 0C8                                 ; /Arg1 = 000000C8
0043C62F  |. E8 DF340400          CALL 0047FB13                     ; \0047FB13
0043C634  |. 83C4 04              ADD ESP,4
0043C637  |. 3BF0                 CMP ESI,EAX
0043C639  |. 76 14                JBE SHORT 0043C64F
0043C63B  |. 6A 06                PUSH 6                                   ; /Arg1 = 00000006
0043C63D  |. E8 D1340400          CALL 0047FB13                     ; \0047FB13
0043C642  |. 83C4 04              ADD ESP,4
0043C645  |. 8B4D FC              MOV ECX,DWORD PTR SS:[EBP-4]
0043C648  |. 8D5401 05            LEA EDX,DWORD PTR DS:[ECX+EAX+5]
0043C64C  |. 8955 FC              MOV DWORD PTR SS:[EBP-4],EDX
0043C64F  |> EB 32                JMP SHORT 0043C683

0043C651  |> 8B4D F8              MOV ECX,DWORD PTR SS:[EBP-8]
0043C654  |. E8 D3ABFCFF          CALL 0040722C
0043C659  |. 8B4D F4              MOV ECX,DWORD PTR SS:[EBP-C]
0043C65C  |. 2B41 10              SUB EAX,DWORD PTR DS:[ECX+10]
0043C65F  |. 8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
0043C662  |. EB 1F                JMP SHORT 0043C683
上面这一段是26八阵图和42玄武专用的。

0043C664  |> 8B4D 08              MOV ECX,DWORD PTR SS:[EBP+8]
0043C667  |. 81E1 FF000000        AND ECX,0FF
0043C66D  |. 6BC9 46              IMUL ECX,ECX,46
0043C670  |. 81C1 C0F44A00        ADD ECX,004AF4C0
0043C676  |. E8 5594FEFF          CALL 00425AD0
0043C67B  |. 25 FF000000          AND EAX,0FF
0043C680  |. 8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
上面这一段是2C建言和2D献策专用的

0043C683  |> 8B55 08              MOV EDX,DWORD PTR SS:[EBP+8]
0043C686  |. 81E2 FF000000        AND EDX,0FF
0043C68C  |. 83FA 2C              CMP EDX,2C  ——建言的编号
0043C68F  |. 74 0D                JE SHORT 0043C69E
0043C691  |. 8B45 08              MOV EAX,DWORD PTR SS:[EBP+8]
0043C694  |. 25 FF000000          AND EAX,0FF
0043C699  |. 83F8 2D              CMP EAX,2D  ——献策的编号
0043C69C  |. 75 28                JNZ SHORT 0043C6C6
0043C69E  |> 8B4D F4              MOV ECX,DWORD PTR SS:[EBP-C]
0043C6A1  |. 8B75 FC              MOV ESI,DWORD PTR SS:[EBP-4]
0043C6A4  |. 0371 14              ADD ESI,DWORD PTR DS:[ECX+14]
0043C6A7  |. 8B4D F8              MOV ECX,DWORD PTR SS:[EBP-8]
0043C6AA  |. E8 A7ABFCFF          CALL 00407256
0043C6AF  |. 3BF0                 CMP ESI,EAX
0043C6B1  |. 76 11                JBE SHORT 0043C6C4
0043C6B3  |. 8B4D F8              MOV ECX,DWORD PTR SS:[EBP-8]
0043C6B6  |. E8 9BABFCFF          CALL 00407256
0043C6BB  |. 8B55 F4              MOV EDX,DWORD PTR SS:[EBP-C]
0043C6BE  |. 2B42 14              SUB EAX,DWORD PTR DS:[EDX+14]
0043C6C1  |. 8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
0043C6C4  |> EB 26                JMP SHORT 0043C6EC
0043C6C6  |> 8B45 F4              MOV EAX,DWORD PTR SS:[EBP-C]
0043C6C9  |. 8B75 FC              MOV ESI,DWORD PTR SS:[EBP-4]
0043C6CC  |. 0370 10              ADD ESI,DWORD PTR DS:[EAX+10]
0043C6CF  |. 8B4D F8              MOV ECX,DWORD PTR SS:[EBP-8]
0043C6D2  |. E8 55ABFCFF          CALL 0040722C
0043C6D7  |. 3BF0                 CMP ESI,EAX
0043C6D9  |. 76 11                JBE SHORT 0043C6EC
0043C6DB  |. 8B4D F8              MOV ECX,DWORD PTR SS:[EBP-8]
0043C6DE  |. E8 49ABFCFF          CALL 0040722C
0043C6E3  |. 8B4D F4              MOV ECX,DWORD PTR SS:[EBP-C]
0043C6E6  |. 2B41 10              SUB EAX,DWORD PTR DS:[ECX+10]
0043C6E9  |. 8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
0043C6EC  |> 8B45 FC              MOV EAX,DWORD PTR SS:[EBP-4]
0043C6EF  |. 5E                   POP ESI
0043C6F0  |. 8BE5                 MOV ESP,EBP
0043C6F2  |. 5D                   POP EBP
0043C6F3  \. C2 0C00              RETN 0C
0043C6F6   . 51C64300             DD 0043C651                       ;  Switch table used at 0043C594
0043C6FA   . 9BC54300             DD 0043C59B
0043C6FE   . FBC54300             DD 0043C5FB
0043C702   . 9BC54300             DD 0043C59B
0043C706   . FBC54300             DD 0043C5FB
0043C70A   . 64C64300             DD 0043C664
0043C70E   . 51C64300             DD 0043C651
0043C712   . FBC54300             DD 0043C5FB
0043C716   . 83C64300             DD 0043C683
0043C71A   . 00                   DB 00                                    ;  Index table to switch 0043C6F6
0043C71B   . 01                   DB 01
0043C71C   . 02                   DB 02
0043C71D   . 03                   DB 03
0043C71E   . 04                   DB 04
0043C71F   . 04                   DB 04
0043C720   . 05                   DB 05
0043C721   . 05                   DB 05
0043C722   . 08                   DB 08
0043C723   . 08                   DB 08
0043C724   . 08                   DB 08
0043C725   . 08                   DB 08
0043C726   . 08                   DB 08
0043C727   . 08                   DB 08
0043C728   . 08                   DB 08
0043C729   . 08                   DB 08
0043C72A   . 08                   DB 08
0043C72B   . 08                   DB 08
0043C72C   . 08                   DB 08
0043C72D   . 08                   DB 08
0043C72E   . 08                   DB 08
0043C72F   . 08                   DB 08
0043C730   . 08                   DB 08
0043C731   . 08                   DB 08
0043C732   . 08                   DB 08
0043C733   . 08                   DB 08
0043C734   . 08                   DB 08
0043C735   . 08                   DB 08
0043C736   . 06                   DB 06
0043C737   . 07                   DB 07
上面的43C71A(UE是3BB1)开始就是从八阵图到白虎的HP回复量的设值,0和6是八阵图和玄武专用,1和3是小补给类,2、4和7是大补给类,5是MP回复专用,8是不能回复。
作者: 434902652    时间: 2008-11-6 08:20     标题: 作者辛苦了,不过对于我们大多人来说是看不东的,不过还是感谢做这的这份心意

[color作者辛苦了,不过对于我们大多人来说是看不东的,不过还是感谢做这的这份心意=Red]
作者: crismon    时间: 2008-11-6 09:14

赞!之前有发帖询问过这个问题
这下可以把回血量和扩展的HP适应上了
之前的杯水车薪实在太可怜了
感谢楼主
作者: godtype    时间: 2009-1-18 11:03     标题: 更新

更新一下,细化到每一个HP回复策略都有不同的计算公式

0043C59B  |> 8B4D 0C           MOV ECX,DWORD PTR SS:[EBP+C]
0043C59E     E8 31CEFCFF       CALL 004093D4  ---这个新增加的函数
0043C5A3     33D2              XOR EDX,EDX
0043C5A5     B9 0A000000       MOV ECX,0A
0043C5AA     F7F1              DIV ECX
0043C5AC     83C0 28           ADD EAX,28
0043C5AF     EB 66             JMP SHORT 0043C617
以上是小补给,跟原来不变,即回复量=用计者的精神力/10+40
0043C5B1     8B4D 0C           MOV ECX,DWORD PTR SS:[EBP+C]
0043C5B4     E8 1BCEFCFF       CALL 004093D4
0043C5B9     D1E8              SHR EAX,1
0043C5BB     83C0 46           ADD EAX,46
0043C5BE     EB 57             JMP SHORT 0043C617
以上是大补给,跟原来不变,即回复量=用计者的精神力/2+70
0043C5C0     8B4D 0C           MOV ECX,DWORD PTR SS:[EBP+C]
0043C5C3     E8 0CCEFCFF       CALL 004093D4
0043C5C8     C1E8 03           SHR EAX,3
0043C5CB     83C0 28           ADD EAX,28
0043C5CE     EB 47             JMP SHORT 0043C617
以上是援队,改为回复量=用计者的精神力/8+40
0043C5D0     8B4D 0C           MOV ECX,DWORD PTR SS:[EBP+C]
0043C5D3     E8 FCCDFCFF       CALL 004093D4
0043C5D8     D1E8              SHR EAX,1
0043C5DA     83C0 5A           ADD EAX,5A
0043C5DD     EB 38             JMP SHORT 0043C617
以上是援军,改为回复量=用计者的精神力/2+90
0043C5DF     8B4D 0C           MOV ECX,DWORD PTR SS:[EBP+C]
0043C5E2     E8 EDCDFCFF       CALL 004093D4
0043C5E7     D1E8              SHR EAX,1
0043C5E9     83C0 50           ADD EAX,50
0043C5EC     EB 29             JMP SHORT 0043C617
以上是输送,改为回复量=用计者的精神力/2+80
0043C5EE     8B4D 0C           MOV ECX,DWORD PTR SS:[EBP+C]
0043C5F1     E8 DECDFCFF       CALL 004093D4
0043C5F6     EB 1F             JMP SHORT 0043C617
以上是白虎,改为回复量=用计者的精神力

下面的红色部分也要改:
0043C6F6   . 51C64300          DD 0043C651                        ;  Switch table used at 0043C594
0043C6FA   . 9BC54300          DD 0043C59B
0043C6FE   . B1C54300          DD 0043C5B1
0043C702   . C0C54300          DD 0043C5C0
0043C706   . D0C54300          DD 0043C5D0

0043C70A   . 64C64300          DD 0043C664
0043C70E   . DFC54300          DD 0043C5DF
0043C712   . EEC54300          DD 0043C5EE

0043C716   . 83C64300          DD 0043C683
0043C71A   . 00                DB 00                                    ;  Index table to switch 0043C6F6
0043C71B   . 01                DB 01
0043C71C   . 02                DB 02
0043C71D   . 03                DB 03
0043C71E   . 04                DB 04
0043C71F   . 06                DB 06
0043C720   . 05                DB 05
0043C721   . 05                DB 05
0043C722   . 08                DB 08
0043C723   . 08                DB 08
0043C724   . 08                DB 08
0043C725   . 08                DB 08
0043C726   . 08                DB 08
0043C727   . 08                DB 08
0043C728   . 08                DB 08
0043C729   . 08                DB 08
0043C72A   . 08                DB 08
0043C72B   . 08                DB 08
0043C72C   . 08                DB 08
0043C72D   . 08                DB 08
0043C72E   . 08                DB 08
0043C72F   . 08                DB 08
0043C730   . 08                DB 08
0043C731   . 08                DB 08
0043C732   . 08                DB 08
0043C733   . 08                DB 08
0043C734   . 08                DB 08
0043C735   . 08                DB 08
0043C736   . 00                DB 00
0043C737   . 07                DB 07

新增函数是:
004093D4     55                PUSH EBP
004093D5     8BEC              MOV EBP,ESP
004093D7     81E1 FF000000     AND ECX,0FF
004093DD     6BC9 24           IMUL ECX,ECX,24
004093E0     81C1 502C4B00     ADD ECX,004B2C50
004093E6     E8 F8610300       CALL 0043F5E3
004093EB     8BE5              MOV ESP,EBP
004093ED     5D                POP EBP
004093EE     C3                RETN

这样,六个HP回复策略都有自己不同的回复量了。

[ 本帖最后由 godtype 于 2009-1-18 11:05 编辑 ]
作者: szwd1997    时间: 2009-1-18 11:29

这个hp的公式技术探讨我一直都很关注但是这个设计不合理

应该是群+的比单+的少才对   
比如小补给/10+40  那么援队最好是/(12~15)+40  或者/10+0  原因很简单吧  全+总体要必单+多  所以单体是应该弥补而且恢复类不仅仅局限于文官而一些武职也应该适当会一点小加血   比如小补给是/10+40  援队是/10+0  那么武将即时有这招也是白搭。  

大补给这更是文官的特长   可以设定为/5+100   援军/5+0 或者/(7~10)+100
而白虎   你的白虎   我无语   
4s的的设置那种血也少100+99*4+99*4/5这都多少了,全屏幕血一次+满了。就是一次100mp也放得起100装备蓝减半就是50,回蓝20就是30,别的文官时不时的送一个蓝过来基本就是不死了,如果我设置白虎的话(请注意是全屏幕+血和异常状态解除)会这样/20+100  输送就是/10+50  

全屏幕加血  和全屏幕+一人血都是无耻的    如果距离够且没有危险单+都会选择大补给吧   而输送最大的实惠是文官不用考虑站位无危险   所以加的血量个人认为应和小补给不相伯仲

[ 本帖最后由 szwd1997 于 2009-1-18 11:34 编辑 ]
作者: godtype    时间: 2009-1-18 12:32

这个只是一个演示和参考,实际上就要靠制作者去决定。
作者: afl001    时间: 2009-1-18 13:44

很好,请问是水木版还是新引擎

[ 本帖最后由 afl001 于 2009-1-18 13:46 编辑 ]
作者: godtype    时间: 2009-1-18 15:52     标题: 回复 #7 afl001 的帖子

都通用。
作者: szwd1997    时间: 2009-1-18 19:47     标题: 回复 #6 godtype 的帖子

我知道   这是我个人给出的建议而已
作者: beast3210    时间: 2009-1-18 22:07

辛苦了
作者: sddciwei    时间: 2009-1-19 16:34

用UE能否修改加血回复量的公式呢?这个实在看不懂
作者: godtype    时间: 2009-1-19 16:52     标题: 回复 #11 sddciwei 的帖子

地址减去400C00就是UE地址,然后按中间的数字部分去修改。不过新增函数部分不可以照改,一定要用OB找空的位置再改,所以建议你学一下简单的OB用法。
作者: sddciwei    时间: 2009-1-23 12:10

多谢godtype前辈。但我实在不会OB。能烦您再说的具体些吗?
例如:
0043C612  |. D1E8                 SHR EAX,1
0043C614  |. 83C0 46              ADD EAX,46
大补给公式,怎么减400C00。
我想把公式中的精神力/2+70 改成精神力/2+140在UE里应该改哪些地址?
问题可能有些低级,请别笑话我。再次谢谢!!
作者: godtype    时间: 2009-1-23 12:46

43C616-400C00=3BA16

将3BA16的46改成8C
作者: sddciwei    时间: 2009-2-6 12:29

会了,会了
不过好像46的位置最大只能改到7F,改到80以上就会有问题。
godtype前辈每次都在我最需要的时候出现,太谢谢了!!
作者: younger3    时间: 2009-2-6 12:50

哦?
好像有點看懂了(似懂非懂)

請問godtype大
新手在下低級解讀:
精神力/10是MOV ECX,0A
精神力/8是SHR EAX,3
精神力/2是SHR EAX,1

這樣對嗎?

(自己覺得怪怪的   但又想不出更好的解釋方式><)
作者: godtype    时间: 2009-2-6 14:29     标题: 回复 #16 younger3 的帖子

汇编我也只会一点点

0043C5A3     33D2              XOR EDX,EDX
0043C5A5     B9 0A000000       MOV ECX,0A
0043C5AA     F7F1              DIV ECX
这三行才是完整的除以10,是将前面的函数4093D4里面得出的数值除以ECX中的数值,在这里是10

SHR EAX,n
术名叫逻辑右移n位,我自己的理解是二进制的移动n位。SHR EAX,3就是右移3位,二进制的1向移动3位变成1000,即十进制的8,右移是除,左移(SHL)是乘,所以这里的SHR EAX,3就是除以8了。
作者: godtype    时间: 2009-2-6 14:31



QUOTE:
原帖由 sddciwei 于 2009-2-6 12:29 发表
不过好像46的位置最大只能改到7F,改到80以上就会有问题。

太大没有试过,估计汇编有限制吧。一般这里改大倒不如前面除小一点。
作者: 大明英烈    时间: 2009-12-15 04:24

做个记号,绝对实用的好贴啊。
作者: WHITESHIP    时间: 2012-12-5 00:40     标题: 小补充下 43C623-43C648的解释

太奇葩了,大家都知道HP回复数量也和攻击伤害一样有波动,但是是有几率波动的,
刚发现这个几率居然和士气有关……

0043C623  |. E8 57300000          CALL 0043F67F                 获取被加血武将的士气,注意,被加血的武将
0043C628  |. 8BF0                 MOV ESI,EAX
0043C62A  |. 68 C8000000          PUSH 0C8                        取1-200的随机数     
0043C62F  |. E8 DF340400          CALL 0047FB13                    
0043C634  |. 83C4 04              ADD ESP,4
0043C637  |. 3BF0                 CMP ESI,EAX
0043C639  |. 76 14                JBE SHORT 0043C64F         
如果随机数大于被加血者的士气,那就跳过增加随机数阶段,换句话说,只要该武将士气大于200,就必然产生波动值!!

0043C63B  |. 6A 06                PUSH 6                                       取0-6的随机数
0043C63D  |. E8 D1340400          CALL 0047FB13                  
0043C645  |. 8B4D FC              MOV ECX,DWORD PTR SS:[EBP-4]
0043C648  |. 8D5401 05            LEA EDX,DWORD PTR DS:[ECX+EAX+5]    最终加血量=固定回复量+随机数+5,也就是说随机增加5-11。



(这设定太二缺了……果断去掉,空出来的空间正好可以增加一个辅助回复量的特效。)
作者: zhouhuan    时间: 2012-12-6 09:16

HP回复的波动都是正波动,士气高一般运气也高,估计是制作者给运气好的人一种福利,虽然没什么用就是了。。




欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) Powered by Discuz! 5.0.0