炉石传说辅助
来源:互联网 发布:netcat for windows 编辑:程序博客网 时间:2024/04/28 21:24
实现原理:修改游戏文件
注入机器人
使用 MonoCecil,修改 Unity3D 生成的 Assembly 文件,在内部注入我们自己编写的Unity3D模块!
实现细节:修改游戏文件
其实主要是 MonoCecil 的使用
通过文件名、类名、方法名,取出方法的定义
static MethodDefinition fetch_method(string file, string type, string method){ // find hook method try { AssemblyDefinition ad = AssemblyDefinition.ReadAssembly(file); TypeDefinition td = null; foreach (TypeDefinition t in ad.MainModule.Types) { if (t.Name == type) { td = t; break; } } if (td == null) return null; MethodDefinition md = null; foreach (MethodDefinition t in td.Methods) { if (t.Name == method) { md = t; break; } } return md; } catch (Exception e) { Console.WriteLine(e.ToString()); return null; }}通过文件名和方法定义实现注入
static AssemblyDefinition inject_method(string file, MethodDefinition method, MethodDefinition method_tobe_inject){ try { AssemblyDefinition ad = AssemblyDefinition.ReadAssembly(file); ILProcessor ilp = method.Body.GetILProcessor(); Instruction ins_first = ilp.Body.Instructions[0]; Instruction ins = ilp.Create(OpCodes.Call, ad.MainModule.Import(method_tobe_inject.Resolve())); ilp.InsertBefore(ins_first, ins); return ad; } catch (Exception e) { Console.WriteLine(e.ToString()); return null; }}注入完了之后,利用
AssemblyDefinition.Write();
方法,把修改后的Assembly再写到一个文件里。
实现原理一:游戏状态获取
单例类
HearthStone有几个重要的类,如SceneMgr、MulliganManager、GameState、InputManager等等。
单例,直接调用Get()方法就可以了!
状态的识别
通常来说,可以使用SceneMgr取得当前的场景情况,可以使用GameState获得当前对战的游戏状态。两者一结合,基本就是整个游戏的状态的了。
通过状态就可以知道哪些类当前是有实例的,哪些是没有的。
实现原理二:场上卡牌的数据
GameState可以获得当前的两个玩家Player,而Player可以活动当前的卡牌,如Player.GetHandZone().GetCards()取得手上的卡牌。
实现原理三:机器人自动执行
首先,通过分析场上的数据就可以算出该怎么走牌,这是AI的部分,我只写了个有啥走啥的简单AI。
我们代码是使用组建的方式注册在游戏里的,会被定时调用,调用的时候,进行操作(如走牌)然后及时返回即可。
实现原理四:走牌和攻击
走牌和攻击的实现,虽然我能够完全模仿客户端逻辑,但是总觉得不太靠谱,因为客户端更新,我可能没发现,就会出错。因此我走牌和攻击的实现是直接调用了InputManager。
InputManager包含了一些方法,用于处理鼠标和键盘事件,我直接调用这些函数。
当然这么做的缺陷也是很明显的:InputManager的能力范围有限,并且我不能组织InputManager不去处理一些事件。比如当鼠标滑出窗口时,InputManager默认会把牌放回手里。
- 炉石传说辅助
- 炉石传说
- CCF 炉石传说
- CCF炉石传说
- ccf 炉石传说
- CCF-炉石传说
- CCF-炉石传说
- CCF炉石传说
- CCF炉石传说
- CCF-炉石传说
- CCF 炉石传说
- ccf炉石传说
- 炉石传说
- CCF_炉石传说
- ccf 炉石传说
- ccf 炉石传说
- 炉石传说_80
- 炉石传说卡
- Gradle实战系列(一)__初体验
- MySQL必知必会-1前言
- SQL关键字转换大写核心算法实现
- EM算法的简单学习与理解
- Java下载文件时IE浏览器出现文件名乱码
- 炉石传说辅助
- 201312-2
- MySQL必知必会-2安装MySQL
- leetcode linked-list-cycle(i 、ii)(java实现)
- 看完这篇文章才对GIT有了大彻大悟的认识
- Markdown-04目录脚注和表格(学习笔记)
- POJ 3084 Panic Room
- 浮动操作按钮FloatingActionButton&源码设计
- SQL递归查询知多少