Added python scripts for easier compiling

Fixed bunch of includes and a warnings
Added ip addresses for admins to status
KnifeAlert prints to everyone now if someone gets infected due to a knifed zombie
Fixed WeaponCleaner not registering weapons if somebody disconnects
Refactored custom-chatcolors to new syntax, added autoreplace and some fixes
Added GFLClan.ru support to immunityreservedslots
added nominate_removemap to mapchooser_extended and fixed a bug for recently played maps
This commit is contained in:
BotoX
2016-04-26 12:46:45 +02:00
parent 29855d6669
commit 11aefe731b
29 changed files with 1639 additions and 1331 deletions
@@ -123,9 +123,10 @@
#undef REQUIRE_PLUGIN
#include <donator>
#include <entWatch>
#include <GFLClanru>
#define REQUIRE_PLUGIN
#define PLUGIN_VERSION "2.0.9"
#define PLUGIN_VERSION "2.1.0"
// Toggle build here.
#define EXT_CBASE 0
@@ -154,6 +155,7 @@ new bool:b_lateLoad;
new bool:b_loaded;
new bool:b_useDonator;
new bool:b_useEntWatch;
new bool:b_useGFLClanru;
new bool:b_canKickSpec[MAXPLAYERS+1];
new g_HIPCount;
@@ -212,62 +214,62 @@ public OnPluginStart()
#if EXT_CONNECT
Format(desc, sizeof(desc), "%t", "irs_autopassword");
cvar_AutoPassword = CreateConVar("sm_irs_autopassword", "0", desc, FCVAR_PLUGIN, true, 0.0, true, 2.0);
cvar_AutoPassword = CreateConVar("sm_irs_autopassword", "0", desc, _, true, 0.0, true, 2.0);
Format(desc, sizeof(desc), "%t", "irs_rejectreason_enable");
cvar_RejectReasonEnable = CreateConVar("sm_irs_rejectreason_enable", "0", desc, FCVAR_PLUGIN, true, 0.0, true, 1.0);
cvar_RejectReasonEnable = CreateConVar("sm_irs_rejectreason_enable", "0", desc, _, true, 0.0, true, 1.0);
Format(desc, sizeof(desc), "%t", "irs_rejectreason");
cvar_RejectReason = CreateConVar("sm_irs_rejectreason", "default", desc, FCVAR_PLUGIN);
cvar_RejectReason = CreateConVar("sm_irs_rejectreason", "default", desc, _);
cvar_GameTypeMVM = FindConVar("tf_gamemode_mvm");
#endif
Format(desc, sizeof(desc), "%t", "irs_version");
CreateConVar("sm_irs_version", PLUGIN_VERSION, desc, FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
CreateConVar("sm_irs_version", PLUGIN_VERSION, desc, FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
Format(desc, sizeof(desc), "%t", "irs_kicktype");
cvar_KickType = CreateConVar("sm_irs_kicktype", "0", desc, FCVAR_PLUGIN, true, 0.0, true, 3.0);
cvar_KickType = CreateConVar("sm_irs_kicktype", "0", desc, _, true, 0.0, true, 3.0);
Format(desc, sizeof(desc), "%t", "irs_kickreason");
cvar_KickReason = CreateConVar("sm_irs_kickreason", "default", desc, FCVAR_PLUGIN);
cvar_KickReason = CreateConVar("sm_irs_kickreason", "default", desc, _);
Format(desc, sizeof(desc), "%t", "irs_kickreason_immunity");
cvar_KickReasonImmunity = CreateConVar("sm_irs_kickreason_immunity", "default", desc, FCVAR_PLUGIN);
cvar_KickReasonImmunity = CreateConVar("sm_irs_kickreason_immunity", "default", desc, _);
Format(desc, sizeof(desc), "%t", "irs_kicklist_file");
cvar_KickListFile = CreateConVar("sm_irs_kicklist_file", "default", desc, FCVAR_PLUGIN);
cvar_KickListFile = CreateConVar("sm_irs_kicklist_file", "default", desc, _);
Format(desc, sizeof(desc), "%t", "irs_kicklist_mode");
cvar_KickListMode = CreateConVar("sm_irs_kicklist_mode", "0", desc, FCVAR_PLUGIN, true, 0.0, true, 2.0);
cvar_KickListMode = CreateConVar("sm_irs_kicklist_mode", "0", desc, _, true, 0.0, true, 2.0);
Format(desc, sizeof(desc), "%t", "irs_log");
cvar_Logging = CreateConVar("sm_irs_log", "0", desc, FCVAR_PLUGIN, true, 0.0, true, 2.0);
cvar_Logging = CreateConVar("sm_irs_log", "0", desc, _, true, 0.0, true, 2.0);
Format(desc, sizeof(desc), "%t", "irs_immunity");
cvar_Immunity = CreateConVar("sm_irs_immunity", "1", desc, FCVAR_PLUGIN, true, 0.0, true, 2.0);
cvar_Immunity = CreateConVar("sm_irs_immunity", "1", desc, _, true, 0.0, true, 2.0);
Format(desc, sizeof(desc), "%t", "irs_kickspecfirst");
cvar_Spec = CreateConVar("sm_irs_kickspecfirst", "1", desc, FCVAR_PLUGIN, true, 0.0, true, 1.0);
cvar_Spec = CreateConVar("sm_irs_kickspecfirst", "1", desc, _, true, 0.0, true, 1.0);
Format(desc, sizeof(desc), "%t", "irs_kickspecdelay");
cvar_SpecKickDelay = CreateConVar("sm_irs_kickspecdelay", "0", desc, FCVAR_PLUGIN, true, 0.0);
cvar_SpecKickDelay = CreateConVar("sm_irs_kickspecdelay", "0", desc, _, true, 0.0);
Format(desc, sizeof(desc), "%t", "irs_donator_support");
cvar_Donator = CreateConVar("sm_irs_donator_support", "0", desc, FCVAR_PLUGIN, true, 0.0, true, 1.0);
cvar_Donator = CreateConVar("sm_irs_donator_support", "0", desc, _, true, 0.0, true, 1.0);
Format(desc, sizeof(desc), "%t", "irs_donator_immunity");
cvar_DonatorImmunity = CreateConVar("sm_irs_donator_immunity", "0", desc, FCVAR_PLUGIN, true, 0.0, true, 99.0);
cvar_DonatorImmunity = CreateConVar("sm_irs_donator_immunity", "0", desc, _, true, 0.0, true, 99.0);
Format(desc, sizeof(desc), "%t", "irs_highimmunitylimit");
cvar_HighImmunityLimit = CreateConVar("sm_irs_highimmunitylimit", "0", desc, FCVAR_PLUGIN, true, 0.0);
cvar_HighImmunityLimit = CreateConVar("sm_irs_highimmunitylimit", "0", desc, _, true, 0.0);
Format(desc, sizeof(desc), "%t", "irs_highimmunityvalue");
cvar_HighImmunityValue = CreateConVar("sm_irs_highimmunityvalue", "0", desc, FCVAR_PLUGIN, true, 0.0);
cvar_HighImmunityValue = CreateConVar("sm_irs_highimmunityvalue", "0", desc, _, true, 0.0);
Format(desc, sizeof(desc), "%t", "irs_keepbalance");
cvar_KeepBalance = CreateConVar("sm_irs_keepbalance", "0", desc, FCVAR_PLUGIN, true, 0.0, true, 1.0);
cvar_KeepBalance = CreateConVar("sm_irs_keepbalance", "0", desc, _, true, 0.0, true, 1.0);
Format(desc, sizeof(desc), "%t", "irs_kicklist_reload");
RegServerCmd("sm_irs_kicklist_reload", Command_KickListReload, desc);
@@ -378,6 +380,7 @@ public OnAllPluginsLoaded()
{
b_useDonator = LibraryExists("donator.core");
b_useEntWatch = LibraryExists("entWatch");
b_useGFLClanru = LibraryExists("GFLClanru");
new Handle:h_Plugin;
new Handle:arr_Plugins = CreateArray(64);
@@ -427,6 +430,10 @@ public OnLibraryRemoved(const String:name[])
{
b_useEntWatch = false;
}
else if (StrEqual(name, "GFLClanru"))
{
b_useGFLClanru = false;
}
}
public OnLibraryAdded(const String:name[])
@@ -439,6 +446,10 @@ public OnLibraryAdded(const String:name[])
{
b_useEntWatch = true;
}
else if (StrEqual(name, "GFLClanru"))
{
b_useGFLClanru = true;
}
}
IRS_RemovePlugin(const String:plugin_name[])
@@ -492,7 +503,7 @@ GetRealClientCount()
return ClientCount;
}
public bool:OnClientPreConnectEx(const String:name[], String:password[255], const String:ip[], const String:steamID[], String:rejectReason[255])
public EConnect OnClientPreConnectEx(const String:name[], String:password[255], const String:ip[], const String:steamID[], String:rejectReason[255])
{
new AdminId:AdminID = FindAdminByIdentity(AUTHMETHOD_STEAM, steamID);
@@ -517,13 +528,13 @@ public bool:OnClientPreConnectEx(const String:name[], String:password[255], cons
if (!isMVM && GetClientCount(false) < MaxClients)
{
//LogToFileEx(g_LogFilePath, "[DEBUG] Game is not full or MVM game mode is disabled");
return true;
return k_OnClientPreConnectEx_Accept;
}
if (isMVM && GetRealClientCount() < MAX_CLIENTS_MVM)
{
//LogToFileEx(g_LogFilePath, "[DEBUG] Game is MVM but there's still room available (%d clients connected)", GetRealClientCount());
return true;
return k_OnClientPreConnectEx_Accept;
}
if (GetConVarInt(cvar_KickListMode) == 2)
@@ -539,11 +550,11 @@ public bool:OnClientPreConnectEx(const String:name[], String:password[255], cons
{
Format(rejectReason, sizeof(rejectReason), "%t", "IRS Reject Reason");
}
return false;
return k_OnClientPreConnectEx_Reject;
}
else
{
return true;
return k_OnClientPreConnectEx_Accept;
}
}
}
@@ -562,7 +573,7 @@ public bool:OnClientPreConnectEx(const String:name[], String:password[255], cons
if (IRS_KickValidClient(AdminID, name, steamID, ImmunityLevel, isDonator))
{
//LogToFileEx(g_LogFilePath, "[DEBUG] Plugin has made successful kick and will now allow client to connect");
return true;
return k_OnClientPreConnectEx_Accept;
}
else if (GetConVarInt(cvar_RejectReasonEnable) || isMVM)
{
@@ -572,7 +583,7 @@ public bool:OnClientPreConnectEx(const String:name[], String:password[255], cons
Format(rejectReason, sizeof(rejectReason), "%t", "IRS Reject Reason");
}
//LogToFileEx(g_LogFilePath, "[DEBUG] No slot for connecting client, refusing connection (rejection mode)");
return false;
return k_OnClientPreConnectEx_Reject;
}
//else
//{
@@ -588,12 +599,56 @@ public bool:OnClientPreConnectEx(const String:name[], String:password[255], cons
{
Format(rejectReason, sizeof(rejectReason), "%t", "IRS Reject Reason");
}
return false;
return k_OnClientPreConnectEx_Reject;
}
if (b_useGFLClanru)
{
new Handle:pack = CreateDataPack();
WritePackString(pack, name);
AsyncHasSteamIDReservedSlot(steamID, AsyncHasSteamIDReservedSlotCallback, pack);
return k_OnClientPreConnectEx_Async;
}
//LogToFileEx(g_LogFilePath, "[DEBUG] End of preconnection code");
return true;
return k_OnClientPreConnectEx_Accept;
}
public void AsyncHasSteamIDReservedSlotCallback(const char[] sSteam32ID, int Result, any Data)
{
// Slot free'd up while waiting or doesn't have a reserved slot?
if(GetClientCount(false) < MaxClients || !Result)
{
ClientPreConnectEx(sSteam32ID, k_OnClientPreConnectEx_Accept, "");
return;
}
new String:name[MAX_NAME_LENGTH];
ResetPack(Data);
ReadPackString(Data, name, sizeof(name));
if (IRS_KickValidClient(INVALID_ADMIN_ID, name, sSteam32ID, 0, true))
{
//LogToFileEx(g_LogFilePath, "[DEBUG] Plugin has made successful kick and will now allow client to connect");
ClientPreConnectEx(sSteam32ID, k_OnClientPreConnectEx_Accept, "");
return;
}
else if (GetConVarInt(cvar_RejectReasonEnable) || isMVM)
{
char rejectReason[255];
GetConVarString(cvar_RejectReason, rejectReason, sizeof(rejectReason));
if (StrEqual(rejectReason, "default", false))
{
Format(rejectReason, sizeof(rejectReason), "%t", "IRS Reject Reason");
}
//LogToFileEx(g_LogFilePath, "[DEBUG] No slot for connecting client, refusing connection (rejection mode)");
ClientPreConnectEx(sSteam32ID, k_OnClientPreConnectEx_Reject, rejectReason);
return;
}
ClientPreConnectEx(sSteam32ID, k_OnClientPreConnectEx_Accept, "");
}
#endif
@@ -772,7 +827,7 @@ bool:IRS_KickValidClient(const AdminId:ConnectingClientAdminID, const String:Con
}
decl String:PlayerAuth[32];
GetClientAuthString(i, PlayerAuth, sizeof(PlayerAuth));
GetClientAuthId(i, AuthId_Steam2, PlayerAuth, sizeof(PlayerAuth));
new AdminId:PlayerAdmin = FindAdminByIdentity(AUTHMETHOD_STEAM, PlayerAuth)
ClientImmunity[i] = GetAdminImmunityLevel(PlayerAdmin);
@@ -824,17 +879,17 @@ bool:IRS_KickValidClient(const AdminId:ConnectingClientAdminID, const String:Con
continue;
}
if (b_useEntWatch && IsClientInGame(i) && entWatch_HasSpecialItem(i))
{
if (Logging == 1)
{
IRS_LogClient(i, clientTeam[i], ClientImmunity[i]);
}
continue;
}
if (IsClientInGame(i))
{
if (b_useEntWatch && entWatch_HasSpecialItem(i))
{
if (Logging == 1)
{
IRS_LogClient(i, clientTeam[i], ClientImmunity[i]);
}
continue;
}
switch (KickType)
{
case 0:
@@ -964,7 +1019,7 @@ bool:IRS_KickValidClient(const AdminId:ConnectingClientAdminID, const String:Con
if (useKickList)
{
decl String:PlayerAuth[32];
GetClientAuthString(i, PlayerAuth, sizeof(PlayerAuth));
GetClientAuthId(i, AuthId_Steam2, PlayerAuth, sizeof(PlayerAuth));
if (FindStringInArray(arr_KickListIDs, PlayerAuth) == -1)
{
if (Logging == 1)
@@ -1091,7 +1146,7 @@ bool:IRS_KickValidClient(const AdminId:ConnectingClientAdminID, const String:Con
decl String:KickName[32];
decl String:KickAuthid[32];
GetClientName(KickTarget, KickName, sizeof(KickName));
GetClientAuthString(KickTarget, KickAuthid, sizeof(KickAuthid));
GetClientAuthId(KickTarget, AuthId_Steam2, KickAuthid, sizeof(KickAuthid));
if (!immunityKick)
{
@@ -1,11 +1,23 @@
#if defined _connect_included
#endinput
#if defined _Connect_Included
#endinput
#endif
#define _connect_included
#define _Connect_Included
forward bool:OnClientPreConnectEx(const String:name[], String:password[255], const String:ip[], const String:steamID[], String:rejectReason[255]);
enum EConnect
{
k_OnClientPreConnectEx_Reject = 0,
k_OnClientPreConnectEx_Accept = 1,
k_OnClientPreConnectEx_Async = -1
};
public Extension:__ext_Connect =
forward EConnect OnClientPreConnectEx(const char[] sName, char sPassword[255], const char[] sIP, const char[] sSteam32ID, char sRejectReason[255]);
native bool ClientPreConnectEx(const char[] sSteam32ID, EConnect RetVal, char sRejectReason[255]);
/**
* Do not edit below this line!
*/
public Extension __ext_connect =
{
name = "Connect",
file = "connect.ext",
@@ -19,4 +31,11 @@ public Extension:__ext_Connect =
#else
required = 0,
#endif
};
#if !defined REQUIRE_EXTENSIONS
public __ext_connect_SetNTVOptional()
{
MarkNativeAsOptional("ClientPreConnectEx");
}
#endif
@@ -0,0 +1,115 @@
"Phrases"
{
"irs_version"
{
"en" "Immunity Reserve Slots version."
}
"irs_kicktype"
{
"en" "Who to kick when a valid player is found (0 - random, 1 - highest ping, 2 - highest time, 3 - lowest time)."
}
"irs_kickreason"
{
"en" "Message to display when a client is kicked for a normal reserve slot (\"default\" - uses translation phrase, anything else uses what you enter)."
}
"irs_rejectreason_enable"
{
"en" "Enable reject reason with the Connect extension (0 - disable, 1 - enable)."
}
"irs_rejectreason"
{
"en" "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)."
}
"irs_kickreason_immunity"
{
"en" "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)."
}
"irs_log"
{
"en" "Enable logging (0 - disable, 1 - enable highly verbose logs, 2 - only log the disconnected and connecting users in regular SM logs)."
}
"irs_immunity"
{
"en" "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)."
}
"irs_kickspecfirst"
{
"en" "When enabled spectators are always kicked first before anyone else (0 - disable, all players are taken into account for kicking, 1 - enable)."
}
"irs_kickspecdelay"
{
"en" "The delay, in seconds, to kick spectators (0 - instant, any other value gives spectators a grace of xx seconds until they can be kicked)."
}
"irs_donator_support"
{
"en" "When enabled along with the donators plugin, donaotrs will be allowed to connect (0 - disable, 1 - allow donators to connect)."
}
"irs_donator_immunity"
{
"en" "The immunity value to give to donators, if required for immunity checks within IRS."
}
"irs_highimmunitylimit"
{
"en" "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)."
}
"irs_highimmunityvalue"
{
"en" "This value and over are players who are considered to have high immunity (0 - disable, more than 0 to set the high immunity value)."
}
"irs_keepbalance"
{
"en" "This tries to kick people in such a way to prevent autobalance (0 - disable, 1 - enable)."
}
"irs_autopassword"
{
"en" "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)."
}
"irs_kicklist_file"
{
"en" "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\")."
}
"irs_kicklist_mode"
{
"en" "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)."
}
"irs_kicklist_reload"
{
"en" "Reloads the kick list."
}
"IRS Kick Log"
{
"#format" "{1:s},{2:s},{3:s},{4:s}"
"en" "\"{1}\" ({2}) connected, \"{3}\" ({4}) was kicked."
}
"IRS Kick Reason"
{
"en" "Slot reserved."
}
"IRS Reject Reason"
{
"en" "No reserve slots available."
}
"IRS Kick List Reloaded"
{
"en" "[SM] Immunity Reserve Slots kick list reloaded."
}
"IRS Kick Reason Immunity"
{
"en" "Slot reserved - low immunity."
}
"IRS Plugin Error"
{
"#format" "{1:s}"
"en" "Unloaded plugin {1} and moved to disabled folder, when installing IRS please do not use any other reserve slot plugins."
}
"IRS Kick List Path Error"
{
"#format" "{1:s}"
"en" "Path to kick list file \"{1}\" not found or unreadable, disabling kick list mode until corrected."
}
"IRS Donator Plugin Error"
{
"en" "Unable to load the donator plugin, please check your plugins folder for the donator plugin or any other errors in your error logs."
}
}