Board logo

标题: 接受咨询,解释原版代码 [打印本页]

作者: godtype    时间: 2011-1-30 17:44     标题: 接受咨询,解释原版代码


快过年了,就大发一下慈悲。
对原版代码有什么疑问的,可以在本帖发问,只要是我了解的,都可以解答(当然不是第一时间,而且是否详细解答也由我来决定)。

注意:
1、只限原版引擎。
2、问新特效的请出门。
3、不会看代码的也请出门。
4、问UE地址的同样请出门。
5、灌水可以……有请版主重扣。

6、本帖暂停中,再开时间未定。


[ 本帖最后由 godtype 于 2011-4-17 08:33 编辑 ]
作者: summer3965    时间: 2011-2-6 23:05

問一下阿毅

原版地形恢復hp和使用道具恢復hp的函數在哪裡?

不知道能不能改成像武聖傳那樣的百分比恢復,謝謝

[ 本帖最后由 summer3965 于 2011-2-6 23:07 编辑 ]
作者: godtype    时间: 2011-2-6 23:13

地形恢复HP

具体恢复量
0043D0C1  /$ 55                  PUSH EBP
0043D0C2  |. 8BEC                MOV EBP,ESP
0043D0C4  |. 51                  PUSH ECX
0043D0C5  |. 33C0                XOR EAX,EAX
0043D0C7  |. 8A45 08             MOV AL,BYTE PTR SS:[EBP+8]
[EBP+8]是地形编号

0043D0CA  |. 83E8 12             SUB EAX,12           ;  Switch (cases 12..16)
0043D0CD  |. 83F8 04             CMP EAX,4
0043D0D0  |. 77 1C               JA SHORT 0043D0EE
地形编号减去12后判断是否大于4。注意前面0—11的地形减去12后会变成“FFFFFFEE—FFFFFFFF”,使用JA来判断系统就会认为这些数值是很大的数值,就可以跳过,如果使用JG来判断,系统就会认为这些数值是负数,而不会跳过

0043D0D2  |. FF2485 F4D04300     JMP DWORD PTR DS:[EAX*4+43D0F4]
根据减去12后的EAX值以及下面43D0F4的分支表来进行跳转。比如13(关隘),减12后等于1,1*4+43D0F4=43D0F8,系统就会读取43D0F8所在位置的代码——0043D0E0,然后跳到43D0E0这个位置继续运行

0043D0D9  |> B8 19000000         MOV EAX,19           ;  Case 12 of switch 0043D0CA ---12城池恢复25%
0043D0DE  |. EB 10               JMP SHORT 0043D0F0
0043D0E0  |> B8 14000000         MOV EAX,14           ;  Cases 13,14,16 of switch 0043D0CA ---13关隘14鹿砦16兵营恢复20%
0043D0E5  |. EB 09               JMP SHORT 0043D0F0
0043D0E7  |> B8 0F000000         MOV EAX,0F           ;  Case 15 of switch 0043D0CA ---15村庄恢复15%
0043D0EC  |. EB 02               JMP SHORT 0043D0F0
以上就是下面的分支表具体跳转后的内容,输出的EAX值就是恢复HP的百分比值

0043D0EE  |> 33C0                XOR EAX,EAX          ;  Default case of switch 0043D0CA
非恢复地形全部都清空EAX输出

0043D0F0  |> 8BE5                MOV ESP,EBP
0043D0F2  |. 5D                  POP EBP
0043D0F3  \. C3                  RETN
0043D0F4   . D9D04300            DD 0043D0D9                       ;  Switch table used at 0043D0D2
0043D0F8   . E0D04300            DD 0043D0E0
0043D0FC   . E0D04300            DD 0043D0E0
0043D100   . E7D04300            DD 0043D0E7
0043D104   . E0D04300            DD 0043D0E0


下面一段是是否显示出“可以恢复”字样
00435182  /$ 55                  PUSH EBP
00435183  |. 8BEC                MOV EBP,ESP
00435185  |. 83EC 08             SUB ESP,8
00435188  |. 8B45 08             MOV EAX,DWORD PTR SS:[EBP+8]
0043518B  |. 25 FF000000         AND EAX,0FF
[EBP+8]是地形编号

00435190  |. 83F8 12             CMP EAX,12
00435193  |. 7C 17               JL SHORT 004351AC
比较是否小于12(城池),小于就跳到下面输出0

00435195  |. 8B4D 08             MOV ECX,DWORD PTR SS:[EBP+8]
00435198  |. 81E1 FF000000       AND ECX,0FF
0043519E  |. 83F9 16             CMP ECX,16
004351A1  |. 7F 09               JG SHORT 004351AC
比较是否大于16(兵营),大于就跳到下面输出0

004351A3  |. C745 F8 01000000    MOV DWORD PTR SS:[EBP-8],1
004351AA  |. EB 07               JMP SHORT 004351B3
是12-16之间的地形,则属于可恢复地形,输出1

004351AC  |> C745 F8 00000000    MOV DWORD PTR SS:[EBP-8],0
004351B3  |> 8B55 F8             MOV EDX,DWORD PTR SS:[EBP-8]
004351B6  |. 8955 FC             MOV DWORD PTR SS:[EBP-4],EDX
004351B9  |. 8B45 FC             MOV EAX,DWORD PTR SS:[EBP-4]
最后输出的值在其他地方进行判断,1就显示“可以恢复”,0就没有显示。

004351BC  |. 8BE5                MOV ESP,EBP
004351BE  |. 5D                  POP EBP
004351BF  \. C3                  RETN


以前有帖过的:http://www.xycq.net/forum/thread-170644-1-1.html

[ 本帖最后由 godtype 于 2011-2-7 09:20 编辑 ]
作者: godtype    时间: 2011-2-7 10:28

恢复HP道具的恢复量

调用函数位置
0041CD9E  |> 6A 00          PUSH 0                                   ; /Arg2 = 00000000
0041CDA0  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]             ; |
0041CDA3  |. 8A11           MOV DL,BYTE PTR DS:[ECX]                 ; |
0041CDA5  |. 52             PUSH EDX                                 ; |Arg1
0041CDA6  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]             ; |
0041CDA9  |. 8B48 08        MOV ECX,DWORD PTR DS:[EAX+8]             ; |
0041CDAC  |. E8 7DF60100    CALL 0043C42E                            ; \0043C42E


43C42E这条函数有四个地方调用到,恢复HP、恢复MP、显示恢复HP量和显示恢复MP量,这里只帖恢复HP的调用位置。
0C栈为0时,就是真正使用道具,为1时,是未正式使用道具,而将光标移到某人头上时显示的恢复量;08栈是所使用道具的物品编号,byte型(即单字节);还有一个受用者的战场内存地址作为ECX值输入。
当然了,实际上0C栈的值并没有在函数里面使用过。

0043C42E  /$ 55             PUSH EBP
0043C42F  |. 8BEC           MOV EBP,ESP
0043C431  |. 83EC 1C        SUB ESP,1C
0043C434  |. 894D EC        MOV DWORD PTR SS:[EBP-14],ECX
受用者的战场内存地址保存到[EBP-14]中

