一个用SearchValidAddr搜索基址的例子

代码如下:

#SetArgsOnCompile

#诛仙基址搜索工具脚本。此脚本用于帮助一些使用不了官方发布的基址的朋友。
#使用方法:
#首先在参数中填入自己角色的HP和MP值,需要的话适合修改搜索范围。然后在诛仙游戏中启动脚本。
#当输出"搜索到可能的基址"字样时,记下输出的基址,在诛仙打怪脚本中设置参数"基地址"。
#如果输出多个基址,那么退出游戏多搜索几次,找一个不变的地址使用。
#如果没有输出,调整范围再搜索,但是不要一次搜索的范围太大,速度会很慢。

dim myHP, myMP

function LogPrint(msg)
Print(msg)
WriteLog("搜索结果.txt", msg)
end function

function HexStr(num)
str=""
while num>0
n=num mod 16
if n<10 then
str=Chr(n+ASC("0"))&str
else
str=Chr(n-10+ASC("A"))&str
end if
num=num\16
wend
HexStr=str
end function

function TryAddr(byref addFirst)
TryAddr=false

if not SearchValidAddr(addFirst, &H0000000, addResult) then
exit function
end if

addFirst=addResult

if not ReadMemoryEx(addFirst, 2, Number1, 1) then
exit function
end if

addSecond=Number1+40
if not ReadMemoryEx(addSecond, 2, Number3, 1) then
exit function
end if

addNowBlood=Number3+596
addAllBlood=addNowBlood+&h18
addNowMP=addNowBlood+&h4
addAllMP=addNowBlood+&h1c

if not ReadMemoryEx(addNowBlood, 2, NowBlood, 1) then
exit function
end if
if NowBlood<>myHP then
exit function
end if

if not ReadMemoryEx(addAllBlood, 2, AllBlood, 1) then
exit function
end if
if AllBlood<>myHP then
exit function
end if

if not ReadMemoryEx(addNowMP, 2, NowMP, 1) then
exit function
end if
if NowMP<>myMP then
exit function
end if

if not ReadMemoryEx(addAllMP, 2, AllMP, 1) then
exit function
end if
if AllMP<>myMP then
exit function
end if

TryAddr=true
end function

function main
dim progress[11]
for i=1 to 11
progress[i]=false
next
myHP=GetConfigNumber("当前血值")
myMP=GetConfigNumber("当前MP值")
startAddr=CNum(GetConfigString("搜索起始地址"))
endAddr=CNum(GetConfigString("搜索结束地址"))
Print("起始地址:&H"& HexStr(startAddr))
Print("结束地址:&H"& HexStr(endAddr))
Print("搜索HP值:"&myHP)
Print("搜索MP值:"&myMP)
LogPrint("开始搜索.....")
for addr=startAddr to endAddr step 4
if TryAddr(addr) then
LogPrint("搜索到可能的基址: &H"& HexStr(addr))
end if
prg=Int((addr-startAddr)/(endAddr-startAddr)*10)
if prg>10 then
prg=10
end if
if not progress[prg+1] then
Print("已完成 %"&(prg*10))
progress[prg+1]=true
end if
next
end function

上面的代码是COPY的诛仙用于搜索基址的代码。我来解释下原理。
诛仙里,血的地址是 [[[基址]+40]+596]
就是基址读出数据+40,再读出数据+596,再读出数据就是血的地址
我们搜索基址的原理是,知道这个公式,但是基址改了。我们从一个大致的范围里,一个个当作基址来试,直到通过这个公式找到与参数设置里相匹配的血值。
SearchValidAddr就是从内在的指定地址开始往下一个个找,直到找到一个地址,他的值大于我们指定的值(这个例子里是0),然后返回这个地址。那么我们要问,为什么我们不能写个循环用ReadMemoryEx一个个读呢?答案是,用这个函数速度快1000倍。
找到了那个地址以后,我们用ReadMemoryEx读出来,当然有可能读取失败,要判断一下的。如果读出来了,照那个公式,读三级地址,再尝试读数据。一路读下来,直到读成功数据了,而且和指定的值匹配。那么我们就说这个可能是基址了。

(0)

