diff --git a/_entWatch4/scripting/entWatch-core.sp b/_entWatch4/scripting/entWatch-core.sp index 2715f186..4ff5e101 100644 --- a/_entWatch4/scripting/entWatch-core.sp +++ b/_entWatch4/scripting/entWatch-core.sp @@ -11,12 +11,13 @@ #include #include +#include #include /* BOOLS */ bool g_bLate; -/* HANDLES */ +/* ARRAYS */ ArrayList g_hArray_Items; ArrayList g_hArray_Config; @@ -70,11 +71,12 @@ public void OnPluginStart() g_hFwd_OnClientItemCanPickup = CreateGlobalForward("EW_OnClientItemCanPickup", ET_Hook, Param_Array, Param_Cell, Param_Cell); g_hFwd_OnClientItemCanActivate = CreateGlobalForward("EW_OnClientItemCanActivate", ET_Hook, Param_Array, Param_Cell, Param_Cell); - + g_hArray_Items = new ArrayList(512); g_hArray_Config = new ArrayList(512); HookEvent("player_death", OnClientDeath); + HookEvent("round_start", OnRoundStart); if (g_bLate) { @@ -100,12 +102,13 @@ public void OnMapStart() char sCurrentMap[128]; GetCurrentMap(sCurrentMap, sizeof(sCurrentMap)); + String_ToLower(sCurrentMap, sCurrentMap, sizeof(sCurrentMap)); char sFilePathDefault[PLATFORM_MAX_PATH]; char sFilePathOverride[PLATFORM_MAX_PATH]; - Format(sFilePathDefault, sizeof(sFilePathDefault), "cfg/sourcemod/entwatch/%s.cfg", sCurrentMap); - Format(sFilePathOverride, sizeof(sFilePathOverride), "cfg/sourcemod/entwatch/%s_override.cfg", sCurrentMap); + BuildPath(Path_SM, sFilePathDefault, sizeof(sFilePathDefault), "configs/entwatch/%s.cfg", sCurrentMap); + BuildPath(Path_SM, sFilePathOverride, sizeof(sFilePathOverride), "configs/entwatch/%s.override.cfg", sCurrentMap); KeyValues hConfig = new KeyValues("items"); @@ -159,6 +162,24 @@ public void OnMapStart() return; } +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + if (g_hArray_Items.Length) + { + for (int index; index < g_hArray_Items.Length; index++) + { + any itemArray[items]; + g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + + if (itemArray[item_owned] && itemArray[item_owner] >= 0) + g_hArray_Items.Erase(index); + } + } +} + //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- @@ -212,7 +233,7 @@ stock bool RegisterItem(any[] itemArray, int entity) { if (itemArray[item_weaponid] && itemArray[item_weaponid] == Entity_GetHammerId(entity)) { - if (!itemArray[item_weapon]) + if (!itemArray[item_weapon] && (Entity_GetOwner(entity) == INVALID_ENT_REFERENCE)) { itemArray[item_weapon] = entity; return true; @@ -301,16 +322,17 @@ public void OnClientPutInServer(int client) //---------------------------------------------------------------------------------------------------- public void OnClientDisconnect(int client) { - if (!IsFakeClient(client) && g_hArray_Items.Length) + if (!IsFakeClient(client) && g_hArray_Items.Length) { for (int index; index < g_hArray_Items.Length; index++) { any itemArray[items]; g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); - if (itemArray[item_owner] && itemArray[item_owner] == client) + if (itemArray[item_owned] && itemArray[item_owner] == client) { - itemArray[item_owner] = 0; + itemArray[item_owner] = INVALID_ENT_REFERENCE; + itemArray[item_owned] = false; Call_StartForward(g_hFwd_OnClientItemDisconnect); Call_PushArray(itemArray, sizeof(itemArray)); @@ -329,7 +351,7 @@ public void OnClientDisconnect(int client) //---------------------------------------------------------------------------------------------------- public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast) { - int client = GetClientOfUserId(hEvent.GetInt("userid")) + int client = GetClientOfUserId(hEvent.GetInt("userid")); if (Client_IsValid(client) && !IsFakeClient(client) && g_hArray_Items.Length) { @@ -338,9 +360,10 @@ public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast any itemArray[items]; g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); - if (itemArray[item_owner] && itemArray[item_owner] == client) + if (itemArray[item_owned] && itemArray[item_owner] == client) { - itemArray[item_owner] = 0; + itemArray[item_owner] = INVALID_ENT_REFERENCE; + itemArray[item_owned] = false; Call_StartForward(g_hFwd_OnClientItemDeath); Call_PushArray(itemArray, sizeof(itemArray)); @@ -369,6 +392,7 @@ public Action OnWeaponPickup(int client, int weapon) if (itemArray[item_weapon] && itemArray[item_weapon] == weapon) { itemArray[item_owner] = client; + itemArray[item_owned] = true; Call_StartForward(g_hFwd_OnClientItemPickup); Call_PushArray(itemArray, sizeof(itemArray)); @@ -397,7 +421,8 @@ public Action OnWeaponDrop(int client, int weapon) if (itemArray[item_weapon] && itemArray[item_weapon] == weapon) { - itemArray[item_owner] = 0; + itemArray[item_owner] = INVALID_ENT_REFERENCE; + itemArray[item_owned] = false; Call_StartForward(g_hFwd_OnClientItemDrop); Call_PushArray(itemArray, sizeof(itemArray)); @@ -419,6 +444,10 @@ public Action OnButtonPress(int button, int client) { if (Client_IsValid(client) && Entity_IsValid(button) && g_hArray_Items.Length) { + if (HasEntProp(button, Prop_Data, "m_bLocked") && + GetEntProp(button, Prop_Data, "m_bLocked")) + return Plugin_Handled; + for (int index; index < g_hArray_Items.Length; index++) { any itemArray[items]; @@ -426,7 +455,7 @@ public Action OnButtonPress(int button, int client) if (itemArray[item_button] && itemArray[item_button] == button) { - if (itemArray[item_owner] && itemArray[item_owner] == client) + if (itemArray[item_owned] && itemArray[item_owner] == client) { Action aResult; Call_StartForward(g_hFwd_OnClientItemCanActivate); @@ -574,7 +603,7 @@ public int Native_GetItemArray(Handle hPlugin, int numParams) int index = GetNativeCell(1); int size = GetNativeCell(3); - + g_hArray_Items.GetArray(index, itemArray, size); SetNativeArray(2, itemArray, size); diff --git a/_entWatch4/scripting/entWatch-interface.sp b/_entWatch4/scripting/entWatch-interface.sp index 7031deee..d110d7ec 100644 --- a/_entWatch4/scripting/entWatch-interface.sp +++ b/_entWatch4/scripting/entWatch-interface.sp @@ -41,7 +41,7 @@ public void OnGameFrame() if (itemArray[item_display] & DISPLAY_HUD) { - if (itemArray[item_owner] && Client_IsValid(itemArray[item_owner])) + if (itemArray[item_owned] && itemArray[item_owner] >= 0) { switch(itemArray[item_mode]) { diff --git a/_entWatch4/scripting/entWatch-restrictions.sp b/_entWatch4/scripting/entWatch-restrictions.sp index 80bc70ee..8345672b 100644 --- a/_entWatch4/scripting/entWatch-restrictions.sp +++ b/_entWatch4/scripting/entWatch-restrictions.sp @@ -5,8 +5,8 @@ // Description: Handle the restrictions of [entWatch] // //==================================================================================================== -#include #include +#include #pragma newdecls required @@ -20,14 +20,14 @@ Handle g_hFwd_OnClientRestricted; Handle g_hFwd_OnClientUnrestricted; /* COOKIES */ -Handle g_hCookie_RestrictedIssued; -Handle g_hCookie_RestrictedLength; -Handle g_hCookie_RestrictedExpire; +Handle g_hCookie_RestrictIssued; +Handle g_hCookie_RestrictLength; +Handle g_hCookie_RestrictExpire; /* INTERGERS */ -int g_iRestrictedIssued[MAXPLAYERS+1]; -int g_iRestrictedLength[MAXPLAYERS+1]; -int g_iRestrictedExpire[MAXPLAYERS+1]; +int g_iRestrictIssued[MAXPLAYERS+1]; +int g_iRestrictLength[MAXPLAYERS+1]; +int g_iRestrictExpire[MAXPLAYERS+1]; //---------------------------------------------------------------------------------------------------- // Purpose: @@ -64,9 +64,9 @@ public void OnPluginStart() g_hFwd_OnClientRestricted = CreateGlobalForward("EW_OnClientRestricted", ET_Ignore, Param_Cell, Param_Cell, Param_Cell); g_hFwd_OnClientUnrestricted = CreateGlobalForward("EW_OnClientUnrestricted", ET_Ignore, Param_Cell, Param_Cell); - g_hCookie_RestrictedIssued = RegClientCookie("EW_RestrictedIssued", "", CookieAccess_Private); - g_hCookie_RestrictedLength = RegClientCookie("EW_RestrictedLength", "", CookieAccess_Private); - g_hCookie_RestrictedExpire = RegClientCookie("EW_RestrictedExpire", "", CookieAccess_Private); + g_hCookie_RestrictIssued = RegClientCookie("EW_RestrictIssued", "", CookieAccess_Private); + g_hCookie_RestrictLength = RegClientCookie("EW_RestrictLength", "", CookieAccess_Private); + g_hCookie_RestrictExpire = RegClientCookie("EW_RestrictExpire", "", CookieAccess_Private); RegAdminCmd("sm_eban", Command_ClientRestrict, ADMFLAG_BAN); RegAdminCmd("sm_eunban", Command_ClientUnrestrict, ADMFLAG_UNBAN); @@ -77,9 +77,9 @@ public void OnPluginStart() //---------------------------------------------------------------------------------------------------- public void OnClientCookiesCached(int client) { - g_iRestrictedIssued[client] = GetClientCookieInt(client, g_hCookie_RestrictedIssued); - g_iRestrictedLength[client] = GetClientCookieInt(client, g_hCookie_RestrictedLength); - g_iRestrictedExpire[client] = GetClientCookieInt(client, g_hCookie_RestrictedExpire); + g_iRestrictIssued[client] = GetClientCookieInt(client, g_hCookie_RestrictIssued); + g_iRestrictLength[client] = GetClientCookieInt(client, g_hCookie_RestrictLength); + g_iRestrictExpire[client] = GetClientCookieInt(client, g_hCookie_RestrictExpire); } //---------------------------------------------------------------------------------------------------- @@ -87,9 +87,9 @@ public void OnClientCookiesCached(int client) //---------------------------------------------------------------------------------------------------- public void OnClientDisconnect(int client) { - g_iRestrictedIssued[client] = 0; - g_iRestrictedLength[client] = 0; - g_iRestrictedExpire[client] = 0; + g_iRestrictIssued[client] = 0; + g_iRestrictLength[client] = 0; + g_iRestrictExpire[client] = 0; } //---------------------------------------------------------------------------------------------------- @@ -186,13 +186,13 @@ stock bool ClientRestrict(int client, int target, int length) int second = length * 60; int expire = issued + second; - g_iRestrictedIssued[target] = issued; - g_iRestrictedLength[target] = length; - g_iRestrictedExpire[target] = expire; + g_iRestrictIssued[target] = issued; + g_iRestrictLength[target] = length; + g_iRestrictExpire[target] = expire; - SetClientCookieInt(target, g_hCookie_RestrictedIssued, issued); - SetClientCookieInt(target, g_hCookie_RestrictedLength, length); - SetClientCookieInt(target, g_hCookie_RestrictedExpire, expire); + SetClientCookieInt(target, g_hCookie_RestrictIssued, issued); + SetClientCookieInt(target, g_hCookie_RestrictLength, length); + SetClientCookieInt(target, g_hCookie_RestrictExpire, expire); Call_StartForward(g_hFwd_OnClientRestricted); Call_PushCell(client); @@ -211,13 +211,13 @@ stock bool ClientUnrestrict(int client, int target) if (!Client_IsValid(client) || !Client_IsValid(target) || !AreClientCookiesCached(target) || !ClientRestricted(target)) return false; - g_iRestrictedIssued[target] = 0; - g_iRestrictedLength[target] = 0; - g_iRestrictedExpire[target] = 0; + g_iRestrictIssued[target] = 0; + g_iRestrictLength[target] = 0; + g_iRestrictExpire[target] = 0; - SetClientCookieInt(target, g_hCookie_RestrictedIssued, 0); - SetClientCookieInt(target, g_hCookie_RestrictedLength, 0); - SetClientCookieInt(target, g_hCookie_RestrictedExpire, 0); + SetClientCookieInt(target, g_hCookie_RestrictIssued, 0); + SetClientCookieInt(target, g_hCookie_RestrictLength, 0); + SetClientCookieInt(target, g_hCookie_RestrictExpire, 0); Call_StartForward(g_hFwd_OnClientUnrestricted); Call_PushCell(client); @@ -240,11 +240,11 @@ stock bool ClientRestricted(int client) return true; //Permanent restriction.. - if (g_iRestrictedExpire[client] && g_iRestrictedLength[client] == 0) + if (g_iRestrictExpire[client] && g_iRestrictLength[client] == 0) return true; //Limited restriction.. - if (g_iRestrictedExpire[client] && g_iRestrictedExpire[client] >= GetTime()) + if (g_iRestrictExpire[client] && g_iRestrictExpire[client] >= GetTime()) return true; return false; diff --git a/_entWatch4/scripting/include/entWatch.inc b/_entWatch4/scripting/include/entWatch.inc index 9acbde25..de02b382 100644 --- a/_entWatch4/scripting/include/entWatch.inc +++ b/_entWatch4/scripting/include/entWatch.inc @@ -14,6 +14,7 @@ enum items String:item_short[32], String:item_color[32], String:item_filter[32], + bool:item_owned, item_buttonid, item_weaponid, item_triggerid, @@ -27,263 +28,4 @@ enum items item_maxuses, item_nextuse, item_cooldown, -}; - -/* -methodmap CItem < Basic -{ - public CItem() - { - Basic myclass = new Basic(); - - myclass.SetHandle("hConfig", INVALID_HANDLE); - myclass.SetInt("iOwner", INVALID_ENT_REFERENCE); - myclass.SetInt("iButton", INVALID_ENT_REFERENCE); - myclass.SetInt("iWeapon", INVALID_ENT_REFERENCE); - myclass.SetInt("iTrigger", INVALID_ENT_REFERENCE); - myclass.SetInt("iLastActivation", 0); - myclass.SetInt("iActivations", 0); - - return myclass; - } - - property CConfig hConfig - { - public get() - { - return this.GetHandle("hConfig"); - } - public set(CConfig value) - { - this.SetHandle("hConfig", value); - } - } - - property int iOwner - { - public get() - { - return this.GetInt("iOwner"); - } - public set(int value) - { - this.SetInt("iOwner", value); - } - } - - property int iButton - { - public get() - { - return this.GetInt("iButton"); - } - public set(int value) - { - this.SetInt("iButton", value); - } - } - - property int iWeapon - { - public get() - { - return this.GetInt("iWeapon"); - } - public set(int value) - { - this.SetInt("iWeapon", value); - } - } - - property int iTrigger - { - public get() - { - return this.GetInt("iTrigger"); - } - public set(int value) - { - this.SetInt("iTrigger", value); - } - } - - property int iLastActivation - { - public get() - { - return this.GetInt("iLastActivation"); - } - public set(int value) - { - this.SetInt("iLastActivation", value); - } - } - - property int iActivations - { - public get() - { - return this.GetInt("iActivations"); - } - public set(int value) - { - this.SetInt("iActivations", value); - } - } -} - -methodmap CConfig < Basic -{ - public CConfig() - { - Basic myclass = new Basic(); - - myclass.SetString("sName", ""); - myclass.SetString("sShort", ""); - myclass.SetString("sColor", ""); - myclass.SetString("sFilter", ""); - - myclass.SetInt("iButtonID", 0); - myclass.SetInt("iWeaponID", 0); - myclass.SetInt("iTriggerID", 0); - myclass.SetInt("iDisplay", 0); - myclass.SetInt("iMode", 0); - myclass.SetInt("iCooldown", 0); - myclass.SetInt("iMaxActivations", 0); - - return myclass; - } - - property char sName - { - public get() - { - return this.GetString("sName"); - } - public set(char[] value) - { - this.SetString("sName", value); - } - } - - property char sShort - { - public get() - { - return this.GetString("sShort"); - } - public set(char[] value) - { - this.SetString("sShort", value); - } - } - - property char sColor - { - public get() - { - return this.GetString("sColor"); - } - public set(char[] value) - { - this.SetString("sColor", value); - } - } - - property char sFilter - { - public get() - { - return this.GetString("sFilter"); - } - public set(char[] value) - { - this.SetString("sFilter", value); - } - } - - property int iButtonID - { - public get() - { - return this.GetInt("iButtonID"); - } - public set(int value) - { - this.SetInt("iButtonID", value); - } - } - - property int iWeaponID - { - public get() - { - return this.GetInt("iWeaponID"); - } - public set(int value) - { - this.SetInt("iWeaponID", value); - } - } - - property int iTriggerID - { - public get() - { - return this.GetInt("iTriggerID"); - } - public set(int value) - { - this.SetInt("iTriggerID", value); - } - } - - property int iDisplay - { - public get() - { - return this.GetInt("iDisplay"); - } - public set(int value) - { - this.SetInt("iDisplay", value); - } - } - - property int iMode - { - public get() - { - return this.GetInt("iMode"); - } - public set(int value) - { - this.SetInt("iMode", value); - } - } - - property int iCooldown - { - public get() - { - return this.GetInt("iCooldown"); - } - public set(int value) - { - this.SetInt("iCooldown", value); - } - } - - property int iMaxActivations - { - public get() - { - return this.GetInt("iMaxActivations"); - } - public set(int value) - { - this.SetInt("iMaxActivations", value); - } - } -} -*/ \ No newline at end of file +}; \ No newline at end of file