TopDefenders: gfl version

This commit is contained in:
BotoX 2018-08-08 23:26:48 +02:00
parent 48500bc43c
commit 726d5b5c8a

View File

@ -4,40 +4,33 @@
#include <sourcemod>
#include <sdktools>
#include "loghelper.inc"
#define SPECMODE_NONE 0
#define SPECMODE_FIRSTPERSON 4
#define SPECMODE_THIRDPERSON 5
#define SPECMODE_FREELOOK 6
/* BOOLS */
bool g_bHideCrown[MAXPLAYERS+1];
bool g_bHideDialog[MAXPLAYERS+1];
bool g_bProtection[MAXPLAYERS+1];
/* COOKIES */
Handle g_hCookie_HideCrown;
Handle g_hCookie_HideDialog;
Handle g_hCookie_Protection;
/* FORWARD */
Handle g_hForward_OnRoundEndingWithTopDefenders;
/* CONVARS */
ConVar g_hCVar_Protection;
ConVar g_hCVar_ProtectionMinimal1;
ConVar g_hCVar_ProtectionMinimal2;
ConVar g_hCVar_ProtectionMinimal3;
/* INTERGERS */
int g_iCrownEntity = -1;
int g_iDialogLevel = 100000;
int g_iPlayerWinner[3];
int g_iPlayerDamage[MAXPLAYERS+1];
int g_iPlayerDamageFrom1K[MAXPLAYERS+1];
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Plugin myinfo =
{
name = "Top Defenders",
@ -46,17 +39,6 @@ public Plugin myinfo =
version = "1.0.0"
};
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
CreateNative("TopDefenders_GetClientDamage", Native_GetClientDamage);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnPluginStart()
{
LoadTranslations("plugin.topdefenders.phrases");
@ -70,8 +52,6 @@ public void OnPluginStart()
g_hCookie_HideDialog = RegClientCookie("topdefenders_hidedialog", "", CookieAccess_Private);
g_hCookie_Protection = RegClientCookie("topdefenders_protection", "", CookieAccess_Private);
g_hForward_OnRoundEndingWithTopDefenders = CreateGlobalForward("TopDefenders_OnRoundEnd", ET_Ignore, Param_Array, Param_Array);
CreateTimer(0.1, UpdateScoreboard, INVALID_HANDLE, TIMER_REPEAT);
CreateTimer(0.1, UpdateDialog, INVALID_HANDLE, TIMER_REPEAT);
@ -88,36 +68,24 @@ public void OnPluginStart()
SetCookieMenuItem(MenuHandler_CookieMenu, 0, "Top Defenders");
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action OnToggleCrown(int client, int args)
{
ToggleCrown(client);
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action OnToggleDialog(int client, int args)
{
ToggleDialog(client);
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action OnToggleImmunity(int client, int args)
{
ToggleImmunity(client);
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void ToggleCrown(int client)
{
g_bHideCrown[client] = !g_bHideCrown[client];
@ -127,9 +95,6 @@ public void ToggleCrown(int client)
CPrintToChat(client, "{cyan}%t {white}%t", "Chat Prefix", g_bHideCrown[client] ? "Crown Disabled" : "Crown Enabled");
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void ToggleDialog(int client)
{
g_bHideDialog[client] = !g_bHideDialog[client];
@ -139,9 +104,6 @@ public void ToggleDialog(int client)
CPrintToChat(client, "{cyan}%t {white}%t", "Chat Prefix", g_bHideDialog[client] ? "Dialog Disabled" : "Dialog Enabled");
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void ToggleImmunity(int client)
{
g_bProtection[client] = !g_bProtection[client];
@ -151,9 +113,6 @@ public void ToggleImmunity(int client)
CPrintToChat(client, "{cyan}%t {white}%t", "Chat Prefix", g_bProtection[client] ? "Immunity Disabled" : "Immunity Enabled");
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void ShowSettingsMenu(int client)
{
Menu menu = new Menu(MenuHandler_MainMenu);
@ -169,9 +128,6 @@ public void ShowSettingsMenu(int client)
menu.Display(client, MENU_TIME_FOREVER);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void MenuHandler_CookieMenu(int client, CookieMenuAction action, any info, char[] buffer, int maxlen)
{
switch(action)
@ -187,9 +143,6 @@ public void MenuHandler_CookieMenu(int client, CookieMenuAction action, any info
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public int MenuHandler_MainMenu(Menu menu, MenuAction action, int client, int selection)
{
switch(action)
@ -216,9 +169,6 @@ public int MenuHandler_MainMenu(Menu menu, MenuAction action, int client, int se
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnMapStart()
{
PrecacheSound("unloze/holy.wav");
@ -236,11 +186,10 @@ public void OnMapStart()
AddFileToDownloadsTable("materials/models/unloze/crown/crown_bump.vtf");
AddFileToDownloadsTable("materials/models/unloze/crown/crown_detail.vtf");
AddFileToDownloadsTable("materials/models/unloze/crown/crown_lightwarp.vtf");
GetTeams();
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientCookiesCached(int client)
{
char sBuffer[4];
@ -266,9 +215,6 @@ public void OnClientCookiesCached(int client)
g_bProtection[client] = false;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientDisconnect(int client)
{
g_iPlayerDamage[client] = 0;
@ -278,9 +224,6 @@ public void OnClientDisconnect(int client)
g_bProtection[client] = false;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public int SortDefendersList(int[] elem1, int[] elem2, const int[][] array, Handle hndl)
{
if (elem1[1] > elem2[1]) return -1;
@ -289,9 +232,6 @@ public int SortDefendersList(int[] elem1, int[] elem2, const int[][] array, Hand
return 0;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action UpdateScoreboard(Handle timer)
{
int iSortedList[MAXPLAYERS+1][2];
@ -320,9 +260,6 @@ public Action UpdateScoreboard(Handle timer)
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action UpdateDialog(Handle timer)
{
if (g_iDialogLevel <= 0)
@ -356,9 +293,6 @@ public Action UpdateDialog(Handle timer)
g_iDialogLevel--;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast)
{
g_iDialogLevel = 100000;
@ -366,12 +300,10 @@ public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast)
for (int client = 1; client <= MaxClients; client++)
{
g_iPlayerDamage[client] = 0;
g_iPlayerDamageFrom1K[client] = 0;
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast)
{
g_iPlayerWinner = {-1, -1, -1};
@ -398,15 +330,6 @@ public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast
if (iSortedCount)
{
int iPlayers[MAXPLAYERS+1];
int iDamage[MAXPLAYERS+1];
for (int rank = 0; rank < iSortedCount; rank++)
{
iPlayers[rank] = iSortedList[rank][0];
iDamage[rank] = iSortedList[rank][1];
}
char sBuffer[512];
Format(sBuffer, sizeof(sBuffer), "TOP DEFENDERS:");
Format(sBuffer, sizeof(sBuffer), "%s\n*************************", sBuffer);
@ -414,6 +337,7 @@ public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast
if (iSortedList[0][0])
{
Format(sBuffer, sizeof(sBuffer), "%s\n1. %N - %d DMG", sBuffer, iSortedList[0][0], iSortedList[0][1]);
LogPlayerEvent(iSortedList[0][0], "triggered", "top_defender");
g_iPlayerWinner[0] = GetSteamAccountID(iSortedList[0][0]);
}
@ -421,6 +345,7 @@ public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast
if (iSortedList[1][0])
{
Format(sBuffer, sizeof(sBuffer), "%s\n2. %N - %d DMG", sBuffer, iSortedList[1][0], iSortedList[1][1]);
LogPlayerEvent(iSortedList[1][0], "triggered", "second_defender");
g_iPlayerWinner[1] = GetSteamAccountID(iSortedList[1][0]);
}
@ -428,6 +353,7 @@ public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast
if (iSortedList[2][0])
{
Format(sBuffer, sizeof(sBuffer), "%s\n3. %N - %d DMG", sBuffer, iSortedList[2][0], iSortedList[2][1]);
LogPlayerEvent(iSortedList[2][0], "triggered", "third_defender");
g_iPlayerWinner[2] = GetSteamAccountID(iSortedList[2][0]);
}
@ -474,29 +400,10 @@ public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast
}
}
if(GetEngineVersion() == Engine_CSGO)
{
int iSplits
char sSplits[16][512];
if((iSplits = ExplodeString(sBuffer, "\n", sSplits, sizeof(sSplits), sizeof(sSplits[]))) != 0)
{
for (int iSplit; iSplit < iSplits; iSplit++)
{
PrintToChatAll(sSplits[iSplit]);
}
}
}
else
PrintToChatAll(sBuffer);
TopDefenders_OnRoundEnd(iPlayers, iDamage);
PrintToChatAll(sBuffer);
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientHurt(Event hEvent, const char[] sEvent, bool bDontBroadcast)
{
int client = GetClientOfUserId(hEvent.GetInt("attacker"));
@ -508,12 +415,18 @@ public void OnClientHurt(Event hEvent, const char[] sEvent, bool bDontBroadcast)
if (client == victim || (IsPlayerAlive(client) && ZR_IsClientZombie(client)))
return;
g_iPlayerDamage[client] += hEvent.GetInt("dmg_health");
int iDamage = hEvent.GetInt("dmg_health");
g_iPlayerDamage[client] += iDamage;
g_iPlayerDamageFrom1K[client] += iDamage;
if (g_iPlayerDamageFrom1K[client] >= 1000)
{
g_iPlayerDamageFrom1K[client] -= 1000;
LogPlayerEvent(client, "triggered", "damage_zombie");
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientSpawn(Event hEvent, const char[] sEvent, bool bDontBroadcast)
{
int client = GetClientOfUserId(hEvent.GetInt("userid"));
@ -524,9 +437,6 @@ public void OnClientSpawn(Event hEvent, const char[] sEvent, bool bDontBroadcast
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action OnClientSpawnPost(Handle timer, int client)
{
if (!IsClientInGame(client) || IsFakeClient(client) || !IsPlayerAlive(client))
@ -566,9 +476,6 @@ public Action OnClientSpawnPost(Handle timer, int client)
AcceptEntityInput(g_iCrownEntity, "SetParent", client);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast)
{
int client = GetClientOfUserId(hEvent.GetInt("userid"));
@ -582,9 +489,6 @@ public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action ZR_OnClientInfect(&client, &attacker, &bool:motherInfect, &bool:respawnOverride, &bool:respawn)
{
if (g_hCVar_Protection.BoolValue && motherInfect && !g_bProtection[client])
@ -642,39 +546,6 @@ public Action ZR_OnClientInfect(&client, &attacker, &bool:motherInfect, &bool:re
return Plugin_Continue;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
bool TopDefenders_OnRoundEnd(int iPlayers[MAXPLAYERS+1], int iDamage[MAXPLAYERS+1])
{
Call_StartForward(g_hForward_OnRoundEndingWithTopDefenders);
Call_PushArray(iPlayers, sizeof(iPlayers));
Call_PushArray(iDamage, sizeof(iDamage));
Call_Finish();
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public int Native_GetClientDamage(Handle hPlugin, int numParams)
{
int client = GetNativeCell(1);
if (client < 1 || client > MaxClients)
{
return ThrowNativeError(SP_ERROR_NATIVE, "Invalid client index %d", client);
}
if (!IsClientInGame(client))
{
return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is not in game", client);
}
return g_iPlayerDamage[client];
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
void AddMenuItemTranslated(Menu menu, const char[] info, const char[] display, any ...)
{
char buffer[128];
@ -683,9 +554,6 @@ void AddMenuItemTranslated(Menu menu, const char[] info, const char[] display, a
menu.AddItem(info, buffer);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
void SendDialog(int client, const char[] display, const int level, const int time, any ...)
{
char buffer[128];
@ -718,18 +586,12 @@ void SendDialog(int client, const char[] display, const int level, const int tim
delete kv;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
int GetClientSpectatorMode(int client)
{
return GetEntProp(client, Prop_Send, "m_iObserverMode");
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
int GetClientSpectatorTarget(int client)
{
return GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
}
}