轩辕春秋文化论坛 » 曹操传MOD制作交流 » 接受咨询,解释原版代码


2011-3-26 10:48 tydea
怎样让敌方,不用焦灼这个策略?

2011-3-26 10:55 godtype
回复 #61 tydea 的帖子

雪芸的EXE修改教程有写,AI使用策略部分。

2011-3-26 11:07 tydea
回复 #62 godtype 的帖子

找到了……不过不知道焦灼的地址在哪……

2011-3-26 11:19 godtype
回复 #63 tydea 的帖子

按策略顺序排列。

2011-4-4 18:27 tydea
毅哥……无论什么职业,用物理攻击和策略都增加武器经验的,在哪改?
记得问过你,突然找不到了……

2011-4-4 18:38 godtype
回复 #65 tydea 的帖子

00403A06  |. 74 05          JE SHORT 00403A0D

改成JMP

2011-4-9 17:05 tydea
回复 #66 godtype 的帖子

多谢毅大,不过这个只是文官用普通攻击的时候,增加武器经验。
请问武将用策略的时候,也增加武器经验,哪个。。

2011-4-9 17:34 godtype
回复 #67 tydea 的帖子

004212EA  |. 74 08          JE SHORT 004212F4

改成JMP

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

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

[color=Silver][[i] 本帖最后由 aaa132536 于 2011-4-15 19:08 编辑 [/i]][/color]

2011-4-15 19:24 godtype
回复 #69 aaa132536 的帖子

[url]http://www.xycq.net/forum/thread-124674-1-1.html[/url]
如果没有看过,先看一下;如果看过,看不明白我再解释。

2011-4-15 20:05 aaa132536
这个看过了,我上面代码就是从那边来的,不过里面只有岱大有解释的代码看明白,其他的都是一知半解的,呵呵。

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

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

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

另外还有两个地方是引导攻击的,不贴了,分别在AI攻击和玩家点击攻击的下面。
[font=宋体]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[/font]

[color=Silver][[i] 本帖最后由 godtype 于 2011-4-16 09:52 编辑 [/i]][/color]

2011-4-16 12:05 aaa132536
谢谢毅兄,我好好学习下

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

2011-4-17 08:30 godtype
[quote]原帖由 [i]tydea[/i] 于 2011-4-16 23:21 发表
曹操传里面的自动存档,读档后都是在结束回合前的状态上继续的。
若是都行动过了,再读档,觉得很没意义。
所以能不能把它改成:读档后是从我方行动前开始。这样就有意义多了。。 [/quote]
没有研究过,理论上可行,等有时间再说。

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

2011-4-17 08:56 513633522
谢谢毅大对我们的帮助,等待再开的时间:hz1024:

2024-9-30 10:15 okokwori
灌水刷权限

页: 1 [2]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.