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,23 +265,23 @@ 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++)
if (IsValidClient(i) && !IsFakeClient(i)) if (IsValidClient(i) && !IsFakeClient(i))
{ {
target_friend[i] = 0; target_friend[i] = 0;
target_enemy[i] = 0; target_enemy[i] = 0;
reset_target_human_tp_coord(i); reset_target_human_tp_coord(i);
} }
int entity_tp = MaxClients + 1; int entity_tp = MaxClients + 1;
int entity_mp = MaxClients + 1; int entity_mp = MaxClients + 1;
while((entity_mp = FindEntityByClassname(entity_mp, "trigger_multiple")) != -1) while((entity_mp = FindEntityByClassname(entity_mp, "trigger_multiple")) != -1)
{ {
char targetName[64]; char targetName[64];
GetEntPropString(entity_mp, Prop_Data, "m_iName", targetName, sizeof(targetName)); GetEntPropString(entity_mp, Prop_Data, "m_iName", targetName, sizeof(targetName));
if (strlen(targetName) > 0) if (strlen(targetName) > 0)
{ {
HookSingleEntityOutput(entity_mp, "OnStartTouch", OnEntityOutPut_mp, true); HookSingleEntityOutput(entity_mp, "OnStartTouch", OnEntityOutPut_mp, true);
HookSingleEntityOutput(entity_mp, "OnTrigger", OnEntityOutPut_mp, true); HookSingleEntityOutput(entity_mp, "OnTrigger", OnEntityOutPut_mp, true);
@ -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) UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_mp);
{ UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_mp);
multiple_hook = true; //experimental if unhooking very shortly solves tp lag
UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_mp); DataPack dPack;
UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_mp); CreateDataTimer(0.5, reset_hook_mp, dPack);
//experimental if unhooking very shortly solves tp lag dPack.WriteCell(entity_index);
CreateTimer(0.5, reset_hook_mp, INVALID_HANDLE);
}
} }
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) UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_tp);
{ UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_tp);
teleport_hook = true; //experimental if unhooking very shortly solves tp lag
UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_tp); DataPack dPack;
UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_tp); CreateDataTimer(0.5, reset_hook_tp, dPack);
//experimental if unhooking very shortly solves tp lag dPack.WriteCell(entity_index);
CreateTimer(0.5, reset_hook_tp, INVALID_HANDLE);
}
} }
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;
} }