added new plugins: KnifeAlert, immunityreserveslots (entWatch support), sourcebans+sourcecomms (fixed)

added sm_forceinputplayer to ForceInputs
added ZE_FFVII_Mako_Reactor_V6_B08 savelevel config
fixed runtime error in voiceannounce_ex and ExtraCommands
This commit is contained in:
BotoX 2016-03-05 00:34:03 +01:00
parent d8ba114de3
commit ef2c81e2d6
25 changed files with 9484 additions and 30 deletions

View File

@ -151,13 +151,13 @@ public Event_WeaponFire(Handle:hEvent, String:name[], bool:dontBroadcast)
{
new toAdd = 1;
new String:weaponClassname[128];
GetEntityClassname(weapon, weaponClassname, 128);
GetEntityClassname(weapon, weaponClassname, sizeof(weaponClassname));
if(StrEqual(weaponClassname, "weapon_glock", true) || StrEqual(weaponClassname, "weapon_famas", true))
{
if(GetEntProp(weapon, Prop_Data, "m_bBurstMode", 4, 0))
if(GetEntProp(weapon, Prop_Send, "m_bBurstMode"))
{
switch (GetEntProp(weapon, Prop_Send, "m_iClip1", 4, 0))
switch (GetEntProp(weapon, Prop_Send, "m_iClip1"))
{
case 1:
{
@ -243,7 +243,7 @@ public Action:Command_Kevlar(client, args)
new amount = 0;
decl String:arg2[20];
GetCmdArg(2, arg2, sizeof(arg2));
if(StringToIntEx(arg2, amount) == 0 || amount <= 0)
if(StringToIntEx(arg2, amount) == 0 || amount < 0)
{
ReplyToCommand(client, "[SM] Invalid Value");
return Plugin_Handled;

View File

@ -14,9 +14,9 @@
public Plugin:myinfo =
{
name = "ForceInput",
author = "zaCade",
author = "zaCade + BotoX",
description = "Allows admins to force inputs on entities. (ent_fire)",
version = "1.2",
version = "1.3",
url = ""
};
@ -26,6 +26,52 @@ public Plugin:myinfo =
public OnPluginStart()
{
RegAdminCmd("sm_forceinput", Command_ForceInput, ADMFLAG_ROOT);
RegAdminCmd("sm_forceinputplayer", Command_ForceInputPlayer, ADMFLAG_ROOT);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action:Command_ForceInputPlayer(client, args)
{
if (GetCmdArgs() < 2)
{
ReplyToCommand(client, "[SM] Usage: sm_forceinputplayer <target> <input> [parameter]");
return Plugin_Handled;
}
new String:sArguments[3][256];
GetCmdArg(1, sArguments[0], sizeof(sArguments[]));
GetCmdArg(2, sArguments[1], sizeof(sArguments[]));
GetCmdArg(3, sArguments[2], sizeof(sArguments[]));
decl String:target_name[MAX_TARGET_LENGTH];
decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml;
if((target_count = ProcessTargetString(
sArguments[0],
client,
target_list,
MAXPLAYERS,
COMMAND_FILTER_ALIVE,
target_name,
sizeof(target_name),
tn_is_ml)) <= 0)
{
ReplyToTargetError(client, target_count);
return Plugin_Handled;
}
for(new i = 0; i < target_count; i++)
{
if (sArguments[2][0])
SetVariantString(sArguments[2]);
AcceptEntityInput(target_list[i], sArguments[1], target_list[i], target_list[i]);
ReplyToCommand(client, "[SM] Input succesfull.");
}
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
@ -46,7 +92,7 @@ public Action:Command_ForceInput(client, args)
if (StrEqual(sArguments[0], "!self"))
{
if (strlen(sArguments[2]))
if (sArguments[2][0])
SetVariantString(sArguments[2]);
AcceptEntityInput(client, sArguments[1], client, client);
@ -66,7 +112,7 @@ public Action:Command_ForceInput(client, args)
{
if (IsValidEntity(entity) || IsValidEdict(entity))
{
if (strlen(sArguments[2]))
if (sArguments[2][0])
SetVariantString(sArguments[2]);
AcceptEntityInput(entity, sArguments[1], client, client);
@ -88,7 +134,7 @@ public Action:Command_ForceInput(client, args)
if (StrEqual(sClassname, sArguments[0], false) || StrEqual(sTargetname, sArguments[0], false))
{
if (strlen(sArguments[2]))
if (sArguments[2][0])
SetVariantString(sArguments[2]);
AcceptEntityInput(entity, sArguments[1], client, client);

View File

@ -0,0 +1,117 @@
#pragma semicolon 1
#include <sourcemod>
#include "morecolors.inc"
#pragma newdecls required
Handle g_hCVar_NotificationTime = INVALID_HANDLE;
char g_sAttackerSID[MAXPLAYERS + 1][32];
int g_iNotificationTime[MAXPLAYERS + 1];
public Plugin myinfo =
{
name = "Knife Notifications",
author = "Obus + BotoX",
description = "Notify administrators when zombies have been knifed by humans.",
version = "2.1",
url = ""
};
public void OnPluginStart()
{
g_hCVar_NotificationTime = CreateConVar("sm_knifenotifytime", "5", "Amount of time to pass before a knifed zombie is considered \"not knifed\" anymore.", 0, true, 0.0, true, 60.0);
if(!HookEventEx("player_hurt", Event_PlayerHurt, EventHookMode_Pre))
SetFailState("[Knife-Notifications] Failed to hook \"player_hurt\" event.");
}
public int GetClientFromSteamID(const char[] auth)
{
char clientAuth[32];
for(int client = 1; client <= MaxClients; client++)
{
if(!IsClientAuthorized(client))
continue;
GetClientAuthId(client, AuthId_Steam2, clientAuth, sizeof(clientAuth));
if(StrEqual(auth, clientAuth))
return client;
}
return -1;
}
public Action Event_PlayerHurt(Handle hEvent, const char[] name, bool dontBroadcast)
{
int victim;
int attacker;
char sWepName[64];
char sAtkSID[32];
char sVictSID[32];
GetEventString(hEvent, "weapon", sWepName, sizeof(sWepName));
if((victim = GetClientOfUserId(GetEventInt(hEvent, "userid"))) == 0)
return;
if((attacker = GetClientOfUserId(GetEventInt(hEvent, "attacker"))) == 0)
return;
if(!IsClientInGame(victim) || !IsPlayerAlive(victim))
return;
if(!IsClientInGame(attacker) || !IsPlayerAlive(attacker))
return;
if(victim != attacker && GetClientTeam(victim) == 2 && GetClientTeam(attacker) == 3)
{
if(StrEqual(sWepName, "knife"))
{
int damage = GetEventInt(hEvent, "dmg_health");
if(damage < 35)
return;
GetClientAuthId(attacker, AuthId_Steam2, sAtkSID, sizeof(sAtkSID));
GetClientAuthId(attacker, AuthId_Steam2, g_sAttackerSID[victim], sizeof(g_sAttackerSID[]));
GetClientAuthId(victim, AuthId_Steam2, sVictSID, sizeof(sVictSID));
LogMessage("%L knifed %L", attacker, victim);
g_iNotificationTime[victim] = (GetTime() + GetConVarInt(g_hCVar_NotificationTime));
for(int i = 1; i <= MaxClients; i++)
{
if(IsClientConnected(i) && IsClientInGame(i) && (IsClientSourceTV(i) || GetAdminFlag(GetUserAdmin(i), Admin_Generic)))
CPrintToChat(i, "{green}[SM] {blue}%N {default}knifed {red}%N", attacker, victim);
}
}
}
else if(victim != attacker && GetClientTeam(attacker) == 2 && GetClientTeam(victim) == 3)
{
int pOldKnifer;
pOldKnifer = GetClientFromSteamID(g_sAttackerSID[attacker]);
if(g_iNotificationTime[attacker] > GetTime() && (victim != pOldKnifer))
{
char sAtkAttackerName[MAX_NAME_LENGTH];
GetClientAuthId(attacker, AuthId_Steam2, sAtkSID, sizeof(sAtkSID));
if(pOldKnifer != -1)
{
GetClientName(pOldKnifer, sAtkAttackerName, sizeof(sAtkAttackerName));
LogMessage("%L killed %L (Recently knifed by %L)", attacker, victim, pOldKnifer);
}
else
LogMessage("%L killed %L (Recently knifed by a disconnected player [%s])", attacker, victim, g_sAttackerSID[attacker]);
for(int i = 1; i <= MaxClients; i++)
{
if(IsClientConnected(i) && IsClientInGame(i) && (IsClientSourceTV(i) || GetAdminFlag(GetUserAdmin(i), Admin_Generic)))
CPrintToChat(i, "{green}[SM] {red}%N {green}(%s){default} killed {blue}%N{default} - knifed by {blue}%s {green}(%s)",
attacker, sAtkSID, victim, (pOldKnifer != -1) ? sAtkAttackerName : "a disconnected player", g_sAttackerSID[attacker]);
}
}
}
}

View File

@ -0,0 +1 @@
../../../includes/morecolors.inc

View File

@ -13,7 +13,7 @@
"restore"
{
"AddOutput" "OnUser1 leveling_counter,Add,1,0,-1"
"m_iFrags" "100"
"m_iFrags" "10"
}
}
"2"
@ -29,7 +29,7 @@
"restore"
{
"AddOutput" "OnUser1 leveling_counter,Add,2,0,-1"
"m_iFrags" "200"
"m_iFrags" "20"
}
}
"3"
@ -45,23 +45,7 @@
"restore"
{
"AddOutput" "OnUser1 leveling_counter,Add,3,0,-1"
"m_iFrags" "300"
}
}
"4"
{
"name" "Level 4"
"match"
{
"math"
{
"m_OnUser1" "leveling_counter,Add,4"
}
}
"restore"
{
"AddOutput" "OnUser1 leveling_counter,Add,4,0,-1"
"m_iFrags" "400"
"m_iFrags" "30"
}
}
}

View File

@ -0,0 +1,92 @@
"levels"
{
"0"
{
"name" "Level 0"
"restore"
{
"m_iName" ""
"m_iFrags" "0"
}
}
"1"
{
"name" "Level 1"
"match"
{
"props"
{
"m_iName" "1"
}
}
"restore"
{
"m_iName" "1"
"m_iFrags" "100"
}
}
"2"
{
"name" "Level 2"
"match"
{
"props"
{
"m_iName" "2"
}
}
"restore"
{
"m_iName" "2"
"m_iFrags" "200"
}
}
"3"
{
"name" "Level 3"
"match"
{
"props"
{
"m_iName" "3"
}
}
"restore"
{
"m_iName" "3"
"m_iFrags" "300"
}
}
"4"
{
"name" "Level 4"
"match"
{
"props"
{
"m_iName" "4"
}
}
"restore"
{
"m_iName" "4"
"m_iFrags" "400"
}
}
"5"
{
"name" "Level 5"
"match"
{
"props"
{
"m_iName" "5"
}
}
"restore"
{
"m_iName" "5"
"m_iFrags" "500"
}
}
}

View File

@ -0,0 +1,113 @@
// This file was auto-generated by SourceMod (v1.4.7)
// ConVars for plugin "immunityreserveslots_connect.smx"
// Allow direct connecting reserve slot users to connect without having to type in the password on a password protected server with the Connect extension (0 - disable, 1 - enable, 2 - as with 1 but allow all connecting clients to connect).
// -
// Default: "0"
// Minimum: "0.000000"
// Maximum: "2.000000"
sm_irs_autopassword "0"
// The immunity value to give to donators, if required for immunity checks within IRS.
// -
// Default: "0"
// Minimum: "0.000000"
// Maximum: "99.000000"
sm_irs_donator_immunity "0"
// When enabled along with the donators plugin, donaotrs will be allowed to connect (0 - disable, 1 - allow donators to connect).
// -
// Default: "0"
// Minimum: "0.000000"
// Maximum: "1.000000"
sm_irs_donator_support "0"
// The maximum amount of players that can connect to the server and kick a low immunity reserve slot player (0 - no limit, more than 0 to set the max limit).
// -
// Default: "0"
// Minimum: "0.000000"
sm_irs_highimmunitylimit "0"
// This value and over are players who are considered to have high immunity (0 - disable, more than 0 to set the high immunity value).
// -
// Default: "0"
// Minimum: "0.000000"
sm_irs_highimmunityvalue "0"
// Enable immunity check (0 - disable, 1 - immunity check if server is full of reserves, 2 - as with 1 but also allow players with high enough immunity and no reserve flag to stay connected).
// -
// Default: "1"
// Minimum: "0.000000"
// Maximum: "2.000000"
sm_irs_immunity "1"
// This tries to kick people in such a way to prevent autobalance (0 - disable, 1 - enable).
// -
// Default: "0"
// Minimum: "0.000000"
// Maximum: "1.000000"
sm_irs_keepbalance "0"
// Path to kick list file ("default" - uses a file in the sourcemod config folder called irs_kicklist.ini, anything else uses what you enter e.g. "cfg/kicklist.cfg").
// -
// Default: "default"
sm_irs_kicklist_file "default"
// Enable kick list mode (0 - disable, normal reserve slot operation, 1 - only use a kick list to kick specific clients, 2 - as with 1 but allow any connecting client to kick people from the server).
// -
// Default: "0"
// Minimum: "0.000000"
// Maximum: "2.000000"
sm_irs_kicklist_mode "0"
// Message to display when a client is kicked for a normal reserve slot ("default" - uses translation phrase, anything else uses what you enter).
// -
// Default: "default"
sm_irs_kickreason "default"
// Message to display when a client is kicked for a reserve slot based on immunity ("default" - uses translation phrase, anything else uses what you enter).
// -
// Default: "default"
sm_irs_kickreason_immunity "default"
// The delay, in seconds, to kick spectators (0 - instant, any other value gives spectators a grace of xx seconds until they can be kicked).
// -
// Default: "0"
// Minimum: "0.000000"
sm_irs_kickspecdelay "0"
// When enabled spectators are always kicked first before anyone else (0 - disable, all players are taken into account for kicking, 1 - enable).
// -
// Default: "1"
// Minimum: "0.000000"
// Maximum: "1.000000"
sm_irs_kickspecfirst "1"
// Who to kick when a valid player is found (0 - random, 1 - highest ping, 2 - highest time, 3 - lowest time).
// -
// Default: "0"
// Minimum: "0.000000"
// Maximum: "3.000000"
sm_irs_kicktype "0"
// Enable logging (0 - disable, 1 - enable highly verbose logs, 2 - only log the disconnected and connecting users in regular SM logs).
// -
// Default: "0"
// Minimum: "0.000000"
// Maximum: "2.000000"
sm_irs_log "0"
// Message to display when a client gets rejected for a reserve slot when they have reserve rights with the Connect extension ("default" - uses translation phrase, anything else uses what you enter).
// -
// Default: "default"
sm_irs_rejectreason "default"
// Enable reject reason with the Connect extension (0 - disable, 1 - enable).
// -
// Default: "0"
// Minimum: "0.000000"
// Maximum: "1.000000"
sm_irs_rejectreason_enable "0"

View File

@ -0,0 +1,5 @@
// Just enter someone's steamid and they're added to the system
// e.g. (without being commented out, obviously)
// STEAM_0:1:12345678987654321
// STEAM_0:1:98765432123456789
// etc.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
#if defined _connect_included
#endinput
#endif
#define _connect_included
forward bool:OnClientPreConnectEx(const String:name[], String:password[255], const String:ip[], const String:steamID[], String:rejectReason[255]);
public Extension:__ext_Connect =
{
name = "Connect",
file = "connect.ext",
#if defined AUTOLOAD_EXTENSIONS
autoload = 1,
#else
autoload = 0,
#endif
#if defined REQUIRE_EXTENSIONS
required = 1,
#else
required = 0,
#endif
}

View File

@ -0,0 +1,106 @@
#if defined _donator_included_
#endinput
#endif
#define _donator_included_
#define DONATOR_API_VERSON 1.1
functag DonatorMenuCallback DonatorMenu:public(client);
/**
* Register a menu item.
*
* @param name Name of the menu item.
* @param func Callback for menu items.
* @return Menu item ID.
*/
native Donator_RegisterMenuItem(const String:name[], DonatorMenuCallback:callback);
/**
* Unregister a menu item.
*
* @param name Name of the menu item.
* @param func Callback for menu items.
* @return Bool
*/
native Donator_UnregisterMenuItem(iItemId);
/**
* Get a clients donator level, -1 if invalid
*
* @param iClient Client
* @return Donator level
*/
native GetDonatorLevel(iClient);
/**
* Sets a clients donator level
*
* @param iClient Client
* @param iLevel Donator level
* @return Nothing
*/
native SetDonatorLevel(iClient, iLevel);
/**
* Returns True if a client is a donator, -1 if invalid
*
* @param iClient Client
* @return bool
*/
native bool:IsPlayerDonator(iClient);
/**
* Returns True if a steamid is a donator, -1 if invalid
*
* @param iClient Client
* @return bool
*/
native bool:FindDonatorBySteamId(const String:szSteamId[]);
/**
* Returns a donators connect message
* @param iClient Client
* @return Clients connect message
*/
native GetDonatorMessage(iClient, const String:szMessage[], iLength);
/**
* Sets a donators connect message
*
* @param iClient Client
* @param szMessage Message to show on donator connect
* @return Nothing
*/
native SetDonatorMessage(iClient, const String:szMessage[]);
/*
native SaveToDatabase(const String:szColumnName[], any:data);
native GetFromDatabase(const String:szColumnName[], any:data);
*/
/**
* Forwards when a donator connects.
* Note: This is before OnPostDonatorCheck - Cookies are not loaded here
*
* @param iClient Client
* @noreturn
*/
forward OnDonatorConnect(iClient);
/**
* Forwards after OnPostAdminCheck for everyone.
*
* @param iClient Client
* @noreturn
*/
forward OnPostDonatorCheck(iClient);
/**
* Forwards after the donators has been reladed with sm_reloaddonators.
*
* @param iClient Client
* @noreturn
*/
forward OnDonatorsChanged();

View File

@ -0,0 +1 @@
../../../includes/entWatch.inc

150
includes/entWatch.inc Normal file
View File

@ -0,0 +1,150 @@
#if defined _entWatch_include
#endinput
#endif
#define _entWatch_include
/**
* Checks if a client is currently banned, if an integer variable is referenced the time of unban will be assigned to it.
*
* @param client Client index to check for ban
* @param iTimeStamp Pass an integer variable by reference and it will contain the UNIX timestamp when the player will be unbanned
* @return True if user is banned, false otherwise
*
* On error/errors: Invalid client index/client is not in game or client cookies are not yet loaded
*/
native bool:entWatch_IsClientBanned(client, &iTimeStamp);
/**
* Bans a client from using special items.
*
* @param client Client index to ban
* @param IsTemporary If the ban should be temporary pass true here
* @param iLength Length of ban in minutes, pass 0 here for a permanent ban
* @return True on success, false otherwsie
*
* On error/errors: Invalid client index/client is not in game or client cookies are not yet loaded
*/
native bool:entWatch_BanClient(client, bool:bIsTemporary=false, iLength=0);
/**
* Unbans a previously ebanned Client.
*
* @param client Client index to unban
* @return True on success, false otherwsie
*
* On error/errors: Invalid client index/client is not in game or client cookies are not yet loaded
*/
native bool:entWatch_UnbanClient(client);
/**
* Checks if an entity is a special item.
*
* @param entity Entity index to check
* @return True if entity is a special item, false otherwsie
*/
native bool:entWatch_IsSpecialItem(entity);
/**
* Checks if a client has a special item.
*
* @param client Client index to check
* @return True if client has a special item, false otherwsie
*/
native bool:entWatch_HasSpecialItem(client);
/**
* Called when a client is e-banned by any means
*
* @param admin Admin index that issued the ban
* @param iLength Length of the ban in UNIX time
* @param client Client index that was banned
*
* @return None
*/
forward entWatch_OnClientBanned(admin, iLenght, client);
/**
* Called when a client is e-unbanned by any means
*
* @param admin Admin index that removed the ban
* @param client Client index that was unbanned
* @return None
*/
forward entWatch_OnClientUnbanned(admin, client);
//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetTargetName(entity, String:buffer[], size)
{
return GetEntPropString(entity, Prop_Data, "m_iName", buffer, size);
}
//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetParentName(entity, String:buffer[], size)
{
return GetEntPropString(entity, Prop_Data, "m_iParent", buffer, size);
}
//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetHammerID(entity)
{
return GetEntProp(entity, Prop_Data, "m_iHammerID");
}
//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetClassName(entity, String:buffer[], size)
{
GetEntPropString(entity, Prop_Data, "m_iClassname", buffer, size);
if (buffer[0] == '\0') {
return false;
}
return true;
}
//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetEntityFromHammerID(hammerID)
{
for (new i = 0; i < 4096; i++)
{
if (IsValidEntity(i) && Entity_GetHammerID(i) == hammerID)
{
if (IsValidEntity(i))
return i;
}
}
return -1;
}
public SharedPlugin:__pl_entWatch =
{
name = "entWatch",
file = "entWatch.smx",
#if defined REQUIRE_PLUGIN
required = 1
#else
required = 0
#endif
};
#if !defined REQUIRE_PLUGIN
public __pl_entWatch_SetNTVOptional()
{
MarkNativeAsOptional("entWatch_IsClientBanned");
MarkNativeAsOptional("entWatch_BanClient");
MarkNativeAsOptional("entWatch_UnbanClient");
MarkNativeAsOptional("entWatch_IsSpecialItem");
MarkNativeAsOptional("entWatch_HasSpecialItem");
}
#endif

View File

@ -0,0 +1,84 @@
/**
* sourcebans.cfg
*
* This file contains settings for the SourceBans Source Server Plugin
* @author SteamFriends Development Team
* @version 0.0.0.$Rev: 74 $
* @copyright SteamFriends (www.steamfriends.com)
* @package SourceBans
*/
"SourceBans"
{
"Config"
{
// Website address to tell where the player to go for unban, etc
"Website" "http://www.yourwebsite.net/"
// Allow or disallow admins access to addban command
"Addban" "1"
// Allow or disallow admins access to unban command
"Unban" "1"
// The Tableprefix you set while installing the webpanel. (default: "sb")
"DatabasePrefix" "sb"
// How many seconds to wait before retrying when a players ban fails to be checked. Min = 15.0 Max = 60.0
"RetryTime" "45.0"
// How often should we process the failed ban queue in minutes
"ProcessQueueTime" "5"
// Should the plugin automaticaly add the server to sourcebans
// (servers without -ip being set on startup need this set to 0)
"AutoAddServer" "0"
// Enable backing up config files after getting admins from database (1 = enabled, 0 = disabled)
"BackupConfigs" "1"
// Enable admin part of the plugin (1 = enabled, 0 = disabled)
"EnableAdmins" "1"
// Require the admin to login once into website
"RequireSiteLogin" "0"
// This is the ID of this server (Check in the admin panel -> servers to find the ID of this server)
"ServerID" "-1"
}
/*
* Generic menu options for if a reason isn't supplied in a ban
* Without a supplied reason the ban will never be written to the database
*/
"BanReasons"
{
"Hacking" "Hacking"
"Exploit" "General Exploit of Game/Map/Server"
"TK" "Team Killing"
"TF" "Team Flashing"
"CommSpam" "Spamming Mic/Chat"
"BadSpray" "Inappropriate Spray"
"BadLang" "Inappropriate Language"
"BadName" "Inappropriate Name"
"IgnoreAdmin" "Ignoring Admins"
"Stacking" "Team Stacking"
"Own Reason" "Own Reason"
}
/*
* Submenu options for when "Hacking" is selected
* If "Hacking" is removed from the menu above this will not be accessable
*/
"HackingReasons"
{
"Aimbot" "Aimbot"
"Antirecoil" "Anti Recoil"
"Wallhack" "Wallhack"
"Spinhack" "Spinhack"
"Speedhack" "Speedhack"
"Multi-Hack" "Multi-Hack"
"No Smoke" "No Smoke"
"No Flash" "No Flash"
}
}

View File

@ -0,0 +1,66 @@
/**
* sourcecomms.cfg
*
* This file contains settings for the SourceComms Plugin
*/
"SourceComms"
{
"Config"
{
"DefaultTime" "-1" // default time in minutes. if < 0 -> blocking for session. Permanent (0) - is not allowed!
"DisableUnblockImmunityCheck" "0" // 0, 1. If 1, player can be ungagged only by issuer admin, console or admin with special flag
// Also, If 0 player maybe unblocked by Admin with higher immunity level then issuer admin.
// Default value is 0
"ConsoleImmunity" "100" // Immunity Level of server console. If not specified - 0.
"MaxLength" "0" // Max allowed punishment length (in minutes) for admins without ADMFLAG_CUSTOM2 (p).
// 0 disables restriction. Any value > 0 restricts permanent punishment.
"OnlyWhiteListServers" "0" // Set this option to 1 to applying on players punishments only from servers listed in WhiteList and this server.
// 0 applies on players punishments from any server.
}
"CommsReasons"
{
//Generic menu options for if a reason isn't supplied in a block
//-------------------------------------------------------------//
// "Reason to store in DB" "Reason to display in menu" //
//-------------------------------------------------------------//
"Obscene language" "Obscene language"
"Insult players" "Insult players"
"Admin disrespect" "Admin disrespect"
"Inappropriate Language" "Inappropriate Language"
"Spam in chat/voice" "Spam"
"Trading" "Trading"
"Other" "Other"
"Advertisement" "Advertisement"
"Played music in voice" "Music in voice"
}
"CommsTimes"
{
// Times to show in duration menu //
//-----------------------------------------------//
// "Time in minutes" "Time to display in menu" //
//-----------------------------------------------//
"-1" "Session" // If time < 0 -> blocking comms for player session
"30" "30 minutes"
"60" "60 minutes"
"120" "2 hours"
"360" "6 hours"
"720" "12 hours"
"1440" "24 hours"
"2880" "2 days"
"10080" "7 days"
"20160" "2 weeks"
"0" "Permanent"
}
"ServersWhiteList"
{
//-----------------------------------------//
// "id" "ServerID from sourcebans.cfg" //
//-----------------------------------------//
"id" "0" // Web Punishments (from sourcebans web pages)
// "id" "3" // for example: uncommenting this line will add server with ServerID 3 to white list.
}
}

View File

@ -0,0 +1,62 @@
// *************************************************************************
// This file is part of SourceBans++.
//
// Copyright (C) 2014-2016 Sarabveer Singh <me@sarabveer.me>
//
// SourceBans++ is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, per version 3 of the License.
//
// SourceBans++ 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 SourceBans++. If not, see <http://www.gnu.org/licenses/>.
//
// This file incorporates work covered by the following copyright(s):
//
// SourceBans 1.4.11
// Copyright (C) 2007-2015 SourceBans Team - Part of GameConnect
// Licensed under GNU GPL version 3, or later.
// Page: <http://www.sourcebans.net/> - <https://github.com/GameConnect/sourcebansv1>
//
// *************************************************************************
#if defined _sourcebans_included
#endinput
#endif
#define _sourcebans_included
public SharedPlugin:__pl_sourcebans =
{
name = "SourceBans",
file = "sourcebans.smx",
#if defined REQUIRE_PLUGIN
required = 1
#else
required = 0
#endif
};
#if !defined REQUIRE_PLUGIN
public __pl_sourcebans_SetNTVOptional()
{
MarkNativeAsOptional("SBBanPlayer");
}
#endif
/*********************************************************
* Ban Player from server
*
* @param client The client index of the admin who is banning the client
* @param target The client index of the player to ban
* @param time The time to ban the player for (in minutes, 0 = permanent)
* @param reason The reason to ban the player from the server
* @noreturn
*********************************************************/
native SBBanPlayer(client, target, time, String:reason[]);
//Yarr!

View File

@ -0,0 +1,103 @@
// *************************************************************************
// This file is part of SourceBans++.
//
// Copyright (C) 2014-2016 Sarabveer Singh <me@sarabveer.me>
//
// SourceBans++ is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, per version 3 of the License.
//
// SourceBans++ 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 SourceBans++. If not, see <http://www.gnu.org/licenses/>.
//
// This file incorporates work covered by the following copyright(s):
//
// SourceComms 0.9.266
// Copyright (C) 2013-2014 Alexandr Duplishchev
// Licensed under GNU GPL version 3, or later.
// Page: <https://forums.alliedmods.net/showthread.php?p=1883705> - <https://github.com/d-ai/SourceComms>
//
// *************************************************************************
#if defined _sourcecomms_included
#endinput
#endif
#define _sourcecomms_included
/* Punishments types */
enum bType {
bNot = 0, // Player chat or voice is not blocked
bSess, // ... blocked for player session (until reconnect)
bTime, // ... blocked for some time
bPerm // ... permanently blocked
}
/**
* Sets a client's mute state.
*
* @param client Client index.
* @param muteState True to mute client, false to unmute.
* -------------------------------------Parameters below this line are used only for muteState=true-------------------------------------
* ----------------------------------for muteState=false these parameters are ignored (saveToDB=false)----------------------------------
* @param muteLength Length of punishment in minutes. Value < 0 muting client for session. Permanent (0) is not allowed at this time.
* @param saveToDB If true, punishment will be saved in database.
* @param reason Reason for punishment.
* @return True if this caused a change in mute state, false otherwise.
*/
native bool:SourceComms_SetClientMute(client, bool:muteState, muteLength = -1, bool:saveToDB = false, const String:reason[] = "Muted through natives");
/**
* Sets a client's gag state.
*
* @param client Client index.
* @param gagState True to gag client, false to ungag.
* --------------------------------------Parameters below this line are used only for gagState=true--------------------------------------
* -----------------------------------for gagState=false these parameters are ignored (saveToDB=false)-----------------------------------
* @param gagLength Length of punishment in minutes. Value < 0 gagging client for session. Permanent (0) is not allowed at this time.
* @param saveToDB If true, punishment will be saved in database.
* @param reason Reason for punishment.
* @return True if this caused a change in gag state, false otherwise.
*/
native bool:SourceComms_SetClientGag(client, bool:gagState, gagLength = -1, bool:saveToDB = false, const String:reason[] = "Gagged through natives");
/**
* Returns the client's mute type
*
* @param client The client index of the player to check mute status
* @return The client's current mute type index (see enum bType in the begin).
*/
native bType:SourceComms_GetClientMuteType(client);
/**
* Returns the client's gag type
*
* @param client The client index of the player to check gag status
* @return The client's current gag type index (see enum bType in the begin).
*/
native bType:SourceComms_GetClientGagType(client);
public SharedPlugin:__pl_sourcecomms =
{
name = "sourcecomms",
file = "sourcecomms.smx",
#if defined REQUIRE_PLUGIN
required = 1
#else
required = 0
#endif
};
public __pl_sourcecomms_SetNTVOptional()
{
MarkNativeAsOptional("SourceComms_SetClientMute");
MarkNativeAsOptional("SourceComms_SetClientGag");
MarkNativeAsOptional("SourceComms_GetClientMuteType");
MarkNativeAsOptional("SourceComms_GetClientGagType");
}

View File

@ -0,0 +1,383 @@
// *************************************************************************
// This file is part of SourceBans++.
//
// Copyright (C) 2014-2016 Sarabveer Singh <me@sarabveer.me>
//
// SourceBans++ is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, per version 3 of the License.
//
// SourceBans++ 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 SourceBans++. If not, see <http://www.gnu.org/licenses/>.
//
// This file incorporates work covered by the following copyright(s):
//
// SourceBans Checker 1.0.2
// Copyright (C) 2010-2013 Nicholas Hastings
// Licensed under GNU GPL version 3, or later.
// Page: <https://forums.alliedmods.net/showthread.php?p=1288490>
//
// *************************************************************************
#include <sourcemod>
#define VERSION "(SB++) 1.5.5"
#define LISTBANS_USAGE "sm_listsbbans <#userid|name> - Lists a user's prior bans from Sourcebans"
#define INVALID_TARGET -1
new String:g_DatabasePrefix[10] = "sb";
new Handle:g_ConfigParser;
new Handle:g_DB;
ConVar ShortMessage;
public Plugin:myinfo =
{
name = "SourceBans Checker",
author = "psychonic, Ca$h Munny, Sarabveer(VEER™)",
description = "Notifies admins of prior bans from Sourcebans upon player connect.",
version = VERSION,
url = "http://www.nicholashastings.com"
};
public OnPluginStart()
{
LoadTranslations("common.phrases");
CreateConVar("sbchecker_version", VERSION, "", FCVAR_NOTIFY);
ShortMessage = CreateConVar("sb_short_message", "0", "Use shorter message for displying prev bans", _, true, 0.0, true, 1.0);
RegAdminCmd("sm_listbans", OnListSourceBansCmd, ADMFLAG_BAN, LISTBANS_USAGE);
RegAdminCmd("sb_reload", OnReloadCmd, ADMFLAG_RCON, "Reload sourcebans config and ban reason menu options");
SQL_TConnect(OnDatabaseConnected, "sourcebans");
}
public OnMapStart()
{
ReadConfig();
}
public Action:OnReloadCmd(client, args)
{
ReadConfig();
return Plugin_Handled;
}
public OnDatabaseConnected(Handle:owner, Handle:hndl, const String:error[], any:data)
{
if (hndl == INVALID_HANDLE)
SetFailState("Failed to connect to SourceBans DB, %s", error);
g_DB = hndl;
}
public OnClientAuthorized(client, const String:auth[])
{
if (g_DB == INVALID_HANDLE)
return;
/* Do not check bots nor check player with lan steamid. */
if (auth[0] == 'B' || auth[9] == 'L')
return;
decl String:query[512], String:ip[30];
GetClientIP(client, ip, sizeof(ip));
FormatEx(query, sizeof(query), "SELECT COUNT(bid) FROM %s_bans WHERE ((type = 0 AND authid REGEXP '^STEAM_[0-9]:%s$') OR (type = 1 AND ip = '%s')) AND ((length > '0' AND ends > UNIX_TIMESTAMP()) OR RemoveType IS NOT NULL)", g_DatabasePrefix, auth[8], ip);
SQL_TQuery(g_DB, OnConnectBanCheck, query, GetClientUserId(client), DBPrio_Low);
}
public OnConnectBanCheck(Handle:owner, Handle:hndl, const String:error[], any:userid)
{
new client = GetClientOfUserId(userid);
if (!client || hndl == INVALID_HANDLE || !SQL_FetchRow(hndl))
return;
new bancount = SQL_FetchInt(hndl, 0);
if (bancount > 0)
{
if (ShortMessage.BoolValue)
{
PrintToBanAdmins("\x04[SB]\x01Player \"%N\" has %d previous ban%s.",
client, bancount, ((bancount > 0) ? "s":""));
}
else
{
PrintToBanAdmins("\x04[SourceBans]\x01 Warning: Player \"%N\" has %d previous ban%s on record.",
client, bancount, ((bancount > 0) ? "s":""));
}
}
}
public Action:OnListSourceBansCmd(client, args)
{
if (args < 1)
{
ReplyToCommand(client, LISTBANS_USAGE);
}
if (g_DB == INVALID_HANDLE)
{
ReplyToCommand(client, "Error: Database not ready.");
return Plugin_Handled;
}
decl String:targetarg[64];
GetCmdArg(1, targetarg, sizeof(targetarg));
new target = FindTarget(client, targetarg, true, true);
if (target == INVALID_TARGET)
{
ReplyToCommand(client, "Error: Could not find a target matching '%s'.", targetarg);
return Plugin_Handled;
}
decl String:auth[32];
if (!GetClientAuthId(target, AuthId_Steam2, auth, sizeof(auth))
|| auth[0] == 'B' || auth[9] == 'L')
{
ReplyToCommand(client, "Error: Could not retrieve %N's steam id.", target);
return Plugin_Handled;
}
decl String:query[1024], String:ip[30];
GetClientIP(target, ip, sizeof(ip));
FormatEx(query, sizeof(query), "SELECT created, %s_admins.user, ends, length, reason, RemoveType FROM %s_bans LEFT JOIN %s_admins ON %s_bans.aid = %s_admins.aid WHERE ((type = 0 AND %s_bans.authid REGEXP '^STEAM_[0-9]:%s$') OR (type = 1 AND ip = '%s')) AND ((length > '0' AND ends > UNIX_TIMESTAMP()) OR RemoveType IS NOT NULL)", g_DatabasePrefix, g_DatabasePrefix, g_DatabasePrefix, g_DatabasePrefix, g_DatabasePrefix, g_DatabasePrefix, auth[8], ip);
decl String:targetName[MAX_NAME_LENGTH];
GetClientName(target, targetName, sizeof(targetName));
new Handle:pack = CreateDataPack();
WritePackCell(pack, (client == 0) ? 0 : GetClientUserId(client));
WritePackString(pack, targetName);
SQL_TQuery(g_DB, OnListBans, query, pack, DBPrio_Low);
if (client == 0)
{
ReplyToCommand(client, "[SourceBans] Note: if you are using this command through an rcon tool, you will not see results.");
}
else
{
ReplyToCommand(client, "\x04[SourceBans]\x01 Look for %N's ban results in console.", target);
}
return Plugin_Handled;
}
public OnListBans(Handle:owner, Handle:hndl, const String:error[], any:pack)
{
ResetPack(pack);
new clientuid = ReadPackCell(pack);
new client = GetClientOfUserId(clientuid);
decl String:targetName[MAX_NAME_LENGTH];
ReadPackString(pack, targetName, sizeof(targetName));
CloseHandle(pack);
if (clientuid > 0 && client == 0)
return;
if (hndl == INVALID_HANDLE)
{
PrintListResponse(clientuid, client, "[SourceBans] DB error while retrieving bans for %s:\n%s", targetName, error);
return;
}
if (SQL_GetRowCount(hndl) == 0)
{
PrintListResponse(clientuid, client, "[SourceBans] No bans found for %s.", targetName);
return;
}
PrintListResponse(clientuid, client, "[SourceBans] Listing bans for %s", targetName);
PrintListResponse(clientuid, client, "Ban Date Banned By Length End Date R Reason");
PrintListResponse(clientuid, client, "-------------------------------------------------------------------------------");
while (SQL_FetchRow(hndl))
{
new String:createddate[11] = "<Unknown> ";
new String:bannedby[11] = "<Unknown> ";
new String:lenstring[11] = "N/A ";
new String:enddate[11] = "N/A ";
decl String:reason[28];
new String:RemoveType[2] = " ";
if (!SQL_IsFieldNull(hndl, 0))
{
FormatTime(createddate, sizeof(createddate), "%Y-%m-%d", SQL_FetchInt(hndl, 0));
}
if (!SQL_IsFieldNull(hndl, 1))
{
new size_bannedby = sizeof(bannedby);
SQL_FetchString(hndl, 1, bannedby, size_bannedby);
new len = SQL_FetchSize(hndl, 1);
if (len > size_bannedby - 1)
{
reason[size_bannedby - 4] = '.';
reason[size_bannedby - 3] = '.';
reason[size_bannedby - 2] = '.';
}
else
{
for (new i = len; i < size_bannedby - 1; i++)
{
bannedby[i] = ' ';
}
}
}
// NOT NULL
new size_lenstring = sizeof(lenstring);
new length = SQL_FetchInt(hndl, 3);
if (length == 0)
{
strcopy(lenstring, size_lenstring, "Permanent ");
}
else
{
new len = IntToString(length, lenstring, size_lenstring);
if (len < size_lenstring - 1)
{
// change the '\0' to a ' '. the original \0 at the end will still be there
lenstring[len] = ' ';
}
}
if (!SQL_IsFieldNull(hndl, 2))
{
FormatTime(enddate, sizeof(enddate), "%Y-%m-%d", SQL_FetchInt(hndl, 2));
}
// NOT NULL
new reason_size = sizeof(reason);
SQL_FetchString(hndl, 4, reason, reason_size);
new len = SQL_FetchSize(hndl, 4);
if (len > reason_size - 1)
{
reason[reason_size - 4] = '.';
reason[reason_size - 3] = '.';
reason[reason_size - 2] = '.';
}
else
{
for (new i = len; i < reason_size - 1; i++)
{
reason[i] = ' ';
}
}
if (!SQL_IsFieldNull(hndl, 5))
{
SQL_FetchString(hndl, 5, RemoveType, sizeof(RemoveType));
}
PrintListResponse(clientuid, client, "%s %s %s %s %s %s", createddate, bannedby, lenstring, enddate, RemoveType, reason);
}
}
PrintListResponse(userid, client, const String:format[], any:...)
{
decl String:msg[192];
VFormat(msg, sizeof(msg), format, 4);
if (userid == 0)
{
PrintToServer("%s", msg);
}
else
{
PrintToConsole(client, "%s", msg);
}
}
PrintToBanAdmins(const String:format[], any:...)
{
decl String:msg[128];
VFormat(msg, sizeof(msg), format, 2);
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && !IsFakeClient(i)
&& CheckCommandAccess(i, "sm_listsourcebans", ADMFLAG_BAN)
)
{
PrintToChat(i, "%s", msg);
}
}
}
stock ReadConfig()
{
InitializeConfigParser();
if (g_ConfigParser == INVALID_HANDLE)
{
return;
}
decl String:ConfigFile[PLATFORM_MAX_PATH];
BuildPath(Path_SM, ConfigFile, sizeof(ConfigFile), "configs/sourcebans/sourcebans.cfg");
if (FileExists(ConfigFile))
{
InternalReadConfig(ConfigFile);
}
else
{
decl String:Error[PLATFORM_MAX_PATH + 64];
FormatEx(Error, sizeof(Error), "FATAL *** ERROR *** can not find %s", ConfigFile);
SetFailState(Error);
}
}
static InitializeConfigParser()
{
if (g_ConfigParser == INVALID_HANDLE)
{
g_ConfigParser = SMC_CreateParser();
SMC_SetReaders(g_ConfigParser, ReadConfig_NewSection, ReadConfig_KeyValue, ReadConfig_EndSection);
}
}
static InternalReadConfig(const String:path[])
{
new SMCError:err = SMC_ParseFile(g_ConfigParser, path);
if (err != SMCError_Okay)
{
decl String:buffer[64];
PrintToServer("%s", SMC_GetErrorString(err, buffer, sizeof(buffer)) ? buffer : "Fatal parse error");
}
}
public SMCResult:ReadConfig_NewSection(Handle:smc, const String:name[], bool:opt_quotes)
{
return SMCParse_Continue;
}
public SMCResult:ReadConfig_KeyValue(Handle:smc, const String:key[], const String:value[], bool:key_quotes, bool:value_quotes)
{
if (strcmp("DatabasePrefix", key, false) == 0)
{
strcopy(g_DatabasePrefix, sizeof(g_DatabasePrefix), value);
if (g_DatabasePrefix[0] == '\0')
{
g_DatabasePrefix = "sb";
}
}
return SMCParse_Continue;
}
public SMCResult:ReadConfig_EndSection(Handle:smc)
{
return SMCParse_Continue;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,127 @@
"Phrases"
{
"Banned Check Site"
{
"#format" "{1:s}"
"en" "You have been banned by this server, check {1} for more info"
"nl" "U bent gebanned van deze server, kijk op {1} voor meer informatie"
"fr" "Vous avez été banni de ce serveur, allez sur {1} pour plus d'informations"
"pl" "Zostałeś zbanowany na tym serwerze, odwiedź {1} aby poznać szczegóły"
"de" "Sie wurden von diesem Server gebannt, weitere Informationen auf {1}"
"ru" "Вы были забанены на этом сервере, для получения информации посетите: {1}"
"da" "Du er blevet udlukket fra denne server, check {1} for mere info"
"no" "Du har blitt stengt ute fra denne serveren, sjekk {1} for mer info."
}
"DB Connect Fail"
{
"en" "Database connection failed. Please contact server operator."
"nl" "Database connectie is mislukt. Neem contact op met uw server beheerder."
"fr" "Problème de connection avec la base de données. Merci de bien vouloir contacter un admin."
"pl" "Błąd połączenia z bazą danych. Skontaktuj się z adminem serwera."
"de" "Datenbankverbindung fehlgeschlagen. Bitte kontaktieren Sie den Serveradministrator."
"ru" "Не удалось подключиться к базе данных. Свяжитесь с администратором сервера."
"da" "Database tilslutningen fejlede. Kontakt venligst server bestyrren."
"no" "Kommunikasjon med databasen feilet. Vennligst kontakt serveradmin."
}
"Not In Game"
{
"en" "The player is not in game, please visit the web panel to ban them."
"nl" "De speler is niet in het spel, gaat u alstublieft naar het web panel om de speler op de banlijst te plaatsen."
"fr" "Le joueur n'est pas en jeu, merci d'aller sur le panel internet pour le bannir."
"pl" "Gracz nie znajduje się w grze, odwiedź panel www aby go zbanować."
"de" "Der Spieler ist nicht im Spiel. Bitte benutzen Sie das Webpanel um ihn zu bannen."
"ru" "Так как игрок не в игре вы должны посетить веб-панель, чтобы забанить его."
"da" "Spilleren er ikke i spillet, besøg venligst web panelet for at udelukke ham."
"no" "Spilleren er ikke på serveren, vennligst besøk web panelet for og stenge han ute."
}
"Ban Not Verified"
{
"en" "This player has not been verified. Please wait thirty seconds before retrying."
"nl" "Deze speler zijn ban is niet geverifieerd. Wacht u alstublieft 30 seconden voordat u het opnieuw probeerd."
"fr" "Le systeme n'a pas réussi à déterminer si ce joueur est banni. Merci d'attendre 30 secondes avant de re-essayer."
"pl" "Gracz nie został jeszcze zweryfikowany. Spróbuj ponownie za 30 sekund."
"de" "Dieser Spieler wurde noch nicht verifiziert. Bitte warten Sie 30 Sekunden und versuchen Sie es nochmal."
"ru" "Игрок еще не идентифицирован. Подождите 30 секунд перед следующей попыткой."
"da" "Denne spiller er ikke blevet identificeret. Vent venligst 30 sekunder før du prøver igen."
"no" "Denne spilleren har ikke blitt indentifisert. Vennligst vent 30 sekunder før du prøver igjen."
}
"Can Not Unban"
{
"#format" "{1:s}"
"en" "You can not unban from in the server, visit {1} to unban."
"nl" "U kunt de speler niet vanuit de server unbannen, bezoek {1} om te unbannen."
"fr" "Vous ne pouvez pas annuler de ban depuis ce serveur, allez sur {1} pour le faire."
"pl" "Nie możesz odbanować z serwera, odwiedź {1} by zdjąć bana."
"de" "Sie können nicht vom Server aus entbannen, entbannen Sie auf {1} ."
"ru" "Вы не можете разбанить игрока на сервере, зайдите на {1} для удаления бана."
"da" "Du kan ikke fjerne udelukkelserne inde fra serveren, besøg {1} for at fjerne udelukkelsen."
"no" "Du kan ikke fjerne utestengelsen inne fra serveren, besøk {1} for og fjerne utestengelsen."
}
"Can Not Add Ban"
{
"#format" "{1:s}"
"en" "You can not add a ban from in the server, visit {1} to add a ban."
"nl" "U kunt geen ban toevoegen vanuit de server, bezoek {1} om de ban toe te voegen."
"fr" "Vous ne pouvez pas ajouter de ban depuis ce serveur, allez sur {1} pour ajouter un ban."
"pl" "Nie możesz dodać bana z serwera, odwiedź {1} by dodać bana."
"de" "Sie können keinen Ban vom Server aus hinzufügen, bannen Sie auf {1} ."
"ru" "Вы не можете дать бан на сервере, зайдите на {1} для добавления бана."
"da" "Du kan ikke tilføje en udelukkelse fra serveren, besøg {1} for at tilføje en udelukkelse."
"no" "Du kan ikke legge til en utestengelse fra serveren, besøk {1} for og legge til en utestengelse."
}
"Check Menu"
{
"en" "Please check the menu to select a reason for ban."
"nl" "Controleerdt u alstublieft het menu om een reden te selecteren voor de ban."
"fr" "Merci d'utiliser le menu pour sélectionner la raison du ban."
"pl" "Sprawdź menu aby wybrać powód bana."
"de" "Bitte benutzen Sie das Menü um einen Grund für den Ban auszuwählen."
"ru" "Выберите причину бана из меню."
"da" "Check venligst menuen for en grund til udelukkelse"
"no" "Venligst sjekk menyen for en grunn til utestengelse"
}
"Include Reason"
{
"en" "Please include a reason for banning the client."
"nl" "Voegt u alstublieft een reden toe voor het bannen van deze persoon."
"fr" "Merci d'ajouter la raison du ban."
"pl" "Proszę dodać powód bana."
"de" "Bitte geben Sie einen Grund für den Ban an."
"ru" "Добавьте причину бана игрока."
"da" "Indkludere venligst en grund for at udelukke klienten."
"no" "Inkluder vennligst en grunn for og utelukke klienten."
}
"Ban Fail"
{
"en" "Failed to ban player, please try again."
"nl" "Er is een fout opgetreden tijdens de ban procedure, probeert u het alstublieft nogmaals."
"fr" "Le joueur n'a pas pu être banni merci d'essayer ultérieurement."
"pl" "Błąd przy dodawaniu bana, spróbuj ponownie."
"de" "Es ist ein Fehler beim bannen des Spielers aufgetreten, bitte versuchen Sie es erneut."
"ru" "Не удалось забанить игрока, попробуйте еще раз."
"da" "Fejlede udelukkelsen, prøv venligst igen."
"no" "Utestengelse feilet, vennligst prøv igjen."
}
"Chat Reason"
{
"en" "Please type the reason for ban in chat and press enter. Type '!noreason' to abort."
"nl" "Typ alstublieft de reden voor de ban in chat and druk op enter. Typ '!noreason' om the annuleren."
"fr" "Merci d'écrire la raison du ban dans le chat. Tapez '!noreason' pour annuler."
"pl" "Proszę wpisać powód bana w czacie oraz potwierdzić przyciskiem Enter. Wpisz !noreason by anulować."
"de" "Bitte schreiben Sie den Grund für den Ban in den Chat. Schreiben Sie '!noreason' um abzubrechen."
"ru" "Введите причину бана и нажмите Ввод. Введите '!noreason' для отмены бана."
"da" "Skriv venligst din grund for udelukkelsen ind i chatten og tryk enter. Skriv '!noreason' for at annullere."
"no" "Vennligst skriv din grunn for utestengelse i chaten og trykk enter. Skriv 'noreason' for og annulere."
}
"Chat Reason Aborted"
{
"en" "The ban procedure has been stopped successfully."
"nl" "De ban procedure is succesvol gestopt."
"fr" "La procédure de ban a été arrêté avec succès."
"pl" "Procedura banowania została pomyślnie zatrzymana."
"de" "Der Banvorgang wurde erfolgreich angehalten."
"ru" "Бан отменён."
"da" "Udelukkelses proceduren blev stoppet med success"
"no" "Utestengelses prossedyren ble stoppet vellykket."
}
}

View File

@ -0,0 +1,946 @@
"Phrases"
{
//--------------------------------------------------------------------------------
"Muted on connect"
{
"en" "You have been muted!"
"es" "Has sido muteado!"
"ru" "Вам был отключен микрофон!"
"pl" "Zostałeś wyciszony!"
"pt" "Você foi silenciado!"
"de" "Sie wurden im Voice-Chat gesperrt!"
}
"Gagged on connect"
{
"en" "You have been gagged!"
"es" "Has sido gageado!"
"ru" "Вам был отключен чат!"
"pl" "Zostałeś zakneblowany!"
"pt" "Você foi amordaçado!"
"de" "Sie wurden im Chat gesperrt!"
}
//--------------------------------------------------------------------------------
"Mute expired"
{
"en" "Your mute has expired."
"es" "Tu muteo ha expirado."
"ru" "Вам был включен микрофон (истек срок блокировки)."
"pl" "Twoje wyciszenie wygasło."
"pt" "Seu emudecimento expirou."
"de" "Sie wurden im Voice-Chat entsperrt (Die Sperrzeit ist abgelaufen)."
}
"Gag expired"
{
"en" "Your gag has expired."
"es" "Tu gageo ha expirado."
"ru" "Вам был включен чат (истек срок блокировки)."
"pl" "Twój knebel wygasł."
"pt" "Seu amordaçamento expirou."
"de" "Sie wurden im Chat entsperrt. (Die Sperrzeit ist abgelaufen)."
}
//--------------------------------------------------------------------------------
"FWUnmute"
{
"en" "Your mute has been removed."
"es" "Tu muteo ha sido eliminado"
"ru" "Вам был включен микрофон."
"pl" "Twoje wyciszenie zostało usunięte."
"pt" "Seu emudecimento foi removido."
"de" "Sie wurden im Voice-Chat entsperrt."
}
"FWUngag"
{
"en" "Your gag has been removed."
"es" "Tu gageo ha sido eliminado"
"ru" "Вам был включен чат."
"pl" "Twój knebel został usunięty."
"pt" "Seu amordaçamento foi removido."
"de" "Sie wurden im Chat entsperrt."
}
//--------------------------------------------------------------------------------
"Usage_time"
{
"#format" "{1:d}"
"en" "Time: {1} minutes, if unspecified; permanent, if 0.\nIf < 0, blocks for session."
"es" "Tiempo: {1} minutos, si no es especificado el tiempo = permanente en caso de ser 0.\nSi es < 0, bloqueo sólo para la sesión."
"ru" "Длительность: {1} минут, если не указана; навсегда, если 0.\nЕсли < 0, блокировка на сессию."
"pl" "Czas: {1} minut, jeśli nieokreślony; permanentny, jeśli 0.\nJeśli < 0, blokada na sesje."
"pt" "Tempo: {1} minutos se não for especificado, permanente se for 0 \.nSe for < 0, bloqueia na sessão."
"de" "Dauer: {1} Minuten, wenn nicht festgelegt; für immer, wenn 0. \.nWenn < 0, Blockierung für nächste Periode."
}
"Player Comms Not Verified"
{
"en" "This player has not been verified. Please wait thirty seconds before retrying."
"es" "este jugador no ha podido ser verificado. Por favor, espera 30 segundos antes de volver a intentarlo"
"ru" "Игрок еще не идентифицирован. Подождите 30 секунд перед следующей попыткой."
"pl" "Gracz niezweryfikowany. Proszę poczekać 30 sekund przed ponowną probą."
"pt" "Este jogador não foi verificado. Por favor, aguarde trinta segundos antes de tentar novamente."
"de" "Der Spieler ist noch nicht identifiziert. Warten Sie 30 Sekunden vor dem nächsten Versuch."
}
//--------------------------------------------------------------------------------
"Player already muted"
{
"#format" "{1:s}"
"en" "Player {1} already muted!"
"es" "El jugador {1} ya está muteado actualmente!"
"ru" "У игрока {1} уже отключен микрофон!"
"pl" "Gracz {1} jest już wyciszony!"
"pt" "Jogador {1} já foi emudecido!"
"de" "Der Spieler {1} ist bereits im Voice-Chat gesperrt!"
}
"Player already gagged"
{
"#format" "{1:s}"
"en" "Player {1} already gagged!"
"es" "El jugador {1} ya está gageado actualmente!"
"ru" "У игрока {1} уже отключен чат!"
"pl" "Gracz {1} jest już zakneblowany!"
"pt" "Jogador {1} já foi amordaçado!"
"de" "Der Spieler {1} ist bereits im Chat gesperrt!"
}
"Player already silenced"
{
"#format" "{1:s}"
"en" "Player {1} already gagged or muted!"
"es" "El jugador {1} ya está gageado o muteado actualmente!"
"ru" "У игрока {1} уже отключен чат или микрофон!"
"pl" "Gracz {1} jest już całkowicie wyciszony!"
"pt" "Jogador {1} já amordaçado ou emudecido!"
"de" "Der Spieler {1} ist bereits im Chat oder im Voice-Chat gesperrt!"
}
//--------------------------------------------------------------------------------
"Player not muted"
{
"en" "Player not muted."
"es" "Jugador no muteado."
"ru" "У игрока не отключен микрофон."
"pl" "Gracz nie jest wyciszony."
"pt" "Jogador não emudecido."
"de" "Der Spieler ist im Voice-Chat nicht gesperrt."
}
"Player not gagged"
{
"en" "Player not gagged."
"es" "Jugador no gageado."
"ru" "У игрока не отключен чат."
"pl" "Gracz nie jest zakneblowany."
"pt" "Jogador não amordaçado."
"de" "Der Spieler ist im Chat nicht gesperrt."
}
"Player not silenced"
{
"en" "Player not silenced."
"es" "Jugador no silenciado."
"ru" "У игрока не отключен чат или микрофон."
"pl" "Gracz nie jest całkowicie wyciszony."
"pt" "Jogador não silenciado."
"de" "Der Spieler ist im Chat oder im Voice-Chat nicht gesperrt."
}
//--------------------------------------------------------------------------------
"Permagagged player"
{
"#format" "{1:t}"
"en" "Issued a permanent gag on {1}."
"es" "Ha gageado permanentemente a {1}."
"ru" "Игроку {1} навсегда отключен чат."
"pl" "Permanentnie zakneblowano {1}."
"pt" "{1} foi permanentemente amordaçado."
"de" "Der Spieler {1} ist für immer im Chat gesperrt."
}
"Permagagged player reason"
{
"#format" "{1:t},{2:s}"
"en" "Issued a permanent gag on {1} (reason: {2})."
"es" "Ha gageado permanentemente a {1} (razón: {2})."
"ru" "Игроку {1} навсегда отключен чат (причина: {2})."
"pl" "Permanentnie zakneblowano {1} (powód: {2})."
"pt" "{1} foi permanentemente amordaçado, (motivo: {2})."
"de" "Der Spieler {1} ist für immer im Chat gesperrt (Grund: {2})."
}
"Gagged player"
{
"#format" "{1:t},{2:d}"
"en" "Issued an extended gag on {1} for {2} minutes."
"es" "Ha gageado extensivamente a {1} por {2} minutos."
"ru" "Игроку {1} отключен чат на {2} минут."
"pl" "Zakneblowano {1} na {2} minut."
"pt" "Amordaçamento de {1} foi estendido por {2} minutos."
"de" "Der Spieler {1} ist für {2} Minuten im Chat gesperrt."
}
"Gagged player reason"
{
"#format" "{1:t},{2:d},{3:s}"
"en" "Issued an extended gag on {1} for {2} minutes (reason: {3})."
"es" "Ha gageado extensivamente a {1} por {2} minutos (razón: {3})."
"ru" "Игроку {1} отключен чат на {2} минут (причина: {3})."
"pl" "Zakneblowano {1} na {2} minut (powód: {3})."
"pt" "Amordaçamento de {1} foi estendido por {2} minutos, (motivo: {3})."
"de" "Der Spieler {1} ist für {2} Minuten im Chat gesperrt (Grund: {3})."
}
//--------------------------------------------------------------------------------
"Permamuted player"
{
"#format" "{1:t}"
"en" "Issued a permanent mute on {1}."
"es" "Ha muteado permanentemente a {1}."
"ru" "Игроку {1} навсегда отключен микрофон."
"pl" "Permanentnie wyciszono {1}."
"pt" "{1} foi permanentemente emudecido."
"de" "Der Spieler {1} ist für immer im Voice-Chat gesperrt."
}
"Permamuted player reason"
{
"#format" "{1:t},{2:s}"
"en" "Issued a permanent mute on {1} (reason: {2})."
"es" "Ha muteado permanentemente a {1} (razón: {2})."
"ru" "Игроку {1} навсегда отключен микрофон (причина: {2})."
"pl" "Permanentnie wyciszono {1} (powód: {2})."
"pt" "{1} foi permanentemente emudecido, (motivo: {2})."
"de" "Der Spieler {1} ist für immer im Voice-Chat gesperrt (Grund: {2})."
}
"Muted player"
{
"#format" "{1:t},{2:d}"
"en" "Issued an extended mute on {1} for {2} minutes."
"es" "Ha muteado extensivamente a {1} por {2} minutos."
"ru" "Игроку {1} отключен микрофон на {2} минут."
"pl" "Wyciszono {1} na {2} minut."
"pt" "Emudecimento de {1} foi estendido por {2} minutos."
"de" "Der Spieler {1} ist für {2} Minuten im Voice-Chat gesperrt."
}
"Muted player reason"
{
"#format" "{1:t},{2:d},{3:s}"
"en" "Issued an extended mute on {1} for {2} minutes (reason: {3})."
"es" "Ha muteado extensivamente a {1} por {2} minutos (razón: {3})."
"ru" "Игроку {1} отключен микрофон на {2} минут (причина: {3})."
"pl" "Wyciszono {1} na {2} minut (powód: {3})."
"pt" "Emudecimento de {1} foi estendido por {2} minutos, (motivo: {3})."
"de" "Der Spieler {1} ist für {2} Minuten im Voice-Chat gesperrt (Grund: {3})."
}
//--------------------------------------------------------------------------------
"Permasilenced player"
{
"#format" "{1:t}"
"en" "Issued a permanent silence on {1}."
"es" "Ha silenciado permanentemente a {1}."
"ru" "Игроку {1} навсегда отключен чат и микрофон."
"pl" "Permanentnie całkowicie wyciszono {1}."
"pt" "{1} foi permanentemente silenciado."
"de" "Der Spieler {1} ist für immer im Voice-Chat und im Chat gesperrt."
}
"Permasilenced player reason"
{
"#format" "{1:t},{2:s}"
"en" "Issued a permanent silence on {1} (reason: {2})."
"es" "Ha silenciado permanentemente a {1} (razón: {2})."
"ru" "Игроку {1} навсегда отключен чат и микрофон (причина: {2})."
"pl" "Permanentnie całkowicie wyciszono {1} (powód: {2})."
"pt" "{1} foi permanentemente silenciado, (motivo: {2})."
"de" "Der Spieler {1} ist im Chat und im Voice-Chat gesperrt (Grund: {2})."
}
"Silenced player"
{
"#format" "{1:t},{2:d}"
"en" "Issued an extended silence on {1} for {2} minutes."
"es" "Ha silenciado extensivamente a {1} por {2} minutos."
"ru" "Игроку {1} отключен чат и микрофон на {2} минут."
"pl" "Całkowicie wyciszono {1} na {2} minut."
"pt" "Silenciamento de {1} foi estendido por {2} minutos."
"de" "Der Spieler {1} ist für {2} Minuten im Voice-Chat und im Chat gesperrt."
}
"Silenced player reason"
{
"#format" "{1:t},{2:d},{3:s}"
"en" "Issued an extended silence on {1} for {2} minutes (reason: {3})."
"es" "Ha silenciado extensivamente a {1} por {2} minutos (razón: {3})."
"ru" "Игроку {1} отключен чат и микрофон на {2} минут (причина: {3})."
"pl" "Całkowicie wyciszono {1} na {2} minut (powód: {3})."
"pt" "Silenciamento de {1} foi estendido por {2} minutos, (motivo: {3})."
"de" "Der Spieler {1} ist für {2} Minuten im Voice-Chat und im Chat gesperrt (Grund: {3})."
}
//--------------------------------------------------------------------------------
"Temp unmuted player"
{
"#format" "{1:t}"
"en" "Temporarily removed mute from {1}."
"es" "Ha eliminado el muteo temporal a {1}."
"ru" "Игроку {1} временно включен микрофон."
"pl" "Tymczasowo usunięto wyciszenie {1}."
"pt" "Emudecimento de {1} foi temporariamente removido."
"de" "Der Spieler {1} ist zeitweilig im Voice-Chat entsperrt."
}
"Temp ungagged player"
{
"#format" "{1:t}"
"en" "Temporarily removed gag from {1}."
"es" "Ha eliminado el gageo temporal a {1}."
"ru" "Игроку {1} временно включен чат."
"pl" "Tymczasowo usunięto knebel {1}."
"pt" "Amordaçamento de {1} foi temporariamente removido."
"de" "Der Spieler {1} ist zeitweilig im Chat entsperrt."
}
"Temp unsilenced player"
{
"#format" "{1:t}"
"en" "Temporarily removed silence from {1}."
"es" "Ha eliminado el silencio temporal a {1}."
"ru" "Игроку {1} временно включен чат и микрофон."
"pl" "Tymczasowo usunięto całkowite wyciszenie {1}."
"pt" "Silenciamento de {1} foi temporariamente removido."
"de" "Der Spieler {1} ist zeitweilig im Voice-Chat und im Chat entsperrt."
}
"Unblock Select Failed"
{
"#format" "{1:s}"
"en" "An error occurred while requesting blocks for {1} from DB."
"es" "Ha ocurrido un error durante la solicitud de los bloqueos de {1} en la Base de Datos"
"ru" "Произошла ошибка при запросе блокировок для {1} из базы."
"pl" "Wystąpił błąd podczas pobierania blokad {1} z bazy danych."
"pt" "Ocorreu um erro no DB durante a pedido de bloqueio de {1}."
"de" "Es ist ein Fehler bei der Anfrage der Sperren für {1} aus der Datenbank passiert"
}
"No blocks found"
{
"#format" "{1:s}"
"en" "No active blocks found in DB for {1}."
"es" "No hay bloqueos activos que se encuentren en la Base de Datos para {1}."
"ru" "В базе не найдено действующих блокировок для {1}."
"pl" "Brak aktywnych blokad {1} w bazie danych."
"pt" "Nenhum bloqueio ativo foi encontrado no DB para {1}."
"de" "Es wurde keine gültige Sperre für {1}in der Datenbank gefunden."
}
"No db error unlock perm"
{
"en" "You lack the permission to unblocking with DB errors."
"es" "No tienes permisos para desbloquear errores de la Base de Datos."
"ru" "У вас нет разрешения на разблокировку при ошибках базы."
"pl" "Nie masz uprawnień do usuwania blokad z bazy danych."
"pt" "Você não tem permissão para desbloquear com erros de DB."
"de" "Sie haben keine Erlaubnis zur Entsperrung bei den Fehlern in der Datenbank."
}
"No permission unmute"
{
"#format" "{1:s}"
"en" "The mute on {1} was unable to be removed due to being muted by a higher administrator!"
"es" "El muteo de {1} no pudo ser eliminado debido a que fue muteado por un administrador superior a ti!"
"ru" "Невозможно включить микрофон {1}, т.к. он был отключен более высоким администратором!"
"pl" "Wyciszenie {1} nie może zostać usunięte, ponieważ zostało nadane przez admina z wyższymi uprawnieniami!"
"pt" "O emudecimento de {1} não pôde ser removido porque foi efetuado por um administrador de nível mais alto!"
"de" "Es ist unmöglich {1} im Voice-Chat zu entsperren, weil er von höherem Administrator gesperrt wurde!"
}
"No permission ungag"
{
"#format" "{1:s}"
"en" "The gag on {1} was unable to be removed due to being muted by a higher administrator!"
"es" "El gageo de {1} no pudo ser eliminado debido a que fue gageado por un administrador superior a ti!"
"ru" "Невозможно включить чат {1}, т.к. он был отключен более высоким администратором!"
"pl" "Knebel {1} nie może zostać usunięty, ponieważ został nadany przez admina z wyższymi uprawnieniami!"
"pt" "O amordaçamento de {1} não pôde ser removido porque foi efetuado por um administrador de nível mais alto!"
"de" "Es ist unmöglich {1}im Chat zu entsperren, weil er von höherem Administrator gesperrt wurde!"
}
"Unmuted player"
{
"#format" "{1:t}"
"en" "Removed an extended mute from {1}."
"es" "Ha eliminado el muteo extendido a {1}."
"ru" "Игроку {1} включен микрофон."
"pl" "Usunięto wyciszenie {1}."
"pt" "Removido um emudecimento estendido de {1}."
"de" "Der Spieler {1} wurde im Voice-Chat entsperrt."
}
"Ungagged player"
{
"#format" "{1:t}"
"en" "Removed an extended gag from {1}."
"es" "Ha eliminado el gageo extendido a {1}."
"ru" "Игроку {1} включен чат."
"pl" "Usunięto knebel {1}."
"pt" "Removido um amordaçamento estendido de {1}."
"de" "Der Spieler {1} wurde im Chat entsperrt."
}
"Unblock insert failed"
{
"en" "Failed to remove block from DB."
"es" "Error al eliminar este bloqueo de la Base de Datos."
"ru" "Не удалось удалить блокировку из базы."
"pl" "Nie udało się usunąć blokady z bazy danych."
"pt" "Falha ao remover o bloqueio do DB."
"de" "Es ist ein Fehler beim Entfernen der Sperre aus der Datenbank passiert."
}
"successfully unmuted"
{
"#format" "{1:s}"
"en" "Successfully removed mute for {1} from DB."
"es" "Eliminado con éxito el muteo de {1} desde la Base de Datos."
"ru" "Успешно удалена блокировка микрофона для {1} из базы."
"pl" "Usunięto wyciszenie {1} z bazy danych."
"pt" "Removido com sucesso o emudecimento de {1} do DB."
"de" "Die Sperre {1} im Voice-Chat wurde erfolgreich aus der Datenbank entfernt."
}
"successfully ungagged"
{
"#format" "{1:s}"
"en" "Successfully removed gag for {1} from DB."
"es" "Eliminado con éxito el gageo de {1} desde la Base de Datos."
"ru" "Успешно удалена блокировка чата для {1} из базы."
"pl" "Usunięto knebel {1} z bazy danych."
"pt" "Removido com sucesso o amordaçamento de {1} do DB."
"de" "Die Sperre {1} im Chat wurde erfolgreich aus der Datenbank entfernt."
}
//--------------------------------------------------------------------------------
"AdminMenu_Display_None"
{
"#format" "{1:s}"
"en" "[ ] {1}"
"es" "[ ] {1}"
"ru" "[ ] {1}"
"pl" "[ ] {1}"
"pt" "[ ] {1}"
"de" "[ ] {1}"
}
"AdminMenu_Display_Muted"
{
"#format" "{1:s}"
"en" "[M] {1}"
"es" "[M] {1}"
"ru" "[M] {1}"
"pl" "[M] {1}"
"pt" "[M] {1}"
"de" "[M] {1}"
}
"AdminMenu_Display_Gagged"
{
"#format" "{1:s}"
"en" "[G] {1}"
"es" "[G] {1}"
"ru" "[G] {1}"
"pl" "[G] {1}"
"pt" "[G] {1}"
"de" "[G] {1}"
}
"AdminMenu_Display_Silenced"
{
"#format" "{1:s}"
"en" "[S] {1}"
"es" "[S] {1}"
"ru" "[S] {1}"
"pl" "[S] {1}"
"pt" "[S] {1}"
"de" "[S] {1}"
}
"AdminMenu_Main"
{
"en" "Comm Commands"
"es" "Comandos de Comunicación"
"ru" "Чат и микрофон"
"pl" "Komunikacja"
"pt" "Comandos de Comunicação"
"de" "Chat und Voice-Chat"
}
"AdminMenu_Select_Main"
{
"en" "Comm Commands:"
"es" "Comandos de Comunicación:"
"ru" "Чат и микрофон:"
"pl" "Komunikacja:"
"pt" "Comandos de Comunicação:"
"de" "Chat und Voice-Chat:"
}
"AdminMenu_List"
{
"en" "View Punishments"
"es" "Ver Castigos"
"ru" "Посмотреть наказания"
"pl" "Zobacz kary"
"pt" "Ver Punições"
"de" "Die Bestrafungen zeigen"
}
"AdminMenu_Select_List"
{
"en" "Select Player:"
"es" "Seleccionar Jugador:"
"ru" "Игроки:"
"pl" "Wybierz Gracza:"
"pt" "Selecionar Jogador:"
"de" "Die Spieler:"
}
"AdminMenu_Gag"
{
"en" "Issue Gag"
"es" "Gagear Jugador"
"ru" "Отключить чат"
"pl" "Zaknebluj"
"pt" "Emitir Amordaçar"
"de" "Chat sperren"
}
"AdminMenu_Select_Gag"
{
"en" "Select Player:"
"es" "Seleccionar Jugador:"
"ru" "Отключить чат игроку:"
"pl" "Wybierz Gracza:"
"pt" "Selecionar Jogador:"
"de" "Spieler im Chat sperren:"
}
"AdminMenu_Select_Mute"
{
"en" "Select Player:"
"es" "Seleccionar Jugador:"
"ru" "Отключить микрофон игроку:"
"pl" "Wybierz Gracza:"
"pt" "Selecionar Jogador:"
"de" "Spieler im Voice-Chat sperren:"
}
"AdminMenu_Select_Silence"
{
"en" "Select Player:"
"es" "Seleccionar Jugador:"
"ru" "Отключить микрофон и чат игроку:"
"pl" "Wybierz Gracza:"
"pt" "Selecionar Jogador:"
"de" "Spieler im Voice-Chat und im Chat sperren:"
}
"AdminMenu_Select_Ungag"
{
"en" "Select Player:"
"es" "Seleccionar Jugador:"
"ru" "Включить чат игроку:"
"pl" "Wybierz Gracza:"
"pt" "Selecionar Jogador:"
"de" "Spieler im Chat entsperren:"
}
"AdminMenu_Select_Unmute"
{
"en" "Select Player:"
"es" "Seleccionar Jugador:"
"ru" "Включить микрофон игроку:"
"pl" "Wybierz Gracza:"
"pt" "Selecionar Jogador:"
"de" "Spieler im Voice-Chat entsperren:"
}
"AdminMenu_Select_Unsilence"
{
"en" "Select Player:"
"es" "Seleccionar Jugador:"
"ru" "Включить микрофон и чат игроку:"
"pl" "Wybierz Gracza:"
"pt" "Selecionar Jogador:"
"de" "Spieler im Voice-Chat und im Chat entsperren:"
}
"AdminMenu_Option_Mute_Empty"
{
"en" "No Muted Players"
"es" "No hay jugadores muteados"
"ru" "Нет игроков с отключенным микрофоном"
"pl" "Brak wyciszonych graczy"
"pt" "Nenhum Jogador Emudecido"
"de" "Es gibt keinen Spieler, der im Chat gesperrt wurde"
}
"AdminMenu_Option_Gag_Empty"
{
"en" "No Gagged Players"
"es" "No hay jugadores gageados"
"ru" "Нет игроков с отключенным чатом"
"pl" "Brak zakneblowanych graczy"
"pt" "Nenhum Jogador Amordaçado"
"de" "Es gibt keinen Spieler, der im Voice-Chat gesperrt wurde"
}
"AdminMenu_Option_Silence_Empty"
{
"en" "No Silenced Players"
"es" "No hay jugadores silenciados"
"ru" "Нет игроков с отключенным микрофоном и чатом"
"pl" "Brak całkowicie wyciszonych graczy"
"pt" "Nenhum Jogador Silenciado"
"de" "Es gibt keinen Spieler, der im Voice-Chat und im Chat gesperrt wurde"
}
"ListMenu_Option_Empty"
{
"en" "No Punished Clients"
"es" "No hay jugadores castigados"
"ru" "Нет наказанных игроков"
"pl" "Brak ukaranych graczy"
"pt" "Nenhum Cliente Punido"
"de" "Es gibt keinen bestraften Spieler"
}
"AdminMenu_Option_Empty"
{
"en" "No available players"
"es" "No hay jugadores disponibles"
"ru" "Нет доступных игроков"
"pl" "Brak dostępnych graczy"
"pt" "Não há jogadores disponíveis"
"de" "Es gibt keinen zugänglichen Spieler"
}
"AdminMenu_UnGag"
{
"en" "Remove Gag"
"es" "Eliminar Gageo"
"ru" "Включить чат"
"pl" "Usuń knebel"
"pt" "Remover Amordaçar"
"de" "Chat entsperren"
}
"AdminMenu_Title_Durations"
{
"en" "Select Duration:"
"es" "Seleccionar Duración:"
"ru" "На сколько:"
"pl" "Wybierz czas trwania:"
"pt" "Selecionar Duração:"
"de" "Dauer auswählen:"
}
"AdminMenu_Title_Reasons"
{
"en" "Select Reason:"
"es" "Seleccionar Razón:"
"ru" "Причина:"
"pl" "Wybierz powód:"
"pt" "Selecionar Motivo:"
"de" "Grund auswählen:"
}
"AdminMenu_Mute"
{
"en" "Issue Mute"
"es" "Mutear Jugador"
"ru" "Отключить микрофон"
"pl" "Wycisz"
"pt" "Emitir Emudecer"
"de" "Voice-Chat sperren"
}
"AdminMenu_UnMute"
{
"en" "Remove Mute"
"es" "Eliminar Muteo"
"ru" "Включить микрофон"
"pl" "Usuń wyciszenie"
"pt" "Remover Emudecer"
"de" "Voice-Chat entsperren"
}
"AdminMenu_Silence"
{
"en" "Issue Silence"
"es" "Silenciar Jugador"
"ru" "Отключить микрофон и чат"
"pl" "Wycisz całkowicie"
"pt" "Emitir Silenciar"
"de" "Voice-Chat und Chat sperren"
}
"AdminMenu_UnSilence"
{
"en" "Remove Silence"
"es" "Eliminar Silencio"
"ru" "Включить микрофон и чат"
"pl" "Usuń całkowite wyciszenie"
"pt" "Remover Silenciar"
"de" "Voice-Chat und Chat entsperren"
}
//--------------------------------------------------------------------------------
"AdminMenu_Not_Available"
{
"en" "The player you selected is no longer available."
"es" "El jugador que has seleccionado ya no está disponible."
"ru" "Игрок не доступен."
"pl" "Wybrany gracz nie jest już dostępny."
"pt" "O jogador que você selecionou não está mais disponível."
"de" "Der Spieler ist nicht zugänglich."
}
"Command_Target_Not_Targetable"
{
"en" "You cannot target this player."
"es" "Tú no puedes controlar a este jugador."
"ru" "Вы не можете выбрать этого игрока."
"pl" "Nie możesz wskazać tego gracza."
"pt" "Você não pode marcar este jogador."
"de" "Sie können diesen Spieler nicht auswählen."
}
//---------------------------------------------------------------------------------
"ListMenu_Option_Mute"
{
"en" "Muted"
"es" "Muteado"
"ru" "Микрофон"
"pl" "Wyciszony"
"pt" "Emudecido"
"de" "Voice-Chat"
}
"ListMenu_Option_Gag"
{
"en" "Gagged"
"es" "Gageado"
"ru" "Чат"
"pl" "Zakneblowany"
"pt" "Amordaçado"
"de" "Chat"
}
"ListMenu_Option_Duration"
{
"en" "- Duration: "
"es" "- Duración: "
"ru" "- На время: "
"pl" "- Czas trwania: "
"pt" "- Duração: "
"de" "- Dauer: "
}
"ListMenu_Option_Duration_Perm"
{
"en" "Permanent"
"es" "Permanente"
"ru" "Навсегда"
"pl" "Permanentnie"
"pt" "Permanente"
"de" "Für immer"
}
"ListMenu_Option_Duration_Time"
{
"#format" "{1:d}"
"en" "{1} Minutes"
"es" "{1} Minutos"
"ru" "{1} минут"
"pl" "{1} minut"
"pt" "{1} Minutos"
"de" "{1} Minuten"
}
"ListMenu_Option_Duration_Temp"
{
"en" "Temporary"
"es" "Temporal"
"ru" "Временный"
"pl" "Tymczasowo"
"pt" "Temporário"
"de" "Zeitweilig"
}
"ListMenu_Option_Expire"
{
"en" "- Expires: "
"es" "- Expira en: "
"ru" "- Истекает: "
"pl" "- Wygasa: "
"pt" "- Expira: "
"de" "- Läuft ab: "
}
"ListMenu_Option_Expire_Perm"
{
"en" "Never"
"es" "Nunca"
"ru" "Никогда"
"pl" "Nigdy"
"pt" "Nunca"
"de" "Nie"
}
"ListMenu_Option_Expire_Time"
{
"#format" "{1:s}"
"en" "{1}"
"es" "{1}"
"ru" "{1}"
"pl" "{1}"
"pt" "{1}"
"de" "{1}"
}
"ListMenu_Option_Expire_Temp_Reconnect"
{
"en" "Reconnect"
"es" "Al reconectar"
"ru" "Перезаход"
"pl" "Ponowne połączenie"
"pt" "Reconectar"
"de" "Wiederverbinden"
}
"ListMenu_Option_Admin"
{
"#format" "{1:s}"
"en" "- Admin: {1}"
"es" "- Admin: {1}"
"ru" "- Админ: {1}"
"pl" "- Admin: {1}"
"pt" "- Admin: {1}"
"de" "- Admin: {1}"
}
"ListMenu_Option_Issue"
{
"#format" "{1:s}"
"en" "- Issued: {1}"
"es" "- Emitido: {1}"
"ru" "- Отключен: {1}"
"pl" "- Nadano: {1}"
"pt" "- Emitido: {1}"
"de" "- Gesperrt: {1}"
}
"ListMenu_Option_Reason"
{
"en" "- View Reason"
"es" "- Ver Razón"
"ru" "- Причина"
"pl" "- Zobacz powód"
"pt" "- Ver Motivo"
"de" "- Grund"
}
"ListMenu_Option_Reason_None"
{
"en" "- Reason: None"
"es" "- Razón: Ninguna"
"ru" "- Нет причины"
"pl" "- Powód: Brak"
"pt" "- Motivo: Nenhum"
"de" "- Kein Grund"
}
//---------------------------------------------------------------------------------
"ReasonPanel_Punishment_Mute"
{
"en" "Muted: "
"es" "Muteado: "
"ru" "Микрофон: "
"pl" "Wyciszono: "
"pt" "Emudecido: "
"de" "Voice-Chat: "
}
"ReasonPanel_Punishment_Gag"
{
"en" "Gagged: "
"es" "Gageado: "
"ru" "Чат: "
"pl" "Zakneblowano: "
"pt" "Amordaçado: "
"de" "Chat: "
}
"ReasonPanel_Perm"
{
"en" "Permanent"
"es" "Permanente"
"ru" "Навсегда"
"pl" "Permanentnie"
"pt" "Permanente"
"de" "Für immer"
}
"ReasonPanel_Time"
{
"#format" "{1:d}"
"en" "{1} Minutes"
"es" "{1} Minutos"
"ru" "{1} минут"
"pl" "{1} minut"
"pt" "{1} Minutos"
"de" "{1} Minuten"
}
"ReasonPanel_Temp"
{
"en" "Temporary"
"es" "Temporal"
"ru" "Временный"
"pl" "Tymczasowo"
"pt" "Temporário"
"de" "Zeitweihlig"
}
"ReasonPanel_Reason"
{
"#format" "{1:s}"
"en" "Reason: {1}"
"es" "Razón: {1}"
"ru" "Причина: {1}"
"pl" "Powód: {1}"
"pt" "Motivo: {1}"
"de" "Grund: {1}"
}
"ReasonPanel_Back"
{
"en" "Exit"
"es" "Salir"
"ru" "Выход"
"pl" "Wyjdź"
"pt" "Sair"
"de" "Ausgang"
}
//---------------------------------------------------------------------------------
"Temp muted player"
{
"#format" "{1:t}"
"en" "Muted {1}."
"es" "{1} Muteado."
"ru" "Игроку {1} отключен микрофон."
"pl" "Wyciszono {1}."
"pt" "{1} Emudecido."
"de" "Der Spieler {1} wurde im Voice-Chat gesperrt."
}
"Temp muted player reason"
{
"#format" "{1:t},{2:s}"
"en" "Muted {1} (reason: {2})."
"es" "{1} Muteado (razón: {2})."
"ru" "Игроку {1} отключен микрофон (причина: {2})."
"pl" "Wyciszono {1} (powód: {2})."
"pt" "{1} Emudecido (motivo: {2})."
"de" "Der Spieler {1} wurde im Voice-Chat gesperrt (Grund: {2}}."
}
"Temp gagged player"
{
"#format" "{1:t}"
"en" "Gagged {1}."
"es" "{1} Gageado."
"ru" "Игроку {1} отключен чат."
"pl" "Zakneblowano {1}."
"pt" "{1} Amordaçado."
"de" "Der Spieler {1} wurde im Chat gesperrt."
}
"Temp gagged player reason"
{
"#format" "{1:t},{2:s}"
"en" "Gagged {1} (reason: {2})."
"es" "{1} Gageado (razón: {2})."
"ru" "Игроку {1} отключен чат (причина: {2})."
"pl" "Zakneblowano {1} (powód: {2})."
"pt" "{1} Amordaçado (motivo: {2})."
"de" "Der Spieler {1} wurde im Chat gesperrt (Grund: {2}}."
}
"Temp silenced player"
{
"#format" "{1:t}"
"en" "Silenced {1}."
"es" "{1} Silenciado."
"ru" "Игроку {1} отключен чат и микрофон."
"pl" "Całkowicie wyciszono {1}."
"pt" "{1} Silenciado."
"de" "Der Spieler {1} wurde im Chat und im Voice-Chat gesperrt."
}
"Temp silenced player reason"
{
"#format" "{1:t},{2:s}"
"en" "Silenced {1} (reason: {2})."
"es" "{1} Silenciado (razón: {2})."
"ru" "Игроку {1} отключен чат и микрофон (причина: {2})."
"pl" "Całkowicie wyciszono {1} (powód: {2})."
"pt" "{1} Silenciado (motivo: {2})."
"de" "Der Spieler {1} wurde im Chat und im Voice-Chat gesperrt (Grund: {2}}."
}
//---------------------------------------------------------------------------------
"CommandComms_na"
{
"en" "Available only for players on server."
"es" "Sólo está disponible para los jugadores que están en el servidor"
"ru" "Доступно только для игроков на сервере."
"pl" "Dostępne tylko dla graczy na serwerze."
"pt" "Disponível apenas para os jogadores no servidor."
"de" "Es ist nur für die Spieler auf dem Server zugänglich."
}
"CommandComms_nb"
{
"en" "Your chat and voice isn't blocked."
"es" "Tu chat y tu voz no están bloqueados."
"ru" "У вас не заблокированы чат и микрофон."
"pl" "Nie zostałeś wyciszony ani zakneblowany."
"pt" "Seu chat de texto e voz e não estão bloqueados."
"de" "Sie sind im Chat und Voice-Chat nicht gesperrt."
}
//---------------------------------------------------------------------------------
"no access"
{
"en" "The punishment for the specified time is not allowed for you."
"es" "El castigo por tiempo especificado no está permitido para ti"
"ru" "Блокировка на указанное время недоступна для вас."
"pl" "Nie możesz nakładać kar na określony czas."
"pt" "O tempo de punição especificado não é permitido para você."
"de" "Die Sperre für festgelegte Zeit ist für Sie nicht zugänglich."
}
}

View File

@ -145,7 +145,7 @@ public MRESReturn:Hook_ProcessVoiceData(Address:pThis, Handle:hParams)
g_hClientMicTimers[client] = CreateTimer(0.3, Timer_ClientMicUsage, GetClientUserId(client));
}
if(g_hClientMicTimers[client] == INVALID_HANDLE)
if(g_hClientMicTimers[client] == INVALID_HANDLE && IsClientInGame(client))
g_hClientMicTimers[client] = CreateTimer(0.3, Timer_ClientMicUsage, GetClientUserId(client));
new bool:returnBool = true;
@ -167,7 +167,7 @@ public MRESReturn:CSGOVoicePost(client, Handle:hReturn)
g_hClientMicTimers[client] = CreateTimer(0.3, Timer_ClientMicUsage, GetClientUserId(client));
}
if(g_hClientMicTimers[client] == INVALID_HANDLE)
if(g_hClientMicTimers[client] == INVALID_HANDLE && IsClientInGame(client))
g_hClientMicTimers[client] = CreateTimer(0.3, Timer_ClientMicUsage, GetClientUserId(client));