EXE下载:http://files.cnblogs.com/xe2011/EXE_wmgjZBViewer2014-3-5-101313.7z
源码下载:http://files.cnblogs.com/xe2011/PASCAL_wmgjZBViewer2014-2-26-195325.7z
[人物配置] ;默认为1.5.1的游戏数据 ;当游戏版本升级时可以手动修改基址,2级偏移有时会改变 ;PosX=[[[C0C68C]+1C]+34]+3c//主角坐标X 取整(坐标/10)+400 ;PosY=[[[C0C68C]+1C]+34]+40//主角坐标Z 取整(坐标/10) ;PosZ=[[[C0C68C]+1C]+34]+44//主角坐标Y 取整(坐标/10)+550 ;【1.5.1 游戏数据】 ;hpmin=[[[00C7ABCC]+1c]+2c]+4a8 ;二级偏移地址改变了 游戏基址=$00C7ABCC 一级偏移地址=$1C 二级偏移地址=$2C X坐标偏移地址=$3C Y坐标偏移地址=$40 Z坐标偏移地址=$44 ;【1.4.8 游戏数据】 ;游戏基址=$C0C68C ;一级偏移地址=$1C ;二级偏移地址=$34 ;X坐标偏移地址=$3C ;Y坐标偏移地址=$40 ;Z坐标偏移地址=$44 ;【1.4.6 游戏数据】 ;游戏基址=$BBC26C ;一级偏移地址=$1C ;二级偏移地址=$34 ;X坐标偏移地址=$3C ;Y坐标偏移地址=$40 ;Z坐标偏移地址=$44
完美国际坐标查看器(可手动更新数据)
提供源码下载
默认是1.4.8的数据
其他的版本请自行修改游戏基址=$C0C68C;
比如1.4.6 游戏基址=$BBC26C;
基址会有CE找的就用CE找 不会用的就找K25外挂里面也有基地把他的基址抄过来
本程序的功能
配合 NPC编辑器可以发挥最大的功能 复制坐标功能
可以转换坐标把游戏内部的坐标转换成当前显示的坐标
附个 NPC面向坐标
面向说明
NPC面向 DirX DirY DirZ
东 0.000 0.000 0.000
西 -1.000 0.000 0.000
南 0.000 0.000 -1.000
北 0.000 0.000 1.000

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Timer1: TTimer; Label7: TLabel; GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Timer2: TTimer; Label5: TLabel; Button4: TButton; Label4: TLabel; Button5: TButton; Edit4: TEdit; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Edit1Click(Sender: TObject); procedure Edit2Click(Sender: TObject); procedure Edit3Click(Sender: TObject); procedure Label4Click(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure Label4MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Label4MouseLeave(Sender: TObject); procedure Label5MouseLeave(Sender: TObject); procedure Label5MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Label5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses IniFiles, Unit2,ShellAPI; {$R *.dfm} var BaseAddress, Offset1, Offset2, PosOffsetX, PosOffsetY, PosOffsetZ:DWORD; // BaseAddress=$C0C68C; // Offset1=$1C; // Offset2=$34; // PosOffsetX=$3c; // PosOffsetY=$40; // PosOffsetZ=$44; procedure LoadIni; var IniFile: TInifile; begin IniFile := TInifile.Create(Application.ExeName + '.ini'); BaseAddress := IniFile.ReadInteger('人物配置', '游戏基址',$C0C68C); Offset1 := IniFile.ReadInteger('人物配置', '一级偏移地址',$1C); Offset2 := IniFile.ReadInteger('人物配置', '二级偏移地址',$34); PosOffsetX := IniFile.ReadInteger('人物配置', 'X坐标偏移地址',$3C); PosOffsetY := IniFile.ReadInteger('人物配置', 'Y坐标偏移地址',$40); PosOffsetZ := IniFile.ReadInteger('人物配置', 'Z坐标偏移地址',$44); end; procedure WriteIni; var IniFile: TInifile; begin IniFile := TInifile.Create(Application.ExeName + '.ini'); IniFile.WriteInteger('人物配置', '游戏基址',$C0C68C); IniFile.WriteInteger('人物配置', '一级偏移地址',$1C); IniFile.WriteInteger('人物配置', '二级偏移地址',$34); IniFile.WriteInteger('人物配置', 'X坐标偏移地址',$3C); IniFile.WriteInteger('人物配置', 'Y坐标偏移地址',$40); IniFile.WriteInteger('人物配置', 'Z坐标偏移地址',$44); end; procedure DsplyRolePosXYZ(); // PosX=[[[924E0C]+1C]+20]+3c//主角坐标X 取整(坐标/10)+400 // PosY=[[[924E0C]+1C]+20]+40//主角坐标Z 取整(坐标/10) // PosZ=[[[924E0C]+1C]+20]+44//主角坐标Y 取整(坐标/10)+550 var h:HWND; PID:Dword; hProcess:Thandle; MyPointer:Integer; Readbyte:DWORD;//Size_T PosX,PosY,PosZ:Single;// begin h:=FindWindow('ElementClient Window',NIL); if h=0 then begin Form1.Caption:='没有找到游戏'; end else begin Form1.Caption:='坐标查看器'; GetWindowThreadProcessId(h,@PID); hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,PID); ReadProcessMemory(hProcess,Pointer(BaseAddress),@MyPointer,4,Readbyte); ReadProcessMemory(hProcess,Pointer(MyPointer+Offset1),@MyPointer,4,Readbyte); ReadProcessMemory(hProcess,Pointer(MyPointer+Offset2),@MyPointer,4,Readbyte); ReadProcessMemory(hProcess,Pointer(MyPointer+PosOffsetX),@PosX,4,Readbyte); ReadProcessMemory(hProcess,Pointer(MyPointer+PosOffsetY),@PosY,4,Readbyte); ReadProcessMemory(hProcess,Pointer(MyPointer+PosOffsetZ),@PosZ,4,Readbyte); CloseHandle(hProcess); form1.Edit1.text:= Format('%0.3f',[posX]); form1.Edit2.text:= Format('%.3f',[posY]); form1.Edit3.text:= Format('%.3f',[posZ]); //显示数值 PosX:=Trunc(PosX/10+400); //x坐=取整数部分(坐标/10)+400 PosY:=Trunc(PosY/10); //z坐标=取整数部分(坐标/10) PosZ:=Trunc(PosZ/10+550); //Y坐标=取整数部分(坐标/10)+550 // form1.Edit1.text:=FloatToStr(PosX)+','+FloatToStr(PosY)+'↑'+FloatToStr(PosZ);//使用format form1.Label1.Caption:= Format('X坐标:%.f',[posX]); form1.Label2.Caption:= Format('Y坐标:↑%.f',[posY]); form1.Label3.Caption:= Format('Z坐标:%.f',[posZ]); form1.Edit4.Text:=Format('%.f %.f %.f',[posX,posZ,posY]); end; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.SetFocus; Edit1.SelectAll; Edit1.CopyToClipboard; end; procedure TForm1.Button2Click(Sender: TObject); begin Edit2.SetFocus; Edit2.SelectAll; Edit2.CopyToClipboard; end; procedure TForm1.Button3Click(Sender: TObject); begin Edit3.SetFocus; Edit3.SelectAll; Edit3.CopyToClipboard; end; procedure TForm1.Button4Click(Sender: TObject); VAR EDT:TEdit; begin EDT:=TEdit.Create(SELF); EDT.Parent:=Form1; EDT.Text:=Edit1.Text +' '+EDIT2.Text +' '+EDIT3.Text; EDT.SelectAll; EDT.CopyToClipboard; EDT.Free; end; procedure TForm1.Button5Click(Sender: TObject); begin Edit4.SelectAll; Edit4.CopyToClipboard; end; procedure TForm1.Edit1Click(Sender: TObject); begin Edit1.SelectAll; end; procedure TForm1.Edit2Click(Sender: TObject); begin Edit2.SelectAll; end; procedure TForm1.Edit3Click(Sender: TObject); begin Edit3.SelectAll; end; procedure TForm1.FormCreate(Sender: TObject); begin if not FileExists(Application.ExeName + '.ini') then WriteIni; LoadIni; end; procedure TForm1.Label4Click(Sender: TObject); begin Hide; Form2.Edit1.Text:=Edit1.Text; Form2.Edit2.Text:=Edit2.Text; Form2.Edit3.Text:=Edit3.Text; Form2.ShowModal; Show; end; procedure TForm1.Label4MouseLeave(Sender: TObject); begin Label4.Font.Color:=clBlack; Label4.Font.Style:=[]; end; procedure TForm1.Label4MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Label4.Font.Color:=clRed; Label4.Font.Style:=[fsUnderline]; end; procedure TForm1.Label5Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'www.baidu.com', 0, 0, SW_SHOWNORMAL); end; procedure TForm1.Label5MouseLeave(Sender: TObject); begin Label5.Font.Color:=clBlack; Label5.Font.Style:=[]; end; procedure TForm1.Label5MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Label5.Font.Color:=clRed; Label5.Font.Style:=[fsUnderline]; end; procedure TForm1.Timer1Timer(Sender: TObject); begin try DsplyRolePosXYZ; Label7.Visible:=False; except Label7.Caption:='读取游戏数据失败'; Label7.Visible:=tRUE; end; end; procedure TForm1.Timer2Timer(Sender: TObject); begin // if Form2.Visible then // form2.BringToFront; end; end.

unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm2 = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Timer1: TTimer; GroupBox2: TGroupBox; Edit4: TEdit; Label4: TLabel; Label5: TLabel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Edit2Click(Sender: TObject); procedure Edit3Click(Sender: TObject); procedure Edit1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Edit4Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } procedure Transform1; procedure Transform2; end; var Form2: TForm2; implementation uses Unit1; {$R *.dfm} // PosX:=Trunc(PosX/10+400); //x坐=取整数部分(坐标/10)+400 // PosY:=Trunc(PosY/10); //z坐标=取整数部分(坐标/10) // PosZ:=Trunc(PosZ/10+550); //Y坐标=取整数部分(坐标/10)+550 // //游戏显示坐标 procedure TForm2.Timer1Timer(Sender: TObject); begin FormStyle:=fsStayOnTop; end; procedure TForm2.Transform1; var x,y,z:Single; x1,y1,z1:string; begin x:= StrToFloat(Edit1.Text); x1:=Format('%d',[Round(x/10)+400]); //X坐=取整数部分(坐标/10)+400 y:= StrToFloat(Edit2.Text); y1:=Format('%d',[Round(y/10)]); //Y坐标=取整数部分(坐标/10) z:= StrToFloat(Edit3.Text); z1:=Format('%d',[Round(z/10)+550]); //Z坐标=取整数部分(坐标/10)+550 Edit4.Text:=x1+' '+z1; Label5.Caption:=' ↑'+y1; end; //游戏内部实际坐标 procedure TForm2.Transform2; begin end; procedure TForm2.Button1Click(Sender: TObject); begin Transform1; end; procedure TForm2.Button2Click(Sender: TObject); begin Edit4.SelectAll; Edit4.CopyToClipboard; end; procedure TForm2.Edit1Click(Sender: TObject); begin Edit1.SelectAll; end; procedure TForm2.Edit2Click(Sender: TObject); begin Edit2.SelectAll; end; procedure TForm2.Edit3Click(Sender: TObject); begin Edit3.SelectAll; end; procedure TForm2.Edit4Click(Sender: TObject); begin Edit4.SelectAll; end; end.
[人物配置]
;完美国际数据可以手动修改
;默认为1.4.8服务端的数据
;PosX=[[[C0C68C]+1C]+34]+3c//主角坐标X 取整(坐标/10)+400
;PosY=[[[C0C68C]+1C]+34]+40//主角坐标Z 取整(坐标/10)
;PosZ=[[[C0C68C]+1C]+34]+44//主角坐标Y 取整(坐标/10)+550
;1.4.6 游戏基址=$BBC26C
;1.4.8 游戏基址=$C0C68C
游戏基址=$C0C68C
一级偏移地址=$1C
二级偏移地址=$34
X坐标偏移地址=$3C
Y坐标偏移地址=$40
Z坐标偏移地址=$44