标题: 剧本指令【人物点击】修改
性别:未知-离线 砖家叫兽

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 274
编号 406021
注册 2010-12-7


发表于 2011-12-14 14:24 资料 短消息 只看该作者
剧本指令【人物点击】修改

最近一次更新《江湖》,特意增加了个南州镖局的作战剧情。其中包括了战场上点击人物的修改。

在我印象中好像剧本中【人物点击】那个指令只能在R场景下使用。经过修改后,发现可以这么修改一下,在战场上进行触发判断。

004119E7  /$  55            PUSH EBP                                 ;  点击人物
004119E8  |.  8BEC          MOV EBP,ESP
004119EA  |.  6A 02         PUSH 2
004119EC  |.  8B4D 08       MOV ECX,DWORD PTR SS:[EBP+8]
004119EF  |.  E8 036A0000   CALL Ekd5.004183F7
004119F4  |.  50            PUSH EAX
004119F5  |.  8B4D 08       MOV ECX,DWORD PTR SS:[EBP+8]
004119F8  |.  E8 DB720C00   CALL Ekd5.004D8CD8
004119FD  |.  8BE5          MOV ESP,EBP
004119FF  |.  5D            POP EBP
00411A00  \.  C3            RETN

把后头一串的函数都重新写过,留了原先这个函数位置获取判断点击人物的值
然后这个值作为参数传入 进行检测

004D8CD8    55              PUSH EBP                                 ; 点击人物
004D8CD9    8BEC            MOV EBP,ESP
004D8CDB    51              PUSH ECX
004D8CDC    6A FF           PUSH -1
004D8CDE    E8 3F2CF3FF     CALL Ekd5.0040B922
004D8CE3    85C0            TEST EAX,EAX
004D8CE5    74 20           JE SHORT Ekd5.004D8D07
004D8CE7    B9 DC9F4D00     MOV ECX,Ekd5.004D9FDC                    ; 战场
004D8CEC    C641 02 01      MOV BYTE PTR DS:[ECX+2],1
004D8CF0    0FB701          MOVZX EAX,WORD PTR DS:[ECX]
004D8CF3    66:83F8 FF      CMP AX,0FFFF
004D8CF7    74 49           JE SHORT Ekd5.004D8D42
004D8CF9    66:C701 FFFF    MOV WORD PTR DS:[ECX],0FFFF
004D8CFE    6A 00           PUSH 0
004D8D00    E8 7B000000     CALL Ekd5.004D8D80
004D8D05    EB 24           JMP SHORT Ekd5.004D8D2B
004D8D07    B9 70074B00     MOV ECX,Ekd5.004B0770                    ; 非战场
004D8D0C    E8 FF1BF5FF     CALL Ekd5.0042A910
004D8D11    83E0 20         AND EAX,20
004D8D14    85C0            TEST EAX,EAX
004D8D16    74 2A           JE SHORT Ekd5.004D8D42
004D8D18    6A 04           PUSH 4
004D8D1A    8D4D F8         LEA ECX,DWORD PTR SS:[EBP-8]
004D8D1D    51              PUSH ECX
004D8D1E    6A 01           PUSH 1
004D8D20    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
004D8D23    E8 2573F3FF     CALL Ekd5.0041004D
004D8D28    8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
004D8D2B    A3 F07F5000     MOV DWORD PTR DS:[507FF0],EAX
004D8D30    66:837D 08 FF   CMP WORD PTR SS:[EBP+8],0FFFF
004D8D35    74 06           JE SHORT Ekd5.004D8D3D
004D8D37    66:3B45 08      CMP AX,WORD PTR SS:[EBP+8]
004D8D3B    75 05           JNZ SHORT Ekd5.004D8D42
004D8D3D    33C0            XOR EAX,EAX
004D8D3F    40              INC EAX
004D8D40    EB 02           JMP SHORT Ekd5.004D8D44
004D8D42    33C0            XOR EAX,EAX
004D8D44    8BE5            MOV ESP,EBP
004D8D46    5D              POP EBP
004D8D47    C3              RETN

非战场可以不变,我这里多加了个保存到指针2044,以及点击【无】时绝对响应。
这个主要是为了方便大场景的计算。比方众多按钮,每条SECTION弄个人物点击测试很烦人。现在配合上指针2044,只需要取出值来进行计算就可以。

