TC官方合作论坛

 找回密码
 立即注册
查看: 24892|回复: 138

[游戏] (供大家学习内存方法)诛仙前传自动回血回蓝100%精确+动态监视人物属性+生产技能脚本

[复制链接]
发表于 2011-10-14 23:10:57 | 显示全部楼层 |阅读模式
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()//获取人物属性函数
  //调用子空间charactergaindata函数,将子空间文件在主空间导入#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()//获取背包数据函数
   //调用子空间bagdatareadingbag函数,将子空间文件在主空间导入#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()//进行生产函数
   //调用子空间prodctionprodction函数,将子空间文件在主空间导入#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&&current>= 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&&current>= 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








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

 楼主| 发表于 2011-10-14 23:11:29 | 显示全部楼层
:*先抢个沙发坐着。
回复 支持 反对

使用道具 举报

发表于 2011-10-14 23:38:33 | 显示全部楼层
我晕死  日天哥 你还要威望  找揍  啊:D
回复 支持 反对

使用道具 举报

发表于 2011-10-14 23:41:06 | 显示全部楼层
全英文的  得把我的付出的赚回来来!! 来不加点注释啊 看都看不懂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-15 00:03:56 | 显示全部楼层
:P
回复 支持 反对

使用道具 举报

发表于 2011-10-16 18:47:27 | 显示全部楼层
很强大的内存处理操作
回复 支持 反对

使用道具 举报

发表于 2011-10-17 10:19:10 | 显示全部楼层
死耗子你个贱人
回复 支持 反对

使用道具 举报

发表于 2011-10-17 10:20:29 | 显示全部楼层
顶 内存
回复 支持 反对

使用道具 举报

发表于 2011-10-17 10:21:52 | 显示全部楼层
占个位置再看。
回复 支持 反对

使用道具 举报

发表于 2011-10-17 10:22:53 | 显示全部楼层
前排留名&#183;!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-20 17:16 , Processed in 0.060335 second(s), 25 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表