converted newlines to unix

This commit is contained in:
BotoX 2016-01-19 23:57:32 +01:00
parent a0186f4a49
commit 459815ce0e
49 changed files with 8030 additions and 8030 deletions

View File

@ -1,31 +1,31 @@
#pragma semicolon 1 #pragma semicolon 1
#include <sourcemod> #include <sourcemod>
#include <geoip> #include <geoip>
#pragma newdecls required #pragma newdecls required
public Plugin myinfo = { public Plugin myinfo = {
name = "Connect Announce", name = "Connect Announce",
author = "BotoX", author = "BotoX",
description = "Simple connect announcer", description = "Simple connect announcer",
version = "1.0", version = "1.0",
url = "" url = ""
} }
public void OnClientPostAdminCheck(int client) public void OnClientPostAdminCheck(int client)
{ {
if(IsFakeClient(client)) if(IsFakeClient(client))
return; return;
static char sAuth[32]; static char sAuth[32];
static char sIP[16]; static char sIP[16];
static char sCountry[32]; static char sCountry[32];
GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth));
if(GetClientIP(client, sIP, sizeof(sIP)) && GeoipCountry(sIP, sCountry, sizeof(sCountry))) if(GetClientIP(client, sIP, sizeof(sIP)) && GeoipCountry(sIP, sCountry, sizeof(sCountry)))
PrintToChatAll("\x04%L [\x03%s\x04] connected from %s", client, sAuth, sCountry); PrintToChatAll("\x04%L [\x03%s\x04] connected from %s", client, sAuth, sCountry);
else else
PrintToChatAll("\x04%L [\x03%s\x04] connected", client, sAuth); PrintToChatAll("\x04%L [\x03%s\x04] connected", client, sAuth);
} }

View File

@ -1,118 +1,118 @@
#pragma semicolon 1 #pragma semicolon 1
#include <sourcemod> #include <sourcemod>
#include <dhooks> #include <dhooks>
#undef REQUIRE_PLUGIN #undef REQUIRE_PLUGIN
#include <updater> #include <updater>
#define PLUGIN_NAME "Napalm Lag Fix" #define PLUGIN_NAME "Napalm Lag Fix"
#define PLUGIN_VERSION "1.0.3" #define PLUGIN_VERSION "1.0.3"
#define UPDATE_URL "http://godtony.mooo.com/napalmlagfix/napalmlagfix.txt" #define UPDATE_URL "http://godtony.mooo.com/napalmlagfix/napalmlagfix.txt"
#define DMG_BURN (1 << 3) #define DMG_BURN (1 << 3)
new Handle:g_hRadiusDamage = INVALID_HANDLE; new Handle:g_hRadiusDamage = INVALID_HANDLE;
new bool:g_bCheckNullPtr = false; new bool:g_bCheckNullPtr = false;
public Plugin:myinfo = public Plugin:myinfo =
{ {
name = PLUGIN_NAME, name = PLUGIN_NAME,
author = "GoD-Tony + BotoX", author = "GoD-Tony + BotoX",
description = "Prevents lag when napalm is used on players", description = "Prevents lag when napalm is used on players",
version = PLUGIN_VERSION, version = PLUGIN_VERSION,
url = "https://forums.alliedmods.net/showthread.php?t=188093" // Demo: http://youtu.be/YdhAu5IEVVM url = "https://forums.alliedmods.net/showthread.php?t=188093" // Demo: http://youtu.be/YdhAu5IEVVM
}; };
public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
{ {
MarkNativeAsOptional("DHookIsNullParam"); MarkNativeAsOptional("DHookIsNullParam");
return APLRes_Success; return APLRes_Success;
} }
public OnPluginStart() public OnPluginStart()
{ {
// Convars. // Convars.
new Handle:hCvar = CreateConVar("sm_napalmlagfix_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD); new Handle:hCvar = CreateConVar("sm_napalmlagfix_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);
SetConVarString(hCvar, PLUGIN_VERSION); SetConVarString(hCvar, PLUGIN_VERSION);
// Gamedata. // Gamedata.
new Handle:hConfig = LoadGameConfigFile("napalmlagfix.games"); new Handle:hConfig = LoadGameConfigFile("napalmlagfix.games");
if (hConfig == INVALID_HANDLE) if (hConfig == INVALID_HANDLE)
{ {
SetFailState("Could not find gamedata file: napalmlagfix.games.txt"); SetFailState("Could not find gamedata file: napalmlagfix.games.txt");
} }
new offset = GameConfGetOffset(hConfig, "RadiusDamage"); new offset = GameConfGetOffset(hConfig, "RadiusDamage");
if (offset == -1) if (offset == -1)
{ {
SetFailState("Failed to find RadiusDamage offset"); SetFailState("Failed to find RadiusDamage offset");
} }
CloseHandle(hConfig); CloseHandle(hConfig);
// DHooks. // DHooks.
g_bCheckNullPtr = (GetFeatureStatus(FeatureType_Native, "DHookIsNullParam") == FeatureStatus_Available); g_bCheckNullPtr = (GetFeatureStatus(FeatureType_Native, "DHookIsNullParam") == FeatureStatus_Available);
g_hRadiusDamage = DHookCreate(offset, HookType_GameRules, ReturnType_Void, ThisPointer_Ignore, Hook_RadiusDamage); g_hRadiusDamage = DHookCreate(offset, HookType_GameRules, ReturnType_Void, ThisPointer_Ignore, Hook_RadiusDamage);
DHookAddParam(g_hRadiusDamage, HookParamType_ObjectPtr); // 1 - CTakeDamageInfo &info DHookAddParam(g_hRadiusDamage, HookParamType_ObjectPtr); // 1 - CTakeDamageInfo &info
DHookAddParam(g_hRadiusDamage, HookParamType_VectorPtr); // 2 - Vector &vecSrc DHookAddParam(g_hRadiusDamage, HookParamType_VectorPtr); // 2 - Vector &vecSrc
DHookAddParam(g_hRadiusDamage, HookParamType_Float); // 3 - float flRadius DHookAddParam(g_hRadiusDamage, HookParamType_Float); // 3 - float flRadius
DHookAddParam(g_hRadiusDamage, HookParamType_Int); // 4 - int iClassIgnore DHookAddParam(g_hRadiusDamage, HookParamType_Int); // 4 - int iClassIgnore
DHookAddParam(g_hRadiusDamage, HookParamType_CBaseEntity); // 5 - CBaseEntity *pEntityIgnore DHookAddParam(g_hRadiusDamage, HookParamType_CBaseEntity); // 5 - CBaseEntity *pEntityIgnore
// Updater. // Updater.
if (LibraryExists("updater")) if (LibraryExists("updater"))
{ {
Updater_AddPlugin(UPDATE_URL); Updater_AddPlugin(UPDATE_URL);
} }
} }
public OnLibraryAdded(const String:name[]) public OnLibraryAdded(const String:name[])
{ {
if (StrEqual(name, "updater")) if (StrEqual(name, "updater"))
{ {
Updater_AddPlugin(UPDATE_URL); Updater_AddPlugin(UPDATE_URL);
} }
} }
public Updater_OnPluginUpdated() public Updater_OnPluginUpdated()
{ {
// There could be new gamedata in this update. // There could be new gamedata in this update.
ReloadPlugin(); ReloadPlugin();
} }
public OnMapStart() public OnMapStart()
{ {
DHookGamerules(g_hRadiusDamage, false); DHookGamerules(g_hRadiusDamage, false);
} }
public MRESReturn:Hook_RadiusDamage(Handle:hParams) public MRESReturn:Hook_RadiusDamage(Handle:hParams)
{ {
// As of DHooks 1.0.12 we must check for a null param. // As of DHooks 1.0.12 we must check for a null param.
if (g_bCheckNullPtr && DHookIsNullParam(hParams, 5)) if (g_bCheckNullPtr && DHookIsNullParam(hParams, 5))
return MRES_Ignored; return MRES_Ignored;
new iDmgBits = DHookGetParamObjectPtrVar(hParams, 1, 60, ObjectValueType_Int); new iDmgBits = DHookGetParamObjectPtrVar(hParams, 1, 60, ObjectValueType_Int);
new iEntIgnore = DHookGetParam(hParams, 5); new iEntIgnore = DHookGetParam(hParams, 5);
if(!(iDmgBits & DMG_BURN)) if(!(iDmgBits & DMG_BURN))
return MRES_Ignored; return MRES_Ignored;
// Block napalm damage if it's coming from another client. // Block napalm damage if it's coming from another client.
if (1 <= iEntIgnore <= MaxClients) if (1 <= iEntIgnore <= MaxClients)
return MRES_Supercede; return MRES_Supercede;
// Block napalm that comes from grenades // Block napalm that comes from grenades
new String:sEntClassName[64]; new String:sEntClassName[64];
if(GetEntityClassname(iEntIgnore, sEntClassName, sizeof(sEntClassName))) if(GetEntityClassname(iEntIgnore, sEntClassName, sizeof(sEntClassName)))
{ {
if(!strcmp(sEntClassName, "hegrenade_projectile")) if(!strcmp(sEntClassName, "hegrenade_projectile"))
return MRES_Supercede; return MRES_Supercede;
} }
return MRES_Ignored; return MRES_Ignored;
} }

View File

@ -1,42 +1,42 @@
#pragma semicolon 1 #pragma semicolon 1
#include <sourcemod> #include <sourcemod>
#include <sdktools> #include <sdktools>
#include <dhooks> #include <dhooks>
//int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&) //int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&)
Handle g_hDamagedByExplosion; Handle g_hDamagedByExplosion;
public Plugin myinfo = public Plugin myinfo =
{ {
name = "NoGrenadeRinging", name = "NoGrenadeRinging",
author = "BotoX", author = "BotoX",
description = "Block the annoying ringing noise when a grenade explodes next to you", description = "Block the annoying ringing noise when a grenade explodes next to you",
version = "1.0", version = "1.0",
url = "" url = ""
}; };
public void OnPluginStart() public void OnPluginStart()
{ {
Handle hTemp = LoadGameConfigFile("NoGrenadeRinging.games"); Handle hTemp = LoadGameConfigFile("NoGrenadeRinging.games");
if(hTemp == INVALID_HANDLE) if(hTemp == INVALID_HANDLE)
SetFailState("Why you no has gamedata?"); SetFailState("Why you no has gamedata?");
int Offset = GameConfGetOffset(hTemp, "OnDamagedByExplosion"); int Offset = GameConfGetOffset(hTemp, "OnDamagedByExplosion");
g_hDamagedByExplosion = DHookCreate(Offset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnDamagedByExplosion); g_hDamagedByExplosion = DHookCreate(Offset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnDamagedByExplosion);
DHookAddParam(g_hDamagedByExplosion, HookParamType_ObjectPtr); DHookAddParam(g_hDamagedByExplosion, HookParamType_ObjectPtr);
CloseHandle(hTemp); CloseHandle(hTemp);
} }
public void OnClientPutInServer(int client) public void OnClientPutInServer(int client)
{ {
//Dont add removal callback for this one //Dont add removal callback for this one
DHookEntity(g_hDamagedByExplosion, false, client); DHookEntity(g_hDamagedByExplosion, false, client);
} }
//int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&) //int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&)
public MRESReturn:OnDamagedByExplosion(int pThis, Handle hReturn, Handle hParams) public MRESReturn:OnDamagedByExplosion(int pThis, Handle hReturn, Handle hParams)
{ {
// Block call // Block call
return MRES_Supercede; return MRES_Supercede;
} }

View File

