import win.ui; /*DSG{{*/ mainForm = win.form(text="wow屬性讀取";right=1248;bottom=667) mainForm.add( button={cls="button";text="刷新表";left=95;top=221;right=154;bottom=242;z=21}; button2={cls="button";text="计算rcx偏移";left=1104;top=536;right=1184;bottom=560;z=29}; button3={cls="button";text="求rcx值";left=1104;top=568;right=1184;bottom=592;z=31}; button4={cls="button";text="Button";left=968;top=592;right=1040;bottom=616;z=32}; button5={cls="button";text="取人物选中目标的坐标";left=952;top=624;right=1080;bottom=648;z=33}; button_lu={cls="button";text="录制坐标";left=91;top=344;right=153;bottom=364;z=23}; edit={cls="edit";left=154;top=531;right=535;bottom=659;edge=1;multiline=1;vscroll=1;z=3}; edit2={cls="edit";left=944;top=536;right=1096;bottom=560;edge=1;multiline=1;z=30}; itemlist={cls="listview";left=344;top=698;right=1045;bottom=828;edge=1;gridLines=1;vscroll=1;z=18}; man_bufflist={cls="listview";left=-2;top=366;right=152;bottom=659;edge=1;gridLines=1;z=20}; man_exp={cls="static";text="exp";left=59;top=14;right=134;bottom=28;transparent=1;z=19}; man_face={cls="static";text="face";left=80;top=176;right=158;bottom=192;notify=1;transparent=1;z=2}; man_hp={cls="static";text="hp";left=8;top=31;right=83;bottom=47;notify=1;transparent=1;z=5}; man_level={cls="static";text="level";left=8;top=14;right=49;bottom=31;transparent=1;z=9}; man_money={cls="static";text="money";left=80;top=136;right=165;bottom=155;notify=1;transparent=1;z=4}; man_mp={cls="static";text="mp";left=8;top=48;right=88;bottom=69;notify=1;transparent=1;z=6}; man_st1={cls="static";text="力量";left=8;top=144;right=48;bottom=165;notify=1;transparent=1;z=10}; man_st2={cls="static";text="敏捷";left=8;top=168;right=72;bottom=189;notify=1;transparent=1;z=11}; man_st3={cls="static";text="耐力";left=8;top=184;right=72;bottom=205;notify=1;transparent=1;z=12}; man_st4={cls="static";text="智力";left=8;top=208;right=72;bottom=229;notify=1;transparent=1;z=13}; man_st5={cls="static";text="精神";left=8;top=224;right=72;bottom=245;notify=1;transparent=1;z=14}; man_st6={cls="static";text="护甲";left=8;top=248;right=72;bottom=263;notify=1;transparent=1;z=15}; man_status={cls="static";text="status";left=80;top=152;right=160;bottom=171;notify=1;transparent=1;z=22}; man_x={cls="static";text="x";left=8;top=66;right=72;bottom=81;transparent=1;z=7}; man_y={cls="static";text="y";left=8;top=84;right=72;bottom=99;transparent=1;z=8}; man_z={cls="static";text="z";left=8;top=104;right=120;bottom=119;transparent=1;z=16}; mosterlist={cls="listview";left=1092;top=673;right=1356;bottom=796;edge=1;gridLines=1;vscroll=1;z=17}; pets_bufflist={cls="listview";left=541;top=534;right=936;bottom=659;edge=1;gridLines=1;z=28}; pets_exp={cls="static";text="pets_exp";left=8;top=320;right=150;bottom=339;notify=1;transparent=1;z=27}; pets_hp={cls="static";text="pet_hp";left=8;top=272;right=162;bottom=296;notify=1;transparent=1;z=24}; pets_mp={cls="static";text="pet_mp";left=8;top=288;right=163;bottom=305;notify=1;transparent=1;z=25}; pets_satiation={cls="static";text="satiation";left=8;top=304;right=124;bottom=319;notify=1;transparent=1;z=26}; tab={cls="tab";left=152;top=0;right=1242;bottom=532;db=1;dl=1;dr=1;dt=1;edge=1;z=1} ) /*}}*/ import process; import math; import winex; import winex.key //mosterform=mainForm.tab.loadForm(".\moster.aardio") mosterform=mainForm.tab.add(text="怪物表";right=871;bottom=548;) mosterform.add(mosterlist={cls="listview";left=2;top=-2;right=874;bottom=549;db=1;dl=1;dr=1;dt=1;edge=1;gridLines=1;z=1}) itemform1=mainForm.tab.add(text="物品表";right=871;bottom=548;) itemform1.add(listview={cls="listview";left=2;top=-2;right=874;bottom=549;db=1;dl=1;dr=1;dt=1;edge=1;gridLines=1;z=1}) //itemform=mainForm.tab.loadForm(".\item.aardio") itemform=mainForm.tab.add(text="装备位置表";right=871;bottom=548;) itemform.add(listview={cls="listview";left=2;top=-2;right=874;bottom=549;db=1;dl=1;dr=1;dt=1;edge=1;gridLines=1;z=1}) otherform=mainForm.tab.add(text="其它表";right=871;bottom=548;) otherform.add(listview={cls="listview";left=2;top=-2;right=874;bottom=549;db=1;dl=1;dr=1;dt=1;edge=1;gridLines=1;z=1}) zuobiaoform=mainForm.tab.add(text="坐标编辑";right=871;bottom=548;) zuobiaoform.add( button={cls="button";text="添加坐标";left=520;top=64;right=592;bottom=88;z=2}; button2={cls="button";text="清空";left=520;top=160;right=592;bottom=184;z=3}; checkbox={cls="checkbox";text="加入寻路坐标";left=528;top=232;right=624;bottom=248;z=5}; checkbox2={cls="checkbox";text="增加采集坐标";left=528;top=208;right=624;bottom=224;z=6}; checkbox3={cls="checkbox";text="采点";left=528;top=256;right=624;bottom=272;z=7}; checkbox4={cls="checkbox";text="加入打怪坐标";left=528;top=280;right=624;bottom=296;z=8}; checkbox5={cls="checkbox";text="走路";left=528;top=304;right=624;bottom=320;z=9}; edit={cls="edit";left=0;top=0;right=472;bottom=464;ah=1;aw=1;edge=1;multiline=1;vscroll=1;z=1}; static={cls="static";text="总数";left=528;top=336;right=592;bottom=352;transparent=1;z=4} ) NtdllModuleBase = ::Kernel32.GetModuleHandle("Ntdll.dll") NtWow64ReadVirtualMemory64=::Ntdll.api("NtWow64ReadVirtualMemory64","pointer( pointer ProcessHandle, LONG BaseAddress, pointer BufferData, LONG BufferLength, pointer ReturnLength)") NtWow64WriteVirtualMemory64=::Ntdll.api("NtWow64WriteVirtualMemory64","pointer( pointer ProcessHandle, LONG BaseAddress, pointer BufferData, LONG BufferLength, pointer ReturnLength)") NtQueryInformationProcess=::Ntdll.api("NtQueryInformationProcess","pointer( pointer ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, pointer ProcessInformation, INT ProcessInformationLength, pointer ReturnLength OPTIONAL )" ) function Bin2hex (input){ var len = string.len(input); var result = ""; for(i=1;len;2){ var now = string.sub(input,i,i+1); result = result ++ string.hex(now," "); } return result; } //16进制字符串转换成字节流 用于modbus发送字符串 function Hex2bin (input){ var len = string.len(input); var result = ""; for(i=1;len;2){ var now = string.sub(input,i,i+1); result = result ++ string.unhex(now," "); } return result; } raw.cast = function( ctype,v ) begin var union_ctype = { union u= { byte byte =0; BYTE ubyte =0; word word =0; WORD uvord =0; int int =0; INT uint =0; long long =0; LONG ulong =0; double double =0; float float =0 } } return raw.convert( { long x= v }, union_ctype ).u[ctype]; end; namespace raw { byte = "byte"; BYTE = "ubyte"; word = "word"; WORD = "uvord"; int = "int"; INT = "uint"; long = "long"; LONG = "ulong"; double = "double"; float = "float" } mosterform.mosterlist.insertColumn("序号",40) mosterform.mosterlist.insertColumn("怪物名",100) mosterform.mosterlist.insertColumn("x坐标",80) mosterform.mosterlist.insertColumn("y坐标",80) mosterform.mosterlist.insertColumn("z坐标",80)//5 mosterform.mosterlist.insertColumn("属性",80) mosterform.mosterlist.insertColumn("角色基址",80) mosterform.mosterlist.insertColumn("角色id1",80) mosterform.mosterlist.insertColumn("角色id2",80) mosterform.mosterlist.insertColumn("攻擊方向",70) mosterform.mosterlist.insertColumn("等級",40)//10 mosterform.mosterlist.insertColumn("HP/MAXHP",100) mosterform.mosterlist.insertColumn("MP/MAXMP",100) mosterform.mosterlist.insertColumn("面向值",80) itemform.listview.insertColumn("背包序号",80) itemform.listview.insertColumn("物品欄位",100) itemform.listview.insertColumn("ID",250) itemform1.listview.insertColumn("背包序号",80) itemform1.listview.insertColumn("類型",80) itemform1.listview.insertColumn("物品名",100) itemform1.listview.insertColumn("数量",60) itemform1.listview.insertColumn("物品基址",90) itemform1.listview.insertColumn("ID",90) itemform1.listview.insertColumn("所屬背包ID",90) itemform1.listview.insertColumn("物品类型",90) itemform1.listview.insertColumn("包裹格数",90) otherform.listview.insertColumn("序号",80) otherform.listview.insertColumn("名稱",200) otherform.listview.insertColumn("類型",80) otherform.listview.insertColumn("基址",80) otherform.listview.insertColumn("ID1",80) otherform.listview.insertColumn("ID2",80) otherform.listview.insertColumn("x",80) otherform.listview.insertColumn("y",80) otherform.listview.insertColumn("z",80) mainForm.man_bufflist.insertColumn("人物buff序號",100) mainForm.man_bufflist.insertColumn("人物buffid",100) mainForm.pets_bufflist.insertColumn("宠物buff序號",120) mainForm.pets_bufflist.insertColumn("宠物buffid",120) //var dll = ..raw.loadDll("\Read64.dll"); dllfile=string.load("\res\Read64.dll") //string.save("C:\wow.dll",dllfile) var dll = raw.loadDll(dllfile)//"C:\wow.dll"); Read64=dll.api("Read64","bool(int pid,LONG baseaddress,point buffer,int bufflength)","stdcall") GetBaseAddress=dll.api("GetBaseAddress","long (int ProcessID, string ExeName)","stdcall") while(pid==null){ for processEntry in process.each( "WowClassic.exe" ) { pid=processEntry.th32ProcessID } } class PROCESS_BASIC_INFOMATION{ int ExotStatus; int PebBaseAddress; //peb基址 int AffintyMask; int BasePriority; INT UniqueProcessId; INT InheriterdFromUniqueProcesssId;//接收父進程ID } mainForm.edit.print("pid:",pid) prcs=process(pid); wowhandle=process.OpenProcess(0x1FFFFF/*_PROCESS_ALL_ACCESS*/,false,pid) win.delay(1000); mainForm.edit.print("find wow process") func = prcs.asmCdecl( "void( INT main)", '\x8B\x45\x08', //mov eax, [ebp+0x8] '\x6A\x33', //push 0x33 '\xFF\x50\x25', //call dword [eax+0x25] '\x83\x04\x24\x05', //add dword [esp], 0x5 '\xCB', //retf '\xFF\x50\x2F', //call dword [eax+0x2f] '\xC7\x44\x24\x04\x23\x00\x00\x00', //mov dword [esp+0x4], 0x23 '\x83\x04\x24\x0D', //add dword [esp], 0xd '\xCB', //retf ) //func() read1=function(address,long){ if address == false { win.msgbox("false") return false; } var buffer=raw.buffer(long) var ret=Read64(pid,address,buffer,long) var aa="" if ret { str=raw.tostring(buffer) if str=null{ win.msgbox(raw.copy(buffer,aa,long)) win.msgbox(buffer[1]) } str=string.reverse(str) str=string.hex(str,"") } else { return false; } //raw.realloc(0,buffer) //指針消毀 return "0x"++str; } read=function(address,long){ var buffer=raw.buffer(long) var ReturnLength=raw.buffer(4) wowhandle=process.OpenProcess(0x1FFFFF/*_PROCESS_ALL_ACCESS*/,false,pid) NtWow64ReadVirtualMemory64(wowhandle,address,buffer,long,ReturnLength) var aa="" if buffer!=null { str=raw.tostring(buffer) if str=null{ win.msgbox(raw.copy(buffer,aa,long)) win.msgbox(buffer[1]) } str=string.reverse(str) str=string.hex(str,"") } else { return false; } //raw.realloc(0,buffer) //指針消毀 return "0x"++str; } write=function(address,buff){ if !address return false; var buffer=raw.buffer(buff) var ReturnLength=raw.buffer(4) //var len = raw.sizeof(buff); len=#buff raw. mainForm.edit.print(len) //mainForm.edit.print(raw.tostring(buffer)) wowhandle=process.OpenProcess(0x1FFFFF/*_PROCESS_ALL_ACCESS*/,false,pid) NtWow64WriteVirtualMemory64(wowhandle,address,buffer,len,ReturnLength) } readname=function(address){ if address == false return false; var buffer=raw.buffer(60) var ReturnLength=raw.buffer(4) //Read64(pid,address,buffer,60) NtWow64ReadVirtualMemory64(wowhandle,address,buffer,60,ReturnLength) return raw.str(buffer,false); } wowhwnd = winex.waitVisible(,,"GxWindowClass") //=============================================================================================== wowbaseaddress=GetBaseAddress(pid,"WowClassic.exe") mainForm.edit.print("基址:"++tostring(wowbaseaddress,16)) //人物基址=tostring(read(wowbaseaddress+0xb4acc1-0x4,0x4)+(wowbaseaddress+0xb4acc1),16) //人物基址=tostring(read(wowbaseaddress+0xb50cc1-0x4,0x4)+(wowbaseaddress+0xb50cc1),16) 人物基址=tostring(read(wowbaseaddress+0xd391e1-0x4,0x4)+(wowbaseaddress+0xd391e1),16) //=================================================================================================== mainForm.edit.print("人物基址:"+人物基址) //mainForm.edit.print(read(人物基址,0x4)) //草药学=read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+0x15f0,0x1) //[角色基址+0x10]+0x15f0 草药学=read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+0x1600,0x2) //[角色基址+0x10]+0x15f0 mainForm.edit.print("草药学等级",tonumber(草药学)) mainForm.setInterval( 1000,function(){ // 定时执行参数@2指定的回调函数,参数@1指定间隔毫秒数 maxhp=tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x13c),0x4)) //[[[人物基址]+200]+10]]]+8e*4-13c maxmp=tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x134),0x4)) //[[[人物基址]+200]+10]]]+8e*4-134 hp=tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x15c),0x4))//[[[人物基址]+200]+10]]]+8e*4-15c mp=tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x154),0x4))//[[[人物基址]+200]+10]]]+8e*4-154 mainForm.man_hp.text="hp:"++hp++"/"++maxhp; mainForm.man_mp.text="mp:"++mp++"/"++maxmp; mainForm.man_level.text="等级:"+tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x104),0x4)) //[[[人物基址]+200]+10]]]+8e*4-104 mainForm.man_st6.text="护甲:"+tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)),0x4)) //[[[人物基址]+200]+10]]]+8e*4 mainForm.man_st1.text="力量:"+tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x3c),0x4)) //[[[人物基址]+200]+10]]]+8e*4-3c mainForm.man_st2.text="敏捷:"+tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x38),0x4)) //[[[人物基址]+200]+10]]]+8e*4-38 mainForm.man_st3.text="耐力:"+tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x34),0x4)) //[[[人物基址]+200]+10]]]+8e*4-34 mainForm.man_st4.text="智力:"+tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x30),0x4)) //[[[人物基址]+200]+10]]]+8e*4-30 mainForm.man_st5.text="精神:"+tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)-0x2c),0x4)) //[[[人物基址]+200]+10]]]+8e*4-2c exp=tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)+0xf78),0x4)) //[[[人物基址]+200]+10]]]+8e*4+f78 mainForm.man_exp.text="exp:"++exp++"/"++tonumber(read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+((0x8e*4)+0xf7c),0x4)) //[[[人物基址]+200]+10]]]+8e*4+f7c man_x=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1600,0x4))) //[[[人物基址]+200]+0x1600 man_y=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1604,0x4))) //[[[人物基址]+200]+0x1604 man_z=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1608,0x4))) //[[[人物基址]+200]+0x1608 man_face=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1610,0x4))) //[[[人物基址]+200]+0x1608 mainForm.man_x.text="x:"++man_x mainForm.man_y.text="y:"++man_y mainForm.man_z.text="z:"++man_z mainForm.man_face.text="face:"++man_face man_status=read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+0x174,0x4) select(tostring(man_status,16)) { case "0x00000408" { mainForm.man_status.text="拾物中" status=1 } case "0x00080008" { mainForm.man_status.text="遠戰中" status=2 } case "0x00080808" { mainForm.man_status.text="近戰中" status=3 } case "0x00040008" { mainForm.man_status.text="死亡中" status=4 } case "0x00000008" { mainForm.man_status.text="正常中" status=5 } else { mainForm.man_status.text=man_status } } skillnum=0 mainForm.man_bufflist.clear() while(true){ ret=read(read(read(人物基址,0x4)+0x200,0x4)+skillnum*0x8+0x7954,0x1)//[[[人物基址]+200]+skillnum*0x8+0x7954] if ret!=0x90 { line=mainForm.man_bufflist.addItem(tonumber(ret),1) skill=read(read(read(人物基址,0x4)+0x200,0x4)+skillnum*0x8+0x7954+0x4,0x4) mainForm.man_bufflist.setItemText(skill,line,2) } skillnum++ if skillnum >= 0x90 break ; } } ); /* import time.performance; mainForm.setInterval( 500,function(){ if status==5 and shiwu==true { //winex.key.click(wowhwnd,"C" ) //shiwu=false } elseif status==2 {//遠戰中 war=true winex.key.click(wowhwnd,"4" ) //win.delay(500) } elseif status==3 {//近戰中 war=true if maxhp*0.2<mp { winex.key.click(wowhwnd,"2" ) } winex.key.click(wowhwnd,"1" ) } elseif status==5 and war=true { if maxhp*0.5<mp { winex.key.click(wowhwnd,"5" ) } else { winex.key.click(wowhwnd,"3" ) } //shiwu=true } } ) */ timer1=mainForm.setInterval( 2000,function(){ getitemsize() getmoster() getother() getitem() } ) getmoster=function(){ num=0x1 //枚舉范圍 1~1ff mosterform.mosterlist.clear() mosterform.mosterlist.redraw() while(true){ //[[[人物基址]+30]+((num+num*2)*8)+10] var rax=read(read(人物基址,0x4)+0x30,0x4) //mainForm.edit.print(tostring(rax,16)) var rdx=rax+((num+num*2)*8)+0x10 //mainForm.edit.print(tostring(rdx,16)) rdx=read(rdx,0x4) if rdx != false { //讀取類型 attributes=read(rdx+0x20,0x1) attributes1=read(rdx+0x21,0x1) //if attributes=="0x07" win.msgbox(attributes) if attributes!= false and (attributes==0x05 or attributes==0x06 or attributes=0x07){ //取环境NPC坐标 x=read(read(rdx+0x198,0x4)+0x20,0x4)//[[角色基址+0x198]+0x20 y=read(read(rdx+0x198,0x4)+0x24,0x4)//[[角色基址+0x198]+0x24 z=read(read(rdx+0x198,0x4)+0x28,0x4)//[[角色基址+0x198]+0x28 face=read(read(rdx+0x198,0x4)+0x30,0x4)//[[角色基址+0x198]+0x34 x=raw.cast(raw.float,x) y=raw.cast(raw.float,y) z=raw.cast(raw.float,z) face=raw.cast(raw.float,face) //讀取等級 level=tonumber(read(read(rdx+0x10,0x4)+0x134,0x1))//[[角色基址+0x10]+0x134 //讀取血量 var mosterhp=tonumber(read(read(rdx+0x10,0x4)+0xdc,0x4))//[[角色基址+0x10]+0xdc var mostermaxhp=tonumber(read(read(rdx+0x10,0x4)+0xfc,0x4))//[[角色基址+0x10]+0xfc //讀取MP var mostermp=tonumber(read(read(rdx+0x10,0x4)+0xe4,0x4))//[[角色基址+0x10]+0xe4 var mostermaxmp=tonumber(read(read(rdx+0x10,0x4)+0x104,0x4))//[[角色基址+0x10]+0x104 //attributes1=tostring(read(read(rdx+0x10,0x4)+0xd3,0x1),16) //讀取ID var mosterid=read(rdx+0x58,0x4) mosterid2=read(rdx+0x60,0x4) //if attributes==0x7 win.msgbox(attributes,mosterid) //attributes2=tostring(read(read(rdx+0x10,0x4)+0x134,0x1),16) if tonumber(mosterid)>0 and (tonumber(mosterid2)>0 or attributes==0x7 or attributes==0x6) { line=mosterform.mosterlist.addItem() mosterform.mosterlist.setItemText(tostring(num,16),line,1) if attributes==0x7 { x=man_x y=man_y z=man_z } mosterform.mosterlist.setItemText(x,line,3) mosterform.mosterlist.setItemText(y,line,4) mosterform.mosterlist.setItemText(z,line,5) mosterform.mosterlist.setItemText(tostring(rdx,16),line,7)//baseaddr mosterform.mosterlist.setItemText(tostring(mosterid,16),line,8) mosterform.mosterlist.setItemText(tostring(mosterid2,16),line,9) mosterform.mosterlist.setItemText(level,line,11) mosterform.mosterlist.setItemText(mosterhp++"/"++mostermaxhp,line,12) mosterform.mosterlist.setItemText(mostermp++"/"++mostermaxmp,line,13) mosterform.mosterlist.setItemText(face,line,14) select(attributes) { case "0x05" { /* if attributes1 == 0x2 { mosterform.mosterlist.setItemText("怪物 "++attributes1,line,6) } elseif attributes1 == 0x1 or attributes1 == 0x0 { mosterform.mosterlist.setItemText("NPC "++attributes1,line,6) } */ man_id=read(read(read(人物基址,0x4)+0x200,0x4)+0x58,0x4) mosterform.mosterlist.setItemText("怪物 "++attributes1,line,6) //mainForm.edit.print(man_id) if read(read(rdx+0x10,0x4)+0x5c,0x4)==man_id { pets_id=read(read(rdx+0x10,0x4)+0x0,0x4) pets_satiation=tonumber(read(read(rdx+0x10,0x4)+0xf0,0x4)) pets_level=tonumber(read(read(rdx+0x10,0x4)+0x134,0x4)) pets_exp=tonumber(read(read(rdx+0x10,0x4)+0x1c8,0x4)) pets_exp_max=tonumber(read(read(rdx+0x10,0x4)+0x1cc,0x4)) pets_hp=tonumber(read(read(rdx+0x10,0x4)+0xdc,0x4)) pets_hp_max=tonumber(read(read(rdx+0x10,0x4)+0xfc,0x4)) pets_mp=tonumber(read(read(rdx+0x10,0x4)+0xe4,0x4)) pets_mp_max=tonumber(read(read(rdx+0x10,0x4)+0x104,0x4)) mainForm.pets_hp.text="pets_hp :"++pets_hp++"/"++pets_hp_max mainForm.pets_mp.text="pets_mp :"++pets_mp++"/"++pets_mp_max mainForm.pets_exp.text="pets_exp :"++pets_exp++"/"++pets_exp_max mainForm.pets_satiation.text="飽食度 :"++pets_satiation //mainForm.edit.print("宠物基址: "++rdx) //mainForm.edit.print("宠物id: "++pets_id) mosterform.mosterlist.setItemText("寵物 "++attributes1,line,6) skillnum=0 mainForm.pets_bufflist.clear() while(true){ ret=read(rdx+skillnum*0x8+0x7954,0x1)//[[[人物基址]+200]+skillnum*0x8+0x7954] if ret!=0x90 { line=mainForm.pets_bufflist.addItem(tonumber(ret),1) skill=read(rdx+skillnum*0x8+0x7954+0x4,0x4) mainForm.pets_bufflist.setItemText(skill,line,2) } skillnum++ if skillnum >= 0x90 break ; } } elseif read(read(rdx+0x10,0x4)+0x5c,0x4)!=0{ mosterform.mosterlist.setItemText("玩家寵物 "++attributes1,line,6) } } case "0x06" { if attributes1=0x6{ mosterform.mosterlist.setItemText("玩家 "++attributes1,line,6) } } case "0x07" { if tostring(read(rdx+0x21,0x1),16)=0x7{ mosterform.mosterlist.setItemText("自已 "++attributes1,line,6) //mainForm.edit.print("角色基址:"++tostring(rdx,16)) } } case "0x01" { mosterform.mosterlist.setItemText("背包 "++attributes1,line,6) } case "0x02"{ mosterform.mosterlist.setItemText("包裹 "++attributes1,line,6) } case "0x08"{ mosterform.mosterlist.setItemText("鱼漂 "++attributes1,line,6) } else { mosterform.mosterlist.setItemText("未知类型"++attributes++attributes1,line,6) } } //名字讀取的2個方式 var per=read(rdx+0x17b8,0x4) if per !=false and per !=0{ var name1=readname(read(per+0x120,0x4)) if name1!=false { mosterform.mosterlist.setItemText(name1,line,2) } var name2=readname(read(per+0xe0,0x4)) if name2 !=false { mosterform.mosterlist.setItemText(name2,line,2) } } man_x=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1600,0x4))) //[[[人物基址]+200]+0x1600 man_y=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1604,0x4))) //[[[人物基址]+200]+0x1604 man_face=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1610,0x4))) //[[[人物基址]+200]+0x1608 if man_x-x !=0 { //自已坐標就為0 jiao=math.atan((y-man_y)/(x-man_x))//反正切函数 if x-man_x < 0 and y-man_y > 0 { //第2象限 jiao=math.rad(180)-jiao } elseif x-man_x < 0 and y-man_y < 0 {//第3象限 jiao=math.rad(180)+jiao } elseif x-man_x > 0 and y-man_y < 0{//第4象限 //jiao=math.rad(360)-jiao } jiao=math.abs(jiao) //絕對值 //jiao=math.deg(jiao) mosterform.mosterlist.setItemText(jiao,line,10) } } } } num++ if num>0x4ff break ; } } getitemsize=function(){ rdx=read(read(人物基址,0x4)+0x200,0x4) itemcount=read(rdx+0x20f98,0x4) for(i=itemcount;1;-1){ //mainForm.edit.print(read(itemtab+i*0x10,0x10)) itemform.listview.addItem() itemform.listview.setItemText(tostring(i,16),i,1) itemtab=read(rdx+0x20fa0,0x4) itemid=read(itemtab+i*0x10,0x4) select(i) { case 3 { itemform.listview.setItemText("衬衣",i,2) } case 4 { itemform.listview.setItemText("胸部",i,2) } case 5 { itemform.listview.setItemText("腰部",i,2) } case 6 { itemform.listview.setItemText("腿部",i,2) } case 7 { itemform.listview.setItemText("脚",i,2) } case 8 { itemform.listview.setItemText("手腕",i,2) } case 9 { itemform.listview.setItemText("手",i,2) } case 14 { itemform.listview.setItemText("背部",i,2) } case 15 { itemform.listview.setItemText("主手",i,2) } case 16 { itemform.listview.setItemText("副手",i,2) } case 17 { itemform.listview.setItemText("远程",i,2) } case 19 { itemform.listview.setItemText("背包栏第四格",i,2) } case 20 { itemform.listview.setItemText("背包栏第三格",i,2) } case 21 { itemform.listview.setItemText("背包栏第二格",i,2) } case 22 { itemform.listview.setItemText("背包栏第一格",i,2) } case 23 { itemform.listview.setItemText("大背包第1格",i,2) } case 24 { itemform.listview.setItemText("大背包第2格",i,2) } case 25 { itemform.listview.setItemText("大背包第3格",i,2) } case 26 { itemform.listview.setItemText("大背包第4格",i,2) } case 27 { itemform.listview.setItemText("大背包第5格",i,2) } case 28 { itemform.listview.setItemText("大背包第6格",i,2) } case 29 { itemform.listview.setItemText("大背包第7格",i,2) } case 30 { itemform.listview.setItemText("大背包第8格",i,2) } case 31 { itemform.listview.setItemText("大背包第9格",i,2) } case 32 { itemform.listview.setItemText("大背包第10格",i,2) } case 33 { itemform.listview.setItemText("大背包第11格",i,2) } case 34 { itemform.listview.setItemText("大背包第12格",i,2) } case 35 { itemform.listview.setItemText("大背包第13格",i,2) } case 36 { itemform.listview.setItemText("大背包第14格",i,2) } case 37 { itemform.listview.setItemText("大背包第15格",i,2) } case 38 { itemform.listview.setItemText("大背包第16格",i,2) } } if tonumber(itemid)!=0{ itemform.listview.setItemText(itemid,i,3) } else { itemform.listview.setItemText("空物品栏",i,3) } } } man_id=read(read(人物基址,0x4)+0x200+0x58,0x4) mainForm.edit.print("角色基址:"++read(read(人物基址,0x4)+0x200,0x4)) //物品總數 [[141a3fb48]+0x200]+20f98 rdx=read(read(人物基址,0x4)+0x200,0x4) money=read(read(rdx+0x10,0x4)+0x11a8,0x4)//金幣[[角色基址+10]+11a8] mainForm.man_money.text="金幣:"+tonumber(money) itemcount=read(rdx+0x20f98,0x4) //裝備列表 [[[141a3fb48]+0x200]+20fa0] itemtab=read(rdx+0x20fa0,0x4) mainForm.edit.print("itemcount: "++itemcount) mainForm.edit.print("itemtab: "++itemtab) //取物品枚舉 //[[[141a3fb48]+30]+((rdx+rdx*2)*8)+10] /*itemnum=0x73 for(i=1;itemcount;1){ rdx=read(read(人物基址,0x4)+0x30,0x4) mainForm.edit.print("物品指針: "++read((rdx+(i+i*2)*0x8)+0x10,0x4)) rdx=read((rdx+(i+i*2)*0x8)+0x10,0x4) } */ getother=function(){ num=0x1 //枚舉范圍 1~1ff otherform.listview.clear() otherform.listview.redraw() while(true){ rax=read(read(人物基址,0x4)+0x30,0x4) rdx=rax+((num+num*2)*8)+0x10 rdx=read(rdx,0x4) if rdx != false { attributes=tostring(read(rdx+0x20,0x1),16) attributes1=tostring(read(rdx+0x21,0x1),16) if attributes!= false and (attributes==0x08 and attributes1==0x08 ){ name=readname(read(read(rdx+0x478,0x4)+0xe0,0x4)) //[[物品基址+478]+e0] x=read(rdx+0x4b0,0x4) //[物品基址+4b0] y=read(rdx+0x4b4,0x4) //[物品基址+4b4] z=read(rdx+0x4b8,0x4) //[物品基址+4b8] x=raw.cast(raw.float,x) y=raw.cast(raw.float,y) z=raw.cast(raw.float,z) otherid=read(rdx+0x58,0x4) line=otherform.listview.addItem() otherform.listview.setItemText(num,line,1) otherform.listview.setItemText(name,line,2) otherform.listview.setItemText(attributes++" "++attributes1,line,3) otherform.listview.setItemText(tostring(rdx,16),line,4)//baseaddr otherform.listview.setItemText(otherid,line,5) otherform.listview.setItemText(x,line,7) otherform.listview.setItemText(y,line,8) otherform.listview.setItemText(z,line,9) } } num++ if num>0x1ff break ; } } getitem=function(){ num=0x1 //枚舉范圍 1~1ff itemform1.listview.clear() itemform1.listview.redraw() while(true){ rax=read(read(人物基址,0x4)+0x30,0x4) rdx=rax+((num+num*2)*8)+0x10 rdx=read(rdx,0x4) if rdx != false { attributes=tostring(read(rdx+0x20,0x1),16) attributes1=tostring(read(rdx+0x21,0x1),16) if attributes!= false and ((attributes==0x01 and attributes1==0x01) or (attributes==0x02 and attributes1==0x02)){ shu=read(read(rdx+0x10,0x4)+0x5c,0x4) name=readname(read(read(rdx+0x478,0x4)+0xe0,0x4)) itemid=read(rdx+0x58,0x4) itemid2=read(read(rdx+0x10,0x4)+0x2c,0x4) itemtype=read(read(rdx+0x10,0x4)+0x10,0x4) line=itemform1.listview.addItem() itemform1.listview.setItemText(num,line,1) if attributes==0x01 and attributes1==0x01 { itemform1.listview.setItemText("道具 "++attributes++" "++attributes1,line,2) } elseif(attributes==0x02 and attributes1==0x02){ itemform1.listview.setItemText("包裹 "++attributes++" "++attributes1,line,2) bagcount=read(read(rdx+0x10,0x4)+0x380,0x4) itemform1.listview.setItemText(bagcount,line,9) //包裹数目 } itemform1.listview.setItemText(name,line,3) itemform1.listview.setItemText(tonumber(shu),line,4)//數量 itemform1.listview.setItemText(tostring(rdx,16),line,5)//baseaddr itemform1.listview.setItemText(itemid,line,6) itemform1.listview.setItemText(itemid2,line,7) itemform1.listview.setItemText(itemtype,line,8) } } num++ if num>0x1ff break ; } } //取环境NPC坐标 //x=[[[[人物基址]+0x30]+(0x44+0x44*2)*8+0x10]+0x198]+0x20 //y=[[[[人物基址]+0x30]+(0x44+0x44*2)*8+0x10]+0x198]+0x24 //z=[[[[人物基址]+0x30]+(0x44+0x44*2)*8+0x10]+0x198]+0x28 /* class TokenPrivileges { 0 }; //t=raw.convert(TokenPrivileges) OpenProcessToken=::Kernel32.api("OpenProcessToken","Bool(point handle,struct desired , point tokenhandle)" ) Advapi32=raw.loadDll("Advapi32.dll") LookupPrivilegeValue=Advapi32.api("LookupPrivilegeValue","int(ustring lpSystemName,ustring lpName,point& lpLuid)"); ret=LookupPrivilegeValue(null,"SeDebugPrivilege",topointer("v1")) OpenProcessToken(process.getHandle(),t,null) aa=raw.realloc(1) //dd=raw.realloc(20) ReturnLength=raw.realloc(1) NtWow64ReadVirtualMemory64(prcs.handle,0x0000000036C55215,aa,1,ReturnLength) mainForm.edit.print(aa,ret) /* for( addr,len,str,i,j,pattern,protect,mtype in prcs.eachQuery( , ,eval("'"+str+"'"),0x0 ) ){ mainForm.edit.print("基址",tostring(addr-0x1000,16),"長度",tostring(len,16)) mainForm.edit.print("找到的代碼地址",tostring(addr+i-1,16)) address=addr+i-1+offaddr baseaddr=addr-0x1000 } */ mainForm.onClose = function(hwnd,message,wParam,lParam){ //fsys.delete("c:\wow.dll") } mainForm.button.oncommand = function(id,event){ if mainForm.button.text=="刷新表" { mainForm.changeInterval(timer1,20000000); mainForm.button.text="停止刷新"; } elseif mainForm.button.text=="停止刷新"{ mainForm.changeInterval(timer1,2000); mainForm.button.text="刷新表"; } } mainForm.tab.onnotify = function(id,code,ptr){ } mainForm.button_lu.oncommand = function(id,event){ import fsys.ini; ini=fsys.ini("..\跑图路线.INI") //path=ini.readKeys("路线") path=ini.getSection("路线") var num=tonumber(ini.read("路线","点数")) //num=tonumber(path.点数) //mainForm.edit.print(#num,type(num)) if num==null{ //win.msgbox("1") //mainForm.edit.print(num) num=0; ini.write("路线","点数","0") } else { //win.msgbox("2") num=num+1 ini.write("路线","点数",num) } ini.write("路线","点"+num,math.round(man_x)++","++math.round(man_y)++","++math.round(man_z)) } mainForm.button2.oncommand = function(id,event){ var aa=mainForm.edit2.text aa=tonumber("0x"+aa) mainForm.edit2.text=tostring(aa-wowbaseaddress,16) } mainForm.button3.oncommand = function(id,event){ var aa=mainForm.edit2.text aa=tonumber("0x"+aa) mainForm.edit2.text=tostring(aa+wowbaseaddress,16) //mainForm.edit2.text=string.reverse(string.replace(tostring(aa+wowbaseaddress,16),"0x","")) } zuobiao=0 zuobiaoform.button.oncommand = function(id,event){ //zuobiaoform.edit.print("MoveTo("++math.round(man_x,2)++","++math.round(man_y,2)++","++math.round(man_z,2)++")") //zuobiaoform.edit.print(string.format("%.2f",-4335.255654 )) //zuobiaoform.edit.print(string.format("%i",-4335.258654 )) if zuobiaoform.checkbox.checked { zuobiaoform.edit.print("加入寻路坐标("++string.format("%.2f",man_x)++","++string.format("%.2f",man_y)++","++string.format("%.2f",man_z)++")") } elseif zuobiaoform.checkbox2.checked { zuobiaoform.edit.print("增加采集坐标("++string.format("%.2f",man_x)++","++string.format("%.2f",man_y)++","++string.format("%.2f",man_z)++")") } elseif zuobiaoform.checkbox3.checked { //zuobiaoform.edit.print("[路径]") zuobiaoform.edit.print("点"++zuobiao++"="++string.format("%.2f",man_x)++","++string.format("%.2f",man_y)++","++string.format("%.2f",man_z)) } elseif zuobiaoform.checkbox4.checked { zuobiaoform.edit.print("加入打怪坐标("++string.format("%.2f",man_x)++","++string.format("%.2f",man_y)++","++string.format("%.2f",man_z)++")") } elseif zuobiaoform.checkbox5.checked { zuobiaoform.edit.print("走路("++string.format("%.2f",man_x)++","++string.format("%.2f",man_y)++","++string.format("%.2f",man_z)++")") } zuobiao++ zuobiaoform.static.text="总数"++zuobiao } zuobiaoform.button2.oncommand = function(id,event){ zuobiaoform.edit.text="" zuobiaoform.static.text="总数"++0 zuobiao=0 } mainForm.button4.oncommand = function(id,event){ var man_x=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1600,0x4))) //[[[人物基址]+200]+0x1600 var man_y=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1604,0x4))) //[[[人物基址]+200]+0x1604 var man_z=raw.cast(raw.float,(read(read(read(人物基址,0x4)+0x200,0x4)+0x1608,0x4))) //[[[人物基址]+200]+0x1608 var xaddress=string.format("%x",read(read(人物基址,0x4)+0x200,0x4)+0x1600) var yaddress=string.format("%x",read(read(人物基址,0x4)+0x200,0x4)+0x1604) var zaddress=string.format("%x",read(read(人物基址,0x4)+0x200,0x4)+0x1608) mainForm.edit.print(xaddress,yaddress,zaddress) mainForm.edit.print(chage(man_x),chage(man_y),chage(man_z)) write(xaddress,chage(man_x)) //write(0x40366cbc,0x0000ffff) } chage= function(num){ var floatX = raw.convert( {float n=num},{int x}).x floatX=string.format("%x",floatX ) return floatX; } mainForm.button5.oncommand = function(id,event){ 目标ID1=read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+0x9c,0x4) 目标ID2=read(read(read(read(人物基址,0x4)+0x200,0x4)+0x10,0x4)+0xA4,0x4) ss=mosterform.mosterlist.count for(i=1;ss;1){ if 目标ID1==mosterform.mosterlist.getItemText(i,8) and 目标ID2==mosterform.mosterlist.getItemText(i,9){ mainForm.edit.print("名字:",mosterform.mosterlist.getItemText(i,2)) mainForm.edit.print("x:",mosterform.mosterlist.getItemText(i,3)) mainForm.edit.print("y:",mosterform.mosterlist.getItemText(i,4)) mainForm.edit.print("z:",mosterform.mosterlist.getItemText(i,5)) } } } mainForm.show(); return win.loopMessage();
最新回复 (0)