0043C437  |. 8B45 EC        MOV EAX,DWORD PTR SS:[EBP-14]
0043C43A  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]
0043C43C  |. 6BC9 48        IMUL ECX,ECX,48
0043C43F  |. 81C1 681B4A00  ADD ECX,004A1B68
0043C445  |. 894D F0        MOV DWORD PTR SS:[EBP-10],ECX
计算出受用者的武将内存地址,保存到[EBP-10]中

0043C448  |. 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
0043C44B  |. 81E2 FF000000  AND EDX,0FF
0043C451  |. 6BD2 19        IMUL EDX,EDX,19
0043C454  |. 81C2 40114A00  ADD EDX,004A1140
0043C45A  |. 8955 F4        MOV DWORD PTR SS:[EBP-C],EDX
计算出所使用道具的物品内存地址,保存到[EBP-C]中

0043C45D  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
0043C460  |. E8 DBD0FCFF    CALL 00409540
0043C465  |. 8845 FC        MOV BYTE PTR SS:[EBP-4],AL
读取所使用道具的特效号,单字节保存到[EBP-4]中。409540实际上就是MOV AL,BYTE PTR DS:[ECX+11],读取ECX值所在地址+11H位置的数值(byte型,即单字节),而辅助品和消耗品的物品内存地址里面的第11H位就是特效号,武器和防具则是物品类型(即剑、枪、弓等)

0043C468  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
0043C46B  |. E8 0019FEFF    CALL 0041DD70
0043C470  |. 25 FF000000    AND EAX,0FF
0043C475  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
读取所使用道具的效果值,扩展后保存到[EBP-8]中。41DD70是MOV AL,BYTE PTR DS:[ECX+15] ,原理同上,消耗品的第15H位是效果值,而武器和防具是初始能力,辅助品则无作用

0043C478  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
0043C47B  |. 25 FF000000    AND EAX,0FF
0043C480  |. 83F8 3F        CMP EAX,3F
0043C483  |. 75 58          JNZ SHORT 0043C4DD
判断所使用道具的特效号是否3F,即恢复HP,不是的就跳到后面

0043C485  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
0043C488  |. 81E1 FF000000  AND ECX,0FF
0043C48E  |. 81F9 FF000000  CMP ECX,0FF
0043C494  |. 75 13          JNZ SHORT 0043C4A9
判断所使用道具的效果值是否为FF,不是的就跳到后面,是的就表示完全恢复

0043C496  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C499  |. E8 7DADFCFF    CALL 0040721B
根据输入的ECX值(武将内存地址)计算出包括辅助装备在内的武将总HP值

0043C49E  |. 8B55 EC        MOV EDX,DWORD PTR SS:[EBP-14]
0043C4A1  |. 2B42 10        SUB EAX,DWORD PTR DS:[EDX+10]
0043C4A4  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
0043C4A7  |. EB 32          JMP SHORT 0043C4DB
总HP值减去当前HP值(Hpcur),战场内存的第10H位就是Hpcur,得到实际恢复HP量,保存到[EBP-8]中

这里开始是所使用道具的效果值不是FF的情况:
0043C4A9  |> 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C4AC  |. E8 6AADFCFF    CALL 0040721B
取出总HP值

0043C4B1  |. 8B4D EC        MOV ECX,DWORD PTR SS:[EBP-14]
0043C4B4  |. 2B41 10        SUB EAX,DWORD PTR DS:[ECX+10]
0043C4B7  |. 3B45 F8        CMP EAX,DWORD PTR SS:[EBP-8]
0043C4BA  |. 73 13          JNB SHORT 0043C4CF
总HP值减去当前HP值(Hpcur),再比较一下所使用道具的效果值,如果大于或等于效果值就跳到后面,由道具的效果值作为实际恢复量

0043C4BC  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C4BF  |. E8 57ADFCFF    CALL 0040721B
0043C4C4  |. 8B55 EC        MOV EDX,DWORD PTR SS:[EBP-14]
0043C4C7  |. 2B42 10        SUB EAX,DWORD PTR DS:[EDX+10]
0043C4CA  |. 8945 E8        MOV DWORD PTR SS:[EBP-18],EAX
0043C4CD  |. EB 06          JMP SHORT 0043C4D5
如果小于效果值,就直接由总HP值减去Hpcur所得出的数值作为实际恢复量

0043C4CF  |> 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
0043C4D2  |. 8945 E8        MOV DWORD PTR SS:[EBP-18],EAX
0043C4D5  |> 8B4D E8        MOV ECX,DWORD PTR SS:[EBP-18]
0043C4D8  |. 894D F8        MOV DWORD PTR SS:[EBP-8],ECX
0043C4DB  |> EB 62          JMP SHORT 0043C53F

以下部分是恢复MP的,原理一样,其中40724A是取出总MP值,DS:[ECX+14]是当前MP值(Mpcur)
0043C4DD  |> 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
0043C4E0  |. 81E2 FF000000  AND EDX,0FF
0043C4E6  |. 83FA 40        CMP EDX,40
0043C4E9  |. 75 54          JNZ SHORT 0043C53F
0043C4EB  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
0043C4EE  |. 25 FF000000    AND EAX,0FF
0043C4F3  |. 3D FF000000    CMP EAX,0FF
0043C4F8  |. 75 13          JNZ SHORT 0043C50D
0043C4FA  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C4FD  |. E8 48ADFCFF    CALL 0040724A
0043C502  |. 8B4D EC        MOV ECX,DWORD PTR SS:[EBP-14]
0043C505  |. 2B41 14        SUB EAX,DWORD PTR DS:[ECX+14]
0043C508  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
0043C50B  |. EB 32          JMP SHORT 0043C53F
0043C50D  |> 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C510  |. E8 35ADFCFF    CALL 0040724A
0043C515  |. 8B55 EC        MOV EDX,DWORD PTR SS:[EBP-14]
0043C518  |. 2B42 14        SUB EAX,DWORD PTR DS:[EDX+14]
0043C51B  |. 3B45 F8        CMP EAX,DWORD PTR SS:[EBP-8]
0043C51E  |. 73 13          JNB SHORT 0043C533
0043C520  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C523  |. E8 22ADFCFF    CALL 0040724A
0043C528  |. 8B4D EC        MOV ECX,DWORD PTR SS:[EBP-14]
0043C52B  |. 2B41 14        SUB EAX,DWORD PTR DS:[ECX+14]
0043C52E  |. 8945 E4        MOV DWORD PTR SS:[EBP-1C],EAX
0043C531  |. EB 06          JMP SHORT 0043C539
0043C533  |> 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]
0043C536  |. 8955 E4        MOV DWORD PTR SS:[EBP-1C],EDX
0043C539  |> 8B45 E4        MOV EAX,DWORD PTR SS:[EBP-1C]
0043C53C  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
0043C53F  |> 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
0043C542  |. 8BE5           MOV ESP,EBP
0043C544  |. 5D             POP EBP
0043C545  \. C2 0800        RETN 8


