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代码,如下图

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


相关推荐
把我格子衫拿来2 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
无忧.芙桃2 小时前
C++语言原理与实践(十六):多态机制讲解
开发语言·c++·多态
泡海椒4 小时前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
wuminyu4 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
xxwl5854 小时前
区域赛分类题解
c++·笔记·学习·算法
青少儿编程课堂5 小时前
蓝桥杯+全国青少年信息素养大赛+电子学会PythonC/C++考级:最长公共子序列LCS解析
c++·python·算法·bfs·信息学竞赛
钱栈up6 小时前
耳机音效不对,我顺手查了系统更新,结果挖出个崩溃了整天的服务
windows·shell
代钦塔拉6 小时前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式
xiao77mwq6 小时前
Wireshark 在 Windows 上没法按进程抓包,我补了一条路
windows
Helix2507 小时前
MDT自动化部署实战:构建企业级Windows批量装机与PXE网络引导环境
windows·mdt自动化部署·wds网络启动·pxe引导·windows批量装机·任务序列·无人值守安装