0046E1AC /$ 55 PUSH EBP
0046E1AD |. 8BEC MOV EBP,ESP
0046E1AF |. 51 PUSH ECX
0046E1B0 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0046E1B3 |. 33D2 XOR EDX,EDX
0046E1B5 |. F771 48 DIV DWORD PTR DS:[ECX+48]
0046E1B8 |. 8955 08 MOV DWORD PTR SS:[EBP+8],EDX
0046E1BB |. 803D CA7C4D00>CMP BYTE PTR DS:[4D7CCA],0
做标记的用途
0046E1C2 |. 0F85 91000000 JNZ Ekd5.0046E259
0046E1C8 |. 837D 0C 00 CMP DWORD PTR SS:[EBP+C],0
0046E1CC |. 0F84 96000000 JE Ekd5.0046E268
0046E1D2 |. 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
0046E1D6 |. 0F8E 8C000000 JLE Ekd5.0046E268
0046E1DC |> 8B4D FC /MOV ECX,DWORD PTR SS:[EBP-4]
0046E1DF |. 0FB641 41 |MOVZX EAX,BYTE PTR DS:[ECX+41]
0046E1E3 |. 3B45 08 |CMP EAX,DWORD PTR SS:[EBP+8]
0046E1E6 |. 7D 10 |JGE SHORT Ekd5.0046E1F8
0046E1E8 |. 8B41 48 |MOV EAX,DWORD PTR DS:[ECX+48]
0046E1EB |. 99 |CDQ
0046E1EC |. B9 0A000000 |MOV ECX,0A
0046E1F1 |. F7F1 |DIV ECX
0046E1F3 |. 2945 08 |SUB DWORD PTR SS:[EBP+8],EAX
0046E1F6 |.^ EB E4 \JMP SHORT Ekd5.0046E1DC
0046E1F8 |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0046E1FB |. 8A45 08 MOV AL,BYTE PTR SS:[EBP+8]
0046E1FE |. 8841 40 MOV BYTE PTR DS:[ECX+40],AL
0046E201 |. 6A 00 PUSH 0 ; /IsSigned = FALSE
0046E203 |. 0FB641 40 MOVZX EAX,BYTE PTR DS:[ECX+40] ; |
0046E207 |. 50 PUSH EAX ; |Value
0046E208 |. 68 9D050000 PUSH 59D ; |ControlID = 59D (1437.)
0046E20D |. 8B51 04 MOV EDX,DWORD PTR DS:[ECX+4] ; |
0046E210 |. 52 PUSH EDX ; |hWnd
0046E211 |. FF15 E4624800 CALL DWORD PTR DS:[<&USER32.SetDlgItemIn>; \SetDlgItemInt
0046E217 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0046E21A |. 0FB641 4C MOVZX EAX,BYTE PTR DS:[ECX+4C]
0046E21E |. 50 PUSH EAX ; /lParam
0046E21F |. 50 PUSH EAX ; |wParam
0046E220 |. 68 B1000000 PUSH 0B1 ; |Message = EM_SETSEL
0046E225 |. 68 9D050000 PUSH 59D ; |ControlID = 59D (1437.)
0046E22A |. 8B51 04 MOV EDX,DWORD PTR DS:[ECX+4] ; |
0046E22D |. 52 PUSH EDX ; |hWnd
0046E22E |. FF15 90634800 CALL DWORD PTR DS:[<&USER32.SendDlgItemM>; \SendDlgItemMessageA
0046E234 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0046E237 |. E8 A4FBFFFF CALL Ekd5.0046DDE0
0046E23C |. 6A 01 PUSH 1 ; /Enable = TRUE
0046E23E |. 6A 01 PUSH 1 ; |/ControlID = 1
0046E240 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; ||
0046E243 |. 8B48 04 MOV ECX,DWORD PTR DS:[EAX+4] ; ||
0046E246 |. 51 PUSH ECX ; ||hWnd
0046E247 |. FF15 DC624800 CALL DWORD PTR DS:[<&USER32.GetDlgItem>] ; |\GetDlgItem
0046E24D |. 50 PUSH EAX ; |hWnd
0046E24E |. FF15 E8624800 CALL DWORD PTR DS:[<&USER32.EnableWindow>; \EnableWindow
0046E254 |. E9 CF000000 JMP Ekd5.0046E328
0046E259 |> 90 NOP
0046E25A |. 90 NOP
0046E25B |. 90 NOP
0046E25C |. 90 NOP
0046E25D |. 90 NOP
0046E25E |. 90 NOP
0046E25F |. 817D 04 4FE04>CMP DWORD PTR SS:[EBP+4],Ekd5.0046E04F
0046E266 |. 75 1E JNZ SHORT Ekd5.0046E286
0046E268 |> 90 NOP
此处的判断 完全是为了消除一开始对话框会显示数字1 的BUG
0046E269 |. 90 NOP
0046E26A |. 90 NOP
0046E26B |. 90 NOP
0046E26C |. 90 NOP
0046E26D |. 90 NOP
0046E26E |. 90 NOP
0046E26F |. 68 28694B00 PUSH Ekd5.004B6928 ; /Text = ""
这个地址内容就是空白 所以当你输入非法数字 (比方说 汉字 英文) 就会清空信息 由于前面设置了 CMP 所以 做了标记后 跳过这一段了
0046E274 |. 68 9D050000 PUSH 59D ; |ControlID = 59D (1437.)
0046E279 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] ; |
0046E27C |. 8B42 04 MOV EAX,DWORD PTR DS:[EDX+4] ; |
0046E27F |. 50 PUSH EAX ; |hWnd
0046E280 |. FF15 D8624800 CALL DWORD PTR DS:[<&USER32.SetDlgItemTe>; \SetDlgItemTextA
第一个函数算是接口,我是接到了剧本指令的相应位置来调用的,因此跟蛇夫座与剧本接口处修改差不太多
唯一不同的是,我这个接收文字机制全部在本引擎完成 获取了一个地址来存储信息 还需要配合剧本使用
当然 配合剧本 也有个好处 设置场景名 (比方为主角家设置个性名称,额,这是指金庸群侠传的情况)
总之 配合剧本是比较自由的
另 附两个有用信息
0046DC1C /$ 55 PUSH EBP
0046DC1D |. 8BEC MOV EBP,ESP
0046DC1F |. 51 PUSH ECX
0046DC20 |. 8B45 14 MOV EAX,DWORD PTR SS:[EBP+14]
0046DC23 |. 8941 3C MOV DWORD PTR DS:[ECX+3C],EAX
0046DC26 |. 8B0D 00605000 MOV ECX,DWORD PTR DS:[506000]
0046DC2C |. E8 3C3D0100 CALL Ekd5.0048196D
0046DC31 |. 50 PUSH EAX ; /人物
0046DC32 |. 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C] ; |
0046DC35 |. 52 PUSH EDX ; |上限
0046DC36 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] ; |
0046DC39 |. 83C1 0C ADD ECX,0C ; |
0046DC3C |. E8 91F7FFFF CALL Ekd5.0046D3D2 ; \说话
0046DC41 |. 50 PUSH EAX
0046DC42 |. 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
0046DC45 |. 85C0 TEST EAX,EAX
0046DC47 |. 74 0C JE SHORT Ekd5.0046DC55
0046DC49 |. 50 PUSH EAX ; /Arg1
0046DC4A |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] ; |
0046DC4D |. 83C1 0C ADD ECX,0C ; |
0046DC50 |. E8 E5F7FFFF CALL Ekd5.0046D43A ; \Ekd5.0046D43A
0046DC55 |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
0046DC58 |. 51 PUSH ECX ; /Arg2
0046DC59 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8] ; |
0046DC5C |. 52 PUSH EDX ; |Arg1
0046DC5D |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] ; |
0046DC60 |. E8 33F4FFFF CALL Ekd5.0046D098 ; \Ekd5.0046D098
0046DC65 |. 50 PUSH EAX
0046DC66 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0046DC69 |. 8379 38 00 CMP DWORD PTR DS:[ECX+38],0
0046DC6D |. 74 12 JE SHORT Ekd5.0046DC81
0046DC6F |. 83C1 0C ADD ECX,0C
0046DC72 |. E8 60F8FFFF CALL Ekd5.0046D4D7
0046DC77 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0046DC7A |. C741 38 00000>MOV DWORD PTR DS:[ECX+38],0
0046DC81 |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0046DC84 |. 83C1 0C ADD ECX,0C
0046DC87 |. E8 6DF7FFFF CALL Ekd5.0046D3F9
0046DC8C |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0046DC8F |. 8BE5 MOV ESP,EBP
0046DC91 |. 5D POP EBP
0046DC92 \. C2 1000 RETN 10
这个是买入卖出对话框的修改
特别注明一点
0046DC26 |. 8B0D 00605000 MOV ECX,DWORD PTR DS:[506000]
DATA信息本人已经不用,而采用指针变量0指向首地址,此处需根据实际情况处理
004DC900 55 PUSH EBP
004DC901 8BEC MOV EBP,ESP
004DC903 51 PUSH ECX
004DC904 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
004DC907 53 PUSH EBX
004DC908 33DB XOR EBX,EBX
004DC90A 83FB 49 CMP EBX,49
004DC90D 73 0D JNB SHORT Ekd5.004DC91C
004DC90F 8B02 MOV EAX,DWORD PTR DS:[EDX]
004DC911 8901 MOV DWORD PTR DS:[ECX],EAX
004DC913 83C1 04 ADD ECX,4
004DC916 83C2 04 ADD EDX,4
004DC919 43 INC EBX
004DC91A ^ EB EE JMP SHORT Ekd5.004DC90A
004DC91C 5B POP EBX
004DC91D 8BE5 MOV ESP,EBP
004DC91F 5D POP EBP
004DC920 C2 0400 RETN 4
这个函数就是复制信息
而 对话框的二进制信息 大家可以在EXESCOPE等等中间 设置好
主要是设置 XY 坐标等等 还有就是 取消这个文字 我改成了 确定
不需要的控件 设置大小 X Y =0 或者 坐标 超出范围就可以了
[ 本帖最后由 砖家叫兽 于 2012-2-21 17:49 编辑 ]
|