50.第二阶段x86游戏实战2-lua获取本地寻路,跨地图寻路和获取当前地图id

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:49.第二阶段x86游戏实战2-鼠标点击call深追二叉树

上一个内容中把鼠标点击怪物需要的东西都找齐了,比如鼠标点击怪物时调用的call、call需要的参数来源都找齐了,然后再找寻路,之前是通过内存的方式去找的寻路(通过数据包找的寻路,这里19.第二阶段x86游戏实战2-寻找寻路call_游戏寻路call)它有一个问题,它只能本地寻路,本地寻路什么意思?就是说只能在当前地图进行寻路,没法跨地图寻路,使用lua的寻路它是可以跨地图寻路的(这里的lua寻路不是之前我们写的lua寻路,是游戏中的lua寻路,之前自己写的lua寻路本质还是用的19节里的东西),然后跨地图的寻路如果想通过内存实现就很复杂

然后开始分析跨地图寻路

首先把hooklua的工具注入到游戏中,就是下图的工具

然后不操作游戏,然后点击HOOK_LUA按钮,然后点击添加过滤文本按钮,这样过滤一下,防止不相关的lua脚本阻碍分析

然后在游戏中打开世界地图(准备进行跨地图寻路)

然后点击HOOK_LUA按钮,点击完了之后,来到游戏中进行跨地图寻路(这里最好操作的快点)

然后跨地图寻路完成之后,就会有lua脚本了,如下图,有了lua代码之后点击UNHOOK_LUA按钮,点击了之后它就不会再拦截lua代码了,然后跨地图寻路,入参应该是x坐标,y坐标,地图id这样的,但是通过观察hook到lua脚本并没有发现这种东西,所以现在就用到了之前下载的游戏中的lua源码了(在44.第二阶段x86游戏实战2-C++HOOK提取游戏lua这里搞的)

然后就需要一个有文件内容搜索的工具,这里使用 LuaStudio,它的官网 http://www.luastudio.net/,直接点击Download下载就可以了

安装完LuaStudio之后,点击下图红框

然后如下图说明

然后复制下图红框里的东西,这个英文是GoToDirectly,中文意思是直接前往,这个名字就很符合寻路,所以先搜索它,然后这里有个是SceneMap是文件名

然后点击查找

它找到了两个文件,先看SceneMap,Scene是场景的意思,合起来就是场景地图,因为名字符合所以先看它

然后如下图红框是lua的源码,然后开始分析

然后看下图中的内容

lua 复制代码
function SceneMap_GotoDirectly()
	
		
		local coordinatex,coordinatey,curSceneID  -- 声明了三个本地变量
		-- 这个意思是 SceneMap_Board:GetMouseScenePos()  有两个返回值
		-- 分别给到了 coordinatex, coordinatey 变量里
		-- 通过 coordinatex, coordinatey 它俩的名字可以看出它们是x坐标和y坐标
		-- 所以 SceneMap_Board:GetMouseScenePos() 是用来获取坐标的
		coordinatex, coordinatey = SceneMap_Board:GetMouseScenePos() 
		-- 通过 GetSceneID 名字可以看出它是用来得到地图id(场景id)的
		curSceneID = GetSceneID()
		-- 然后通过 g_CurSelectSceneID 这个单词可以看出它应该是
		-- 当前选中的地图id,然后if的判断就是当前选中id不等于-1
		-- 并且不等于当前地图 GetSceneID() 现在可以看出它是用来获取当前所在的地图id
		if	g_CurSelectSceneID ~= -1 and g_CurSelectSceneID ~= curSceneID then
			-- 然后这个if判断是 首先 g_SameSceneId 应该是地图数据相关
			-- g_SameSceneId[ g_CurSelectSceneID ] 是不是空的,如果不是空的就满足条件
			-- 然后判断 g_SameSceneId[ g_CurSelectSceneID ]  == curSceneID 也就是
			-- 选中的地图id和当前所在地图id是不是一样的,如果是一样的就执行 
			-- AutoRunToTarget(coordinatex, coordinatey) 函数,通过上方分析的
			-- AutoRunToTarget(coordinatex, coordinatey)意思应该是当前地图移动的函数了
			-- 然后 AutoRunToTargetEx(coordinatex,coordinatey,tonumber(g_CurSelectSceneID)) 是跨地图移动
			-- AutoRunToTargetEx的参数是x坐标y坐标和地图id
			if g_SameSceneId[ g_CurSelectSceneID ] and g_SameSceneId[ g_CurSelectSceneID ]  == curSceneID then
				AutoRunToTarget(coordinatex, coordinatey)
			else
				AutoRunToTargetEx(coordinatex,coordinatey,tonumber(g_CurSelectSceneID))
			end
		else
			AutoRunToTarget(coordinatex, coordinatey)
		end


	
end

然后就找到了跨地图移动的lua函数,然后之前搜索出了两个文件,然后再看看另一个文件的lua代码,如下图

然后分析它的代码,它的代码很简单,也没有跨地图寻路


相关推荐
泽02024 分钟前
C++之STL--list
开发语言·c++·list
编程乐学(Arfan开发工程师)1 小时前
42、响应处理-【源码分析】-浏览器与PostMan内容协商完全适配
java·spring boot·后端·测试工具·lua·postman
Dovis(誓平步青云)2 小时前
探索C++标准模板库(STL):String接口的底层实现(下篇)
开发语言·c++·stl·string
KyollBM2 小时前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
feiyangqingyun3 小时前
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
c++·qt·udp·gb28181
CV点灯大师3 小时前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
CodeOfCC3 小时前
c语言 封装跨平台线程头文件
linux·c语言·windows
啾啾Fun3 小时前
【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
java·redis·分布式·微服务·lua·redisson
成工小白4 小时前
【C++ 】智能指针:内存管理的 “自动导航仪”
开发语言·c++·智能指针
sc写算法4 小时前
基于nlohmann/json 实现 从C++对象转换成JSON数据格式
开发语言·c++·json