diff --git a/plugins/basetriggers.sp b/plugins/basetriggers.sp index d141fdc1..6aca4db9 100644 --- a/plugins/basetriggers.sp +++ b/plugins/basetriggers.sp @@ -50,6 +50,10 @@ new Handle:g_Cvar_FriendlyFire = INVALID_HANDLE; new Handle:g_Timer_TimeShow = INVALID_HANDLE; +new Handle:g_Cvar_WinLimit = INVALID_HANDLE; +new Handle:g_Cvar_FragLimit = INVALID_HANDLE; +new Handle:g_Cvar_MaxRounds = INVALID_HANDLE; + public OnPluginStart() { LoadTranslations("common.phrases"); @@ -62,7 +66,14 @@ public OnPluginStart() RegConsoleCmd("say", Command_Say); RegConsoleCmd("say_team", Command_Say); + RegConsoleCmd("timeleft", Command_Timeleft); + HookConVarChange(g_Cvar_TimeleftInterval, ConVarChange_TimeleftInterval); + + + g_Cvar_WinLimit = FindConVar("mp_winlimit"); + g_Cvar_FragLimit = FindConVar("mp_fraglimit"); + g_Cvar_MaxRounds = FindConVar("mp_maxrounds"); } public ConVarChange_TimeleftInterval(Handle:convar, const String:oldValue[], const String:newValue[]) @@ -90,19 +101,14 @@ public ConVarChange_TimeleftInterval(Handle:convar, const String:oldValue[], con public Action:Timer_DisplayTimeleft(Handle:timer) { - new timeleft; - if (GetMapTimeLeft(timeleft)) - { - new mins, secs; - - if (timeleft > 0) - { - mins = timeleft / 60; - secs = timeleft % 60; - } - - PrintToChatAll("[SM] %T %d:%02d", "Timeleft", LANG_SERVER, mins, secs); - } + ShowTimeLeft(0, true); +} + +public Action:Command_Timeleft(client, args) +{ + ShowTimeLeft(client); + + return Plugin_Handled; } public Action:Command_Say(client, args) @@ -125,27 +131,7 @@ public Action:Command_Say(client, args) if (strcmp(text[startidx], "timeleft", false) == 0) { - new timeleft; - if (GetMapTimeLeft(timeleft)) - { - new mins, secs; - - if (timeleft > 0) - { - mins = timeleft / 60; - secs = timeleft % 60; - } - - if(GetConVarInt(g_Cvar_TriggerShow)) - { - PrintToChatAll("[SM] %t %d:%02d", "Timeleft", mins, secs); - } - else - { - PrintToChat(client,"[SM] %t %d:%02d", "Timeleft", mins, secs); - } - } - + ShowTimeLeft(client); } else if (strcmp(text[startidx], "thetime", false) == 0) { @@ -201,4 +187,135 @@ public Action:Command_Say(client, args) } return Plugin_Continue; +} + +ShowTimeLeft(client, bool:all=false) +{ + new bool:lastround = false; + new bool:written = false; + new bool:notimelimit = false; + + decl String:finalOutput[1024]; + finalOutput[0] = 0; + + if(GetConVarInt(g_Cvar_TriggerShow) || all) + { + client = 0; + } + + new timeleft; + if (GetMapTimeLeft(timeleft)) + { + new mins, secs; + new timelimit; + + if (timeleft > 0) + { + mins = timeleft / 60; + secs = timeleft % 60; + written = true; + FormatEx(finalOutput, sizeof(finalOutput), "%T %d:%02d", "Timeleft", client, mins, secs); + } + else if (GetMapTimeLimit(timelimit) && timelimit == 0) + { + notimelimit = true; + } + else + { + /* 0 timeleft so this must be the last round */ + lastround=true; + } + } + + if (!lastround) + { + if (g_Cvar_WinLimit != INVALID_HANDLE) + { + new winlimit = GetConVarInt(g_Cvar_WinLimit); + + if (winlimit > 0) + { + if (written) + { + new len = strlen(finalOutput); + if (len < sizeof(finalOutput)) + { + FormatEx(finalOutput[len], sizeof(finalOutput)-len, "%T", "WinLimitAppend" ,client, winlimit, (winlimit == 1)? "":"s"); + } + } + else + { + FormatEx(finalOutput, sizeof(finalOutput), "%T", "WinLimit", client, winlimit, (winlimit == 1)? "":"s"); + written = true; + } + } + } + + if (g_Cvar_FragLimit != INVALID_HANDLE) + { + new fraglimit = GetConVarInt(g_Cvar_FragLimit); + + if (fraglimit > 0) + { + if (written) + { + new len = strlen(finalOutput); + if (len < sizeof(finalOutput)) + { + FormatEx(finalOutput[len], sizeof(finalOutput)-len, "%T", "FragLimitAppend", client, fraglimit, (fraglimit == 1)? "":"s"); + } + } + else + { + FormatEx(finalOutput, sizeof(finalOutput), "%T", "FragLimit", client, fraglimit, (fraglimit == 1)? "":"s"); + written = true; + } + } + } + + if (g_Cvar_MaxRounds != INVALID_HANDLE) + { + new maxrounds = GetConVarInt(g_Cvar_MaxRounds); + + if (maxrounds > 0) + { + if (written) + { + new len = strlen(finalOutput); + if (len < sizeof(finalOutput)) + { + FormatEx(finalOutput[len], sizeof(finalOutput)-len, "%T", "MaxRoundsAppend", client, maxrounds, (maxrounds == 1)? "":"s"); + } + } + else + { + FormatEx(finalOutput, sizeof(finalOutput), "%T", "MaxRounds", client, maxrounds, (maxrounds == 1)? "":"s"); + written = true; + } + } + } + } + + if (lastround) + { + FormatEx(finalOutput, sizeof(finalOutput), "%T", "LastRound", client); + } + else if (notimelimit && !written) + { + FormatEx(finalOutput, sizeof(finalOutput), "%T", "NoTimelimit", client); + } + + if(GetConVarInt(g_Cvar_TriggerShow) || all) + { + PrintToChatAll("[SM] %s", finalOutput); + } + else if (client != 0) + { + PrintToChat(client, "[SM] %s", finalOutput); + } + + if (client == 0) + { + PrintToServer("[SM] %s", finalOutput); + } } \ No newline at end of file diff --git a/plugins/nextmap.sp b/plugins/nextmap.sp index 2589ea16..ba197ec6 100644 --- a/plugins/nextmap.sp +++ b/plugins/nextmap.sp @@ -61,10 +61,7 @@ public OnPluginStart() RegConsoleCmd("say", Command_Say); RegConsoleCmd("say_team", Command_Say); - if (GetCommandFlags("nextmap") == INVALID_FCVAR_FLAGS) - { - RegServerCmd("nextmap", Command_Nextmap); - } + RegConsoleCmd("nextmap", Command_Nextmap); RegAdminCmd("sm_setnextmap", Command_SetNextmap, ADMFLAG_CHANGEMAP, "sm_setnextmap "); RegConsoleCmd("listmaps", Command_List); @@ -113,7 +110,7 @@ public Action:Command_Say(client, args) decl String:map[32]; GetNextMap(map, sizeof(map)); - PrintToChat(client, "%t", "Next Map", map); + PrintToChat(client, "[SM] %t", "Next Map", map); } return Plugin_Continue; @@ -159,13 +156,13 @@ public Action:Command_List(client, args) return Plugin_Handled; } -public Action:Command_Nextmap(args) +public Action:Command_Nextmap(client, args) { decl String:map[64]; GetNextMap(map, sizeof(map)); - ReplyToCommand(0, "%t", "Next Map", map); + ReplyToCommand(client, "[SM] %t", "Next Map", map); return Plugin_Handled; } diff --git a/translations/basetriggers.phrases.txt b/translations/basetriggers.phrases.txt index f98ace92..9dce2b70 100644 --- a/translations/basetriggers.phrases.txt +++ b/translations/basetriggers.phrases.txt @@ -26,4 +26,49 @@ "#format" "{1:s}" "en" "The current map is {1}." } + + "WinLimitAppend" + { + "#format" "{1:i},{2:s}" + "en" ", or change map after a team wins {1} round{2}" + } + + "WinLimit" + { + "#format" "{1:i},{2:s}" + "en" "Map will change after a team wins {1} round{2}" + } + + "MaxRoundsAppend" + { + "#format" "{1:i},{2:s}" + "en" ", or change map after {1} round{2}" + } + + "MaxRounds" + { + "#format" "{1:i},{2:s}" + "en" "Map will change after {1} round{2}" + } + + "FragLimitAppend" + { + "#format" "{1:i},{2:s}" + "en" ", or change map after player reaches {1} frag{2}" + } + "FragLimit" + { + "#format" "{1:i},{2:s}" + "en" "Map will change after a player reaches {1} frag{2}" + } + + "LastRound" + { + "en" "This is the last round!!" + } + + "NoTimelimit" + { + "en" "No timelimit for map" + } }