From 00e7bfbb08a3c68e6a7a7af793d3a17090b1865d Mon Sep 17 00:00:00 2001 From: shavitush Date: Sat, 10 Sep 2016 17:05:45 +0300 Subject: [PATCH] Fix compilation for shavit-replay --- scripting/shavit-replay.sp | 82 +++++++++++++++++++++++++------------- scripting/shavit-stats.sp | 2 +- 2 files changed, 55 insertions(+), 29 deletions(-) diff --git a/scripting/shavit-replay.sp b/scripting/shavit-replay.sp index 367958aa..851861ba 100644 --- a/scripting/shavit-replay.sp +++ b/scripting/shavit-replay.sp @@ -36,17 +36,19 @@ EngineVersion gEV_Type = Engine_Unknown; // cache -int gI_ReplayTick[MAX_STYLES]; -int gI_ReplayBotClient[MAX_STYLES]; -ArrayList gA_Frames[MAX_STYLES] = {null, ...}; -float gF_StartTick[MAX_STYLES]; -ReplayStatus gRS_ReplayStatus[MAX_STYLES]; -int gI_FrameCount[MAX_STYLES]; +int gI_ReplayTick[STYLE_LIMIT]; +int gI_ReplayBotClient[STYLE_LIMIT]; +ArrayList gA_Frames[STYLE_LIMIT] = {null, ...}; +float gF_StartTick[STYLE_LIMIT]; +ReplayStatus gRS_ReplayStatus[STYLE_LIMIT]; +int gI_FrameCount[STYLE_LIMIT]; int gI_PlayerFrames[MAXPLAYERS+1]; ArrayList gA_PlayerFrames[MAXPLAYERS+1]; bool gB_Record[MAXPLAYERS+1]; +bool gB_Late = false; + // server specific float gF_Tickrate = 0.0; char gS_Map[256]; @@ -69,6 +71,11 @@ float gF_ReplayDelay = 5.0; float gF_TimeLimit = 5400.0; int gI_NameStyle = 1; +// timer settings +int gI_Styles = 0; +char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128]; +any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE]; + public Plugin myinfo = { name = "[shavit] Replay Bot", @@ -88,6 +95,8 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max // registers library, check "bool LibraryExists(const char[] name)" in order to use with other plugins RegPluginLibrary("shavit-replay"); + gB_Late = late; + return APLRes_Success; } @@ -180,9 +189,9 @@ public Action Cron(Handle Timer) // clear player cache if time is worse than wr // might cause issues if WR time is removed and someone else gets a new WR - float[] fWRTimes = new float[MAX_STYLES]; + float[] fWRTimes = new float[gI_Styles]; - for(int i = 0; i < MAX_STYLES; i++) + for(int i = 0; i < gI_Styles; i++) { Shavit_GetWRTime(view_as(i), fWRTimes[i]); @@ -234,6 +243,11 @@ public Action HookTriggers(int entity, int other) public void OnMapStart() { + if(gB_Late) + { + Shavit_OnStyleConfigLoaded(-1); + } + if(!gB_Enabled) { return; @@ -299,7 +313,7 @@ public void OnMapStart() CreateDirectory(sPath, 511); } - for(int i = 0; i < MAX_STYLES; i++) + for(int i = 0; i < gI_Styles; i++) { gA_Frames[i] = new ArrayList(6); @@ -336,6 +350,23 @@ public void OnMapStart() CreateTimer(1.0, Cron, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); } +public void Shavit_OnStyleConfigLoaded(int styles) +{ + if(styles == -1) + { + styles = Shavit_GetStyleCount(); + } + + for(int i = 0; i < styles; i++) + { + Shavit_GetStyleSettings(view_as(i), gA_StyleSettings[i]); + Shavit_GetStyleStrings(view_as(i), sStyleName, gS_StyleStrings[i][sStyleName], 128); + Shavit_GetStyleStrings(view_as(i), sShortName, gS_StyleStrings[i][sShortName], 128); + } + + gI_Styles = styles; +} + public bool LoadReplay(BhopStyle style) { if(!ReplayEnabled(style)) @@ -502,7 +533,7 @@ public void OnClientPutInServer(int client) else { - for(int i = 0; i < MAX_STYLES; i++) + for(int i = 0; i < gI_Styles; i++) { if(ReplayEnabled(i) && gI_ReplayBotClient[i] == 0) { @@ -542,7 +573,7 @@ public void UpdateReplayInfo(int client, BhopStyle style, float time) { if(gI_FrameCount[style] == 0) { - FormatEx(sName, MAX_NAME_LENGTH, "[%s] unloaded", gS_ShortBhopStyles[style]); + FormatEx(sName, MAX_NAME_LENGTH, "[%s] unloaded", gS_StyleStrings[style][sShortName]); } else @@ -550,7 +581,7 @@ public void UpdateReplayInfo(int client, BhopStyle style, float time) char[] sWRName = new char[MAX_NAME_LENGTH]; Shavit_GetWRName(style, sWRName, MAX_NAME_LENGTH); - FormatEx(sName, MAX_NAME_LENGTH, "[%s] %s - %s", gS_ShortBhopStyles[style], sWRName, sTime); + FormatEx(sName, MAX_NAME_LENGTH, "[%s] %s - %s", gS_StyleStrings[style][sShortName], sWRName, sTime); } } @@ -558,12 +589,12 @@ public void UpdateReplayInfo(int client, BhopStyle style, float time) { if(gI_FrameCount[style] == 0) { - FormatEx(sName, MAX_NAME_LENGTH, "%s - N/A", gS_BhopStyles[style]); + FormatEx(sName, MAX_NAME_LENGTH, "%s - N/A", gS_StyleStrings[style][sStyleName]); } else { - FormatEx(sName, MAX_NAME_LENGTH, "%s - %s", gS_BhopStyles[style], sTime); + FormatEx(sName, MAX_NAME_LENGTH, "%s - %s", gS_StyleStrings[style][sStyleName], sTime); } } } @@ -616,7 +647,7 @@ public void OnClientDisconnect(int client) return; } - for(int i = 0; i < MAX_STYLES; i++) + for(int i = 0; i < gI_Styles; i++) { if(client == gI_ReplayBotClient[i]) { @@ -824,12 +855,7 @@ public Action StartReplay(Handle Timer, any data) public bool ReplayEnabled(any style) { - if((gI_StyleProperties[style] & STYLE_UNRANKED) > 0 || (gI_StyleProperties[style] & STYLE_NOREPLAY) > 0) - { - return false; - } - - return true; + return (!gA_StyleSettings[style][bUnranked] && !gA_StyleSettings[style][bNoReplay]); } public void Player_Event(Event event, const char[] name, bool dontBroadcast) @@ -952,7 +978,7 @@ public Action Command_DeleteReplay(int client, int args) Menu m = new Menu(DeleteReplay_Callback); m.SetTitle("Delete a replay:"); - for(int i = 0; i < MAX_STYLES; i++) + for(int i = 0; i < gI_Styles; i++) { if(!ReplayEnabled(i) || gI_FrameCount[i] == 0) { @@ -962,7 +988,7 @@ public Action Command_DeleteReplay(int client, int args) char[] sInfo = new char[4]; IntToString(i, sInfo, 4); - m.AddItem(sInfo, gS_BhopStyles[i]); + m.AddItem(sInfo, gS_StyleStrings[i][sStyleName]); } if(m.ItemCount == 0) @@ -990,7 +1016,7 @@ public int DeleteReplay_Callback(Menu m, MenuAction action, int param1, int para } Menu submenu = new Menu(DeleteConfirmation_Callback); - submenu.SetTitle("Confirm deletion of %s replay?", gS_BhopStyles[style]); + submenu.SetTitle("Confirm deletion of %s replay?", gS_StyleStrings[style][sStyleName]); for(int i = 1; i <= GetRandomInt(2, 4); i++) { @@ -1026,14 +1052,14 @@ public int DeleteConfirmation_Callback(Menu m, MenuAction action, int param1, in if(DeleteReplay(style)) { - LogAction(param1, param1, "Deleted replay for %s on map %s.", gS_BhopStyles[style], gS_Map); + LogAction(param1, param1, "Deleted replay for %s on map %s.", gS_StyleStrings[style][sStyleName], gS_Map); - Shavit_PrintToChat(param1, "Deleted replay for \x05%s\x01.", gS_BhopStyles[style]); + Shavit_PrintToChat(param1, "Deleted replay for \x05%s\x01.", gS_StyleStrings[style][sStyleName]); } else { - Shavit_PrintToChat(param1, "Could not delete replay for \x05%s\x01.", gS_BhopStyles[style]); + Shavit_PrintToChat(param1, "Could not delete replay for \x05%s\x01.", gS_StyleStrings[style][sStyleName]); } } @@ -1047,7 +1073,7 @@ public int DeleteConfirmation_Callback(Menu m, MenuAction action, int param1, in public BhopStyle GetReplayStyle(int client) { - for(int i = 0; i < MAX_STYLES; i++) + for(int i = 0; i < gI_Styles; i++) { if(gI_ReplayBotClient[i] == client) { diff --git a/scripting/shavit-stats.sp b/scripting/shavit-stats.sp index 4a4ac229..9ef1e6f8 100644 --- a/scripting/shavit-stats.sp +++ b/scripting/shavit-stats.sp @@ -191,7 +191,7 @@ public void Player_Event(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); - if(IsValidClient(client)) + if(IsValidClient(client) && !IsFakeClient(client)) { UpdateWRs(client); }