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:
parent
d8ba114de3
commit
ef2c81e2d6
@ -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;
|
||||
|
@ -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);
|
||||
|
117
KnifeAlert/scripting/KnifeAlert.sp
Normal file
117
KnifeAlert/scripting/KnifeAlert.sp
Normal 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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
1
KnifeAlert/scripting/include/morecolors.inc
Symbolic link
1
KnifeAlert/scripting/include/morecolors.inc
Symbolic link
@ -0,0 +1 @@
|
||||
../../../includes/morecolors.inc
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
92
SaveLevel/configs/savelevel/ze_lila_panic_escape_v3_1.cfg
Normal file
92
SaveLevel/configs/savelevel/ze_lila_panic_escape_v3_1.cfg
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
@ -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"
|
||||
|
||||
|
5
immunityreserveslots/configs/irs_kicklist.ini
Normal file
5
immunityreserveslots/configs/irs_kicklist.ini
Normal 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.
|
1271
immunityreserveslots/scripting/immunityreserveslots_connect.sp
Normal file
1271
immunityreserveslots/scripting/immunityreserveslots_connect.sp
Normal file
File diff suppressed because it is too large
Load Diff
22
immunityreserveslots/scripting/include/connect.inc
Normal file
22
immunityreserveslots/scripting/include/connect.inc
Normal 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
|
||||
}
|
106
immunityreserveslots/scripting/include/donator.inc
Normal file
106
immunityreserveslots/scripting/include/donator.inc
Normal 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();
|
1
immunityreserveslots/scripting/include/entWatch.inc
Symbolic link
1
immunityreserveslots/scripting/include/entWatch.inc
Symbolic link
@ -0,0 +1 @@
|
||||
../../../includes/entWatch.inc
|
150
includes/entWatch.inc
Normal file
150
includes/entWatch.inc
Normal 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
|
0
sourcebans/configs/sourcebans/sb_admin_groups.cfg
Normal file
0
sourcebans/configs/sourcebans/sb_admin_groups.cfg
Normal file
0
sourcebans/configs/sourcebans/sb_admins.cfg
Normal file
0
sourcebans/configs/sourcebans/sb_admins.cfg
Normal file
84
sourcebans/configs/sourcebans/sourcebans.cfg
Normal file
84
sourcebans/configs/sourcebans/sourcebans.cfg
Normal 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"
|
||||
}
|
||||
}
|
66
sourcebans/configs/sourcebans/sourcecomms.cfg
Normal file
66
sourcebans/configs/sourcebans/sourcecomms.cfg
Normal 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.
|
||||
}
|
||||
}
|
62
sourcebans/scripting/include/sourcebans.inc
Normal file
62
sourcebans/scripting/include/sourcebans.inc
Normal 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!
|
103
sourcebans/scripting/include/sourcecomms.inc
Normal file
103
sourcebans/scripting/include/sourcecomms.inc
Normal 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");
|
||||
|
||||
}
|
383
sourcebans/scripting/sbchecker.sp
Normal file
383
sourcebans/scripting/sbchecker.sp
Normal 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;
|
||||
}
|
2570
sourcebans/scripting/sourcebans.sp
Normal file
2570
sourcebans/scripting/sourcebans.sp
Normal file
File diff suppressed because it is too large
Load Diff
3205
sourcebans/scripting/sourcecomms.sp
Normal file
3205
sourcebans/scripting/sourcecomms.sp
Normal file
File diff suppressed because it is too large
Load Diff
127
sourcebans/translations/sourcebans.phrases.txt
Normal file
127
sourcebans/translations/sourcebans.phrases.txt
Normal 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."
|
||||
}
|
||||
}
|
946
sourcebans/translations/sourcecomms.phrases.txt
Normal file
946
sourcebans/translations/sourcecomms.phrases.txt
Normal 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."
|
||||
}
|
||||
}
|
@ -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));
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user