#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <vip_core>
#include <clientprefs>
public Plugin:myinfo =
{
name = "[VIP] AURA",
author = "R1KO & Pheonix (˙·٠●Феникс●٠·˙)",
version = "1.0.1",
url = "zizt.ru"
};
#define VIP_AURA_M "AURA_M"
#define VIP_AURA "AURA"
new g_iClientColor[MAXPLAYERS+1][4];
new VIP_ToggleState:g_bHasAura[MAXPLAYERS+1];
new Handle:g_hKv, Handle:g_hTimer[MAXPLAYERS+1], Handle:g_hmenu, Handle:g_hCookie;
new g_BeamSprite, g_HaloSprite;
public OnPluginStart()
{
g_hCookie = RegClientCookie("VIP_AURA", "VIP_AURA", CookieAccess_Public);
}
public OnMapStart()
{
g_BeamSprite = PrecacheModel("materials/sprites/blueflare1.vmt");
g_HaloSprite = PrecacheModel("materials/sprites/glow08.vmt");
decl String:buffer[256];
if (g_hKv != INVALID_HANDLE) CloseHandle(g_hKv);
g_hKv = CreateKeyValues("Aura_Colors");
BuildPath(Path_SM, buffer, 256, "data/vip/modules/aura_colors.ini");
if (!FileToKeyValues(g_hKv, buffer)) SetFailState("Couldn't parse file %s", buffer);
g_hmenu = CreateMenu(AuraMenuHandler);
SetMenuExitBackButton(g_hmenu, true);
SetMenuTitle(g_hmenu, "Цвет ауры\n ");
KvRewind(g_hKv);
if (KvGotoFirstSubKey(g_hKv))
{
do
{
if (KvGetSectionName(g_hKv, buffer, 256))
{
AddMenuItem(g_hmenu, buffer, buffer);
}
}
while (KvGotoNextKey(g_hKv));
}
KvRewind(g_hKv);
}
public VIP_OnVIPLoaded()
{
VIP_RegisterFeature(VIP_AURA_M, _, SELECTABLE, Open_aura, OnDisplayItem, OnDrawItem);
VIP_RegisterFeature(VIP_AURA, BOOL, _, ToggleItemCallback, OnDisplayItem_f);
VIP_HookClientSpawn(OnPlayerSpawn);
}
public VIP_OnVIPClientLoaded(iClient)
{
if(VIP_IsClientFeatureUse(iClient, VIP_AURA))
{
g_bHasAura[iClient] = ENABLED;
decl String:sInfo[64];
GetClientCookie(iClient, g_hCookie, sInfo, 64);
if(sInfo[0])
{
GetRGBAFromString(sInfo, g_iClientColor[iClient]);
return;
}
}
for(new i=0; i < 4; i++) g_iClientColor[iClient][i] = 255;
}
public bool:Open_aura(iClient, const String:sFeatureName[])
{
DisplayMenu(g_hmenu, iClient, MENU_TIME_FOREVER);
return false;
}
public AuraMenuHandler(Handle:hMenu, MenuAction:action, iClient, Item)
{
switch(action)
{
case MenuAction_Cancel:
{
if(Item == MenuCancel_ExitBack) VIP_SendClientVIPMenu(iClient);
}
case MenuAction_Select:
{
decl String:sInfo[64];
GetMenuItem(hMenu, Item, sInfo, 64);
KvRewind(g_hKv);
if (KvJumpToKey(g_hKv, sInfo, false))
{
KvGetColor(g_hKv, "color", g_iClientColor[iClient][0], g_iClientColor[iClient][1], g_iClientColor[iClient][2], g_iClientColor[iClient][3]);
KvRewind(g_hKv);
PrintToChat(iClient, " \x03Вы изменили цвет ауры на \x04%s", sInfo);
FormatEx(sInfo, 64, "%i %i %i %i", g_iClientColor[iClient][0], g_iClientColor[iClient][1], g_iClientColor[iClient][2], g_iClientColor[iClient][3]);
SetClientCookie(iClient, g_hCookie, sInfo);
}
else PrintToChat(iClient, "Failed to use \"%s\"!.", sInfo);
DisplayMenu(g_hmenu, iClient, MENU_TIME_FOREVER);
}
}
}
public OnDrawItem(iClient, const String:sMenuOptionName[], style)
{
return VIP_GetClientFeatureStatus(iClient, VIP_AURA) != ENABLED ? ITEMDRAW_DISABLED:style;
}
public bool:OnDisplayItem(iClient, const String:sFeatureName[], String:sDisplay[], maxlen)
{
strcopy(sDisplay, maxlen, "Цвет ауры");
return true;
}
public Action:ToggleItemCallback(iClient, const String:sFeatureName[], VIP_ToggleState:OldStatus, &VIP_ToggleState:NewStatus)
{
g_bHasAura[iClient] = NewStatus;
if(NewStatus == ENABLED) SetClientAura(iClient);
return Plugin_Continue;
}
public bool:OnDisplayItem_f(iClient, const String:sFeatureName[], String:sDisplay[], maxlen)
{
FormatEx(sDisplay, maxlen, "Аура [%s]", VIP_IsClientFeatureUse(iClient, VIP_AURA) ? "Включено":"Выключено");
return true;
}
public OnClientDisconnect(iClient)
{
g_bHasAura[iClient] = DISABLED;
g_hTimer[iClient] = INVALID_HANDLE;
}
public OnPlayerSpawn(iClient, iTeam, bool:bIsVIP)
{
if(bIsVIP && g_bHasAura[iClient])
{
SetClientAura(iClient);
}
}
SetClientAura(iClient)
{
if(g_hTimer[iClient] == INVALID_HANDLE) g_hTimer[iClient] = CreateTimer(0.1, Timer_Beacon, iClient, TIMER_REPEAT);
}
public Action:Timer_Beacon(Handle:hTimer, any:iClient)
{
if(IsClientInGame(iClient) && IsPlayerAlive(iClient) && g_bHasAura[iClient] == ENABLED)
{
static Float:fVec[3];
GetClientAbsOrigin(iClient, fVec);
fVec[2] += 10;
TE_SetupBeamRingPoint(fVec, 50.0, 60.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.1, 10.0, 0.0, g_iClientColor[iClient], 10, 0);
TE_SendToAll();
return Plugin_Continue;
}
else
{
g_hTimer[iClient] = INVALID_HANDLE;
}
return Plugin_Stop;
}