@ -1,333 +1,333 @@
#pragma semicolon 1 #pragma semicolon 1
#include <sourcemod> #include <sourcemod>
#include <sdktools> #include <sdktools>
#include <morecolors> #include <morecolors>
#define PLUGIN_NAME "Toggle Weapon Sounds" #define PLUGIN_NAME "Toggle Weapon Sounds"
#define PLUGIN_VERSION "1.2.0" #define PLUGIN_VERSION "1.2.0"
#define UPDATE_URL "http://godtony.mooo.com/stopsound/stopsound.txt" #define UPDATE_URL "http://godtony.mooo.com/stopsound/stopsound.txt"
new bool:g_bStopSound[MAXPLAYERS+1], bool:g_bHooked; new bool:g_bStopSound[MAXPLAYERS+1], bool:g_bHooked;
static String:g_sKVPATH[PLATFORM_MAX_PATH]; static String:g_sKVPATH[PLATFORM_MAX_PATH];
new Handle:g_hWepSounds; new Handle:g_hWepSounds;
public Plugin:myinfo = public Plugin:myinfo =
{ {
name = PLUGIN_NAME, name = PLUGIN_NAME,
author = "GoD-Tony, edit by id/Obus", author = "GoD-Tony, edit by id/Obus",
description = "Allows clients to stop hearing weapon sounds", description = "Allows clients to stop hearing weapon sounds",
version = PLUGIN_VERSION, version = PLUGIN_VERSION,
url = "http://www.sourcemod.net/" url = "http://www.sourcemod.net/"
}; };
public OnPluginStart() public OnPluginStart()
{ {
// Detect game and hook appropriate tempent. // Detect game and hook appropriate tempent.
decl String:sGame[32]; decl String:sGame[32];
GetGameFolderName(sGame, sizeof(sGame)); GetGameFolderName(sGame, sizeof(sGame));
if (StrEqual(sGame, "cstrike")) if (StrEqual(sGame, "cstrike"))
{ {
AddTempEntHook("Shotgun Shot", CSS_Hook_ShotgunShot); AddTempEntHook("Shotgun Shot", CSS_Hook_ShotgunShot);
} }
else if (StrEqual(sGame, "dod")) else if (StrEqual(sGame, "dod"))
{ {
AddTempEntHook("FireBullets", DODS_Hook_FireBullets); AddTempEntHook("FireBullets", DODS_Hook_FireBullets);
} }
// TF2/HL2:DM and misc weapon sounds will be caught here. // TF2/HL2:DM and misc weapon sounds will be caught here.
AddNormalSoundHook(Hook_NormalSound); AddNormalSoundHook(Hook_NormalSound);
CreateConVar("sm_stopsound_version", PLUGIN_VERSION, "Toggle Weapon Sounds", FCVAR_NOTIFY|FCVAR_DONTRECORD|FCVAR_REPLICATED); CreateConVar("sm_stopsound_version", PLUGIN_VERSION, "Toggle Weapon Sounds", FCVAR_NOTIFY|FCVAR_DONTRECORD|FCVAR_REPLICATED);
RegConsoleCmd("sm_stopsound", Command_StopSound, "Toggle hearing weapon sounds"); RegConsoleCmd("sm_stopsound", Command_StopSound, "Toggle hearing weapon sounds");
if (g_hWepSounds != INVALID_HANDLE) if (g_hWepSounds != INVALID_HANDLE)
{ {
CloseHandle(g_hWepSounds); CloseHandle(g_hWepSounds);
} }
g_hWepSounds = CreateKeyValues("WeaponSounds"); g_hWepSounds = CreateKeyValues("WeaponSounds");
BuildPath(Path_SM, g_sKVPATH, sizeof(g_sKVPATH), "data/playerprefs.WepSounds.txt"); BuildPath(Path_SM, g_sKVPATH, sizeof(g_sKVPATH), "data/playerprefs.WepSounds.txt");
FileToKeyValues(g_hWepSounds, g_sKVPATH); FileToKeyValues(g_hWepSounds, g_sKVPATH);
// Updater. // Updater.
//if (LibraryExists("updater")) //if (LibraryExists("updater"))
//{ //{
// Updater_AddPlugin(UPDATE_URL); // Updater_AddPlugin(UPDATE_URL);
//} //}
} }
/*public OnLibraryAdded(const String:name[]) /*public OnLibraryAdded(const String:name[])
{ {
if (StrEqual(name, "updater")) if (StrEqual(name, "updater"))
{ {
Updater_AddPlugin(UPDATE_URL); Updater_AddPlugin(UPDATE_URL);
} }
}*/ }*/
public Action:Command_StopSound(client, args) public Action:Command_StopSound(client, args)
{ {
if (client == 0) if (client == 0)
{ {
PrintToServer("[SM] Cannot use command from server console."); PrintToServer("[SM] Cannot use command from server console.");
return Plugin_Handled; return Plugin_Handled;
} }
if (args > 0) if (args > 0)
{ {
decl String:Arguments[32]; decl String:Arguments[32];
GetCmdArg(1, Arguments, sizeof(Arguments)); GetCmdArg(1, Arguments, sizeof(Arguments));
if (StrEqual(Arguments, "save")) if (StrEqual(Arguments, "save"))
{ {
KvRewind(g_hWepSounds); KvRewind(g_hWepSounds);
decl String:SID[32]; decl String:SID[32];
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID)); GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
if (KvJumpToKey(g_hWepSounds, SID, true)) if (KvJumpToKey(g_hWepSounds, SID, true))
{ {
new disabled; new disabled;
disabled = KvGetNum(g_hWepSounds, "disabled", 0); disabled = KvGetNum(g_hWepSounds, "disabled", 0);
if (!disabled) if (!disabled)
{ {
//CPrintToChat(client, "[StopSound] Saved entry for STEAMID({green}%s{default}) {green}successfully{default}.", SID); //CPrintToChat(client, "[StopSound] Saved entry for STEAMID({green}%s{default}) {green}successfully{default}.", SID);
KvSetNum(g_hWepSounds, "disabled", 1); KvSetNum(g_hWepSounds, "disabled", 1);
KvRewind(g_hWepSounds); KvRewind(g_hWepSounds);
KeyValuesToFile(g_hWepSounds, g_sKVPATH); KeyValuesToFile(g_hWepSounds, g_sKVPATH);
g_bStopSound[client] = true; g_bStopSound[client] = true;
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {red}disabled{default} - {green}entry saved{default}."); CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {red}disabled{default} - {green}entry saved{default}.");
CheckHooks(); CheckHooks();
return Plugin_Handled; return Plugin_Handled;
} }
else else
{ {
//CPrintToChat(client, "[StopSound] Entry for STEAMID({green}%s{default}) {green}successfully deleted{default}.", SID); //CPrintToChat(client, "[StopSound] Entry for STEAMID({green}%s{default}) {green}successfully deleted{default}.", SID);
KvDeleteThis(g_hWepSounds); KvDeleteThis(g_hWepSounds);
KvRewind(g_hWepSounds); KvRewind(g_hWepSounds);
KeyValuesToFile(g_hWepSounds, g_sKVPATH); KeyValuesToFile(g_hWepSounds, g_sKVPATH);
g_bStopSound[client] = false; g_bStopSound[client] = false;
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {green}enabled{default} - {red}entry deleted{default}."); CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {green}enabled{default} - {red}entry deleted{default}.");
CheckHooks(); CheckHooks();
return Plugin_Handled; return Plugin_Handled;
} }
} }
KvRewind(g_hWepSounds); KvRewind(g_hWepSounds);
} }
else if (StrEqual(Arguments, "delete")) else if (StrEqual(Arguments, "delete"))
{ {
KvRewind(g_hWepSounds); KvRewind(g_hWepSounds);
decl String:SID[32]; decl String:SID[32];
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID)); GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
if (KvJumpToKey(g_hWepSounds, SID, false)) if (KvJumpToKey(g_hWepSounds, SID, false))
{ {
g_bStopSound[client] = false; g_bStopSound[client] = false;
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {green}enabled{default} - {red}entry deleted{default}."); CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {green}enabled{default} - {red}entry deleted{default}.");
CheckHooks(); CheckHooks();
KvDeleteThis(g_hWepSounds); KvDeleteThis(g_hWepSounds);
KvRewind(g_hWepSounds); KvRewind(g_hWepSounds);
KeyValuesToFile(g_hWepSounds, g_sKVPATH); KeyValuesToFile(g_hWepSounds, g_sKVPATH);
return Plugin_Handled; return Plugin_Handled;
} }
else else
{ {
CPrintToChat(client, "{green}[StopSound]{default} Entry {red}not found{default}."); CPrintToChat(client, "{green}[StopSound]{default} Entry {red}not found{default}.");
return Plugin_Handled; return Plugin_Handled;
} }
} }
else else
{ {
PrintToChat(client, "[SM] Usage sm_stopsound <save|delete>"); PrintToChat(client, "[SM] Usage sm_stopsound <save|delete>");
return Plugin_Handled; return Plugin_Handled;
} }
} }
g_bStopSound[client] = !g_bStopSound[client]; g_bStopSound[client] = !g_bStopSound[client];
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds %s.", g_bStopSound[client] ? "{red}disabled{default}" : "{green}enabled{default}"); CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds %s.", g_bStopSound[client] ? "{red}disabled{default}" : "{green}enabled{default}");
CheckHooks(); CheckHooks();
return Plugin_Handled; return Plugin_Handled;
} }
public OnClientPutInServer(client) public OnClientPutInServer(client)
{ {
KvRewind(g_hWepSounds); KvRewind(g_hWepSounds);
decl String:SID[32]; decl String:SID[32];
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID)); GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
if (KvJumpToKey(g_hWepSounds, SID, false)) if (KvJumpToKey(g_hWepSounds, SID, false))
{ {
new disabled; new disabled;
disabled = KvGetNum(g_hWepSounds, "disabled", 0); disabled = KvGetNum(g_hWepSounds, "disabled", 0);
if (disabled) if (disabled)
{ {
g_bStopSound[client] = true; g_bStopSound[client] = true;
} }
} }
CheckHooks(); CheckHooks();
KvRewind(g_hWepSounds); KvRewind(g_hWepSounds);
} }
public OnClientDisconnect_Post(client) public OnClientDisconnect_Post(client)
{ {
g_bStopSound[client] = false; g_bStopSound[client] = false;
CheckHooks(); CheckHooks();
} }
CheckHooks() CheckHooks()
{ {
new bool:bShouldHook = false; new bool:bShouldHook = false;
for (new i = 1; i <= MaxClients; i++) for (new i = 1; i <= MaxClients; i++)
{ {
if (g_bStopSound[i]) if (g_bStopSound[i])
{ {
bShouldHook = true; bShouldHook = true;
break; break;
} }
} }
// Fake (un)hook because toggling actual hooks will cause server instability. // Fake (un)hook because toggling actual hooks will cause server instability.
g_bHooked = bShouldHook; g_bHooked = bShouldHook;
} }
public Action:Hook_NormalSound(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags) public Action:Hook_NormalSound(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{ {
// Ignore non-weapon sounds. // Ignore non-weapon sounds.
if (!g_bHooked || !(strncmp(sample, "weapons", 7) == 0 || strncmp(sample[1], "weapons", 7) == 0)) if (!g_bHooked || !(strncmp(sample, "weapons", 7) == 0 || strncmp(sample[1], "weapons", 7) == 0))
{ {
return Plugin_Continue; return Plugin_Continue;
} }
decl i, j; decl i, j;
for (i = 0; i < numClients; i++) for (i = 0; i < numClients; i++)
{ {
if (g_bStopSound[clients[i]]) if (g_bStopSound[clients[i]])
{ {
// Remove the client from the array. // Remove the client from the array.
for (j = i; j < numClients - 1; j++) for (j = i; j < numClients - 1; j++)
{ {
clients[j] = clients[j + 1]; clients[j] = clients[j + 1];
} }
numClients--; numClients--;
i--; i--;
} }
} }
return (numClients > 0) ? Plugin_Changed : Plugin_Stop; return (numClients > 0) ? Plugin_Changed : Plugin_Stop;
} }
public Action:CSS_Hook_ShotgunShot(const String:te_name[], const Players[], numClients, Float:delay) public Action:CSS_Hook_ShotgunShot(const String:te_name[], const Players[], numClients, Float:delay)
{ {
if (!g_bHooked) if (!g_bHooked)
{ {
return Plugin_Continue; return Plugin_Continue;
} }
// Check which clients need to be excluded. // Check which clients need to be excluded.
decl newClients[MaxClients], client, i; decl newClients[MaxClients], client, i;
new newTotal = 0; new newTotal = 0;
for (i = 0; i < numClients; i++) for (i = 0; i < numClients; i++)
{ {
client = Players[i]; client = Players[i];
if (!g_bStopSound[client]) if (!g_bStopSound[client])
{ {
newClients[newTotal++] = client; newClients[newTotal++] = client;
} }
} }
// No clients were excluded. // No clients were excluded.
if (newTotal == numClients) if (newTotal == numClients)
{ {
return Plugin_Continue; return Plugin_Continue;
} }
else if (newTotal == 0) // All clients were excluded and there is no need to broadcast. else if (newTotal == 0) // All clients were excluded and there is no need to broadcast.
{ {
return Plugin_Stop; return Plugin_Stop;
} }
// Re-broadcast to clients that still need it. // Re-broadcast to clients that still need it.
decl Float:vTemp[3]; decl Float:vTemp[3];
TE_Start("Shotgun Shot"); TE_Start("Shotgun Shot");
TE_ReadVector("m_vecOrigin", vTemp); TE_ReadVector("m_vecOrigin", vTemp);
TE_WriteVector("m_vecOrigin", vTemp); TE_WriteVector("m_vecOrigin", vTemp);
TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]")); TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]"));
TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]")); TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]"));
TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID")); TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID"));
TE_WriteNum("m_iMode", TE_ReadNum("m_iMode")); TE_WriteNum("m_iMode", TE_ReadNum("m_iMode"));
TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed")); TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed"));
TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer")); TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer"));
TE_WriteFloat("m_fInaccuracy", TE_ReadFloat("m_fInaccuracy")); TE_WriteFloat("m_fInaccuracy", TE_ReadFloat("m_fInaccuracy"));
TE_WriteFloat("m_fSpread", TE_ReadFloat("m_fSpread")); TE_WriteFloat("m_fSpread", TE_ReadFloat("m_fSpread"));
TE_Send(newClients, newTotal, delay); TE_Send(newClients, newTotal, delay);
return Plugin_Stop; return Plugin_Stop;
} }
public Action:DODS_Hook_FireBullets(const String:te_name[], const Players[], numClients, Float:delay) public Action:DODS_Hook_FireBullets(const String:te_name[], const Players[], numClients, Float:delay)
{ {
if (!g_bHooked) if (!g_bHooked)
{ {
return Plugin_Continue; return Plugin_Continue;
} }
// Check which clients need to be excluded. // Check which clients need to be excluded.
decl newClients[MaxClients], client, i; decl newClients[MaxClients], client, i;
new newTotal = 0; new newTotal = 0;
for (i = 0; i < numClients; i++) for (i = 0; i < numClients; i++)
{ {
client = Players[i]; client = Players[i];
if (!g_bStopSound[client]) if (!g_bStopSound[client])
{ {
newClients[newTotal++] = client; newClients[newTotal++] = client;
} }
} }
// No clients were excluded. // No clients were excluded.
if (newTotal == numClients) if (newTotal == numClients)
{ {
return Plugin_Continue; return Plugin_Continue;
} }
else if (newTotal == 0)// All clients were excluded and there is no need to broadcast. else if (newTotal == 0)// All clients were excluded and there is no need to broadcast.
{ {
return Plugin_Stop; return Plugin_Stop;
} }
// Re-broadcast to clients that still need it. // Re-broadcast to clients that still need it.
decl Float:vTemp[3]; decl Float:vTemp[3];
TE_Start("FireBullets"); TE_Start("FireBullets");
TE_ReadVector("m_vecOrigin", vTemp); TE_ReadVector("m_vecOrigin", vTemp);
TE_WriteVector("m_vecOrigin", vTemp); TE_WriteVector("m_vecOrigin", vTemp);
TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]")); TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]"));
TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]")); TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]"));
TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID")); TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID"));
TE_WriteNum("m_iMode", TE_ReadNum("m_iMode")); TE_WriteNum("m_iMode", TE_ReadNum("m_iMode"));
TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed")); TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed"));
TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer")); TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer"));
TE_WriteFloat("m_flSpread", TE_ReadFloat("m_flSpread")); TE_WriteFloat("m_flSpread", TE_ReadFloat("m_flSpread"));
TE_Send(newClients, newTotal, delay); TE_Send(newClients, newTotal, delay);
return Plugin_Stop; return Plugin_Stop;
} }

View File

@ -1,274 +1,274 @@
#pragma semicolon 1 #pragma semicolon 1
#include <sourcemod> #include <sourcemod>
#include <sdkhooks> #include <sdkhooks>
#include <sdktools> #include <sdktools>
#define TIMER_INTERVAL 1.0 #define TIMER_INTERVAL 1.0
Handle g_hTimer = INVALID_HANDLE; Handle g_hTimer = INVALID_HANDLE;
ConVar g_CVar_MaxWeapons; ConVar g_CVar_MaxWeapons;
ConVar g_CVar_WeaponLifetime; ConVar g_CVar_WeaponLifetime;
new g_RealRoundStartedTime; new g_RealRoundStartedTime;
new g_MaxWeapons; new g_MaxWeapons;
new g_MaxWeaponLifetime; new g_MaxWeaponLifetime;
#define MAX_WEAPONS MAXPLAYERS #define MAX_WEAPONS MAXPLAYERS
new G_WeaponArray[MAX_WEAPONS][2]; new G_WeaponArray[MAX_WEAPONS][2];
public Plugin myinfo = public Plugin myinfo =
{ {
name = "WeaponCleaner", name = "WeaponCleaner",
author = "BotoX", author = "BotoX",
description = "Clean unneeded weapons", description = "Clean unneeded weapons",
version = "2.0", version = "2.0",
url = "" url = ""
}; };
public void OnPluginStart() public void OnPluginStart()
{ {
RegAdminCmd("sm_sweep", Command_CleanupWeapons, ADMFLAG_GENERIC, "Cleans up all the weapons on the map unless they have a HammerID attached to them."); RegAdminCmd("sm_sweep", Command_CleanupWeapons, ADMFLAG_GENERIC, "Cleans up all the weapons on the map unless they have a HammerID attached to them.");
g_CVar_MaxWeapons = CreateConVar("sm_weaponcleaner_max", "5", "The maximum amount of weapons allowed in the game.", 0, true, 0.0, true, MAX_WEAPONS - 1.0); g_CVar_MaxWeapons = CreateConVar("sm_weaponcleaner_max", "5", "The maximum amount of weapons allowed in the game.", 0, true, 0.0, true, MAX_WEAPONS - 1.0);
g_MaxWeapons = g_CVar_MaxWeapons.IntValue; g_MaxWeapons = g_CVar_MaxWeapons.IntValue;
g_CVar_MaxWeapons.AddChangeHook(OnConVarChanged); g_CVar_MaxWeapons.AddChangeHook(OnConVarChanged);
g_CVar_WeaponLifetime = CreateConVar("sm_weaponcleaner_lifetime", "15", "The maximum amount of time in seconds a weapon is allowed in the game.", 0, true, 0.0); g_CVar_WeaponLifetime = CreateConVar("sm_weaponcleaner_lifetime", "15", "The maximum amount of time in seconds a weapon is allowed in the game.", 0, true, 0.0);
g_MaxWeaponLifetime = g_CVar_WeaponLifetime.IntValue; g_MaxWeaponLifetime = g_CVar_WeaponLifetime.IntValue;
g_CVar_WeaponLifetime.AddChangeHook(OnConVarChanged); g_CVar_WeaponLifetime.AddChangeHook(OnConVarChanged);
HookEvent("round_start", Event_RoundStart); HookEvent("round_start", Event_RoundStart);
AutoExecConfig(true, "plugin.WeaponCleaner"); AutoExecConfig(true, "plugin.WeaponCleaner");
} }
public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
{ {
if(convar == g_CVar_MaxWeapons) if(convar == g_CVar_MaxWeapons)
{ {
if(StringToInt(newValue) < StringToInt(oldValue)) if(StringToInt(newValue) < StringToInt(oldValue))
{ {
// Need to shrink list and kill items // Need to shrink list and kill items
new d = StringToInt(oldValue) - StringToInt(newValue); new d = StringToInt(oldValue) - StringToInt(newValue);
// Kill items that don't have space anymore // Kill items that don't have space anymore
for(new i = 0; d && i < g_MaxWeapons; i++) for(new i = 0; d && i < g_MaxWeapons; i++)
{ {
if(!G_WeaponArray[i][0]) if(!G_WeaponArray[i][0])
continue; continue;
// Kill it // Kill it
AcceptEntityInput(G_WeaponArray[0][0], "Kill"); AcceptEntityInput(G_WeaponArray[0][0], "Kill");
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon() // This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
// Move index backwards (since the list was modified by removing it) // Move index backwards (since the list was modified by removing it)
i--; i--;
d--; d--;
} }
} }
g_MaxWeapons = StringToInt(newValue); g_MaxWeapons = StringToInt(newValue);
} }
else if(convar == g_CVar_WeaponLifetime) else if(convar == g_CVar_WeaponLifetime)
{ {
g_MaxWeaponLifetime = StringToInt(newValue); g_MaxWeaponLifetime = StringToInt(newValue);
CheckWeapons(); CheckWeapons();
} }
} }
public void OnMapStart() public void OnMapStart()
{ {
if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer)) if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer))
g_hTimer = INVALID_HANDLE; g_hTimer = INVALID_HANDLE;
g_hTimer = CreateTimer(TIMER_INTERVAL, Timer_CleanupWeapons, INVALID_HANDLE, TIMER_REPEAT); g_hTimer = CreateTimer(TIMER_INTERVAL, Timer_CleanupWeapons, INVALID_HANDLE, TIMER_REPEAT);
} }
public void OnMapEnd() public void OnMapEnd()
{ {
if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer)) if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer))
g_hTimer = INVALID_HANDLE; g_hTimer = INVALID_HANDLE;
} }
public void OnClientPutInServer(int client) public void OnClientPutInServer(int client)
{ {
SDKHook(client, SDKHook_WeaponDropPost, OnWeaponDrop); SDKHook(client, SDKHook_WeaponDropPost, OnWeaponDrop);
SDKHook(client, SDKHook_WeaponEquipPost, OnWeaponEquip); SDKHook(client, SDKHook_WeaponEquipPost, OnWeaponEquip);
} }
public void OnClientDisconnect(int client) public void OnClientDisconnect(int client)
{ {
SDKUnhook(client, SDKHook_WeaponDropPost, OnWeaponDrop); SDKUnhook(client, SDKHook_WeaponDropPost, OnWeaponDrop);
SDKUnhook(client, SDKHook_WeaponEquipPost, OnWeaponEquip); SDKUnhook(client, SDKHook_WeaponEquipPost, OnWeaponEquip);
} }
public void OnEntityCreated(int entity, const char[] classname) public void OnEntityCreated(int entity, const char[] classname)
{ {
if(IsValidEntity(entity) && strncmp(classname, "weapon_", 7) == 0) if(IsValidEntity(entity) && strncmp(classname, "weapon_", 7) == 0)
{ {
SDKHook(entity, SDKHook_Spawn, OnWeaponSpawned); SDKHook(entity, SDKHook_Spawn, OnWeaponSpawned);
} }
} }
public void OnEntityDestroyed(int entity) public void OnEntityDestroyed(int entity)
{ {
RemoveWeapon(entity); RemoveWeapon(entity);
} }
public void OnWeaponSpawned(int entity) public void OnWeaponSpawned(int entity)
{ {
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID"); new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
// Should not be cleaned since it's a map spawned weapon // Should not be cleaned since it's a map spawned weapon
if(HammerID) if(HammerID)
return; return;
// Weapon doesn't belong to any player // Weapon doesn't belong to any player
if(GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity") == -1) if(GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity") == -1)
InsertWeapon(entity); InsertWeapon(entity);
} }
public Action OnWeaponEquip(int client, int entity) public Action OnWeaponEquip(int client, int entity)
{ {
if(!IsValidEntity(entity)) if(!IsValidEntity(entity))
return; return;
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID"); new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
// Should not be cleaned since it's a map spawned weapon // Should not be cleaned since it's a map spawned weapon
if(HammerID) if(HammerID)
return; return;
// Weapon should not be cleaned anymore // Weapon should not be cleaned anymore
RemoveWeapon(entity); RemoveWeapon(entity);
} }
public Action OnWeaponDrop(int client, int entity) public Action OnWeaponDrop(int client, int entity)
{ {
if(!IsValidEntity(entity)) if(!IsValidEntity(entity))
return; return;
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID"); new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
// Should not be cleaned since it's a map spawned weapon // Should not be cleaned since it's a map spawned weapon
if(HammerID) if(HammerID)
return; return;
// Kill all dropped weapons during mp_freezetime // Kill all dropped weapons during mp_freezetime
if(GetTime() < g_RealRoundStartedTime) if(GetTime() < g_RealRoundStartedTime)
{ {
// Kill it // Kill it
AcceptEntityInput(entity, "Kill"); AcceptEntityInput(entity, "Kill");
return; return;
} }
// Weapon should be cleaned again // Weapon should be cleaned again
InsertWeapon(entity); InsertWeapon(entity);
} }
bool InsertWeapon(int entity) bool InsertWeapon(int entity)
{ {
// Try to find a free slot // Try to find a free slot
for(new i = 0; i < g_MaxWeapons; i++) for(new i = 0; i < g_MaxWeapons; i++)
{ {
if(G_WeaponArray[i][0]) if(G_WeaponArray[i][0])
continue; continue;
// Found a free slot, add it here // Found a free slot, add it here
G_WeaponArray[i][0] = entity; G_WeaponArray[i][0] = entity;
G_WeaponArray[i][1] = GetTime(); G_WeaponArray[i][1] = GetTime();
return true; return true;
} }
// No free slot found // No free slot found
// Kill the first (oldest) item in the list // Kill the first (oldest) item in the list
AcceptEntityInput(G_WeaponArray[0][0], "Kill"); AcceptEntityInput(G_WeaponArray[0][0], "Kill");
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon() // This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
// Add new weapon to the end of the list // Add new weapon to the end of the list
G_WeaponArray[g_MaxWeapons - 1][0] = entity; G_WeaponArray[g_MaxWeapons - 1][0] = entity;
G_WeaponArray[g_MaxWeapons - 1][1] = GetTime(); G_WeaponArray[g_MaxWeapons - 1][1] = GetTime();
return true; return true;
} }
bool RemoveWeapon(int entity) bool RemoveWeapon(int entity)
{ {
// Find the Weapon // Find the Weapon
for(new i = 0; i < g_MaxWeapons; i++) for(new i = 0; i < g_MaxWeapons; i++)
{ {
if(G_WeaponArray[i][0] == entity) if(G_WeaponArray[i][0] == entity)
{ {
G_WeaponArray[i][0] = 0; G_WeaponArray[i][1] = 0; G_WeaponArray[i][0] = 0; G_WeaponArray[i][1] = 0;
// Move list items in front of this index back by one // Move list items in front of this index back by one
for(new j = i + 1; j < g_MaxWeapons; j++) for(new j = i + 1; j < g_MaxWeapons; j++)
{ {
G_WeaponArray[j - 1][0] = G_WeaponArray[j][0]; G_WeaponArray[j - 1][0] = G_WeaponArray[j][0];
G_WeaponArray[j - 1][1] = G_WeaponArray[j][1]; G_WeaponArray[j - 1][1] = G_WeaponArray[j][1];
} }
// Reset last list item // Reset last list item
G_WeaponArray[g_MaxWeapons - 1][0] = 0; G_WeaponArray[g_MaxWeapons - 1][0] = 0;
G_WeaponArray[g_MaxWeapons - 1][1] = 0; G_WeaponArray[g_MaxWeapons - 1][1] = 0;
return true; return true;
} }
} }
return false; return false;
} }
bool CheckWeapons() bool CheckWeapons()
{ {
for(new i = 0; i < g_MaxWeapons; i++) for(new i = 0; i < g_MaxWeapons; i++)
{ {
if(!G_WeaponArray[i][0]) if(!G_WeaponArray[i][0])
continue; continue;
if(GetTime() - G_WeaponArray[i][1] >= g_MaxWeaponLifetime) if(GetTime() - G_WeaponArray[i][1] >= g_MaxWeaponLifetime)
{ {
// Kill it // Kill it
AcceptEntityInput(G_WeaponArray[i][0], "Kill"); AcceptEntityInput(G_WeaponArray[i][0], "Kill");
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon() // This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
// Move index backwards (since the list was modified by removing it) // Move index backwards (since the list was modified by removing it)
i--; i--;
} }
} }
return true; return true;
} }
void CleanupWeapons() void CleanupWeapons()
{ {
for(new i = 0; i < g_MaxWeapons; i++) for(new i = 0; i < g_MaxWeapons; i++)
{ {
if(!G_WeaponArray[i][0]) if(!G_WeaponArray[i][0])
continue; continue;
// Kill it // Kill it
AcceptEntityInput(G_WeaponArray[i][0], "Kill"); AcceptEntityInput(G_WeaponArray[i][0], "Kill");
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon() // This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
// Move index backwards (since the list was modified by removing it) // Move index backwards (since the list was modified by removing it)
i--; i--;
} }
} }
public Action Event_RoundStart(Handle:event, const char[] name, bool:dontBroadcast) public Action Event_RoundStart(Handle:event, const char[] name, bool:dontBroadcast)
{ {
for(new i = 0; i < MAX_WEAPONS; i++) for(new i = 0; i < MAX_WEAPONS; i++)
{ {
G_WeaponArray[i][0] = 0; G_WeaponArray[i][1] = 0; G_WeaponArray[i][0] = 0; G_WeaponArray[i][1] = 0;
} }
g_RealRoundStartedTime = GetTime() + GetConVarInt(FindConVar("mp_freezetime")); g_RealRoundStartedTime = GetTime() + GetConVarInt(FindConVar("mp_freezetime"));
} }
public Action Timer_CleanupWeapons(Handle:timer) public Action Timer_CleanupWeapons(Handle:timer)
{ {
CheckWeapons(); CheckWeapons();
} }
public Action Command_CleanupWeapons(client, args) public Action Command_CleanupWeapons(client, args)
{ {
CleanupWeapons(); CleanupWeapons();
LogAction(client, -1, "%L performed a weapons cleanup", client); LogAction(client, -1, "%L performed a weapons cleanup", client);
PrintToChat(client, "[SM] Weapons cleaned successfully!"); PrintToChat(client, "[SM] Weapons cleaned successfully!");
} }

