返回列表 回复 发帖 点我体验网上斗地主的乐趣

自动加血(内存版)

相关搜索: 内存, 自动
在写这个脚本前,你首先要会找基址。
你可以去看看xedcx的关于游戏动态内存基址的查找方法
他的方法有70%命中基址(找不到,别怪我哦!)
下面就是我根据xedcx所找到基址而编的一个加血的脚本!
如果你看不懂,请先看loo000ool的读取内存判断的方法  
var Baseadr=$0092764c //这就是基址,但每次游戏更新,基址也会被更新哦!
var Baseadr1=$1c      //这是偏移1c
var Baseadr2=$20      //这是偏移20
var Baseadr3=$450     //这是偏移450
var tmp=0         //这是过渡函数
var h=0           //这就是我们想要的血值
main
while 1=1
read mem DWord Baseadr tmp   //读取基址
//关于ReadMem的用法,请参见函数说明
set tmp=tmp+Baseadr1            //基址+偏移1c=一级基址
read mem DWord tmp Baseadr  //读取一级基址
set tmp=Baseadr+Baseadr2        //一级基址+偏移20=二级基址
read mem DWord tmp Baseadr  //读取二级基址
set tmp=Baseadr+Baseadr3        //二级基址+偏移450=血量地址
read mem DWord tmp h        //读取血量地址
  if h < 30
       call 喝血
  endif
   delay 100   //每100毫秒检测一次血量
endwhile
endmain
sub 喝血
以下我省略了
endsub
上面我写的是全局变量的脚本,如果你想写游戏程序的脚本请看——用抓内存做自动回血外挂的问题
会了吗????
如果有不足之处请指出来,我会改正的!!!

[ 本帖最后由 fhfanxin 于 2008-4-27 08:22 编辑 ]
1

评分次数

  • xedcx

自己拉把沙发坐坐!!!
休息一会儿!!!
if h < 30
H应该是代表HP的意思吧?
建议不要设置成固定值,这个如果编译成EXE以后,对不同等级的玩家,不同职业的玩家来说,是不适用的.我建议可以用%. 就是找到HP上限地址,读取HP上限后,乘以%来确定血量的值,这样可以大大的提高通用性.
你这个写法有点问题。。。
其实你的最终血量地址找出来以后,之后循环判断血值用不着重新算血量地址,一般没有重起游戏都不会变的。。
所以应该是这样
read mem DWord Baseadr tmp   //读取基址
//关于ReadMem的用法,请参见函数说明
set tmp=tmp+Baseadr1            //基址+偏移1c=一级基址
read mem DWord tmp Baseadr  //读取一级基址
set tmp=Baseadr+Baseadr2        //一级基址+偏移20=二级基址
read mem DWord tmp Baseadr  //读取二级基址
set tmp=Baseadr+Baseadr3        //二级基址+偏移450=血量地址
while 1=1
  read mem DWord tmp h        //读取血量地址
  if h < 30
       call 喝血
  endif
   delay 100   //每100毫秒检测一次血量
endwhile

呵呵,你自己看看是不是。。
原帖由 xedcx 于 2008-4-28 20:44 发表
if h < 30
H应该是代表HP的意思吧?
建议不要设置成固定值,这个如果编译成EXE以后,对不同等级的玩家,不同职业的玩家来说,是不适用的.我建议可以用%. 就是找到HP上限地址,读取HP上限后,乘以%来确定血量的值,这样可以 ...
这种问题,我一般是这样弄的。
var h=0
var hp=0
main
set hp=readintegerfrominifile(".ini","。。","hp",1000)
...
if h<hp
...
endif
endmain
这样,随时可以在.INI文件里修改加血下限
如果自己写脚本自己用,那只要功能完善就好了。
但是如果你想给别人用,或者达到最方便的目的
那么就要尽量自己费点心思做到通用性比较强,且傻瓜式的脚本
这样大家才会很容易的接受及使用。
返回列表