战场部分 4D9FDC +2的内存标记1 用于战场点击人物后的响应标记
004D8CE7    B9 DC9F4D00     MOV ECX,Ekd5.004D9FDC                    ; 战场
004D8CEC    C641 02 01      MOV BYTE PTR DS:[ECX+2],1

这一段从战场点击人物后的响应段切出来
004D8D50    55              PUSH EBP                                 ; 战场点击
004D8D51    8BEC            MOV EBP,ESP
004D8D53    BA DC9F4D00     MOV EDX,Ekd5.004D9FDC
004D8D58    807A 02 01      CMP BYTE PTR DS:[EDX+2],1
004D8D5C    75 10           JNZ SHORT Ekd5.004D8D6E
004D8D5E    8B01            MOV EAX,DWORD PTR DS:[ECX]
004D8D60    66:8902         MOV WORD PTR DS:[EDX],AX
004D8D63    6A 01           PUSH 1
004D8D65    8BCA            MOV ECX,EDX
004D8D67    E8 14000000     CALL Ekd5.004D8D80
004D8D6C    EB 02           JMP SHORT Ekd5.004D8D70
004D8D6E    33C0            XOR EAX,EAX
004D8D70    8BE5            MOV ESP,EBP
004D8D72    5D              POP EBP
004D8D73    C3              RETN

其中EAX为1代表不需要移动等,否则就要移动 选择攻击什么的

0043DDE2  /$  55            PUSH EBP
0043DDE3  |.  8BEC          MOV EBP,ESP
0043DDE5  |.  83EC 34       SUB ESP,34
0043DDE8  |.  53            PUSH EBX
0043DDE9  |.  894D D4       MOV DWORD PTR SS:[EBP-2C],ECX
0043DDEC  |.  33C0          XOR EAX,EAX
0043DDEE  |.  8945 E8       MOV DWORD PTR SS:[EBP-18],EAX
0043DDF1  |.  8945 F4       MOV DWORD PTR SS:[EBP-C],EAX
0043DDF4  |.  8945 E4       MOV DWORD PTR SS:[EBP-1C],EAX
0043DDF7  |.  8A41 0F       MOV AL,BYTE PTR DS:[ECX+F]
0043DDFA  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
0043DDFD  |.  66:8B41 06    MOV AX,WORD PTR DS:[ECX+6]
0043DE01  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX
0043DE04  |.  E8 47AF0900   CALL Ekd5.004D8D50
0043DE09  |.  85C0          TEST EAX,EAX
0043DE0B  |.  75 37         JNZ SHORT Ekd5.0043DE44

实际上,引擎的顺序是,战场点击一次,然后剧本判断一次,二者交替进行
实际上,在剧本判断时,【点击测试】的指令负责将点击的人物记录到指定地址
然后点击人物的时候检测相应位置,看是否有相应的指令