View File

@ -1,190 +1,190 @@
/** /**
* This is the include file for Custom Chat Colors * This is the include file for Custom Chat Colors
* https://forums.alliedmods.net/showthread.php?t=186695 * https://forums.alliedmods.net/showthread.php?t=186695
* To check that Custom Chat Colors is installed and running, verify that the "ccc" library exists * To check that Custom Chat Colors is installed and running, verify that the "ccc" library exists
*/ */
#if defined _ccc_included #if defined _ccc_included
#endinput #endinput
#endif #endif
#define _ccc_included #define _ccc_included
enum CCC_ColorType { enum CCC_ColorType {
CCC_TagColor, CCC_TagColor,
CCC_NameColor, CCC_NameColor,
CCC_ChatColor CCC_ChatColor
}; };
#define COLOR_NULL -1 #define COLOR_NULL -1
#define COLOR_NONE -2 #define COLOR_NONE -2
#define COLOR_CGREEN -3 //0x40FF40 #define COLOR_CGREEN -3 //0x40FF40
#define COLOR_OLIVE -4 //0x99FF99 #define COLOR_OLIVE -4 //0x99FF99
#define COLOR_TEAM -5 #define COLOR_TEAM -5
/** /**
* Gets a client's color as a hexadecimal integer. * Gets a client's color as a hexadecimal integer.
* *
* @param client Client index * @param client Client index
* @param type Color type to retreive * @param type Color type to retreive
* @param alpha Pass a boolean variable by reference here and it will be true if the color has alpha specified or false if it doesn't (or is a stock color) * @param alpha Pass a boolean variable by reference here and it will be true if the color has alpha specified or false if it doesn't (or is a stock color)
* @return Color as a hexadecimal integer (use %X in formatting to get a hexadecimal string) * @return Color as a hexadecimal integer (use %X in formatting to get a hexadecimal string)
* *
* On error/errors: Invalid client index or client is not in game * On error/errors: Invalid client index or client is not in game
*/ */
native CCC_GetColor(client, CCC_ColorType:type, &bool:alpha = false); native CCC_GetColor(client, CCC_ColorType:type, &bool:alpha = false);
/** /**
* Sets a client's color as a hexadecimal integer. * Sets a client's color as a hexadecimal integer.
* *
* @param client Client index * @param client Client index
* @param type Color type to set * @param type Color type to set
* @param color Integer representation of the color (use StringToInt(input, 16) to convert a hexadecimal string) or one of the color defines * @param color Integer representation of the color (use StringToInt(input, 16) to convert a hexadecimal string) or one of the color defines
* @param alpha Are you specifying a color with alpha? * @param alpha Are you specifying a color with alpha?
* @return True if the color is updated successfully, false otherwise * @return True if the color is updated successfully, false otherwise
* *
* On error/errors: Invalid client index or client is not in game * On error/errors: Invalid client index or client is not in game
*/ */
native bool:CCC_SetColor(client, CCC_ColorType:type, color, bool:alpha); native bool:CCC_SetColor(client, CCC_ColorType:type, color, bool:alpha);
/** /**
* Gets a client's tag * Gets a client's tag
* *
* @param client Client index * @param client Client index
* @param buffer Buffer to store the tag in * @param buffer Buffer to store the tag in
* @param maxlen Maximum buffer length * @param maxlen Maximum buffer length
* @noreturn * @noreturn
* *
* On error/errors: Invalid client index or client is not in game * On error/errors: Invalid client index or client is not in game
*/ */
native CCC_GetTag(client, String:buffer[], maxlen); native CCC_GetTag(client, String:buffer[], maxlen);
/** /**
* Sets a client's tag * Sets a client's tag
* *
* @param client Client index * @param client Client index
* @param tag String containing the new tag * @param tag String containing the new tag
* @noreturn * @noreturn
* *
* On error/errors: Invalid client index or client is not in game * On error/errors: Invalid client index or client is not in game
*/ */
native CCC_SetTag(client, const String:tag[]); native CCC_SetTag(client, const String:tag[]);
/** /**
* Resets a client's color to the value in the config file. * Resets a client's color to the value in the config file.
* *
* @param client Client index * @param client Client index
* @param type Color type to restore * @param type Color type to restore
* @noreturn * @noreturn
* *
* On error/errors: Invalid client index or client is not in game * On error/errors: Invalid client index or client is not in game
*/ */
native CCC_ResetColor(client, CCC_ColorType:type); native CCC_ResetColor(client, CCC_ColorType:type);
/** /**
* Resets a client's tag to the value in the config file. * Resets a client's tag to the value in the config file.
* *
* @param client Client index * @param client Client index
* @noreturn * @noreturn
* *
* On error/errors: Invalid client index or client is not in game * On error/errors: Invalid client index or client is not in game
*/ */
native CCC_ResetTag(client); native CCC_ResetTag(client);
/** /**
* Called when a cilent's name is about to be colored * Called when a cilent's name is about to be colored
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD * DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
* *
* @param client Client index * @param client Client index
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring * @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
*/ */
#pragma deprecated Use CCC_OnColor instead #pragma deprecated Use CCC_OnColor instead
forward Action:CCC_OnNameColor(client); forward Action:CCC_OnNameColor(client);
/** /**
* Called when a client's chat is about to be colored * Called when a client's chat is about to be colored
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD * DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
* *
* @param client Client index * @param client Client index
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring * @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
*/ */
#pragma deprecated Use CCC_OnColor instead #pragma deprecated Use CCC_OnColor instead
forward Action:CCC_OnChatColor(client); forward Action:CCC_OnChatColor(client);
/** /**
* Called when a client's name is about to be tagged * Called when a client's name is about to be tagged
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD * DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
* *
* @param client Client index * @param client Client index
* @return Plugin_Handled to prevent tagging, Plugin_Continue to allow tagging * @return Plugin_Handled to prevent tagging, Plugin_Continue to allow tagging
*/ */
#pragma deprecated Use CCC_OnColor instead #pragma deprecated Use CCC_OnColor instead
forward Action:CCC_OnTagApplied(client); forward Action:CCC_OnTagApplied(client);
/** /**
* Called when a client's name is about to be tagged * Called when a client's name is about to be tagged
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD * DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
* *
* @param client Client index * @param client Client index
* @param message Chat message that will be printed * @param message Chat message that will be printed
* @param type What type of color will be applied. If this is CCC_TagColor, it controls whether the tag will be applied at all, not whether the tag will be colored. * @param type What type of color will be applied. If this is CCC_TagColor, it controls whether the tag will be applied at all, not whether the tag will be colored.
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring * @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
*/ */
forward Action:CCC_OnColor(client, const String:message[], CCC_ColorType:type); forward Action:CCC_OnColor(client, const String:message[], CCC_ColorType:type);
/** /**
* Called when a message has been fully colored and will be sent, unless further plugins modify it through Simple Chat Processor * Called when a message has been fully colored and will be sent, unless further plugins modify it through Simple Chat Processor
* *
* @param author Author client index * @param author Author client index
* @param message Message * @param message Message
* @param maxlen Maximum length of message buffer * @param maxlen Maximum length of message buffer
* @noreturn * @noreturn
*/ */
forward CCC_OnChatMessage(author, String:message[], maxlen); forward CCC_OnChatMessage(author, String:message[], maxlen);
/** /**
* Called when a client's colors and tag are about to be loaded from the config file * Called when a client's colors and tag are about to be loaded from the config file
* At this point, the client has NO COLORS * At this point, the client has NO COLORS
* *
* @param client Client index * @param client Client index
* @return Plugin_Handled or Plugin_Stop to prevent loading, Plugin_Continue or Plugin_Changed to allow * @return Plugin_Handled or Plugin_Stop to prevent loading, Plugin_Continue or Plugin_Changed to allow
*/ */
forward Action:CCC_OnUserConfigPreLoaded(client); forward Action:CCC_OnUserConfigPreLoaded(client);
/** /**
* Called when a client's colors and tag have been loaded from the config file * Called when a client's colors and tag have been loaded from the config file
* *
* @param client Client index * @param client Client index
* @noreturn * @noreturn
*/ */
forward CCC_OnUserConfigLoaded(client); forward CCC_OnUserConfigLoaded(client);
/** /**
* Called when the configuration file is reloaded with the sm_reloadccc command * Called when the configuration file is reloaded with the sm_reloadccc command
* *
* @noreturn * @noreturn
*/ */
forward CCC_OnConfigReloaded(); forward CCC_OnConfigReloaded();
native void CCC_UpdateIgnoredArray(bool IgnoredArray[(MAXPLAYERS + 1) * (MAXPLAYERS + 1)]); native void CCC_UpdateIgnoredArray(bool IgnoredArray[(MAXPLAYERS + 1) * (MAXPLAYERS + 1)]);
public SharedPlugin:__pl_ccc = { public SharedPlugin:__pl_ccc = {
name = "ccc", name = "ccc",
file = "custom-chatcolors.smx", file = "custom-chatcolors.smx",
#if defined REQUIRE_PLUGIN #if defined REQUIRE_PLUGIN
required = 1 required = 1
#else #else
required = 0 required = 0
#endif #endif
}; };
#if !defined REQUIRE_PLUGIN #if !defined REQUIRE_PLUGIN
public __pl_ccc_SetNTVOptional() { public __pl_ccc_SetNTVOptional() {
MarkNativeAsOptional("CCC_GetColor"); MarkNativeAsOptional("CCC_GetColor");
MarkNativeAsOptional("CCC_SetColor"); MarkNativeAsOptional("CCC_SetColor");
MarkNativeAsOptional("CCC_GetTag"); MarkNativeAsOptional("CCC_GetTag");
MarkNativeAsOptional("CCC_ResetTag"); MarkNativeAsOptional("CCC_ResetTag");
MarkNativeAsOptional("CCC_ResetColor"); MarkNativeAsOptional("CCC_ResetColor");
MarkNativeAsOptional("CCC_ResetTag"); MarkNativeAsOptional("CCC_ResetTag");
MarkNativeAsOptional("CCC_UpdateIgnoredArray"); MarkNativeAsOptional("CCC_UpdateIgnoredArray");
} }
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -1,482 +1,482 @@
#if defined _dhooks_included #if defined _dhooks_included
#endinput #endinput
#endif #endif
#define _dhooks_included #define _dhooks_included
enum ObjectValueType enum ObjectValueType
{ {
ObjectValueType_Int = 0, ObjectValueType_Int = 0,
ObjectValueType_Bool, ObjectValueType_Bool,
ObjectValueType_Ehandle, ObjectValueType_Ehandle,
ObjectValueType_Float, ObjectValueType_Float,
ObjectValueType_CBaseEntityPtr, ObjectValueType_CBaseEntityPtr,
ObjectValueType_IntPtr, ObjectValueType_IntPtr,
ObjectValueType_BoolPtr, ObjectValueType_BoolPtr,
ObjectValueType_EhandlePtr, ObjectValueType_EhandlePtr,
ObjectValueType_FloatPtr, ObjectValueType_FloatPtr,
ObjectValueType_Vector, ObjectValueType_Vector,
ObjectValueType_VectorPtr, ObjectValueType_VectorPtr,
ObjectValueType_CharPtr, ObjectValueType_CharPtr,
ObjectValueType_String ObjectValueType_String
}; };
enum ListenType enum ListenType
{ {
ListenType_Created, ListenType_Created,
ListenType_Deleted ListenType_Deleted
}; };
enum ReturnType enum ReturnType
{ {
ReturnType_Unknown, ReturnType_Unknown,
ReturnType_Void, ReturnType_Void,
ReturnType_Int, ReturnType_Int,
ReturnType_Bool, ReturnType_Bool,
ReturnType_Float, ReturnType_Float,
ReturnType_String, //Note this is a string_t ReturnType_String, //Note this is a string_t
ReturnType_StringPtr, //Note this is a string_t * ReturnType_StringPtr, //Note this is a string_t *
ReturnType_CharPtr, ReturnType_CharPtr,
ReturnType_Vector, ReturnType_Vector,
ReturnType_VectorPtr, ReturnType_VectorPtr,
ReturnType_CBaseEntity, ReturnType_CBaseEntity,
ReturnType_Edict ReturnType_Edict
}; };
enum HookParamType enum HookParamType
{ {
HookParamType_Unknown, HookParamType_Unknown,
HookParamType_Int, HookParamType_Int,
HookParamType_Bool, HookParamType_Bool,
HookParamType_Float, HookParamType_Float,
HookParamType_String, //Note this is a string_t HookParamType_String, //Note this is a string_t
HookParamType_StringPtr, //Note this is a string_t * HookParamType_StringPtr, //Note this is a string_t *
HookParamType_CharPtr, HookParamType_CharPtr,
HookParamType_VectorPtr, HookParamType_VectorPtr,
HookParamType_CBaseEntity, HookParamType_CBaseEntity,
HookParamType_ObjectPtr, HookParamType_ObjectPtr,
HookParamType_Edict, HookParamType_Edict,
HookParamType_Object HookParamType_Object
}; };
enum ThisPointerType enum ThisPointerType
{ {
ThisPointer_Ignore, ThisPointer_Ignore,
ThisPointer_CBaseEntity, ThisPointer_CBaseEntity,
ThisPointer_Address ThisPointer_Address
}; };
enum HookType enum HookType
{ {
HookType_Entity, HookType_Entity,
HookType_GameRules, HookType_GameRules,
HookType_Raw HookType_Raw
}; };
enum MRESReturn enum MRESReturn
{ {
MRES_ChangedHandled = -2, // Use changed values and return MRES_Handled MRES_ChangedHandled = -2, // Use changed values and return MRES_Handled
MRES_ChangedOverride, // Use changed values and return MRES_Override MRES_ChangedOverride, // Use changed values and return MRES_Override
MRES_Ignored, // plugin didn't take any action MRES_Ignored, // plugin didn't take any action
MRES_Handled, // plugin did something, but real function should still be called MRES_Handled, // plugin did something, but real function should still be called
MRES_Override, // call real function, but use my return value MRES_Override, // call real function, but use my return value
MRES_Supercede // skip real function; use my return value MRES_Supercede // skip real function; use my return value
}; };
enum DHookPassFlag enum DHookPassFlag
{ {
DHookPass_ByVal = (1<<0), DHookPass_ByVal = (1<<0),
DHookPass_ByRef = (1<<1) DHookPass_ByRef = (1<<1)
}; };
typeset ListenCB typeset ListenCB
{ {
//Deleted //Deleted
function void (int entity); function void (int entity);
//Created //Created
function void (int entity, const char[] classname); function void (int entity, const char[] classname);
}; };
typeset DHookRemovalCB typeset DHookRemovalCB
{ {
function void (int hookid); function void (int hookid);
}; };
typeset DHookCallback typeset DHookCallback
{ {
//Function Example: void Ham::Test() with this pointer ignore //Function Example: void Ham::Test() with this pointer ignore
function MRESReturn (); function MRESReturn ();
//Function Example: void Ham::Test() with this pointer passed //Function Example: void Ham::Test() with this pointer passed
function MRESReturn (int pThis); function MRESReturn (int pThis);
//Function Example: void Ham::Test(int cake) with this pointer ignore //Function Example: void Ham::Test(int cake) with this pointer ignore
function MRESReturn (Handle hParams); function MRESReturn (Handle hParams);
//Function Example: void Ham::Test(int cake) with this pointer passed //Function Example: void Ham::Test(int cake) with this pointer passed
function MRESReturn (int pThis, Handle hParams); function MRESReturn (int pThis, Handle hParams);
//Function Example: int Ham::Test() with this pointer ignore //Function Example: int Ham::Test() with this pointer ignore
function MRESReturn (Handle hReturn); function MRESReturn (Handle hReturn);
//Function Example: int Ham::Test() with this pointer passed //Function Example: int Ham::Test() with this pointer passed
function MRESReturn (int pThis, Handle hReturn); function MRESReturn (int pThis, Handle hReturn);
//Function Example: int Ham::Test(int cake) with this pointer ignore //Function Example: int Ham::Test(int cake) with this pointer ignore
function MRESReturn (Handle hReturn, Handle hParams); function MRESReturn (Handle hReturn, Handle hParams);
//Function Example: int Ham::Test(int cake) with this pointer passed //Function Example: int Ham::Test(int cake) with this pointer passed
function MRESReturn (int pThis, Handle hReturn, Handle hParams); function MRESReturn (int pThis, Handle hReturn, Handle hParams);
//Address NOW //Address NOW
//Function Example: void Ham::Test() with this pointer passed //Function Example: void Ham::Test() with this pointer passed
function MRESReturn (Address pThis); function MRESReturn (Address pThis);
//Function Example: void Ham::Test(int cake) with this pointer passed //Function Example: void Ham::Test(int cake) with this pointer passed
function MRESReturn (Address pThis, Handle hParams); function MRESReturn (Address pThis, Handle hParams);
//Function Example: int Ham::Test() with this pointer passed //Function Example: int Ham::Test() with this pointer passed
function MRESReturn (Address pThis, Handle hReturn); function MRESReturn (Address pThis, Handle hReturn);
//Function Example: int Ham::Test(int cake) with this pointer passed //Function Example: int Ham::Test(int cake) with this pointer passed
function MRESReturn (Address pThis, Handle hReturn, Handle hParams); function MRESReturn (Address pThis, Handle hReturn, Handle hParams);
}; };
/* Adds an entity listener hook /* Adds an entity listener hook
* *
* @param type Type of listener to add * @param type Type of listener to add
* @param callback Callback to use * @param callback Callback to use
* *
* @noreturn * @noreturn
*/ */
native void DHookAddEntityListener(ListenType type, ListenCB callback); native void DHookAddEntityListener(ListenType type, ListenCB callback);
/* Removes an entity listener hook /* Removes an entity listener hook
* *
* @param type Type of listener to remove * @param type Type of listener to remove
* @param callback Callback this listener was using * @param callback Callback this listener was using
* *
* @return True if one was removed false otherwise. * @return True if one was removed false otherwise.
*/ */
native bool DHookRemoveEntityListener(ListenType type, ListenCB callback); native bool DHookRemoveEntityListener(ListenType type, ListenCB callback);
/* Creates a hook /* Creates a hook
* *
* @param offset vtable offset for function to hook * @param offset vtable offset for function to hook
* @param hooktype Type of hook * @param hooktype Type of hook
* @param returntype Type type of return * @param returntype Type type of return
* @param thistype Type of this pointer or ignore (ignore can be used if not needed) * @param thistype Type of this pointer or ignore (ignore can be used if not needed)
* @param callback Callback function * @param callback Callback function
* *
* @return Returns setup handle for the hook or INVALID_HANDLE. * @return Returns setup handle for the hook or INVALID_HANDLE.
*/ */
native Handle DHookCreate(int offset, HookType hooktype, ReturnType returntype, ThisPointerType thistype, DHookCallback callback); native Handle DHookCreate(int offset, HookType hooktype, ReturnType returntype, ThisPointerType thistype, DHookCallback callback);
/* Adds param to a hook setup /* Adds param to a hook setup
* *
* @param setup Setup handle to add the param to. * @param setup Setup handle to add the param to.
* @param type Param type * @param type Param type
* @param size Used for Objects (not Object ptr) to define the size of the object. * @param size Used for Objects (not Object ptr) to define the size of the object.
* @param flag Used to change the pass type. * @param flag Used to change the pass type.
* *
* @error Invalid setup handle or too many params added (request upping the max in thread) * @error Invalid setup handle or too many params added (request upping the max in thread)
* @noreturn * @noreturn
*/ */
native void DHookAddParam(Handle setup, HookParamType type, int size=-1, DHookPassFlag flag=DHookPass_ByVal); native void DHookAddParam(Handle setup, HookParamType type, int size=-1, DHookPassFlag flag=DHookPass_ByVal);
//native DHookAddParam(Handle:setup, HookParamType:type); //native DHookAddParam(Handle:setup, HookParamType:type);
/* Hook entity /* Hook entity
* *
* @param setup Setup handle to use to add the hook. * @param setup Setup handle to use to add the hook.
* @param post True to make the hook a post hook. (If you need to change the retunr value or need the return value use a post hook! If you need to change params and return use a pre and post hook!) * @param post True to make the hook a post hook. (If you need to change the retunr value or need the return value use a post hook! If you need to change params and return use a pre and post hook!)
* @param entity Entity index to hook on. * @param entity Entity index to hook on.
* @param removalcb Callback for when the hook is removed (Entity hooks are auto-removed on entity destroyed and will call this callback) * @param removalcb Callback for when the hook is removed (Entity hooks are auto-removed on entity destroyed and will call this callback)
* *
* @error Invalid setup handle, invalid entity or invalid hook type. * @error Invalid setup handle, invalid entity or invalid hook type.
* @return -1 on fail a hookid on success * @return -1 on fail a hookid on success
*/ */
native int DHookEntity(Handle setup, bool post, int entity, DHookRemovalCB removalcb=INVALID_FUNCTION); native int DHookEntity(Handle setup, bool post, int entity, DHookRemovalCB removalcb=INVALID_FUNCTION);
/* Hook gamerules /* Hook gamerules
* *
* @param setup Setup handle to use to add the hook. * @param setup Setup handle to use to add the hook.
* @param post True to make the hook a post hook. (If you need to change the retunr value or need the return value use a post hook! If you need to change params and return use a pre and post hook!) * @param post True to make the hook a post hook. (If you need to change the retunr value or need the return value use a post hook! If you need to change params and return use a pre and post hook!)
* @param removalcb Callback for when the hook is removed (Game rules hooks are auto-removed on map end and will call this callback) * @param removalcb Callback for when the hook is removed (Game rules hooks are auto-removed on map end and will call this callback)
* *
* @error Invalid setup handle, failing to get gamerules pointer or invalid hook type. * @error Invalid setup handle, failing to get gamerules pointer or invalid hook type.
* @return -1 on fail a hookid on success * @return -1 on fail a hookid on success
*/ */
native int DHookGamerules(Handle setup, bool post, DHookRemovalCB removalcb=INVALID_FUNCTION); native int DHookGamerules(Handle setup, bool post, DHookRemovalCB removalcb=INVALID_FUNCTION);
/* Hook a raw pointer /* Hook a raw pointer
* *
* @param setup Setup handle to use to add the hook. * @param setup Setup handle to use to add the hook.
* @param post True to make the hook a post hook. (If you need to change the retunr value or need the return value use a post hook! If you need to change params and return use a pre and post hook!) * @param post True to make the hook a post hook. (If you need to change the retunr value or need the return value use a post hook! If you need to change params and return use a pre and post hook!)
* @param addr This pointer address. * @param addr This pointer address.
* @param removalcb Callback for when the hook is removed (Entity hooks are auto-removed on entity destroyed and will call this callback) * @param removalcb Callback for when the hook is removed (Entity hooks are auto-removed on entity destroyed and will call this callback)
* *
* @error Invalid setup handle, invalid address or invalid hook type. * @error Invalid setup handle, invalid address or invalid hook type.
* @return -1 on fail a hookid on success * @return -1 on fail a hookid on success
*/ */
native int DHookRaw(Handle setup, bool post, Address addr, DHookRemovalCB removalcb=INVALID_FUNCTION); native int DHookRaw(Handle setup, bool post, Address addr, DHookRemovalCB removalcb=INVALID_FUNCTION);
/* Remove hook by hook id /* Remove hook by hook id
* *
* @param hookid Hook id to remove * @param hookid Hook id to remove
* *
* @return true on success false otherwise * @return true on success false otherwise
* @note This will not fire the removal callback! * @note This will not fire the removal callback!
*/ */
native bool DHookRemoveHookID(int hookid); native bool DHookRemoveHookID(int hookid);
/* Get param value (Only use for: int, entity, bool or float param types) /* Get param value (Only use for: int, entity, bool or float param types)
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1. 0 Will return the number of params stored) * @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1. 0 Will return the number of params stored)
* *
* @error Invalid handle. Invalid param number. Invalid param type. * @error Invalid handle. Invalid param number. Invalid param type.
* @return value if num greater than 0. If 0 returns paramcount. * @return value if num greater than 0. If 0 returns paramcount.
*/ */
native any DHookGetParam(Handle hParams, int num); native any DHookGetParam(Handle hParams, int num);
/* Get vector param value /* Get vector param value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1.) * @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1.)
* @param vec Vector buffer to store result. * @param vec Vector buffer to store result.
* *
* @error Invalid handle. Invalid param number. Invalid param type. * @error Invalid handle. Invalid param number. Invalid param type.
* @noreturn * @noreturn
*/ */
native void DHookGetParamVector(Handle hParams, int num, float vec[3]); native void DHookGetParamVector(Handle hParams, int num, float vec[3]);
/* Get string param value /* Get string param value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1.) * @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1.)
* @param buffer String buffer to store result * @param buffer String buffer to store result
* @param size Buffer size * @param size Buffer size
* *
* @error Invalid handle. Invalid param number. Invalid param type. * @error Invalid handle. Invalid param number. Invalid param type.
* @noreturn * @noreturn
*/ */
native void DHookGetParamString(Handle hParams, int num, char[] buffer, int size); native void DHookGetParamString(Handle hParams, int num, char[] buffer, int size);
/* Set param value (Only use for: int, entity, bool or float param types) /* Set param value (Only use for: int, entity, bool or float param types)
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @params num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.) * @params num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.)
* @param value Value to set it as (only pass int, bool, float or entity index) * @param value Value to set it as (only pass int, bool, float or entity index)
* *
* @error Invalid handle. Invalid param number. Invalid param type. * @error Invalid handle. Invalid param number. Invalid param type.
* @noreturn * @noreturn
*/ */
native void DHookSetParam(Handle hParams, int num, any value); native void DHookSetParam(Handle hParams, int num, any value);
/* Set vector param value /* Set vector param value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @params num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.) * @params num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.)
* @param vec Value to set vector as. * @param vec Value to set vector as.
* *
* @error Invalid handle. Invalid param number. Invalid param type. * @error Invalid handle. Invalid param number. Invalid param type.
* @noreturn * @noreturn
*/ */
native void DHookSetParamVector(Handle hParams, int num, float vec[3]); native void DHookSetParamVector(Handle hParams, int num, float vec[3]);
/* Set string param value /* Set string param value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @params num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.) * @params num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.)
* @param value Value to set string as. * @param value Value to set string as.
* *
* @error Invalid handle. Invalid param number. Invalid param type. * @error Invalid handle. Invalid param number. Invalid param type.
* @noreturn * @noreturn
*/ */
native void DHookSetParamString(Handle hParams, int num, char[] value); native void DHookSetParamString(Handle hParams, int num, char[] value);
/* Get return value (Only use for: int, entity, bool or float return types) /* Get return value (Only use for: int, entity, bool or float return types)
* *
* @param hReturn Handle to return structure * @param hReturn Handle to return structure
* *
* @error Invalid Handle, invalid type. * @error Invalid Handle, invalid type.
* @return Returns default value if prehook returns actual value if post hook. * @return Returns default value if prehook returns actual value if post hook.
*/ */
native any DHookGetReturn(Handle hReturn); native any DHookGetReturn(Handle hReturn);
/* Get return vector value /* Get return vector value
* *
* @param hReturn Handle to return structure * @param hReturn Handle to return structure
* @param vec Vector buffer to store result in. (In pre hooks will be default value (0.0,0.0,0.0)) * @param vec Vector buffer to store result in. (In pre hooks will be default value (0.0,0.0,0.0))
* *
* @error Invalid Handle, invalid type. * @error Invalid Handle, invalid type.
* @noreturn * @noreturn
*/ */
native void DHookGetReturnVector(Handle hReturn, float vec[3]); native void DHookGetReturnVector(Handle hReturn, float vec[3]);
/* Get return string value /* Get return string value
* *
* @param hReturn Handle to return structure * @param hReturn Handle to return structure
* @param buffer String buffer to store result in. (In pre hooks will be default value "") * @param buffer String buffer to store result in. (In pre hooks will be default value "")
* @param size String buffer size * @param size String buffer size
* *
* @error Invalid Handle, invalid type. * @error Invalid Handle, invalid type.
* @noreturn * @noreturn
*/ */
native void DHookGetReturnString(Handle hReturn, char[] buffer, int size); native void DHookGetReturnString(Handle hReturn, char[] buffer, int size);
/* Set return value (Only use for: int, entity, bool or float return types) /* Set return value (Only use for: int, entity, bool or float return types)
* *
* @param hReturn Handle to return structure * @param hReturn Handle to return structure
* @param value Value to set return as * @param value Value to set return as
* *
* @error Invalid Handle, invalid type. * @error Invalid Handle, invalid type.
* @noreturn * @noreturn
*/ */
native void DHookSetReturn(Handle hReturn, any value); native void DHookSetReturn(Handle hReturn, any value);
/* Set return vector value /* Set return vector value
* *
* @param hReturn Handle to return structure * @param hReturn Handle to return structure
* @param vec Value to set return vector as * @param vec Value to set return vector as
* *
* @error Invalid Handle, invalid type. * @error Invalid Handle, invalid type.
* @noreturn * @noreturn
*/ */
native void DHookSetReturnVector(Handle hReturn, float vec[3]); native void DHookSetReturnVector(Handle hReturn, float vec[3]);
/* Set return string value /* Set return string value
* *
* @param hReturn Handle to return structure * @param hReturn Handle to return structure
* @param value Value to set return string as * @param value Value to set return string as
* *
* @error Invalid Handle, invalid type. * @error Invalid Handle, invalid type.
* @noreturn * @noreturn
*/ */
native void DHookSetReturnString(Handle hReturn, char[] value); native void DHookSetReturnString(Handle hReturn, char[] value);
//WE SHOULD WRAP THESE AROUND STOCKS FOR NON PTR AS WE SUPPORT BOTH WITH THESE NATIVE'S //WE SHOULD WRAP THESE AROUND STOCKS FOR NON PTR AS WE SUPPORT BOTH WITH THESE NATIVE'S
/* Gets an objects variable value /* Gets an objects variable value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to get. * @param num Param number to get.
* @param offset Offset within the object to the var to get. * @param offset Offset within the object to the var to get.
* @param type Type of var it is * @param type Type of var it is
* *
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type. * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
* @return Value of the objects var. If EHANDLE type or entity returns entity index. * @return Value of the objects var. If EHANDLE type or entity returns entity index.
*/ */
native any DHookGetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type); native any DHookGetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type);
/* Sets an objects variable value /* Sets an objects variable value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to set. * @param num Param number to set.
* @param offset Offset within the object to the var to set. * @param offset Offset within the object to the var to set.
* @param type Type of var it is * @param type Type of var it is
* @param value The value to set the var to. * @param value The value to set the var to.
* *
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type. * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
* @noreturn * @noreturn
*/ */
native void DHookSetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type, any value); native void DHookSetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type, any value);
/* Gets an objects vector variable value /* Gets an objects vector variable value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to get. * @param num Param number to get.
* @param offset Offset within the object to the var to get. * @param offset Offset within the object to the var to get.
* @param type Type of var it is * @param type Type of var it is
* @param buffer Buffer to store the result vector * @param buffer Buffer to store the result vector
* *
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type. * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
* @noreturn * @noreturn
*/ */
native void DHookGetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float buffer[3]); native void DHookGetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float buffer[3]);
/* Sets an objects vector variable value /* Sets an objects vector variable value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to set. * @param num Param number to set.
* @param offset Offset within the object to the var to set. * @param offset Offset within the object to the var to set.
* @param type Type of var it is * @param type Type of var it is
* @param value The value to set the vector var to. * @param value The value to set the vector var to.
* *
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type. * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
* @noreturn * @noreturn
*/ */
native void DHookSetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float value[3]); native void DHookSetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float value[3]);
/* Gets an objects string variable value /* Gets an objects string variable value
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to get. * @param num Param number to get.
* @param offset Offset within the object to the var to get. * @param offset Offset within the object to the var to get.
* @param type Type of var it is * @param type Type of var it is
* @param buffer Buffer to store the result vector * @param buffer Buffer to store the result vector
* @param size Size of the buffer * @param size Size of the buffer
* *
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type. * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
* @noreturn * @noreturn
*/ */
native void DHookGetParamObjectPtrString(Handle hParams, int num, int offset, ObjectValueType type, char[] buffer, int size); native void DHookGetParamObjectPtrString(Handle hParams, int num, int offset, ObjectValueType type, char[] buffer, int size);
/* Checks if a pointer param is null /* Checks if a pointer param is null
* *
* @param hParams Handle to params structure * @param hParams Handle to params structure
* @param num Param number to check. * @param num Param number to check.
* *
* @error Non pointer param * @error Non pointer param
* @return True if null false otherwise. * @return True if null false otherwise.
*/ */
native bool DHookIsNullParam(Handle hParams, int num); native bool DHookIsNullParam(Handle hParams, int num);
public Extension __ext_dhooks = public Extension __ext_dhooks =
{ {
name = "dhooks", name = "dhooks",
file = "dhooks.ext", file = "dhooks.ext",
#if defined AUTOLOAD_EXTENSIONS #if defined AUTOLOAD_EXTENSIONS
autoload = 1, autoload = 1,
#else #else
autoload = 0, autoload = 0,
#endif #endif
#if defined REQUIRE_EXTENSIONS #if defined REQUIRE_EXTENSIONS
required = 1, required = 1,
#else #else
required = 0, required = 0,
#endif #endif
}; };
#if !defined REQUIRE_EXTENSIONS #if !defined REQUIRE_EXTENSIONS
public __ext_dhooks_SetNTVOptional() public __ext_dhooks_SetNTVOptional()
{ {
MarkNativeAsOptional("DHookAddEntityListener"); MarkNativeAsOptional("DHookAddEntityListener");
MarkNativeAsOptional("DHookRemoveEntityListener"); MarkNativeAsOptional("DHookRemoveEntityListener");
MarkNativeAsOptional("DHookCreate"); MarkNativeAsOptional("DHookCreate");
MarkNativeAsOptional("DHookAddParam"); MarkNativeAsOptional("DHookAddParam");
MarkNativeAsOptional("DHookEntity"); MarkNativeAsOptional("DHookEntity");
MarkNativeAsOptional("DHookGamerules"); MarkNativeAsOptional("DHookGamerules");
MarkNativeAsOptional("DHookRaw"); MarkNativeAsOptional("DHookRaw");
MarkNativeAsOptional("DHookRemoveHookID"); MarkNativeAsOptional("DHookRemoveHookID");
MarkNativeAsOptional("DHookGetParam"); MarkNativeAsOptional("DHookGetParam");
MarkNativeAsOptional("DHookGetParamVector"); MarkNativeAsOptional("DHookGetParamVector");
MarkNativeAsOptional("DHookGetParamString"); MarkNativeAsOptional("DHookGetParamString");
MarkNativeAsOptional("DHookSetParam"); MarkNativeAsOptional("DHookSetParam");
MarkNativeAsOptional("DHookSetParamVector"); MarkNativeAsOptional("DHookSetParamVector");
MarkNativeAsOptional("DHookSetParamString"); MarkNativeAsOptional("DHookSetParamString");
MarkNativeAsOptional("DHookGetReturn"); MarkNativeAsOptional("DHookGetReturn");
MarkNativeAsOptional("DHookGetReturnVector"); MarkNativeAsOptional("DHookGetReturnVector");
MarkNativeAsOptional("DHookGetReturnString"); MarkNativeAsOptional("DHookGetReturnString");
MarkNativeAsOptional("DHookSetReturn"); MarkNativeAsOptional("DHookSetReturn");
MarkNativeAsOptional("DHookSetReturnVector"); MarkNativeAsOptional("DHookSetReturnVector");
MarkNativeAsOptional("DHookSetReturnString"); MarkNativeAsOptional("DHookSetReturnString");
MarkNativeAsOptional("DHookGetParamObjectPtrVar"); MarkNativeAsOptional("DHookGetParamObjectPtrVar");
MarkNativeAsOptional("DHookSetParamObjectPtrVar"); MarkNativeAsOptional("DHookSetParamObjectPtrVar");
MarkNativeAsOptional("DHookGetParamObjectPtrVarVector"); MarkNativeAsOptional("DHookGetParamObjectPtrVarVector");
MarkNativeAsOptional("DHookSetParamObjectPtrVarVector"); MarkNativeAsOptional("DHookSetParamObjectPtrVarVector");
MarkNativeAsOptional("DHookIsNullParam"); MarkNativeAsOptional("DHookIsNullParam");
MarkNativeAsOptional("DHookGetParamObjectPtrString"); MarkNativeAsOptional("DHookGetParamObjectPtrString");
} }
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,21 @@
ar_baggage ar_baggage
ar_monastery ar_monastery
ar_shoots ar_shoots
cs_assault cs_assault
cs_italy cs_italy
cs_militia cs_militia
cs_office cs_office
de_aztec de_aztec
de_bank de_bank
de_dust de_dust
de_dust2 de_dust2
de_inferno de_inferno
de_lake de_lake
de_mirage de_mirage
de_nuke de_nuke
de_safehouse de_safehouse
de_shorttrain de_shorttrain
de_stmarc de_stmarc
de_sugarcane de_sugarcane
de_train de_train
de_vertigo de_vertigo

