reorganize some things to stop looping so much when a player joins

This commit is contained in:
rtldg 2021-08-01 16:27:54 +00:00
parent a64a29263d
commit b68aba6fd2
7 changed files with 127 additions and 183 deletions

View File

@ -23,7 +23,7 @@
#endif #endif
#define _shavit_included #define _shavit_included
#define SHAVIT_VERSION "3.0.2" #define SHAVIT_VERSION "3.0.3"
#define STYLE_LIMIT 256 #define STYLE_LIMIT 256
#define MAX_ZONES 64 #define MAX_ZONES 64
#define MAX_STAGES 51 // 😐 kind of arbitrary but also some space between this and MAX_ZONES #define MAX_STAGES 51 // 😐 kind of arbitrary but also some space between this and MAX_ZONES
@ -2137,10 +2137,10 @@ native bool Shavit_IsKZMap();
* Gets the map tier for a specified map. * Gets the map tier for a specified map.
* Use the map's display name. * Use the map's display name.
* *
* @param map Map to get the tier of. * @param map Map to get the tier of. Using "" will get the current map's tier.
* @return Map tier. 0 if no results were found. * @return Map tier. 0 if no results were found.
*/ */
native int Shavit_GetMapTier(const char[] map); native int Shavit_GetMapTier(const char[] map = "");
/** /**
* Gets a StringMap that contains all the cached map tiers. * Gets a StringMap that contains all the cached map tiers.

View File

@ -106,7 +106,6 @@ int gI_Cycle = 0;
color_t gI_Gradient; color_t gI_Gradient;
int gI_GradientDirection = -1; int gI_GradientDirection = -1;
int gI_Styles = 0; int gI_Styles = 0;
char gS_Map[160];
Handle gH_HUDCookie = null; Handle gH_HUDCookie = null;
Handle gH_HUDCookieMain = null; Handle gH_HUDCookieMain = null;
@ -274,6 +273,9 @@ public void OnPluginStart()
if(gB_Late) if(gB_Late)
{ {
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded();
for(int i = 1; i <= MaxClients; i++) for(int i = 1; i <= MaxClients; i++)
{ {
if(IsValidClient(i)) if(IsValidClient(i))
@ -289,19 +291,6 @@ public void OnPluginStart()
} }
} }
public void OnMapStart()
{
GetCurrentMap(gS_Map, 160);
GetMapDisplayName(gS_Map, gS_Map, 160);
if(gB_Late)
{
gB_Late = false;
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded();
}
}
public void OnLibraryAdded(const char[] name) public void OnLibraryAdded(const char[] name)
{ {
if(StrEqual(name, "shavit-replay")) if(StrEqual(name, "shavit-replay"))
@ -1094,7 +1083,7 @@ int AddHUDToBuffer_Source2013(int client, huddata_t data, char[] buffer, int max
{ {
if(gB_Rankings && (gI_HUD2Settings[client] & HUD2_MAPTIER) == 0) if(gB_Rankings && (gI_HUD2Settings[client] & HUD2_MAPTIER) == 0)
{ {
FormatEx(sLine, 128, "%T", "HudZoneTier", client, Shavit_GetMapTier(gS_Map)); FormatEx(sLine, 128, "%T", "HudZoneTier", client, Shavit_GetMapTier());
AddHUDLine(buffer, maxlen, sLine, iLines); AddHUDLine(buffer, maxlen, sLine, iLines);
iLines++; iLines++;
} }
@ -1304,7 +1293,7 @@ int AddHUDToBuffer_CSGO(int client, huddata_t data, char[] buffer, int maxlen)
{ {
if(data.iTrack == Track_Main) if(data.iTrack == Track_Main)
{ {
FormatEx(sZoneHUD, 32, "%T", "HudZoneTier", client, Shavit_GetMapTier(gS_Map)); FormatEx(sZoneHUD, 32, "%T", "HudZoneTier", client, Shavit_GetMapTier());
} }
else else

View File

@ -58,6 +58,12 @@ enum struct ranking_t
{ {
int iRank; int iRank;
float fPoints; float fPoints;
int iWRAmountAll;
int iWRAmountCvar;
int iWRHolderRankAll;
int iWRHolderRankCvar;
int iWRAmount[STYLE_LIMIT*2];
int iWRHolderRank[STYLE_LIMIT*2];
} }
char gS_MySQLPrefix[32]; char gS_MySQLPrefix[32];
@ -96,15 +102,9 @@ chatstrings_t gS_ChatStrings;
int gI_Styles = 0; int gI_Styles = 0;
bool gB_WRsRefreshed = false; bool gB_WRsRefreshed = false;
int gI_WRAmount[MAXPLAYERS+1][2][STYLE_LIMIT];
int gI_WRAmountAll[MAXPLAYERS+1];
int gI_WRAmountCvar[MAXPLAYERS+1];
int gI_WRHolders[2][STYLE_LIMIT]; int gI_WRHolders[2][STYLE_LIMIT];
int gI_WRHoldersAll; int gI_WRHoldersAll;
int gI_WRHoldersCvar; int gI_WRHoldersCvar;
int gI_WRHolderRank[MAXPLAYERS+1][2][STYLE_LIMIT];
int gI_WRHolderRankAll[MAXPLAYERS+1];
int gI_WRHolderRankCvar[MAXPLAYERS+1];
public Plugin myinfo = public Plugin myinfo =
{ {
@ -338,41 +338,19 @@ void RunLongFastQuery(bool &success, const char[] func, const char[] query, any
public void OnClientConnected(int client) public void OnClientConnected(int client)
{ {
if(IsFakeClient(client)) ranking_t empty_ranking;
{ gA_Rankings[client] = empty_ranking;
return;
}
gA_Rankings[client].iRank = 0;
gA_Rankings[client].fPoints = 0.0;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < gI_Styles; j++)
{
gI_WRAmount[client][i][j] = 0;
gI_WRHolderRank[client][i][j] = 0;
}
}
gI_WRAmountAll[client] = 0;
gI_WRAmountCvar[client] = 0;
gI_WRHolderRankAll[client] = 0;
gI_WRHolderRankCvar[client] = 0;
} }
public void OnClientPutInServer(int client) public void OnClientAuthorized(int client)
{
if (gB_WRsRefreshed)
{
UpdateWRs(client);
}
}
public void OnClientPostAdminCheck(int client)
{ {
if(!IsFakeClient(client)) if(!IsFakeClient(client))
{ {
if (gB_WRsRefreshed)
{
UpdateWRs(client);
}
UpdatePlayerRank(client, true); UpdatePlayerRank(client, true);
} }
} }
@ -573,22 +551,23 @@ public void SQL_GetWRs_Callback(Database db, DBResultSet results, const char[] e
if (type == 0) if (type == 0)
{ {
gI_WRAmount[client][track][style] = wrcount; int index = STYLE_LIMIT*track + style;
gI_WRHolderRank[client][track][style] = wrrank; gA_Rankings[client].iWRAmount[index] = wrcount;
gA_Rankings[client].iWRHolderRank[index] = wrrank;
} }
else if (type == 1) else if (type == 1)
{ {
gI_WRAmountAll[client] = wrcount; gA_Rankings[client].iWRAmountAll = wrcount;
gI_WRHolderRankAll[client] = wrrank; gA_Rankings[client].iWRHolderRankAll = wrcount;
} }
else if (type == 2) else if (type == 2)
{ {
gI_WRAmountCvar[client] = wrcount; gA_Rankings[client].iWRAmountCvar = wrcount;
gI_WRHolderRankCvar[client] = wrrank; gA_Rankings[client].iWRHolderRankCvar = wrrank;
} }
} }
if(gCV_MVPRankOnes.IntValue > 0 && gEV_Type != Engine_TF2) if (gCV_MVPRankOnes.IntValue > 0 && gEV_Type != Engine_TF2 && IsValidClient(client))
{ {
CS_SetMVPCount(client, Shavit_GetWRCount(client, -1, -1, true)); CS_SetMVPCount(client, Shavit_GetWRCount(client, -1, -1, true));
} }
@ -1221,11 +1200,11 @@ public int Native_GetWRCount(Handle handler, int numParams)
if (usecvars) if (usecvars)
{ {
return gI_WRAmountCvar[client]; return gA_Rankings[client].iWRAmountCvar;
} }
else if (track == -1 && style == -1) else if (track == -1 && style == -1)
{ {
return gI_WRAmountAll[client]; return gA_Rankings[client].iWRAmountAll;
} }
if (track > Track_Bonus) if (track > Track_Bonus)
@ -1233,7 +1212,7 @@ public int Native_GetWRCount(Handle handler, int numParams)
track = Track_Bonus; track = Track_Bonus;
} }
return gI_WRAmount[client][track][style]; return gA_Rankings[client].iWRAmount[STYLE_LIMIT*track + style];
} }
public int Native_GetWRHolders(Handle handler, int numParams) public int Native_GetWRHolders(Handle handler, int numParams)
@ -1268,11 +1247,11 @@ public int Native_GetWRHolderRank(Handle handler, int numParams)
if (usecvars) if (usecvars)
{ {
return gI_WRHolderRankCvar[client]; return gA_Rankings[client].iWRHolderRankCvar;
} }
else if (track == -1 && style == -1) else if (track == -1 && style == -1)
{ {
return gI_WRHolderRankAll[client]; return gA_Rankings[client].iWRHolderRankAll;
} }
if (track > Track_Bonus) if (track > Track_Bonus)
@ -1280,22 +1259,21 @@ public int Native_GetWRHolderRank(Handle handler, int numParams)
track = Track_Bonus; track = Track_Bonus;
} }
return gI_WRHolderRank[client][track][style]; return gA_Rankings[client].iWRHolderRank[STYLE_LIMIT*track + style];
} }
public int Native_GetMapTier(Handle handler, int numParams) public int Native_GetMapTier(Handle handler, int numParams)
{ {
int tier = 0; int tier = 0;
char sMap[PLATFORM_MAX_PATH];
GetNativeString(1, sMap, sizeof(sMap));
char sMap[128]; if (!sMap[0])
GetNativeString(1, sMap, 128);
if(!gA_MapTiers.GetValue(sMap, tier))
{ {
return 0; return gI_Tier;
} }
gA_MapTiers.GetValue(sMap, tier);
return tier; return tier;
} }

View File

@ -480,6 +480,12 @@ public void OnPluginStart()
LoadDHooks(); LoadDHooks();
CreateAllNavFiles(); CreateAllNavFiles();
if(gB_Late)
{
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded();
}
} }
void LoadDHooks() void LoadDHooks()
@ -1571,13 +1577,6 @@ public void OnMapStart()
SetFailState("Could not load the replay bots' configuration file. Make sure it exists (addons/sourcemod/configs/shavit-replay.cfg) and follows the proper syntax!"); SetFailState("Could not load the replay bots' configuration file. Make sure it exists (addons/sourcemod/configs/shavit-replay.cfg) and follows the proper syntax!");
} }
if(gB_Late)
{
gB_Late = false;
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded();
}
GetCurrentMap(gS_Map, 160); GetCurrentMap(gS_Map, 160);
bool bWorkshopWritten = WriteNavMesh(gS_Map); // write "maps/workshop/123123123/bhop_map.nav" bool bWorkshopWritten = WriteNavMesh(gS_Map); // write "maps/workshop/123123123/bhop_map.nav"
GetMapDisplayName(gS_Map, gS_Map, 160); GetMapDisplayName(gS_Map, gS_Map, 160);

View File

@ -113,7 +113,8 @@ public void OnPluginStart()
if(gB_Late) if(gB_Late)
{ {
gI_Styles = Shavit_GetStyleCount(); Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded();
for(int i = 1; i <= MaxClients; i++) for(int i = 1; i <= MaxClients; i++)
{ {
@ -125,16 +126,6 @@ public void OnPluginStart()
} }
} }
public void OnMapStart()
{
if(gB_Late)
{
gB_Late = false;
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded();
}
}
public void Shavit_OnStyleConfigLoaded(int styles) public void Shavit_OnStyleConfigLoaded(int styles)
{ {
for(int i = 0; i < styles; i++) for(int i = 0; i < styles; i++)

View File

@ -36,7 +36,6 @@ enum struct wrcache_t
int iLastStyle; int iLastStyle;
int iLastTrack; int iLastTrack;
bool bPendingMenu; bool bPendingMenu;
bool bLoadedCache;
char sClientMap[128]; char sClientMap[128];
float fWRs[STYLE_LIMIT]; float fWRs[STYLE_LIMIT];
} }
@ -75,6 +74,7 @@ int gI_WRRecordID[STYLE_LIMIT][TRACKS_SIZE];
int gI_WRSteamID[STYLE_LIMIT][TRACKS_SIZE]; int gI_WRSteamID[STYLE_LIMIT][TRACKS_SIZE];
StringMap gSM_WRNames = null; StringMap gSM_WRNames = null;
ArrayList gA_Leaderboard[STYLE_LIMIT][TRACKS_SIZE]; ArrayList gA_Leaderboard[STYLE_LIMIT][TRACKS_SIZE];
bool gB_LoadedCache[MAXPLAYERS+1];
float gF_PlayerRecord[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE]; float gF_PlayerRecord[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE];
int gI_PlayerCompletion[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE]; int gI_PlayerCompletion[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE];
@ -190,13 +190,15 @@ public void OnPluginStart()
if(gB_Late) if(gB_Late)
{ {
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded();
Shavit_OnDatabaseLoaded(); Shavit_OnDatabaseLoaded();
for(int i = 1; i <= MaxClients; i++) for(int i = 1; i <= MaxClients; i++)
{ {
if(IsValidClient(i)) if(IsValidClient(i))
{ {
OnClientPutInServer(i); OnClientConnected(i);
} }
} }
} }
@ -349,10 +351,12 @@ public void OnMapStart()
FormatEx(sQuery, 128, "SELECT map FROM %smapzones GROUP BY map;", gS_MySQLPrefix); FormatEx(sQuery, 128, "SELECT map FROM %smapzones GROUP BY map;", gS_MySQLPrefix);
gH_SQL.Query(SQL_UpdateMaps_Callback, sQuery, 0, DBPrio_Low); gH_SQL.Query(SQL_UpdateMaps_Callback, sQuery, 0, DBPrio_Low);
if (gI_Styles == 0) for(int i = 1; i <= MaxClients; i++)
{ {
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount()); if(IsValidClient(i) && IsClientAuthorized(i))
Shavit_OnChatConfigLoaded(); {
OnClientAuthorized(i, "");
}
} }
} }
@ -410,27 +414,28 @@ public void Shavit_OnChatConfigLoaded()
Shavit_GetChatStringsStruct(gS_ChatStrings); Shavit_GetChatStringsStruct(gS_ChatStrings);
} }
public void OnClientPutInServer(int client) public void OnClientConnected(int client)
{ {
gA_WRCache[client].bPendingMenu = false; wrcache_t empty_cache;
gA_WRCache[client].bLoadedCache = false; gA_WRCache[client] = empty_cache;
gB_LoadedCache[client] = false;
any empty_cells[TRACKS_SIZE];
for(int i = 0; i < gI_Styles; i++) for(int i = 0; i < gI_Styles; i++)
{ {
gA_WRCache[client].fWRs[i] = 0.0; gF_PlayerRecord[client][i] = empty_cells;
for(int j = 0; j < TRACKS_SIZE; j++) gI_PlayerCompletion[client][i] = empty_cells;
{
gF_PlayerRecord[client][i][j] = 0.0;
gI_PlayerCompletion[client][i][j] = 0;
}
} }
}
if(!IsClientConnected(client) || IsFakeClient(client)) public void OnClientAuthorized(int client)
{
if (!IsFakeClient(client))
{ {
return; UpdateClientCache(client);
} }
UpdateClientCache(client);
} }
void UpdateClientCache(int client) void UpdateClientCache(int client)
@ -478,7 +483,7 @@ public void SQL_UpdateCache_Callback(Database db, DBResultSet results, const cha
} }
gA_WRCache[client].bLoadedCache = true; gB_LoadedCache[client] = true;
} }
void UpdateWRCache(int client = -1) void UpdateWRCache(int client = -1)
@ -487,12 +492,12 @@ void UpdateWRCache(int client = -1)
{ {
for (int i = 1; i <= MaxClients; i++) for (int i = 1; i <= MaxClients; i++)
{ {
OnClientPutInServer(i); OnClientConnected(i);
} }
} }
else else
{ {
OnClientPutInServer(client); OnClientConnected(client);
} }
char sQuery[512]; char sQuery[512];
@ -598,7 +603,6 @@ public int Native_GetWorldRecord(Handle handler, int numParams)
public int Native_ReloadLeaderboards(Handle handler, int numParams) public int Native_ReloadLeaderboards(Handle handler, int numParams)
{ {
//UpdateLeaderboards(); // Called by UpdateWRCache->SQL_UpdateWRCache_Callback
UpdateWRCache(); UpdateWRCache();
} }
@ -2223,7 +2227,7 @@ public void Trans_CreateTable_Error(Database db, any data, int numQueries, const
public void Shavit_OnFinish(int client, int style, float time, int jumps, int strafes, float sync, int track, float oldtime, float perfs, float avgvel, float maxvel, int timestamp) public void Shavit_OnFinish(int client, int style, float time, int jumps, int strafes, float sync, int track, float oldtime, float perfs, float avgvel, float maxvel, int timestamp)
{ {
// do not risk overwriting the player's data if their PB isn't loaded to cache yet // do not risk overwriting the player's data if their PB isn't loaded to cache yet
if(!gA_WRCache[client].bLoadedCache) if (!gB_LoadedCache[client])
{ {
return; return;
} }
@ -2503,6 +2507,7 @@ public void SQL_OnFinish_Callback(Database db, DBResultSet results, const char[]
return; return;
} }
#if 0
int client = GetClientFromSerial(data); int client = GetClientFromSerial(data);
if(client == 0) if(client == 0)
@ -2511,6 +2516,7 @@ public void SQL_OnFinish_Callback(Database db, DBResultSet results, const char[]
} }
UpdateWRCache(client); UpdateWRCache(client);
#endif
} }
public void Trans_ReplaceStageTimes_Success(Database db, any data, int numQueries, DBResultSet[] results, any[] queryData) public void Trans_ReplaceStageTimes_Success(Database db, any data, int numQueries, DBResultSet[] results, any[] queryData)

View File

@ -96,34 +96,32 @@ enum
ZF_ForceRender = (1 << 0) ZF_ForceRender = (1 << 0)
}; };
int gI_ZoneType[MAXPLAYERS+1];
// 0 - nothing // 0 - nothing
// 1 - wait for E tap to setup first coord // 1 - wait for E tap to setup first coord
// 2 - wait for E tap to setup second coord // 2 - wait for E tap to setup second coord
// 3 - confirm // 3 - confirm
int gI_MapStep[MAXPLAYERS+1]; int gI_MapStep[MAXPLAYERS+1];
float gF_Modifier[MAXPLAYERS+1];
int gI_GridSnap[MAXPLAYERS+1];
bool gB_SnapToWall[MAXPLAYERS+1];
bool gB_CursorTracing[MAXPLAYERS+1];
int gI_ZoneFlags[MAXPLAYERS+1]; int gI_ZoneFlags[MAXPLAYERS+1];
int gI_ZoneData[MAXPLAYERS+1]; int gI_ZoneData[MAXPLAYERS+1];
int gI_ZoneTrack[MAXPLAYERS+1];
int gI_ZoneType[MAXPLAYERS+1];
int gI_ZoneDatabaseID[MAXPLAYERS+1];
int gI_ZoneID[MAXPLAYERS+1];
bool gB_WaitingForChatInput[MAXPLAYERS+1]; bool gB_WaitingForChatInput[MAXPLAYERS+1];
// cache
float gV_Point1[MAXPLAYERS+1][3]; float gV_Point1[MAXPLAYERS+1][3];
float gV_Point2[MAXPLAYERS+1][3]; float gV_Point2[MAXPLAYERS+1][3];
float gV_Teleport[MAXPLAYERS+1][3]; float gV_Teleport[MAXPLAYERS+1][3];
float gV_WallSnap[MAXPLAYERS+1][3]; float gV_WallSnap[MAXPLAYERS+1][3];
bool gB_Button[MAXPLAYERS+1]; bool gB_Button[MAXPLAYERS+1];
float gF_Modifier[MAXPLAYERS+1];
int gI_GridSnap[MAXPLAYERS+1];
bool gB_SnapToWall[MAXPLAYERS+1];
bool gB_CursorTracing[MAXPLAYERS+1];
// player zone status
bool gB_InsideZone[MAXPLAYERS+1][ZONETYPES_SIZE][TRACKS_SIZE]; bool gB_InsideZone[MAXPLAYERS+1][ZONETYPES_SIZE][TRACKS_SIZE];
bool gB_InsideZoneID[MAXPLAYERS+1][MAX_ZONES]; bool gB_InsideZoneID[MAXPLAYERS+1][MAX_ZONES];
float gF_CustomSpawn[TRACKS_SIZE][3];
int gI_ZoneTrack[MAXPLAYERS+1];
int gI_ZoneDatabaseID[MAXPLAYERS+1];
int gI_ZoneID[MAXPLAYERS+1];
// zone cache // zone cache
zone_settings_t gA_ZoneSettings[ZONETYPES_SIZE][TRACKS_SIZE]; zone_settings_t gA_ZoneSettings[ZONETYPES_SIZE][TRACKS_SIZE];
@ -135,8 +133,8 @@ float gV_Destinations[MAX_ZONES][3];
float gV_ZoneCenter[MAX_ZONES][3]; float gV_ZoneCenter[MAX_ZONES][3];
int gI_StageZoneID[TRACKS_SIZE][MAX_ZONES]; int gI_StageZoneID[TRACKS_SIZE][MAX_ZONES];
int gI_HighestStage[TRACKS_SIZE]; int gI_HighestStage[TRACKS_SIZE];
float gF_CustomSpawn[TRACKS_SIZE][3];
int gI_EntityZone[4096]; int gI_EntityZone[4096];
bool gB_ZonesCreated = false;
int gI_LastStage[MAXPLAYERS+1]; int gI_LastStage[MAXPLAYERS+1];
char gS_BeamSprite[PLATFORM_MAX_PATH]; char gS_BeamSprite[PLATFORM_MAX_PATH];
@ -332,11 +330,15 @@ public void OnPluginStart()
{ {
if(IsClientConnected(i) && IsClientInGame(i)) if(IsClientConnected(i) && IsClientInGame(i))
{ {
OnClientPutInServer(i); OnClientConnected(i);
} }
} }
SQL_DBConnect(); if (gB_Late)
{
Shavit_OnChatConfigLoaded();
Shavit_OnDatabaseLoaded();
}
} }
public void OnAllPluginsLoaded() public void OnAllPluginsLoaded()
@ -799,12 +801,6 @@ public void OnMapStart()
gH_DrawEverything = CreateTimer(gCV_Interval.FloatValue, Timer_DrawEverything, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); gH_DrawEverything = CreateTimer(gCV_Interval.FloatValue, Timer_DrawEverything, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
} }
if(gB_Late)
{
gB_Late = false;
Shavit_OnChatConfigLoaded();
}
for(int i = 1; i <= MaxClients; i++) for(int i = 1; i <= MaxClients; i++)
{ {
if(IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i)) if(IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i))
@ -1033,8 +1029,6 @@ public void Frame_HookTrigger(any data)
SDKHook(entity, SDKHook_StartTouchPost, StartTouchPost); SDKHook(entity, SDKHook_StartTouchPost, StartTouchPost);
SDKHook(entity, SDKHook_EndTouchPost, EndTouchPost); SDKHook(entity, SDKHook_EndTouchPost, EndTouchPost);
SDKHook(entity, SDKHook_TouchPost, TouchPost); SDKHook(entity, SDKHook_TouchPost, TouchPost);
gB_ZonesCreated = true;
} }
} }
@ -1209,36 +1203,26 @@ public void AddZoneToCache(int type, float corner1_x, float corner1_y, float cor
gI_MapZones++; gI_MapZones++;
} }
public void OnClientPutInServer(int client) public void OnClientConnected(int client)
{ {
for(int i = 0; i < TRACKS_SIZE; i++) bool empty_InsideZone[TRACKS_SIZE];
for (int i = 0; i < ZONETYPES_SIZE; i++)
{ {
for(int j = 0; j < ZONETYPES_SIZE; j++) gB_InsideZone[client][i] = empty_InsideZone;
{
gB_InsideZone[client][j][i] = false;
}
for(int j = 0; j < 3; j++)
{
gF_ClimbButtonCache[client][i][0][j] = 0.0;
gF_ClimbButtonCache[client][i][1][j] = 0.0;
}
gF_StartPos[client][i] = view_as<float>({0.0, 0.0, 0.0});
gF_StartAng[client][i] = view_as<float>({0.0, 0.0, 0.0});
gB_HasSetStart[client][i] = false;
} }
for(int i = 0; i < MAX_ZONES; i++) bool empty_InsideZoneID[MAX_ZONES];
gB_InsideZoneID[client] = empty_InsideZoneID;
for (int i = 0; i < TRACKS_SIZE; i++)
{ {
gB_InsideZoneID[client][i] = false; gF_ClimbButtonCache[client][i][0] = NULL_VECTOR;
gF_ClimbButtonCache[client][i][1] = NULL_VECTOR;
} }
if (gB_Connected && !IsFakeClient(client)) bool empty_HasSetStart[TRACKS_SIZE];
{ gB_HasSetStart[client] = empty_HasSetStart;
GetStartPosition(client);
}
Reset(client); Reset(client);
@ -1248,6 +1232,14 @@ public void OnClientPutInServer(int client)
gB_CursorTracing[client] = true; gB_CursorTracing[client] = true;
} }
public void OnClientAuthorized(int client)
{
if (gB_Connected && !IsFakeClient(client))
{
GetStartPosition(client);
}
}
void GetStartPosition(int client) void GetStartPosition(int client)
{ {
int steamID = GetSteamAccountID(client); int steamID = GetSteamAccountID(client);
@ -1295,7 +1287,6 @@ public void SQL_GetStartPosition_Callback(Database db, DBResultSet results, cons
gB_StartAnglesOnly[client][track] = results.FetchInt(7) > 0; gB_StartAnglesOnly[client][track] = results.FetchInt(7) > 0;
gB_HasSetStart[client][track] = true; gB_HasSetStart[client][track] = true;
} }
} }
@ -1310,7 +1301,7 @@ public Action Command_SetStart(int client, int args)
int track = Shavit_GetClientTrack(client); int track = Shavit_GetClientTrack(client);
if(!gB_ZonesCreated || !InsideZone(client, Zone_Start, track)) if(!InsideZone(client, Zone_Start, track))
{ {
Shavit_PrintToChat(client, "%T", "SetStartNotInStartZone", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, gS_ChatStrings.sText); Shavit_PrintToChat(client, "%T", "SetStartNotInStartZone", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, gS_ChatStrings.sText);
@ -2268,13 +2259,10 @@ void Reset(int client)
gB_WaitingForChatInput[client] = false; gB_WaitingForChatInput[client] = false;
gI_ZoneID[client] = -1; gI_ZoneID[client] = -1;
for(int i = 0; i < 3; i++) gV_Point1[client] = NULL_VECTOR;
{ gV_Point2[client] = NULL_VECTOR;
gV_Point1[client][i] = 0.0; gV_Teleport[client] = NULL_VECTOR;
gV_Point2[client][i] = 0.0; gV_WallSnap[client] = NULL_VECTOR;
gV_Teleport[client][i] = 0.0;
gV_WallSnap[client][i] = 0.0;
}
} }
void ShowPanel(int client, int step) void ShowPanel(int client, int step)
@ -3154,7 +3142,7 @@ void CreateZonePoints(float point[8][3], float offset = 0.0)
} }
} }
void SQL_DBConnect() public void Shavit_OnDatabaseLoaded()
{ {
GetTimerSQLPrefix(gS_MySQLPrefix, 32); GetTimerSQLPrefix(gS_MySQLPrefix, 32);
gH_SQL = GetTimerDatabaseHandle(); gH_SQL = GetTimerDatabaseHandle();
@ -3292,22 +3280,17 @@ public void Round_Start(Event event, const char[] name, bool dontBroadcast)
gI_KZButtons[i][1] = -1; gI_KZButtons[i][1] = -1;
} }
gB_ZonesCreated = false; bool empty_InsideZone[TRACKS_SIZE];
for (int i = 0; i <= MaxClients; i++) for (int i = 0; i <= MaxClients; i++)
{ {
for (int j = 0; j < ZONETYPES_SIZE; j++) for (int j = 0; j < ZONETYPES_SIZE; j++)
{ {
for (int k = 0; k < TRACKS_SIZE; k++) gB_InsideZone[i][j] = empty_InsideZone;
{
gB_InsideZone[i][j][k] = false;
}
} }
for (int x = 0; x < MAX_ZONES; x++) bool empty_InsideZoneID[MAX_ZONES];
{ gB_InsideZoneID[i] = empty_InsideZoneID;
gB_InsideZoneID[i][x] = false;
}
} }
RequestFrame(CreateZoneEntities); RequestFrame(CreateZoneEntities);
@ -3407,8 +3390,6 @@ public void CreateZoneEntities()
char sTargetname[32]; char sTargetname[32];
FormatEx(sTargetname, 32, "shavit_zones_%d_%d", gA_ZoneCache[i].iZoneTrack, gA_ZoneCache[i].iZoneType); FormatEx(sTargetname, 32, "shavit_zones_%d_%d", gA_ZoneCache[i].iZoneTrack, gA_ZoneCache[i].iZoneType);
DispatchKeyValue(entity, "targetname", sTargetname); DispatchKeyValue(entity, "targetname", sTargetname);
gB_ZonesCreated = true;
} }
} }