信息

教程|纯Java开发游戏如何实现敌我判断

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第1张

前言

何为纯Java开发?目前游戏基本离不开unity、Cocos这两大引擎,或者基于其他游戏引擎开发的游戏。他们存在的一个共同点是:主要游戏逻辑(伤害、物品加减)不会存在于dex,位于so动态库、js文件居多。

纯java开发的游戏只是一个统称,他可能用Java写的也可能用kotlin写的,毕竟这两者并不分家。

简单点说就是他的逻辑位于dex层,代表游戏:公会会长,普通的修改并无意义,我们今天进入的是如何在一个通用的伤害获取方法内实现敌我的判断。

教程

找到了关键的方法getfinadamage,伤害获取。这是一个简单直接返回,并无存在相关的判断,继续分析

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第2张

此时我们找到了一个判定方法,isplayerside,是一个Boolean类型的方法,根据传递进去的对象进行判断

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第3张

通过调用查询,我们发现了不少关键方法调用了这个判断方法,这一个步骤存在的意义是什么呢?一个是确定他是否为我们需要的存在判定功能。第二个是弄清楚先后关系。那就是伤害执行时有无经过这个方法的判定,他们两个是谁先执行。确定了isplayer是先执行的,那我们直接在这个方法下进行拦截即可

主要思路为:创建一个变量在这个方法内获取他们的返回结果,在伤害方法内通过获取变量进行判断。结合以上思路打开我们的as,开始写代码

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第4张

开发步骤省略,自行百度哦,第一步创建一个公开类的公开变量,初始值为false,不建议为true,如果程序发癫部分逻辑没走isplayer那么你自己也会被秒杀

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第5张

第二步在我们自己的类里面实现,我们上面思路的一个模拟获取,用于后续编译后我们可以直接复制粘贴进行修改,模拟获取流程为:模拟取值、模拟判断、模拟赋值

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第6张

最早我们代码如下:

模拟拦截赋值,拦截任意v0Boolean参数,传递给isplayer

sget-object v1, Lcom/qingdi/modtest/startmod;->INSTANCE:Lcom/qingdi/modtest/startmod;

invoke-virtual {v1, v0}, Lcom/qingdi/modtest/startmod;->setIsplayer(Z)V

模拟取值,读取isplayer字段获取当前值

.line 27

sget-object v1, Lcom/qingdi/modtest/startmod;->INSTANCE:Lcom/qingdi/modtest/startmod;

invoke-virtual {v1}, Lcom/qingdi/modtest/startmod;->getIsplayer()Z

move-result v1

模拟判断为false或true

if-eqz v1, :cond_4f

为true的执行逻辑

.line 31

:cond_4f

为false的执行逻辑

return-void

代码浅析结束,那么我们只需要在上面我们的两个方法内插入这些方法即可

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第7张

在判断方法内加入我们的模拟赋值代码,将结果存入我们的字段内

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第8张

在伤害方法插入模拟取值的代码取出值进行判断,注意要先初始获得我们原先的伤害值哦

结合以上代码把我们打包出来的dex放入apk文件即可实现一次简单的敌我判断

教程|纯Java开发游戏如何实现敌我判断 逆向教程 第9张

© 版权声明
THE END
感谢支持啦!୧( ⁼̴̶̤̀ω⁼̴̶̤́ )૭
点赞9
快来说两句( ˃̶̤́ ꒳ ˂̶̤̀ ) 抢沙发
头像
良言一句三冬暖,恶语伤人六月寒|禁止纯数字、字母、符号、表情
提交
头像

昵称

取消
昵称表情快捷回复

    请登录后查看评论内容