网站描述和关键词怎么写沈阳高端网站制作
到现在为止,我们已经将疯狂坦克外挂所需相关的功能点及解决方案完成。
先说说常规的使用方法:
1、编译发布程序后,先运行程序(默认不可见),然后进入美服疯狂坦克。
2、在游戏中按(Pause)键启动各种辅助线。
3、在游戏中按(Scroll Lock)键切换你当前所用的坦克。
4、在游戏中鼠标放到你坦克所在的位置(小地图上圆点中心),按下(PrScrn SysRq)键确定曲线起点。
5、通过(Insert)和(Delete)键调节角度标识与游戏中坦克实际角度线端点重合。
6、通过(Home)和(End)键调节风力标识与游戏中风力线边缘重合。
7、通过(PgUp)和(PgDn)建调节力度,直到小地图上的抛物线穿过你要命中的目标。
8、按一下键盘上的左边的(Control)键,将会按照预先设定的抛物线发射炮弹命中目标。
PS:所有调节按键,同时按下(Shift)键为粗调,放开(Shift)键后为精调。
由于游戏中不同的坦克的风力系统、推力系数、重力系数、满力时间不一样,所以请使用各种坦克经过多次测试得出系数。
具体测试各种坦克的相关系数方法:
1、选中某一款坦克,然后多次测试,根据炮弹的落点与小地图上曲线落点的误差调节该坦克的风力系统、推力系数、重力系数,直到精确。
2、多次测试根据推力标识与实际力度边缘线的误差调节该坦克的满力时间这一系数。
3、将各种测量后的系数写入配置文件中保存。
截止到目前为止,一个疯狂坦克辅助瞄准外挂的基本功能就完成了。但是这样的外挂其实是存在一些功能缺陷的,如下:
1、不能够直接读取游戏内存中的数据,来获取当前的角度、风力和力度等值,而是通过绘制和调节辅助线来获取。
2、不能够直接识别出当前正在使用的坦克的名称和加载相关参数,需要通过手动切换坦克。
3、未将各种坦克的四个系数都预设好,因为我真的没有这个时间和耐性。
以上的功能缺陷,最大的一个技术障碍就是不能够在游戏运行过程中从内存中获取相关的数据。
这也是为什么美服没有瞄准外挂而且当初国服的外挂在美服用不了的原因把。
个人推测是因为在某一次游戏更新过程中,将原来直接写到动态内存中的这些相关数据改为加密后再写入内存。
所以不管用FPE或者金山游侠等内存查询工具,均不能够在内存中发现任何的相关数据明文。
如果有朋友对其加密方式有研究,或者能够提供获取这些数据的解决方法,请与我联系指正。
如果能够获取到这些数据,这个外挂功能就算比较完整了,使用起来也没这么麻烦,如国服当年的坦克猎手4.1。
下面是程序的所有源码,稍后我会放到CSDN下载中心一份完整的源码,不知道是否能通过审核。
本程序仅限用于学习研究,请不要破坏游戏平衡,谢谢。
- using System;
 - using System.Collections.Generic;
 - using System.ComponentModel;
 - using System.Data;
 - using System.Drawing;
 - using System.Text;
 - using System.Xml;
 - using System.Windows.Forms;
 - using System.Runtime.InteropServices;
 - using System.Diagnostics;
 - using GlobalMouseKeyBoardHook;
 - namespace BBTankAssistant
 - {
 - public partial class Form1:Form
 - {
 - #region ====变量定义====
 - //全局鼠标钩子
 - private KeyboardHook KH;
 - //全局键盘钩子
 - private MouseHook MH;
 - //炮弹初始位置(坦克所在位置坐标)
 - private Point PrimaryCoordinate;
 - //炮弹运行位置(某一时刻炮弹所在位置坐标)
 - private Point MovementCoordinate;
 - //炮弹运行轨迹(炮弹可能出现的所有位置坐标)
 - private IList<Point> MoveKeyCoordinates;
 - //风力大小
 - private float WindPower;
 - //推力大小
 - private float PushPower;
 - //推力角度
 - private double PushAngle;
 - //当前坦克编号
 - private int TankNumberNowPlay;
 - //当前坦克
 - private Tank TankNowPlay;
 - //计时器
 - private Stopwatch SW;
 - #endregion
 - #region ====外部方法====
 - //外部方法:获取DC
 - [DllImport("User32.dll")]
 - public extern static System.IntPtr GetDC(System.IntPtr hWnd);
 - //外部方法:释放DC
 - [DllImport("User32.dll")]
 - static extern int ReleaseDC(IntPtr hWnd,IntPtr hDC);
 - //外部方法:刷新区域
 - [DllImport("user32.dll",CharSet = CharSet.Auto)]
 - public static extern bool InvalidateRect(IntPtr hWnd,IntPtr lpRect,bool bErase);
 - #endregion
 - public Form1()
 - {
 - InitializeComponent();
 - }
 - private void Form1_Shown(object sender,EventArgs e)
 - {
 - this.Hide();
 - }
 - private void Form1_Load(object sender,EventArgs e)
 - {
 - #region ====变量初始化====
 - KH = new KeyboardHook();
 - MH = new MouseHook();
 - KH.Star
 
