Question[Help] Player Weapon Addresses

Posts 1–2 of 2 · Page 1 of 1
[Help] Player Weapon Addresses
I'm trying to make a server controller with the ability to force what types of classes players use. My knowledge is quite limited in any other area apart from memory editing since h2v days when I use to make things, I never really branched out further than that not to mention I'm a bit rusty anyway it's been about 7 years since I was in the scene. I'm currently attempting to get the address's for all clients primary weapons as per the weapon id and I seem to be succeeding. Whenever I change weapons or a client in my game does the address shows up with the correct id as per what weapon is currently in use. However when I try write to the address to force change it nothing happens it just forces back to whatever weapon they have selected it. There is probably an easier way to do this I'm just sitting in my comfort zone where I have a lot of experience. Does anyone know if this was patched? I've seen several tutorials regarding this on mpgh however they're a bit old.

References
[Tutorial] Change your weapon - AuT03x3C
Ultimate Server Control hack <3 | Weapon ID's - LOLxFUN


The only other idea I had was similar to Scoudem's mw2 lobby tools where you're able to open the game setup while host of a public match, this way you'd be able to set weapon restrictions etc as mw3 has a lot more setup options than mw2.
Something like this: (note this is old mw2 code)

void OpenGameSetupMenu()
{
((void (__cdecl*) (int, const char*))0x59DD70) (0, "popup_gamesetup");
}

Obviously I'd have to find the gamesetup popup offset or equivalent to mw3 if one even exists however this is a bit out of my skill set hell I might be completely wrong here. Any input is appreciated.
For c++

struct playerState_s
{
BYTE _0x0[0x1C]; //0x00 //0x01C29440
vec3_t Origin; //0x1C //0x01C2945C
vec3_t Velocity; //0x2E //0x01C29468
BYTE unk1[0x124]; //0x40
vec3_t ViewAngles; //0x164 //0x01C29598
BYTE _0x22[0x31C0]; //0x176
INT Score; //0x3336
BYTE _0x331C[0x5E]; //0x333A
CHAR PlayerNameStatic[0x10];//0x3398
INT MaxHealth; //0x33A8 //correct
BYTE _0x33B0[0x24]; //0x33AC
INT Team; //0x33D0
BYTE _0x33D8[0x3C]; //0x33D4
CHAR PlayerName[0xF]; //0x3410
BYTE _0x33D9[0x1BC]; //0x341F /maybe off b F and revert
INT ClippingFlags; //0x35CC //0x01C2CA0C
BYTE _spacer[0x2C];
INT MovementFlags;
BYTE _0x3600[0x380];
}; //Size 0x3980

typedef void(__cdecl* SendServerCommand_T)(int clientNum, int reliable, const char* command);
typedef int(__cdecl *G_GivePlayerWeapon_T)(playerState_s* ps, int iWeaponIndex, char altModelIndex);
typedef int(__cdecl *G_GetWeaponIndexForName_T)(const char* name);
typedef int(__cdecl *BG_TakePlayerWeapon_T)(playerState_s* ps, unsigned int iWeaponIndex, int takeAwayAmmo);
typedef int(__cdecl *BG_GetViewmodelWeaponIndex_T)(playerState_s* ps);
typedef int(__cdecl *Add_Ammo_T)(gentity_s* ent, unsigned int weaponIndex, char weaponModel, int count, int fillClip);

G_GivePlayerWeapon = (G_GivePlayerWeapon_T)0x00531750;
G_GetWeaponIndexForName = (G_GetWeaponIndexForName_T)0x00530F90;
BG_TakePlayerWeapon = (BG_TakePlayerWeapon_T)0x00430B30;
BG_GetViewmodelWeaponIndex = (BG_GetViewmodelWeaponIndex_T)0x0042FB50;
Add_Ammo = (Add_Ammo_T)0x00508200;
SV_GameSendServerCommand = (SendServerCommand_T)0x00573100;

#define SIZE_playerState 0x38EC
#define ADDRESS_playerState 0x01C29440

playerState_s* G_PlayerState(int clientIndex)
{
return (playerState_s*)(ADDRESS_playerState + (SIZE_playerState * clientIndex));
}

void GiveWeapon(const char* weaponName, int client)
{
BG_TakePlayerWeapon(G_PlayerState(client), BG_GetViewmodelWeaponIndex(G_PlayerState(client)), 1);
int index = G_GetWeaponIndexForName(weaponName);
G_GivePlayerWeapon(G_PlayerState(client), index, 0);
string cmd = "a " + to_string(index);
SV_GameSendServerCommand(client, 0, cmd.c_str());
Add_Ammo(G_Entity(client), index, 0, 9999, 1);
}

Credits to seb5594

For c# there are 3 weapon addresses for each playerState so just change all 3 and it should work.
Posts 1–2 of 2 · Page 1 of 1

Post a Reply

Similar Threads

Tags for this Thread

None

Need help?