总的来说,消耗道具的效果值并不是完全的恢复量,效果值加上当前HP/MP后不能大于总HP/MP量,超出部分就必须减去,否则会出错。

===========
如果要将效果值改成占总HP量的百分比,全恢复的FF就不管了,改这段
0043C4A9  |> 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C4AC  |. E8 6AADFCFF    CALL 0040721B
0043C4B1  |. 8B4D EC        MOV ECX,DWORD PTR SS:[EBP-14]
0043C4B4  |. 2B41 10        SUB EAX,DWORD PTR DS:[ECX+10]
0043C4B7  |. 3B45 F8        CMP EAX,DWORD PTR SS:[EBP-8]
0043C4BA  |. 73 13          JNB SHORT 0043C4CF
0043C4BC  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C4BF  |. E8 57ADFCFF    CALL 0040721B
0043C4C4  |. 8B55 EC        MOV EDX,DWORD PTR SS:[EBP-14]
0043C4C7  |. 2B42 10        SUB EAX,DWORD PTR DS:[EDX+10]
0043C4CA  |. 8945 E8        MOV DWORD PTR SS:[EBP-18],EAX
0043C4CD  |. EB 06          JMP SHORT 0043C4D5
0043C4CF  |> 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
0043C4D2  |. 8945 E8        MOV DWORD PTR SS:[EBP-18],EAX
0043C4D5  |> 8B4D E8        MOV ECX,DWORD PTR SS:[EBP-18]
0043C4D8  |. 894D F8        MOV DWORD PTR SS:[EBP-8],ECX
0043C4DB  |> EB 62          JMP SHORT 0043C53F

改成:
0043C4A9  |> 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043C4AC  |. E8 6AADFCFF    CALL 0040721B
0043C4B1     50             PUSH EAX
0043C4B2     0FAF45 F8      IMUL EAX,DWORD PTR SS:[EBP-8]
0043C4B6     33D2           XOR EDX,EDX
0043C4B8     B9 64000000    MOV ECX,64
0043C4BD     F7F1           DIV ECX
0043C4BF     8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
0043C4C2     58             POP EAX
0043C4C3     8B4D EC        MOV ECX,DWORD PTR SS:[EBP-14]
0043C4C6     2B41 10        SUB EAX,DWORD PTR DS:[ECX+10]
0043C4C9     3B45 F8        CMP EAX,DWORD PTR SS:[EBP-8]
0043C4CC     73 03          JNB SHORT 0043C4D1
0043C4CE     8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
0043C4D1     90             NOP
0043C4D2     90             NOP
0043C4D3     90             NOP
0043C4D4     90             NOP
0043C4D5     90             NOP
0043C4D6     90             NOP
0043C4D7     90             NOP
0043C4D8     90             NOP
0043C4D9     90             NOP
0043C4DA     90             NOP
作者: summer3965    时间: 2011-2-7 13:35


解釋的真詳細
來試改看看

謝謝囉
作者: 3943169    时间: 2011-2-8 09:47

对话框想改成想瓦岗那样的,应该改那个代码?
作者: godtype    时间: 2011-2-8 20:54



QUOTE:
原帖由 3943169 于 2011-2-8 09:47 发表
对话框想改成想瓦岗那样的,应该改那个代码?

真彩头像?不属本帖范畴。
作者: xk78765    时间: 2011-2-10 16:13

問題1. 原版中,策略命中上限影響的系數怎麼改呢?

問題2. 策略技能像是氣合、霸氣,這種只能對自己施放,如何讓他能指定對友?

[ 本帖最后由 xk78765 于 2011-2-10 18:39 编辑 ]
作者: aaa132536    时间: 2011-2-12 15:56

毅兄,豆袋在起作用时有个吃豆的动画,如果将这个动画改成补血时那一圈圈的动画要怎么改,谢谢。
作者: godtype    时间: 2011-2-13 11:44



QUOTE:
原帖由 xk78765 于 2011-2-10 16:13 发表
問題1. 原版中,策略命中上限影響的系數怎麼改呢?

問題2. 策略技能像是氣合、霸氣,這種只能對自己施放,如何讓他能指定對友?

策略的看此帖:
http://www.xycq.net/forum/thread-206799-1-1.html

气合霸气修改类型,可以看第二部分的识别函数,修改一下使用的效果类型或调整一下运行函数即可。
作者: godtype    时间: 2011-2-13 11:51



QUOTE:
原帖由 aaa132536 于 2011-2-12 15:56 发表
毅兄,豆袋在起作用时有个吃豆的动画,如果将这个动画改成补血时那一圈圈的动画要怎么改,谢谢。

豆袋与一般使用恢复HP道具的动画的共用的:
0041CDB4  |. 68 FF000000    PUSH 0FF     <--后续法术动画编号
0041CDB9  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
0041CDBC  |. E8 A1F9FFFF    CALL 0041C762

如果单独改就要另外写代码,在这段改成:
CMP DWORD PTR SS:[EBP+8],0
JE **
PUSH 0FF
MOV ECX,DWORD PTR SS:[EBP-8]
CALL 0041C762
JMP ***
新代码……  <--JE **到这里
接原来代码  <--JMP ***到这里

至于新代码暂请自己先参考动画里面的代码,动画类我少研究,有时间再补充主要的部分。
作者: aaa132536    时间: 2011-2-13 21:40

谢谢毅兄,我去试下。
作者: aaa132536    时间: 2011-2-13 22:17

毅兄能不能帮忙做几个判断程序:

1.判断攻击方与被攻击方的朝向
输入攻击方及被攻击方,输出:0.面对面、1.面对背、2.其他

2.判断当前目标是否跟随特定武将
输入当前目标及特定武将,输出:0.跟随、1.没跟随

3.判断两者间的距离
输入当前目标及特定武将,输出两者间的距离


作者: godtype    时间: 2011-2-13 22:19



QUOTE:
原帖由 aaa132536 于 2011-2-13 22:17 发表
毅兄能不能帮忙做几个判断程序:

1.判断攻击方与被攻击方的朝向
输入攻击方及被攻击方,输出:0.面对面、1.面对背、2.其他

2.判断当前目标是否跟随特定武将
输入当前目标及特定武将,输出:0.跟随、1.没 ...

超出本帖范畴并超出能力范围。
作者: aaa132536    时间: 2011-2-13 22:32

那毅兄能不能帮忙详细解释下穿透攻击的代码,特别是里面的区别敌我方。我想做一个特别的穿透效果:

攻击特定武将时有穿透效果,穿透目标为:被攻击特定武将的攻击范围中HP最少的攻方武将。


作者: godtype    时间: 2011-2-14 09:47     标题: 回复 #15 aaa132536 的帖子

