converted newlines to unix
This commit is contained in:
parent
a0186f4a49
commit
459815ce0e
@ -1,31 +1,31 @@
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <geoip>
|
||||
|
||||
#pragma newdecls required
|
||||
|
||||
public Plugin myinfo = {
|
||||
name = "Connect Announce",
|
||||
author = "BotoX",
|
||||
description = "Simple connect announcer",
|
||||
version = "1.0",
|
||||
url = ""
|
||||
}
|
||||
|
||||
public void OnClientPostAdminCheck(int client)
|
||||
{
|
||||
if(IsFakeClient(client))
|
||||
return;
|
||||
|
||||
static char sAuth[32];
|
||||
static char sIP[16];
|
||||
static char sCountry[32];
|
||||
|
||||
GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth));
|
||||
|
||||
if(GetClientIP(client, sIP, sizeof(sIP)) && GeoipCountry(sIP, sCountry, sizeof(sCountry)))
|
||||
PrintToChatAll("\x04%L [\x03%s\x04] connected from %s", client, sAuth, sCountry);
|
||||
else
|
||||
PrintToChatAll("\x04%L [\x03%s\x04] connected", client, sAuth);
|
||||
}
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <geoip>
|
||||
|
||||
#pragma newdecls required
|
||||
|
||||
public Plugin myinfo = {
|
||||
name = "Connect Announce",
|
||||
author = "BotoX",
|
||||
description = "Simple connect announcer",
|
||||
version = "1.0",
|
||||
url = ""
|
||||
}
|
||||
|
||||
public void OnClientPostAdminCheck(int client)
|
||||
{
|
||||
if(IsFakeClient(client))
|
||||
return;
|
||||
|
||||
static char sAuth[32];
|
||||
static char sIP[16];
|
||||
static char sCountry[32];
|
||||
|
||||
GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth));
|
||||
|
||||
if(GetClientIP(client, sIP, sizeof(sIP)) && GeoipCountry(sIP, sCountry, sizeof(sCountry)))
|
||||
PrintToChatAll("\x04%L [\x03%s\x04] connected from %s", client, sAuth, sCountry);
|
||||
else
|
||||
PrintToChatAll("\x04%L [\x03%s\x04] connected", client, sAuth);
|
||||
}
|
||||
|
@ -1,118 +1,118 @@
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <dhooks>
|
||||
#undef REQUIRE_PLUGIN
|
||||
#include <updater>
|
||||
|
||||
#define PLUGIN_NAME "Napalm Lag Fix"
|
||||
#define PLUGIN_VERSION "1.0.3"
|
||||
|
||||
#define UPDATE_URL "http://godtony.mooo.com/napalmlagfix/napalmlagfix.txt"
|
||||
|
||||
#define DMG_BURN (1 << 3)
|
||||
|
||||
new Handle:g_hRadiusDamage = INVALID_HANDLE;
|
||||
new bool:g_bCheckNullPtr = false;
|
||||
|
||||
public Plugin:myinfo =
|
||||
{
|
||||
name = PLUGIN_NAME,
|
||||
author = "GoD-Tony + BotoX",
|
||||
description = "Prevents lag when napalm is used on players",
|
||||
version = PLUGIN_VERSION,
|
||||
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)
|
||||
{
|
||||
MarkNativeAsOptional("DHookIsNullParam");
|
||||
|
||||
return APLRes_Success;
|
||||
}
|
||||
|
||||
public OnPluginStart()
|
||||
{
|
||||
// Convars.
|
||||
new Handle:hCvar = CreateConVar("sm_napalmlagfix_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);
|
||||
SetConVarString(hCvar, PLUGIN_VERSION);
|
||||
|
||||
// Gamedata.
|
||||
new Handle:hConfig = LoadGameConfigFile("napalmlagfix.games");
|
||||
|
||||
if (hConfig == INVALID_HANDLE)
|
||||
{
|
||||
SetFailState("Could not find gamedata file: napalmlagfix.games.txt");
|
||||
}
|
||||
|
||||
new offset = GameConfGetOffset(hConfig, "RadiusDamage");
|
||||
|
||||
if (offset == -1)
|
||||
{
|
||||
SetFailState("Failed to find RadiusDamage offset");
|
||||
}
|
||||
|
||||
CloseHandle(hConfig);
|
||||
|
||||
// DHooks.
|
||||
g_bCheckNullPtr = (GetFeatureStatus(FeatureType_Native, "DHookIsNullParam") == FeatureStatus_Available);
|
||||
|
||||
g_hRadiusDamage = DHookCreate(offset, HookType_GameRules, ReturnType_Void, ThisPointer_Ignore, Hook_RadiusDamage);
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_ObjectPtr); // 1 - CTakeDamageInfo &info
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_VectorPtr); // 2 - Vector &vecSrc
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_Float); // 3 - float flRadius
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_Int); // 4 - int iClassIgnore
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_CBaseEntity); // 5 - CBaseEntity *pEntityIgnore
|
||||
|
||||
// Updater.
|
||||
if (LibraryExists("updater"))
|
||||
{
|
||||
Updater_AddPlugin(UPDATE_URL);
|
||||
}
|
||||
}
|
||||
|
||||
public OnLibraryAdded(const String:name[])
|
||||
{
|
||||
if (StrEqual(name, "updater"))
|
||||
{
|
||||
Updater_AddPlugin(UPDATE_URL);
|
||||
}
|
||||
}
|
||||
|
||||
public Updater_OnPluginUpdated()
|
||||
{
|
||||
// There could be new gamedata in this update.
|
||||
ReloadPlugin();
|
||||
}
|
||||
|
||||
public OnMapStart()
|
||||
{
|
||||
DHookGamerules(g_hRadiusDamage, false);
|
||||
}
|
||||
|
||||
public MRESReturn:Hook_RadiusDamage(Handle:hParams)
|
||||
{
|
||||
// As of DHooks 1.0.12 we must check for a null param.
|
||||
if (g_bCheckNullPtr && DHookIsNullParam(hParams, 5))
|
||||
return MRES_Ignored;
|
||||
|
||||
new iDmgBits = DHookGetParamObjectPtrVar(hParams, 1, 60, ObjectValueType_Int);
|
||||
new iEntIgnore = DHookGetParam(hParams, 5);
|
||||
|
||||
if(!(iDmgBits & DMG_BURN))
|
||||
return MRES_Ignored;
|
||||
|
||||
// Block napalm damage if it's coming from another client.
|
||||
if (1 <= iEntIgnore <= MaxClients)
|
||||
return MRES_Supercede;
|
||||
|
||||
// Block napalm that comes from grenades
|
||||
new String:sEntClassName[64];
|
||||
if(GetEntityClassname(iEntIgnore, sEntClassName, sizeof(sEntClassName)))
|
||||
{
|
||||
if(!strcmp(sEntClassName, "hegrenade_projectile"))
|
||||
return MRES_Supercede;
|
||||
}
|
||||
|
||||
return MRES_Ignored;
|
||||
}
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <dhooks>
|
||||
#undef REQUIRE_PLUGIN
|
||||
#include <updater>
|
||||
|
||||
#define PLUGIN_NAME "Napalm Lag Fix"
|
||||
#define PLUGIN_VERSION "1.0.3"
|
||||
|
||||
#define UPDATE_URL "http://godtony.mooo.com/napalmlagfix/napalmlagfix.txt"
|
||||
|
||||
#define DMG_BURN (1 << 3)
|
||||
|
||||
new Handle:g_hRadiusDamage = INVALID_HANDLE;
|
||||
new bool:g_bCheckNullPtr = false;
|
||||
|
||||
public Plugin:myinfo =
|
||||
{
|
||||
name = PLUGIN_NAME,
|
||||
author = "GoD-Tony + BotoX",
|
||||
description = "Prevents lag when napalm is used on players",
|
||||
version = PLUGIN_VERSION,
|
||||
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)
|
||||
{
|
||||
MarkNativeAsOptional("DHookIsNullParam");
|
||||
|
||||
return APLRes_Success;
|
||||
}
|
||||
|
||||
public OnPluginStart()
|
||||
{
|
||||
// Convars.
|
||||
new Handle:hCvar = CreateConVar("sm_napalmlagfix_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);
|
||||
SetConVarString(hCvar, PLUGIN_VERSION);
|
||||
|
||||
// Gamedata.
|
||||
new Handle:hConfig = LoadGameConfigFile("napalmlagfix.games");
|
||||
|
||||
if (hConfig == INVALID_HANDLE)
|
||||
{
|
||||
SetFailState("Could not find gamedata file: napalmlagfix.games.txt");
|
||||
}
|
||||
|
||||
new offset = GameConfGetOffset(hConfig, "RadiusDamage");
|
||||
|
||||
if (offset == -1)
|
||||
{
|
||||
SetFailState("Failed to find RadiusDamage offset");
|
||||
}
|
||||
|
||||
CloseHandle(hConfig);
|
||||
|
||||
// DHooks.
|
||||
g_bCheckNullPtr = (GetFeatureStatus(FeatureType_Native, "DHookIsNullParam") == FeatureStatus_Available);
|
||||
|
||||
g_hRadiusDamage = DHookCreate(offset, HookType_GameRules, ReturnType_Void, ThisPointer_Ignore, Hook_RadiusDamage);
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_ObjectPtr); // 1 - CTakeDamageInfo &info
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_VectorPtr); // 2 - Vector &vecSrc
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_Float); // 3 - float flRadius
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_Int); // 4 - int iClassIgnore
|
||||
DHookAddParam(g_hRadiusDamage, HookParamType_CBaseEntity); // 5 - CBaseEntity *pEntityIgnore
|
||||
|
||||
// Updater.
|
||||
if (LibraryExists("updater"))
|
||||
{
|
||||
Updater_AddPlugin(UPDATE_URL);
|
||||
}
|
||||
}
|
||||
|
||||
public OnLibraryAdded(const String:name[])
|
||||
{
|
||||
if (StrEqual(name, "updater"))
|
||||
{
|
||||
Updater_AddPlugin(UPDATE_URL);
|
||||
}
|
||||
}
|
||||
|
||||
public Updater_OnPluginUpdated()
|
||||
{
|
||||
// There could be new gamedata in this update.
|
||||
ReloadPlugin();
|
||||
}
|
||||
|
||||
public OnMapStart()
|
||||
{
|
||||
DHookGamerules(g_hRadiusDamage, false);
|
||||
}
|
||||
|
||||
public MRESReturn:Hook_RadiusDamage(Handle:hParams)
|
||||
{
|
||||
// As of DHooks 1.0.12 we must check for a null param.
|
||||
if (g_bCheckNullPtr && DHookIsNullParam(hParams, 5))
|
||||
return MRES_Ignored;
|
||||
|
||||
new iDmgBits = DHookGetParamObjectPtrVar(hParams, 1, 60, ObjectValueType_Int);
|
||||
new iEntIgnore = DHookGetParam(hParams, 5);
|
||||
|
||||
if(!(iDmgBits & DMG_BURN))
|
||||
return MRES_Ignored;
|
||||
|
||||
// Block napalm damage if it's coming from another client.
|
||||
if (1 <= iEntIgnore <= MaxClients)
|
||||
return MRES_Supercede;
|
||||
|
||||
// Block napalm that comes from grenades
|
||||
new String:sEntClassName[64];
|
||||
if(GetEntityClassname(iEntIgnore, sEntClassName, sizeof(sEntClassName)))
|
||||
{
|
||||
if(!strcmp(sEntClassName, "hegrenade_projectile"))
|
||||
return MRES_Supercede;
|
||||
}
|
||||
|
||||
return MRES_Ignored;
|
||||
}
|
||||
|
@ -1,42 +1,42 @@
|
||||
#pragma semicolon 1
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <dhooks>
|
||||
|
||||
//int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&)
|
||||
Handle g_hDamagedByExplosion;
|
||||
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "NoGrenadeRinging",
|
||||
author = "BotoX",
|
||||
description = "Block the annoying ringing noise when a grenade explodes next to you",
|
||||
version = "1.0",
|
||||
url = ""
|
||||
};
|
||||
|
||||
public void OnPluginStart()
|
||||
{
|
||||
Handle hTemp = LoadGameConfigFile("NoGrenadeRinging.games");
|
||||
if(hTemp == INVALID_HANDLE)
|
||||
SetFailState("Why you no has gamedata?");
|
||||
|
||||
int Offset = GameConfGetOffset(hTemp, "OnDamagedByExplosion");
|
||||
g_hDamagedByExplosion = DHookCreate(Offset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnDamagedByExplosion);
|
||||
DHookAddParam(g_hDamagedByExplosion, HookParamType_ObjectPtr);
|
||||
|
||||
CloseHandle(hTemp);
|
||||
}
|
||||
|
||||
public void OnClientPutInServer(int client)
|
||||
{
|
||||
//Dont add removal callback for this one
|
||||
DHookEntity(g_hDamagedByExplosion, false, client);
|
||||
}
|
||||
|
||||
//int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&)
|
||||
public MRESReturn:OnDamagedByExplosion(int pThis, Handle hReturn, Handle hParams)
|
||||
{
|
||||
// Block call
|
||||
return MRES_Supercede;
|
||||
}
|
||||
#pragma semicolon 1
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <dhooks>
|
||||
|
||||
//int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&)
|
||||
Handle g_hDamagedByExplosion;
|
||||
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "NoGrenadeRinging",
|
||||
author = "BotoX",
|
||||
description = "Block the annoying ringing noise when a grenade explodes next to you",
|
||||
version = "1.0",
|
||||
url = ""
|
||||
};
|
||||
|
||||
public void OnPluginStart()
|
||||
{
|
||||
Handle hTemp = LoadGameConfigFile("NoGrenadeRinging.games");
|
||||
if(hTemp == INVALID_HANDLE)
|
||||
SetFailState("Why you no has gamedata?");
|
||||
|
||||
int Offset = GameConfGetOffset(hTemp, "OnDamagedByExplosion");
|
||||
g_hDamagedByExplosion = DHookCreate(Offset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnDamagedByExplosion);
|
||||
DHookAddParam(g_hDamagedByExplosion, HookParamType_ObjectPtr);
|
||||
|
||||
CloseHandle(hTemp);
|
||||
}
|
||||
|
||||
public void OnClientPutInServer(int client)
|
||||
{
|
||||
//Dont add removal callback for this one
|
||||
DHookEntity(g_hDamagedByExplosion, false, client);
|
||||
}
|
||||
|
||||
//int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&)
|
||||
public MRESReturn:OnDamagedByExplosion(int pThis, Handle hReturn, Handle hParams)
|
||||
{
|
||||
// Block call
|
||||
return MRES_Supercede;
|
||||
}
|
||||
|
@ -1,333 +1,333 @@
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <morecolors>
|
||||
|
||||
#define PLUGIN_NAME "Toggle Weapon Sounds"
|
||||
#define PLUGIN_VERSION "1.2.0"
|
||||
|
||||
#define UPDATE_URL "http://godtony.mooo.com/stopsound/stopsound.txt"
|
||||
|
||||
new bool:g_bStopSound[MAXPLAYERS+1], bool:g_bHooked;
|
||||
static String:g_sKVPATH[PLATFORM_MAX_PATH];
|
||||
new Handle:g_hWepSounds;
|
||||
|
||||
public Plugin:myinfo =
|
||||
{
|
||||
name = PLUGIN_NAME,
|
||||
author = "GoD-Tony, edit by id/Obus",
|
||||
description = "Allows clients to stop hearing weapon sounds",
|
||||
version = PLUGIN_VERSION,
|
||||
url = "http://www.sourcemod.net/"
|
||||
};
|
||||
|
||||
public OnPluginStart()
|
||||
{
|
||||
// Detect game and hook appropriate tempent.
|
||||
decl String:sGame[32];
|
||||
GetGameFolderName(sGame, sizeof(sGame));
|
||||
|
||||
if (StrEqual(sGame, "cstrike"))
|
||||
{
|
||||
AddTempEntHook("Shotgun Shot", CSS_Hook_ShotgunShot);
|
||||
}
|
||||
else if (StrEqual(sGame, "dod"))
|
||||
{
|
||||
AddTempEntHook("FireBullets", DODS_Hook_FireBullets);
|
||||
}
|
||||
|
||||
// TF2/HL2:DM and misc weapon sounds will be caught here.
|
||||
AddNormalSoundHook(Hook_NormalSound);
|
||||
|
||||
CreateConVar("sm_stopsound_version", PLUGIN_VERSION, "Toggle Weapon Sounds", FCVAR_NOTIFY|FCVAR_DONTRECORD|FCVAR_REPLICATED);
|
||||
RegConsoleCmd("sm_stopsound", Command_StopSound, "Toggle hearing weapon sounds");
|
||||
|
||||
if (g_hWepSounds != INVALID_HANDLE)
|
||||
{
|
||||
CloseHandle(g_hWepSounds);
|
||||
}
|
||||
|
||||
g_hWepSounds = CreateKeyValues("WeaponSounds");
|
||||
BuildPath(Path_SM, g_sKVPATH, sizeof(g_sKVPATH), "data/playerprefs.WepSounds.txt");
|
||||
|
||||
FileToKeyValues(g_hWepSounds, g_sKVPATH);
|
||||
|
||||
// Updater.
|
||||
//if (LibraryExists("updater"))
|
||||
//{
|
||||
// Updater_AddPlugin(UPDATE_URL);
|
||||
//}
|
||||
}
|
||||
|
||||
/*public OnLibraryAdded(const String:name[])
|
||||
{
|
||||
if (StrEqual(name, "updater"))
|
||||
{
|
||||
Updater_AddPlugin(UPDATE_URL);
|
||||
}
|
||||
}*/
|
||||
|
||||
public Action:Command_StopSound(client, args)
|
||||
{
|
||||
if (client == 0)
|
||||
{
|
||||
PrintToServer("[SM] Cannot use command from server console.");
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
if (args > 0)
|
||||
{
|
||||
decl String:Arguments[32];
|
||||
GetCmdArg(1, Arguments, sizeof(Arguments));
|
||||
|
||||
if (StrEqual(Arguments, "save"))
|
||||
{
|
||||
KvRewind(g_hWepSounds);
|
||||
|
||||
decl String:SID[32];
|
||||
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
|
||||
|
||||
if (KvJumpToKey(g_hWepSounds, SID, true))
|
||||
{
|
||||
new disabled;
|
||||
disabled = KvGetNum(g_hWepSounds, "disabled", 0);
|
||||
|
||||
if (!disabled)
|
||||
{
|
||||
//CPrintToChat(client, "[StopSound] Saved entry for STEAMID({green}%s{default}) {green}successfully{default}.", SID);
|
||||
KvSetNum(g_hWepSounds, "disabled", 1);
|
||||
KvRewind(g_hWepSounds);
|
||||
KeyValuesToFile(g_hWepSounds, g_sKVPATH);
|
||||
|
||||
g_bStopSound[client] = true;
|
||||
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {red}disabled{default} - {green}entry saved{default}.");
|
||||
CheckHooks();
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
else
|
||||
{
|
||||
//CPrintToChat(client, "[StopSound] Entry for STEAMID({green}%s{default}) {green}successfully deleted{default}.", SID);
|
||||
KvDeleteThis(g_hWepSounds);
|
||||
KvRewind(g_hWepSounds);
|
||||
KeyValuesToFile(g_hWepSounds, g_sKVPATH);
|
||||
|
||||
g_bStopSound[client] = false;
|
||||
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {green}enabled{default} - {red}entry deleted{default}.");
|
||||
CheckHooks();
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
}
|
||||
|
||||
KvRewind(g_hWepSounds);
|
||||
}
|
||||
else if (StrEqual(Arguments, "delete"))
|
||||
{
|
||||
KvRewind(g_hWepSounds);
|
||||
|
||||
decl String:SID[32];
|
||||
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
|
||||
|
||||
if (KvJumpToKey(g_hWepSounds, SID, false))
|
||||
{
|
||||
g_bStopSound[client] = false;
|
||||
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {green}enabled{default} - {red}entry deleted{default}.");
|
||||
CheckHooks();
|
||||
|
||||
KvDeleteThis(g_hWepSounds);
|
||||
KvRewind(g_hWepSounds);
|
||||
KeyValuesToFile(g_hWepSounds, g_sKVPATH);
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
else
|
||||
{
|
||||
CPrintToChat(client, "{green}[StopSound]{default} Entry {red}not found{default}.");
|
||||
return Plugin_Handled;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PrintToChat(client, "[SM] Usage sm_stopsound <save|delete>");
|
||||
return Plugin_Handled;
|
||||
}
|
||||
}
|
||||
|
||||
g_bStopSound[client] = !g_bStopSound[client];
|
||||
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds %s.", g_bStopSound[client] ? "{red}disabled{default}" : "{green}enabled{default}");
|
||||
CheckHooks();
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public OnClientPutInServer(client)
|
||||
{
|
||||
KvRewind(g_hWepSounds);
|
||||
|
||||
decl String:SID[32];
|
||||
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
|
||||
|
||||
if (KvJumpToKey(g_hWepSounds, SID, false))
|
||||
{
|
||||
new disabled;
|
||||
disabled = KvGetNum(g_hWepSounds, "disabled", 0);
|
||||
|
||||
if (disabled)
|
||||
{
|
||||
g_bStopSound[client] = true;
|
||||
}
|
||||
}
|
||||
|
||||
CheckHooks();
|
||||
KvRewind(g_hWepSounds);
|
||||
}
|
||||
|
||||
public OnClientDisconnect_Post(client)
|
||||
{
|
||||
g_bStopSound[client] = false;
|
||||
CheckHooks();
|
||||
}
|
||||
|
||||
CheckHooks()
|
||||
{
|
||||
new bool:bShouldHook = false;
|
||||
|
||||
for (new i = 1; i <= MaxClients; i++)
|
||||
{
|
||||
if (g_bStopSound[i])
|
||||
{
|
||||
bShouldHook = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Fake (un)hook because toggling actual hooks will cause server instability.
|
||||
g_bHooked = bShouldHook;
|
||||
}
|
||||
|
||||
public Action:Hook_NormalSound(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
|
||||
{
|
||||
// Ignore non-weapon sounds.
|
||||
if (!g_bHooked || !(strncmp(sample, "weapons", 7) == 0 || strncmp(sample[1], "weapons", 7) == 0))
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
decl i, j;
|
||||
|
||||
for (i = 0; i < numClients; i++)
|
||||
{
|
||||
if (g_bStopSound[clients[i]])
|
||||
{
|
||||
// Remove the client from the array.
|
||||
for (j = i; j < numClients - 1; j++)
|
||||
{
|
||||
clients[j] = clients[j + 1];
|
||||
}
|
||||
|
||||
numClients--;
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
return (numClients > 0) ? Plugin_Changed : Plugin_Stop;
|
||||
}
|
||||
|
||||
public Action:CSS_Hook_ShotgunShot(const String:te_name[], const Players[], numClients, Float:delay)
|
||||
{
|
||||
if (!g_bHooked)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
// Check which clients need to be excluded.
|
||||
decl newClients[MaxClients], client, i;
|
||||
new newTotal = 0;
|
||||
|
||||
for (i = 0; i < numClients; i++)
|
||||
{
|
||||
client = Players[i];
|
||||
|
||||
if (!g_bStopSound[client])
|
||||
{
|
||||
newClients[newTotal++] = client;
|
||||
}
|
||||
}
|
||||
|
||||
// No clients were excluded.
|
||||
if (newTotal == numClients)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
else if (newTotal == 0) // All clients were excluded and there is no need to broadcast.
|
||||
{
|
||||
return Plugin_Stop;
|
||||
}
|
||||
|
||||
// Re-broadcast to clients that still need it.
|
||||
decl Float:vTemp[3];
|
||||
TE_Start("Shotgun Shot");
|
||||
TE_ReadVector("m_vecOrigin", vTemp);
|
||||
TE_WriteVector("m_vecOrigin", vTemp);
|
||||
TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]"));
|
||||
TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]"));
|
||||
TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID"));
|
||||
TE_WriteNum("m_iMode", TE_ReadNum("m_iMode"));
|
||||
TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed"));
|
||||
TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer"));
|
||||
TE_WriteFloat("m_fInaccuracy", TE_ReadFloat("m_fInaccuracy"));
|
||||
TE_WriteFloat("m_fSpread", TE_ReadFloat("m_fSpread"));
|
||||
TE_Send(newClients, newTotal, delay);
|
||||
|
||||
return Plugin_Stop;
|
||||
}
|
||||
|
||||
public Action:DODS_Hook_FireBullets(const String:te_name[], const Players[], numClients, Float:delay)
|
||||
{
|
||||
if (!g_bHooked)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
// Check which clients need to be excluded.
|
||||
decl newClients[MaxClients], client, i;
|
||||
new newTotal = 0;
|
||||
|
||||
for (i = 0; i < numClients; i++)
|
||||
{
|
||||
client = Players[i];
|
||||
|
||||
if (!g_bStopSound[client])
|
||||
{
|
||||
newClients[newTotal++] = client;
|
||||
}
|
||||
}
|
||||
|
||||
// No clients were excluded.
|
||||
if (newTotal == numClients)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
else if (newTotal == 0)// All clients were excluded and there is no need to broadcast.
|
||||
{
|
||||
return Plugin_Stop;
|
||||
}
|
||||
|
||||
// Re-broadcast to clients that still need it.
|
||||
decl Float:vTemp[3];
|
||||
TE_Start("FireBullets");
|
||||
TE_ReadVector("m_vecOrigin", vTemp);
|
||||
TE_WriteVector("m_vecOrigin", vTemp);
|
||||
TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]"));
|
||||
TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]"));
|
||||
TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID"));
|
||||
TE_WriteNum("m_iMode", TE_ReadNum("m_iMode"));
|
||||
TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed"));
|
||||
TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer"));
|
||||
TE_WriteFloat("m_flSpread", TE_ReadFloat("m_flSpread"));
|
||||
TE_Send(newClients, newTotal, delay);
|
||||
|
||||
return Plugin_Stop;
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <morecolors>
|
||||
|
||||
#define PLUGIN_NAME "Toggle Weapon Sounds"
|
||||
#define PLUGIN_VERSION "1.2.0"
|
||||
|
||||
#define UPDATE_URL "http://godtony.mooo.com/stopsound/stopsound.txt"
|
||||
|
||||
new bool:g_bStopSound[MAXPLAYERS+1], bool:g_bHooked;
|
||||
static String:g_sKVPATH[PLATFORM_MAX_PATH];
|
||||
new Handle:g_hWepSounds;
|
||||
|
||||
public Plugin:myinfo =
|
||||
{
|
||||
name = PLUGIN_NAME,
|
||||
author = "GoD-Tony, edit by id/Obus",
|
||||
description = "Allows clients to stop hearing weapon sounds",
|
||||
version = PLUGIN_VERSION,
|
||||
url = "http://www.sourcemod.net/"
|
||||
};
|
||||
|
||||
public OnPluginStart()
|
||||
{
|
||||
// Detect game and hook appropriate tempent.
|
||||
decl String:sGame[32];
|
||||
GetGameFolderName(sGame, sizeof(sGame));
|
||||
|
||||
if (StrEqual(sGame, "cstrike"))
|
||||
{
|
||||
AddTempEntHook("Shotgun Shot", CSS_Hook_ShotgunShot);
|
||||
}
|
||||
else if (StrEqual(sGame, "dod"))
|
||||
{
|
||||
AddTempEntHook("FireBullets", DODS_Hook_FireBullets);
|
||||
}
|
||||
|
||||
// TF2/HL2:DM and misc weapon sounds will be caught here.
|
||||
AddNormalSoundHook(Hook_NormalSound);
|
||||
|
||||
CreateConVar("sm_stopsound_version", PLUGIN_VERSION, "Toggle Weapon Sounds", FCVAR_NOTIFY|FCVAR_DONTRECORD|FCVAR_REPLICATED);
|
||||
RegConsoleCmd("sm_stopsound", Command_StopSound, "Toggle hearing weapon sounds");
|
||||
|
||||
if (g_hWepSounds != INVALID_HANDLE)
|
||||
{
|
||||
CloseHandle(g_hWepSounds);
|
||||
}
|
||||
|
||||
g_hWepSounds = CreateKeyValues("WeaponSounds");
|
||||
BuildPath(Path_SM, g_sKVPATH, sizeof(g_sKVPATH), "data/playerprefs.WepSounds.txt");
|
||||
|
||||
FileToKeyValues(g_hWepSounds, g_sKVPATH);
|
||||
|
||||
// Updater.
|
||||
//if (LibraryExists("updater"))
|
||||
//{
|
||||
// Updater_AddPlugin(UPDATE_URL);
|
||||
//}
|
||||
}
|
||||
|
||||
/*public OnLibraryAdded(const String:name[])
|
||||
{
|
||||
if (StrEqual(name, "updater"))
|
||||
{
|
||||
Updater_AddPlugin(UPDATE_URL);
|
||||
}
|
||||
}*/
|
||||
|
||||
public Action:Command_StopSound(client, args)
|
||||
{
|
||||
if (client == 0)
|
||||
{
|
||||
PrintToServer("[SM] Cannot use command from server console.");
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
if (args > 0)
|
||||
{
|
||||
decl String:Arguments[32];
|
||||
GetCmdArg(1, Arguments, sizeof(Arguments));
|
||||
|
||||
if (StrEqual(Arguments, "save"))
|
||||
{
|
||||
KvRewind(g_hWepSounds);
|
||||
|
||||
decl String:SID[32];
|
||||
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
|
||||
|
||||
if (KvJumpToKey(g_hWepSounds, SID, true))
|
||||
{
|
||||
new disabled;
|
||||
disabled = KvGetNum(g_hWepSounds, "disabled", 0);
|
||||
|
||||
if (!disabled)
|
||||
{
|
||||
//CPrintToChat(client, "[StopSound] Saved entry for STEAMID({green}%s{default}) {green}successfully{default}.", SID);
|
||||
KvSetNum(g_hWepSounds, "disabled", 1);
|
||||
KvRewind(g_hWepSounds);
|
||||
KeyValuesToFile(g_hWepSounds, g_sKVPATH);
|
||||
|
||||
g_bStopSound[client] = true;
|
||||
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {red}disabled{default} - {green}entry saved{default}.");
|
||||
CheckHooks();
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
else
|
||||
{
|
||||
//CPrintToChat(client, "[StopSound] Entry for STEAMID({green}%s{default}) {green}successfully deleted{default}.", SID);
|
||||
KvDeleteThis(g_hWepSounds);
|
||||
KvRewind(g_hWepSounds);
|
||||
KeyValuesToFile(g_hWepSounds, g_sKVPATH);
|
||||
|
||||
g_bStopSound[client] = false;
|
||||
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {green}enabled{default} - {red}entry deleted{default}.");
|
||||
CheckHooks();
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
}
|
||||
|
||||
KvRewind(g_hWepSounds);
|
||||
}
|
||||
else if (StrEqual(Arguments, "delete"))
|
||||
{
|
||||
KvRewind(g_hWepSounds);
|
||||
|
||||
decl String:SID[32];
|
||||
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
|
||||
|
||||
if (KvJumpToKey(g_hWepSounds, SID, false))
|
||||
{
|
||||
g_bStopSound[client] = false;
|
||||
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds {green}enabled{default} - {red}entry deleted{default}.");
|
||||
CheckHooks();
|
||||
|
||||
KvDeleteThis(g_hWepSounds);
|
||||
KvRewind(g_hWepSounds);
|
||||
KeyValuesToFile(g_hWepSounds, g_sKVPATH);
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
else
|
||||
{
|
||||
CPrintToChat(client, "{green}[StopSound]{default} Entry {red}not found{default}.");
|
||||
return Plugin_Handled;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PrintToChat(client, "[SM] Usage sm_stopsound <save|delete>");
|
||||
return Plugin_Handled;
|
||||
}
|
||||
}
|
||||
|
||||
g_bStopSound[client] = !g_bStopSound[client];
|
||||
CReplyToCommand(client, "{green}[StopSound]{default} Weapon sounds %s.", g_bStopSound[client] ? "{red}disabled{default}" : "{green}enabled{default}");
|
||||
CheckHooks();
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public OnClientPutInServer(client)
|
||||
{
|
||||
KvRewind(g_hWepSounds);
|
||||
|
||||
decl String:SID[32];
|
||||
GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID));
|
||||
|
||||
if (KvJumpToKey(g_hWepSounds, SID, false))
|
||||
{
|
||||
new disabled;
|
||||
disabled = KvGetNum(g_hWepSounds, "disabled", 0);
|
||||
|
||||
if (disabled)
|
||||
{
|
||||
g_bStopSound[client] = true;
|
||||
}
|
||||
}
|
||||
|
||||
CheckHooks();
|
||||
KvRewind(g_hWepSounds);
|
||||
}
|
||||
|
||||
public OnClientDisconnect_Post(client)
|
||||
{
|
||||
g_bStopSound[client] = false;
|
||||
CheckHooks();
|
||||
}
|
||||
|
||||
CheckHooks()
|
||||
{
|
||||
new bool:bShouldHook = false;
|
||||
|
||||
for (new i = 1; i <= MaxClients; i++)
|
||||
{
|
||||
if (g_bStopSound[i])
|
||||
{
|
||||
bShouldHook = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Fake (un)hook because toggling actual hooks will cause server instability.
|
||||
g_bHooked = bShouldHook;
|
||||
}
|
||||
|
||||
public Action:Hook_NormalSound(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
|
||||
{
|
||||
// Ignore non-weapon sounds.
|
||||
if (!g_bHooked || !(strncmp(sample, "weapons", 7) == 0 || strncmp(sample[1], "weapons", 7) == 0))
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
decl i, j;
|
||||
|
||||
for (i = 0; i < numClients; i++)
|
||||
{
|
||||
if (g_bStopSound[clients[i]])
|
||||
{
|
||||
// Remove the client from the array.
|
||||
for (j = i; j < numClients - 1; j++)
|
||||
{
|
||||
clients[j] = clients[j + 1];
|
||||
}
|
||||
|
||||
numClients--;
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
return (numClients > 0) ? Plugin_Changed : Plugin_Stop;
|
||||
}
|
||||
|
||||
public Action:CSS_Hook_ShotgunShot(const String:te_name[], const Players[], numClients, Float:delay)
|
||||
{
|
||||
if (!g_bHooked)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
// Check which clients need to be excluded.
|
||||
decl newClients[MaxClients], client, i;
|
||||
new newTotal = 0;
|
||||
|
||||
for (i = 0; i < numClients; i++)
|
||||
{
|
||||
client = Players[i];
|
||||
|
||||
if (!g_bStopSound[client])
|
||||
{
|
||||
newClients[newTotal++] = client;
|
||||
}
|
||||
}
|
||||
|
||||
// No clients were excluded.
|
||||
if (newTotal == numClients)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
else if (newTotal == 0) // All clients were excluded and there is no need to broadcast.
|
||||
{
|
||||
return Plugin_Stop;
|
||||
}
|
||||
|
||||
// Re-broadcast to clients that still need it.
|
||||
decl Float:vTemp[3];
|
||||
TE_Start("Shotgun Shot");
|
||||
TE_ReadVector("m_vecOrigin", vTemp);
|
||||
TE_WriteVector("m_vecOrigin", vTemp);
|
||||
TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]"));
|
||||
TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]"));
|
||||
TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID"));
|
||||
TE_WriteNum("m_iMode", TE_ReadNum("m_iMode"));
|
||||
TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed"));
|
||||
TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer"));
|
||||
TE_WriteFloat("m_fInaccuracy", TE_ReadFloat("m_fInaccuracy"));
|
||||
TE_WriteFloat("m_fSpread", TE_ReadFloat("m_fSpread"));
|
||||
TE_Send(newClients, newTotal, delay);
|
||||
|
||||
return Plugin_Stop;
|
||||
}
|
||||
|
||||
public Action:DODS_Hook_FireBullets(const String:te_name[], const Players[], numClients, Float:delay)
|
||||
{
|
||||
if (!g_bHooked)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
// Check which clients need to be excluded.
|
||||
decl newClients[MaxClients], client, i;
|
||||
new newTotal = 0;
|
||||
|
||||
for (i = 0; i < numClients; i++)
|
||||
{
|
||||
client = Players[i];
|
||||
|
||||
if (!g_bStopSound[client])
|
||||
{
|
||||
newClients[newTotal++] = client;
|
||||
}
|
||||
}
|
||||
|
||||
// No clients were excluded.
|
||||
if (newTotal == numClients)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
else if (newTotal == 0)// All clients were excluded and there is no need to broadcast.
|
||||
{
|
||||
return Plugin_Stop;
|
||||
}
|
||||
|
||||
// Re-broadcast to clients that still need it.
|
||||
decl Float:vTemp[3];
|
||||
TE_Start("FireBullets");
|
||||
TE_ReadVector("m_vecOrigin", vTemp);
|
||||
TE_WriteVector("m_vecOrigin", vTemp);
|
||||
TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]"));
|
||||
TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]"));
|
||||
TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID"));
|
||||
TE_WriteNum("m_iMode", TE_ReadNum("m_iMode"));
|
||||
TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed"));
|
||||
TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer"));
|
||||
TE_WriteFloat("m_flSpread", TE_ReadFloat("m_flSpread"));
|
||||
TE_Send(newClients, newTotal, delay);
|
||||
|
||||
return Plugin_Stop;
|
||||
}
|
@ -1,274 +1,274 @@
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <sdkhooks>
|
||||
#include <sdktools>
|
||||
|
||||
#define TIMER_INTERVAL 1.0
|
||||
Handle g_hTimer = INVALID_HANDLE;
|
||||
|
||||
ConVar g_CVar_MaxWeapons;
|
||||
ConVar g_CVar_WeaponLifetime;
|
||||
|
||||
new g_RealRoundStartedTime;
|
||||
new g_MaxWeapons;
|
||||
new g_MaxWeaponLifetime;
|
||||
|
||||
#define MAX_WEAPONS MAXPLAYERS
|
||||
new G_WeaponArray[MAX_WEAPONS][2];
|
||||
|
||||
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "WeaponCleaner",
|
||||
author = "BotoX",
|
||||
description = "Clean unneeded weapons",
|
||||
version = "2.0",
|
||||
url = ""
|
||||
};
|
||||
|
||||
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.");
|
||||
|
||||
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_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_MaxWeaponLifetime = g_CVar_WeaponLifetime.IntValue;
|
||||
g_CVar_WeaponLifetime.AddChangeHook(OnConVarChanged);
|
||||
|
||||
HookEvent("round_start", Event_RoundStart);
|
||||
|
||||
AutoExecConfig(true, "plugin.WeaponCleaner");
|
||||
}
|
||||
|
||||
public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
|
||||
{
|
||||
if(convar == g_CVar_MaxWeapons)
|
||||
{
|
||||
if(StringToInt(newValue) < StringToInt(oldValue))
|
||||
{
|
||||
// Need to shrink list and kill items
|
||||
new d = StringToInt(oldValue) - StringToInt(newValue);
|
||||
|
||||
// Kill items that don't have space anymore
|
||||
for(new i = 0; d && i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(!G_WeaponArray[i][0])
|
||||
continue;
|
||||
|
||||
// Kill it
|
||||
AcceptEntityInput(G_WeaponArray[0][0], "Kill");
|
||||
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
|
||||
|
||||
// Move index backwards (since the list was modified by removing it)
|
||||
i--;
|
||||
d--;
|
||||
}
|
||||
}
|
||||
g_MaxWeapons = StringToInt(newValue);
|
||||
}
|
||||
else if(convar == g_CVar_WeaponLifetime)
|
||||
{
|
||||
g_MaxWeaponLifetime = StringToInt(newValue);
|
||||
CheckWeapons();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnMapStart()
|
||||
{
|
||||
if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer))
|
||||
g_hTimer = INVALID_HANDLE;
|
||||
|
||||
g_hTimer = CreateTimer(TIMER_INTERVAL, Timer_CleanupWeapons, INVALID_HANDLE, TIMER_REPEAT);
|
||||
}
|
||||
|
||||
public void OnMapEnd()
|
||||
{
|
||||
if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer))
|
||||
g_hTimer = INVALID_HANDLE;
|
||||
}
|
||||
|
||||
public void OnClientPutInServer(int client)
|
||||
{
|
||||
SDKHook(client, SDKHook_WeaponDropPost, OnWeaponDrop);
|
||||
SDKHook(client, SDKHook_WeaponEquipPost, OnWeaponEquip);
|
||||
}
|
||||
|
||||
public void OnClientDisconnect(int client)
|
||||
{
|
||||
SDKUnhook(client, SDKHook_WeaponDropPost, OnWeaponDrop);
|
||||
SDKUnhook(client, SDKHook_WeaponEquipPost, OnWeaponEquip);
|
||||
}
|
||||
|
||||
public void OnEntityCreated(int entity, const char[] classname)
|
||||
{
|
||||
if(IsValidEntity(entity) && strncmp(classname, "weapon_", 7) == 0)
|
||||
{
|
||||
SDKHook(entity, SDKHook_Spawn, OnWeaponSpawned);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnEntityDestroyed(int entity)
|
||||
{
|
||||
RemoveWeapon(entity);
|
||||
}
|
||||
|
||||
public void OnWeaponSpawned(int entity)
|
||||
{
|
||||
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
|
||||
// Should not be cleaned since it's a map spawned weapon
|
||||
if(HammerID)
|
||||
return;
|
||||
|
||||
// Weapon doesn't belong to any player
|
||||
if(GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity") == -1)
|
||||
InsertWeapon(entity);
|
||||
}
|
||||
|
||||
public Action OnWeaponEquip(int client, int entity)
|
||||
{
|
||||
if(!IsValidEntity(entity))
|
||||
return;
|
||||
|
||||
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
|
||||
// Should not be cleaned since it's a map spawned weapon
|
||||
if(HammerID)
|
||||
return;
|
||||
|
||||
// Weapon should not be cleaned anymore
|
||||
RemoveWeapon(entity);
|
||||
}
|
||||
|
||||
public Action OnWeaponDrop(int client, int entity)
|
||||
{
|
||||
if(!IsValidEntity(entity))
|
||||
return;
|
||||
|
||||
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
|
||||
// Should not be cleaned since it's a map spawned weapon
|
||||
if(HammerID)
|
||||
return;
|
||||
|
||||
// Kill all dropped weapons during mp_freezetime
|
||||
if(GetTime() < g_RealRoundStartedTime)
|
||||
{
|
||||
// Kill it
|
||||
AcceptEntityInput(entity, "Kill");
|
||||
return;
|
||||
}
|
||||
|
||||
// Weapon should be cleaned again
|
||||
InsertWeapon(entity);
|
||||
}
|
||||
|
||||
bool InsertWeapon(int entity)
|
||||
{
|
||||
// Try to find a free slot
|
||||
for(new i = 0; i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(G_WeaponArray[i][0])
|
||||
continue;
|
||||
|
||||
// Found a free slot, add it here
|
||||
G_WeaponArray[i][0] = entity;
|
||||
G_WeaponArray[i][1] = GetTime();
|
||||
return true;
|
||||
}
|
||||
|
||||
// No free slot found
|
||||
// Kill the first (oldest) item in the list
|
||||
AcceptEntityInput(G_WeaponArray[0][0], "Kill");
|
||||
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
|
||||
|
||||
// Add new weapon to the end of the list
|
||||
G_WeaponArray[g_MaxWeapons - 1][0] = entity;
|
||||
G_WeaponArray[g_MaxWeapons - 1][1] = GetTime();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RemoveWeapon(int entity)
|
||||
{
|
||||
// Find the Weapon
|
||||
for(new i = 0; i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(G_WeaponArray[i][0] == entity)
|
||||
{
|
||||
G_WeaponArray[i][0] = 0; G_WeaponArray[i][1] = 0;
|
||||
|
||||
// Move list items in front of this index back by one
|
||||
for(new j = i + 1; j < g_MaxWeapons; j++)
|
||||
{
|
||||
G_WeaponArray[j - 1][0] = G_WeaponArray[j][0];
|
||||
G_WeaponArray[j - 1][1] = G_WeaponArray[j][1];
|
||||
}
|
||||
|
||||
// Reset last list item
|
||||
G_WeaponArray[g_MaxWeapons - 1][0] = 0;
|
||||
G_WeaponArray[g_MaxWeapons - 1][1] = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CheckWeapons()
|
||||
{
|
||||
for(new i = 0; i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(!G_WeaponArray[i][0])
|
||||
continue;
|
||||
|
||||
if(GetTime() - G_WeaponArray[i][1] >= g_MaxWeaponLifetime)
|
||||
{
|
||||
// Kill it
|
||||
AcceptEntityInput(G_WeaponArray[i][0], "Kill");
|
||||
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
|
||||
|
||||
// Move index backwards (since the list was modified by removing it)
|
||||
i--;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void CleanupWeapons()
|
||||
{
|
||||
for(new i = 0; i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(!G_WeaponArray[i][0])
|
||||
continue;
|
||||
|
||||
// Kill it
|
||||
AcceptEntityInput(G_WeaponArray[i][0], "Kill");
|
||||
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
|
||||
|
||||
// Move index backwards (since the list was modified by removing it)
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
public Action Event_RoundStart(Handle:event, const char[] name, bool:dontBroadcast)
|
||||
{
|
||||
for(new i = 0; i < MAX_WEAPONS; i++)
|
||||
{
|
||||
G_WeaponArray[i][0] = 0; G_WeaponArray[i][1] = 0;
|
||||
}
|
||||
g_RealRoundStartedTime = GetTime() + GetConVarInt(FindConVar("mp_freezetime"));
|
||||
}
|
||||
|
||||
public Action Timer_CleanupWeapons(Handle:timer)
|
||||
{
|
||||
CheckWeapons();
|
||||
}
|
||||
|
||||
public Action Command_CleanupWeapons(client, args)
|
||||
{
|
||||
CleanupWeapons();
|
||||
|
||||
LogAction(client, -1, "%L performed a weapons cleanup", client);
|
||||
PrintToChat(client, "[SM] Weapons cleaned successfully!");
|
||||
}
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <sdkhooks>
|
||||
#include <sdktools>
|
||||
|
||||
#define TIMER_INTERVAL 1.0
|
||||
Handle g_hTimer = INVALID_HANDLE;
|
||||
|
||||
ConVar g_CVar_MaxWeapons;
|
||||
ConVar g_CVar_WeaponLifetime;
|
||||
|
||||
new g_RealRoundStartedTime;
|
||||
new g_MaxWeapons;
|
||||
new g_MaxWeaponLifetime;
|
||||
|
||||
#define MAX_WEAPONS MAXPLAYERS
|
||||
new G_WeaponArray[MAX_WEAPONS][2];
|
||||
|
||||
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "WeaponCleaner",
|
||||
author = "BotoX",
|
||||
description = "Clean unneeded weapons",
|
||||
version = "2.0",
|
||||
url = ""
|
||||
};
|
||||
|
||||
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.");
|
||||
|
||||
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_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_MaxWeaponLifetime = g_CVar_WeaponLifetime.IntValue;
|
||||
g_CVar_WeaponLifetime.AddChangeHook(OnConVarChanged);
|
||||
|
||||
HookEvent("round_start", Event_RoundStart);
|
||||
|
||||
AutoExecConfig(true, "plugin.WeaponCleaner");
|
||||
}
|
||||
|
||||
public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
|
||||
{
|
||||
if(convar == g_CVar_MaxWeapons)
|
||||
{
|
||||
if(StringToInt(newValue) < StringToInt(oldValue))
|
||||
{
|
||||
// Need to shrink list and kill items
|
||||
new d = StringToInt(oldValue) - StringToInt(newValue);
|
||||
|
||||
// Kill items that don't have space anymore
|
||||
for(new i = 0; d && i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(!G_WeaponArray[i][0])
|
||||
continue;
|
||||
|
||||
// Kill it
|
||||
AcceptEntityInput(G_WeaponArray[0][0], "Kill");
|
||||
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
|
||||
|
||||
// Move index backwards (since the list was modified by removing it)
|
||||
i--;
|
||||
d--;
|
||||
}
|
||||
}
|
||||
g_MaxWeapons = StringToInt(newValue);
|
||||
}
|
||||
else if(convar == g_CVar_WeaponLifetime)
|
||||
{
|
||||
g_MaxWeaponLifetime = StringToInt(newValue);
|
||||
CheckWeapons();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnMapStart()
|
||||
{
|
||||
if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer))
|
||||
g_hTimer = INVALID_HANDLE;
|
||||
|
||||
g_hTimer = CreateTimer(TIMER_INTERVAL, Timer_CleanupWeapons, INVALID_HANDLE, TIMER_REPEAT);
|
||||
}
|
||||
|
||||
public void OnMapEnd()
|
||||
{
|
||||
if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer))
|
||||
g_hTimer = INVALID_HANDLE;
|
||||
}
|
||||
|
||||
public void OnClientPutInServer(int client)
|
||||
{
|
||||
SDKHook(client, SDKHook_WeaponDropPost, OnWeaponDrop);
|
||||
SDKHook(client, SDKHook_WeaponEquipPost, OnWeaponEquip);
|
||||
}
|
||||
|
||||
public void OnClientDisconnect(int client)
|
||||
{
|
||||
SDKUnhook(client, SDKHook_WeaponDropPost, OnWeaponDrop);
|
||||
SDKUnhook(client, SDKHook_WeaponEquipPost, OnWeaponEquip);
|
||||
}
|
||||
|
||||
public void OnEntityCreated(int entity, const char[] classname)
|
||||
{
|
||||
if(IsValidEntity(entity) && strncmp(classname, "weapon_", 7) == 0)
|
||||
{
|
||||
SDKHook(entity, SDKHook_Spawn, OnWeaponSpawned);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnEntityDestroyed(int entity)
|
||||
{
|
||||
RemoveWeapon(entity);
|
||||
}
|
||||
|
||||
public void OnWeaponSpawned(int entity)
|
||||
{
|
||||
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
|
||||
// Should not be cleaned since it's a map spawned weapon
|
||||
if(HammerID)
|
||||
return;
|
||||
|
||||
// Weapon doesn't belong to any player
|
||||
if(GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity") == -1)
|
||||
InsertWeapon(entity);
|
||||
}
|
||||
|
||||
public Action OnWeaponEquip(int client, int entity)
|
||||
{
|
||||
if(!IsValidEntity(entity))
|
||||
return;
|
||||
|
||||
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
|
||||
// Should not be cleaned since it's a map spawned weapon
|
||||
if(HammerID)
|
||||
return;
|
||||
|
||||
// Weapon should not be cleaned anymore
|
||||
RemoveWeapon(entity);
|
||||
}
|
||||
|
||||
public Action OnWeaponDrop(int client, int entity)
|
||||
{
|
||||
if(!IsValidEntity(entity))
|
||||
return;
|
||||
|
||||
new HammerID = GetEntProp(entity, Prop_Data, "m_iHammerID");
|
||||
// Should not be cleaned since it's a map spawned weapon
|
||||
if(HammerID)
|
||||
return;
|
||||
|
||||
// Kill all dropped weapons during mp_freezetime
|
||||
if(GetTime() < g_RealRoundStartedTime)
|
||||
{
|
||||
// Kill it
|
||||
AcceptEntityInput(entity, "Kill");
|
||||
return;
|
||||
}
|
||||
|
||||
// Weapon should be cleaned again
|
||||
InsertWeapon(entity);
|
||||
}
|
||||
|
||||
bool InsertWeapon(int entity)
|
||||
{
|
||||
// Try to find a free slot
|
||||
for(new i = 0; i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(G_WeaponArray[i][0])
|
||||
continue;
|
||||
|
||||
// Found a free slot, add it here
|
||||
G_WeaponArray[i][0] = entity;
|
||||
G_WeaponArray[i][1] = GetTime();
|
||||
return true;
|
||||
}
|
||||
|
||||
// No free slot found
|
||||
// Kill the first (oldest) item in the list
|
||||
AcceptEntityInput(G_WeaponArray[0][0], "Kill");
|
||||
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
|
||||
|
||||
// Add new weapon to the end of the list
|
||||
G_WeaponArray[g_MaxWeapons - 1][0] = entity;
|
||||
G_WeaponArray[g_MaxWeapons - 1][1] = GetTime();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RemoveWeapon(int entity)
|
||||
{
|
||||
// Find the Weapon
|
||||
for(new i = 0; i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(G_WeaponArray[i][0] == entity)
|
||||
{
|
||||
G_WeaponArray[i][0] = 0; G_WeaponArray[i][1] = 0;
|
||||
|
||||
// Move list items in front of this index back by one
|
||||
for(new j = i + 1; j < g_MaxWeapons; j++)
|
||||
{
|
||||
G_WeaponArray[j - 1][0] = G_WeaponArray[j][0];
|
||||
G_WeaponArray[j - 1][1] = G_WeaponArray[j][1];
|
||||
}
|
||||
|
||||
// Reset last list item
|
||||
G_WeaponArray[g_MaxWeapons - 1][0] = 0;
|
||||
G_WeaponArray[g_MaxWeapons - 1][1] = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CheckWeapons()
|
||||
{
|
||||
for(new i = 0; i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(!G_WeaponArray[i][0])
|
||||
continue;
|
||||
|
||||
if(GetTime() - G_WeaponArray[i][1] >= g_MaxWeaponLifetime)
|
||||
{
|
||||
// Kill it
|
||||
AcceptEntityInput(G_WeaponArray[i][0], "Kill");
|
||||
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
|
||||
|
||||
// Move index backwards (since the list was modified by removing it)
|
||||
i--;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void CleanupWeapons()
|
||||
{
|
||||
for(new i = 0; i < g_MaxWeapons; i++)
|
||||
{
|
||||
if(!G_WeaponArray[i][0])
|
||||
continue;
|
||||
|
||||
// Kill it
|
||||
AcceptEntityInput(G_WeaponArray[i][0], "Kill");
|
||||
// This implicitly calls OnEntityDestroyed() which calls RemoveWeapon()
|
||||
|
||||
// Move index backwards (since the list was modified by removing it)
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
public Action Event_RoundStart(Handle:event, const char[] name, bool:dontBroadcast)
|
||||
{
|
||||
for(new i = 0; i < MAX_WEAPONS; i++)
|
||||
{
|
||||
G_WeaponArray[i][0] = 0; G_WeaponArray[i][1] = 0;
|
||||
}
|
||||
g_RealRoundStartedTime = GetTime() + GetConVarInt(FindConVar("mp_freezetime"));
|
||||
}
|
||||
|
||||
public Action Timer_CleanupWeapons(Handle:timer)
|
||||
{
|
||||
CheckWeapons();
|
||||
}
|
||||
|
||||
public Action Command_CleanupWeapons(client, args)
|
||||
{
|
||||
CleanupWeapons();
|
||||
|
||||
LogAction(client, -1, "%L performed a weapons cleanup", client);
|
||||
PrintToChat(client, "[SM] Weapons cleaned successfully!");
|
||||
}
|
||||
|
@ -1,190 +1,190 @@
|
||||
/**
|
||||
* This is the include file for Custom Chat Colors
|
||||
* https://forums.alliedmods.net/showthread.php?t=186695
|
||||
* To check that Custom Chat Colors is installed and running, verify that the "ccc" library exists
|
||||
*/
|
||||
|
||||
#if defined _ccc_included
|
||||
#endinput
|
||||
#endif
|
||||
#define _ccc_included
|
||||
|
||||
enum CCC_ColorType {
|
||||
CCC_TagColor,
|
||||
CCC_NameColor,
|
||||
CCC_ChatColor
|
||||
};
|
||||
|
||||
#define COLOR_NULL -1
|
||||
#define COLOR_NONE -2
|
||||
#define COLOR_CGREEN -3 //0x40FF40
|
||||
#define COLOR_OLIVE -4 //0x99FF99
|
||||
#define COLOR_TEAM -5
|
||||
|
||||
/**
|
||||
* Gets a client's color as a hexadecimal integer.
|
||||
*
|
||||
* @param client Client index
|
||||
* @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)
|
||||
* @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
|
||||
*/
|
||||
native CCC_GetColor(client, CCC_ColorType:type, &bool:alpha = false);
|
||||
|
||||
/**
|
||||
* Sets a client's color as a hexadecimal integer.
|
||||
*
|
||||
* @param client Client index
|
||||
* @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 alpha Are you specifying a color with alpha?
|
||||
* @return True if the color is updated successfully, false otherwise
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native bool:CCC_SetColor(client, CCC_ColorType:type, color, bool:alpha);
|
||||
|
||||
/**
|
||||
* Gets a client's tag
|
||||
*
|
||||
* @param client Client index
|
||||
* @param buffer Buffer to store the tag in
|
||||
* @param maxlen Maximum buffer length
|
||||
* @noreturn
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native CCC_GetTag(client, String:buffer[], maxlen);
|
||||
|
||||
/**
|
||||
* Sets a client's tag
|
||||
*
|
||||
* @param client Client index
|
||||
* @param tag String containing the new tag
|
||||
* @noreturn
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native CCC_SetTag(client, const String:tag[]);
|
||||
|
||||
/**
|
||||
* Resets a client's color to the value in the config file.
|
||||
*
|
||||
* @param client Client index
|
||||
* @param type Color type to restore
|
||||
* @noreturn
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native CCC_ResetColor(client, CCC_ColorType:type);
|
||||
|
||||
/**
|
||||
* Resets a client's tag to the value in the config file.
|
||||
*
|
||||
* @param client Client index
|
||||
* @noreturn
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native CCC_ResetTag(client);
|
||||
|
||||
/**
|
||||
* Called when a cilent's name is about to be colored
|
||||
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
|
||||
*
|
||||
* @param client Client index
|
||||
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
|
||||
*/
|
||||
#pragma deprecated Use CCC_OnColor instead
|
||||
forward Action:CCC_OnNameColor(client);
|
||||
|
||||
/**
|
||||
* Called when a client's chat is about to be colored
|
||||
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
|
||||
*
|
||||
* @param client Client index
|
||||
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
|
||||
*/
|
||||
#pragma deprecated Use CCC_OnColor instead
|
||||
forward Action:CCC_OnChatColor(client);
|
||||
|
||||
/**
|
||||
* Called when a client's name is about to be tagged
|
||||
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
|
||||
*
|
||||
* @param client Client index
|
||||
* @return Plugin_Handled to prevent tagging, Plugin_Continue to allow tagging
|
||||
*/
|
||||
#pragma deprecated Use CCC_OnColor instead
|
||||
forward Action:CCC_OnTagApplied(client);
|
||||
|
||||
/**
|
||||
* Called when a client's name is about to be tagged
|
||||
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
|
||||
*
|
||||
* @param client Client index
|
||||
* @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.
|
||||
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
|
||||
*/
|
||||
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
|
||||
*
|
||||
* @param author Author client index
|
||||
* @param message Message
|
||||
* @param maxlen Maximum length of message buffer
|
||||
* @noreturn
|
||||
*/
|
||||
forward CCC_OnChatMessage(author, String:message[], maxlen);
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* @param client Client index
|
||||
* @return Plugin_Handled or Plugin_Stop to prevent loading, Plugin_Continue or Plugin_Changed to allow
|
||||
*/
|
||||
forward Action:CCC_OnUserConfigPreLoaded(client);
|
||||
|
||||
/**
|
||||
* Called when a client's colors and tag have been loaded from the config file
|
||||
*
|
||||
* @param client Client index
|
||||
* @noreturn
|
||||
*/
|
||||
forward CCC_OnUserConfigLoaded(client);
|
||||
|
||||
/**
|
||||
* Called when the configuration file is reloaded with the sm_reloadccc command
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
forward CCC_OnConfigReloaded();
|
||||
|
||||
native void CCC_UpdateIgnoredArray(bool IgnoredArray[(MAXPLAYERS + 1) * (MAXPLAYERS + 1)]);
|
||||
|
||||
public SharedPlugin:__pl_ccc = {
|
||||
name = "ccc",
|
||||
file = "custom-chatcolors.smx",
|
||||
#if defined REQUIRE_PLUGIN
|
||||
required = 1
|
||||
#else
|
||||
required = 0
|
||||
#endif
|
||||
};
|
||||
|
||||
#if !defined REQUIRE_PLUGIN
|
||||
public __pl_ccc_SetNTVOptional() {
|
||||
MarkNativeAsOptional("CCC_GetColor");
|
||||
MarkNativeAsOptional("CCC_SetColor");
|
||||
MarkNativeAsOptional("CCC_GetTag");
|
||||
MarkNativeAsOptional("CCC_ResetTag");
|
||||
MarkNativeAsOptional("CCC_ResetColor");
|
||||
MarkNativeAsOptional("CCC_ResetTag");
|
||||
MarkNativeAsOptional("CCC_UpdateIgnoredArray");
|
||||
}
|
||||
/**
|
||||
* This is the include file for Custom Chat Colors
|
||||
* https://forums.alliedmods.net/showthread.php?t=186695
|
||||
* To check that Custom Chat Colors is installed and running, verify that the "ccc" library exists
|
||||
*/
|
||||
|
||||
#if defined _ccc_included
|
||||
#endinput
|
||||
#endif
|
||||
#define _ccc_included
|
||||
|
||||
enum CCC_ColorType {
|
||||
CCC_TagColor,
|
||||
CCC_NameColor,
|
||||
CCC_ChatColor
|
||||
};
|
||||
|
||||
#define COLOR_NULL -1
|
||||
#define COLOR_NONE -2
|
||||
#define COLOR_CGREEN -3 //0x40FF40
|
||||
#define COLOR_OLIVE -4 //0x99FF99
|
||||
#define COLOR_TEAM -5
|
||||
|
||||
/**
|
||||
* Gets a client's color as a hexadecimal integer.
|
||||
*
|
||||
* @param client Client index
|
||||
* @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)
|
||||
* @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
|
||||
*/
|
||||
native CCC_GetColor(client, CCC_ColorType:type, &bool:alpha = false);
|
||||
|
||||
/**
|
||||
* Sets a client's color as a hexadecimal integer.
|
||||
*
|
||||
* @param client Client index
|
||||
* @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 alpha Are you specifying a color with alpha?
|
||||
* @return True if the color is updated successfully, false otherwise
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native bool:CCC_SetColor(client, CCC_ColorType:type, color, bool:alpha);
|
||||
|
||||
/**
|
||||
* Gets a client's tag
|
||||
*
|
||||
* @param client Client index
|
||||
* @param buffer Buffer to store the tag in
|
||||
* @param maxlen Maximum buffer length
|
||||
* @noreturn
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native CCC_GetTag(client, String:buffer[], maxlen);
|
||||
|
||||
/**
|
||||
* Sets a client's tag
|
||||
*
|
||||
* @param client Client index
|
||||
* @param tag String containing the new tag
|
||||
* @noreturn
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native CCC_SetTag(client, const String:tag[]);
|
||||
|
||||
/**
|
||||
* Resets a client's color to the value in the config file.
|
||||
*
|
||||
* @param client Client index
|
||||
* @param type Color type to restore
|
||||
* @noreturn
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native CCC_ResetColor(client, CCC_ColorType:type);
|
||||
|
||||
/**
|
||||
* Resets a client's tag to the value in the config file.
|
||||
*
|
||||
* @param client Client index
|
||||
* @noreturn
|
||||
*
|
||||
* On error/errors: Invalid client index or client is not in game
|
||||
*/
|
||||
native CCC_ResetTag(client);
|
||||
|
||||
/**
|
||||
* Called when a cilent's name is about to be colored
|
||||
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
|
||||
*
|
||||
* @param client Client index
|
||||
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
|
||||
*/
|
||||
#pragma deprecated Use CCC_OnColor instead
|
||||
forward Action:CCC_OnNameColor(client);
|
||||
|
||||
/**
|
||||
* Called when a client's chat is about to be colored
|
||||
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
|
||||
*
|
||||
* @param client Client index
|
||||
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
|
||||
*/
|
||||
#pragma deprecated Use CCC_OnColor instead
|
||||
forward Action:CCC_OnChatColor(client);
|
||||
|
||||
/**
|
||||
* Called when a client's name is about to be tagged
|
||||
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
|
||||
*
|
||||
* @param client Client index
|
||||
* @return Plugin_Handled to prevent tagging, Plugin_Continue to allow tagging
|
||||
*/
|
||||
#pragma deprecated Use CCC_OnColor instead
|
||||
forward Action:CCC_OnTagApplied(client);
|
||||
|
||||
/**
|
||||
* Called when a client's name is about to be tagged
|
||||
* DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD
|
||||
*
|
||||
* @param client Client index
|
||||
* @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.
|
||||
* @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring
|
||||
*/
|
||||
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
|
||||
*
|
||||
* @param author Author client index
|
||||
* @param message Message
|
||||
* @param maxlen Maximum length of message buffer
|
||||
* @noreturn
|
||||
*/
|
||||
forward CCC_OnChatMessage(author, String:message[], maxlen);
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* @param client Client index
|
||||
* @return Plugin_Handled or Plugin_Stop to prevent loading, Plugin_Continue or Plugin_Changed to allow
|
||||
*/
|
||||
forward Action:CCC_OnUserConfigPreLoaded(client);
|
||||
|
||||
/**
|
||||
* Called when a client's colors and tag have been loaded from the config file
|
||||
*
|
||||
* @param client Client index
|
||||
* @noreturn
|
||||
*/
|
||||
forward CCC_OnUserConfigLoaded(client);
|
||||
|
||||
/**
|
||||
* Called when the configuration file is reloaded with the sm_reloadccc command
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
forward CCC_OnConfigReloaded();
|
||||
|
||||
native void CCC_UpdateIgnoredArray(bool IgnoredArray[(MAXPLAYERS + 1) * (MAXPLAYERS + 1)]);
|
||||
|
||||
public SharedPlugin:__pl_ccc = {
|
||||
name = "ccc",
|
||||
file = "custom-chatcolors.smx",
|
||||
#if defined REQUIRE_PLUGIN
|
||||
required = 1
|
||||
#else
|
||||
required = 0
|
||||
#endif
|
||||
};
|
||||
|
||||
#if !defined REQUIRE_PLUGIN
|
||||
public __pl_ccc_SetNTVOptional() {
|
||||
MarkNativeAsOptional("CCC_GetColor");
|
||||
MarkNativeAsOptional("CCC_SetColor");
|
||||
MarkNativeAsOptional("CCC_GetTag");
|
||||
MarkNativeAsOptional("CCC_ResetTag");
|
||||
MarkNativeAsOptional("CCC_ResetColor");
|
||||
MarkNativeAsOptional("CCC_ResetTag");
|
||||
MarkNativeAsOptional("CCC_UpdateIgnoredArray");
|
||||
}
|
||||
#endif
|
1076
includes/colors.inc
1076
includes/colors.inc
File diff suppressed because it is too large
Load Diff
@ -1,482 +1,482 @@
|
||||
#if defined _dhooks_included
|
||||
#endinput
|
||||
#endif
|
||||
#define _dhooks_included
|
||||
|
||||
enum ObjectValueType
|
||||
{
|
||||
ObjectValueType_Int = 0,
|
||||
ObjectValueType_Bool,
|
||||
ObjectValueType_Ehandle,
|
||||
ObjectValueType_Float,
|
||||
ObjectValueType_CBaseEntityPtr,
|
||||
ObjectValueType_IntPtr,
|
||||
ObjectValueType_BoolPtr,
|
||||
ObjectValueType_EhandlePtr,
|
||||
ObjectValueType_FloatPtr,
|
||||
ObjectValueType_Vector,
|
||||
ObjectValueType_VectorPtr,
|
||||
ObjectValueType_CharPtr,
|
||||
ObjectValueType_String
|
||||
};
|
||||
|
||||
enum ListenType
|
||||
{
|
||||
ListenType_Created,
|
||||
ListenType_Deleted
|
||||
};
|
||||
|
||||
enum ReturnType
|
||||
{
|
||||
ReturnType_Unknown,
|
||||
ReturnType_Void,
|
||||
ReturnType_Int,
|
||||
ReturnType_Bool,
|
||||
ReturnType_Float,
|
||||
ReturnType_String, //Note this is a string_t
|
||||
ReturnType_StringPtr, //Note this is a string_t *
|
||||
ReturnType_CharPtr,
|
||||
ReturnType_Vector,
|
||||
ReturnType_VectorPtr,
|
||||
ReturnType_CBaseEntity,
|
||||
ReturnType_Edict
|
||||
};
|
||||
|
||||
enum HookParamType
|
||||
{
|
||||
HookParamType_Unknown,
|
||||
HookParamType_Int,
|
||||
HookParamType_Bool,
|
||||
HookParamType_Float,
|
||||
HookParamType_String, //Note this is a string_t
|
||||
HookParamType_StringPtr, //Note this is a string_t *
|
||||
HookParamType_CharPtr,
|
||||
HookParamType_VectorPtr,
|
||||
HookParamType_CBaseEntity,
|
||||
HookParamType_ObjectPtr,
|
||||
HookParamType_Edict,
|
||||
HookParamType_Object
|
||||
};
|
||||
|
||||
enum ThisPointerType
|
||||
{
|
||||
ThisPointer_Ignore,
|
||||
ThisPointer_CBaseEntity,
|
||||
ThisPointer_Address
|
||||
};
|
||||
|
||||
enum HookType
|
||||
{
|
||||
HookType_Entity,
|
||||
HookType_GameRules,
|
||||
HookType_Raw
|
||||
};
|
||||
|
||||
enum MRESReturn
|
||||
{
|
||||
MRES_ChangedHandled = -2, // Use changed values and return MRES_Handled
|
||||
MRES_ChangedOverride, // Use changed values and return MRES_Override
|
||||
MRES_Ignored, // plugin didn't take any action
|
||||
MRES_Handled, // plugin did something, but real function should still be called
|
||||
MRES_Override, // call real function, but use my return value
|
||||
MRES_Supercede // skip real function; use my return value
|
||||
};
|
||||
|
||||
enum DHookPassFlag
|
||||
{
|
||||
DHookPass_ByVal = (1<<0),
|
||||
DHookPass_ByRef = (1<<1)
|
||||
};
|
||||
|
||||
typeset ListenCB
|
||||
{
|
||||
//Deleted
|
||||
function void (int entity);
|
||||
|
||||
//Created
|
||||
function void (int entity, const char[] classname);
|
||||
};
|
||||
|
||||
typeset DHookRemovalCB
|
||||
{
|
||||
function void (int hookid);
|
||||
};
|
||||
typeset DHookCallback
|
||||
{
|
||||
//Function Example: void Ham::Test() with this pointer ignore
|
||||
function MRESReturn ();
|
||||
|
||||
//Function Example: void Ham::Test() with this pointer passed
|
||||
function MRESReturn (int pThis);
|
||||
|
||||
//Function Example: void Ham::Test(int cake) with this pointer ignore
|
||||
function MRESReturn (Handle hParams);
|
||||
|
||||
//Function Example: void Ham::Test(int cake) with this pointer passed
|
||||
function MRESReturn (int pThis, Handle hParams);
|
||||
|
||||
//Function Example: int Ham::Test() with this pointer ignore
|
||||
function MRESReturn (Handle hReturn);
|
||||
|
||||
//Function Example: int Ham::Test() with this pointer passed
|
||||
function MRESReturn (int pThis, Handle hReturn);
|
||||
|
||||
//Function Example: int Ham::Test(int cake) with this pointer ignore
|
||||
function MRESReturn (Handle hReturn, Handle hParams);
|
||||
|
||||
//Function Example: int Ham::Test(int cake) with this pointer passed
|
||||
function MRESReturn (int pThis, Handle hReturn, Handle hParams);
|
||||
|
||||
//Address NOW
|
||||
|
||||
//Function Example: void Ham::Test() with this pointer passed
|
||||
function MRESReturn (Address pThis);
|
||||
|
||||
//Function Example: void Ham::Test(int cake) with this pointer passed
|
||||
function MRESReturn (Address pThis, Handle hParams);
|
||||
|
||||
//Function Example: int Ham::Test() with this pointer passed
|
||||
function MRESReturn (Address pThis, Handle hReturn);
|
||||
|
||||
//Function Example: int Ham::Test(int cake) with this pointer passed
|
||||
function MRESReturn (Address pThis, Handle hReturn, Handle hParams);
|
||||
|
||||
};
|
||||
|
||||
/* Adds an entity listener hook
|
||||
*
|
||||
* @param type Type of listener to add
|
||||
* @param callback Callback to use
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookAddEntityListener(ListenType type, ListenCB callback);
|
||||
|
||||
/* Removes an entity listener hook
|
||||
*
|
||||
* @param type Type of listener to remove
|
||||
* @param callback Callback this listener was using
|
||||
*
|
||||
* @return True if one was removed false otherwise.
|
||||
*/
|
||||
native bool DHookRemoveEntityListener(ListenType type, ListenCB callback);
|
||||
|
||||
/* Creates a hook
|
||||
*
|
||||
* @param offset vtable offset for function to hook
|
||||
* @param hooktype Type of hook
|
||||
* @param returntype Type type of return
|
||||
* @param thistype Type of this pointer or ignore (ignore can be used if not needed)
|
||||
* @param callback Callback function
|
||||
*
|
||||
* @return Returns setup handle for the hook or INVALID_HANDLE.
|
||||
*/
|
||||
native Handle DHookCreate(int offset, HookType hooktype, ReturnType returntype, ThisPointerType thistype, DHookCallback callback);
|
||||
|
||||
/* Adds param to a hook setup
|
||||
*
|
||||
* @param setup Setup handle to add the param to.
|
||||
* @param type Param type
|
||||
* @param size Used for Objects (not Object ptr) to define the size of the object.
|
||||
* @param flag Used to change the pass type.
|
||||
*
|
||||
* @error Invalid setup handle or too many params added (request upping the max in thread)
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookAddParam(Handle setup, HookParamType type, int size=-1, DHookPassFlag flag=DHookPass_ByVal);
|
||||
//native DHookAddParam(Handle:setup, HookParamType:type);
|
||||
|
||||
/* Hook entity
|
||||
*
|
||||
* @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 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)
|
||||
*
|
||||
* @error Invalid setup handle, invalid entity or invalid hook type.
|
||||
* @return -1 on fail a hookid on success
|
||||
*/
|
||||
native int DHookEntity(Handle setup, bool post, int entity, DHookRemovalCB removalcb=INVALID_FUNCTION);
|
||||
|
||||
/* Hook gamerules
|
||||
*
|
||||
* @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 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.
|
||||
* @return -1 on fail a hookid on success
|
||||
*/
|
||||
native int DHookGamerules(Handle setup, bool post, DHookRemovalCB removalcb=INVALID_FUNCTION);
|
||||
|
||||
/* Hook a raw pointer
|
||||
*
|
||||
* @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 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)
|
||||
*
|
||||
* @error Invalid setup handle, invalid address or invalid hook type.
|
||||
* @return -1 on fail a hookid on success
|
||||
*/
|
||||
native int DHookRaw(Handle setup, bool post, Address addr, DHookRemovalCB removalcb=INVALID_FUNCTION);
|
||||
|
||||
/* Remove hook by hook id
|
||||
*
|
||||
* @param hookid Hook id to remove
|
||||
*
|
||||
* @return true on success false otherwise
|
||||
* @note This will not fire the removal callback!
|
||||
*/
|
||||
native bool DHookRemoveHookID(int hookid);
|
||||
|
||||
/* Get param value (Only use for: int, entity, bool or float param types)
|
||||
*
|
||||
* @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)
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @return value if num greater than 0. If 0 returns paramcount.
|
||||
*/
|
||||
native any DHookGetParam(Handle hParams, int num);
|
||||
|
||||
/* Get vector param value
|
||||
*
|
||||
* @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 vec Vector buffer to store result.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetParamVector(Handle hParams, int num, float vec[3]);
|
||||
|
||||
/* Get string param value
|
||||
*
|
||||
* @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 buffer String buffer to store result
|
||||
* @param size Buffer size
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetParamString(Handle hParams, int num, char[] buffer, int size);
|
||||
|
||||
/* Set param value (Only use for: int, entity, bool or float param types)
|
||||
*
|
||||
* @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.)
|
||||
* @param value Value to set it as (only pass int, bool, float or entity index)
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParam(Handle hParams, int num, any value);
|
||||
|
||||
/* Set vector param value
|
||||
*
|
||||
* @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.)
|
||||
* @param vec Value to set vector as.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParamVector(Handle hParams, int num, float vec[3]);
|
||||
|
||||
/* Set string param value
|
||||
*
|
||||
* @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.)
|
||||
* @param value Value to set string as.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParamString(Handle hParams, int num, char[] value);
|
||||
|
||||
/* Get return value (Only use for: int, entity, bool or float return types)
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @return Returns default value if prehook returns actual value if post hook.
|
||||
*/
|
||||
native any DHookGetReturn(Handle hReturn);
|
||||
|
||||
/* Get return vector value
|
||||
*
|
||||
* @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))
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetReturnVector(Handle hReturn, float vec[3]);
|
||||
|
||||
/* Get return string value
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
* @param buffer String buffer to store result in. (In pre hooks will be default value "")
|
||||
* @param size String buffer size
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetReturnString(Handle hReturn, char[] buffer, int size);
|
||||
|
||||
/* Set return value (Only use for: int, entity, bool or float return types)
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
* @param value Value to set return as
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetReturn(Handle hReturn, any value);
|
||||
|
||||
/* Set return vector value
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
* @param vec Value to set return vector as
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetReturnVector(Handle hReturn, float vec[3]);
|
||||
|
||||
/* Set return string value
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
* @param value Value to set return string as
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetReturnString(Handle hReturn, char[] value);
|
||||
|
||||
//WE SHOULD WRAP THESE AROUND STOCKS FOR NON PTR AS WE SUPPORT BOTH WITH THESE NATIVE'S
|
||||
|
||||
/* Gets an objects variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to get.
|
||||
* @param offset Offset within the object to the var to get.
|
||||
* @param type Type of var it is
|
||||
*
|
||||
* @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.
|
||||
*/
|
||||
native any DHookGetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type);
|
||||
|
||||
/* Sets an objects variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to set.
|
||||
* @param offset Offset within the object to the var to set.
|
||||
* @param type Type of var it is
|
||||
* @param value The value to set the var to.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type, any value);
|
||||
|
||||
/* Gets an objects vector variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to get.
|
||||
* @param offset Offset within the object to the var to get.
|
||||
* @param type Type of var it is
|
||||
* @param buffer Buffer to store the result vector
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float buffer[3]);
|
||||
|
||||
/* Sets an objects vector variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to set.
|
||||
* @param offset Offset within the object to the var to set.
|
||||
* @param type Type of var it is
|
||||
* @param value The value to set the vector var to.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float value[3]);
|
||||
|
||||
/* Gets an objects string variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to get.
|
||||
* @param offset Offset within the object to the var to get.
|
||||
* @param type Type of var it is
|
||||
* @param buffer Buffer to store the result vector
|
||||
* @param size Size of the buffer
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetParamObjectPtrString(Handle hParams, int num, int offset, ObjectValueType type, char[] buffer, int size);
|
||||
|
||||
/* Checks if a pointer param is null
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to check.
|
||||
*
|
||||
* @error Non pointer param
|
||||
* @return True if null false otherwise.
|
||||
*/
|
||||
native bool DHookIsNullParam(Handle hParams, int num);
|
||||
|
||||
public Extension __ext_dhooks =
|
||||
{
|
||||
name = "dhooks",
|
||||
file = "dhooks.ext",
|
||||
#if defined AUTOLOAD_EXTENSIONS
|
||||
autoload = 1,
|
||||
#else
|
||||
autoload = 0,
|
||||
#endif
|
||||
#if defined REQUIRE_EXTENSIONS
|
||||
required = 1,
|
||||
#else
|
||||
required = 0,
|
||||
#endif
|
||||
};
|
||||
|
||||
#if !defined REQUIRE_EXTENSIONS
|
||||
public __ext_dhooks_SetNTVOptional()
|
||||
{
|
||||
MarkNativeAsOptional("DHookAddEntityListener");
|
||||
MarkNativeAsOptional("DHookRemoveEntityListener");
|
||||
MarkNativeAsOptional("DHookCreate");
|
||||
MarkNativeAsOptional("DHookAddParam");
|
||||
MarkNativeAsOptional("DHookEntity");
|
||||
MarkNativeAsOptional("DHookGamerules");
|
||||
MarkNativeAsOptional("DHookRaw");
|
||||
MarkNativeAsOptional("DHookRemoveHookID");
|
||||
MarkNativeAsOptional("DHookGetParam");
|
||||
MarkNativeAsOptional("DHookGetParamVector");
|
||||
MarkNativeAsOptional("DHookGetParamString");
|
||||
MarkNativeAsOptional("DHookSetParam");
|
||||
MarkNativeAsOptional("DHookSetParamVector");
|
||||
MarkNativeAsOptional("DHookSetParamString");
|
||||
MarkNativeAsOptional("DHookGetReturn");
|
||||
MarkNativeAsOptional("DHookGetReturnVector");
|
||||
MarkNativeAsOptional("DHookGetReturnString");
|
||||
MarkNativeAsOptional("DHookSetReturn");
|
||||
MarkNativeAsOptional("DHookSetReturnVector");
|
||||
MarkNativeAsOptional("DHookSetReturnString");
|
||||
MarkNativeAsOptional("DHookGetParamObjectPtrVar");
|
||||
MarkNativeAsOptional("DHookSetParamObjectPtrVar");
|
||||
MarkNativeAsOptional("DHookGetParamObjectPtrVarVector");
|
||||
MarkNativeAsOptional("DHookSetParamObjectPtrVarVector");
|
||||
MarkNativeAsOptional("DHookIsNullParam");
|
||||
MarkNativeAsOptional("DHookGetParamObjectPtrString");
|
||||
}
|
||||
#if defined _dhooks_included
|
||||
#endinput
|
||||
#endif
|
||||
#define _dhooks_included
|
||||
|
||||
enum ObjectValueType
|
||||
{
|
||||
ObjectValueType_Int = 0,
|
||||
ObjectValueType_Bool,
|
||||
ObjectValueType_Ehandle,
|
||||
ObjectValueType_Float,
|
||||
ObjectValueType_CBaseEntityPtr,
|
||||
ObjectValueType_IntPtr,
|
||||
ObjectValueType_BoolPtr,
|
||||
ObjectValueType_EhandlePtr,
|
||||
ObjectValueType_FloatPtr,
|
||||
ObjectValueType_Vector,
|
||||
ObjectValueType_VectorPtr,
|
||||
ObjectValueType_CharPtr,
|
||||
ObjectValueType_String
|
||||
};
|
||||
|
||||
enum ListenType
|
||||
{
|
||||
ListenType_Created,
|
||||
ListenType_Deleted
|
||||
};
|
||||
|
||||
enum ReturnType
|
||||
{
|
||||
ReturnType_Unknown,
|
||||
ReturnType_Void,
|
||||
ReturnType_Int,
|
||||
ReturnType_Bool,
|
||||
ReturnType_Float,
|
||||
ReturnType_String, //Note this is a string_t
|
||||
ReturnType_StringPtr, //Note this is a string_t *
|
||||
ReturnType_CharPtr,
|
||||
ReturnType_Vector,
|
||||
ReturnType_VectorPtr,
|
||||
ReturnType_CBaseEntity,
|
||||
ReturnType_Edict
|
||||
};
|
||||
|
||||
enum HookParamType
|
||||
{
|
||||
HookParamType_Unknown,
|
||||
HookParamType_Int,
|
||||
HookParamType_Bool,
|
||||
HookParamType_Float,
|
||||
HookParamType_String, //Note this is a string_t
|
||||
HookParamType_StringPtr, //Note this is a string_t *
|
||||
HookParamType_CharPtr,
|
||||
HookParamType_VectorPtr,
|
||||
HookParamType_CBaseEntity,
|
||||
HookParamType_ObjectPtr,
|
||||
HookParamType_Edict,
|
||||
HookParamType_Object
|
||||
};
|
||||
|
||||
enum ThisPointerType
|
||||
{
|
||||
ThisPointer_Ignore,
|
||||
ThisPointer_CBaseEntity,
|
||||
ThisPointer_Address
|
||||
};
|
||||
|
||||
enum HookType
|
||||
{
|
||||
HookType_Entity,
|
||||
HookType_GameRules,
|
||||
HookType_Raw
|
||||
};
|
||||
|
||||
enum MRESReturn
|
||||
{
|
||||
MRES_ChangedHandled = -2, // Use changed values and return MRES_Handled
|
||||
MRES_ChangedOverride, // Use changed values and return MRES_Override
|
||||
MRES_Ignored, // plugin didn't take any action
|
||||
MRES_Handled, // plugin did something, but real function should still be called
|
||||
MRES_Override, // call real function, but use my return value
|
||||
MRES_Supercede // skip real function; use my return value
|
||||
};
|
||||
|
||||
enum DHookPassFlag
|
||||
{
|
||||
DHookPass_ByVal = (1<<0),
|
||||
DHookPass_ByRef = (1<<1)
|
||||
};
|
||||
|
||||
typeset ListenCB
|
||||
{
|
||||
//Deleted
|
||||
function void (int entity);
|
||||
|
||||
//Created
|
||||
function void (int entity, const char[] classname);
|
||||
};
|
||||
|
||||
typeset DHookRemovalCB
|
||||
{
|
||||
function void (int hookid);
|
||||
};
|
||||
typeset DHookCallback
|
||||
{
|
||||
//Function Example: void Ham::Test() with this pointer ignore
|
||||
function MRESReturn ();
|
||||
|
||||
//Function Example: void Ham::Test() with this pointer passed
|
||||
function MRESReturn (int pThis);
|
||||
|
||||
//Function Example: void Ham::Test(int cake) with this pointer ignore
|
||||
function MRESReturn (Handle hParams);
|
||||
|
||||
//Function Example: void Ham::Test(int cake) with this pointer passed
|
||||
function MRESReturn (int pThis, Handle hParams);
|
||||
|
||||
//Function Example: int Ham::Test() with this pointer ignore
|
||||
function MRESReturn (Handle hReturn);
|
||||
|
||||
//Function Example: int Ham::Test() with this pointer passed
|
||||
function MRESReturn (int pThis, Handle hReturn);
|
||||
|
||||
//Function Example: int Ham::Test(int cake) with this pointer ignore
|
||||
function MRESReturn (Handle hReturn, Handle hParams);
|
||||
|
||||
//Function Example: int Ham::Test(int cake) with this pointer passed
|
||||
function MRESReturn (int pThis, Handle hReturn, Handle hParams);
|
||||
|
||||
//Address NOW
|
||||
|
||||
//Function Example: void Ham::Test() with this pointer passed
|
||||
function MRESReturn (Address pThis);
|
||||
|
||||
//Function Example: void Ham::Test(int cake) with this pointer passed
|
||||
function MRESReturn (Address pThis, Handle hParams);
|
||||
|
||||
//Function Example: int Ham::Test() with this pointer passed
|
||||
function MRESReturn (Address pThis, Handle hReturn);
|
||||
|
||||
//Function Example: int Ham::Test(int cake) with this pointer passed
|
||||
function MRESReturn (Address pThis, Handle hReturn, Handle hParams);
|
||||
|
||||
};
|
||||
|
||||
/* Adds an entity listener hook
|
||||
*
|
||||
* @param type Type of listener to add
|
||||
* @param callback Callback to use
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookAddEntityListener(ListenType type, ListenCB callback);
|
||||
|
||||
/* Removes an entity listener hook
|
||||
*
|
||||
* @param type Type of listener to remove
|
||||
* @param callback Callback this listener was using
|
||||
*
|
||||
* @return True if one was removed false otherwise.
|
||||
*/
|
||||
native bool DHookRemoveEntityListener(ListenType type, ListenCB callback);
|
||||
|
||||
/* Creates a hook
|
||||
*
|
||||
* @param offset vtable offset for function to hook
|
||||
* @param hooktype Type of hook
|
||||
* @param returntype Type type of return
|
||||
* @param thistype Type of this pointer or ignore (ignore can be used if not needed)
|
||||
* @param callback Callback function
|
||||
*
|
||||
* @return Returns setup handle for the hook or INVALID_HANDLE.
|
||||
*/
|
||||
native Handle DHookCreate(int offset, HookType hooktype, ReturnType returntype, ThisPointerType thistype, DHookCallback callback);
|
||||
|
||||
/* Adds param to a hook setup
|
||||
*
|
||||
* @param setup Setup handle to add the param to.
|
||||
* @param type Param type
|
||||
* @param size Used for Objects (not Object ptr) to define the size of the object.
|
||||
* @param flag Used to change the pass type.
|
||||
*
|
||||
* @error Invalid setup handle or too many params added (request upping the max in thread)
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookAddParam(Handle setup, HookParamType type, int size=-1, DHookPassFlag flag=DHookPass_ByVal);
|
||||
//native DHookAddParam(Handle:setup, HookParamType:type);
|
||||
|
||||
/* Hook entity
|
||||
*
|
||||
* @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 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)
|
||||
*
|
||||
* @error Invalid setup handle, invalid entity or invalid hook type.
|
||||
* @return -1 on fail a hookid on success
|
||||
*/
|
||||
native int DHookEntity(Handle setup, bool post, int entity, DHookRemovalCB removalcb=INVALID_FUNCTION);
|
||||
|
||||
/* Hook gamerules
|
||||
*
|
||||
* @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 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.
|
||||
* @return -1 on fail a hookid on success
|
||||
*/
|
||||
native int DHookGamerules(Handle setup, bool post, DHookRemovalCB removalcb=INVALID_FUNCTION);
|
||||
|
||||
/* Hook a raw pointer
|
||||
*
|
||||
* @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 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)
|
||||
*
|
||||
* @error Invalid setup handle, invalid address or invalid hook type.
|
||||
* @return -1 on fail a hookid on success
|
||||
*/
|
||||
native int DHookRaw(Handle setup, bool post, Address addr, DHookRemovalCB removalcb=INVALID_FUNCTION);
|
||||
|
||||
/* Remove hook by hook id
|
||||
*
|
||||
* @param hookid Hook id to remove
|
||||
*
|
||||
* @return true on success false otherwise
|
||||
* @note This will not fire the removal callback!
|
||||
*/
|
||||
native bool DHookRemoveHookID(int hookid);
|
||||
|
||||
/* Get param value (Only use for: int, entity, bool or float param types)
|
||||
*
|
||||
* @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)
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @return value if num greater than 0. If 0 returns paramcount.
|
||||
*/
|
||||
native any DHookGetParam(Handle hParams, int num);
|
||||
|
||||
/* Get vector param value
|
||||
*
|
||||
* @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 vec Vector buffer to store result.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetParamVector(Handle hParams, int num, float vec[3]);
|
||||
|
||||
/* Get string param value
|
||||
*
|
||||
* @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 buffer String buffer to store result
|
||||
* @param size Buffer size
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetParamString(Handle hParams, int num, char[] buffer, int size);
|
||||
|
||||
/* Set param value (Only use for: int, entity, bool or float param types)
|
||||
*
|
||||
* @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.)
|
||||
* @param value Value to set it as (only pass int, bool, float or entity index)
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParam(Handle hParams, int num, any value);
|
||||
|
||||
/* Set vector param value
|
||||
*
|
||||
* @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.)
|
||||
* @param vec Value to set vector as.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParamVector(Handle hParams, int num, float vec[3]);
|
||||
|
||||
/* Set string param value
|
||||
*
|
||||
* @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.)
|
||||
* @param value Value to set string as.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParamString(Handle hParams, int num, char[] value);
|
||||
|
||||
/* Get return value (Only use for: int, entity, bool or float return types)
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @return Returns default value if prehook returns actual value if post hook.
|
||||
*/
|
||||
native any DHookGetReturn(Handle hReturn);
|
||||
|
||||
/* Get return vector value
|
||||
*
|
||||
* @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))
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetReturnVector(Handle hReturn, float vec[3]);
|
||||
|
||||
/* Get return string value
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
* @param buffer String buffer to store result in. (In pre hooks will be default value "")
|
||||
* @param size String buffer size
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetReturnString(Handle hReturn, char[] buffer, int size);
|
||||
|
||||
/* Set return value (Only use for: int, entity, bool or float return types)
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
* @param value Value to set return as
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetReturn(Handle hReturn, any value);
|
||||
|
||||
/* Set return vector value
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
* @param vec Value to set return vector as
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetReturnVector(Handle hReturn, float vec[3]);
|
||||
|
||||
/* Set return string value
|
||||
*
|
||||
* @param hReturn Handle to return structure
|
||||
* @param value Value to set return string as
|
||||
*
|
||||
* @error Invalid Handle, invalid type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetReturnString(Handle hReturn, char[] value);
|
||||
|
||||
//WE SHOULD WRAP THESE AROUND STOCKS FOR NON PTR AS WE SUPPORT BOTH WITH THESE NATIVE'S
|
||||
|
||||
/* Gets an objects variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to get.
|
||||
* @param offset Offset within the object to the var to get.
|
||||
* @param type Type of var it is
|
||||
*
|
||||
* @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.
|
||||
*/
|
||||
native any DHookGetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type);
|
||||
|
||||
/* Sets an objects variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to set.
|
||||
* @param offset Offset within the object to the var to set.
|
||||
* @param type Type of var it is
|
||||
* @param value The value to set the var to.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type, any value);
|
||||
|
||||
/* Gets an objects vector variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to get.
|
||||
* @param offset Offset within the object to the var to get.
|
||||
* @param type Type of var it is
|
||||
* @param buffer Buffer to store the result vector
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float buffer[3]);
|
||||
|
||||
/* Sets an objects vector variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to set.
|
||||
* @param offset Offset within the object to the var to set.
|
||||
* @param type Type of var it is
|
||||
* @param value The value to set the vector var to.
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookSetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float value[3]);
|
||||
|
||||
/* Gets an objects string variable value
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to get.
|
||||
* @param offset Offset within the object to the var to get.
|
||||
* @param type Type of var it is
|
||||
* @param buffer Buffer to store the result vector
|
||||
* @param size Size of the buffer
|
||||
*
|
||||
* @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
|
||||
* @noreturn
|
||||
*/
|
||||
native void DHookGetParamObjectPtrString(Handle hParams, int num, int offset, ObjectValueType type, char[] buffer, int size);
|
||||
|
||||
/* Checks if a pointer param is null
|
||||
*
|
||||
* @param hParams Handle to params structure
|
||||
* @param num Param number to check.
|
||||
*
|
||||
* @error Non pointer param
|
||||
* @return True if null false otherwise.
|
||||
*/
|
||||
native bool DHookIsNullParam(Handle hParams, int num);
|
||||
|
||||
public Extension __ext_dhooks =
|
||||
{
|
||||
name = "dhooks",
|
||||
file = "dhooks.ext",
|
||||
#if defined AUTOLOAD_EXTENSIONS
|
||||
autoload = 1,
|
||||
#else
|
||||
autoload = 0,
|
||||
#endif
|
||||
#if defined REQUIRE_EXTENSIONS
|
||||
required = 1,
|
||||
#else
|
||||
required = 0,
|
||||
#endif
|
||||
};
|
||||
|
||||
#if !defined REQUIRE_EXTENSIONS
|
||||
public __ext_dhooks_SetNTVOptional()
|
||||
{
|
||||
MarkNativeAsOptional("DHookAddEntityListener");
|
||||
MarkNativeAsOptional("DHookRemoveEntityListener");
|
||||
MarkNativeAsOptional("DHookCreate");
|
||||
MarkNativeAsOptional("DHookAddParam");
|
||||
MarkNativeAsOptional("DHookEntity");
|
||||
MarkNativeAsOptional("DHookGamerules");
|
||||
MarkNativeAsOptional("DHookRaw");
|
||||
MarkNativeAsOptional("DHookRemoveHookID");
|
||||
MarkNativeAsOptional("DHookGetParam");
|
||||
MarkNativeAsOptional("DHookGetParamVector");
|
||||
MarkNativeAsOptional("DHookGetParamString");
|
||||
MarkNativeAsOptional("DHookSetParam");
|
||||
MarkNativeAsOptional("DHookSetParamVector");
|
||||
MarkNativeAsOptional("DHookSetParamString");
|
||||
MarkNativeAsOptional("DHookGetReturn");
|
||||
MarkNativeAsOptional("DHookGetReturnVector");
|
||||
MarkNativeAsOptional("DHookGetReturnString");
|
||||
MarkNativeAsOptional("DHookSetReturn");
|
||||
MarkNativeAsOptional("DHookSetReturnVector");
|
||||
MarkNativeAsOptional("DHookSetReturnString");
|
||||
MarkNativeAsOptional("DHookGetParamObjectPtrVar");
|
||||
MarkNativeAsOptional("DHookSetParamObjectPtrVar");
|
||||
MarkNativeAsOptional("DHookGetParamObjectPtrVarVector");
|
||||
MarkNativeAsOptional("DHookSetParamObjectPtrVarVector");
|
||||
MarkNativeAsOptional("DHookIsNullParam");
|
||||
MarkNativeAsOptional("DHookGetParamObjectPtrString");
|
||||
}
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
@ -1,21 +1,21 @@
|
||||
ar_baggage
|
||||
ar_monastery
|
||||
ar_shoots
|
||||
cs_assault
|
||||
cs_italy
|
||||
cs_militia
|
||||
cs_office
|
||||
de_aztec
|
||||
de_bank
|
||||
de_dust
|
||||
de_dust2
|
||||
de_inferno
|
||||
de_lake
|
||||
de_mirage
|
||||
de_nuke
|
||||
de_safehouse
|
||||
de_shorttrain
|
||||
de_stmarc
|
||||
de_sugarcane
|
||||
de_train
|
||||
de_vertigo
|
||||
ar_baggage
|
||||
ar_monastery
|
||||
ar_shoots
|
||||
cs_assault
|
||||
cs_italy
|
||||
cs_militia
|
||||
cs_office
|
||||
de_aztec
|
||||
de_bank
|
||||
de_dust
|
||||
de_dust2
|
||||
de_inferno
|
||||
de_lake
|
||||
de_mirage
|
||||
de_nuke
|
||||
de_safehouse
|
||||
de_shorttrain
|
||||
de_stmarc
|
||||
de_sugarcane
|
||||
de_train
|
||||
de_vertigo
|
||||
|
@ -1,28 +1,28 @@
|
||||
as_oilrig
|
||||
cs_747
|
||||
cs_assault
|
||||
cs_backalley
|
||||
cs_compound
|
||||
cs_estate
|
||||
cs_havana
|
||||
cs_italy
|
||||
cs_militia
|
||||
cs_office
|
||||
cs_siege
|
||||
de_airstrip
|
||||
de_aztec
|
||||
de_cbble
|
||||
de_chateau
|
||||
de_dust2
|
||||
de_dust
|
||||
de_inferno
|
||||
de_nuke
|
||||
de_piranesi
|
||||
de_port
|
||||
de_prodigy
|
||||
de_storm
|
||||
de_survivor
|
||||
de_tides
|
||||
de_torn
|
||||
de_train
|
||||
de_vertigo
|
||||
as_oilrig
|
||||
cs_747
|
||||
cs_assault
|
||||
cs_backalley
|
||||
cs_compound
|
||||
cs_estate
|
||||
cs_havana
|
||||
cs_italy
|
||||
cs_militia
|
||||
cs_office
|
||||
cs_siege
|
||||
de_airstrip
|
||||
de_aztec
|
||||
de_cbble
|
||||
de_chateau
|
||||
de_dust2
|
||||
de_dust
|
||||
de_inferno
|
||||
de_nuke
|
||||
de_piranesi
|
||||
de_port
|
||||
de_prodigy
|
||||
de_storm
|
||||
de_survivor
|
||||
de_tides
|
||||
de_torn
|
||||
de_train
|
||||
de_vertigo
|
||||
|
@ -1,9 +1,9 @@
|
||||
dod_anzio
|
||||
dod_argentan
|
||||
dod_avalanche
|
||||
dod_colmar
|
||||
dod_donner
|
||||
dod_flash
|
||||
dod_jagd
|
||||
dod_kalt
|
||||
dod_palermo
|
||||
dod_anzio
|
||||
dod_argentan
|
||||
dod_avalanche
|
||||
dod_colmar
|
||||
dod_donner
|
||||
dod_flash
|
||||
dod_jagd
|
||||
dod_kalt
|
||||
dod_palermo
|
||||
|
@ -1,7 +1,7 @@
|
||||
dm_lockdown
|
||||
dm_overwatch
|
||||
dm_runoff
|
||||
dm_steamlab
|
||||
dm_underpass
|
||||
dm_resistance
|
||||
dm_powerhouse
|
||||
dm_lockdown
|
||||
dm_overwatch
|
||||
dm_runoff
|
||||
dm_steamlab
|
||||
dm_underpass
|
||||
dm_resistance
|
||||
dm_powerhouse
|
||||
|
@ -1,65 +1,65 @@
|
||||
tc_hydro
|
||||
cp_well
|
||||
cp_granary
|
||||
cp_dustbowl
|
||||
cp_gravelpit
|
||||
ctf_2fort
|
||||
ctf_well
|
||||
cp_badlands
|
||||
pl_goldrush
|
||||
cp_fastlane
|
||||
ctf_turbine
|
||||
pl_badwater
|
||||
cp_steel
|
||||
arena_badlands
|
||||
arena_granary
|
||||
arena_lumberyard
|
||||
arena_ravine
|
||||
arena_well
|
||||
cp_egypt_final
|
||||
cp_junction_final
|
||||
arena_watchtower
|
||||
plr_pipeline
|
||||
arena_sawmill
|
||||
arena_nucleus
|
||||
pl_hoodoo_final
|
||||
koth_sawmill
|
||||
koth_nucleus
|
||||
koth_viaduct
|
||||
ctf_sawmill
|
||||
arena_offblast_final
|
||||
cp_yukon_final
|
||||
koth_harvest_final
|
||||
koth_harvest_event
|
||||
ctf_doublecross
|
||||
cp_gorge
|
||||
cp_freight_final1
|
||||
pl_upward
|
||||
plr_hightower
|
||||
pl_thundermountain
|
||||
cp_coldfront
|
||||
cp_mountainlab
|
||||
cp_manor_event
|
||||
cp_degrootkeep
|
||||
cp_5gorge
|
||||
pl_frontier_final
|
||||
plr_nightfall_final
|
||||
koth_lakeside_final
|
||||
koth_badlands
|
||||
pl_barnblitz
|
||||
cp_gullywash_final1
|
||||
koth_viaduct_event
|
||||
cp_foundry
|
||||
sd_doomsday
|
||||
koth_king
|
||||
mvm_mannworks
|
||||
mvm_coaltown
|
||||
mvm_decoy
|
||||
koth_lakeside_event
|
||||
mvm_bigrock
|
||||
cp_process_final
|
||||
cp_standin_final
|
||||
plr_hightower_event
|
||||
cp_snakewater_final1
|
||||
mvm_mannhattan
|
||||
mvm_rottenburg
|
||||
tc_hydro
|
||||
cp_well
|
||||
cp_granary
|
||||
cp_dustbowl
|
||||
cp_gravelpit
|
||||
ctf_2fort
|
||||
ctf_well
|
||||
cp_badlands
|
||||
pl_goldrush
|
||||
cp_fastlane
|
||||
ctf_turbine
|
||||
pl_badwater
|
||||
cp_steel
|
||||
arena_badlands
|
||||
arena_granary
|
||||
arena_lumberyard
|
||||
arena_ravine
|
||||
arena_well
|
||||
cp_egypt_final
|
||||
cp_junction_final
|
||||
arena_watchtower
|
||||
plr_pipeline
|
||||
arena_sawmill
|
||||
arena_nucleus
|
||||
pl_hoodoo_final
|
||||
koth_sawmill
|
||||
koth_nucleus
|
||||
koth_viaduct
|
||||
ctf_sawmill
|
||||
arena_offblast_final
|
||||
cp_yukon_final
|
||||
koth_harvest_final
|
||||
koth_harvest_event
|
||||
ctf_doublecross
|
||||
cp_gorge
|
||||
cp_freight_final1
|
||||
pl_upward
|
||||
plr_hightower
|
||||
pl_thundermountain
|
||||
cp_coldfront
|
||||
cp_mountainlab
|
||||
cp_manor_event
|
||||
cp_degrootkeep
|
||||
cp_5gorge
|
||||
pl_frontier_final
|
||||
plr_nightfall_final
|
||||
koth_lakeside_final
|
||||
koth_badlands
|
||||
pl_barnblitz
|
||||
cp_gullywash_final1
|
||||
koth_viaduct_event
|
||||
cp_foundry
|
||||
sd_doomsday
|
||||
koth_king
|
||||
mvm_mannworks
|
||||
mvm_coaltown
|
||||
mvm_decoy
|
||||
koth_lakeside_event
|
||||
mvm_bigrock
|
||||
cp_process_final
|
||||
cp_standin_final
|
||||
plr_hightower_event
|
||||
cp_snakewater_final1
|
||||
mvm_mannhattan
|
||||
mvm_rottenburg
|
||||
|
@ -1,77 +1,77 @@
|
||||
"MapchooserSoundsList"
|
||||
{
|
||||
"tf"
|
||||
{
|
||||
"counter"
|
||||
{
|
||||
"1"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_1sec.mp3"
|
||||
"builtin" "vo/announcer_begins_1sec.wav"
|
||||
"event" "Announcer.RoundBegins1Seconds"
|
||||
}
|
||||
"2"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_2sec.mp3"
|
||||
"builtin" "vo/announcer_begins_2sec.wav"
|
||||
"event" "Announcer.RoundBegins2Seconds"
|
||||
}
|
||||
"3"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_3sec.mp3"
|
||||
"builtin" "vo/announcer_begins_3sec.wav"
|
||||
"event" "Announcer.RoundBegins3Seconds"
|
||||
}
|
||||
"4"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_4sec.mp3"
|
||||
"builtin" "vo/announcer_begins_4sec.wav"
|
||||
"event" "Announcer.RoundBegins4Seconds"
|
||||
}
|
||||
"5"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_5sec.mp3"
|
||||
"builtin" "vo/announcer_begins_5sec.wav"
|
||||
"event" "Announcer.RoundBegins5Seconds"
|
||||
}
|
||||
"10"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins10s01.mp3"
|
||||
"builtin" "vo/announcer_dec_missionbegins10s01.wav"
|
||||
}
|
||||
"30"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins30s01.mp3"
|
||||
"builtin" "vo/announcer_dec_missionbegins30s01.wav"
|
||||
}
|
||||
"60"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins60s06.mp3"
|
||||
"builtin" "vo/announcer_dec_missionbegins60s06.wav"
|
||||
}
|
||||
}
|
||||
"vote start"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/vote_started.mp3"
|
||||
"event" "Vote.Created"
|
||||
"builtin" "ui/vote_started.wav"
|
||||
}
|
||||
"vote end"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/vote_success.mp3"
|
||||
"event" "Vote.Passed"
|
||||
"builtin" "ui/vote_success.wav"
|
||||
}
|
||||
"vote warning"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins60s03.mp3"
|
||||
"builtin" "vo/announcer_dec_missionbegins60s03.wav"
|
||||
}
|
||||
"runoff warning"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/vote_failure.mp3"
|
||||
"event" "Vote.Failed"
|
||||
"builtin" "ui/vote_failure.wav"
|
||||
}
|
||||
}
|
||||
"MapchooserSoundsList"
|
||||
{
|
||||
"tf"
|
||||
{
|
||||
"counter"
|
||||
{
|
||||
"1"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_1sec.mp3"
|
||||
"builtin" "vo/announcer_begins_1sec.wav"
|
||||
"event" "Announcer.RoundBegins1Seconds"
|
||||
}
|
||||
"2"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_2sec.mp3"
|
||||
"builtin" "vo/announcer_begins_2sec.wav"
|
||||
"event" "Announcer.RoundBegins2Seconds"
|
||||
}
|
||||
"3"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_3sec.mp3"
|
||||
"builtin" "vo/announcer_begins_3sec.wav"
|
||||
"event" "Announcer.RoundBegins3Seconds"
|
||||
}
|
||||
"4"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_4sec.mp3"
|
||||
"builtin" "vo/announcer_begins_4sec.wav"
|
||||
"event" "Announcer.RoundBegins4Seconds"
|
||||
}
|
||||
"5"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_begins_5sec.mp3"
|
||||
"builtin" "vo/announcer_begins_5sec.wav"
|
||||
"event" "Announcer.RoundBegins5Seconds"
|
||||
}
|
||||
"10"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins10s01.mp3"
|
||||
"builtin" "vo/announcer_dec_missionbegins10s01.wav"
|
||||
}
|
||||
"30"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins30s01.mp3"
|
||||
"builtin" "vo/announcer_dec_missionbegins30s01.wav"
|
||||
}
|
||||
"60"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins60s06.mp3"
|
||||
"builtin" "vo/announcer_dec_missionbegins60s06.wav"
|
||||
}
|
||||
}
|
||||
"vote start"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/vote_started.mp3"
|
||||
"event" "Vote.Created"
|
||||
"builtin" "ui/vote_started.wav"
|
||||
}
|
||||
"vote end"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/vote_success.mp3"
|
||||
"event" "Vote.Passed"
|
||||
"builtin" "ui/vote_success.wav"
|
||||
}
|
||||
"vote warning"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/announcer_dec_missionbegins60s03.mp3"
|
||||
"builtin" "vo/announcer_dec_missionbegins60s03.wav"
|
||||
}
|
||||
"runoff warning"
|
||||
{
|
||||
"sound" "sourcemod/mapchooser/tf2/vote_failure.mp3"
|
||||
"event" "Vote.Failed"
|
||||
"builtin" "ui/vote_failure.wav"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,108 +1,108 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* MapChooser Extended
|
||||
* Creates a map vote at appropriate times, setting sm_nextmap to the winning
|
||||
* vote
|
||||
*
|
||||
* MapChooser Extended (C)2011-2013 Powerlord (Ross Bemrose)
|
||||
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* 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
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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
|
||||
* "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
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#if defined _mapchooser_extended_included_
|
||||
#endinput
|
||||
#endif
|
||||
#define _mapchooser_extended_included_
|
||||
#include <mapchooser>
|
||||
|
||||
// MCE 1.9 series
|
||||
|
||||
enum CanNominateResult
|
||||
{
|
||||
CanNominate_No_VoteFull, /** No, nominations list is full */
|
||||
CanNominate_No_VoteInProgress, /** No, map vote is in progress */
|
||||
CanNominate_No_VoteComplete, /** No, map vote is completed */
|
||||
CanNominate_Yes, /** Yes, you can nominate */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Called whenever warning timer starts
|
||||
*
|
||||
*/
|
||||
forward OnMapVoteWarningStart();
|
||||
|
||||
/**
|
||||
* Called whenever runoff warning timer starts
|
||||
*/
|
||||
forward OnMapVoteRunnoffWarningStart();
|
||||
|
||||
/**
|
||||
* Called whenever the timer ticks
|
||||
*/
|
||||
forward OnMapVoteWarningTick(time);
|
||||
|
||||
/**
|
||||
* Called whenever vote starts
|
||||
*
|
||||
* @deprecated Will be removed in MapChooser 1.8. Use OnMapVoteStarted instead.
|
||||
*/
|
||||
forward OnMapVoteStart();
|
||||
|
||||
/**
|
||||
* Called whenever vote ends
|
||||
*/
|
||||
forward OnMapVoteEnd(const String:map[]);
|
||||
|
||||
/**
|
||||
* Is a map on the current game's official list?
|
||||
* This should be treated as informative only.
|
||||
*
|
||||
* @param map Name of map to check
|
||||
* @return true if it's on the list of official maps for this game
|
||||
*/
|
||||
native bool:IsMapOfficial(const String:map[]);
|
||||
|
||||
/**
|
||||
* Is nominate allowed?
|
||||
*
|
||||
* @return A CanNominateResult corresponding to whether a vote is allowed or not
|
||||
*/
|
||||
native CanNominateResult:CanNominate();
|
||||
|
||||
native bool:ExcludeMap(const String:map[]);
|
||||
|
||||
public SharedPlugin:__pl_mapchooser_extended =
|
||||
{
|
||||
name = "mapchooser",
|
||||
file = "mapchooser_extended.smx",
|
||||
#if defined REQUIRE_PLUGIN
|
||||
required = 1,
|
||||
#else
|
||||
required = 0,
|
||||
#endif
|
||||
};
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* MapChooser Extended
|
||||
* Creates a map vote at appropriate times, setting sm_nextmap to the winning
|
||||
* vote
|
||||
*
|
||||
* MapChooser Extended (C)2011-2013 Powerlord (Ross Bemrose)
|
||||
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* 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
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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
|
||||
* "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
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#if defined _mapchooser_extended_included_
|
||||
#endinput
|
||||
#endif
|
||||
#define _mapchooser_extended_included_
|
||||
#include <mapchooser>
|
||||
|
||||
// MCE 1.9 series
|
||||
|
||||
enum CanNominateResult
|
||||
{
|
||||
CanNominate_No_VoteFull, /** No, nominations list is full */
|
||||
CanNominate_No_VoteInProgress, /** No, map vote is in progress */
|
||||
CanNominate_No_VoteComplete, /** No, map vote is completed */
|
||||
CanNominate_Yes, /** Yes, you can nominate */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Called whenever warning timer starts
|
||||
*
|
||||
*/
|
||||
forward OnMapVoteWarningStart();
|
||||
|
||||
/**
|
||||
* Called whenever runoff warning timer starts
|
||||
*/
|
||||
forward OnMapVoteRunnoffWarningStart();
|
||||
|
||||
/**
|
||||
* Called whenever the timer ticks
|
||||
*/
|
||||
forward OnMapVoteWarningTick(time);
|
||||
|
||||
/**
|
||||
* Called whenever vote starts
|
||||
*
|
||||
* @deprecated Will be removed in MapChooser 1.8. Use OnMapVoteStarted instead.
|
||||
*/
|
||||
forward OnMapVoteStart();
|
||||
|
||||
/**
|
||||
* Called whenever vote ends
|
||||
*/
|
||||
forward OnMapVoteEnd(const String:map[]);
|
||||
|
||||
/**
|
||||
* Is a map on the current game's official list?
|
||||
* This should be treated as informative only.
|
||||
*
|
||||
* @param map Name of map to check
|
||||
* @return true if it's on the list of official maps for this game
|
||||
*/
|
||||
native bool:IsMapOfficial(const String:map[]);
|
||||
|
||||
/**
|
||||
* Is nominate allowed?
|
||||
*
|
||||
* @return A CanNominateResult corresponding to whether a vote is allowed or not
|
||||
*/
|
||||
native CanNominateResult:CanNominate();
|
||||
|
||||
native bool:ExcludeMap(const String:map[]);
|
||||
|
||||
public SharedPlugin:__pl_mapchooser_extended =
|
||||
{
|
||||
name = "mapchooser",
|
||||
file = "mapchooser_extended.smx",
|
||||
#if defined REQUIRE_PLUGIN
|
||||
required = 1,
|
||||
#else
|
||||
required = 0,
|
||||
#endif
|
||||
};
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,378 +1,378 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* Rock The Vote Extended
|
||||
* Creates a map vote when the required number of players have requested one.
|
||||
*
|
||||
* Rock The Vote Extended (C)2012-2013 Powerlord (Ross Bemrose)
|
||||
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* 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
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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
|
||||
* "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
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <sdkhooks>
|
||||
#include <mapchooser>
|
||||
#include "include/mapchooser_extended"
|
||||
#include <nextmap>
|
||||
#include <colors>
|
||||
|
||||
#pragma semicolon 1
|
||||
|
||||
#define MCE_VERSION "1.10.0"
|
||||
|
||||
public Plugin:myinfo =
|
||||
{
|
||||
name = "Rock The Vote Extended",
|
||||
author = "Powerlord and AlliedModders LLC",
|
||||
description = "Provides RTV Map Voting",
|
||||
version = MCE_VERSION,
|
||||
url = "https://forums.alliedmods.net/showthread.php?t=156974"
|
||||
};
|
||||
|
||||
new Handle:g_Cvar_Needed = INVALID_HANDLE;
|
||||
new Handle:g_Cvar_MinPlayers = INVALID_HANDLE;
|
||||
new Handle:g_Cvar_InitialDelay = INVALID_HANDLE;
|
||||
new Handle:g_Cvar_Interval = INVALID_HANDLE;
|
||||
new Handle:g_Cvar_ChangeTime = 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_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_Votes = 0; // Total number of "say rtv" votes
|
||||
new g_VotesNeeded = 0; // Necessary votes before map vote begins. (voters * percent_needed)
|
||||
new bool:g_Voted[MAXPLAYERS+1] = {false, ...};
|
||||
|
||||
new bool:g_InChange = false;
|
||||
|
||||
public OnPluginStart()
|
||||
{
|
||||
LoadTranslations("common.phrases");
|
||||
LoadTranslations("rockthevote.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_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_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_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);
|
||||
|
||||
RegConsoleCmd("say", Command_Say);
|
||||
RegConsoleCmd("say_team", Command_Say);
|
||||
|
||||
RegConsoleCmd("sm_rtv", Command_RTV);
|
||||
|
||||
RegAdminCmd("sm_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
|
||||
CreateConVar("rtve_version", MCE_VERSION, "Rock The Vote Extended Version", FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD);
|
||||
|
||||
AutoExecConfig(true, "rtv");
|
||||
}
|
||||
|
||||
public OnMapStart()
|
||||
{
|
||||
g_Voters = 0;
|
||||
g_Votes = 0;
|
||||
g_VotesNeeded = 0;
|
||||
g_InChange = false;
|
||||
|
||||
/* Handle late load */
|
||||
for (new i=1; i<=MaxClients; i++)
|
||||
{
|
||||
if (IsClientConnected(i))
|
||||
{
|
||||
OnClientConnected(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public OnMapEnd()
|
||||
{
|
||||
g_CanRTV = false;
|
||||
g_RTVAllowed = false;
|
||||
}
|
||||
|
||||
public OnConfigsExecuted()
|
||||
{
|
||||
g_CanRTV = true;
|
||||
g_RTVAllowed = false;
|
||||
CreateTimer(GetConVarFloat(g_Cvar_InitialDelay), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
||||
|
||||
public OnClientConnected(client)
|
||||
{
|
||||
if(IsFakeClient(client))
|
||||
return;
|
||||
|
||||
g_Voted[client] = false;
|
||||
|
||||
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
|
||||
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public OnClientDisconnect(client)
|
||||
{
|
||||
if(IsFakeClient(client))
|
||||
return;
|
||||
|
||||
if(g_Voted[client])
|
||||
{
|
||||
g_Votes--;
|
||||
}
|
||||
|
||||
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
|
||||
|
||||
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
|
||||
|
||||
if (!g_CanRTV)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (g_Votes &&
|
||||
g_Voters &&
|
||||
g_Votes >= g_VotesNeeded &&
|
||||
g_RTVAllowed )
|
||||
{
|
||||
if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
StartRTV();
|
||||
}
|
||||
}
|
||||
|
||||
public OnPlayerChangedTeam(Handle:event, const String:name[], bool:dontBroadcast)
|
||||
{
|
||||
new Client = GetClientOfUserId(GetEventInt(event, "userid"));
|
||||
|
||||
if(IsFakeClient(Client))
|
||||
return;
|
||||
|
||||
if(Client == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsClientInGame(Client) && IsClientConnected(Client))
|
||||
{
|
||||
if (GetClientTeam(Client) == 1)
|
||||
{
|
||||
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
|
||||
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
|
||||
|
||||
if (g_Votes &&
|
||||
g_Voters &&
|
||||
g_Votes >= g_VotesNeeded &&
|
||||
g_RTVAllowed )
|
||||
{
|
||||
if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
StartRTV();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Action:Command_RTV(client, args)
|
||||
{
|
||||
if (!g_CanRTV || !client)
|
||||
{
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
AttemptRTV(client);
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public Action:Command_Say(client, args)
|
||||
{
|
||||
if (!g_CanRTV || !client)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
decl String:text[192];
|
||||
if (!GetCmdArgString(text, sizeof(text)))
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
new startidx = 0;
|
||||
if(text[strlen(text)-1] == '"')
|
||||
{
|
||||
text[strlen(text)-1] = '\0';
|
||||
startidx = 1;
|
||||
}
|
||||
|
||||
new ReplySource:old = SetCmdReplySource(SM_REPLY_TO_CHAT);
|
||||
|
||||
if (strcmp(text[startidx], "rtv", false) == 0 || strcmp(text[startidx], "rockthevote", false) == 0)
|
||||
{
|
||||
AttemptRTV(client);
|
||||
}
|
||||
|
||||
SetCmdReplySource(old);
|
||||
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
AttemptRTV(client)
|
||||
{
|
||||
if (!g_RTVAllowed || (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished()))
|
||||
{
|
||||
CReplyToCommand(client, "[SM] %t", "RTV Not Allowed");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CanMapChooserStartVote())
|
||||
{
|
||||
CReplyToCommand(client, "[SM] %t", "RTV Started");
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers))
|
||||
{
|
||||
CReplyToCommand(client, "[SM] %t", "Minimal Players Not Met");
|
||||
return;
|
||||
}
|
||||
|
||||
if (g_Voted[client])
|
||||
{
|
||||
CReplyToCommand(client, "[SM] %t", "Already Voted", g_Votes, g_VotesNeeded);
|
||||
return;
|
||||
}
|
||||
|
||||
new String:name[MAX_NAME_LENGTH];
|
||||
GetClientName(client, name, sizeof(name));
|
||||
|
||||
g_Votes++;
|
||||
g_Voted[client] = true;
|
||||
|
||||
CPrintToChatAll("[SM] %t", "RTV Requested", name, g_Votes, g_VotesNeeded);
|
||||
|
||||
if (g_Votes >= g_VotesNeeded)
|
||||
{
|
||||
StartRTV();
|
||||
}
|
||||
}
|
||||
|
||||
public Action:Timer_DelayRTV(Handle:timer)
|
||||
{
|
||||
g_RTVAllowed = true;
|
||||
}
|
||||
|
||||
StartRTV()
|
||||
{
|
||||
if (g_InChange)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (EndOfMapVoteEnabled() && HasEndOfMapVoteFinished())
|
||||
{
|
||||
/* Change right now then */
|
||||
new String:map[PLATFORM_MAX_PATH];
|
||||
if (GetNextMap(map, sizeof(map)))
|
||||
{
|
||||
CPrintToChatAll("[SM] %t", "Changing Maps", map);
|
||||
CreateTimer(5.0, Timer_ChangeMap, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
g_InChange = true;
|
||||
|
||||
ResetRTV();
|
||||
|
||||
g_RTVAllowed = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (CanMapChooserStartVote())
|
||||
{
|
||||
new MapChange:when = MapChange:GetConVarInt(g_Cvar_ChangeTime);
|
||||
InitiateMapChooserVote(when);
|
||||
|
||||
ResetRTV();
|
||||
|
||||
g_RTVAllowed = false;
|
||||
CreateTimer(GetConVarFloat(g_Cvar_Interval), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
||||
}
|
||||
|
||||
ResetRTV()
|
||||
{
|
||||
g_Votes = 0;
|
||||
|
||||
for (new i=1; i<=MAXPLAYERS; i++)
|
||||
{
|
||||
g_Voted[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
public Action:Timer_ChangeMap(Handle:hTimer)
|
||||
{
|
||||
g_InChange = false;
|
||||
|
||||
LogMessage("RTV changing map manually");
|
||||
|
||||
new String:map[PLATFORM_MAX_PATH];
|
||||
if (GetNextMap(map, sizeof(map)))
|
||||
{
|
||||
ForceChangeLevel(map, "RTV after mapvote");
|
||||
}
|
||||
|
||||
return Plugin_Stop;
|
||||
}
|
||||
|
||||
// Rock The Vote Extended functions
|
||||
|
||||
public Action:Command_ForceRTV(client, args)
|
||||
{
|
||||
if (!g_CanRTV || !client)
|
||||
{
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
ShowActivity2(client, "[RTVE] ", "%t", "Initiated Vote Map");
|
||||
|
||||
StartRTV();
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* Rock The Vote Extended
|
||||
* Creates a map vote when the required number of players have requested one.
|
||||
*
|
||||
* Rock The Vote Extended (C)2012-2013 Powerlord (Ross Bemrose)
|
||||
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* 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
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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
|
||||
* "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
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <sdkhooks>
|
||||
#include <mapchooser>
|
||||
#include "include/mapchooser_extended"
|
||||
#include <nextmap>
|
||||
#include <colors>
|
||||
|
||||
#pragma semicolon 1
|
||||
|
||||
#define MCE_VERSION "1.10.0"
|
||||
|
||||
public Plugin:myinfo =
|
||||
{
|
||||
name = "Rock The Vote Extended",
|
||||
author = "Powerlord and AlliedModders LLC",
|
||||
description = "Provides RTV Map Voting",
|
||||
version = MCE_VERSION,
|
||||
url = "https://forums.alliedmods.net/showthread.php?t=156974"
|
||||
};
|
||||
|
||||
new Handle:g_Cvar_Needed = INVALID_HANDLE;
|
||||
new Handle:g_Cvar_MinPlayers = INVALID_HANDLE;
|
||||
new Handle:g_Cvar_InitialDelay = INVALID_HANDLE;
|
||||
new Handle:g_Cvar_Interval = INVALID_HANDLE;
|
||||
new Handle:g_Cvar_ChangeTime = 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_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_Votes = 0; // Total number of "say rtv" votes
|
||||
new g_VotesNeeded = 0; // Necessary votes before map vote begins. (voters * percent_needed)
|
||||
new bool:g_Voted[MAXPLAYERS+1] = {false, ...};
|
||||
|
||||
new bool:g_InChange = false;
|
||||
|
||||
public OnPluginStart()
|
||||
{
|
||||
LoadTranslations("common.phrases");
|
||||
LoadTranslations("rockthevote.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_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_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_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);
|
||||
|
||||
RegConsoleCmd("say", Command_Say);
|
||||
RegConsoleCmd("say_team", Command_Say);
|
||||
|
||||
RegConsoleCmd("sm_rtv", Command_RTV);
|
||||
|
||||
RegAdminCmd("sm_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
|
||||
CreateConVar("rtve_version", MCE_VERSION, "Rock The Vote Extended Version", FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD);
|
||||
|
||||
AutoExecConfig(true, "rtv");
|
||||
}
|
||||
|
||||
public OnMapStart()
|
||||
{
|
||||
g_Voters = 0;
|
||||
g_Votes = 0;
|
||||
g_VotesNeeded = 0;
|
||||
g_InChange = false;
|
||||
|
||||
/* Handle late load */
|
||||
for (new i=1; i<=MaxClients; i++)
|
||||
{
|
||||
if (IsClientConnected(i))
|
||||
{
|
||||
OnClientConnected(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public OnMapEnd()
|
||||
{
|
||||
g_CanRTV = false;
|
||||
g_RTVAllowed = false;
|
||||
}
|
||||
|
||||
public OnConfigsExecuted()
|
||||
{
|
||||
g_CanRTV = true;
|
||||
g_RTVAllowed = false;
|
||||
CreateTimer(GetConVarFloat(g_Cvar_InitialDelay), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
||||
|
||||
public OnClientConnected(client)
|
||||
{
|
||||
if(IsFakeClient(client))
|
||||
return;
|
||||
|
||||
g_Voted[client] = false;
|
||||
|
||||
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
|
||||
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public OnClientDisconnect(client)
|
||||
{
|
||||
if(IsFakeClient(client))
|
||||
return;
|
||||
|
||||
if(g_Voted[client])
|
||||
{
|
||||
g_Votes--;
|
||||
}
|
||||
|
||||
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
|
||||
|
||||
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
|
||||
|
||||
if (!g_CanRTV)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (g_Votes &&
|
||||
g_Voters &&
|
||||
g_Votes >= g_VotesNeeded &&
|
||||
g_RTVAllowed )
|
||||
{
|
||||
if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
StartRTV();
|
||||
}
|
||||
}
|
||||
|
||||
public OnPlayerChangedTeam(Handle:event, const String:name[], bool:dontBroadcast)
|
||||
{
|
||||
new Client = GetClientOfUserId(GetEventInt(event, "userid"));
|
||||
|
||||
if(IsFakeClient(Client))
|
||||
return;
|
||||
|
||||
if(Client == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsClientInGame(Client) && IsClientConnected(Client))
|
||||
{
|
||||
if (GetClientTeam(Client) == 1)
|
||||
{
|
||||
g_Voters = GetTeamClientCount(2) + GetTeamClientCount(3);
|
||||
g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
|
||||
|
||||
if (g_Votes &&
|
||||
g_Voters &&
|
||||
g_Votes >= g_VotesNeeded &&
|
||||
g_RTVAllowed )
|
||||
{
|
||||
if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
StartRTV();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Action:Command_RTV(client, args)
|
||||
{
|
||||
if (!g_CanRTV || !client)
|
||||
{
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
AttemptRTV(client);
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public Action:Command_Say(client, args)
|
||||
{
|
||||
if (!g_CanRTV || !client)
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
decl String:text[192];
|
||||
if (!GetCmdArgString(text, sizeof(text)))
|
||||
{
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
new startidx = 0;
|
||||
if(text[strlen(text)-1] == '"')
|
||||
{
|
||||
text[strlen(text)-1] = '\0';
|
||||
startidx = 1;
|
||||
}
|
||||
|
||||
new ReplySource:old = SetCmdReplySource(SM_REPLY_TO_CHAT);
|
||||
|
||||
if (strcmp(text[startidx], "rtv", false) == 0 || strcmp(text[startidx], "rockthevote", false) == 0)
|
||||
{
|
||||
AttemptRTV(client);
|
||||
}
|
||||
|
||||
SetCmdReplySource(old);
|
||||
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
AttemptRTV(client)
|
||||
{
|
||||
if (!g_RTVAllowed || (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished()))
|
||||
{
|
||||
CReplyToCommand(client, "[SM] %t", "RTV Not Allowed");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CanMapChooserStartVote())
|
||||
{
|
||||
CReplyToCommand(client, "[SM] %t", "RTV Started");
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers))
|
||||
{
|
||||
CReplyToCommand(client, "[SM] %t", "Minimal Players Not Met");
|
||||
return;
|
||||
}
|
||||
|
||||
if (g_Voted[client])
|
||||
{
|
||||
CReplyToCommand(client, "[SM] %t", "Already Voted", g_Votes, g_VotesNeeded);
|
||||
return;
|
||||
}
|
||||
|
||||
new String:name[MAX_NAME_LENGTH];
|
||||
GetClientName(client, name, sizeof(name));
|
||||
|
||||
g_Votes++;
|
||||
g_Voted[client] = true;
|
||||
|
||||
CPrintToChatAll("[SM] %t", "RTV Requested", name, g_Votes, g_VotesNeeded);
|
||||
|
||||
if (g_Votes >= g_VotesNeeded)
|
||||
{
|
||||
StartRTV();
|
||||
}
|
||||
}
|
||||
|
||||
public Action:Timer_DelayRTV(Handle:timer)
|
||||
{
|
||||
g_RTVAllowed = true;
|
||||
}
|
||||
|
||||
StartRTV()
|
||||
{
|
||||
if (g_InChange)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (EndOfMapVoteEnabled() && HasEndOfMapVoteFinished())
|
||||
{
|
||||
/* Change right now then */
|
||||
new String:map[PLATFORM_MAX_PATH];
|
||||
if (GetNextMap(map, sizeof(map)))
|
||||
{
|
||||
CPrintToChatAll("[SM] %t", "Changing Maps", map);
|
||||
CreateTimer(5.0, Timer_ChangeMap, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
g_InChange = true;
|
||||
|
||||
ResetRTV();
|
||||
|
||||
g_RTVAllowed = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (CanMapChooserStartVote())
|
||||
{
|
||||
new MapChange:when = MapChange:GetConVarInt(g_Cvar_ChangeTime);
|
||||
InitiateMapChooserVote(when);
|
||||
|
||||
ResetRTV();
|
||||
|
||||
g_RTVAllowed = false;
|
||||
CreateTimer(GetConVarFloat(g_Cvar_Interval), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
||||
}
|
||||
|
||||
ResetRTV()
|
||||
{
|
||||
g_Votes = 0;
|
||||
|
||||
for (new i=1; i<=MAXPLAYERS; i++)
|
||||
{
|
||||
g_Voted[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
public Action:Timer_ChangeMap(Handle:hTimer)
|
||||
{
|
||||
g_InChange = false;
|
||||
|
||||
LogMessage("RTV changing map manually");
|
||||
|
||||
new String:map[PLATFORM_MAX_PATH];
|
||||
if (GetNextMap(map, sizeof(map)))
|
||||
{
|
||||
ForceChangeLevel(map, "RTV after mapvote");
|
||||
}
|
||||
|
||||
return Plugin_Stop;
|
||||
}
|
||||
|
||||
// Rock The Vote Extended functions
|
||||
|
||||
public Action:Command_ForceRTV(client, args)
|
||||
{
|
||||
if (!g_CanRTV || !client)
|
||||
{
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
ShowActivity2(client, "[RTVE] ", "%t", "Initiated Vote Map");
|
||||
|
||||
StartRTV();
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"chi" "下一幅地图投票了!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"chi" "下一幅地图投选已开始."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"chi" " 地图投票已结束. 下一幅地图将为 {1}. ( 得票{2}%% , {3}票)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"chi" "当前地图已被延长."
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"chi" "延长当前地图"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"chi" "请勿更换"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"chi" "当前地图已被延长! 投票显示! (得票 {1}%% 共 {2} 票)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"chi" "更换下一幅地图为 \"{1}\"."
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"chi" "下一幅地图投票了!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"chi" "下一幅地图投选已开始."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"chi" " 地图投票已结束. 下一幅地图将为 {1}. ( 得票{2}%% , {3}票)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"chi" "当前地图已被延长."
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"chi" "延长当前地图"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"chi" "请勿更换"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"chi" "当前地图已被延长! 投票显示! (得票 {1}%% 共 {2} 票)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"chi" "更换下一幅地图为 \"{1}\"."
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"cze" "Hlasujte o příští mapě!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"cze" "Hlasování o příští mapě začalo."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"cze" "Hlasování o mapě skončilo. Příští mapou bude {1}. (Obdržela {2}%% z {3} hlasů)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"cze" "Současná mapa byla prodloužena. (Obdržela {1}%% z {2} hlasů)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"cze" "Prodloužit současnou mapu"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"cze" "Neměnit"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"cze" "Současná mapa pokračuje! Hlasování rozhodlo! (Obdržela {1}%% z {2} hlasů)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"cze" "Změnil příští mapu na \"{1}\"."
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"cze" "Hlasujte o příští mapě!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"cze" "Hlasování o příští mapě začalo."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"cze" "Hlasování o mapě skončilo. Příští mapou bude {1}. (Obdržela {2}%% z {3} hlasů)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"cze" "Současná mapa byla prodloužena. (Obdržela {1}%% z {2} hlasů)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"cze" "Prodloužit současnou mapu"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"cze" "Neměnit"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"cze" "Současná mapa pokračuje! Hlasování rozhodlo! (Obdržela {1}%% z {2} hlasů)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"cze" "Změnil příští mapu na \"{1}\"."
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"da" "Stem om næste bane!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"da" "Afstemning for næste bane er begyndt."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"da" "Bane afstemning er fuldført. Den næste bane vil være {1}. (Modtog {2}%% af {3} stemmer) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"da" "Den nuværende bane er blevet forlænget. (Modtog {1}%% af {2} stemmer) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"da" "Forlæng bane"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"da" "Skift ikke!"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"da" "Den aktuelle bane fortsætter! Afstemningen har talt! (Modtog {1}%% af {2} stemmer)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"da" "Skiftede næste bane til \"{1}'."
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"da" "Stem om næste bane!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"da" "Afstemning for næste bane er begyndt."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"da" "Bane afstemning er fuldført. Den næste bane vil være {1}. (Modtog {2}%% af {3} stemmer) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"da" "Den nuværende bane er blevet forlænget. (Modtog {1}%% af {2} stemmer) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"da" "Forlæng bane"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"da" "Skift ikke!"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"da" "Den aktuelle bane fortsætter! Afstemningen har talt! (Modtog {1}%% af {2} stemmer)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"da" "Skiftede næste bane til \"{1}'."
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,98 +1,98 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"de" "Stimme für die nächste Karte!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"de" "Abstimmung für die nächste Karte wurde gestartet."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"de" "Karten-Abstimmung wurde abgeschlossen. Nächste Karte wird {1} sein. ({2}%% von {3} Stimmen erhalten) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"de" "Die aktuelle Karte wurde verlängert. ({1}%% von {2} Stimmen erhalten) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"de" "Verlängere aktuelle Karte"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"de" "Nicht wechseln"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"de" "Aktuelle Karte geht weiter! Die Abstimmung hat entschieden! ({1}%% von {2} Stimmen erhalten) "
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"de" "Nächste Karte wurde auf \"{1}\" geändert. "
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"de" "Stichwahl für die nächste Karte!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"de" "Anzahl der Stimmen"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"de" "{1} (nicht vorhanden)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"de" "Keine Karte hat mehr als {1}%% der Stimmen.\nEine neue Abstimmung ist erforderlich!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"de" "Stichwahl startet in: {1} Sekunden"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"de" "Achtung! Die Abstimmung für die nächste Karte startet in: {1} Sekunden"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"de" "Überlegen Sie, welche Karte Sie spielen möchten ..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"de" "... und nicht unüberlegt wählen!"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"de" "Abstimmung ist bereits im Gange. Versuch Sie es erneut in {1} Sekunden"
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"de" "Die Top-{1} Karten haben gleich viele Stimmen!.\nEine neue Abstimmung ist erforderlich!"
|
||||
}
|
||||
|
||||
"Custom Marked"
|
||||
{
|
||||
"de" "*{1}"
|
||||
}
|
||||
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"de" "Stimme für die nächste Karte!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"de" "Abstimmung für die nächste Karte wurde gestartet."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"de" "Karten-Abstimmung wurde abgeschlossen. Nächste Karte wird {1} sein. ({2}%% von {3} Stimmen erhalten) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"de" "Die aktuelle Karte wurde verlängert. ({1}%% von {2} Stimmen erhalten) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"de" "Verlängere aktuelle Karte"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"de" "Nicht wechseln"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"de" "Aktuelle Karte geht weiter! Die Abstimmung hat entschieden! ({1}%% von {2} Stimmen erhalten) "
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"de" "Nächste Karte wurde auf \"{1}\" geändert. "
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"de" "Stichwahl für die nächste Karte!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"de" "Anzahl der Stimmen"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"de" "{1} (nicht vorhanden)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"de" "Keine Karte hat mehr als {1}%% der Stimmen.\nEine neue Abstimmung ist erforderlich!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"de" "Stichwahl startet in: {1} Sekunden"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"de" "Achtung! Die Abstimmung für die nächste Karte startet in: {1} Sekunden"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"de" "Überlegen Sie, welche Karte Sie spielen möchten ..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"de" "... und nicht unüberlegt wählen!"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"de" "Abstimmung ist bereits im Gange. Versuch Sie es erneut in {1} Sekunden"
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"de" "Die Top-{1} Karten haben gleich viele Stimmen!.\nEine neue Abstimmung ist erforderlich!"
|
||||
}
|
||||
|
||||
"Custom Marked"
|
||||
{
|
||||
"de" "*{1}"
|
||||
}
|
||||
|
||||
}
|
@ -1,92 +1,92 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"es" "Vota para el siguiente mapa!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"es" "La votacion para el siguiente mapa ha comenzado."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"es" "Votacion de Mapa finalizado. El siguiente mapa sera {1}. (Recibidos {2}%% de {3} votos)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"es" "El mapa actual ha sido extendido. (Recibidos {1}%% de {2} votos)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"es" "Extender mapa actual"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"es" "No cambiar"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"es" "El mapa actual continua! La votacion ha hablado! (Recibidos {1}%% de {2} votos)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"es" "El siguiente mapa ha cambiado a \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"es" "Hacer votacion para el siguiente mapa!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"es" "Numero de Votaciones"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"es" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"es" "No hay ningun mapa que haya recibido el {1}%% de votaciones.\nEntonces, que mapa ganara? Es necesario otra votacion!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"es" "La votacion empezara en: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"es" "Atencion! La votacion para el siguiente mapa se iniciara en: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"es" "Considera que mapa quieres jugar..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"es" "...y no pulse los botones sin pensar ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"es" "Votacion ya iniciada. Intentando de nuevo en {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"es" "El top {1} de mapas tienen el mismo numero de votaciones.\nSe necesita una nueva votacion!"
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"es" "Vota para el siguiente mapa!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"es" "La votacion para el siguiente mapa ha comenzado."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"es" "Votacion de Mapa finalizado. El siguiente mapa sera {1}. (Recibidos {2}%% de {3} votos)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"es" "El mapa actual ha sido extendido. (Recibidos {1}%% de {2} votos)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"es" "Extender mapa actual"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"es" "No cambiar"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"es" "El mapa actual continua! La votacion ha hablado! (Recibidos {1}%% de {2} votos)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"es" "El siguiente mapa ha cambiado a \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"es" "Hacer votacion para el siguiente mapa!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"es" "Numero de Votaciones"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"es" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"es" "No hay ningun mapa que haya recibido el {1}%% de votaciones.\nEntonces, que mapa ganara? Es necesario otra votacion!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"es" "La votacion empezara en: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"es" "Atencion! La votacion para el siguiente mapa se iniciara en: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"es" "Considera que mapa quieres jugar..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"es" "...y no pulse los botones sin pensar ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"es" "Votacion ya iniciada. Intentando de nuevo en {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"es" "El top {1} de mapas tienen el mismo numero de votaciones.\nSe necesita una nueva votacion!"
|
||||
}
|
||||
}
|
@ -1,87 +1,87 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"fr" "Voter pour la prochaine map!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"fr" "Voter pour la prochaine map est lancer."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"fr" "Le VoteMap est terminer. La prochaine map sera {1}. (Reçu {2}%% sur {3} votes)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"fr" "La map actuelle a été prolonger. (Reçu {1}%% sur {2} votes)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"fr" "Prolonger la map"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"fr" "Ne pas changer"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"fr" "La map continue! Le vote a tranché! (Reçu {1}%% sur {2} votes)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"fr" "La map suivante sera \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"fr" "Votez a nouveau pour la prochaine Map!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"fr" "Nombres de votes"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"fr" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"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é!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"fr" "Un nouveau vote commence dans: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"fr" "Attention! Le vote pour la prochaine map commence dans: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"fr" "Voter pour la map que vous voulez jouer..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"fr" "...et ne pas cliquez sur une touche comme un con ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"fr" "Vote déjà en cours. Reassayer dans {1}s."
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"fr" "Voter pour la prochaine map!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"fr" "Voter pour la prochaine map est lancer."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"fr" "Le VoteMap est terminer. La prochaine map sera {1}. (Reçu {2}%% sur {3} votes)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"fr" "La map actuelle a été prolonger. (Reçu {1}%% sur {2} votes)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"fr" "Prolonger la map"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"fr" "Ne pas changer"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"fr" "La map continue! Le vote a tranché! (Reçu {1}%% sur {2} votes)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"fr" "La map suivante sera \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"fr" "Votez a nouveau pour la prochaine Map!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"fr" "Nombres de votes"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"fr" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"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é!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"fr" "Un nouveau vote commence dans: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"fr" "Attention! Le vote pour la prochaine map commence dans: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"fr" "Voter pour la map que vous voulez jouer..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"fr" "...et ne pas cliquez sur une touche comme un con ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"fr" "Vote déjà en cours. Reassayer dans {1}s."
|
||||
}
|
||||
}
|
@ -1,92 +1,92 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"fr" "Votez pour la prochaine map!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"fr" "Le vote pour la prochaine map est lancé."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"fr" "Le VoteMap est terminé. La prochaine map sera {1}. (Reçu {2}%% sur {3} votes)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"fr" "La map actuelle a été prolongée. (Reçu {1}%% sur {2} votes)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"fr" "Prolonger la map"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"fr" "Ne pas changer"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"fr" "La map continue! Le vote a tranché! (Reçu {1}%% sur {2} votes)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"fr" "La map suivante sera \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"fr" "Votez à nouveau pour la prochaine Map!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"fr" "Nombres de votes"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"fr" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"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é!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"fr" "Un nouveau vote commence dans: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"fr" "Attention! Le vote pour la prochaine map commence dans: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"fr" "Votez pour la map que vous voulez jouer..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"fr" "...et n'appuyez pas sur une touche comme un con ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"fr" "Vote déjà en cours. Reassayez dans {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"fr" "{1} maps ont eu un même nombre de voix.\nUn nouveau vote est nécessaire!"
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"fr" "Votez pour la prochaine map!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"fr" "Le vote pour la prochaine map est lancé."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"fr" "Le VoteMap est terminé. La prochaine map sera {1}. (Reçu {2}%% sur {3} votes)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"fr" "La map actuelle a été prolongée. (Reçu {1}%% sur {2} votes)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"fr" "Prolonger la map"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"fr" "Ne pas changer"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"fr" "La map continue! Le vote a tranché! (Reçu {1}%% sur {2} votes)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"fr" "La map suivante sera \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"fr" "Votez à nouveau pour la prochaine Map!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"fr" "Nombres de votes"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"fr" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"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é!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"fr" "Un nouveau vote commence dans: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"fr" "Attention! Le vote pour la prochaine map commence dans: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"fr" "Votez pour la map que vous voulez jouer..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"fr" "...et n'appuyez pas sur une touche comme un con ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"fr" "Vote déjà en cours. Reassayez dans {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"fr" "{1} maps ont eu un même nombre de voix.\nUn nouveau vote est nécessaire!"
|
||||
}
|
||||
}
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"hu" "Mi legyen a következő pálya?"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"hu" "Palyavalaszto szavazas elindult!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"hu" "A szavazás lezárult. A következő pálya a {1} lesz"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"hu" "Az aktualis palya meghosszabitva."
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"hu" "Palya meghosszabitasa"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"hu" "Ne valtsunk!"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"hu" "Jelenlegi palya folytatodik."
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"hu" "\"{1}\" lesz a kovetkezo palya"
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"hu" "Mi legyen a következő pálya?"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"hu" "Palyavalaszto szavazas elindult!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"hu" "A szavazás lezárult. A következő pálya a {1} lesz"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"hu" "Az aktualis palya meghosszabitva."
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"hu" "Palya meghosszabitasa"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"hu" "Ne valtsunk!"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"hu" "Jelenlegi palya folytatodik."
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"hu" "\"{1}\" lesz a kovetkezo palya"
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,92 +1,92 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"it" "Vota per la prossima mappa!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"it" "Le votazione per scegliere la prossima mappa sono iniziate."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"it" "Le votazioni sono terminate. La prossima mappa sarà {1}. (Con {2}%% su {3} votes)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"it" "La mappa attuale è stata estesa. (Con {1}%% su {2} votes)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"it" "Estendi la mappa corrente"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"it" "Non cambiare"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"it" "La mappa continua! Il voto ha parlato! (Con {1}%% su {2} votes)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"it" "La mappa successiva sarà \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"it" "Vota nuovamente per scegliere la prossima mappa!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"it" "Numero di voti"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"it" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"it" "Nessuna mappa ha ricevuto più del {1}%% di voti.\nAllora, quale mappa vincerà? Si inizia un' altra votazione!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"it" "Una nuova votazione inizierà tra: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"it" "Attenzione! Le votazione per la prossima mappa cominceranno tra: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"it" "Vota la mappa chevorresti giocare..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"it" "...e non cliccare i tasti sconsideratamente :D"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"it" "Il voto è in corso. Riprova tra {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"it" "Le mappe hanno raggiunto il pareggio dei voti.\nBisogna nuovamente votare!"
|
||||
}
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"it" "Vota per la prossima mappa!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"it" "Le votazione per scegliere la prossima mappa sono iniziate."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"it" "Le votazioni sono terminate. La prossima mappa sarà {1}. (Con {2}%% su {3} votes)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"it" "La mappa attuale è stata estesa. (Con {1}%% su {2} votes)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"it" "Estendi la mappa corrente"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"it" "Non cambiare"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"it" "La mappa continua! Il voto ha parlato! (Con {1}%% su {2} votes)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"it" "La mappa successiva sarà \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"it" "Vota nuovamente per scegliere la prossima mappa!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"it" "Numero di voti"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"it" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"it" "Nessuna mappa ha ricevuto più del {1}%% di voti.\nAllora, quale mappa vincerà? Si inizia un' altra votazione!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"it" "Una nuova votazione inizierà tra: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"it" "Attenzione! Le votazione per la prossima mappa cominceranno tra: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"it" "Vota la mappa chevorresti giocare..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"it" "...e non cliccare i tasti sconsideratamente :D"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"it" "Il voto è in corso. Riprova tra {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"it" "Le mappe hanno raggiunto il pareggio dei voti.\nBisogna nuovamente votare!"
|
||||
}
|
||||
}
|
||||
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"jp" "次のマップを投票してください!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"jp" "次のマップ投票をスタートしました。"
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"jp" "マップ投票が完了しました。次はマップは{1}です。({3}中{2}%%)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"jp" "現在のマップを延長します。({3}中{2}%%)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"jp" "現在のマップを延長"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"jp" "変更しない"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"jp" "現在のマップを延長します。({3}中{2}%%)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"jp" "次のマップを\"{1}\"に変更しました。"
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"jp" "次のマップを投票してください!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"jp" "次のマップ投票をスタートしました。"
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"jp" "マップ投票が完了しました。次はマップは{1}です。({3}中{2}%%)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"jp" "現在のマップを延長します。({3}中{2}%%)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"jp" "現在のマップを延長"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"jp" "変更しない"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"jp" "現在のマップを延長します。({3}中{2}%%)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"jp" "次のマップを\"{1}\"に変更しました。"
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,98 +1,98 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"ko" "다음 맵을 결정하기 위한 투표!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"ko" "다음 맵을 결정하기 위한 투표가 시작되었습니다."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"ko" "맵 투표가 끝났습니다. 다음 맵은 {1} 이 될 것입니다. (전체 인원 {2}명 중 {1}%%의 표를 받았습니다.)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"ko" "현재 맵을 더하기로 결정했습니다. (전체 인원 {2}명 중 {1}%%의 표를 받았습니다.)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"ko" "지금 맵을 더 하자"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"ko" "바꾸지 말자"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"ko" "현재 맵을 계속 합니다!(전체 인원 {2} 명의 {1}%% 의 표를 받았습니다)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"ko" "다음 맵을 \"{1}\" 로 바꾸었습니다."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"ko" "다음 맵을 결정하기 위한 재투표!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"ko" "투표수"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"ko" "{1} (커스텀 맵)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"ko" "{1}%% 이상 투표를 받은 맵이 없습니다.\n다음 맵을 결정하기 위해 재투표를 합니다!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"ko" "재투표까지: {1}초"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"ko" "알립니다! 다음 맵을 결정하는 투표까지: {1}초"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"ko" "원하는 맵을 선택하세요..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"ko" "...그리고 아무거나 막 찍지 말고요 -_-"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"ko" "투표가 진행 중에 있습니다. {1}초 후 다시 시도합니다."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"ko" "{1}개 맵이 같은 투표수를 얻었습니다.\n재투표를 합니다!"
|
||||
}
|
||||
|
||||
"Custom Marked"
|
||||
{
|
||||
"ko" "*{1}"
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"ko" "다음 맵을 결정하기 위한 투표!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"ko" "다음 맵을 결정하기 위한 투표가 시작되었습니다."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"ko" "맵 투표가 끝났습니다. 다음 맵은 {1} 이 될 것입니다. (전체 인원 {2}명 중 {1}%%의 표를 받았습니다.)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"ko" "현재 맵을 더하기로 결정했습니다. (전체 인원 {2}명 중 {1}%%의 표를 받았습니다.)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"ko" "지금 맵을 더 하자"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"ko" "바꾸지 말자"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"ko" "현재 맵을 계속 합니다!(전체 인원 {2} 명의 {1}%% 의 표를 받았습니다)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"ko" "다음 맵을 \"{1}\" 로 바꾸었습니다."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"ko" "다음 맵을 결정하기 위한 재투표!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"ko" "투표수"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"ko" "{1} (커스텀 맵)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"ko" "{1}%% 이상 투표를 받은 맵이 없습니다.\n다음 맵을 결정하기 위해 재투표를 합니다!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"ko" "재투표까지: {1}초"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"ko" "알립니다! 다음 맵을 결정하는 투표까지: {1}초"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"ko" "원하는 맵을 선택하세요..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"ko" "...그리고 아무거나 막 찍지 말고요 -_-"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"ko" "투표가 진행 중에 있습니다. {1}초 후 다시 시도합니다."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"ko" "{1}개 맵이 같은 투표수를 얻었습니다.\n재투표를 합니다!"
|
||||
}
|
||||
|
||||
"Custom Marked"
|
||||
{
|
||||
"ko" "*{1}"
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"lv" "Balso par nākamo karti!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"lv" "Balsošana par nākamo karti ir sākusies."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"lv" "Balsošana par karti ir beigusies. Nākamā karte būs {1}. (Saņēma {2}%% no {3} balsīm) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"lv" "Patreizējās kartes laiks ir pagarināts. (Saņēma {1}%% no {2} balsīm) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"lv" "Pagarināt laiku patreizējā kartē"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"lv" "Nemainīt"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"lv" "Patreizējā karte turpinās! Aptauja ir beigusies! (Saņēma {1}%% no {2} balsīm)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"lv" "Nomainīja nākamo karti uz \"{1}\"."
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"lv" "Balso par nākamo karti!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"lv" "Balsošana par nākamo karti ir sākusies."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"lv" "Balsošana par karti ir beigusies. Nākamā karte būs {1}. (Saņēma {2}%% no {3} balsīm) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"lv" "Patreizējās kartes laiks ir pagarināts. (Saņēma {1}%% no {2} balsīm) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"lv" "Pagarināt laiku patreizējā kartē"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"lv" "Nemainīt"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"lv" "Patreizējā karte turpinās! Aptauja ir beigusies! (Saņēma {1}%% no {2} balsīm)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"lv" "Nomainīja nākamo karti uz \"{1}\"."
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,109 +1,109 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"en" "Vote for the next map!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"en" "Voting for next map has started."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"#format" "{1:s},{2:i},{3:i}"
|
||||
"en" "Map voting has finished. The next map will be {1}. (Received {2}%% of {3} votes)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"#format" "{1:i},{2:i}"
|
||||
"en" "The current map has been extended. (Received {1}%% of {2} votes)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"en" "Extend Current Map"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"en" "Don't Change"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"#format" "{1:i},{2:i}"
|
||||
"en" "Current map continues! The Vote has spoken! (Received {1}%% of {2} votes)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"#format" "{1:s}"
|
||||
"en" "Changed nextmap to \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"en" "Runoff Vote for the next map!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"en" "Number of votes"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"#format" "{1:s}"
|
||||
"en" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "No map has received more than {1}%% of the vote.\nSo, which map will win? A revote is needed!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "Runoff vote will start in: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "Warning! Voting for the next map will begin in: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"en" "Consider which map you want to play..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"en" "...and don't hit buttons thoughtlessly ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "Vote already in progress. Retrying in {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "The top {1} maps had the same number of votes.\nA revote is needed!"
|
||||
}
|
||||
|
||||
"Custom Marked"
|
||||
{
|
||||
"#format" "{1:s}"
|
||||
"en" "*{1}"
|
||||
}
|
||||
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"en" "Vote for the next map!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"en" "Voting for next map has started."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"#format" "{1:s},{2:i},{3:i}"
|
||||
"en" "Map voting has finished. The next map will be {1}. (Received {2}%% of {3} votes)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"#format" "{1:i},{2:i}"
|
||||
"en" "The current map has been extended. (Received {1}%% of {2} votes)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"en" "Extend Current Map"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"en" "Don't Change"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"#format" "{1:i},{2:i}"
|
||||
"en" "Current map continues! The Vote has spoken! (Received {1}%% of {2} votes)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"#format" "{1:s}"
|
||||
"en" "Changed nextmap to \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"en" "Runoff Vote for the next map!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"en" "Number of votes"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"#format" "{1:s}"
|
||||
"en" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "No map has received more than {1}%% of the vote.\nSo, which map will win? A revote is needed!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "Runoff vote will start in: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "Warning! Voting for the next map will begin in: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"en" "Consider which map you want to play..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"en" "...and don't hit buttons thoughtlessly ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "Vote already in progress. Retrying in {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"#format" "{1:i}"
|
||||
"en" "The top {1} maps had the same number of votes.\nA revote is needed!"
|
||||
}
|
||||
|
||||
"Custom Marked"
|
||||
{
|
||||
"#format" "{1:s}"
|
||||
"en" "*{1}"
|
||||
}
|
||||
|
||||
}
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"nl" "Stem voor de volgende map!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"nl" "Stemmen voor de volgende map is gestart."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"nl" "Map stemmen gestopt. De volgende map wordt {1}."
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"nl" "De huidige map is verlengd."
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"nl" "Verleng huidige map"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"nl" "Niet veranderen"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"nl" "Huidige map gaat verder! De Stem heeft gesproken! (Ontvangen {1}%% van de {2} stemmen)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"nl" "Volgende map verandert naar \"{1}\"."
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"nl" "Stem voor de volgende map!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"nl" "Stemmen voor de volgende map is gestart."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"nl" "Map stemmen gestopt. De volgende map wordt {1}."
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"nl" "De huidige map is verlengd."
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"nl" "Verleng huidige map"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"nl" "Niet veranderen"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"nl" "Huidige map gaat verder! De Stem heeft gesproken! (Ontvangen {1}%% van de {2} stemmen)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"nl" "Volgende map verandert naar \"{1}\"."
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"no" "Stem for det neste kartet!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"no" "Avstemning for det neste kartet har startet."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"no" "Kart-avstemningen er avsluttet. Det neste kartet vil være {1}. (Mottok {2}%% av {3} stemmer)."
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"no" "Gjeldende kart videreføres! (Mottok {1}%% av {2} stemmer)."
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"no" "Forleng gjeldende kart."
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"no" "Ikke bytt!"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"no" "Gjeldende kart videreføres! Avstemningen har talt! (Mottok {1}%% av {2} stemmer)."
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"no" "Byttet neste kart til \"{1}\""
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"no" "Stem for det neste kartet!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"no" "Avstemning for det neste kartet har startet."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"no" "Kart-avstemningen er avsluttet. Det neste kartet vil være {1}. (Mottok {2}%% av {3} stemmer)."
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"no" "Gjeldende kart videreføres! (Mottok {1}%% av {2} stemmer)."
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"no" "Forleng gjeldende kart."
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"no" "Ikke bytt!"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"no" "Gjeldende kart videreføres! Avstemningen har talt! (Mottok {1}%% av {2} stemmer)."
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"no" "Byttet neste kart til \"{1}\""
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,92 +1,92 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"pl" "Głosuj na następną mapę!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"pl" "Rozpoczęto głosowanie na następną mapę."
|
||||
}
|
||||
|
||||
"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) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"pl" "Aktualna mapa została przedłużona. (Otrzymała {1} procent z {2} głosów)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"pl" "Przedłuż bieżącą mapę"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"pl" "Nie Zmieniaj"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"pl" "Aktualna mapa będzie kontynuowana! (Otrzymano {1} procent z {2} głosów)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"pl" "Zmieniono następną mapę na: \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"pl" "Wybierz ponownie!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"pl" "Otrzymane głosy"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"pl" "{1} (Niestandardowa)"
|
||||
}
|
||||
|
||||
"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!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"pl" "Ponowne głosowanie rozpocznie się za: {1}s\nTym razem się już zdecydujcie ;-)"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"pl" "UWAGA!!! Głosowanie na następną mapę rozpocznie się za: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"pl" "Zastanów się na której mapie chcesz grać..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"pl" "...wpisując !revote możesz zmienić swój głos."
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"pl" "Głosowanie w toku. Ponawiam za {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"pl" "{1} najlepsze mapy otrzymały tę samą ilość głosów.\nPotrzeba ponownego głosowania!"
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"pl" "Głosuj na następną mapę!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"pl" "Rozpoczęto głosowanie na następną mapę."
|
||||
}
|
||||
|
||||
"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) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"pl" "Aktualna mapa została przedłużona. (Otrzymała {1} procent z {2} głosów)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"pl" "Przedłuż bieżącą mapę"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"pl" "Nie Zmieniaj"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"pl" "Aktualna mapa będzie kontynuowana! (Otrzymano {1} procent z {2} głosów)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"pl" "Zmieniono następną mapę na: \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"pl" "Wybierz ponownie!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"pl" "Otrzymane głosy"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"pl" "{1} (Niestandardowa)"
|
||||
}
|
||||
|
||||
"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!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"pl" "Ponowne głosowanie rozpocznie się za: {1}s\nTym razem się już zdecydujcie ;-)"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"pl" "UWAGA!!! Głosowanie na następną mapę rozpocznie się za: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"pl" "Zastanów się na której mapie chcesz grać..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"pl" "...wpisując !revote możesz zmienić swój głos."
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"pl" "Głosowanie w toku. Ponawiam za {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"pl" "{1} najlepsze mapy otrzymały tę samą ilość głosów.\nPotrzeba ponownego głosowania!"
|
||||
}
|
||||
}
|
@ -1,98 +1,98 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"pt" "Vote para o próximo mapa!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"pt" "Votação para o próximo mapa começou."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"pt" "A votação para o próximo mapa terminou. O próximo mapa será {1}. (Recebidos {2}%% de {3} votos)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"pt" "A mapa atual foi estendido. (Recebidos {1}%% de {2} votos)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"pt" "Estender tempo do mapa atual"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"pt" "Não Mudar"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"pt" "O mapa atual continua! O Voto foi dado! (Recebidos {1}%% de {2} votos)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"pt" "Mudado o próximo mapa para \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"pt" "Segundo turno de votos para o próximo mapa!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"pt" "Número de votos"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"pt" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"pt" "Nenhum mapa recebeu mais que {1}%% de votos.\nEntão, qual mapa ganhará? Precisa de uma nova votação!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"pt" "Segundo turno começa em: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"pt" "Atenção! Votação para o próximo mapa começará em: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"pt" "Considere que mapa você quer jogar..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"pt" "...e não aperte os botões sem pensar ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"pt" "Votação em progresso. Tentando novamente em {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"pt" "Os {1} mapas tiveram o mesmo número de votos.\nUma nova votação é necessária!"
|
||||
}
|
||||
|
||||
"Custom Marked"
|
||||
{
|
||||
"pt" "*{1}"
|
||||
}
|
||||
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"pt" "Vote para o próximo mapa!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"pt" "Votação para o próximo mapa começou."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"pt" "A votação para o próximo mapa terminou. O próximo mapa será {1}. (Recebidos {2}%% de {3} votos)"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"pt" "A mapa atual foi estendido. (Recebidos {1}%% de {2} votos)"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"pt" "Estender tempo do mapa atual"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"pt" "Não Mudar"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"pt" "O mapa atual continua! O Voto foi dado! (Recebidos {1}%% de {2} votos)"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"pt" "Mudado o próximo mapa para \"{1}\"."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"pt" "Segundo turno de votos para o próximo mapa!"
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"pt" "Número de votos"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"pt" "{1} (Custom)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"pt" "Nenhum mapa recebeu mais que {1}%% de votos.\nEntão, qual mapa ganhará? Precisa de uma nova votação!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"pt" "Segundo turno começa em: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"pt" "Atenção! Votação para o próximo mapa começará em: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"pt" "Considere que mapa você quer jogar..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"pt" "...e não aperte os botões sem pensar ;-)"
|
||||
}
|
||||
|
||||
"Cannot Start Vote"
|
||||
{
|
||||
"pt" "Votação em progresso. Tentando novamente em {1}s."
|
||||
}
|
||||
|
||||
"Tie Vote"
|
||||
{
|
||||
"pt" "Os {1} mapas tiveram o mesmo número de votos.\nUma nova votação é necessária!"
|
||||
}
|
||||
|
||||
"Custom Marked"
|
||||
{
|
||||
"pt" "*{1}"
|
||||
}
|
||||
|
||||
}
|
@ -1,83 +1,83 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"ru" "Голосование за следующую карту."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"ru" "Повторное голосование за карту."
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"ru" "Голосование за следующую карту запущено."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"ru" "Голосование за карту завершено. Следующей картой будет: {1}. (Получено {2}%% из {3} голосов(а))"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"ru" "Текущая карта была продлена. (Получено {1}%% из {2} голосов(а))"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"ru" "Продлить текущую карту."
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"ru" "Не менять карту."
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"ru" "Текущая карта не сменится! (Получено {1}%% из {2} голосов(а))"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"ru" "Следующая карта изменена на \"{1}\"."
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"ru" "Количество голосов"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"ru" "{1} (Случайная)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"ru" "Ни одна карта не получила более, чем {1}%% голосов(а).\nИтак, какая карта будет следующей? Приготовьтесь к повторному голосованию!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"ru" "Повторное голосование начнётся через: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"ru" "Внимание! Голосование за следующую карту начнётся через: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"ru" "Выбери, какая карта будет следующей..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"ru" "...и не клацай кнопки,не подумав ;-)"
|
||||
}
|
||||
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"ru" "Голосование за следующую карту."
|
||||
}
|
||||
|
||||
"Runoff Vote Nextmap"
|
||||
{
|
||||
"ru" "Повторное голосование за карту."
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"ru" "Голосование за следующую карту запущено."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"ru" "Голосование за карту завершено. Следующей картой будет: {1}. (Получено {2}%% из {3} голосов(а))"
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"ru" "Текущая карта была продлена. (Получено {1}%% из {2} голосов(а))"
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"ru" "Продлить текущую карту."
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"ru" "Не менять карту."
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"ru" "Текущая карта не сменится! (Получено {1}%% из {2} голосов(а))"
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"ru" "Следующая карта изменена на \"{1}\"."
|
||||
}
|
||||
|
||||
"Number Of Votes"
|
||||
{
|
||||
"ru" "Количество голосов"
|
||||
}
|
||||
|
||||
"Custom"
|
||||
{
|
||||
"ru" "{1} (Случайная)"
|
||||
}
|
||||
|
||||
"Revote Is Needed"
|
||||
{
|
||||
"ru" "Ни одна карта не получила более, чем {1}%% голосов(а).\nИтак, какая карта будет следующей? Приготовьтесь к повторному голосованию!"
|
||||
}
|
||||
|
||||
"Revote Warning"
|
||||
{
|
||||
"ru" "Повторное голосование начнётся через: {1}s"
|
||||
}
|
||||
|
||||
"Vote Warning"
|
||||
{
|
||||
"ru" "Внимание! Голосование за следующую карту начнётся через: {1}s"
|
||||
}
|
||||
|
||||
"Line One"
|
||||
{
|
||||
"ru" "Выбери, какая карта будет следующей..."
|
||||
}
|
||||
|
||||
"Line Two"
|
||||
{
|
||||
"ru" "...и не клацай кнопки,не подумав ;-)"
|
||||
}
|
||||
|
||||
}
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"sv" "Rösta för nästa bana!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"sv" "Röstning om nästa bana har börjat."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"sv" "Röstningen om banan har avslutats. Nästa bana kommer att bli {1}. (Fick {2}%% av {3} röster) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"sv" "Den nuvarande banan har förlängts. (Fick {1}%% av {2} röster) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"sv" "Förläng nuvarande bana"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"sv" "Byt inte"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"sv" "Nuvarande banan fortsätter! Röstningen har talat! (Fick {1}%% av {2} röster) "
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"sv" "Bytta nästa bana till \"{1}\". "
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"sv" "Rösta för nästa bana!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"sv" "Röstning om nästa bana har börjat."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"sv" "Röstningen om banan har avslutats. Nästa bana kommer att bli {1}. (Fick {2}%% av {3} röster) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"sv" "Den nuvarande banan har förlängts. (Fick {1}%% av {2} röster) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"sv" "Förläng nuvarande bana"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"sv" "Byt inte"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"sv" "Nuvarande banan fortsätter! Röstningen har talat! (Fick {1}%% av {2} röster) "
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"sv" "Bytta nästa bana till \"{1}\". "
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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"
|
@ -1,43 +1,43 @@
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"tr" "Sonraki harita için oy ver!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"tr" "Sonraki harita için oylama başladı."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"tr" "Harita oylaması sona erdi. Sıradaki harita {1} olacak. ({3} oyun %%{2}'i alındı) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"tr" "Geçerli harita uzatıldı. ({2} oyun %%{1}'i alındı) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"tr" "Geçerli Haritayı Uzat"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"tr" "Değiştirme"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"tr" "Geçerli harita devam ediyor! Oylama konuştu! ({2} oyun %%{1}'i alındı) "
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"tr" "Sıradaki harita \"{1}\" olarak değiştirildi."
|
||||
}
|
||||
|
||||
}
|
||||
"Phrases"
|
||||
{
|
||||
"Vote Nextmap"
|
||||
{
|
||||
"tr" "Sonraki harita için oy ver!"
|
||||
}
|
||||
|
||||
"Nextmap Voting Started"
|
||||
{
|
||||
"tr" "Sonraki harita için oylama başladı."
|
||||
}
|
||||
|
||||
"Nextmap Voting Finished"
|
||||
{
|
||||
"tr" "Harita oylaması sona erdi. Sıradaki harita {1} olacak. ({3} oyun %%{2}'i alındı) "
|
||||
}
|
||||
|
||||
"Current Map Extended"
|
||||
{
|
||||
"tr" "Geçerli harita uzatıldı. ({2} oyun %%{1}'i alındı) "
|
||||
}
|
||||
|
||||
"Extend Map"
|
||||
{
|
||||
"tr" "Geçerli Haritayı Uzat"
|
||||
}
|
||||
|
||||
"Dont Change"
|
||||
{
|
||||
"tr" "Değiştirme"
|
||||
}
|
||||
|
||||
"Current Map Stays"
|
||||
{
|
||||
"tr" "Geçerli harita devam ediyor! Oylama konuştu! ({2} oyun %%{1}'i alındı) "
|
||||
}
|
||||
|
||||
"Changed Next Map"
|
||||
{
|
||||
"tr" "Sıradaki harita \"{1}\" olarak değiştirildi."
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user