该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
GSGM公告和移动命令修改,让中文客户端正常使用移动和GM公告
原理上就是这样,GS读取了服务端的信息文件,这个过程是ASCII编码,但是越南版服务端通过WideCharToMultiByte这个函数将信息编码转换为UNICODE编码发送给客户端,让越南客户端能够正常显示信息,同样,越南版客户端移动,GM公告等信息也是以UNICODE编码的形式发送给服务端GS的,而9c1.0客户端发送这些信息是以ASCII的形式发送,所以如果你用9c的客户端登陆越南版的9960 9962 9965服务端,会出现移动命令失效,信息显示不完全的问题。
知道了问题所在,就可以修改GS了,原理就是让服务端GS读取ASCII编码或处理ASCII编码,不再转换为UNICODE编码。
=====================================
这里是GM公告部分的处理方法(nop掉红色部分)
0042CBDA 80BD 90ECFFFF>CMP BYTE PTR SS:[EBP-1370],21 判断是否为GM命令
0042CBE1 74 12 JE SHORT GameServ.0042CBF5
0042CBE3 80BD 90ECFFFF>CMP BYTE PTR SS:[EBP-1370],2F 判断是否为/命令
0042CBEA 0F84 17010000 JE GameServ.0042CD07
0042CBF0 E9 97010000 JMP GameServ.0042CD8C
0042CBF5 837D F0 02 CMP DWORD PTR SS:[EBP-10],2
0042CBF9 0F8E 03010000 JLE GameServ.0042CD02
0042CBFF 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
0042CC02 0FBE51 0E MOVSX EDX,BYTE PTR DS:[ECX+E]
0042CC06 85D2 TEST EDX,EDX
0042CC08 0F85 F4000000 JNZ GameServ.0042CD02
0042CC0E 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0042CC11 8B88 A0010000 MOV ECX,DWORD PTR DS:[EAX+1A0]
第二处修改
0042CC42 |. 83C0 0F ADD EAX,0F
改为
0042CC42 83C0 0E ADD EAX,0E
移动命令部分处理(这里是原来的代码)
0042CD07 837D F0 02 CMP DWORD PTR SS:[EBP-10],2
0042CD0B 7E 7F JLE SHORT GameServ.0042CD8C
0042CD0D 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
0042CD10 0FBE42 0E MOVSX EAX,BYTE PTR DS:[EDX+E]
0042CD14 85C0 TEST EAX,EAX
0042CD16 75 74 JNZ SHORT GameServ.0042CD8C
0042CD18 68 18316600 PUSH GameServ.00663118
0042CD1D 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
0042CD20 83C1 0E ADD ECX,0E
0042CD23 51 PUSH ECX
0042CD24 E8 F75A1300 CALL GameServ.00562820
0042CD29 83C4 08 ADD ESP,8
0042CD2C C685 38EEFFFF>MOV BYTE PTR SS:[EBP-11C8],0
0042CD33 B9 FF030000 MOV ECX,3FF
0042CD38 33C0 XOR EAX,EAX
0042CD3A 8DBD 39EEFFFF LEA ED