你是想要判断穿透攻击编号的代码?还是要实际的穿透攻击效果代码?
前者是判断是否有穿透装备或穿透兵种,后者是判断穿透范围内哪些敌人受到影响。如果是后者,虽然正好前段时间我在想一个新穿透范围,不过结果好不幸,没法实现。所以实际效果部分亦超出能力范围。
作者: 武骧金星    时间: 2011-2-14 10:17

请问以下功能应该如何实现为好:

当一个武将升级时,不管他的实际兵种是什么,都读取一个固定兵种的升级属性作为依据。

比如说:假如一个武将是步兵,但是他升级的时候我希望他用群雄的属性来升级。

实际升级依然要受到能力的制约,比如该武将的能力如果是70,60,70,70,60,那么实际成长就应该是32332(在原版中群雄所有成长都是3,然后70属于合格,所以能力达到70的话就3成长,不到70就是2成长)

谢谢毅大。
作者: godtype    时间: 2011-2-14 10:40     标题: 回复 #17 武骧金星 的帖子

原版武将升级(我军):

QUOTE:
0040741A  |. 8B45 F0        |MOV EAX,DWORD PTR SS:[EBP-10]
0040741D  |. 25 FF000000    |AND EAX,0FF
00407422  |. 50             |PUSH EAX
00407423  |. 8B4D E8        |MOV ECX,DWORD PTR SS:[EBP-18]
00407426  |. 33D2           |XOR EDX,EDX
00407428  |. 8A51 2B        |MOV DL,BYTE PTR DS:[ECX+2B]
0040742B  |. 8BCA           |MOV ECX,EDX
0040742D  |. 6BC9 1B        |IMUL ECX,ECX,1B
00407430  |. 81C1 A0BF4A00  |ADD ECX,004ABFA0
00407436  |. E8 65210000    |CALL 004095A0
0040743B  |. 25 FF000000    |AND EAX,0FF
00407440  |. 8945 FC        |MOV DWORD PTR SS:[EBP-4],EAX
00407443  |. 8B45 F0        |MOV EAX,DWORD PTR SS:[EBP-10]
00407446  |. 25 FF000000    |AND EAX,0FF
0040744B  |. 83F8 04        |CMP EAX,4
0040744E  |. 7F 21          |JG SHORT 00407471
00407450  |. 8B4D F0        |MOV ECX,DWORD PTR SS:[EBP-10]
00407453  |. 81E1 FF000000  |AND ECX,0FF
00407459  |. 51             |PUSH ECX
0040745A  |. 8B4D E8        |MOV ECX,DWORD PTR SS:[EBP-18]
0040745D  |. E8 9AFEFFFF    |CALL 004072FC

[EBP-18]是武将能力内存地址
[EBP-10]是循环计数器,用来判断现在升级是哪项能力,0攻1防2精……6MP
[EBP-4]是提升能力的量
4ABFA0是部队能力内存地址的起始点
4095A0是读取部队七围的提升量
4072FC是读取武将五围的提升量

如果要指定某个武将升级的时候按指定的兵种提升量来提升,就将
00407423  |. 8B4D E8        |MOV ECX,DWORD PTR SS:[EBP-18]
00407426  |. 33D2           |XOR EDX,EDX
00407428  |. 8A51 2B        |MOV DL,BYTE PTR DS:[ECX+2B]
0040742B  |. 8BCA           |MOV ECX,EDX
这一段改成:
MOV ECX,DWORD PTR SS:[EBP-18]
CALL 409500
CMP EAX,0XX <--填武将编号
JNZ *01
MOV ECX,0XXX  <--填兵种编号
JMP *02
MOV ECX,DWORD PTR SS:[EBP-18]  <==JNZ *01到这里
MOVZX ECX,BYTE PTR DS:[ECX+2B]
IMUL ECX,ECX,1B  <==JMP *02到这里
下面继续接上即可。

这里只是我军的,如果想要友敌军也是这样,就将其他调用过4072FC的地方,都参考着上面的代码来改就是了。
作者: 武骧金星    时间: 2011-2-14 11:25

好的,谢谢毅大的指点,我先自己尝试一下,如果有问题再来问。
作者: aaa132536    时间: 2011-2-14 19:28     标题: 回复 #16 godtype 的帖子

我要的是穿透攻击效果的代码。

那毅兄能否把那段代码的地址给我,我自己去慢慢研究下。

作者: godtype    时间: 2011-2-14 19:53     标题: 回复 #20 aaa132536 的帖子

CALL 00435D06就是穿透的实际效果。
作者: 513633522    时间: 2011-2-15 11:27

最近改原曹操传的引擎 ,发现引擎突然可以在WIN7下运行,DATA其他的都未修改,不知道原引擎哪些地方修改可以兼容各系统

[ 本帖最后由 513633522 于 2011-2-15 11:30 编辑 ]
作者: godtype    时间: 2011-2-15 11:37     标题: 回复 #22 513633522 的帖子

问STAR吧。
作者: 狂赵云    时间: 2011-2-17 23:39

扩展部队地形显示怎么扩展?就是扩展到显示部队27个!
地形加成显示那个◎▲位置在什么地方?

图片附件: [1] QQ截图未命名.jpg (2011-2-17 23:39, 3.1 K) / 该附件被下载次数 83
http://xycq.org.cn/forum/attachment.php?aid=106037


作者: yjr3426619    时间: 2011-2-18 18:22

毅大。
暴击颜色函数在哪里?
作者: godtype    时间: 2011-2-18 22:40     标题: 回复 #24 狂赵云 的帖子

代码在46C53B,以及里面调用的函数,这个很难解释,当时改的时候都要问别人才能解决。请自行参考我发布过的引擎和作品来对照参考。
作者: godtype    时间: 2011-2-18 22:41     标题: 回复 #25 yjr3426619 的帖子

http://www.xycq.net/forum/thread-222036-1-1.html
作者: 狂赵云    时间: 2011-2-19 01:03     标题: 回复 #26 godtype 的帖子

直接拿你的5.0进行修改!
0046C58A  |.  6A 1C         PUSH 1C(28)实际是27  是部队上限
改为30个或者多点!
修改这部分是显示出来了!
但是修改出来的部队地形效果和消耗机动的图就错乱了!
无法和原版一样的显示!
那么那段地形和消耗机动力在什么地方修改?代码是什么?

还有另外的问题是地形效果的位置是什么地方!8D160?
作者: godtype    时间: 2011-2-19 10:35     标题: 回复 #28 狂赵云 的帖子

那个已经是极限了,再改会有问题。如果非要改,就要参考STAR5.7版。
作者: 狂赵云    时间: 2011-2-20 01:54     标题: 回复 #29 godtype 的帖子

谢谢
作者: 憂鬱王子    时间: 2011-2-24 11:46

嚯……好厉害,看得我眼都花了……
作者: WHITESHIP    时间: 2011-2-25 03:47

嗯……问一下关于等级计算的问题,载入存档的档案前面有个"LV“,原版是使用0号武将的等级,这个等级也影响战利品金钱的获得。请问判断这个等级的代码在哪里呢?
作者: norton    时间: 2011-2-25 14:55