004D8D80    55              PUSH EBP                                 ; 写入,搜索
004D8D81    8BEC            MOV EBP,ESP
004D8D83    51              PUSH ECX
004D8D84    8B55 08         MOV EDX,DWORD PTR SS:[EBP+8]
004D8D87    85D2            TEST EDX,EDX
004D8D89    74 20           JE SHORT Ekd5.004D8DAB
004D8D8B    8B01            MOV EAX,DWORD PTR DS:[ECX]
004D8D8D    66:3B41 FE      CMP AX,WORD PTR DS:[ECX-2]
004D8D91    74 54           JE SHORT Ekd5.004D8DE7
004D8D93    83E9 04         SUB ECX,4
004D8D96    66:3B01         CMP AX,WORD PTR DS:[ECX]
004D8D99    74 51           JE SHORT Ekd5.004D8DEC
004D8D9B    66:8339 FE      CMP WORD PTR DS:[ECX],0FFFE
004D8D9F    74 46           JE SHORT Ekd5.004D8DE7
004D8DA1    66:8339 FF      CMP WORD PTR DS:[ECX],0FFFF
004D8DA5    74 3C           JE SHORT Ekd5.004D8DE3
004D8DA7    49              DEC ECX
004D8DA8    49              DEC ECX
004D8DA9  ^ EB EB           JMP SHORT Ekd5.004D8D96
004D8DAB    50              PUSH EAX
004D8DAC    8B4D 00         MOV ECX,DWORD PTR SS:[EBP]
004D8DAF    66:8B41 08      MOV AX,WORD PTR DS:[ECX+8]
004D8DB3    66:83F8 FF      CMP AX,0FFFF
004D8DB7    75 01           JNZ SHORT Ekd5.004D8DBA
004D8DB9    48              DEC EAX
004D8DBA    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
004D8DBD    83E9 04         SUB ECX,4
004D8DC0    66:3B01         CMP AX,WORD PTR DS:[ECX]
004D8DC3    74 1B           JE SHORT Ekd5.004D8DE0
004D8DC5    66:8339 FF      CMP WORD PTR DS:[ECX],0FFFF
004D8DC9    74 0C           JE SHORT Ekd5.004D8DD7
004D8DCB    81F9 928D4D00   CMP ECX,Ekd5.004D8D92
004D8DD1    76 0D           JBE SHORT Ekd5.004D8DE0
004D8DD3    49              DEC ECX
004D8DD4    49              DEC ECX
004D8DD5  ^ EB E9           JMP SHORT Ekd5.004D8DC0
004D8DD7    66:8901         MOV WORD PTR DS:[ECX],AX
004D8DDA    66:C741 FE FFFF MOV WORD PTR DS:[ECX-2],0FFFF
004D8DE0    58              POP EAX
004D8DE1    EB 15           JMP SHORT Ekd5.004D8DF8
004D8DE3    33C0            XOR EAX,EAX
004D8DE5    EB 08           JMP SHORT Ekd5.004D8DEF
004D8DE7    E8 94000000     CALL Ekd5.004D8E80
004D8DEC    33C0            XOR EAX,EAX
004D8DEE    40              INC EAX
004D8DEF    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
004D8DF2    8B11            MOV EDX,DWORD PTR DS:[ECX]
004D8DF4    66:8951 FE      MOV WORD PTR DS:[ECX-2],DX
004D8DF8    8BE5            MOV ESP,EBP
004D8DFA    5D              POP EBP
004D8DFB    C3              RETN

考虑一个FFFF的情况,也就是默认允许的情况

004D8E80    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
004D8E83    8078 03 00      CMP BYTE PTR DS:[EAX+3],0
004D8E87    75 04           JNZ SHORT Ekd5.004D8E8D
004D8E89    832C24 09       SUB DWORD PTR SS:[ESP],9
004D8E8D    C3              RETN

多一个开关,决定是否要移动,用指针修改这个值,在战场上就可以实现在剧情触发完以前,点击战场人物仅仅用于剧情

测试情况以及剧本示例见《江湖英烈纪事》南州镖局第四回合的剧情

[ 本帖最后由 砖家叫兽 于 2011-12-14 14:29 编辑 ]


顶部
性别:男-离线 希布

武平侯
建武军节度使

Rank: 12Rank: 12Rank: 12
组别 节度使
级别 护军
功绩 30
帖子 453
编号 185728
注册 2007-7-6


发表于 2011-12-14 16:19 资料 文集 短消息 只看该作者
抢下沙发!
突然跑进来学习学习。呵呵。


顶部
性别:未知-离线 砖家叫兽

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 274
编号 406021
注册 2010-12-7


发表于 2011-12-14 16:53 资料 短消息 只看该作者
诡异的二楼啊,为什么制作区显示回帖是0
顶部
性别:男-离线 灬棉崽灬

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 右将军
功绩 11
帖子 1071
编号 412792
注册 2011-2-2
家族 轩辕学院


发表于 2011-12-24 20:24 资料 个人空间 短消息 只看该作者
在战场也可以点击人物进行对话?好有趣我研究研究
顶部
性别:男-离线 狂煞∑小星
(Myth阿杨)

Rank: 5Rank: 5
组别 士兵
级别 破虏将军
功绩 7
帖子 720
编号 308223
注册 2009-1-29
家族 轩辕学院


发表于 2012-1-21 01:24 资料 个人空间 短消息 只看该作者 QQ
这样的话,打一场战斗……得需要好长时间呃……
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-2-8 02:16
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.014111 second(s), 10 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP