mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-10 03:48:25 +00:00
Fix exploit allowing extra height on spawn
This commit is contained in:
parent
1475e1b31f
commit
f7c878b8f1
@ -61,6 +61,13 @@ enum struct persistent_data_t
|
|||||||
bool bPractice;
|
bool bPractice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum struct savestate_t
|
||||||
|
{
|
||||||
|
float Angles[3];
|
||||||
|
float Origin[3];
|
||||||
|
float Velocity[3];
|
||||||
|
}
|
||||||
|
|
||||||
typedef StopTimerCallback = function void (int data);
|
typedef StopTimerCallback = function void (int data);
|
||||||
|
|
||||||
// game specific
|
// game specific
|
||||||
@ -91,7 +98,7 @@ ArrayList gA_Classnames = null;
|
|||||||
|
|
||||||
// save states
|
// save states
|
||||||
bool gB_SaveStatesSegmented[MAXPLAYERS+1];
|
bool gB_SaveStatesSegmented[MAXPLAYERS+1];
|
||||||
float gF_SaveStateData[MAXPLAYERS+1][3][3];
|
savestate_t gA_SaveStateData[MAXPLAYERS+1];
|
||||||
timer_snapshot_t gA_SaveStates[MAXPLAYERS+1];
|
timer_snapshot_t gA_SaveStates[MAXPLAYERS+1];
|
||||||
bool gB_SaveStates[MAXPLAYERS+1];
|
bool gB_SaveStates[MAXPLAYERS+1];
|
||||||
char gS_SaveStateTargetname[MAXPLAYERS+1][32];
|
char gS_SaveStateTargetname[MAXPLAYERS+1][32];
|
||||||
@ -262,6 +269,7 @@ public void OnPluginStart()
|
|||||||
|
|
||||||
// hook teamjoins
|
// hook teamjoins
|
||||||
AddCommandListener(Command_Jointeam, "jointeam");
|
AddCommandListener(Command_Jointeam, "jointeam");
|
||||||
|
AddCommandListener(Command_Spectate, "spectate");
|
||||||
|
|
||||||
// hook radio commands instead of a global listener
|
// hook radio commands instead of a global listener
|
||||||
for(int i = 0; i < sizeof(gS_RadioCommands); i++)
|
for(int i = 0; i < sizeof(gS_RadioCommands); i++)
|
||||||
@ -648,6 +656,16 @@ int GetHumanTeam()
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
public Action Command_Spectate(int client, const char[] command, int args)
|
||||||
|
{
|
||||||
|
if(!IsValidClient(client) || !gCV_JointeamHook.BoolValue)
|
||||||
|
{
|
||||||
|
return Plugin_Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
CleanSwitchTeam(client, 2, true);
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
public Action Command_Jointeam(int client, const char[] command, int args)
|
public Action Command_Jointeam(int client, const char[] command, int args)
|
||||||
{
|
{
|
||||||
@ -3396,17 +3414,17 @@ public void Shavit_OnFinish(int client)
|
|||||||
|
|
||||||
public void Shavit_OnPause(int client, int track)
|
public void Shavit_OnPause(int client, int track)
|
||||||
{
|
{
|
||||||
if(!GetClientEyeAngles(client, gF_SaveStateData[client][1]))
|
if(!GetClientEyeAngles(client, gA_SaveStateData[client].Angles))
|
||||||
{
|
{
|
||||||
gF_SaveStateData[client][1] = NULL_VECTOR;
|
gA_SaveStateData[client].Angles = NULL_VECTOR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Shavit_OnResume(int client, int track)
|
public void Shavit_OnResume(int client, int track)
|
||||||
{
|
{
|
||||||
if(!IsNullVector(gF_SaveStateData[client][1]))
|
if(!IsNullVector(gA_SaveStateData[client].Angles))
|
||||||
{
|
{
|
||||||
TeleportEntity(client, NULL_VECTOR, gF_SaveStateData[client][1], NULL_VECTOR);
|
TeleportEntity(client, NULL_VECTOR, gA_SaveStateData[client].Angles, NULL_VECTOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3429,7 +3447,7 @@ public Action Command_Drop(int client, const char[] command, int argc)
|
|||||||
|
|
||||||
void LoadState(int client)
|
void LoadState(int client)
|
||||||
{
|
{
|
||||||
TeleportEntity(client, gF_SaveStateData[client][0], gF_SaveStateData[client][1], gF_SaveStateData[client][2]);
|
TeleportEntity(client, gA_SaveStateData[client].Origin, gA_SaveStateData[client].Angles, gA_SaveStateData[client].Velocity);
|
||||||
DispatchKeyValue(client, "targetname", gS_SaveStateTargetname[client]);
|
DispatchKeyValue(client, "targetname", gS_SaveStateTargetname[client]);
|
||||||
|
|
||||||
Shavit_LoadSnapshot(client, gA_SaveStates[client]);
|
Shavit_LoadSnapshot(client, gA_SaveStates[client]);
|
||||||
@ -3453,9 +3471,9 @@ void SaveState(int client)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetClientAbsOrigin(client, gF_SaveStateData[client][0]);
|
GetClientAbsOrigin(client, gA_SaveStateData[client].Origin);
|
||||||
GetClientEyeAngles(client, gF_SaveStateData[client][1]);
|
GetClientEyeAngles(client, gA_SaveStateData[client].Angles);
|
||||||
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", gF_SaveStateData[client][2]);
|
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", gA_SaveStateData[client].Velocity);
|
||||||
GetEntPropString(client, Prop_Data, "m_iName", gS_SaveStateTargetname[client], 32);
|
GetEntPropString(client, Prop_Data, "m_iName", gS_SaveStateTargetname[client], 32);
|
||||||
|
|
||||||
Shavit_SaveSnapshot(client, gA_SaveStates[client]);
|
Shavit_SaveSnapshot(client, gA_SaveStates[client]);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user