如何扩展内景人物形象数?
作者: godtype    时间: 2011-2-25 20:42



QUOTE:
原帖由 WHITESHIP 于 2011-2-25 03:47 发表
嗯……问一下关于等级计算的问题,载入存档的档案前面有个"LV“,原版是使用0号武将的等级,这个等级也影响战利品金钱的获得。请问判断这个等级的代码在哪里呢?

1、载入存档的档案前面有个"LV“
0041B236  |. B9 681B4A00    MOV ECX,004A1B68
0041B23B  |. E8 90B3FEFF    CALL 004065D0
就是这里输出0号武将等级。

2、战利品金钱
004169FB  |. B9 681B4A00    MOV ECX,004A1B68
00416A00  |. E8 CBFBFEFF    CALL 004065D0
00416A05  |. 25 FF000000    AND EAX,0FF
00416A0A  |. 6BC0 64        IMUL EAX,EAX,64
00416A0D  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
00416A10  |. 8D9408 BC02000>LEA EDX,DWORD PTR DS:[EAX+ECX+2BC]
同样是输出0号武将等级后乘以100,再加上700。
作者: godtype    时间: 2011-2-25 20:47



QUOTE:
原帖由 norton 于 2011-2-25 14:55 发表
如何扩展内景人物形象数?

你是指在同一内场景中R形象数(非人物数)超过15就会重复的那个问题吗?
作者: WHITESHIP    时间: 2011-2-26 13:12     标题: 回复 #34 godtype 的帖子

话说要改成新引擎那样似乎比较难……
于是我用一个粗劣方法解决了。总之问题解决了~^ ^谢谢毅大啦~
作者: 513633522    时间: 2011-2-26 19:46

原曹操传引擎里存放整形变量的位置在哪里……最大是多啊
作者: godtype    时间: 2011-2-26 19:57



QUOTE:
原帖由 513633522 于 2011-2-26 19:46 发表
原曹操传引擎里存放整形变量的位置在哪里……最大是多啊

旧引擎何来整形变量?
作者: 513633522    时间: 2011-2-26 23:47     标题: 回复 #38 godtype 的帖子

我说怎么找不到呢
增加一个呗
作者: norton    时间: 2011-2-28 09:01     标题: 回复 #35 godtype 的帖子

对,对.没说清楚,呵呵!
作者: godtype    时间: 2011-2-28 09:24     标题: 回复 #40 norton 的帖子

那个……以前曾经问过STAR怎样改,他提供了几个地址,我研究了一轮没成功就放弃了,而那些地址不知道扔到哪里了,现在找不回来,所以抱歉了。或者问一下STAR拿地址,现在他的版本都已经扩展了,参考一下应该就可以了。
作者: godtype    时间: 2011-2-28 09:26     标题: 回复 #39 513633522 的帖子

要增加存档,要增加指令,跟改成新引擎没什么分别。
作者: 513633522    时间: 2011-2-28 19:20

毅大   穿透攻击那些代码能给讲讲吗?
就是如果要加穿透三格……  但不理解是怎么实习穿透
作者: godtype    时间: 2011-2-28 20:48     标题: 回复 #43 513633522 的帖子

21楼有地址,这个只能靠自己了。
作者: 吴下小蒙    时间: 2011-2-28 21:03

请教毅大,将一转兵种增加至三转要如何改,在不触及其它一转兵的情况下

[ 本帖最后由 吴下小蒙 于 2011-2-28 21:05 编辑 ]
作者: godtype    时间: 2011-2-28 21:06     标题: 回复 #45 吴下小蒙 的帖子

扩展兵种涉及的工作量太大,代码又多,很难帖出来。
作者: WHITESHIP    时间: 2011-3-10 15:44

毅大,关于打开仓库说话“XXX,打开仓库”这一段,
我看了岱瀛的帖子:
(原帖,61L)
http://www.xycq.net/forum/viewth ... horuid=0&page=3

大致意思是检测0号武将是否在内场景,是则0号武将说话。
但是我改了几个我认为是测试0号武将的地方,都没有效果。
想问一下毅大,能否改成,测试0号武将,若在,则让0号说话,不是---再测试1号武将,让1号武将说“XX,打开仓库”?

我这里贴一小段:

0046776A  /.  55            PUSH EBP
0046776B  |.  8BEC          MOV EBP,ESP
0046776D  |.  83EC 70       SUB ESP,70
00467770  |.  53            PUSH EBX
00467771  |.  56            PUSH ESI
00467772  |.  894D 98       MOV DWORD PTR SS:[EBP-68],ECX
00467775  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]
00467778  |.  8B48 08       MOV ECX,DWORD PTR DS:[EAX+8]
0046777B  |.  51            PUSH ECX                                 ; /Arg1
0046777C  |.  8B4D 98       MOV ECX,DWORD PTR SS:[EBP-68]            ; |
0046777F  |.  E8 18C8FFFF   CALL Ekd5.00463F9C                       ; \Ekd5.00463F9C
00467784  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
00467787  |.  8B55 08       MOV EDX,DWORD PTR SS:[EBP+8]
0046778A  |.  83C2 1C       ADD EDX,1C
0046778D  |.  8B02          MOV EAX,DWORD PTR DS:[EDX]
0046778F  |.  8945 C0       MOV DWORD PTR SS:[EBP-40],EAX
00467792  |.  8B4A 04       MOV ECX,DWORD PTR DS:[EDX+4]
00467795  |.  894D C4       MOV DWORD PTR SS:[EBP-3C],ECX
00467798  |.  8B42 08       MOV EAX,DWORD PTR DS:[EDX+8]
0046779B  |.  8945 C8       MOV DWORD PTR SS:[EBP-38],EAX
0046779E  |.  8B4A 0C       MOV ECX,DWORD PTR DS:[EDX+C]
004677A1  |.  894D CC       MOV DWORD PTR SS:[EBP-34],ECX
004677A4  |.  8B55 08       MOV EDX,DWORD PTR SS:[EBP+8]
004677A7  |.  52            PUSH EDX
004677A8  |.  8B45 98       MOV EAX,DWORD PTR SS:[EBP-68]
004677AB  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]
004677AD  |.  8B4D 98       MOV ECX,DWORD PTR SS:[EBP-68]
004677B0  |.  FF52 18       CALL DWORD PTR DS:[EDX+18]
004677B3  |.  C745 A0 01000>MOV DWORD PTR SS:[EBP-60],1
004677BA  |.  6A 02         PUSH 2                                   ; /lParam = 2
004677BC  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]             ; |
004677BF  |.  8B48 08       MOV ECX,DWORD PTR DS:[EAX+8]             ; |
004677C2  |.  51            PUSH ECX                                 ; |wParam
004677C3  |.  68 2C100000   PUSH 102C                                ; |Message = MSG(102C)
004677C8  |.  8B55 98       MOV EDX,DWORD PTR SS:[EBP-68]            ; |
004677CB  |.  8B42 10       MOV EAX,DWORD PTR DS:[EDX+10]            ; |
004677CE  |.  50            PUSH EAX                                 ; |hWnd
004677CF  |.  FF15 F4624800 CALL DWORD PTR DS:[<&USER32.SendMessageA>; \SendMessageA
004677D5  |.  33C9          XOR ECX,ECX
004677D7  |.  83F8 02       CMP EAX,2
004677DA  |.  0F94C1        SETE CL
004677DD  |.  894D F8       MOV DWORD PTR SS:[EBP-8],ECX
004677E0  |.  C745 9C FFFFF>MOV DWORD PTR SS:[EBP-64],-1
004677E7  |.  C745 F0 00000>MOV DWORD PTR SS:[EBP-10],0
004677EE  |.  EB 09         JMP SHORT Ekd5.004677F9
004677F0  |>  8B55 F0       /MOV EDX,DWORD PTR SS:[EBP-10]
004677F3  |.  83C2 01       |ADD EDX,1
004677F6  |.  8955 F0       |MOV DWORD PTR SS:[EBP-10],EDX
004677F9  |>  8B45 98        MOV EAX,DWORD PTR SS:[EBP-68]
004677FC  |.  33C9          |XOR ECX,ECX
004677FE  |.  8A48 14       |MOV CL,BYTE PTR DS:[EAX+14]
00467801  |.  394D F0       |CMP DWORD PTR SS:[EBP-10],ECX
00467804  |.  0F8D 11060000 |JGE Ekd5.00467E1B
0046780A  |.  8D55 A0       |LEA EDX,DWORD PTR SS:[EBP-60]
0046780D  |.  52            |PUSH EDX                                ; /lParam
0046780E  |.  8B45 F0       |MOV EAX,DWORD PTR SS:[EBP-10]           ; |
00467811  |.  50            |PUSH EAX                                ; |wParam
00467812  |.  68 19100000   |PUSH 1019                               ; |Message = MSG(1019)
00467817  |.  8B4D 98       |MOV ECX,DWORD PTR SS:[EBP-68]           ; |
0046781A  |.  8B51 10       |MOV EDX,DWORD PTR DS:[ECX+10]           ; |
0046781D  |.  52            |PUSH EDX                                ; |hWnd
0046781E  |.  FF15 F4624800 |CALL DWORD PTR DS:[<&USER32.SendMessage>; \SendMessageA
00467824  |.  C745 F4 24800>|MOV DWORD PTR SS:[EBP-C],8024
0046782B  |.  8B45 A4       |MOV EAX,DWORD PTR SS:[EBP-5C]
0046782E  |.  83E0 03       |AND EAX,3
00467831  |.  8945 94       |MOV DWORD PTR SS:[EBP-6C],EAX
00467834  |.  837D 94 00    |CMP DWORD PTR SS:[EBP-6C],0
00467838  |.  74 0E         |JE SHORT Ekd5.00467848
0046783A  |.  837D 94 01    |CMP DWORD PTR SS:[EBP-6C],1
0046783E  |.  74 10         |JE SHORT Ekd5.00467850
00467840  |.  837D 94 02    |CMP DWORD PTR SS:[EBP-6C],2
00467844  |.  74 15         |JE SHORT Ekd5.0046785B
00467846  |.  EB 1D         |JMP SHORT Ekd5.00467865
00467848  |>  8B4D F4       |MOV ECX,DWORD PTR SS:[EBP-C]
0046784B  |.  894D F4       |MOV DWORD PTR SS:[EBP-C],ECX
0046784E  |.  EB 1B         |JMP SHORT Ekd5.0046786B
00467850  |>  8B55 F4       |MOV EDX,DWORD PTR SS:[EBP-C]
00467853  |.  83CA 02       |OR EDX,2
00467856  |.  8955 F4       |MOV DWORD PTR SS:[EBP-C],EDX
00467859  |.  EB 10         |JMP SHORT Ekd5.0046786B
0046785B  |>  8B45 F4       |MOV EAX,DWORD PTR SS:[EBP-C]
0046785E  |.  0C 01         |OR AL,1
00467860  |.  8945 F4       |MOV DWORD PTR SS:[EBP-C],EAX
00467863  |.  EB 06         |JMP SHORT Ekd5.0046786B
00467865  |>  8B4D F4       |MOV ECX,DWORD PTR SS:[EBP-C]
00467868  |.  894D F4       |MOV DWORD PTR SS:[EBP-C],ECX
0046786B  |>  6A 00         |PUSH 0                                  ; /lParam = 0
0046786D  |.  8B55 F0       |MOV EDX,DWORD PTR SS:[EBP-10]           ; |
00467870  |.  52            |PUSH EDX                                ; |wParam
00467871  |.  68 1D100000   |PUSH 101D                               ; |Message = MSG(101D)
00467876  |.  8B45 98       |MOV EAX,DWORD PTR SS:[EBP-68]           ; |
00467879  |.  8B48 10       |MOV ECX,DWORD PTR DS:[EAX+10]           ; |
0046787C  |.  51            |PUSH ECX                                ; |hWnd
0046787D  |.  FF15 F4624800 |CALL DWORD PTR DS:[<&USER32.SendMessage>; \SendMessageA
00467883  |.  8B55 C0       |MOV EDX,DWORD PTR SS:[EBP-40]
00467886  |.  8D4402 FB     |LEA EAX,DWORD PTR DS:[EDX+EAX-5]
0046788A  |.  8945 C8       |MOV DWORD PTR SS:[EBP-38],EAX
0046788D  |.  8B4D C0       |MOV ECX,DWORD PTR SS:[EBP-40]
00467890  |.  83C1 05       |ADD ECX,5
00467893  |.  894D C0       |MOV DWORD PTR SS:[EBP-40],ECX
00467896  |.  8B55 98       |MOV EDX,DWORD PTR SS:[EBP-68]
00467899  |.  8B42 18       |MOV EAX,DWORD PTR DS:[EDX+18]
0046789C  |.  8B4D F0       |MOV ECX,DWORD PTR SS:[EBP-10]
0046789F  |.  8B1488        |MOV EDX,DWORD PTR DS:[EAX+ECX*4]
004678A2  |.  8955 90       |MOV DWORD PTR SS:[EBP-70],EDX
004678A5  |.  837D 90 0C    |CMP DWORD PTR SS:[EBP-70],0C
004678A9  |.  0F87 28050000 |JA Ekd5.00467DD7


请问一下判断0号武将有关的代码是哪个……本人汇编技术太差,敬请谅解。

谢谢~^ ^

[ 本帖最后由 WHITESHIP 于 2011-3-10 15:45 编辑 ]
作者: godtype    时间: 2011-3-10 16:40     标题: 回复 #47 WHITESHIP 的帖子

你贴这个是仓库界面,正确的叫某人打开仓库之类的是在41973C里面。至于循环测试武将是否在场,要研究一下R场景相关的再回复。
作者: tydea    时间: 2011-3-12 17:23     标题: 回复 #1 godtype 的帖子

原版引擎仙人过后的兵种,攻击声音移动速度等,都找不到。
有什么办法?
作者: godtype    时间: 2011-3-12 17:25     标题: 回复 #49 tydea 的帖子

雪芸教程里面都有改法,不需要再解释吧。
作者: tydea    时间: 2011-3-12 22:11

游戏中我把宝物图片改掉了。
可是宝物升级的时候,显示出来的图片,还是之前那个。
请问咋解决。。。

[ 本帖最后由 tydea 于 2011-3-12 22:13 编辑 ]

图片附件: 1.jpg (2011-3-12 22:13, 5.44 K) / 该附件被下载次数 81
http://xycq.org.cn/forum/attachment.php?aid=106979



图片附件: 2.jpg (2011-3-12 22:13, 10.82 K) / 该附件被下载次数 75
http://xycq.org.cn/forum/attachment.php?aid=106980


作者: godtype    时间: 2011-3-13 09:05     标题: 回复 #51 tydea 的帖子

1、ITEM.E5没改
2、不属于本帖范畴,去其他地方提问。
作者: 513633522    时间: 2011-3-16 07:13

原曹操传有没有像瓦岗发动绝招时那样,屏幕出现半透明的红色,然后出现绝招名字的函数,如果有,毅大能告诉我位置和用法吗
作者: godtype    时间: 2011-3-16 08:57     标题: 回复 #53 513633522 的帖子

http://www.xycq.net/forum/viewth ... 2744&highlight=
作者: tydea    时间: 2011-3-17 13:23

原版中获得兵器的等级算法,如何改成瓦岗那样的算法?
作者: godtype    时间: 2011-3-19 16:11



QUOTE:
原帖由 tydea 于 2011-3-17 13:23 发表
原版中获得兵器的等级算法,如何改成瓦岗那样的算法?

代码涉及太多,只写出原版相关的代码,根据自己的实际情况来改动。

普通装备:
00408069  |. B9 0C000000    MOV ECX,0C
00408088  |. B9 0C000000    MOV ECX,0C
004080B5  |. B9 0C000000    MOV ECX,0C
00407F15  |. B9 0C000000    MOV ECX,0C
00414571  |. B9 0C000000    MOV ECX,0C
00416C1C  |. B9 0C000000    |MOV ECX,0C
初级升中级、中级升高级装备所需要等级。

004080BC  |. C1EA 02        SHR EDX,2
00407F1C  |. C1EA 02        SHR EDX,2
00414578  |. C1EA 02        SHR EDX,2
00416C23  |. C1EA 02        |SHR EDX,2
SHR ***,2是除以4,即武将每4级装备升1级

004080A0  |. 83F9 24        CMP ECX,24
00407EFE  |. 83FA 24        CMP EDX,24
0041455C  |. 83F8 24        CMP EAX,24
00416C03  |. 83F8 24        |CMP EAX,24
36开始全部装备3级的高级装备。

宝物装备:
00414521  |. C1F8 02        SAR EAX,2
00414543  |. C1F8 02        SAR EAX,2
00416BC4  |. C1F8 02        |SAR EAX,2
00416BE6  |. C1F8 02        |SAR EAX,2
00407EC3  |. C1F8 02        SAR EAX,2
00407EE5  |. C1F8 02        SAR EAX,2
武将每4级装备升1级。

如果要修改武将每N级装备升1级的级数,需要调整前后的代码。
作者: 3943169    时间: 2011-3-20 19:36

宝物可以提升某各地形的适性,类似与岳飞传破浪的效果。请问如何做这种效果?
作者: godtype    时间: 2011-3-20 20:06     标题: 回复 #57 3943169 的帖子

已经超出本帖范畴了,给你神之奖励版的,自己去参考一下。
00451526  |. E8 90DD0700    CALL 004CF2BB
0045152B  |. 85C0           TEST EAX,EAX
0045152D  |. 0F85 E8010000  JNZ 0045171B
00451533  |. 90             NOP
00451534  |. 90             NOP

00451751  |. E8 65DB0700    CALL 004CF2BB
00451756  |. 85C0           TEST EAX,EAX
00451758  |. 0F85 90010000  JNZ 004518EE
0045175E  |. 90             NOP
0045175F  |. 90             NOP

004CF2BB   55               PUSH EBP
004CF2BC   8BEC             MOV EBP,ESP
004CF2BE   51               PUSH ECX
004CF2BF   E8 0E170000      CALL 004D09D2
004CF2C4   894D FC          MOV DWORD PTR SS:[EBP-4],ECX
004CF2C7   6A 2C            PUSH 2C
004CF2C9   E8 F2160000      CALL 004D09C0
004CF2CE   E8 3687F3FF      CALL 00407A09
004CF2D3   8B4D FC          MOV ECX,DWORD PTR SS:[EBP-4]
004CF2D6   8BE5             MOV ESP,EBP
004CF2D8   5D               POP EBP
004CF2D9   C3               RETN
作者: WHITESHIP    时间: 2011-3-26 01:05

问一个可能会有些麻烦的问题:
指令 6B:法术。使用时会等一法术释放完才会执行下一条指令,可以通过修改EXE让它不延迟,施放Meff动画的同时就执行下一条指令么?

于是这样就做到在地图上多个点同时展示法术效果了。如果需要延迟,则用指令“延时”,更加方便。

鉴于毅大也研究过MCall和Meff,特此请教,谢谢~^ ^
作者: godtype    时间: 2011-3-26 08:40     标题: 回复 #59 WHITESHIP 的帖子

不可能的事。
作者: tydea    时间: 2011-3-26 10:48

怎样让敌方,不用焦灼这个策略?
作者: godtype    时间: 2011-3-26 10:55     标题: 回复 #61 tydea 的帖子

雪芸的EXE修改教程有写,AI使用策略部分。
作者: tydea    时间: 2011-3-26 11:07     标题: 回复 #62 godtype 的帖子

找到了……不过不知道焦灼的地址在哪……
作者: godtype    时间: 2011-3-26 11:19     标题: 回复 #63 tydea 的帖子

按策略顺序排列。
作者: tydea    时间: 2011-4-4 18:27

毅哥……无论什么职业,用物理攻击和策略都增加武器经验的,在哪改?
记得问过你,突然找不到了……
作者: godtype    时间: 2011-4-4 18:38     标题: 回复 #65 tydea 的帖子

00403A06  |. 74 05          JE SHORT 00403A0D

改成JMP
作者: tydea    时间: 2011-4-9 17:05     标题: 回复 #66 godtype 的帖子

多谢毅大,不过这个只是文官用普通攻击的时候,增加武器经验。
请问武将用策略的时候,也增加武器经验,哪个。。
作者: godtype    时间: 2011-4-9 17:34     标题: 回复 #67 tydea 的帖子

004212EA  |. 74 08          JE SHORT 004212F4

改成JMP
作者: aaa132536    时间: 2011-4-15 19:06

00406539  |.  8B4D FC       |MOV ECX,DWORD PTR SS:[EBP-4]
0040653C  |.  E8 C2F8FFFF   |CALL Ekd5.00405E03                   攻击伤害函数

毅兄这是输入攻击伤害函数的入口,这个函数我只知道传入一个参数ECX:内存地址004927F0,那攻击方武将代码与被攻击方武将代码有没有作为参数传入哦。

[ 本帖最后由 aaa132536 于 2011-4-15 19:08 编辑 ]
作者: godtype    时间: 2011-4-15 19:24     标题: 回复 #69 aaa132536 的帖子

http://www.xycq.net/forum/thread-124674-1-1.html
如果没有看过,先看一下;如果看过,看不明白我再解释。
作者: aaa132536    时间: 2011-4-15 20:05

这个看过了,我上面代码就是从那边来的,不过里面只有岱大有解释的代码看明白,其他的都是一知半解的,呵呵。
作者: godtype    时间: 2011-4-16 09:51

AI攻击
0043AC2F  |. 8A45 F8        MOV AL,BYTE PTR SS:[EBP-8]
0043AC32  |. 50             PUSH EAX    <——被攻击方的战场编号压入0C栈
0043AC33  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
0043AC36  |. 8A51 04        MOV DL,BYTE PTR DS:[ECX+4]
0043AC39  |. 52             PUSH EDX    <——攻击方的战场编号压入08栈
0043AC3A  |. B9 F0274900    MOV ECX,004927F0
0043AC3F  |. E8 ADB8FCFF    CALL 004064F1


玩家点击攻击
0043DB3E  |. 8A45 F8        MOV AL,BYTE PTR SS:[EBP-8]
0043DB41  |. 50             PUSH EAX    <——被攻击方的战场编号压入0C栈
0043DB42  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
0043DB45  |. 8A51 04        MOV DL,BYTE PTR DS:[ECX+4]
0043DB48  |. 52             PUSH EDX    <——攻击方的战场编号压入08栈
0043DB49  |. B9 F0274900    MOV ECX,004927F0
0043DB4E  |. E8 9E89FCFF    CALL 004064F1


反击
004064DA  |. 8A02           MOV AL,BYTE PTR DS:[EDX]
004064DC  |. 50             PUSH EAX    <——原攻击方的战场编号压入0C栈变成被攻击方
004064DD  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
004064E0  |. 8A51 01        MOV DL,BYTE PTR DS:[ECX+1]
004064E3  |. 52             PUSH EDX    <——原被攻击方的战场编号压入08栈变成攻击方
004064E4  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]    <——4927F0
004064E7  |. E8 05000000    CALL 004064F1

另外还有两个地方是引导攻击的,不贴了,分别在AI攻击和玩家点击攻击的下面。
004064F1  /$ 55             PUSH EBP
004064F2  |. 8BEC           MOV EBP,ESP
004064F4  |. 51             PUSH ECX
004064F5  |. 894D FC        MOV DWORD PTR SS:[EBP-4],ECX
004064F8  |. 8A45 0C        MOV AL,BYTE PTR SS:[EBP+C]
004064FB  |. 50             PUSH EAX                                 ; /Arg2
004064FC  |. 8A4D 08        MOV CL,BYTE PTR SS:[EBP+8]               ; |
004064FF  |. 51             PUSH ECX                                 ; |Arg1
00406500  |. 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]             ; |
00406503  |. E8 F4FCFFFF    CALL 004061FC
4061FC会将攻防双方的战场编号存入4927F0开始的各个内存位置中,再经过各种计算算出攻击处理所需要的一系列数据存进内存中,后面的各种处理就可以直接从4927F0+XX中读出使用。
00406508  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
0040650B  |. C682 08060000 >MOV BYTE PTR DS:[EDX+608],0
00406512  |. EB 15          JMP SHORT 00406529
00406514  |> 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4]
00406517  |. 8A88 08060000  |MOV CL,BYTE PTR DS:[EAX+608]
0040651D  |. 80C1 01        |ADD CL,1
00406520  |. 8B55 FC        |MOV EDX,DWORD PTR SS:[EBP-4]
00406523  |. 888A 08060000  |MOV BYTE PTR DS:[EDX+608],CL
00406529  |> 8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
0040652C  |. 33C9           |XOR ECX,ECX
0040652E  |. 8A88 08060000  |MOV CL,BYTE PTR DS:[EAX+608]
00406534  |. 83F9 02        |CMP ECX,2
00406537  |. 7D 28          |JGE SHORT 00406561
00406539  |. 8B4D FC        |MOV ECX,DWORD PTR SS:[EBP-4]
0040653C  |. E8 C2F8FFFF    |CALL 00405E03
00406541  |. 8B4D FC        |MOV ECX,DWORD PTR SS:[EBP-4]
00406544  |. E8 FBF1FFFF    |CALL 00405744
00406549  |. 8B4D FC        |MOV ECX,DWORD PTR SS:[EBP-4]
0040654C  |. E8 38F3FFFF    |CALL 00405889
00406551  |. 8B4D FC        |MOV ECX,DWORD PTR SS:[EBP-4]
00406554  |. E8 28FCFFFF    |CALL 00406181
00406559  |. 85C0           |TEST EAX,EAX
0040655B  |. 75 02          |JNZ SHORT 0040655F
0040655D  |. EB 02          |JMP SHORT 00406561
0040655F  |>^EB B3          \JMP SHORT 00406514
00406561  |> 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
00406564  |. E8 03F7FFFF    CALL 00405C6C
00406569  |. 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
0040656C  |. E8 29FEFFFF    CALL 0040639A
00406571  |. 8BE5           MOV ESP,EBP
00406573  |. 5D             POP EBP
00406574  \. C2 0800        RETN 8


[ 本帖最后由 godtype 于 2011-4-16 09:52 编辑 ]
作者: aaa132536    时间: 2011-4-16 12:05

谢谢毅兄,我好好学习下
作者: tydea    时间: 2011-4-16 23:21

曹操传里面的自动存档,读档后都是在结束回合前的状态上继续的。
若是都行动过了,再读档,觉得很没意义。
所以能不能把它改成:读档后是从我方行动前开始。这样就有意义多了。。
作者: godtype    时间: 2011-4-17 08:30



QUOTE:
原帖由 tydea 于 2011-4-16 23:21 发表
曹操传里面的自动存档,读档后都是在结束回合前的状态上继续的。
若是都行动过了,再读档,觉得很没意义。
所以能不能把它改成:读档后是从我方行动前开始。这样就有意义多了。。

没有研究过,理论上可行,等有时间再说。
作者: godtype    时间: 2011-4-17 08:31

谢谢各位一直以来的支持,暂时停止解释,再开时间待定。
作者: 513633522    时间: 2011-4-17 08:56

谢谢毅大对我们的帮助,等待再开的时间
作者: okokwori    时间: 2024-9-30 10:15

灌水刷权限




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