further checks to prevent weird issues

This commit is contained in:
jenz 2022-01-26 14:15:45 +01:00
parent db669f3b05
commit fcd5881257

View File

@ -13,9 +13,9 @@ public Plugin myinfo =
url = "www.unloze.com" url = "www.unloze.com"
}; };
float bot_finished_surf_coords[MAXPLAYERS + 1][3]; float bot_finished_surf_coords[MAXPLAYERS + 1][3];
bool is_forward_called[MAXPLAYERS + 1];
char map_coorindates[65][256]; char map_coorindates[65][256];
char map_recordname[65][256]; char map_recordname[65][256];
bool round_switch = false;
Database g_dDatabase; Database g_dDatabase;
public void OnPluginStart() public void OnPluginStart()
@ -24,28 +24,48 @@ public void OnPluginStart()
if (IsValidClient(i)) if (IsValidClient(i))
{ {
reset_client(i); reset_client(i);
reset_bot_finished_surf(i);
} }
OnMapStart(); OnMapStart();
HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); HookEvent("round_start", Event_RoundStart, EventHookMode_Pre);
HookEvent("round_end", OnRoundEnd, EventHookMode_Post); HookEvent("round_end", OnRoundEnd, EventHookMode_Pre);
}
public void OnPluginEnd()
{
for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i))
{
reset_client(i);
reset_bot_finished_surf(i);
}
} }
public Action OnRoundEnd(Handle event, const char[] name, bool dontBroadcast) public Action OnRoundEnd(Handle event, const char[] name, bool dontBroadcast)
{ {
for (int i = 1; i <= MaxClients; i++) perform_resets();
if (IsValidClient(i) && !IsFakeClient(i))
{
reset_client(i);
}
} }
public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast) public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast)
{ {
perform_resets();
}
public void perform_resets()
{
round_switch = true;
for (int i = 1; i <= MaxClients; i++) for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i) && !IsFakeClient(i)) if (IsValidClient(i))
{ {
reset_client(i); reset_client(i);
reset_bot_finished_surf(i);
} }
CreateTimer(7.00, reset_round_switch, INVALID_HANDLE);
}
public Action reset_round_switch(Handle timer, any data)
{
round_switch = false;
} }
stock bool IsValidClient(int client) stock bool IsValidClient(int client)
@ -57,50 +77,48 @@ stock bool IsValidClient(int client)
public void OnClientPostAdminCheck(int client) public void OnClientPostAdminCheck(int client)
{ {
is_forward_called[client] = false; reset_bot_finished_surf(client);
reset_client(client);
} }
public void OnClientDisconnect(int client) public void OnClientDisconnect(int client)
{ {
is_forward_called[client] = false; reset_client(client); //casual autism thinking
reset_client(client); reset_bot_finished_surf(client);
} }
public void reset_client(int client) public void reset_bot_finished_surf(int client)
{ {
bot_finished_surf_coords[client][0] = 0.0; bot_finished_surf_coords[client][0] = 0.0;
bot_finished_surf_coords[client][1] = 0.0; bot_finished_surf_coords[client][1] = 0.0;
bot_finished_surf_coords[client][2] = 0.0; bot_finished_surf_coords[client][2] = 0.0;
is_forward_called[client] = false; }
if (BotMimic_IsPlayerMimicing(client))
public void reset_client(int client)
{
if (bot_finished_surf_coords[client][0] != 0.0)
{ {
BotMimic_StopPlayerMimic(client); BotMimic_StopPlayerMimic(client);
} }
} }
//unknown delay before forward is called.
//BotMimic_IsPlayerMimicing() is true in update_mimic_coords before the BotMimic_OnPlayerMimicLoops forward is called
public int BotMimic_OnPlayerMimicLoops(int client) public int BotMimic_OnPlayerMimicLoops(int client)
{ {
char map_name[256]; char map_name[256];
GetCurrentMap(map_name, sizeof(map_name)); GetCurrentMap(map_name, sizeof(map_name));
if (!is_bot_player(client) || StrContains(map_name, "ze_surf", false) == -1) if (StrContains(map_name, "ze_surf", false) == -1)
{ {
reset_client(client); reset_client(client);
reset_bot_finished_surf(client);
} }
else else if (bot_finished_surf_coords[client][0] != 0.0)
{ {
if (bot_finished_surf_coords[client][0] != 0.0 && BotMimic_IsPlayerMimicing(client)) reset_client(client);
{
BotMimic_StopPlayerMimic(client);
TeleportEntity(client, bot_finished_surf_coords[client], NULL_VECTOR, NULL_VECTOR); TeleportEntity(client, bot_finished_surf_coords[client], NULL_VECTOR, NULL_VECTOR);
reset_client(client); reset_bot_finished_surf(client);
} }
else else
{ {
is_forward_called[client] = true; GetEntPropVector(client, Prop_Send, "m_vecOrigin", bot_finished_surf_coords[client]);
}
} }
} }
@ -109,14 +127,19 @@ public Action update_mimic_coords(Handle timer, any data)
for (int i = 1; i <= MaxClients; i++) for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i) && is_bot_player(i)) if (IsValidClient(i) && is_bot_player(i))
{ {
if (BotMimic_IsPlayerMimicing(i) && is_forward_called[i]) if (bot_finished_surf_coords[i][0] != 0.0)
{ {
GetEntPropVector(i, Prop_Send, "m_vecOrigin", bot_finished_surf_coords[i]); GetEntPropVector(i, Prop_Send, "m_vecOrigin", bot_finished_surf_coords[i]);
} }
} }
if (round_switch)
{
return Plugin_Continue;
}
Handle records_list = BotMimic_GetLoadedRecordList(); Handle records_list = BotMimic_GetLoadedRecordList();
for (int i = 0; i < sizeof(map_coorindates); i++) for (int i = 0; i < sizeof(map_coorindates); i++)
{ {
bool found = false;
char char_coord[3][256]; char char_coord[3][256];
if (strlen(map_coorindates[i]) > 0) if (strlen(map_coorindates[i]) > 0)
{ {
@ -126,10 +149,10 @@ public Action update_mimic_coords(Handle timer, any data)
coords[1] = StringToFloat(char_coord[1]); coords[1] = StringToFloat(char_coord[1]);
coords[2] = StringToFloat(char_coord[2]); coords[2] = StringToFloat(char_coord[2]);
for (int j = 1; j <= MaxClients; j++) for (int j = 1; j <= MaxClients; j++)
if (IsValidClient(j) && !IsFakeClient(j) && bot_finished_surf_coords[j][0] == 0.0 && is_bot_player(j)) {
if (IsValidClient(j) && bot_finished_surf_coords[j][0] == 0.0 && is_bot_player(j))
{ {
float distance = get_power_distance(j, coords); float distance = get_power_distance(j, coords);
//PrintToChatAll("distance %f client %N", distance, j);
if (distance < 225.0) if (distance < 225.0)
{ {
char path[256]; char path[256];
@ -147,13 +170,24 @@ public Action update_mimic_coords(Handle timer, any data)
if (StrEqual(path, map_recordname[h], false)) if (StrEqual(path, map_recordname[h], false))
{ {
BotMimic_PlayRecordFromFile(j, path); BotMimic_PlayRecordFromFile(j, path);
found = true;
}
if (found)
break;
}
if (found)
break;
} }
} }
} }
if (found)
break;
} }
} }
if (found)
break;
} }
} return Plugin_Continue;
} }
public float get_power_distance(int target_player, float [3]pos) public float get_power_distance(int target_player, float [3]pos)
@ -221,9 +255,9 @@ public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[]
public void OnMapStart() public void OnMapStart()
{ {
for (int i = 1; i <= MaxClients; i++) for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i) && !IsFakeClient(i)) if (IsValidClient(i))
{ {
reset_client(i); reset_bot_finished_surf(i);
} }
char map_name[256]; char map_name[256];
GetCurrentMap(map_name, sizeof(map_name)); GetCurrentMap(map_name, sizeof(map_name));
@ -284,7 +318,19 @@ public void SQL_FinishedQuery_creating_tables(Database db, DBResultSet results,
public bool is_bot_player(int client) public bool is_bot_player(int client)
{ {
return is_autism_bot1(client) || is_autism_bot2(client) || is_autism_bot3(client) || is_autism_bot4(client) || false; //change to true for debugging on dev bool debug_b = false;
if (debug_b && is_jenz(client))
{
return true;
}
return is_autism_bot1(client) || is_autism_bot2(client) || is_autism_bot3(client) || is_autism_bot4(client); //change to true for debugging on dev
}
public bool is_jenz(int client)
{
char auth[50];
GetClientAuthId(client, AuthId_Engine, auth, sizeof(auth));
return StrEqual("[U:1:69566635]", auth, false) || StrEqual("STEAM_0:1:34783317", auth, false);
} }
public bool is_autism_bot1(int client) public bool is_autism_bot1(int client)