问题描述
我对编码比较陌生。我想为游戏 Assault Cube 创建一个训练器。我已经实现了一个“无限弹药”选项,它工作得很好,现在我想制作一个上帝模式(无限健康)选项。它不起作用,我不明白为什么。我已经从游戏中获取了正确的偏移量(使用作弊引擎检查),我对弹药所做的所有事情也对健康做了所有的事情,并添加了应该冻结的新健康值。程序有问题吗?这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Memory;
namespace AssaultHack
{
public partial class Form1 : Form
{
Mem meme = new Mem();
public static string RifleAmmo = "ac_client.exe+0x00109B74,150";
public static string PlayerHealth = "ac_client.exe+0x0010A280,338,34,98,8";
public Form1()
{
InitializeComponent();
}
private void checkBox1_CheckedChanged(object sender,EventArgs e)
{
}
private void Form1_Load(object sender,EventArgs e)
{
int PID = meme.GetProcIdFromName("ac_client");
if(PID > 0)
{
meme.OpenProcess(PID);
Thread WA = new Thread(writeAmmo) { IsBackground = true };
Thread PH = new Thread(godMode) { IsBackground = true };
PH.Start();
WA.Start();
}
}
private void writeAmmo()
{
while(true)
{
if (checkBox1.Checked)
{
meme.WriteMemory(RifleAmmo,"int","99999");
Thread.Sleep(2);
}
Thread.Sleep(2);
}
}
private void checkBox2_CheckedChanged(object sender,EventArgs e)
{
}
private void godMode()
{
while(true)
{
if (checkBox2.Checked)
{
meme.WriteMemory(PlayerHealth,"99999");
Thread.Sleep(2);
}
Thread.Sleep(2);
}
}
}
}
解决方法
在所有游戏中有两种类型的变量:
1.netvars:这种类型的变量由服务器的主机管理,只有当你是服务器的主机(在这种情况下你可以更改所有玩家变量)或者你利用发送套接字时你才能改变它们服务器
2.localvars:这种类型的变量在本地存储和管理在您的游戏数据中,您可以随时更改此变量,例如:视野/viewMatrix/角度。
在你的情况下,Assault Cube 的 health/shield/xyz/score/ammo 是网络变量,只有当你是主机时你才能改变它们。但是你可以对游戏进行逆向工程来找到可以帮助你创建诸如飞行等漏洞的东西......