diff --git a/entWatch4/scripting/entWatch-beacon.sp b/entWatch4/scripting/entWatch-beacon.sp new file mode 100644 index 00000000..ec7c42cf --- /dev/null +++ b/entWatch4/scripting/entWatch-beacon.sp @@ -0,0 +1,174 @@ +//==================================================================================================== +// +// Name: [entWatch] Beacon +// Author: zaCade & Prometheum +// Description: Handle the tools of [entWatch] +// +//==================================================================================================== +#include + +#pragma newdecls required + +#include +#include +#include +#include +#include + +int g_iBeamSprite = -1; +int g_iHaloSprite = -1; +bool g_bDropped[256]; +bool g_bActive[256]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "[entWatch] Beacon", + author = "Neon", + description = "", + version = "1.0.0", + url = "https://steamcommunity.com/id/n3ontm" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + HookEvent("round_start", Event_RoundStart, EventHookMode_Pre); +} + +public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast) +{ + for (int i = 0; i < sizeof(g_bDropped); i++) + { + g_bDropped[i] = false; + g_bActive[i] = false; + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + GameData gameConfig = new GameData("funcommands.games"); + if (gameConfig == null) + { + SetFailState("Unable to load game config funcommands.games"); + return; + } + + char buffer[PLATFORM_MAX_PATH]; + if (gameConfig.GetKeyValue("SpriteBeam", buffer, sizeof(buffer)) && buffer[0]) + { + g_iBeamSprite = PrecacheModel(buffer); + } + + if (gameConfig.GetKeyValue("SpriteHalo", buffer, sizeof(buffer)) && buffer[0]) + { + g_iHaloSprite = PrecacheModel(buffer); + } + + delete gameConfig; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemDrop(int client, int index) +{ + g_bDropped[index] = true; + if (!g_bActive[index]) + { + CreateTimer(1.0, Timer_Beacon, index, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_bActive[index] = true; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemDeath(int client, int index) +{ + g_bDropped[index] = true; + if (!g_bActive[index]) + { + CreateTimer(1.0, Timer_Beacon, index, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_bActive[index] = true; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemDisconnect(int client, int index) +{ + g_bDropped[index] = true; + if (!g_bActive[index]) + { + CreateTimer(1.0, Timer_Beacon, index, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_bActive[index] = true; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemPickup(int client, int index) +{ + g_bDropped[index] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Timer_Beacon(Handle timer, any index) +{ + if (index == 0 || index > EW_GetItemCount() ||!g_bDropped[index]) + { + g_bActive[index] = false; + return Plugin_Stop; + } + + CItem item = EW_GetItemData(index); + + if (item.bClient || !item.bWeapon) + { + g_bActive[index] = false; + return Plugin_Stop; + } + + CConfig cfg = item.dConfig ; + + if (cfg.iMode == 2 && item.iTimesUsed >= cfg.iMaxUses) + { + g_bActive[index] = false; + return Plugin_Stop; + } + + float fOrigin[3]; + GetEntPropVector(item.iWeapon, Prop_Send, "m_vecOrigin", fOrigin) + + char sColor[32]; + item.dConfig.GetColor(sColor, sizeof(sColor)); + + int iColor; + StringToIntEx(sColor, iColor, 16); + + int iVecColor[4] + iVecColor[0] = ((iColor >> 16) & 0xFF); + iVecColor[1] = ((iColor >> 8) & 0xFF); + iVecColor[2] = ((iColor >> 0) & 0xFF); + iVecColor[3] = 255 + + + TE_SetupBeamRingPoint(fOrigin, 5.0, 50.0, g_iBeamSprite, g_iHaloSprite, 0, 10, 0.6, 6.0, 0.5, iVecColor, 10, 0); + TE_SendToAll(); + + return Plugin_Continue; + +}