View File

@ -1,28 +1,28 @@
as_oilrig as_oilrig
cs_747 cs_747
cs_assault cs_assault
cs_backalley cs_backalley
cs_compound cs_compound
cs_estate cs_estate
cs_havana cs_havana
cs_italy cs_italy
cs_militia cs_militia
cs_office cs_office
cs_siege cs_siege
de_airstrip de_airstrip
de_aztec de_aztec
de_cbble de_cbble
de_chateau de_chateau
de_dust2 de_dust2
de_dust de_dust
de_inferno de_inferno
de_nuke de_nuke
de_piranesi de_piranesi
de_port de_port
de_prodigy de_prodigy
de_storm de_storm
de_survivor de_survivor
de_tides de_tides
de_torn de_torn
de_train de_train
de_vertigo de_vertigo

View File

@ -1,9 +1,9 @@
dod_anzio dod_anzio
dod_argentan dod_argentan
dod_avalanche dod_avalanche
dod_colmar dod_colmar
dod_donner dod_donner
dod_flash dod_flash
dod_jagd dod_jagd
dod_kalt dod_kalt
dod_palermo dod_palermo

View File

@ -1,7 +1,7 @@
dm_lockdown dm_lockdown
dm_overwatch dm_overwatch
dm_runoff dm_runoff
dm_steamlab dm_steamlab
dm_underpass dm_underpass
dm_resistance dm_resistance
dm_powerhouse dm_powerhouse

