/* * CSB Player Auras * Copyright (C) 2026 counter-strike-boost.com * * Gives a player a coloured glow-shell aura chosen from a menu, with an optional * pulsing brightness effect driven by a task. The feature is gated behind an * access flag (VIP/shop), the aura is re-applied on spawn and cleared on death. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. It is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See for details. */ #include #include new const PLUGIN[] = "CSB Player Auras" new const VERSION[] = "1.0.0" new const AUTHOR[] = "counter-strike-boost.com" #define ACCESS_FLAG ADMIN_LEVEL_H #define AURA_NONE 0 new const g_szColorName[][] = { "Off", "Red", "Green", "Blue", "Yellow", "Cyan", "Purple", "White" } new const g_iColorRGB[][3] = { { 0, 0, 0 }, { 255, 0, 0 }, { 0, 255, 0 }, { 0, 0, 255 }, { 255, 255, 0 }, { 0, 255,255 }, { 200, 0, 255 }, { 255, 255,255 } } new g_pEnabled, g_pMinBright, g_pMaxBright new g_iAura[33] new bool:g_bPulse[33] new g_iPhase public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) g_pEnabled = register_cvar("csb_aura_enabled", "1") g_pMinBright = register_cvar("csb_aura_minbright", "60") g_pMaxBright = register_cvar("csb_aura_maxbright", "180") register_clcmd("say /aura", "cmdAura") register_clcmd("say_team /aura", "cmdAura") register_event("DeathMsg", "eventDeath", "a", "1>0") register_event("ResetHUD", "eventSpawn", "b") set_task(0.3, "taskPulse", 0, _, _, "b") } public client_putinserver(id) { g_iAura[id] = AURA_NONE g_bPulse[id] = false } bool:hasAccess(id) { return (get_user_flags(id) & ACCESS_FLAG) != 0 } public cmdAura(id) { if (!get_pcvar_num(g_pEnabled)) return PLUGIN_HANDLED if (!hasAccess(id)) { client_print(id, print_chat, "[CSB] Auras are a VIP feature.") return PLUGIN_HANDLED } new menu = menu_create("\yCSB Player Aura^n\wPick a colour:", "auraHandler") new info[4] for (new i = 0; i < sizeof(g_szColorName); i++) { num_to_str(i, info, charsmax(info)) menu_additem(menu, g_szColorName[i], info, 0) } menu_additem(menu, "\wTogglePulse", "99", 0) menu_setprop(menu, MPROP_EXIT, MEXIT_ALL) menu_display(id, menu, 0) return PLUGIN_HANDLED } public auraHandler(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } new info[4], name[32], access, callback menu_item_getinfo(menu, item, access, info, charsmax(info), name, charsmax(name), callback) menu_destroy(menu) new choice = str_to_num(info) if (choice == 99) { g_bPulse[id] = !g_bPulse[id] client_print(id, print_chat, "[CSB] Aura pulsing %s.", g_bPulse[id] ? "enabled" : "disabled") applyAura(id) return PLUGIN_HANDLED } g_iAura[id] = choice if (choice == AURA_NONE) client_print(id, print_chat, "[CSB] Aura removed.") else client_print(id, print_chat, "[CSB] Aura set to %s.", g_szColorName[choice]) applyAura(id) return PLUGIN_HANDLED } applyAura(id) { if (!is_user_alive(id)) return new a = g_iAura[id] if (a == AURA_NONE) { set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0) return } new amount = g_bPulse[id] ? get_pcvar_num(g_pMaxBright) : get_pcvar_num(g_pMinBright) set_user_rendering(id, kRenderFxGlowShell, g_iColorRGB[a][0], g_iColorRGB[a][1], g_iColorRGB[a][2], kRenderNormal, amount) } public eventSpawn(id) { if (is_user_alive(id) && g_iAura[id] != AURA_NONE) applyAura(id) } public eventDeath() { new victim = read_data(2) if (victim >= 1 && victim <= 32) set_user_rendering(victim, kRenderFxNone, 0, 0, 0, kRenderNormal, 0) } public taskPulse() { g_iPhase = (g_iPhase + 1) % 2 new lo = get_pcvar_num(g_pMinBright) new hi = get_pcvar_num(g_pMaxBright) new players[32], num, pid get_players(players, num, "a") for (new i = 0; i < num; i++) { pid = players[i] if (g_iAura[pid] == AURA_NONE || !g_bPulse[pid]) continue new a = g_iAura[pid] new amount = g_iPhase ? hi : lo set_user_rendering(pid, kRenderFxGlowShell, g_iColorRGB[a][0], g_iColorRGB[a][1], g_iColorRGB[a][2], kRenderNormal, amount) } }