Noclip, ufo, etc... commands
This commit is contained in:
parent
9637e9b6bf
commit
16af5a0d0b
@ -635,7 +635,7 @@ namespace command
|
|||||||
|
|
||||||
static void add_commands_sp()
|
static void add_commands_sp()
|
||||||
{
|
{
|
||||||
/*add("god", []()
|
add("god", []()
|
||||||
{
|
{
|
||||||
if (!game::SV_Loaded())
|
if (!game::SV_Loaded())
|
||||||
{
|
{
|
||||||
@ -723,14 +723,14 @@ namespace command
|
|||||||
}
|
}
|
||||||
|
|
||||||
cmd_give_weapon(0, params.get_all());
|
cmd_give_weapon(0, params.get_all());
|
||||||
});*/
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_commands_mp()
|
static void add_commands_mp()
|
||||||
{
|
{
|
||||||
client_command_hook.create(0x4132E0_b, &client_command);
|
client_command_hook.create(0x4132E0_b, &client_command);
|
||||||
|
|
||||||
/*add_sv("god", [](const int client_num, const params_sv&)
|
add_sv("god", [](const int client_num, const params_sv&)
|
||||||
{
|
{
|
||||||
if (!check_cheats(client_num))
|
if (!check_cheats(client_num))
|
||||||
{
|
{
|
||||||
@ -777,8 +777,8 @@ namespace command
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle_client_flag(client_num, 2, "noclip");
|
toggle_client_flag(client_num, 2, "ufo");
|
||||||
});*/
|
});
|
||||||
|
|
||||||
add_sv("give", [](const int client_num, const params_sv& params)
|
add_sv("give", [](const int client_num, const params_sv& params)
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,10 @@ namespace gameplay
|
|||||||
utils::hook::detour stuck_in_client_hook;
|
utils::hook::detour stuck_in_client_hook;
|
||||||
utils::hook::detour cm_transformed_capsule_trace_hook;
|
utils::hook::detour cm_transformed_capsule_trace_hook;
|
||||||
|
|
||||||
|
utils::hook::detour client_end_frame_hook;
|
||||||
|
utils::hook::detour g_damage_client_hook;
|
||||||
|
utils::hook::detour g_damage_hook;
|
||||||
|
|
||||||
game::dvar_t* jump_slowDownEnable;
|
game::dvar_t* jump_slowDownEnable;
|
||||||
game::dvar_t* jump_enableFallDamage;
|
game::dvar_t* jump_enableFallDamage;
|
||||||
|
|
||||||
@ -168,6 +172,52 @@ namespace gameplay
|
|||||||
a.bind(allsolid);
|
a.bind(allsolid);
|
||||||
a.jmp(0x2C9F9F_b);
|
a.jmp(0x2C9F9F_b);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void client_end_frame_stub2(game::mp::gentity_s* entity)
|
||||||
|
{
|
||||||
|
client_end_frame_hook.invoke<void>(entity);
|
||||||
|
|
||||||
|
if ((entity->client->flags & 1)) // noclip
|
||||||
|
{
|
||||||
|
entity->client->pm_type = 2;
|
||||||
|
}
|
||||||
|
else if ((entity->client->flags & 2)) // ufo
|
||||||
|
{
|
||||||
|
entity->client->pm_type = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void g_damage_client_stub(game::mp::gentity_s* targ, const game::mp::gentity_s* inflictor, game::mp::gentity_s* attacker,
|
||||||
|
const float* dir, const float* point, int damage, int dflags, int mod,
|
||||||
|
const unsigned int weapon, bool is_alternate, unsigned int hit_loc, int time_offset)
|
||||||
|
{
|
||||||
|
if ((targ->client->flags & 1) || (targ->client->flags & 2)) // noclip, ufo
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_damage_client_hook.invoke<void>(targ, inflictor, attacker, dir, point, damage, dflags, mod,
|
||||||
|
weapon, is_alternate, hit_loc, time_offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
void g_damage_stub(game::mp::gentity_s* targ, const game::mp::gentity_s* inflictor, game::mp::gentity_s* attacker,
|
||||||
|
const float* dir, const float* point, int damage, int dflags, int mod,
|
||||||
|
const unsigned int weapon, bool is_alternate, unsigned int hit_loc,
|
||||||
|
unsigned int model_index, unsigned int part_name, int time_offset)
|
||||||
|
{
|
||||||
|
if (targ->flags & 1) // godmode
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targ->flags & 2) // demigod
|
||||||
|
{
|
||||||
|
damage = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_damage_hook.invoke<void>(targ, inflictor, attacker, dir, point, damage, dflags, mod, weapon,
|
||||||
|
is_alternate, hit_loc, model_index, part_name, time_offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class component final : public component_interface
|
class component final : public component_interface
|
||||||
@ -230,6 +280,11 @@ namespace gameplay
|
|||||||
dvars::g_playerCollision = dvars::register_bool("g_playerCollision", true, game::DVAR_FLAG_REPLICATED,
|
dvars::g_playerCollision = dvars::register_bool("g_playerCollision", true, game::DVAR_FLAG_REPLICATED,
|
||||||
"Flag whether player collision is on or off");
|
"Flag whether player collision is on or off");
|
||||||
cm_transformed_capsule_trace_hook.create(0x4D63C0_b, cm_transformed_capsule_trace_stub);
|
cm_transformed_capsule_trace_hook.create(0x4D63C0_b, cm_transformed_capsule_trace_stub);
|
||||||
|
|
||||||
|
// Make noclip work
|
||||||
|
client_end_frame_hook.create(0x3FF7D0_b, client_end_frame_stub2);
|
||||||
|
g_damage_client_hook.create(0x414F10_b, g_damage_client_stub);
|
||||||
|
g_damage_hook.create(0x414A10_b, g_damage_stub);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1501,12 +1501,17 @@ namespace game
|
|||||||
|
|
||||||
struct gclient_s
|
struct gclient_s
|
||||||
{
|
{
|
||||||
char __pad0[18834];
|
char __pad0[2];
|
||||||
char name[32]; // 18720
|
char pm_type; // 2
|
||||||
char __pad1[622];
|
char __pad1[18831];
|
||||||
|
char name[32]; // 18834
|
||||||
|
char __pad2[622];
|
||||||
int flags; // 19488
|
int flags; // 19488
|
||||||
}; // size = ?
|
}; // size = ?
|
||||||
|
|
||||||
|
static_assert(offsetof(gclient_s, name) == 18834);
|
||||||
|
static_assert(offsetof(gclient_s, flags) == 19488);
|
||||||
|
|
||||||
struct EntityState
|
struct EntityState
|
||||||
{
|
{
|
||||||
uint16_t entityNum;
|
uint16_t entityNum;
|
||||||
|
@ -59,8 +59,8 @@ namespace game
|
|||||||
|
|
||||||
WEAK symbol<void()> Quit{0x3A5A20, 0x17CF50};
|
WEAK symbol<void()> Quit{0x3A5A20, 0x17CF50};
|
||||||
|
|
||||||
WEAK symbol<void(int localClientNum, const char* message)> CG_GameMessage{0x0, 0x316210};
|
WEAK symbol<void(int localClientNum, const char* message)> CG_GameMessage{0x15B3B0, 0x316210};
|
||||||
WEAK symbol<void(int localClientNum, const char* message)> CG_GameMessageBold{0x0, 0x3122F0};
|
WEAK symbol<void(int localClientNum, const char* message)> CG_GameMessageBold{0x15B110, 0x3122F0};
|
||||||
WEAK symbol<void(int localClientNum, /*mp::cg_s**/void* cg,
|
WEAK symbol<void(int localClientNum, /*mp::cg_s**/void* cg,
|
||||||
const char* dvar, const char* value)> CG_SetClientDvarFromServer{0x0, 0x0};
|
const char* dvar, const char* value)> CG_SetClientDvarFromServer{0x0, 0x0};
|
||||||
WEAK symbol<char*(const unsigned int weapon,
|
WEAK symbol<char*(const unsigned int weapon,
|
||||||
@ -112,8 +112,8 @@ namespace game
|
|||||||
WEAK symbol<unsigned int(const char* name)> G_GetWeaponForName{0x2F20F0, 0x461180};
|
WEAK symbol<unsigned int(const char* name)> G_GetWeaponForName{0x2F20F0, 0x461180};
|
||||||
WEAK symbol<int(playerState_s* ps, unsigned int weapon, int dualWield,
|
WEAK symbol<int(playerState_s* ps, unsigned int weapon, int dualWield,
|
||||||
int startInAltMode, int, int, int, char, ...)> G_GivePlayerWeapon{0x2F24F0, 0x461600};
|
int startInAltMode, int, int, int, char, ...)> G_GivePlayerWeapon{0x2F24F0, 0x461600};
|
||||||
WEAK symbol<void(playerState_s* ps, unsigned int weapon, int hadWeapon)> G_InitializeAmmo{0x0, 0x41C170};
|
WEAK symbol<void(playerState_s* ps, unsigned int weapon, int hadWeapon)> G_InitializeAmmo{0x29D9E0, 0x41C170};
|
||||||
WEAK symbol<void(int clientNum, unsigned int weapon)> G_SelectWeapon{0x0, 0x462560};
|
WEAK symbol<void(int clientNum, unsigned int weapon)> G_SelectWeapon{0x2F2EA0, 0x462560};
|
||||||
WEAK symbol<int(playerState_s* ps, unsigned int weapon)> G_TakePlayerWeapon{0x2F3050, 0x462770};
|
WEAK symbol<int(playerState_s* ps, unsigned int weapon)> G_TakePlayerWeapon{0x2F3050, 0x462770};
|
||||||
|
|
||||||
WEAK symbol<char*(char* string)> I_CleanStr{0x4293E0, 0x5AF2E0};
|
WEAK symbol<char*(char* string)> I_CleanStr{0x4293E0, 0x5AF2E0};
|
||||||
@ -196,7 +196,7 @@ namespace game
|
|||||||
|
|
||||||
WEAK symbol<const char*(int clientNum)> SV_GetGuid{0x0, 0x551D90};
|
WEAK symbol<const char*(int clientNum)> SV_GetGuid{0x0, 0x551D90};
|
||||||
WEAK symbol<int(int clientNum)> SV_GetClientPing{0x0, 0x551D70};
|
WEAK symbol<int(int clientNum)> SV_GetClientPing{0x0, 0x551D70};
|
||||||
WEAK symbol<playerState_s* (int num)> SV_GetPlayerstateForClientNum{0x0, 0x551E10};
|
WEAK symbol<playerState_s* (int num)> SV_GetPlayerstateForClientNum{0x4C3F10, 0x551E10};
|
||||||
WEAK symbol<void(int index, const char* string)> SV_SetConfigstring{0x0, 0x553E60};
|
WEAK symbol<void(int index, const char* string)> SV_SetConfigstring{0x0, 0x553E60};
|
||||||
WEAK symbol<bool()> SV_Loaded{0x4C4810, 0x553970};
|
WEAK symbol<bool()> SV_Loaded{0x4C4810, 0x553970};
|
||||||
WEAK symbol<void(int clientNum, const char* reason)> SV_KickClientNum{0x0, 0x54C060};
|
WEAK symbol<void(int clientNum, const char* reason)> SV_KickClientNum{0x0, 0x54C060};
|
||||||
|
Loading…
Reference in New Issue
Block a user