View File

@ -1,65 +1,65 @@
tc_hydro tc_hydro
cp_well cp_well
cp_granary cp_granary
cp_dustbowl cp_dustbowl
cp_gravelpit cp_gravelpit
ctf_2fort ctf_2fort
ctf_well ctf_well
cp_badlands cp_badlands
pl_goldrush pl_goldrush
cp_fastlane cp_fastlane
ctf_turbine ctf_turbine
pl_badwater pl_badwater
cp_steel cp_steel
arena_badlands arena_badlands
arena_granary arena_granary
arena_lumberyard arena_lumberyard
arena_ravine arena_ravine
arena_well arena_well
cp_egypt_final cp_egypt_final
cp_junction_final cp_junction_final
arena_watchtower arena_watchtower
plr_pipeline plr_pipeline
arena_sawmill arena_sawmill
arena_nucleus arena_nucleus
pl_hoodoo_final pl_hoodoo_final
koth_sawmill koth_sawmill
koth_nucleus koth_nucleus
koth_viaduct koth_viaduct
ctf_sawmill ctf_sawmill
arena_offblast_final arena_offblast_final
cp_yukon_final cp_yukon_final
koth_harvest_final koth_harvest_final
koth_harvest_event koth_harvest_event
ctf_doublecross ctf_doublecross
cp_gorge cp_gorge
cp_freight_final1 cp_freight_final1
pl_upward pl_upward
plr_hightower plr_hightower
pl_thundermountain pl_thundermountain
cp_coldfront cp_coldfront
cp_mountainlab cp_mountainlab
cp_manor_event cp_manor_event
cp_degrootkeep cp_degrootkeep
cp_5gorge cp_5gorge
pl_frontier_final pl_frontier_final
plr_nightfall_final plr_nightfall_final
koth_lakeside_final koth_lakeside_final
koth_badlands koth_badlands
pl_barnblitz pl_barnblitz
cp_gullywash_final1 cp_gullywash_final1
koth_viaduct_event koth_viaduct_event
cp_foundry cp_foundry
sd_doomsday sd_doomsday
koth_king koth_king
mvm_mannworks mvm_mannworks
mvm_coaltown mvm_coaltown
mvm_decoy mvm_decoy
koth_lakeside_event koth_lakeside_event
mvm_bigrock mvm_bigrock
cp_process_final cp_process_final
cp_standin_final cp_standin_final
plr_hightower_event plr_hightower_event
cp_snakewater_final1 cp_snakewater_final1
mvm_mannhattan mvm_mannhattan
mvm_rottenburg mvm_rottenburg

View File

@ -1,77 +1,77 @@
"MapchooserSoundsList" "MapchooserSoundsList"
{ {
"tf" "tf"
{ {
"counter" "counter"
{ {
"1" "1"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_begins_1sec.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_begins_1sec.mp3"
"builtin" "vo/announcer_begins_1sec.wav" "builtin" "vo/announcer_begins_1sec.wav"
"event" "Announcer.RoundBegins1Seconds" "event" "Announcer.RoundBegins1Seconds"
} }
"2" "2"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_begins_2sec.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_begins_2sec.mp3"
"builtin" "vo/announcer_begins_2sec.wav" "builtin" "vo/announcer_begins_2sec.wav"
"event" "Announcer.RoundBegins2Seconds" "event" "Announcer.RoundBegins2Seconds"
} }
"3" "3"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_begins_3sec.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_begins_3sec.mp3"
"builtin" "vo/announcer_begins_3sec.wav" "builtin" "vo/announcer_begins_3sec.wav"
"event" "Announcer.RoundBegins3Seconds" "event" "Announcer.RoundBegins3Seconds"
} }
"4" "4"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_begins_4sec.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_begins_4sec.mp3"
"builtin" "vo/announcer_begins_4sec.wav" "builtin" "vo/announcer_begins_4sec.wav"
"event" "Announcer.RoundBegins4Seconds" "event" "Announcer.RoundBegins4Seconds"
} }
"5" "5"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_begins_5sec.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_begins_5sec.mp3"
"builtin" "vo/announcer_begins_5sec.wav" "builtin" "vo/announcer_begins_5sec.wav"
"event" "Announcer.RoundBegins5Seconds" "event" "Announcer.RoundBegins5Seconds"
} }
"10" "10"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins10s01.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins10s01.mp3"
"builtin" "vo/announcer_dec_missionbegins10s01.wav" "builtin" "vo/announcer_dec_missionbegins10s01.wav"
} }
"30" "30"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins30s01.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins30s01.mp3"
"builtin" "vo/announcer_dec_missionbegins30s01.wav" "builtin" "vo/announcer_dec_missionbegins30s01.wav"
} }
"60" "60"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins60s06.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins60s06.mp3"
"builtin" "vo/announcer_dec_missionbegins60s06.wav" "builtin" "vo/announcer_dec_missionbegins60s06.wav"
} }
} }
"vote start" "vote start"
{ {
"sound" "sourcemod/mapchooser/tf2/vote_started.mp3" "sound" "sourcemod/mapchooser/tf2/vote_started.mp3"
"event" "Vote.Created" "event" "Vote.Created"
"builtin" "ui/vote_started.wav" "builtin" "ui/vote_started.wav"
} }
"vote end" "vote end"
{ {
"sound" "sourcemod/mapchooser/tf2/vote_success.mp3" "sound" "sourcemod/mapchooser/tf2/vote_success.mp3"
"event" "Vote.Passed" "event" "Vote.Passed"
"builtin" "ui/vote_success.wav" "builtin" "ui/vote_success.wav"
} }
"vote warning" "vote warning"
{ {
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins60s03.mp3" "sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins60s03.mp3"
"builtin" "vo/announcer_dec_missionbegins60s03.wav" "builtin" "vo/announcer_dec_missionbegins60s03.wav"
} }
"runoff warning" "runoff warning"
{ {
"sound" "sourcemod/mapchooser/tf2/vote_failure.mp3" "sound" "sourcemod/mapchooser/tf2/vote_failure.mp3"
"event" "Vote.Failed" "event" "Vote.Failed"
"builtin" "ui/vote_failure.wav" "builtin" "ui/vote_failure.wav"
} }
} }
} }

View File

