entWatch4: fix includes, add EW_ClientHasItem
ReservedSlot: kick people with 0 idle time too, add back rule 4: alive non-donator, idle > 30, no item
This commit is contained in:
parent
73d60b1b5e
commit
601e772daf
@ -5,6 +5,7 @@
|
||||
#undef REQUIRE_PLUGIN
|
||||
#include <AFKManager>
|
||||
#include <unloze>
|
||||
#tryinclude <entWatch_core>
|
||||
#define REQUIRE_PLUGIN
|
||||
|
||||
#pragma semicolon 1
|
||||
@ -12,6 +13,7 @@
|
||||
|
||||
bool g_Plugin_AFKManager;
|
||||
bool g_Plugin_UNLOZE;
|
||||
bool g_Plugin_entWatch;
|
||||
|
||||
int g_Client_Reservation[MAXPLAYERS + 1] = {0, ...};
|
||||
|
||||
@ -38,6 +40,7 @@ public void OnAllPluginsLoaded()
|
||||
{
|
||||
g_Plugin_AFKManager = LibraryExists("AFKManager");
|
||||
g_Plugin_UNLOZE = LibraryExists("UNLOZE_ForumIntegration");
|
||||
g_Plugin_entWatch = LibraryExists("entWatch-core");
|
||||
|
||||
LogMessage("ReservedSlots capabilities:\nAFKManager: %s\nUNLOZE: %s\n",
|
||||
(g_Plugin_AFKManager ? "loaded" : "not loaded"),
|
||||
@ -50,6 +53,8 @@ public void OnLibraryAdded(const char[] name)
|
||||
g_Plugin_AFKManager = true;
|
||||
else if(StrEqual(name, "UNLOZE_ForumIntegration"))
|
||||
g_Plugin_UNLOZE = true;
|
||||
else if(StrEqual(name, "entWatch-core"))
|
||||
g_Plugin_entWatch = true;
|
||||
}
|
||||
|
||||
public void OnLibraryRemoved(const char[] name)
|
||||
@ -58,6 +63,8 @@ public void OnLibraryRemoved(const char[] name)
|
||||
g_Plugin_AFKManager = false;
|
||||
else if(StrEqual(name, "UNLOZE_ForumIntegration"))
|
||||
g_Plugin_UNLOZE = false;
|
||||
else if(StrEqual(name, "entWatch-core"))
|
||||
g_Plugin_entWatch = false;
|
||||
}
|
||||
|
||||
public void OnClientPostAdminCheck(int client)
|
||||
@ -149,15 +156,15 @@ public void AsyncHasSteamIDReservedSlotCallback(const char[] sSteam32ID, int Res
|
||||
|
||||
stock bool KickValidClient(const char[] sName, const char[] sSteam32ID, AdminId admin, int Immunity)
|
||||
{
|
||||
int HighestValue[4] = {0, ...};
|
||||
int HighestValueClient[4] = {0, ...};
|
||||
int HighestValue[3] = {-1, ...};
|
||||
int HighestValueClient[3] = {0, ...};
|
||||
|
||||
for(int client = 1; client <= MaxClients; client++)
|
||||
{
|
||||
if(!IsClientInGame(client) || IsFakeClient(client))
|
||||
continue;
|
||||
|
||||
int Donator = g_Client_Reservation[client];
|
||||
bool Donator = view_as<bool>(g_Client_Reservation[client]);
|
||||
int ConnectionTime = RoundToNearest(GetClientTime(client));
|
||||
|
||||
int IdleTime;
|
||||
@ -166,6 +173,12 @@ stock bool KickValidClient(const char[] sName, const char[] sSteam32ID, AdminId
|
||||
else // Fall back to highest connection time.
|
||||
IdleTime = ConnectionTime;
|
||||
|
||||
int HasItem;
|
||||
#if defined entWatch_core_included
|
||||
if(g_Plugin_entWatch)
|
||||
HasItem = EW_ClientHasItem(client);
|
||||
#endif
|
||||
|
||||
/* Spectators
|
||||
* Sort by idle time and also kick donators if IdleTime > 30
|
||||
*/
|
||||
@ -197,7 +210,7 @@ stock bool KickValidClient(const char[] sName, const char[] sSteam32ID, AdminId
|
||||
|
||||
/* Alive non-donator with IdleTime > 30
|
||||
* Sort by idle time and don't kick donators and item owners.
|
||||
*
|
||||
*/
|
||||
if(!Donator && IsPlayerAlive(client) && !HasItem)
|
||||
{
|
||||
if(IdleTime > 30 && IdleTime > HighestValue[2])
|
||||
@ -206,13 +219,13 @@ stock bool KickValidClient(const char[] sName, const char[] sSteam32ID, AdminId
|
||||
HighestValueClient[2] = client;
|
||||
}
|
||||
}
|
||||
* Alive non-donator with IdleTime > 30 */
|
||||
/* Alive non-donator with IdleTime > 30 */
|
||||
}
|
||||
|
||||
// Check if any condition was met in the correct order and perform kick
|
||||
for(int i = 0; i < sizeof(HighestValue); i++)
|
||||
{
|
||||
if(HighestValue[i])
|
||||
if(HighestValue[i] != -1)
|
||||
{
|
||||
ExecuteKickValidClient(HighestValueClient[i], sName, sSteam32ID, admin, Immunity);
|
||||
return true;
|
||||
|
@ -56,6 +56,7 @@ public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int erro
|
||||
|
||||
CreateNative("EW_GetItemCount", Native_GetItemCount);
|
||||
CreateNative("EW_GetItemData", Native_GetItemData);
|
||||
CreateNative("EW_ClientHasItem", Native_ClientHasItem);
|
||||
|
||||
RegPluginLibrary("entWatch-core");
|
||||
return APLRes_Success;
|
||||
@ -752,4 +753,34 @@ public int Native_GetItemData(Handle hPlugin, int numParams)
|
||||
}
|
||||
|
||||
return view_as<int>(g_hArray_Items.Get(index));
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public int Native_ClientHasItem(Handle hPlugin, int numParams)
|
||||
{
|
||||
int client = GetNativeCell(1);
|
||||
|
||||
if(client > MaxClients || client <= 0)
|
||||
{
|
||||
return ThrowNativeError(SP_ERROR_NATIVE, "Client is not valid.");
|
||||
}
|
||||
|
||||
if(!IsClientInGame(client))
|
||||
{
|
||||
ThrowNativeError(SP_ERROR_NATIVE, "Client is not in game.");
|
||||
}
|
||||
|
||||
for (int index; index < g_hArray_Items.Length; index++)
|
||||
{
|
||||
CItem item = g_hArray_Items.Get(index);
|
||||
|
||||
if (item.bClient && item.iClient == client)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -24,8 +24,8 @@
|
||||
|
||||
/* CLASSES */
|
||||
#include <basic>
|
||||
#include "../classes/CConfig.inc"
|
||||
#include "../classes/CItem.inc"
|
||||
#include "entWatch/CConfig.inc"
|
||||
#include "entWatch/CItem.inc"
|
||||
|
||||
public SharedPlugin __pl_entWatch_core =
|
||||
{
|
||||
@ -44,6 +44,7 @@ public SharedPlugin __pl_entWatch_core =
|
||||
{
|
||||
MarkNativeAsOptional("EW_GetItemCount");
|
||||
MarkNativeAsOptional("EW_GetItemData");
|
||||
MarkNativeAsOptional("EW_ClientHasItem");
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -51,6 +52,8 @@ native int EW_GetItemCount();
|
||||
|
||||
native CItem EW_GetItemData(int index);
|
||||
|
||||
native bool EW_ClientHasItem(int client);
|
||||
|
||||
forward void EW_OnClientItemDrop(int client, int index);
|
||||
forward void EW_OnClientItemDeath(int client, int index);
|
||||
forward void EW_OnClientItemPickup(int client, int index);
|
||||
@ -58,4 +61,4 @@ forward void EW_OnClientItemActivate(int client, int index);
|
||||
forward void EW_OnClientItemDisconnect(int client, int index);
|
||||
|
||||
forward Action EW_OnClientItemCanPickup(int client, int index);
|
||||
forward Action EW_OnClientItemCanActivate(int client, int index);
|
||||
forward Action EW_OnClientItemCanActivate(int client, int index);
|
||||
|
1
includes/entWatch
Symbolic link
1
includes/entWatch
Symbolic link
@ -0,0 +1 @@
|
||||
../entWatch4/scripting/include/entWatch
|
Loading…
Reference in New Issue
Block a user