2011年11月30日 基址更新,点击下载最新脚本:
源码版:
亲门 由于版本比较旧 请大家用新版本时候 把个别地方的代码自己改下咯
【脚本说明】:
1.脚本使用内存操作,动态获取人物的血量和真气,以及人物属性等;
2.进入游戏后,点击启动,脚本动态获取全部界面列表信息。属性和血量时刻监视着,让PK变得更加犀利;
3.加血和加蓝功能不仅适合小药玩家,还适合大药玩家,加血和加蓝相对客观,帮站对于清蓝相当起效。
【脚本界面图】:
读取前界面
读取后界面
帮助PK+背包数据界面图
【源码如下】:
1.主空间源码:
#include"prodction(生产).t"
#include"hit guai(PK).t"
#include"bagdata(背包数据).t"
#include"Character Sheet(属性).t"
namespace 诛仙2全后台打怪脚本 int bloodthread//控制血量线程句柄
int indigothread//控制真气线程句柄
int characterthread//控制人物属性线程句柄
int bagdatathread//控制背包线程句柄 int productionthread//控制生产线程句柄
function bool judge()//判断游戏是否开启,若开启,开启加血和加蓝功能 int handle handle = process.getprocessid("诛仙前传")//获取诛仙前传线程句柄 if(handle != 0)//判断线程句柄是否为空 bloodthread = thread.beginthread("recover.addblood")//调用子空间recover的addblood函数,将子空间文件在主空间导入(##include"hit guai(PK).t") indigothread = thread.beginthread("recover.addindigo")//调用子空间recover的addingdigo函数,只导入一次空间文件即可 else help.messagebox("请检查游戏是否开启!")//输出消息框提示游戏没有开启 endif
return true
endfunction
function bool readdata_click()//获取人物属性函数 //调用子空间character的gaindata函数,将子空间文件在主空间导入(#include"Character Sheet(属性).t"),导入一次即可。 characterthread = thread.beginthread("character.gaindata") return true
endfunction
function bool stop_click()//停止人物属性数据获取 thread.closethread(characterthread)//关闭人物属性线程句柄 return true
endfunction
function bool readbagdata_click()//获取背包数据函数 //调用子空间bagdata的readingbag函数,将子空间文件在主空间导入(#include"bagdata(背包数据).t"),导入一次即可。 bagdatathread = thread.beginthread("bagdata.readingbag") return true
endfunction
function bool start_click()//判断血和蓝函数 诛仙2全后台打怪脚本.judge()//在本空间诛仙2全后台打怪脚本调用judge函数,judge用于开启判断蓝和血线程 return true
endfunction
function bool production_click()//进行生产函数 //调用子空间prodction的prodction函数,将子空间文件在主空间导入(#include"prodction(生产).t"),导入一次即可。 productionthread = thread.beginthread("prodction.prodction") return true
endfunction
function bool stopproduction_click()//暂停生产函数 thread.closethread(productionthread)//关闭生产线程 return true
endfunction
function bool exit_click()//退出 thread.closethread(bloodthread)//关闭血线程 thread.closethread(indigothread)//关闭看线程 thread.closethread(characterthread)//关闭人物属性线程 return true
endfunction
function bool destory()//注销,防止用户不点退出,点X关闭脚本,同样将全部线程关闭 thread.closethread(productionthread) thread.closethread(bloodthread) thread.closethread(indigothread) thread.closethread(characterthread) thread.closethread(bagdatathread) return true
endfunction
function bool explain_click()//属性列表说明,按钮弹消息框说明函数 help.messagebox("观看此属性动态变化,在每次使用技能让人物属性加强时,需要使用快捷键ALT+C让角色读取一次数据,这时为正确的数据,否则为人物本身无状态下的属性!") return true
endfunction
function bool explain1_click()//弹网站命令函数 bool ret3 ret3=help.cmd("http://www.tcmade.com/Tutorial/download.html",false) if(!ret3) help.messagebox("open false!") endif
return true
endfunction
function bool init()//初始化,用于激活第一个选项卡页面 tab.active("tab0",0) return true
endfunction
endnamespace
Character Sheet(属性).t文件源码:
//下面是人物属性空间函数
namespace character //定义一个character命名的空间,用于列出人物属性
int address//定义一个整型地址
function int reading(int hwnd) //通过传入一个进程句柄,读取通用地址的偏移地址,也就是说,通过#00c1543c这个基址加上#1C加上#28获取人物属性前面的通用地址。 //很多人会问我,我怎么知道这个地址偏移多少呢?其实这个地址需要借助于内存搜索工具,本人在这里用的是CE工具进行搜索的,通过CE搜索一个内存地址,然后跟偏移 //量,每得到一个偏移都会得到新的指针地址,再根据指针地址搜索下一个指针地址,直到出现一个没有偏移的地址,那么这个就是基地址了。 //得到这个基址之后,很多人又会问怎么代码实现了,是不是基地址就是这个数据,其实并不是这样的。 //在大部分游戏当中都可能会有一个全局变量,也就是说我们找到的这个基地址就是一个全局变量,根据这个全局变量(基址)+偏移+...+偏移就是一个内存地址 //,这个内存地址显示的才是用户需要的地址,所谓的内存地址是变化的,每次游戏上线都会获得新的一个内存地址,所以每次游戏上线我们都要获取一次。 //那么下面我们就通过这个原理将基址+偏移得到我们所用到的数据,下面这个读取字节是一个通用的偏移,所以我给它放到一起,下次直接调用即可。
address = process.read4byte(hwnd,process.read4byte(hwnd,process.read4byte(hwnd,#00C1543C)+#1c) +#28) return address//返回一个地址 endfunction
function bool gaindata()//下面开始获取人物属性数据 int handle,read //定义一个整型数据 句柄和一个read地址,很多人问为什么你知道定义一个这样的数据,如果你细致的话,多看看帮助文档每个函数的返回值和参数即可 double reading //定义一个浮点型数据,用于获取浮点数,英文有的人物属性是百分比的,所以我们读取内存地址也需要选择不一样的读取方式
handle = process.getprocessid("诛仙前传")//获得诛仙前传的进程句柄 if(handle != 0) //判断进程句柄是否为空 address = character.reading(handle)//调用上面我们通用的偏移地址,将获取的进程句柄传入到通用偏移函数中 while(true)//写一个循环动态的获取数据 //角色名 read=process.read4byte(handle,address+#4E4) //通用偏移+角色名偏移就得到了角色名地址,然后将数据读取即可,到了这里大家应该很清楚了。 statictext.settext("Static24",process.readstringunicode(handle,read,10)) help.sleep(100) //人物等级 read=process.read4byte(handle,address +#360) statictext.settext("Static49",convert.inttostr(read)) help.sleep(100) //当前血量 read = process.read4byte(handle,address +#27C) statictext.settext("Static44",convert.inttostr(read)) help.sleep(100) //当前真气 read = process.read4byte(handle,address+#280) statictext.settext("Static45",convert.inttostr(read)) help.sleep(100) //最大血量上限 read = process.read4byte(handle,address+#2A0) statictext.settext("Static46",convert.inttostr(read)) help.sleep(100) //最大真气上限 read = process.read4byte(handle,address+#2A4) statictext.settext("Static47",convert.inttostr(read)) help.sleep(100) //眩晕抗性 read = process.read4byte(handle,address +#300) statictext.settext("Static35",convert.inttostr(read)) help.sleep(100) //昏睡抗性 read = process.read4byte(handle,address +#304) statictext.settext("Static36",convert.inttostr(read)) help.sleep(100) //魅惑抗性 read = process.read4byte(handle,address+#30C) statictext.settext("Static37",convert.inttostr(read)) help.sleep(100) //定身抗性 read = process.read4byte(handle,address +#308) statictext.settext("Static38",convert.inttostr(read)) help.sleep(100) //虚弱抗性 read = process.read4byte(handle,address +#310) statictext.settext("Static39",convert.inttostr(read)) help.sleep(100) //攻击 int attack1,attack2 //注意:这里我分开写了,因为在内存当中最小攻击和最大攻击的地址是分开的,所以需要分开获取。
attack1 = process.read4byte(handle,address +#2EC) attack2 = process.read4byte(handle,address+#2F0) statictext.settext("Static25",str.strcat(convert.inttostr(attack1),str.strcat("--",convert.inttostr(attack2)))) help.sleep(100) //防御 read = process.read4byte(handle,address +#2F8) statictext.settext("Static27",convert.inttostr(read)) help.sleep(100) //普攻命中 read = process.read4byte(handle,address +#2F4) statictext.settext("Static26",convert.inttostr(read)) help.sleep(100) //普攻闪躲 read = process.read4byte(handle,address+#2FC) statictext.settext("Static33",convert.inttostr(read)) help.sleep(100) //致命伤害 reading = process.readfloat(handle,address+#2E8) statictext.settext("Static28",convert.doubletostr(reading)) help.sleep(100) //减免致命伤害 reading = process.readfloat(handle,address+#320) statictext.settext("Static32",convert.doubletostr(reading)) help.sleep(100) endwhile
else help.messagebox("你还没有进入游戏,进入游戏后点击<readdate(读取数据)>按钮,获得人物属性值!") endif
return true
endfunction
endnamespace
hit guai(PK).t文件源码:
//这个是一个自动回血回蓝的子空间
namespace recover //定义了一个recover命名的空间
int handle function bool addblood()//加血
int blood int current handle = process.getprocessid("诛仙前传") //获取进程句柄
current = convert.strtoint(edit.gettext("edit2")) //获取用户当前设置血的值
while(true) //读地址
blood=process.read4byte(handle,process.read4byte(handle,process.read4byte(handle,process.read4byte(handle,#00C1543C)+#1c) +#28) +#27c) statictext.settext("Static15",convert.inttostr(blood))//获得数据写入界面标签 if(blood >= 0&¤t>= 0&&(blood-current) <= 0)//将用户设置和人物本身血量对比,判断是否加血 window.setwindowtop(window.findwindow("诛仙前传")) help.sleep(20) keyboard.keypress(57,1) help.sleep(20) endif help.sleep(600) endwhile
return true
endfunction
function bool addindigo()//加蓝 和加血是一样的,就不在说明了
int indigo int current handle = process.getprocessid("诛仙前传") current = convert.strtoint(edit.gettext("edit3")) while(true) indigo=process.read4byte(handle,process.read4byte(handle,process.read4byte(handle,process.read4byte(handle,#00C1543C)+#1c) +#28) +#280) statictext.settext("Static16",convert.inttostr(indigo)) if(indigo >= 0&¤t>= 0&&(indigo-current) <= 0)//加蓝 window.setwindowtop(window.findwindow("诛仙前传")) help.sleep(20) keyboard.keypress(48,1) help.sleep(20) help.sleep(20) endif help.sleep(600) endwhile
return true
endfunction
endnamespace
|