From e176b14cfb504b0c2c75a2bfa7f05345a3e92e53 Mon Sep 17 00:00:00 2001 From: neon <> Date: Sun, 1 Sep 2019 17:22:03 +0200 Subject: [PATCH] new Plugin: Hitmarker --- .../materials/overlays/nano/hitmarker.vmt | 5 + .../materials/overlays/nano/hitmarker.vtf | Bin 0 -> 2796384 bytes Hitmarker/scripting/Hitmarker.sp | 303 ++++++++++++++++++ 3 files changed, 308 insertions(+) create mode 100644 Hitmarker/materials/overlays/nano/hitmarker.vmt create mode 100644 Hitmarker/materials/overlays/nano/hitmarker.vtf create mode 100644 Hitmarker/scripting/Hitmarker.sp diff --git a/Hitmarker/materials/overlays/nano/hitmarker.vmt b/Hitmarker/materials/overlays/nano/hitmarker.vmt new file mode 100644 index 00000000..38e6884f --- /dev/null +++ b/Hitmarker/materials/overlays/nano/hitmarker.vmt @@ -0,0 +1,5 @@ +"UnlitGeneric" +{ + "$basetexture" "overlays/nano/hitmarker" + "$translucent" 1 +} \ No newline at end of file diff --git a/Hitmarker/materials/overlays/nano/hitmarker.vtf b/Hitmarker/materials/overlays/nano/hitmarker.vtf new file mode 100644 index 0000000000000000000000000000000000000000..3bd9dddfb28ae59c72a80d074bd87588471f14bf GIT binary patch literal 2796384 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 S@PG$A;GyqnI|#o^5C0dh6Ai@x literal 0 HcmV?d00001 diff --git a/Hitmarker/scripting/Hitmarker.sp b/Hitmarker/scripting/Hitmarker.sp new file mode 100644 index 00000000..df15d869 --- /dev/null +++ b/Hitmarker/scripting/Hitmarker.sp @@ -0,0 +1,303 @@ +#include +#include +#include +#include +#include +#include + +#define SPECMODE_NONE 0 +#define SPECMODE_FIRSTPERSON 4 +#define SPECMODE_THIRDPERSON 5 +#define SPECMODE_FREELOOK 6 + +#pragma newdecls required +#pragma semicolon 1 + +bool g_bShowBossHitmarker[MAXPLAYERS+1]; +bool g_bShowZombieHitmarker[MAXPLAYERS+1]; + +Handle g_hTimer[MAXPLAYERS+1] = {null,...}; + +Handle g_hCookie_ShowBossHitmarker; +Handle g_hCookie_ShowZombieHitmarker; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "Htimarker", + author = "Neon & Nano", + description = "Players can enable or disable their hitmarkers while shooting zombies or bosses", + version = "1.0.0", +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_hCookie_ShowBossHitmarker = RegClientCookie("hitmarker_boss", "", CookieAccess_Private); + g_hCookie_ShowZombieHitmarker = RegClientCookie("hitmarker_zombie", "", CookieAccess_Private); + + RegConsoleCmd("sm_bhm", OnToggleBossHitmarker); + RegConsoleCmd("sm_zhm", OnToggleZombieHitmarker); + + SetCookieMenuItem(MenuHandler_CookieMenu, 0, "Hitmarker"); + + HookEvent("player_hurt", OnClientHurt); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + PrecacheGeneric("overlays/nano/hitmarker.vtf", true); + PrecacheGeneric("overlays/nano/hitmarker.vmt", true); + AddFileToDownloadsTable("materials/overlays/nano/hitmarker.vtf"); + AddFileToDownloadsTable("materials/overlays/nano/hitmarker.vmt"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientCookiesCached(int client) +{ + char sBuffer[4]; + GetClientCookie(client, g_hCookie_ShowBossHitmarker, sBuffer, sizeof(sBuffer)); + + if (sBuffer[0]) + g_bShowBossHitmarker[client] = true; + else + g_bShowBossHitmarker[client] = false; + + GetClientCookie(client, g_hCookie_ShowZombieHitmarker, sBuffer, sizeof(sBuffer)); + + if (sBuffer[0]) + g_bShowZombieHitmarker[client] = true; + else + g_bShowZombieHitmarker[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bShowBossHitmarker[client] = false; + g_bShowZombieHitmarker[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnToggleBossHitmarker(int client, int args) +{ + ToggleBossHitmarker(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ToggleBossHitmarker(int client) +{ + g_bShowBossHitmarker[client] = !g_bShowBossHitmarker[client]; + SetClientCookie(client, g_hCookie_ShowBossHitmarker, g_bShowBossHitmarker[client] ? "1" : ""); + + CPrintToChat(client, "{cyan}[Hitmarker] {white}%s", g_bShowBossHitmarker[client] ? "Boss Hitmarker Enabled" : "Boss Hitmarker Disabled"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnToggleZombieHitmarker(int client, int args) +{ + ToggleZombieHitmarker(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ToggleZombieHitmarker(int client) +{ + g_bShowZombieHitmarker[client] = !g_bShowZombieHitmarker[client]; + SetClientCookie(client, g_hCookie_ShowZombieHitmarker, g_bShowZombieHitmarker[client] ? "1" : ""); + + CPrintToChat(client, "{cyan}[Hitmarker] {white}%s", g_bShowZombieHitmarker[client] ? "Zombie Hitmarker Enabled" : "Zombie Hitmarker Disabled"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ShowSettingsMenu(int client) +{ + Menu menu = new Menu(MenuHandler_MainMenu); + + menu.SetTitle("Hitmarker Settings", client); + + char sBuffer[128]; + + Format(sBuffer, sizeof(sBuffer), "Boss Hitmarker: %s", g_bShowBossHitmarker[client] ? "Enabled" : "Disabled"); + menu.AddItem("0", sBuffer); + + Format(sBuffer, sizeof(sBuffer), "Zombie Hitmarker: %s", g_bShowZombieHitmarker[client] ? "Enabled" : "Disabled"); + menu.AddItem("1", sBuffer); + + menu.ExitBackButton = true; + + menu.Display(client, MENU_TIME_FOREVER); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void MenuHandler_CookieMenu(int client, CookieMenuAction action, any info, char[] buffer, int maxlen) +{ + switch(action) + { + case(CookieMenuAction_DisplayOption): + { + Format(buffer, maxlen, "Hitmarker", client); + } + case(CookieMenuAction_SelectOption): + { + ShowSettingsMenu(client); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int MenuHandler_MainMenu(Menu menu, MenuAction action, int client, int selection) +{ + switch(action) + { + case(MenuAction_Select): + { + switch(selection) + { + case(0): ToggleBossHitmarker(client); + case(1): ToggleZombieHitmarker(client); + } + + ShowSettingsMenu(client); + } + case(MenuAction_Cancel): + { + ShowCookieMenu(client); + } + case(MenuAction_End): + { + delete menu; + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnBossDamaged(any Boss, any Config, int client, float damage) +{ + if (!IsValidClient(client)) + return; + + if (g_bShowBossHitmarker[client]) + ShowOverlay(client); + + for (int spec = 1; spec <= MaxClients; spec++) + { + if (!IsClientInGame(spec) || !IsClientObserver(spec) || !g_bShowBossHitmarker[spec]) + continue; + + int specMode = GetClientSpectatorMode(spec); + int specTarget = GetClientSpectatorTarget(spec); + + if ((specMode == SPECMODE_FIRSTPERSON) && specTarget == client) + ShowOverlay(spec); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientHurt(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + int client = GetClientOfUserId(hEvent.GetInt("attacker")); + int victim = GetClientOfUserId(hEvent.GetInt("userid")); + + if (client < 1 || client > MaxClients || victim < 1 || victim > MaxClients) + return; + + if (client == victim || (IsPlayerAlive(client) && ZR_IsClientZombie(client))) + return; + + if (g_bShowZombieHitmarker[client]) + ShowOverlay(client); + + for (int spec = 1; spec <= MaxClients; spec++) + { + if (!IsClientInGame(spec) || !IsClientObserver(spec) || !g_bShowZombieHitmarker[spec]) + continue; + + int specMode = GetClientSpectatorMode(spec); + int specTarget = GetClientSpectatorTarget(spec); + + if (specMode == SPECMODE_FIRSTPERSON && specTarget == client) + ShowOverlay(spec); + } + +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ShowOverlay(int client) +{ + if (g_hTimer[client] != null) + { + delete g_hTimer[client]; + g_hTimer[client] = null; + } + ClientCommand(client, "r_screenoverlay \"%s\"", "overlays/nano/hitmarker"); + g_hTimer[client] = CreateTimer(0.3, ClearOverlay, client, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action ClearOverlay(Handle timer, int client) +{ + g_hTimer[client] = null; + ClientCommand(client, "r_screenoverlay \"\""); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int IsValidClient(int client, bool nobots = true) +{ + if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) + return false; + + return IsClientInGame(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +int GetClientSpectatorMode(int client) +{ + return GetEntProp(client, Prop_Send, "m_iObserverMode"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +int GetClientSpectatorTarget(int client) +{ + return GetEntPropEnt(client, Prop_Send, "m_hObserverTarget"); +}