sm-plugins/Ranking/scripting/Ranking.sp
2018-08-07 22:36:36 +02:00

309 lines
11 KiB
SourcePawn

#include <clientprefs>
#include <multicolors>
#include <sourcemod>
#include <sdktools>
#include <zombiereloaded>
/* BOOLS */
bool g_bHideProp[MAXPLAYERS+1];
bool g_bProtection[MAXPLAYERS+1];
/* COOKIES */
Handle g_hCookie_HideProp;
Handle g_hCookie_Protection;
/* CONVARS */
ConVar g_hCVar_Protection;
ConVar g_hCVar_ProtectionMinimal;
/* INTERGERS */
int g_iPropEntity = -1;
int g_iRotatingEntity = -1;
/* STRINGS */
char g_sSTEAM_ID_Winner[64];
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Plugin myinfo =
{
name = "Ranking",
author = "Neon",
description = "",
version = "1.0.0",
url = "https://steamcommunity.com/id/n3ontm"
};
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnPluginStart()
{
g_hCookie_HideProp = RegClientCookie("ranking_hideprop", "", CookieAccess_Private);
g_hCookie_Protection = RegClientCookie("ranking_protection", "", CookieAccess_Private);
g_hCVar_Protection = CreateConVar("sm_ranking_protection_enabled", "1", "", FCVAR_NONE, true, 0.0, true, 1.0);
g_hCVar_ProtectionMinimal = CreateConVar("sm_ranking_protection_minimal", "15", "", FCVAR_NONE, true, 1.0, true, 64.0);
RegConsoleCmd("sm_toggleprop", OnToggleProp);
RegConsoleCmd("sm_top1", OnToggleImmunity);
HookEvent("player_spawn", OnClientSpawn);
HookEvent("player_death", OnClientDeath);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action OnToggleProp(int client, int args)
{
g_bHideProp[client] = !g_bHideProp[client];
SetClientCookie(client, g_hCookie_HideProp, g_bHideProp[client] ? "1" : "");
CPrintToChat(client, "{cyan}[Ranking] {white}%s", g_bHideProp[client] ? "Prop Disabled" : "Prop Enabled");
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action OnToggleImmunity(int client, int args)
{
g_bProtection[client] = !g_bProtection[client];
SetClientCookie(client, g_hCookie_Protection, g_bProtection[client] ? "1" : "");
CPrintToChat(client, "{cyan}[Ranking] {white}%s", g_bProtection[client] ? "Immunity Disabled" : "Immunity Enabled");
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnMapStart()
{
AddFileToDownloadsTable("sound/unloze/holy.wav");
AddFileToDownloadsTable("models/unloze/crown_v2.mdl");
AddFileToDownloadsTable("models/unloze/crown_v2.phy");
AddFileToDownloadsTable("models/unloze/crown_v2.vvd");
AddFileToDownloadsTable("models/unloze/crown_v2.sw.vtx");
AddFileToDownloadsTable("models/unloze/crown_v2.dx80.vtx");
AddFileToDownloadsTable("models/unloze/crown_v2.dx90.vtx");
AddFileToDownloadsTable("materials/models/unloze/crown/crown.vmt");
AddFileToDownloadsTable("materials/models/unloze/crown/crown.vtf");
AddFileToDownloadsTable("materials/models/unloze/crown/crown_bump.vtf");
AddFileToDownloadsTable("materials/models/unloze/crown/crown_detail.vtf");
AddFileToDownloadsTable("materials/models/unloze/crown/crown_lightwarp.vtf");
PrecacheModel("models/unloze/crown_v2.mdl");
AddFileToDownloadsTable("sound/unloze/holy.wav");
PrecacheSound("unloze/holy.wav");
GetSteamID();
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void GetSteamID()
{
char sFile[PLATFORM_MAX_PATH];
char sLine[192];
BuildPath(Path_SM, sFile, sizeof(sFile), "configs/ranking/winner.cfg");
Handle hFile = OpenFile(sFile, "r");
if(hFile != INVALID_HANDLE)
{
while (!IsEndOfFile(hFile))
{
if (!ReadFileLine(hFile, sLine, sizeof(sLine)))
break;
TrimString(sLine);
if(strlen(sLine) > 0 && (StrContains(sLine, "STEAM") != -1))
{
Format(g_sSTEAM_ID_Winner, sizeof(g_sSTEAM_ID_Winner), "%s", sLine);
//PrintToChatAll("%s", g_sSTEAM_ID_Winner);
break;
}
}
CloseHandle(hFile);
}
else
{
LogError("[SM] File not found! (configs/ranking/winner.cfg)");
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientCookiesCached(int client)
{
char sBuffer[4];
GetClientCookie(client, g_hCookie_HideProp, sBuffer, sizeof(sBuffer));
if (sBuffer[0])
g_bHideProp[client] = true;
else
g_bHideProp[client] = false;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientDisconnect(int client)
{
g_bHideProp[client] = false;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientSpawn(Event hEvent, const char[] sEvent, bool bDontBroadcast)
{
int client = GetClientOfUserId(hEvent.GetInt("userid"));
char sSID[64];
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
if (StrEqual(sSID, g_sSTEAM_ID_Winner) && !g_bHideProp[client])
{
CreateTimer(1.0, OnClientSpawnPost, client, TIMER_FLAG_NO_MAPCHANGE);
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action OnClientSpawnPost(Handle timer, int client)
{
if (!IsClientInGame(client) || IsFakeClient(client) || !IsPlayerAlive(client))
return;
if ((g_iPropEntity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE)
return;
SetEntityModel(g_iPropEntity, "models/unloze/crown_v2.mdl");
DispatchKeyValue(g_iPropEntity, "solid", "0");
DispatchKeyValue(g_iPropEntity, "modelscale", "1.5");
DispatchKeyValue(g_iPropEntity, "disableshadows", "1");
DispatchKeyValue(g_iPropEntity, "disablereceiveshadows", "1");
DispatchKeyValue(g_iPropEntity, "disablebonefollowers", "1");
float fVector[3];
float fAngles[3];
GetClientAbsOrigin(client, fVector);
GetClientAbsAngles(client, fAngles);
fVector[2] += 80.0;
fAngles[0] = 8.0;
fAngles[2] = 5.5;
TeleportEntity(g_iPropEntity, fVector, fAngles, NULL_VECTOR);
float fDirection[3];
fDirection[0] = 0.0;
fDirection[1] = 0.0;
fDirection[2] = 1.0;
TE_SetupSparks(fVector, fDirection, 1000, 200);
TE_SendToAll();
SetVariantString("!activator");
AcceptEntityInput(g_iPropEntity, "SetParent", client);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast)
{
int client = GetClientOfUserId(hEvent.GetInt("userid"));
char sSID[64];
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
if (StrEqual(sSID, g_sSTEAM_ID_Winner) && !IsPlayerAlive(client))
{
if (g_iPropEntity != INVALID_ENT_REFERENCE && AcceptEntityInput(g_iPropEntity, "Kill"))
{
g_iPropEntity = INVALID_ENT_REFERENCE;
}
if (g_iRotatingEntity != INVALID_ENT_REFERENCE && AcceptEntityInput(g_iRotatingEntity, "Kill"))
{
g_iRotatingEntity = INVALID_ENT_REFERENCE;
}
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action ZR_OnClientInfect(&client, &attacker, &bool:motherInfect, &bool:respawnOverride, &bool:respawn)
{
if (g_hCVar_Protection.BoolValue && motherInfect && !g_bProtection[client])
{
char sSID[64];
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
if ((GetClientCount() >= g_hCVar_ProtectionMinimal.IntValue) && StrEqual(sSID, g_sSTEAM_ID_Winner))
{
Handle hMessageInfection = StartMessageOne("HudMsg", client);
if (hMessageInfection)
{
if (GetUserMessageType() == UM_Protobuf)
{
PbSetInt(hMessageInfection, "channel", 50);
PbSetInt(hMessageInfection, "effect", 0);
PbSetColor(hMessageInfection, "clr1", {255, 255, 255, 255});
PbSetColor(hMessageInfection, "clr2", {255, 255, 255, 255});
PbSetVector2D(hMessageInfection, "pos", Float:{-1.0, 0.3});
PbSetFloat(hMessageInfection, "fade_in_time", 0.1);
PbSetFloat(hMessageInfection, "fade_out_time", 0.1);
PbSetFloat(hMessageInfection, "hold_time", 5.0);
PbSetFloat(hMessageInfection, "fx_time", 0.0);
PbSetString(hMessageInfection, "text", "You have been protected from being Mother Zombie\nsince you were the Rank #1 Player last Month!");
EndMessage();
}
else
{
BfWriteByte(hMessageInfection, 50);
BfWriteFloat(hMessageInfection, -1.0);
BfWriteFloat(hMessageInfection, 0.3);
BfWriteByte(hMessageInfection, 0);
BfWriteByte(hMessageInfection, 255);
BfWriteByte(hMessageInfection, 255);
BfWriteByte(hMessageInfection, 255);
BfWriteByte(hMessageInfection, 255);
BfWriteByte(hMessageInfection, 255);
BfWriteByte(hMessageInfection, 255);
BfWriteByte(hMessageInfection, 255);
BfWriteByte(hMessageInfection, 0);
BfWriteFloat(hMessageInfection, 0.1);
BfWriteFloat(hMessageInfection, 0.1);
BfWriteFloat(hMessageInfection, 5.0);
BfWriteFloat(hMessageInfection, 0.0);
BfWriteString(hMessageInfection, "You have been protected from being Mother Zombie\nsince you were the Rank #1 Player last Month!");
EndMessage();
}
}
CPrintToChat(client, "{cyan}[Ranking] {white}You have been protected from being Mother Zombie since he was the Rank #1 Player last Month!");
EmitSoundToClient(client, "unloze/holy.wav", .volume=1.0);
return Plugin_Handled;
}
}
return Plugin_Continue;
}