diff --git a/mapchooser_extended/configs/mapchooser_extended/cooldowns.cfg b/mapchooser_extended/configs/mapchooser_extended/cooldowns.cfg new file mode 100644 index 00000000..67409091 --- /dev/null +++ b/mapchooser_extended/configs/mapchooser_extended/cooldowns.cfg @@ -0,0 +1,3 @@ +"mapchooser_extended" +{ +} \ No newline at end of file diff --git a/mapchooser_extended/scripting/mapchooser_extended.sp b/mapchooser_extended/scripting/mapchooser_extended.sp index 9561984d..0af06bbb 100644 --- a/mapchooser_extended/scripting/mapchooser_extended.sp +++ b/mapchooser_extended/scripting/mapchooser_extended.sp @@ -373,6 +373,7 @@ public void OnPluginStart() g_MapVoteWarningTickForward = CreateGlobalForward("OnMapVoteWarningTick", ET_Ignore, Param_Cell); g_MapVoteRunoffStartForward = CreateGlobalForward("OnMapVoteRunnoffWarningStart", ET_Ignore); + InternalRestoreMapCooldowns(); } public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) @@ -548,6 +549,7 @@ public void OnMapEnd() else g_OldMapList.Remove(map); } + InternalStoreMapCooldowns(); delete OldMapListSnapshot; } @@ -2110,6 +2112,7 @@ public int Native_ExcludeMap(Handle plugin, int numParams) } g_OldMapList.SetValue(map, Cooldown, true); + InternalStoreMapCooldowns(); return true; } @@ -2590,3 +2593,121 @@ stock int FindIntInArray(int[] array, int size, int value) return -1; } + +stock void InternalRestoreMapCooldowns() +{ + char sCooldownFile[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, sCooldownFile, sizeof(sCooldownFile), "configs/mapchooser_extended/cooldowns.cfg"); + + if(!FileExists(sCooldownFile)) + { + LogMessage("Could not find cooldown file: \"%s\"", sCooldownFile); + return; + } + + KeyValues Cooldowns = new KeyValues("mapchooser_extended"); + + if(!Cooldowns.ImportFromFile(sCooldownFile)) + { + LogMessage("Unable to load cooldown file: \"%s\"", sCooldownFile); + delete Cooldowns; + return; + } + + if(!Cooldowns.GotoFirstSubKey(true)) + { + LogMessage("Unable to goto first sub key: \"%s\"", sCooldownFile); + delete Cooldowns; + return; + } + + int Cooldown; + char map[PLATFORM_MAX_PATH]; + do + { + if(!Cooldowns.GetSectionName(map, sizeof(map))) + { + LogMessage("Unable to get section name: \"%s\"", sCooldownFile); + delete Cooldowns; + return; + } + + if((Cooldown = Cooldowns.GetNum("cd", -1)) > 0) + { + LogMessage("Restored cooldown: %s -> %d", map, Cooldown); + g_OldMapList.SetValue(map, Cooldown, true); + } + } while(Cooldowns.GotoNextKey(true)); + + delete Cooldowns; +} + +stock void InternalStoreMapCooldowns() +{ + char sCooldownFile[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, sCooldownFile, sizeof(sCooldownFile), "configs/mapchooser_extended/cooldowns.cfg"); + + if(!FileExists(sCooldownFile)) + { + LogMessage("Could not find cooldown file: \"%s\"", sCooldownFile); + return; + } + + KeyValues Cooldowns = new KeyValues("mapchooser_extended"); + if(!Cooldowns.ImportFromFile(sCooldownFile)) + { + LogMessage("Unable to import cooldown file: \"%s\"", sCooldownFile); + delete Cooldowns; + return; + } + Cooldowns.Rewind(); + if (Cooldowns.GotoFirstSubKey()) + { + for (;;) + { + if (Cooldowns.DeleteThis() < 1) + break; + } + + if(!Cooldowns.ExportToFile(sCooldownFile)) + { + LogMessage("Unable to export cooldown file: \"%s\"", sCooldownFile); + delete Cooldowns; + return; + } + } + delete Cooldowns; + + Cooldowns = new KeyValues("mapchooser_extended"); + Cooldowns.Rewind(); + int Cooldown; + char map[PLATFORM_MAX_PATH]; + + StringMapSnapshot OldMapListSnapshot = g_OldMapList.Snapshot(); + for(int i = 0; i < OldMapListSnapshot.Length; i++) + { + OldMapListSnapshot.GetKey(i, map, sizeof(map)); + g_OldMapList.GetValue(map, Cooldown); + + if (!Cooldowns.JumpToKey(map, true)) + { + LogMessage("Unable to create/find key: %s", map); + delete Cooldowns; + delete OldMapListSnapshot; + return; + } + Cooldowns.SetNum("cd", Cooldown); + Cooldowns.Rewind(); + } + + if(!Cooldowns.ExportToFile(sCooldownFile)) + { + LogMessage("Unable to export cooldown file: \"%s\"", sCooldownFile); + delete Cooldowns; + delete OldMapListSnapshot; + return; + } + + delete Cooldowns; + delete OldMapListSnapshot; +} \ No newline at end of file