questionable how effective teleport spotting now is, but probably no lag anymore

This commit is contained in:
jenz 2022-01-12 21:13:52 +01:00
parent cace8afc41
commit 38fdad89ba

View File

@ -28,8 +28,6 @@ bool chat_cooldown = false;
//admins & vips //admins & vips
bool admins[MAXPLAYERS + 1]; bool admins[MAXPLAYERS + 1];
bool vips[MAXPLAYERS + 1]; bool vips[MAXPLAYERS + 1];
bool teleport_hook = false;
bool multiple_hook = false;
//socket for bot input //socket for bot input
Handle global_socket; Handle global_socket;
@ -63,6 +61,7 @@ public void OnPluginStart()
//UDP connection //UDP connection
connect_socket(); connect_socket();
chat_cooldown = false; chat_cooldown = false;
round_start_void();
} }
public void reset_target_human_tp_coord(int client) public void reset_target_human_tp_coord(int client)
@ -259,8 +258,6 @@ public void unhookAll()
UnhookSingleEntityOutput(entity_tp, "OnTrigger", OnEntityOutPut_tp); UnhookSingleEntityOutput(entity_tp, "OnTrigger", OnEntityOutPut_tp);
} }
} }
teleport_hook = false;
multiple_hook = false;
} }
public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast) public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)
@ -268,7 +265,7 @@ public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)
unhookAll(); unhookAll();
} }
public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast) public void round_start_void()
{ {
unhookAll(); unhookAll();
for (int i = 1; i <= MaxClients; i++) for (int i = 1; i <= MaxClients; i++)
@ -302,6 +299,11 @@ public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast
} }
} }
public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast)
{
round_start_void();
}
public void OnEntityOutPut_mp(const char[] output, int entity_index, int client, float delay) public void OnEntityOutPut_mp(const char[] output, int entity_index, int client, float delay)
{ {
if (IsValidEdict(entity_index) && origin_command_check(entity_index)) if (IsValidEdict(entity_index) && origin_command_check(entity_index))
@ -322,14 +324,12 @@ public void OnEntityOutPut_mp(const char[] output, int entity_index, int client,
} }
} }
} }
if (!multiple_hook)
{
multiple_hook = true;
UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_mp); UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_mp);
UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_mp); UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_mp);
//experimental if unhooking very shortly solves tp lag //experimental if unhooking very shortly solves tp lag
CreateTimer(0.5, reset_hook_mp, INVALID_HANDLE); DataPack dPack;
} CreateDataTimer(0.5, reset_hook_mp, dPack);
dPack.WriteCell(entity_index);
} }
public void OnEntityOutPut_tp(const char[] output, int entity_index, int client, float delay) public void OnEntityOutPut_tp(const char[] output, int entity_index, int client, float delay)
@ -350,14 +350,12 @@ public void OnEntityOutPut_tp(const char[] output, int entity_index, int client,
break; break;
} }
} }
if (!teleport_hook)
{
teleport_hook = true;
UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_tp); UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_tp);
UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_tp); UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_tp);
//experimental if unhooking very shortly solves tp lag //experimental if unhooking very shortly solves tp lag
CreateTimer(0.5, reset_hook_tp, INVALID_HANDLE); DataPack dPack;
} CreateDataTimer(0.5, reset_hook_tp, dPack);
dPack.WriteCell(entity_index);
} }
public void OnMapStart() public void OnMapStart()
@ -591,15 +589,27 @@ public bool is_bot_player(int client)
return is_autism_bot1(client) || is_autism_bot2(client) || is_autism_bot3(client) || is_autism_bot4(client); return is_autism_bot1(client) || is_autism_bot2(client) || is_autism_bot3(client) || is_autism_bot4(client);
} }
public Action reset_hook_mp(Handle timer, any data) public Action reset_hook_mp(Handle timer, DataPack dPack)
{ {
multiple_hook = false; dPack.Reset();
int entity_index = dPack.ReadCell();
if (IsValidEdict(entity_index))
{
HookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_mp, true);
HookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_mp, true);
}
return Plugin_Continue; return Plugin_Continue;
} }
public Action reset_hook_tp(Handle timer, any data) public Action reset_hook_tp(Handle timer, DataPack dPack)
{ {
teleport_hook = false; dPack.Reset();
int entity_index = dPack.ReadCell();
if (IsValidEdict(entity_index))
{
HookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_tp, true);
HookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_tp, true);
}
return Plugin_Continue; return Plugin_Continue;
} }