@ -1,108 +1,108 @@
/** /**
* vim: set ts=4 : * vim: set ts=4 :
* ============================================================================= * =============================================================================
* MapChooser Extended * MapChooser Extended
* Creates a map vote at appropriate times, setting sm_nextmap to the winning * Creates a map vote at appropriate times, setting sm_nextmap to the winning
* vote * vote
* *
* MapChooser Extended (C)2011-2013 Powerlord (Ross Bemrose) * MapChooser Extended (C)2011-2013 Powerlord (Ross Bemrose)
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
* ============================================================================= * =============================================================================
* *
* This program is free software; you can redistribute it and/or modify it under * This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, version 3.0, as published by the * the terms of the GNU General Public License, version 3.0, as published by the
* Free Software Foundation. * Free Software Foundation.
* *
* This program is distributed in the hope that it will be useful, but WITHOUT * This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details. * details.
* *
* You should have received a copy of the GNU General Public License along with * You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
* *
* As a special exception, AlliedModders LLC gives you permission to link the * As a special exception, AlliedModders LLC gives you permission to link the
* code of this program (as well as its derivative works) to "Half-Life 2," the * code of this program (as well as its derivative works) to "Half-Life 2," the
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
* by the Valve Corporation. You must obey the GNU General Public License in * by the Valve Corporation. You must obey the GNU General Public License in
* all respects for all other code used. Additionally, AlliedModders LLC grants * all respects for all other code used. Additionally, AlliedModders LLC grants
* this exception to all derivative works. AlliedModders LLC defines further * this exception to all derivative works. AlliedModders LLC defines further
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
* or <http://www.sourcemod.net/license.php>. * or <http://www.sourcemod.net/license.php>.
* *
* Version: $Id$ * Version: $Id$
*/ */
#if defined _mapchooser_extended_included_ #if defined _mapchooser_extended_included_
#endinput #endinput
#endif #endif
#define _mapchooser_extended_included_ #define _mapchooser_extended_included_
#include <mapchooser> #include <mapchooser>
// MCE 1.9 series // MCE 1.9 series
enum CanNominateResult enum CanNominateResult
{ {
CanNominate_No_VoteFull, /** No, nominations list is full */ CanNominate_No_VoteFull, /** No, nominations list is full */
CanNominate_No_VoteInProgress, /** No, map vote is in progress */ CanNominate_No_VoteInProgress, /** No, map vote is in progress */
CanNominate_No_VoteComplete, /** No, map vote is completed */ CanNominate_No_VoteComplete, /** No, map vote is completed */
CanNominate_Yes, /** Yes, you can nominate */ CanNominate_Yes, /** Yes, you can nominate */
}; };
/** /**
* Called whenever warning timer starts * Called whenever warning timer starts
* *
*/ */
forward OnMapVoteWarningStart(); forward OnMapVoteWarningStart();
/** /**
* Called whenever runoff warning timer starts * Called whenever runoff warning timer starts
*/ */
forward OnMapVoteRunnoffWarningStart(); forward OnMapVoteRunnoffWarningStart();
/** /**
* Called whenever the timer ticks * Called whenever the timer ticks
*/ */
forward OnMapVoteWarningTick(time); forward OnMapVoteWarningTick(time);
/** /**
* Called whenever vote starts * Called whenever vote starts
* *
* @deprecated Will be removed in MapChooser 1.8. Use OnMapVoteStarted instead. * @deprecated Will be removed in MapChooser 1.8. Use OnMapVoteStarted instead.
*/ */
forward OnMapVoteStart(); forward OnMapVoteStart();
/** /**
* Called whenever vote ends * Called whenever vote ends
*/ */
forward OnMapVoteEnd(const String:map[]); forward OnMapVoteEnd(const String:map[]);
/** /**
* Is a map on the current game's official list? * Is a map on the current game's official list?
* This should be treated as informative only. * This should be treated as informative only.
* *
* @param map Name of map to check * @param map Name of map to check
* @return true if it's on the list of official maps for this game * @return true if it's on the list of official maps for this game
*/ */
native bool:IsMapOfficial(const String:map[]); native bool:IsMapOfficial(const String:map[]);
/** /**
* Is nominate allowed? * Is nominate allowed?
* *
* @return A CanNominateResult corresponding to whether a vote is allowed or not * @return A CanNominateResult corresponding to whether a vote is allowed or not
*/ */
native CanNominateResult:CanNominate(); native CanNominateResult:CanNominate();
native bool:ExcludeMap(const String:map[]); native bool:ExcludeMap(const String:map[]);
public SharedPlugin:__pl_mapchooser_extended = public SharedPlugin:__pl_mapchooser_extended =
{ {
name = "mapchooser", name = "mapchooser",
file = "mapchooser_extended.smx", file = "mapchooser_extended.smx",
#if defined REQUIRE_PLUGIN #if defined REQUIRE_PLUGIN
required = 1, required = 1,
#else #else
required = 0, required = 0,
#endif #endif
}; };

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,378 +1,378 @@
/** /**
* vim: set ts=4 : * vim: set ts=4 :
* ============================================================================= * =============================================================================
* Rock The Vote Extended * Rock The Vote Extended
* Creates a map vote when the required number of players have requested one. * Creates a map vote when the required number of players have requested one.
* *
* Rock The Vote Extended (C)2012-2013 Powerlord (Ross Bemrose) * Rock The Vote Extended (C)2012-2013 Powerlord (Ross Bemrose)
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
* ============================================================================= * =============================================================================
* *
* This program is free software; you can redistribute it and/or modify it under * This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, version 3.0, as published by the * the terms of the GNU General Public License, version 3.0, as published by the
* Free Software Foundation. * Free Software Foundation.
* *
* This program is distributed in the hope that it will be useful, but WITHOUT * This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details. * details.
* *
* You should have received a copy of the GNU General Public License along with * You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
* *
* As a special exception, AlliedModders LLC gives you permission to link the * As a special exception, AlliedModders LLC gives you permission to link the
* code of this program (as well as its derivative works) to "Half-Life 2," the * code of this program (as well as its derivative works) to "Half-Life 2," the
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
* by the Valve Corporation. You must obey the GNU General Public License in * by the Valve Corporation. You must obey the GNU General Public License in
* all respects for all other code used. Additionally, AlliedModders LLC grants * all respects for all other code used. Additionally, AlliedModders LLC grants
* this exception to all derivative works. AlliedModders LLC defines further * this exception to all derivative works. AlliedModders LLC defines further
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
* or <http://www.sourcemod.net/license.php>. * or <http://www.sourcemod.net/license.php>.
* *
* Version: $Id$ * Version: $Id$
*/ */
#include <sourcemod> #include <sourcemod>
#include <sdktools> #include <sdktools>
#include <sdkhooks> #include <sdkhooks>
#include <mapchooser> #include <mapchooser>
#include "include/mapchooser_extended" #include "include/mapchooser_extended"
#include <nextmap> #include <nextmap>
#include <colors> #include <colors>
#pragma semicolon 1 #pragma semicolon 1
#define MCE_VERSION "1.10.0" #define MCE_VERSION "1.10.0"
public Plugin:myinfo = public Plugin:myinfo =
{ {
name = "Rock The Vote Extended", name = "Rock The Vote Extended",
author = "Powerlord and AlliedModders LLC", author = "Powerlord and AlliedModders LLC",
description = "Provides RTV Map Voting", description = "Provides RTV Map Voting",
version = MCE_VERSION, version = MCE_VERSION,
url = "https://forums.alliedmods.net/showthread.php?t=156974" url = "https://forums.alliedmods.net/showthread.php?t=156974"
}; };
new Handle:g_Cvar_Needed = INVALID_HANDLE; new Handle:g_Cvar_Needed = INVALID_HANDLE;
new Handle:g_Cvar_MinPlayers = INVALID_HANDLE; new Handle:g_Cvar_MinPlayers = INVALID_HANDLE;
new Handle:g_Cvar_InitialDelay = INVALID_HANDLE; new Handle:g_Cvar_InitialDelay = INVALID_HANDLE;
new Handle:g_Cvar_Interval = INVALID_HANDLE; new Handle:g_Cvar_Interval = INVALID_HANDLE;
new Handle:g_Cvar_ChangeTime = INVALID_HANDLE; new Handle:g_Cvar_ChangeTime = INVALID_HANDLE;
new Handle:g_Cvar_RTVPostVoteAction = INVALID_HANDLE; new Handle:g_Cvar_RTVPostVoteAction = INVALID_HANDLE;
new bool:g_CanRTV = false; // True if RTV loaded maps and is active. new bool:g_CanRTV = false; // True if RTV loaded maps and is active.
new bool:g_RTVAllowed = false; // True if RTV is available to players. Used to delay rtv votes. new bool:g_RTVAllowed = false; // True if RTV is available to players. Used to delay rtv votes.
new g_Voters = 0; // Total voters connected. Doesn't include fake clients. new g_Voters = 0; // Total voters connected. Doesn't include fake clients.
new g_Votes = 0; // Total number of "say rtv" votes new g_Votes = 0; // Total number of "say rtv" votes
new g_VotesNeeded = 0; // Necessary votes before map vote begins. (voters * percent_needed) new g_VotesNeeded = 0; // Necessary votes before map vote begins. (voters * percent_needed)
new bool:g_Voted[MAXPLAYERS+1] = {false, ...}; new bool:g_Voted[MAXPLAYERS+1] = {false, ...};
new bool:g_InChange = false; new bool:g_InChange = false;
public OnPluginStart() public OnPluginStart()
{ {
LoadTranslations("common.phrases"); LoadTranslations("common.phrases");
LoadTranslations("rockthevote.phrases"); LoadTranslations("rockthevote.phrases");
LoadTranslations("basevotes.phrases"); LoadTranslations("basevotes.phrases");
g_Cvar_Needed = CreateConVar("sm_rtv_needed", "0.60", "Percentage of players needed to rockthevote (Def 60%)", 0, true, 0.05, true, 1.0); g_Cvar_Needed = CreateConVar("sm_rtv_needed", "0.60", "Percentage of players needed to rockthevote (Def 60%)", 0, true, 0.05, true, 1.0);
g_Cvar_MinPlayers = CreateConVar("sm_rtv_minplayers", "0", "Number of players required before RTV will be enabled.", 0, true, 0.0, true, float(MAXPLAYERS)); g_Cvar_MinPlayers = CreateConVar("sm_rtv_minplayers", "0", "Number of players required before RTV will be enabled.", 0, true, 0.0, true, float(MAXPLAYERS));
g_Cvar_InitialDelay = CreateConVar("sm_rtv_initialdelay", "30.0", "Time (in seconds) before first RTV can be held", 0, true, 0.00); g_Cvar_InitialDelay = CreateConVar("sm_rtv_initialdelay", "30.0", "Time (in seconds) before first RTV can be held", 0, true, 0.00);
g_Cvar_Interval = CreateConVar("sm_rtv_interval", "240.0", "Time (in seconds) after a failed RTV before another can be held", 0, true, 0.00); g_Cvar_Interval = CreateConVar("sm_rtv_interval", "240.0", "Time (in seconds) after a failed RTV before another can be held", 0, true, 0.00);
g_Cvar_ChangeTime = CreateConVar("sm_rtv_changetime", "0", "When to change the map after a succesful RTV: 0 - Instant, 1 - RoundEnd, 2 - MapEnd", _, true, 0.0, true, 2.0); g_Cvar_ChangeTime = CreateConVar("sm_rtv_changetime", "0", "When to change the map after a succesful RTV: 0 - Instant, 1 - RoundEnd, 2 - MapEnd", _, true, 0.0, true, 2.0);
g_Cvar_RTVPostVoteAction = CreateConVar("sm_rtv_postvoteaction", "0", "What to do with RTV's after a mapvote has completed. 0 - Allow, success = instant change, 1 - Deny", _, true, 0.0, true, 1.0); g_Cvar_RTVPostVoteAction = CreateConVar("sm_rtv_postvoteaction", "0", "What to do with RTV's after a mapvote has completed. 0 - Allow, success = instant change, 1 - Deny", _, true, 0.0, true, 1.0);
HookEvent("player_team", OnPlayerChangedTeam); HookEvent("player_team", OnPlayerChangedTeam);
RegConsoleCmd("say", Command_Say); RegConsoleCmd("say", Command_Say);
RegConsoleCmd("say_team", Command_Say); RegConsoleCmd("say_team", Command_Say);
RegConsoleCmd("sm_rtv", Command_RTV); RegConsoleCmd("sm_rtv", Command_RTV);
RegAdminCmd("sm_forcertv", Command_ForceRTV, ADMFLAG_CHANGEMAP, "Force an RTV vote"); RegAdminCmd("sm_forcertv", Command_ForceRTV, ADMFLAG_CHANGEMAP, "Force an RTV vote");
RegAdminCmd("mce_forcertv", Command_ForceRTV, ADMFLAG_CHANGEMAP, "Force an RTV vote"); RegAdminCmd("mce_forcertv", Command_ForceRTV, ADMFLAG_CHANGEMAP, "Force an RTV vote");
// Rock The Vote Extended cvars // Rock The Vote Extended cvars
CreateConVar("rtve_version", MCE_VERSION, "Rock The Vote Extended Version", FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD); CreateConVar("rtve_version", MCE_VERSION, "Rock The Vote Extended Version", FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD);
AutoExecConfig(true, "rtv"); AutoExecConfig(true, "rtv");
} }
public OnMapStart() public OnMapStart()
{ {
g_Voters = 0; g_Voters = 0;
g_Votes = 0; g_Votes = 0;
g_VotesNeeded = 0; g_VotesNeeded = 0;
g_InChange = false; g_InChange = false;
/* Handle late load */ /* Handle late load */
for (new i=1; i<=MaxClients; i++) for (new i=1; i<=MaxClients; i++)
{ {
if (IsClientConnected(i)) if (IsClientConnected(i))
{ {
OnClientConnected(i); OnClientConnected(i);
} }
} }
} }
public OnMapEnd() public OnMapEnd()
{ {
g_CanRTV = false; g_CanRTV = false;
g_RTVAllowed = false; g_RTVAllowed = false;
} }
public OnConfigsExecuted() public OnConfigsExecuted()
{ {
g_CanRTV = true; g_CanRTV = true;
g_RTVAllowed = false; g_RTVAllowed = false;
CreateTimer(GetConVarFloat(g_Cvar_InitialDelay), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE); CreateTimer(GetConVarFloat(g_Cvar_InitialDelay), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE);
} }
public OnClientConnected(client) public OnClientConnected(client)
{ {
if(IsFakeClient(client)) if(IsFakeClient(client))
return; return;
g_Voted[client] = false; g_Voted[client] = false;
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3); g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
return; return;
} }
public OnClientDisconnect(client) public OnClientDisconnect(client)
{ {
if(IsFakeClient(client)) if(IsFakeClient(client))
return; return;
if(g_Voted[client]) if(g_Voted[client])
{ {
g_Votes--; g_Votes--;
} }
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3); g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
if (!g_CanRTV) if (!g_CanRTV)
{ {
return; return;
} }
if (g_Votes && if (g_Votes &&
g_Voters && g_Voters &&
g_Votes >= g_VotesNeeded && g_Votes >= g_VotesNeeded &&
g_RTVAllowed ) g_RTVAllowed )
{ {
if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished()) if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished())
{ {
return; return;
} }
StartRTV(); StartRTV();
} }
} }
public OnPlayerChangedTeam(Handle:event, const String:name[], bool:dontBroadcast) public OnPlayerChangedTeam(Handle:event, const String:name[], bool:dontBroadcast)
{ {
new Client = GetClientOfUserId(GetEventInt(event, "userid")); new Client = GetClientOfUserId(GetEventInt(event, "userid"));
if(IsFakeClient(Client)) if(IsFakeClient(Client))
return; return;
if(Client == 0) if(Client == 0)
{ {
return; return;
} }
if (IsClientInGame(Client) && IsClientConnected(Client)) if (IsClientInGame(Client) && IsClientConnected(Client))
{ {
if (GetClientTeam(Client) == 1) if (GetClientTeam(Client) == 1)
{ {
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3); g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
if (g_Votes && if (g_Votes &&
g_Voters && g_Voters &&
g_Votes >= g_VotesNeeded && g_Votes >= g_VotesNeeded &&
g_RTVAllowed ) g_RTVAllowed )
{ {
if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished()) if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished())
{ {
return; return;
} }
StartRTV(); StartRTV();
} }
} }
} }
} }
public Action:Command_RTV(client, args) public Action:Command_RTV(client, args)
{ {
if (!g_CanRTV || !client) if (!g_CanRTV || !client)
{ {
return Plugin_Handled; return Plugin_Handled;
} }
AttemptRTV(client); AttemptRTV(client);
return Plugin_Handled; return Plugin_Handled;
} }
public Action:Command_Say(client, args) public Action:Command_Say(client, args)
{ {
if (!g_CanRTV || !client) if (!g_CanRTV || !client)
{ {
return Plugin_Continue; return Plugin_Continue;
} }
decl String:text[192]; decl String:text[192];
if (!GetCmdArgString(text, sizeof(text))) if (!GetCmdArgString(text, sizeof(text)))
{ {
return Plugin_Continue; return Plugin_Continue;
} }
new startidx = 0; new startidx = 0;
if(text[strlen(text)-1] == '"') if(text[strlen(text)-1] == '"')
{ {
text[strlen(text)-1] = '\0'; text[strlen(text)-1] = '\0';
startidx = 1; startidx = 1;
} }
new ReplySource:old = SetCmdReplySource(SM_REPLY_TO_CHAT); new ReplySource:old = SetCmdReplySource(SM_REPLY_TO_CHAT);
if (strcmp(text[startidx], "rtv", false) == 0 || strcmp(text[startidx], "rockthevote", false) == 0) if (strcmp(text[startidx], "rtv", false) == 0 || strcmp(text[startidx], "rockthevote", false) == 0)
{ {
AttemptRTV(client); AttemptRTV(client);
} }
SetCmdReplySource(old); SetCmdReplySource(old);
return Plugin_Continue; return Plugin_Continue;
} }
AttemptRTV(client) AttemptRTV(client)
{ {
if (!g_RTVAllowed || (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished())) if (!g_RTVAllowed || (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished()))
{ {
CReplyToCommand(client, "[SM] %t", "RTV Not Allowed"); CReplyToCommand(client, "[SM] %t", "RTV Not Allowed");
return; return;
} }
if (!CanMapChooserStartVote()) if (!CanMapChooserStartVote())
{ {
CReplyToCommand(client, "[SM] %t", "RTV Started"); CReplyToCommand(client, "[SM] %t", "RTV Started");
return; return;
} }
if (GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers)) if (GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers))
{ {
CReplyToCommand(client, "[SM] %t", "Minimal Players Not Met"); CReplyToCommand(client, "[SM] %t", "Minimal Players Not Met");
return; return;
} }
if (g_Voted[client]) if (g_Voted[client])
{ {
CReplyToCommand(client, "[SM] %t", "Already Voted", g_Votes, g_VotesNeeded); CReplyToCommand(client, "[SM] %t", "Already Voted", g_Votes, g_VotesNeeded);
return; return;
} }
new String:name[MAX_NAME_LENGTH]; new String:name[MAX_NAME_LENGTH];
GetClientName(client, name, sizeof(name)); GetClientName(client, name, sizeof(name));
g_Votes++; g_Votes++;
g_Voted[client] = true; g_Voted[client] = true;
CPrintToChatAll("[SM] %t", "RTV Requested", name, g_Votes, g_VotesNeeded); CPrintToChatAll("[SM] %t", "RTV Requested", name, g_Votes, g_VotesNeeded);
if (g_Votes >= g_VotesNeeded) if (g_Votes >= g_VotesNeeded)
{ {
StartRTV(); StartRTV();
} }
} }
public Action:Timer_DelayRTV(Handle:timer) public Action:Timer_DelayRTV(Handle:timer)
{ {
g_RTVAllowed = true; g_RTVAllowed = true;
} }
StartRTV() StartRTV()
{ {
if (g_InChange) if (g_InChange)
{ {
return; return;
} }
if (EndOfMapVoteEnabled() && HasEndOfMapVoteFinished()) if (EndOfMapVoteEnabled() && HasEndOfMapVoteFinished())
{ {
/* Change right now then */ /* Change right now then */
new String:map[PLATFORM_MAX_PATH]; new String:map[PLATFORM_MAX_PATH];
if (GetNextMap(map, sizeof(map))) if (GetNextMap(map, sizeof(map)))
{ {
CPrintToChatAll("[SM] %t", "Changing Maps", map); CPrintToChatAll("[SM] %t", "Changing Maps", map);
CreateTimer(5.0, Timer_ChangeMap, _, TIMER_FLAG_NO_MAPCHANGE); CreateTimer(5.0, Timer_ChangeMap, _, TIMER_FLAG_NO_MAPCHANGE);
g_InChange = true; g_InChange = true;
ResetRTV(); ResetRTV();
g_RTVAllowed = false; g_RTVAllowed = false;
} }
return; return;
} }
if (CanMapChooserStartVote()) if (CanMapChooserStartVote())
{ {
new MapChange:when = MapChange:GetConVarInt(g_Cvar_ChangeTime); new MapChange:when = MapChange:GetConVarInt(g_Cvar_ChangeTime);
InitiateMapChooserVote(when); InitiateMapChooserVote(when);
ResetRTV(); ResetRTV();
g_RTVAllowed = false; g_RTVAllowed = false;
CreateTimer(GetConVarFloat(g_Cvar_Interval), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE); CreateTimer(GetConVarFloat(g_Cvar_Interval), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE);
} }
} }
ResetRTV() ResetRTV()
{ {
g_Votes = 0; g_Votes = 0;
for (new i=1; i<=MAXPLAYERS; i++) for (new i=1; i<=MAXPLAYERS; i++)
{ {
g_Voted[i] = false; g_Voted[i] = false;
} }
} }
public Action:Timer_ChangeMap(Handle:hTimer) public Action:Timer_ChangeMap(Handle:hTimer)
{ {
g_InChange = false; g_InChange = false;
LogMessage("RTV changing map manually"); LogMessage("RTV changing map manually");
new String:map[PLATFORM_MAX_PATH]; new String:map[PLATFORM_MAX_PATH];
if (GetNextMap(map, sizeof(map))) if (GetNextMap(map, sizeof(map)))
{ {
ForceChangeLevel(map, "RTV after mapvote"); ForceChangeLevel(map, "RTV after mapvote");
} }
return Plugin_Stop; return Plugin_Stop;
} }
// Rock The Vote Extended functions // Rock The Vote Extended functions
public Action:Command_ForceRTV(client, args) public Action:Command_ForceRTV(client, args)
{ {
if (!g_CanRTV || !client) if (!g_CanRTV || !client)
{ {
return Plugin_Handled; return Plugin_Handled;
} }
ShowActivity2(client, "[RTVE] ", "%t", "Initiated Vote Map"); ShowActivity2(client, "[RTVE] ", "%t", "Initiated Vote Map");
StartRTV(); StartRTV();
return Plugin_Handled; return Plugin_Handled;
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"chi" "下一幅地图投票了!" "chi" "下一幅地图投票了!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"chi" "下一幅地图投选已开始." "chi" "下一幅地图投选已开始."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"chi" " 地图投票已结束. 下一幅地图将为 {1}. ( 得票{2}%% , {3}票)" "chi" " 地图投票已结束. 下一幅地图将为 {1}. ( 得票{2}%% , {3}票)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"chi" "当前地图已被延长." "chi" "当前地图已被延长."
} }
"Extend Map" "Extend Map"
{ {
"chi" "延长当前地图" "chi" "延长当前地图"
} }
"Dont Change" "Dont Change"
{ {
"chi" "请勿更换" "chi" "请勿更换"
} }
"Current Map Stays" "Current Map Stays"
{ {
"chi" "当前地图已被延长! 投票显示! (得票 {1}%% 共 {2} 票)" "chi" "当前地图已被延长! 投票显示! (得票 {1}%% 共 {2} 票)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"chi" "更换下一幅地图为 \"{1}\"." "chi" "更换下一幅地图为 \"{1}\"."
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"cze" "Hlasujte o příští mapě!" "cze" "Hlasujte o příští mapě!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"cze" "Hlasování o příští mapě začalo." "cze" "Hlasování o příští mapě začalo."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"cze" "Hlasování o mapě skončilo. Příští mapou bude {1}. (Obdržela {2}%% z {3} hlasů)" "cze" "Hlasování o mapě skončilo. Příští mapou bude {1}. (Obdržela {2}%% z {3} hlasů)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"cze" "Současná mapa byla prodloužena. (Obdržela {1}%% z {2} hlasů)" "cze" "Současná mapa byla prodloužena. (Obdržela {1}%% z {2} hlasů)"
} }
"Extend Map" "Extend Map"
{ {
"cze" "Prodloužit současnou mapu" "cze" "Prodloužit současnou mapu"
} }
"Dont Change" "Dont Change"
{ {
"cze" "Neměnit" "cze" "Neměnit"
} }
"Current Map Stays" "Current Map Stays"
{ {
"cze" "Současná mapa pokračuje! Hlasování rozhodlo! (Obdržela {1}%% z {2} hlasů)" "cze" "Současná mapa pokračuje! Hlasování rozhodlo! (Obdržela {1}%% z {2} hlasů)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"cze" "Změnil příští mapu na \"{1}\"." "cze" "Změnil příští mapu na \"{1}\"."
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"da" "Stem om næste bane!" "da" "Stem om næste bane!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"da" "Afstemning for næste bane er begyndt." "da" "Afstemning for næste bane er begyndt."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"da" "Bane afstemning er fuldført. Den næste bane vil være {1}. (Modtog {2}%% af {3} stemmer) " "da" "Bane afstemning er fuldført. Den næste bane vil være {1}. (Modtog {2}%% af {3} stemmer) "
} }
"Current Map Extended" "Current Map Extended"
{ {
"da" "Den nuværende bane er blevet forlænget. (Modtog {1}%% af {2} stemmer) " "da" "Den nuværende bane er blevet forlænget. (Modtog {1}%% af {2} stemmer) "
} }
"Extend Map" "Extend Map"
{ {
"da" "Forlæng bane" "da" "Forlæng bane"
} }
"Dont Change" "Dont Change"
{ {
"da" "Skift ikke!" "da" "Skift ikke!"
} }
"Current Map Stays" "Current Map Stays"
{ {
"da" "Den aktuelle bane fortsætter! Afstemningen har talt! (Modtog {1}%% af {2} stemmer)" "da" "Den aktuelle bane fortsætter! Afstemningen har talt! (Modtog {1}%% af {2} stemmer)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"da" "Skiftede næste bane til \"{1}'." "da" "Skiftede næste bane til \"{1}'."
} }
} }

View File

@ -1,98 +1,98 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"de" "Stimme für die nächste Karte!" "de" "Stimme für die nächste Karte!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"de" "Abstimmung für die nächste Karte wurde gestartet." "de" "Abstimmung für die nächste Karte wurde gestartet."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"de" "Karten-Abstimmung wurde abgeschlossen. Nächste Karte wird {1} sein. ({2}%% von {3} Stimmen erhalten) " "de" "Karten-Abstimmung wurde abgeschlossen. Nächste Karte wird {1} sein. ({2}%% von {3} Stimmen erhalten) "
} }
"Current Map Extended" "Current Map Extended"
{ {
"de" "Die aktuelle Karte wurde verlängert. ({1}%% von {2} Stimmen erhalten) " "de" "Die aktuelle Karte wurde verlängert. ({1}%% von {2} Stimmen erhalten) "
} }
"Extend Map" "Extend Map"
{ {
"de" "Verlängere aktuelle Karte" "de" "Verlängere aktuelle Karte"
} }
"Dont Change" "Dont Change"
{ {
"de" "Nicht wechseln" "de" "Nicht wechseln"
} }
"Current Map Stays" "Current Map Stays"
{ {
"de" "Aktuelle Karte geht weiter! Die Abstimmung hat entschieden! ({1}%% von {2} Stimmen erhalten) " "de" "Aktuelle Karte geht weiter! Die Abstimmung hat entschieden! ({1}%% von {2} Stimmen erhalten) "
} }
"Changed Next Map" "Changed Next Map"
{ {
"de" "Nächste Karte wurde auf \"{1}\" geändert. " "de" "Nächste Karte wurde auf \"{1}\" geändert. "
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"de" "Stichwahl für die nächste Karte!" "de" "Stichwahl für die nächste Karte!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"de" "Anzahl der Stimmen" "de" "Anzahl der Stimmen"
} }
"Custom" "Custom"
{ {
"de" "{1} (nicht vorhanden)" "de" "{1} (nicht vorhanden)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"de" "Keine Karte hat mehr als {1}%% der Stimmen.\nEine neue Abstimmung ist erforderlich!" "de" "Keine Karte hat mehr als {1}%% der Stimmen.\nEine neue Abstimmung ist erforderlich!"
} }
"Revote Warning" "Revote Warning"
{ {
"de" "Stichwahl startet in: {1} Sekunden" "de" "Stichwahl startet in: {1} Sekunden"
} }
"Vote Warning" "Vote Warning"
{ {
"de" "Achtung! Die Abstimmung für die nächste Karte startet in: {1} Sekunden" "de" "Achtung! Die Abstimmung für die nächste Karte startet in: {1} Sekunden"
} }
"Line One" "Line One"
{ {
"de" "Überlegen Sie, welche Karte Sie spielen möchten ..." "de" "Überlegen Sie, welche Karte Sie spielen möchten ..."
} }
"Line Two" "Line Two"
{ {
"de" "... und nicht unüberlegt wählen!" "de" "... und nicht unüberlegt wählen!"
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"de" "Abstimmung ist bereits im Gange. Versuch Sie es erneut in {1} Sekunden" "de" "Abstimmung ist bereits im Gange. Versuch Sie es erneut in {1} Sekunden"
} }
"Tie Vote" "Tie Vote"
{ {
"de" "Die Top-{1} Karten haben gleich viele Stimmen!.\nEine neue Abstimmung ist erforderlich!" "de" "Die Top-{1} Karten haben gleich viele Stimmen!.\nEine neue Abstimmung ist erforderlich!"
} }
"Custom Marked" "Custom Marked"
{ {
"de" "*{1}" "de" "*{1}"
} }
} }

