From da6d417d5d81a360000a347ff17ae0670845218b Mon Sep 17 00:00:00 2001 From: connorr Date: Wed, 31 Jul 2013 20:18:55 +0200 Subject: [PATCH] Fix last mapcycle issue and apply general optimizations in nextmap plugin (bug 5817, r=arkshine) Former-commit-id: 9b5c7afc0048f6fc8830bc5475cbe60d4230f7ef --- plugins/nextmap.sma | 82 +++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 36 deletions(-) diff --git a/plugins/nextmap.sma b/plugins/nextmap.sma index 5f9c7f50..0e3c845f 100755 --- a/plugins/nextmap.sma +++ b/plugins/nextmap.sma @@ -42,6 +42,11 @@ new g_nextMap[32] new g_mapCycle[32] new g_pos +new g_currentMap[32] + +// pcvars +new g_mp_friendlyfire, g_mp_chattime +new g_amx_nextmap public plugin_init() { @@ -50,32 +55,42 @@ public plugin_init() register_event("30", "changeMap", "a") register_clcmd("say nextmap", "sayNextMap", 0, "- displays nextmap") register_clcmd("say currentmap", "sayCurrentMap", 0, "- display current map") - register_clcmd("say ff", "sayFFStatus", 0, "- display friendly fire status") - register_cvar("amx_nextmap", "", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY) - new szString[32], szString2[32], szString3[8] + g_amx_nextmap = register_cvar("amx_nextmap", "", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY) + g_mp_chattime = get_cvar_pointer("mp_chattime") + g_mp_friendlyfire = get_cvar_pointer("mp_friendlyfire") + if( g_mp_friendlyfire ) + { + register_clcmd("say ff", "sayFFStatus", 0, "- display friendly fire status") + } + + get_mapname(g_currentMap, charsmax(g_currentMap)) + + new szString[40], szString2[32], szString3[8] - get_localinfo("lastmapcycle", szString, 31) - parse(szString, szString2, 31, szString3, 7) - g_pos = str_to_num(szString3) - get_cvar_string("mapcyclefile", g_mapCycle, 31) + get_localinfo("lastmapcycle", szString, charsmax(szString)) + parse(szString, szString2, charsmax(szString2), szString3, charsmax(szString3)) + + get_cvar_string("mapcyclefile", g_mapCycle, charsmax(g_mapCycle)) if (!equal(g_mapCycle, szString2)) g_pos = 0 // mapcyclefile has been changed - go from first + else + g_pos = str_to_num(szString3) - readMapCycle(g_mapCycle, g_nextMap, 31) - set_cvar_string("amx_nextmap", g_nextMap) - format(szString3, 31, "%s %d", g_mapCycle, g_pos) // save lastmapcycle settings - set_localinfo("lastmapcycle", szString3) + readMapCycle(g_mapCycle, g_nextMap, charsmax(g_nextMap)) + set_pcvar_string(g_amx_nextmap, g_nextMap) + formatex(szString, charsmax(szString), "%s %d", g_mapCycle, g_pos) // save lastmapcycle settings + set_localinfo("lastmapcycle", szString) } getNextMapName(szArg[], iMax) { - new len = get_cvar_string("amx_nextmap", szArg, iMax) + new len = get_pcvar_string(g_amx_nextmap, szArg, iMax) if (ValidMap(szArg)) return len len = copy(szArg, iMax, g_nextMap) - set_cvar_string("amx_nextmap", g_nextMap) + set_pcvar_string(g_amx_nextmap, g_nextMap) return len } @@ -84,36 +99,33 @@ public sayNextMap() { new name[32] - getNextMapName(name, 31) + getNextMapName(name, charsmax(name)) client_print(0, print_chat, "%L %s", LANG_PLAYER, "NEXT_MAP", name) } public sayCurrentMap() { - new mapname[32] - - get_mapname(mapname, 31) - client_print(0, print_chat, "%L: %s", LANG_PLAYER, "PLAYED_MAP", mapname) + client_print(0, print_chat, "%L: %s", LANG_PLAYER, "PLAYED_MAP", g_currentMap) } public sayFFStatus() { - client_print(0, print_chat, "%L: %L", LANG_PLAYER, "FRIEND_FIRE", LANG_PLAYER, get_cvar_num("mp_friendlyfire") ? "ON" : "OFF") + client_print(0, print_chat, "%L: %L", LANG_PLAYER, "FRIEND_FIRE", LANG_PLAYER, get_pcvar_num(g_mp_friendlyfire) ? "ON" : "OFF") } public delayedChange(param[]) { - set_cvar_float("mp_chattime", get_cvar_float("mp_chattime") - 2.0) + set_pcvar_float(g_mp_chattime, get_pcvar_float(g_mp_chattime) - 2.0) server_cmd("changelevel %s", param) } public changeMap() { new string[32] - new Float:chattime = get_cvar_float("mp_chattime") + new Float:chattime = get_pcvar_float(g_mp_chattime) - set_cvar_float("mp_chattime", chattime + 2.0) // make sure mp_chattime is long - new len = getNextMapName(string, 31) + 1 + set_pcvar_float(g_mp_chattime, chattime + 2.0) // make sure mp_chattime is long + new len = getNextMapName(string, charsmax(string)) + 1 set_task(chattime, "delayedChange", 0, string, len) // change with 1.5 sec. delay } @@ -157,12 +169,12 @@ readMapCycle(szFileName[], szNext[], iNext) if (file_exists(szFileName)) { - while (read_file(szFileName, i++, szBuffer, 31, b)) + while (read_file(szFileName, i++, szBuffer, charsmax(szBuffer), b)) { if (!isalnum(szBuffer[0]) || !ValidMap(szBuffer)) continue if (!iMaps) - copy(szFirst, 31, szBuffer) + copy(szFirst, charsmax(szFirst), szBuffer) if (++iMaps > g_pos) { @@ -176,10 +188,10 @@ readMapCycle(szFileName[], szNext[], iNext) if (!iMaps) { log_amx(g_warning, szFileName) - get_mapname(szFirst, 31) + copy(szNext, iNext, g_currentMap) } - - copy(szNext, iNext, szFirst) + else + copy(szNext, iNext, szFirst) g_pos = 1 } @@ -188,33 +200,31 @@ readMapCycle(szFileName[], szNext[], iNext) readMapCycle(szFileName[], szNext[], iNext) { new b, i = 0, iMaps = 0 - new szBuffer[32], szFirst[32], szCurrent[32] - - get_mapname(szCurrent, 31) + new szBuffer[32], szFirst[32] new a = g_pos if (file_exists(szFileName)) { - while (read_file(szFileName, i++, szBuffer, 31, b)) + while (read_file(szFileName, i++, szBuffer, charsmax(szBuffer), b)) { if (!isalnum(szBuffer[0]) || !ValidMap(szBuffer)) continue if (!iMaps) { iMaps = 1 - copy(szFirst, 31, szBuffer) + copy(szFirst, charsmax(szFirst), szBuffer) } if (iMaps == 1) { - if (equali(szCurrent, szBuffer)) + if (equali(g_currentMap, szBuffer)) { if (a-- == 0) iMaps = 2 } } else { - if (equali(szCurrent, szBuffer)) + if (equali(g_currentMap, szBuffer)) ++g_pos else g_pos = 0 @@ -228,7 +238,7 @@ readMapCycle(szFileName[], szNext[], iNext) if (!iMaps) { log_amx(g_warning, szFileName) - copy(szNext, iNext, szCurrent) + copy(szNext, iNext, g_currentMap) } else copy(szNext, iNext, szFirst)