相关推荐

  • 一个用SearchValidAddr搜索基址的例子

    复制代码 代码如下: #SetArgsOnCompile #诛仙基址搜索工具脚本.此脚本用于帮助一些使用不了官方发布的基址的朋友. #使用方法: #首先在参数中填入自己角色的HP和MP值,需要的话适合修改搜索范围.然后在诛仙游戏中启动脚本. #当输出"搜索到可能的基址"字样时,记下输出的基址,在诛仙打怪脚本中设置参数"基地址". #如果输出多个基址,那么退出游戏多搜索几次,找一个不变的地址使用. #如果没有输出,调整范围再搜索,但是不要一次搜索的范围太大,速度会很慢

  • layui的数据表格+springmvc实现搜索功能的例子

    如下所示: 主要在前端页面加: <div class="demoTable"> 搜索ID: <div class="layui-inline"> <input class="layui-input" name="keyWord" id="keyWord" autocomplete="off"> </div> <span class=&

  • 一个oracle+PHP的查询的例子

    http://qdlover.yeah.net   一个oracle+PHP的查询的例子   本来我不用php了,可是还是有很多朋友问我,我就做了一个例子,具体函数请查手册   其实oracle的函数和别的也差不多,只不过它这里多了一个定义输出变量的过程,   如果学过pl/sql的人都知道的(不过听说只有清华和西安交大用它做网站).   就是OCIDefineByName($id,"ROWNUM",&$rownum);对应了查询中的rownum,一个对应一个,   而且最应该

  • Python实现一个数组除以一个数的例子

    如果直接用python的一个list除以一个数,会报错: a = [1.0, 1.0, 1.0] c = a/3 print(c) TypeError: unsupported operand type(s) for /: 'list' and 'int' 使用Numpy可以轻松做到: import numpy as np a = np.array([1,1,1]) c = a/3 print(c) 以上这篇Python实现一个数组除以一个数的例子就是小编分享给大家的全部内容了,希望能给大家一个

  • 一个简单的XML Schema的例子

    我们可以看到,DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系.也就是说DTD文档本身并不是一个良好形式的XML文档,上面的关于DTD的介绍也仅仅是作了一个简介,目的是帮助大家能读懂DTD文件以及在必要时创建简单的DTD文件,因为现在很多的XML应用是建立在DTD之上的. 另外一个代替DTD的就是W3C定义的Schema,Schema从字面意义上来说,可以翻译成模式.大纲.计划.规划等等.它的基本意思就是说为XML文档制定一种模式. Schema相对于DTD的明显好处

  • 一个经典的ADO.NET入门例子

    众所周知,ADO.NET相对于ADO的最大优势在于对于数据的更新修改可以在与数据源完全断开联系的情况下进行,然后再把数据更新情况传回到 数据源.这样大大减少了连接过多对于数据库服务器资源的占用.下面是我在<ADO.NET实用指南>这本书上看到的一个例子,比较清楚的讲解 了ADO.NET的使用方法.  Imports System.Data.SqlClient  Imports System.Data  Imports System.Data.Common Public Class Form1 

  • 重新认识表格和一个访问无障碍的数据表格例子

    除特别说明外,本站内容采用创作共用授权署名和非商业用途,请尊重劳动成果. 表格一直是网页设计制作过程中一个重要的组成部分,在没学习CSS布局前,大多是用来布局的,但到目前位置发现居然还没真正地了解和完全掌握表格,不得不需要重新认识表格...... 在现代网页设计制作中,表格主要的用途应该是用来存放多元二维数据.和表格相关的标签有 table.tr.td.th.tbody.thead.tfoot.col.colgroup.caption,如何合理地应用这些标签呢?先从名词解释开始. 名词解释 ta

  • JS实现的一个简单的Autocomplete自动完成例子

    分享一篇无意间发现的自动完成源码.这里测试的时候使用的是数组,实际使用的时候,我们换成Ajax从服务器端获取的方式就OK了. 提示:可以直接保存到一个html文件中查看效果. 复制代码 代码如下: <!doctype html><html><style>body {    margin-left: 0px;    margin-top: 0px;    margin-right: 0px;    margin-bottom: 0px;}.auto_hidden {   

  • 一个多次搜索+多次传值的解决方案

    小弟刚学js,希望高手能够帮忙!这是一个管理系统的中的项目参与人员选择的代码,要解决的问题是: 1.用户点击选择人员后,弹出一个新窗口,能根据姓名或单位查找某个人,然后选择想要选择的人.然后继续查找下一个人.然后选择.2 选择好要选的人员后,把值返回到主页面的人员的表单中3 一个表单中可能有多处字段需要填入人员. 比如现在要添加一个项目信息 其中有项目主持人项目组成人员人员的信息都从人员信息库中取得. 以下是主页面的代码,由于用了ifrma.所以不能传值 文件打包上来吧:http://www.H

  • 如何用FileSystemObject组件来做一个站内搜索?

    searchpage.htm' 搜索页面. <html> <head>        <title>千花飞舞之站内搜索引擎</title>    </head>    <body>        <CENTER>            <FORM METHOD=POST ACTION="searchresult.asp"> <TABLE BGCOLOR="#BLUE"

随机推荐