View File

@ -1,92 +1,92 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"es" "Vota para el siguiente mapa!" "es" "Vota para el siguiente mapa!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"es" "La votacion para el siguiente mapa ha comenzado." "es" "La votacion para el siguiente mapa ha comenzado."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"es" "Votacion de Mapa finalizado. El siguiente mapa sera {1}. (Recibidos {2}%% de {3} votos)" "es" "Votacion de Mapa finalizado. El siguiente mapa sera {1}. (Recibidos {2}%% de {3} votos)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"es" "El mapa actual ha sido extendido. (Recibidos {1}%% de {2} votos)" "es" "El mapa actual ha sido extendido. (Recibidos {1}%% de {2} votos)"
} }
"Extend Map" "Extend Map"
{ {
"es" "Extender mapa actual" "es" "Extender mapa actual"
} }
"Dont Change" "Dont Change"
{ {
"es" "No cambiar" "es" "No cambiar"
} }
"Current Map Stays" "Current Map Stays"
{ {
"es" "El mapa actual continua! La votacion ha hablado! (Recibidos {1}%% de {2} votos)" "es" "El mapa actual continua! La votacion ha hablado! (Recibidos {1}%% de {2} votos)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"es" "El siguiente mapa ha cambiado a \"{1}\"." "es" "El siguiente mapa ha cambiado a \"{1}\"."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"es" "Hacer votacion para el siguiente mapa!" "es" "Hacer votacion para el siguiente mapa!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"es" "Numero de Votaciones" "es" "Numero de Votaciones"
} }
"Custom" "Custom"
{ {
"es" "{1} (Custom)" "es" "{1} (Custom)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"es" "No hay ningun mapa que haya recibido el {1}%% de votaciones.\nEntonces, que mapa ganara? Es necesario otra votacion!" "es" "No hay ningun mapa que haya recibido el {1}%% de votaciones.\nEntonces, que mapa ganara? Es necesario otra votacion!"
} }
"Revote Warning" "Revote Warning"
{ {
"es" "La votacion empezara en: {1}s" "es" "La votacion empezara en: {1}s"
} }
"Vote Warning" "Vote Warning"
{ {
"es" "Atencion! La votacion para el siguiente mapa se iniciara en: {1}s" "es" "Atencion! La votacion para el siguiente mapa se iniciara en: {1}s"
} }
"Line One" "Line One"
{ {
"es" "Considera que mapa quieres jugar..." "es" "Considera que mapa quieres jugar..."
} }
"Line Two" "Line Two"
{ {
"es" "...y no pulse los botones sin pensar ;-)" "es" "...y no pulse los botones sin pensar ;-)"
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"es" "Votacion ya iniciada. Intentando de nuevo en {1}s." "es" "Votacion ya iniciada. Intentando de nuevo en {1}s."
} }
"Tie Vote" "Tie Vote"
{ {
"es" "El top {1} de mapas tienen el mismo numero de votaciones.\nSe necesita una nueva votacion!" "es" "El top {1} de mapas tienen el mismo numero de votaciones.\nSe necesita una nueva votacion!"
} }
} }

View File

@ -1,87 +1,87 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"fr" "Voter pour la prochaine map!" "fr" "Voter pour la prochaine map!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"fr" "Voter pour la prochaine map est lancer." "fr" "Voter pour la prochaine map est lancer."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"fr" "Le VoteMap est terminer. La prochaine map sera {1}. (Reçu {2}%% sur {3} votes)" "fr" "Le VoteMap est terminer. La prochaine map sera {1}. (Reçu {2}%% sur {3} votes)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"fr" "La map actuelle a été prolonger. (Reçu {1}%% sur {2} votes)" "fr" "La map actuelle a été prolonger. (Reçu {1}%% sur {2} votes)"
} }
"Extend Map" "Extend Map"
{ {
"fr" "Prolonger la map" "fr" "Prolonger la map"
} }
"Dont Change" "Dont Change"
{ {
"fr" "Ne pas changer" "fr" "Ne pas changer"
} }
"Current Map Stays" "Current Map Stays"
{ {
"fr" "La map continue! Le vote a tranché! (Reçu {1}%% sur {2} votes)" "fr" "La map continue! Le vote a tranché! (Reçu {1}%% sur {2} votes)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"fr" "La map suivante sera \"{1}\"." "fr" "La map suivante sera \"{1}\"."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"fr" "Votez a nouveau pour la prochaine Map!" "fr" "Votez a nouveau pour la prochaine Map!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"fr" "Nombres de votes" "fr" "Nombres de votes"
} }
"Custom" "Custom"
{ {
"fr" "{1} (Custom)" "fr" "{1} (Custom)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"fr" "Aucune map n'a reçu plus de {1}%% du vote.\nAlors, quels maps va gagner? Un nouveau vote va être lancé!" "fr" "Aucune map n'a reçu plus de {1}%% du vote.\nAlors, quels maps va gagner? Un nouveau vote va être lancé!"
} }
"Revote Warning" "Revote Warning"
{ {
"fr" "Un nouveau vote commence dans: {1}s" "fr" "Un nouveau vote commence dans: {1}s"
} }
"Vote Warning" "Vote Warning"
{ {
"fr" "Attention! Le vote pour la prochaine map commence dans: {1}s" "fr" "Attention! Le vote pour la prochaine map commence dans: {1}s"
} }
"Line One" "Line One"
{ {
"fr" "Voter pour la map que vous voulez jouer..." "fr" "Voter pour la map que vous voulez jouer..."
} }
"Line Two" "Line Two"
{ {
"fr" "...et ne pas cliquez sur une touche comme un con ;-)" "fr" "...et ne pas cliquez sur une touche comme un con ;-)"
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"fr" "Vote déjà en cours. Reassayer dans {1}s." "fr" "Vote déjà en cours. Reassayer dans {1}s."
} }
} }

View File

@ -1,92 +1,92 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"fr" "Votez pour la prochaine map!" "fr" "Votez pour la prochaine map!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"fr" "Le vote pour la prochaine map est lancé." "fr" "Le vote pour la prochaine map est lancé."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"fr" "Le VoteMap est terminé. La prochaine map sera {1}. (Reçu {2}%% sur {3} votes)" "fr" "Le VoteMap est terminé. La prochaine map sera {1}. (Reçu {2}%% sur {3} votes)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"fr" "La map actuelle a été prolongée. (Reçu {1}%% sur {2} votes)" "fr" "La map actuelle a été prolongée. (Reçu {1}%% sur {2} votes)"
} }
"Extend Map" "Extend Map"
{ {
"fr" "Prolonger la map" "fr" "Prolonger la map"
} }
"Dont Change" "Dont Change"
{ {
"fr" "Ne pas changer" "fr" "Ne pas changer"
} }
"Current Map Stays" "Current Map Stays"
{ {
"fr" "La map continue! Le vote a tranché! (Reçu {1}%% sur {2} votes)" "fr" "La map continue! Le vote a tranché! (Reçu {1}%% sur {2} votes)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"fr" "La map suivante sera \"{1}\"." "fr" "La map suivante sera \"{1}\"."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"fr" "Votez à nouveau pour la prochaine Map!" "fr" "Votez à nouveau pour la prochaine Map!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"fr" "Nombres de votes" "fr" "Nombres de votes"
} }
"Custom" "Custom"
{ {
"fr" "{1} (Custom)" "fr" "{1} (Custom)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"fr" "Aucune map n'a reçu plus de {1}%% du vote.\nAlors, quelle map va gagner? Un nouveau vote va être lancé!" "fr" "Aucune map n'a reçu plus de {1}%% du vote.\nAlors, quelle map va gagner? Un nouveau vote va être lancé!"
} }
"Revote Warning" "Revote Warning"
{ {
"fr" "Un nouveau vote commence dans: {1}s" "fr" "Un nouveau vote commence dans: {1}s"
} }
"Vote Warning" "Vote Warning"
{ {
"fr" "Attention! Le vote pour la prochaine map commence dans: {1}s" "fr" "Attention! Le vote pour la prochaine map commence dans: {1}s"
} }
"Line One" "Line One"
{ {
"fr" "Votez pour la map que vous voulez jouer..." "fr" "Votez pour la map que vous voulez jouer..."
} }
"Line Two" "Line Two"
{ {
"fr" "...et n'appuyez pas sur une touche comme un con ;-)" "fr" "...et n'appuyez pas sur une touche comme un con ;-)"
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"fr" "Vote déjà en cours. Reassayez dans {1}s." "fr" "Vote déjà en cours. Reassayez dans {1}s."
} }
"Tie Vote" "Tie Vote"
{ {
"fr" "{1} maps ont eu un même nombre de voix.\nUn nouveau vote est nécessaire!" "fr" "{1} maps ont eu un même nombre de voix.\nUn nouveau vote est nécessaire!"
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"hu" "Mi legyen a következő pálya?" "hu" "Mi legyen a következő pálya?"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"hu" "Palyavalaszto szavazas elindult!" "hu" "Palyavalaszto szavazas elindult!"
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"hu" "A szavazás lezárult. A következő pálya a {1} lesz" "hu" "A szavazás lezárult. A következő pálya a {1} lesz"
} }
"Current Map Extended" "Current Map Extended"
{ {
"hu" "Az aktualis palya meghosszabitva." "hu" "Az aktualis palya meghosszabitva."
} }
"Extend Map" "Extend Map"
{ {
"hu" "Palya meghosszabitasa" "hu" "Palya meghosszabitasa"
} }
"Dont Change" "Dont Change"
{ {
"hu" "Ne valtsunk!" "hu" "Ne valtsunk!"
} }
"Current Map Stays" "Current Map Stays"
{ {
"hu" "Jelenlegi palya folytatodik." "hu" "Jelenlegi palya folytatodik."
} }
"Changed Next Map" "Changed Next Map"
{ {
"hu" "\"{1}\" lesz a kovetkezo palya" "hu" "\"{1}\" lesz a kovetkezo palya"
} }
} }

View File

@ -1,92 +1,92 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"it" "Vota per la prossima mappa!" "it" "Vota per la prossima mappa!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"it" "Le votazione per scegliere la prossima mappa sono iniziate." "it" "Le votazione per scegliere la prossima mappa sono iniziate."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"it" "Le votazioni sono terminate. La prossima mappa sarà {1}. (Con {2}%% su {3} votes)" "it" "Le votazioni sono terminate. La prossima mappa sarà {1}. (Con {2}%% su {3} votes)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"it" "La mappa attuale è stata estesa. (Con {1}%% su {2} votes)" "it" "La mappa attuale è stata estesa. (Con {1}%% su {2} votes)"
} }
"Extend Map" "Extend Map"
{ {
"it" "Estendi la mappa corrente" "it" "Estendi la mappa corrente"
} }
"Dont Change" "Dont Change"
{ {
"it" "Non cambiare" "it" "Non cambiare"
} }
"Current Map Stays" "Current Map Stays"
{ {
"it" "La mappa continua! Il voto ha parlato! (Con {1}%% su {2} votes)" "it" "La mappa continua! Il voto ha parlato! (Con {1}%% su {2} votes)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"it" "La mappa successiva sarà \"{1}\"." "it" "La mappa successiva sarà \"{1}\"."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"it" "Vota nuovamente per scegliere la prossima mappa!" "it" "Vota nuovamente per scegliere la prossima mappa!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"it" "Numero di voti" "it" "Numero di voti"
} }
"Custom" "Custom"
{ {
"it" "{1} (Custom)" "it" "{1} (Custom)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"it" "Nessuna mappa ha ricevuto più del {1}%% di voti.\nAllora, quale mappa vincerà? Si inizia un' altra votazione!" "it" "Nessuna mappa ha ricevuto più del {1}%% di voti.\nAllora, quale mappa vincerà? Si inizia un' altra votazione!"
} }
"Revote Warning" "Revote Warning"
{ {
"it" "Una nuova votazione inizierà tra: {1}s" "it" "Una nuova votazione inizierà tra: {1}s"
} }
"Vote Warning" "Vote Warning"
{ {
"it" "Attenzione! Le votazione per la prossima mappa cominceranno tra: {1}s" "it" "Attenzione! Le votazione per la prossima mappa cominceranno tra: {1}s"
} }
"Line One" "Line One"
{ {
"it" "Vota la mappa chevorresti giocare..." "it" "Vota la mappa chevorresti giocare..."
} }
"Line Two" "Line Two"
{ {
"it" "...e non cliccare i tasti sconsideratamente :D" "it" "...e non cliccare i tasti sconsideratamente :D"
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"it" "Il voto è in corso. Riprova tra {1}s." "it" "Il voto è in corso. Riprova tra {1}s."
} }
"Tie Vote" "Tie Vote"
{ {
"it" "Le mappe hanno raggiunto il pareggio dei voti.\nBisogna nuovamente votare!" "it" "Le mappe hanno raggiunto il pareggio dei voti.\nBisogna nuovamente votare!"
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"jp" "次のマップを投票してください!" "jp" "次のマップを投票してください!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"jp" "次のマップ投票をスタートしました。" "jp" "次のマップ投票をスタートしました。"
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"jp" "マップ投票が完了しました。次はマップは{1}です。({3}中{2}%%)" "jp" "マップ投票が完了しました。次はマップは{1}です。({3}中{2}%%)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"jp" "現在のマップを延長します。({3}中{2}%%)" "jp" "現在のマップを延長します。({3}中{2}%%)"
} }
"Extend Map" "Extend Map"
{ {
"jp" "現在のマップを延長" "jp" "現在のマップを延長"
} }
"Dont Change" "Dont Change"
{ {
"jp" "変更しない" "jp" "変更しない"
} }
"Current Map Stays" "Current Map Stays"
{ {
"jp" "現在のマップを延長します。({3}中{2}%%)" "jp" "現在のマップを延長します。({3}中{2}%%)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"jp" "次のマップを\"{1}\"に変更しました。" "jp" "次のマップを\"{1}\"に変更しました。"
} }
} }

View File

@ -1,98 +1,98 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"ko" "다음 맵을 결정하기 위한 투표!" "ko" "다음 맵을 결정하기 위한 투표!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"ko" "다음 맵을 결정하기 위한 투표가 시작되었습니다." "ko" "다음 맵을 결정하기 위한 투표가 시작되었습니다."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"ko" "맵 투표가 끝났습니다. 다음 맵은 {1} 이 될 것입니다. (전체 인원 {2}명 중 {1}%%의 표를 받았습니다.)" "ko" "맵 투표가 끝났습니다. 다음 맵은 {1} 이 될 것입니다. (전체 인원 {2}명 중 {1}%%의 표를 받았습니다.)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"ko" "현재 맵을 더하기로 결정했습니다. (전체 인원 {2}명 중 {1}%%의 표를 받았습니다.)" "ko" "현재 맵을 더하기로 결정했습니다. (전체 인원 {2}명 중 {1}%%의 표를 받았습니다.)"
} }
"Extend Map" "Extend Map"
{ {
"ko" "지금 맵을 더 하자" "ko" "지금 맵을 더 하자"
} }
"Dont Change" "Dont Change"
{ {
"ko" "바꾸지 말자" "ko" "바꾸지 말자"
} }
"Current Map Stays" "Current Map Stays"
{ {
"ko" "현재 맵을 계속 합니다!(전체 인원 {2} 명의 {1}%% 의 표를 받았습니다)" "ko" "현재 맵을 계속 합니다!(전체 인원 {2} 명의 {1}%% 의 표를 받았습니다)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"ko" "다음 맵을 \"{1}\" 로 바꾸었습니다." "ko" "다음 맵을 \"{1}\" 로 바꾸었습니다."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"ko" "다음 맵을 결정하기 위한 재투표!" "ko" "다음 맵을 결정하기 위한 재투표!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"ko" "투표수" "ko" "투표수"
} }
"Custom" "Custom"
{ {
"ko" "{1} (커스텀 맵)" "ko" "{1} (커스텀 맵)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"ko" "{1}%% 이상 투표를 받은 맵이 없습니다.\n다음 맵을 결정하기 위해 재투표를 합니다!" "ko" "{1}%% 이상 투표를 받은 맵이 없습니다.\n다음 맵을 결정하기 위해 재투표를 합니다!"
} }
"Revote Warning" "Revote Warning"
{ {
"ko" "재투표까지: {1}초" "ko" "재투표까지: {1}초"
} }
"Vote Warning" "Vote Warning"
{ {
"ko" "알립니다! 다음 맵을 결정하는 투표까지: {1}초" "ko" "알립니다! 다음 맵을 결정하는 투표까지: {1}초"
} }
"Line One" "Line One"
{ {
"ko" "원하는 맵을 선택하세요..." "ko" "원하는 맵을 선택하세요..."
} }
"Line Two" "Line Two"
{ {
"ko" "...그리고 아무거나 막 찍지 말고요 -_-" "ko" "...그리고 아무거나 막 찍지 말고요 -_-"
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"ko" "투표가 진행 중에 있습니다. {1}초 후 다시 시도합니다." "ko" "투표가 진행 중에 있습니다. {1}초 후 다시 시도합니다."
} }
"Tie Vote" "Tie Vote"
{ {
"ko" "{1}개 맵이 같은 투표수를 얻었습니다.\n재투표를 합니다!" "ko" "{1}개 맵이 같은 투표수를 얻었습니다.\n재투표를 합니다!"
} }
"Custom Marked" "Custom Marked"
{ {
"ko" "*{1}" "ko" "*{1}"
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"lv" "Balso par nākamo karti!" "lv" "Balso par nākamo karti!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"lv" "Balsošana par nākamo karti ir sākusies." "lv" "Balsošana par nākamo karti ir sākusies."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"lv" "Balsošana par karti ir beigusies. Nākamā karte būs {1}. (Saņēma {2}%% no {3} balsīm) " "lv" "Balsošana par karti ir beigusies. Nākamā karte būs {1}. (Saņēma {2}%% no {3} balsīm) "
} }
"Current Map Extended" "Current Map Extended"
{ {
"lv" "Patreizējās kartes laiks ir pagarināts. (Saņēma {1}%% no {2} balsīm) " "lv" "Patreizējās kartes laiks ir pagarināts. (Saņēma {1}%% no {2} balsīm) "
} }
"Extend Map" "Extend Map"
{ {
"lv" "Pagarināt laiku patreizējā kartē" "lv" "Pagarināt laiku patreizējā kartē"
} }
"Dont Change" "Dont Change"
{ {
"lv" "Nemainīt" "lv" "Nemainīt"
} }
"Current Map Stays" "Current Map Stays"
{ {
"lv" "Patreizējā karte turpinās! Aptauja ir beigusies! (Saņēma {1}%% no {2} balsīm)" "lv" "Patreizējā karte turpinās! Aptauja ir beigusies! (Saņēma {1}%% no {2} balsīm)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"lv" "Nomainīja nākamo karti uz \"{1}\"." "lv" "Nomainīja nākamo karti uz \"{1}\"."
} }
} }

View File

@ -1,109 +1,109 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"en" "Vote for the next map!" "en" "Vote for the next map!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"en" "Voting for next map has started." "en" "Voting for next map has started."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"#format" "{1:s},{2:i},{3:i}" "#format" "{1:s},{2:i},{3:i}"
"en" "Map voting has finished. The next map will be {1}. (Received {2}%% of {3} votes)" "en" "Map voting has finished. The next map will be {1}. (Received {2}%% of {3} votes)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"#format" "{1:i},{2:i}" "#format" "{1:i},{2:i}"
"en" "The current map has been extended. (Received {1}%% of {2} votes)" "en" "The current map has been extended. (Received {1}%% of {2} votes)"
} }
"Extend Map" "Extend Map"
{ {
"en" "Extend Current Map" "en" "Extend Current Map"
} }
"Dont Change" "Dont Change"
{ {
"en" "Don't Change" "en" "Don't Change"
} }
"Current Map Stays" "Current Map Stays"
{ {
"#format" "{1:i},{2:i}" "#format" "{1:i},{2:i}"
"en" "Current map continues! The Vote has spoken! (Received {1}%% of {2} votes)" "en" "Current map continues! The Vote has spoken! (Received {1}%% of {2} votes)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"#format" "{1:s}" "#format" "{1:s}"
"en" "Changed nextmap to \"{1}\"." "en" "Changed nextmap to \"{1}\"."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"en" "Runoff Vote for the next map!" "en" "Runoff Vote for the next map!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"en" "Number of votes" "en" "Number of votes"
} }
"Custom" "Custom"
{ {
"#format" "{1:s}" "#format" "{1:s}"
"en" "{1} (Custom)" "en" "{1} (Custom)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"#format" "{1:i}" "#format" "{1:i}"
"en" "No map has received more than {1}%% of the vote.\nSo, which map will win? A revote is needed!" "en" "No map has received more than {1}%% of the vote.\nSo, which map will win? A revote is needed!"
} }
"Revote Warning" "Revote Warning"
{ {
"#format" "{1:i}" "#format" "{1:i}"
"en" "Runoff vote will start in: {1}s" "en" "Runoff vote will start in: {1}s"
} }
"Vote Warning" "Vote Warning"
{ {
"#format" "{1:i}" "#format" "{1:i}"
"en" "Warning! Voting for the next map will begin in: {1}s" "en" "Warning! Voting for the next map will begin in: {1}s"
} }
"Line One" "Line One"
{ {
"en" "Consider which map you want to play..." "en" "Consider which map you want to play..."
} }
"Line Two" "Line Two"
{ {
"en" "...and don't hit buttons thoughtlessly ;-)" "en" "...and don't hit buttons thoughtlessly ;-)"
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"#format" "{1:i}" "#format" "{1:i}"
"en" "Vote already in progress. Retrying in {1}s." "en" "Vote already in progress. Retrying in {1}s."
} }
"Tie Vote" "Tie Vote"
{ {
"#format" "{1:i}" "#format" "{1:i}"
"en" "The top {1} maps had the same number of votes.\nA revote is needed!" "en" "The top {1} maps had the same number of votes.\nA revote is needed!"
} }
"Custom Marked" "Custom Marked"
{ {
"#format" "{1:s}" "#format" "{1:s}"
"en" "*{1}" "en" "*{1}"
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"nl" "Stem voor de volgende map!" "nl" "Stem voor de volgende map!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"nl" "Stemmen voor de volgende map is gestart." "nl" "Stemmen voor de volgende map is gestart."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"nl" "Map stemmen gestopt. De volgende map wordt {1}." "nl" "Map stemmen gestopt. De volgende map wordt {1}."
} }
"Current Map Extended" "Current Map Extended"
{ {
"nl" "De huidige map is verlengd." "nl" "De huidige map is verlengd."
} }
"Extend Map" "Extend Map"
{ {
"nl" "Verleng huidige map" "nl" "Verleng huidige map"
} }
"Dont Change" "Dont Change"
{ {
"nl" "Niet veranderen" "nl" "Niet veranderen"
} }
"Current Map Stays" "Current Map Stays"
{ {
"nl" "Huidige map gaat verder! De Stem heeft gesproken! (Ontvangen {1}%% van de {2} stemmen)" "nl" "Huidige map gaat verder! De Stem heeft gesproken! (Ontvangen {1}%% van de {2} stemmen)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"nl" "Volgende map verandert naar \"{1}\"." "nl" "Volgende map verandert naar \"{1}\"."
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"no" "Stem for det neste kartet!" "no" "Stem for det neste kartet!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"no" "Avstemning for det neste kartet har startet." "no" "Avstemning for det neste kartet har startet."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"no" "Kart-avstemningen er avsluttet. Det neste kartet vil være {1}. (Mottok {2}%% av {3} stemmer)." "no" "Kart-avstemningen er avsluttet. Det neste kartet vil være {1}. (Mottok {2}%% av {3} stemmer)."
} }
"Current Map Extended" "Current Map Extended"
{ {
"no" "Gjeldende kart videreføres! (Mottok {1}%% av {2} stemmer)." "no" "Gjeldende kart videreføres! (Mottok {1}%% av {2} stemmer)."
} }
"Extend Map" "Extend Map"
{ {
"no" "Forleng gjeldende kart." "no" "Forleng gjeldende kart."
} }
"Dont Change" "Dont Change"
{ {
"no" "Ikke bytt!" "no" "Ikke bytt!"
} }
"Current Map Stays" "Current Map Stays"
{ {
"no" "Gjeldende kart videreføres! Avstemningen har talt! (Mottok {1}%% av {2} stemmer)." "no" "Gjeldende kart videreføres! Avstemningen har talt! (Mottok {1}%% av {2} stemmer)."
} }
"Changed Next Map" "Changed Next Map"
{ {
"no" "Byttet neste kart til \"{1}\"" "no" "Byttet neste kart til \"{1}\""
} }
} }

View File

@ -1,92 +1,92 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"pl" "Głosuj na następną mapę!" "pl" "Głosuj na następną mapę!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"pl" "Rozpoczęto głosowanie na następną mapę." "pl" "Rozpoczęto głosowanie na następną mapę."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"pl" "Głosowanie na mapę zostało zakończone. Następną mapą będzie {1}. (Otrzymała {2} procent z {3} głosów) " "pl" "Głosowanie na mapę zostało zakończone. Następną mapą będzie {1}. (Otrzymała {2} procent z {3} głosów) "
} }
"Current Map Extended" "Current Map Extended"
{ {
"pl" "Aktualna mapa została przedłużona. (Otrzymała {1} procent z {2} głosów)" "pl" "Aktualna mapa została przedłużona. (Otrzymała {1} procent z {2} głosów)"
} }
"Extend Map" "Extend Map"
{ {
"pl" "Przedłuż bieżącą mapę" "pl" "Przedłuż bieżącą mapę"
} }
"Dont Change" "Dont Change"
{ {
"pl" "Nie Zmieniaj" "pl" "Nie Zmieniaj"
} }
"Current Map Stays" "Current Map Stays"
{ {
"pl" "Aktualna mapa będzie kontynuowana! (Otrzymano {1} procent z {2} głosów)" "pl" "Aktualna mapa będzie kontynuowana! (Otrzymano {1} procent z {2} głosów)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"pl" "Zmieniono następną mapę na: \"{1}\"." "pl" "Zmieniono następną mapę na: \"{1}\"."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"pl" "Wybierz ponownie!" "pl" "Wybierz ponownie!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"pl" "Otrzymane głosy" "pl" "Otrzymane głosy"
} }
"Custom" "Custom"
{ {
"pl" "{1} (Niestandardowa)" "pl" "{1} (Niestandardowa)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"pl" "Żadna mapa nie otrzymała przynajmniej {1}%% głosów.\nWięc która mapa jest zwycięzcą? Trzeba zagłosować ponownie!" "pl" "Żadna mapa nie otrzymała przynajmniej {1}%% głosów.\nWięc która mapa jest zwycięzcą? Trzeba zagłosować ponownie!"
} }
"Revote Warning" "Revote Warning"
{ {
"pl" "Ponowne głosowanie rozpocznie się za: {1}s\nTym razem się już zdecydujcie ;-)" "pl" "Ponowne głosowanie rozpocznie się za: {1}s\nTym razem się już zdecydujcie ;-)"
} }
"Vote Warning" "Vote Warning"
{ {
"pl" "UWAGA!!! Głosowanie na następną mapę rozpocznie się za: {1}s" "pl" "UWAGA!!! Głosowanie na następną mapę rozpocznie się za: {1}s"
} }
"Line One" "Line One"
{ {
"pl" "Zastanów się na której mapie chcesz grać..." "pl" "Zastanów się na której mapie chcesz grać..."
} }
"Line Two" "Line Two"
{ {
"pl" "...wpisując !revote możesz zmienić swój głos." "pl" "...wpisując !revote możesz zmienić swój głos."
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"pl" "Głosowanie w toku. Ponawiam za {1}s." "pl" "Głosowanie w toku. Ponawiam za {1}s."
} }
"Tie Vote" "Tie Vote"
{ {
"pl" "{1} najlepsze mapy otrzymały tę samą ilość głosów.\nPotrzeba ponownego głosowania!" "pl" "{1} najlepsze mapy otrzymały tę samą ilość głosów.\nPotrzeba ponownego głosowania!"
} }
} }

View File

@ -1,98 +1,98 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"pt" "Vote para o próximo mapa!" "pt" "Vote para o próximo mapa!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"pt" "Votação para o próximo mapa começou." "pt" "Votação para o próximo mapa começou."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"pt" "A votação para o próximo mapa terminou. O próximo mapa será {1}. (Recebidos {2}%% de {3} votos)" "pt" "A votação para o próximo mapa terminou. O próximo mapa será {1}. (Recebidos {2}%% de {3} votos)"
} }
"Current Map Extended" "Current Map Extended"
{ {
"pt" "A mapa atual foi estendido. (Recebidos {1}%% de {2} votos)" "pt" "A mapa atual foi estendido. (Recebidos {1}%% de {2} votos)"
} }
"Extend Map" "Extend Map"
{ {
"pt" "Estender tempo do mapa atual" "pt" "Estender tempo do mapa atual"
} }
"Dont Change" "Dont Change"
{ {
"pt" "Não Mudar" "pt" "Não Mudar"
} }
"Current Map Stays" "Current Map Stays"
{ {
"pt" "O mapa atual continua! O Voto foi dado! (Recebidos {1}%% de {2} votos)" "pt" "O mapa atual continua! O Voto foi dado! (Recebidos {1}%% de {2} votos)"
} }
"Changed Next Map" "Changed Next Map"
{ {
"pt" "Mudado o próximo mapa para \"{1}\"." "pt" "Mudado o próximo mapa para \"{1}\"."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"pt" "Segundo turno de votos para o próximo mapa!" "pt" "Segundo turno de votos para o próximo mapa!"
} }
"Number Of Votes" "Number Of Votes"
{ {
"pt" "Número de votos" "pt" "Número de votos"
} }
"Custom" "Custom"
{ {
"pt" "{1} (Custom)" "pt" "{1} (Custom)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"pt" "Nenhum mapa recebeu mais que {1}%% de votos.\nEntão, qual mapa ganhará? Precisa de uma nova votação!" "pt" "Nenhum mapa recebeu mais que {1}%% de votos.\nEntão, qual mapa ganhará? Precisa de uma nova votação!"
} }
"Revote Warning" "Revote Warning"
{ {
"pt" "Segundo turno começa em: {1}s" "pt" "Segundo turno começa em: {1}s"
} }
"Vote Warning" "Vote Warning"
{ {
"pt" "Atenção! Votação para o próximo mapa começará em: {1}s" "pt" "Atenção! Votação para o próximo mapa começará em: {1}s"
} }
"Line One" "Line One"
{ {
"pt" "Considere que mapa você quer jogar..." "pt" "Considere que mapa você quer jogar..."
} }
"Line Two" "Line Two"
{ {
"pt" "...e não aperte os botões sem pensar ;-)" "pt" "...e não aperte os botões sem pensar ;-)"
} }
"Cannot Start Vote" "Cannot Start Vote"
{ {
"pt" "Votação em progresso. Tentando novamente em {1}s." "pt" "Votação em progresso. Tentando novamente em {1}s."
} }
"Tie Vote" "Tie Vote"
{ {
"pt" "Os {1} mapas tiveram o mesmo número de votos.\nUma nova votação é necessária!" "pt" "Os {1} mapas tiveram o mesmo número de votos.\nUma nova votação é necessária!"
} }
"Custom Marked" "Custom Marked"
{ {
"pt" "*{1}" "pt" "*{1}"
} }
} }

View File

@ -1,83 +1,83 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"ru" "Голосование за следующую карту." "ru" "Голосование за следующую карту."
} }
"Runoff Vote Nextmap" "Runoff Vote Nextmap"
{ {
"ru" "Повторное голосование за карту." "ru" "Повторное голосование за карту."
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"ru" "Голосование за следующую карту запущено." "ru" "Голосование за следующую карту запущено."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"ru" "Голосование за карту завершено. Следующей картой будет: {1}. (Получено {2}%% из {3} голосов(а))" "ru" "Голосование за карту завершено. Следующей картой будет: {1}. (Получено {2}%% из {3} голосов(а))"
} }
"Current Map Extended" "Current Map Extended"
{ {
"ru" "Текущая карта была продлена. (Получено {1}%% из {2} голосов(а))" "ru" "Текущая карта была продлена. (Получено {1}%% из {2} голосов(а))"
} }
"Extend Map" "Extend Map"
{ {
"ru" "Продлить текущую карту." "ru" "Продлить текущую карту."
} }
"Dont Change" "Dont Change"
{ {
"ru" "Не менять карту." "ru" "Не менять карту."
} }
"Current Map Stays" "Current Map Stays"
{ {
"ru" "Текущая карта не сменится! (Получено {1}%% из {2} голосов(а))" "ru" "Текущая карта не сменится! (Получено {1}%% из {2} голосов(а))"
} }
"Changed Next Map" "Changed Next Map"
{ {
"ru" "Следующая карта изменена на \"{1}\"." "ru" "Следующая карта изменена на \"{1}\"."
} }
"Number Of Votes" "Number Of Votes"
{ {
"ru" "Количество голосов" "ru" "Количество голосов"
} }
"Custom" "Custom"
{ {
"ru" "{1} (Случайная)" "ru" "{1} (Случайная)"
} }
"Revote Is Needed" "Revote Is Needed"
{ {
"ru" "Ни одна карта не получила более, чем {1}%% голосов(а).\nИтак, какая карта будет следующей? Приготовьтесь к повторному голосованию!" "ru" "Ни одна карта не получила более, чем {1}%% голосов(а).\nИтак, какая карта будет следующей? Приготовьтесь к повторному голосованию!"
} }
"Revote Warning" "Revote Warning"
{ {
"ru" "Повторное голосование начнётся через: {1}s" "ru" "Повторное голосование начнётся через: {1}s"
} }
"Vote Warning" "Vote Warning"
{ {
"ru" "Внимание! Голосование за следующую карту начнётся через: {1}s" "ru" "Внимание! Голосование за следующую карту начнётся через: {1}s"
} }
"Line One" "Line One"
{ {
"ru" "Выбери, какая карта будет следующей..." "ru" "Выбери, какая карта будет следующей..."
} }
"Line Two" "Line Two"
{ {
"ru" "...и не клацай кнопки,не подумав ;-)" "ru" "...и не клацай кнопки,не подумав ;-)"
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"sv" "Rösta för nästa bana!" "sv" "Rösta för nästa bana!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"sv" "Röstning om nästa bana har börjat." "sv" "Röstning om nästa bana har börjat."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"sv" "Röstningen om banan har avslutats. Nästa bana kommer att bli {1}. (Fick {2}%% av {3} röster) " "sv" "Röstningen om banan har avslutats. Nästa bana kommer att bli {1}. (Fick {2}%% av {3} röster) "
} }
"Current Map Extended" "Current Map Extended"
{ {
"sv" "Den nuvarande banan har förlängts. (Fick {1}%% av {2} röster) " "sv" "Den nuvarande banan har förlängts. (Fick {1}%% av {2} röster) "
} }
"Extend Map" "Extend Map"
{ {
"sv" "Förläng nuvarande bana" "sv" "Förläng nuvarande bana"
} }
"Dont Change" "Dont Change"
{ {
"sv" "Byt inte" "sv" "Byt inte"
} }
"Current Map Stays" "Current Map Stays"
{ {
"sv" "Nuvarande banan fortsätter! Röstningen har talat! (Fick {1}%% av {2} röster) " "sv" "Nuvarande banan fortsätter! Röstningen har talat! (Fick {1}%% av {2} röster) "
} }
"Changed Next Map" "Changed Next Map"
{ {
"sv" "Bytta nästa bana till \"{1}\". " "sv" "Bytta nästa bana till \"{1}\". "
} }
} }

View File

@ -1,2 +1,2 @@
Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning", Missing "Runoff Vote Nextmap", "Number Of Votes", "Custom", "Revote Is Needed", "Revote Warning", "Vote Warning",
"Line One", "Line Two", "Cannot Start Vote", and "Tie Vote" "Line One", "Line Two", "Cannot Start Vote", and "Tie Vote"

View File

@ -1,43 +1,43 @@
"Phrases" "Phrases"
{ {
"Vote Nextmap" "Vote Nextmap"
{ {
"tr" "Sonraki harita için oy ver!" "tr" "Sonraki harita için oy ver!"
} }
"Nextmap Voting Started" "Nextmap Voting Started"
{ {
"tr" "Sonraki harita için oylama başladı." "tr" "Sonraki harita için oylama başladı."
} }
"Nextmap Voting Finished" "Nextmap Voting Finished"
{ {
"tr" "Harita oylaması sona erdi. Sıradaki harita {1} olacak. ({3} oyun %%{2}'i alındı) " "tr" "Harita oylaması sona erdi. Sıradaki harita {1} olacak. ({3} oyun %%{2}'i alındı) "
} }
"Current Map Extended" "Current Map Extended"
{ {
"tr" "Geçerli harita uzatıldı. ({2} oyun %%{1}'i alındı) " "tr" "Geçerli harita uzatıldı. ({2} oyun %%{1}'i alındı) "
} }
"Extend Map" "Extend Map"
{ {
"tr" "Geçerli Haritayı Uzat" "tr" "Geçerli Haritayı Uzat"
} }
"Dont Change" "Dont Change"
{ {
"tr" "Değiştirme" "tr" "Değiştirme"
} }
"Current Map Stays" "Current Map Stays"
{ {
"tr" "Geçerli harita devam ediyor! Oylama konuştu! ({2} oyun %%{1}'i alındı) " "tr" "Geçerli harita devam ediyor! Oylama konuştu! ({2} oyun %%{1}'i alındı) "
} }
"Changed Next Map" "Changed Next Map"
{ {
"tr" "Sıradaki harita \"{1}\" olarak değiştirildi." "tr" "Sıradaki harita \"{1}\" olarak değiştirildi."
} }
} }