Hlstats: Update server modules.
Add a ZE module, and change the ZR one slightly to be more similiar.
This commit is contained in:
		
							parent
							
								
									9034d4284a
								
							
						
					
					
						commit
						9f3e89514d
					
				
							
								
								
									
										226
									
								
								hlstatsx/scripting/hlstatsx_ze.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								hlstatsx/scripting/hlstatsx_ze.sp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,226 @@ | |||||||
|  | #include <cstrike> | ||||||
|  | #include <loghelper> | ||||||
|  | #include <sourcemod> | ||||||
|  | #include <zombiereloaded> | ||||||
|  | 
 | ||||||
|  | #pragma semicolon 1 | ||||||
|  | #pragma newdecls required | ||||||
|  | 
 | ||||||
|  | /* CONVARS */ | ||||||
|  | ConVar g_cvarStreakInterval = null; | ||||||
|  | ConVar g_cvarMinimumStreak = null; | ||||||
|  | ConVar g_cvarMaximumStreak = null; | ||||||
|  | 
 | ||||||
|  | ConVar g_cvarDifficultyHuman = null; | ||||||
|  | ConVar g_cvarDifficultyZombie = null; | ||||||
|  | ConVar g_cvarDifficultyDuration = null; | ||||||
|  | 
 | ||||||
|  | /* HANDLES */ | ||||||
|  | Handle g_tMinimalRoundDuration = INVALID_HANDLE; | ||||||
|  | 
 | ||||||
|  | /* INTERGERS */ | ||||||
|  | int g_iKillCount[MAXPLAYERS+1] = 0; | ||||||
|  | 
 | ||||||
|  | /* BOOLEANS */ | ||||||
|  | bool g_bMotherZM[MAXPLAYERS+1] = false; | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public Plugin myinfo = | ||||||
|  | { | ||||||
|  | 	name        = "HLstatsX CE - Zombie Escape", | ||||||
|  | 	author      = "zaCade", | ||||||
|  | 	description = "Create additional actions for the default HLstatsX", | ||||||
|  | 	version     = "1.0.0" | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnPluginStart() | ||||||
|  | { | ||||||
|  | 	g_cvarStreakInterval     = CreateConVar("hlx_ze_killstreaks_interval", "1",  "amount of kills required to progress to the next killstreak", 0, true, 1.0); | ||||||
|  | 	g_cvarMinimumStreak      = CreateConVar("hlx_ze_killstreaks_minimal",  "2",  "amount of kills required for the lowest killstreak",          0, true, 0.0); | ||||||
|  | 	g_cvarMaximumStreak      = CreateConVar("hlx_ze_killstreaks_maximal",  "12", "amount of kills required for the highest killstreak",         0, true, 0.0); | ||||||
|  | 
 | ||||||
|  | 	g_cvarDifficultyHuman    = CreateConVar("hlx_ze_difficulty_human",     "0",  "the difficulty level of the current map for humans",          0, true, 0.0); | ||||||
|  | 	g_cvarDifficultyZombie   = CreateConVar("hlx_ze_difficulty_zombie",    "0",  "the difficulty level of the current map for zombies",         0, true, 0.0); | ||||||
|  | 	g_cvarDifficultyDuration = CreateConVar("hlx_ze_difficulty_duration",  "60", "the minumum amount of time a round has to last in seconds",   0, true, 0.0, true, 180.0); | ||||||
|  | 
 | ||||||
|  | 	HookEvent("round_start",  OnRoundStarting, EventHookMode_Pre); | ||||||
|  | 	HookEvent("round_end",    OnRoundEnding,   EventHookMode_Pre); | ||||||
|  | 	HookEvent("player_spawn", OnClientSpawn,   EventHookMode_Pre); | ||||||
|  | 	HookEvent("player_death", OnClientDeath,   EventHookMode_Pre); | ||||||
|  | 
 | ||||||
|  | 	AutoExecConfig(); | ||||||
|  | 	GetTeams(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnMapStart() | ||||||
|  | { | ||||||
|  | 	GetTeams(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnMapEnd() | ||||||
|  | { | ||||||
|  | 	if (g_tMinimalRoundDuration != INVALID_HANDLE && CloseHandle(g_tMinimalRoundDuration)) | ||||||
|  | 		g_tMinimalRoundDuration = INVALID_HANDLE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnRoundStarting(Event hEvent, const char[] sEvent, bool bDontBroadcast) | ||||||
|  | { | ||||||
|  | 	if (g_tMinimalRoundDuration != INVALID_HANDLE && CloseHandle(g_tMinimalRoundDuration)) | ||||||
|  | 		g_tMinimalRoundDuration = INVALID_HANDLE; | ||||||
|  | 
 | ||||||
|  | 	g_tMinimalRoundDuration = CreateTimer(g_cvarDifficultyDuration.FloatValue, OnRoundMinimalDuration); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public Action OnRoundMinimalDuration(Handle timer) | ||||||
|  | { | ||||||
|  | 	g_tMinimalRoundDuration = INVALID_HANDLE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) | ||||||
|  | { | ||||||
|  | 	g_bMotherZM[client] = motherInfect; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast) | ||||||
|  | { | ||||||
|  | 	bool bAwardHumans  = ((g_tMinimalRoundDuration == INVALID_HANDLE) && (hEvent.GetInt("winner") == CS_TEAM_CT)); | ||||||
|  | 	bool bAwardZombies = ((g_tMinimalRoundDuration == INVALID_HANDLE) && (hEvent.GetInt("winner") == CS_TEAM_T)); | ||||||
|  | 
 | ||||||
|  | 	for (int client = 1; client <= MaxClients; client++) | ||||||
|  | 	{ | ||||||
|  | 		if (IsValidClient(client)) | ||||||
|  | 		{ | ||||||
|  | 			if (bAwardHumans && ZR_IsClientHuman(client)) | ||||||
|  | 			{ | ||||||
|  | 				char sPlayerEvent[32]; | ||||||
|  | 				Format(sPlayerEvent, sizeof(sPlayerEvent), "ze_h_win_%d", g_cvarDifficultyHuman.IntValue); | ||||||
|  | 
 | ||||||
|  | 				LogPlayerEvent(client, "triggered", sPlayerEvent); | ||||||
|  | 			} | ||||||
|  | 			else if (bAwardZombies && ZR_IsClientZombie(client)) | ||||||
|  | 			{ | ||||||
|  | 				if (g_bMotherZM[client]) | ||||||
|  | 				{ | ||||||
|  | 					char sPlayerEvent[32]; | ||||||
|  | 					Format(sPlayerEvent, sizeof(sPlayerEvent), "ze_m_win_%d", g_cvarDifficultyZombie.IntValue); | ||||||
|  | 
 | ||||||
|  | 					LogPlayerEvent(client, "triggered", sPlayerEvent); | ||||||
|  | 				} | ||||||
|  | 				else | ||||||
|  | 				{ | ||||||
|  | 					char sPlayerEvent[32]; | ||||||
|  | 					Format(sPlayerEvent, sizeof(sPlayerEvent), "ze_z_win_%d", g_cvarDifficultyZombie.IntValue); | ||||||
|  | 
 | ||||||
|  | 					LogPlayerEvent(client, "triggered", sPlayerEvent); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			EndKillStreak(client); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnClientSpawn(Event hEvent, const char[] sEvent, bool bDontBroadcast) | ||||||
|  | { | ||||||
|  | 	int client = GetClientOfUserId(hEvent.GetInt("userid")); | ||||||
|  | 
 | ||||||
|  | 	ResetClient(client); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast) | ||||||
|  | { | ||||||
|  | 	int client = GetClientOfUserId(hEvent.GetInt("userid")); | ||||||
|  | 	int killer = GetClientOfUserId(hEvent.GetInt("attacker")); | ||||||
|  | 
 | ||||||
|  | 	EndKillStreak(client); | ||||||
|  | 
 | ||||||
|  | 	if (IsValidClient(killer)) | ||||||
|  | 	{ | ||||||
|  | 		g_iKillCount[killer] += 1; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void EndKillStreak(int client) | ||||||
|  | { | ||||||
|  | 	if (g_iKillCount[client] >= g_cvarMinimumStreak.IntValue) | ||||||
|  | 	{ | ||||||
|  | 		if (g_iKillCount[client] > g_cvarMaximumStreak.IntValue) | ||||||
|  | 			g_iKillCount[client] = g_cvarMaximumStreak.IntValue; | ||||||
|  | 
 | ||||||
|  | 		if (ZR_IsClientHuman(client)) | ||||||
|  | 		{ | ||||||
|  | 			char sPlayerEvent[32]; | ||||||
|  | 			Format(sPlayerEvent, sizeof(sPlayerEvent), "ze_h_kill_streak_%d", RoundToFloor(float(g_iKillCount[client]) / float(g_cvarStreakInterval.IntValue)) * g_cvarStreakInterval.IntValue); | ||||||
|  | 
 | ||||||
|  | 			LogPlayerEvent(client, "triggered", sPlayerEvent); | ||||||
|  | 		} | ||||||
|  | 		else if (ZR_IsClientZombie(client)) | ||||||
|  | 		{ | ||||||
|  | 			if (g_bMotherZM[client]) | ||||||
|  | 			{ | ||||||
|  | 				char sPlayerEvent[32]; | ||||||
|  | 				Format(sPlayerEvent, sizeof(sPlayerEvent), "ze_m_kill_streak_%d", RoundToFloor(float(g_iKillCount[client]) / float(g_cvarStreakInterval.IntValue)) * g_cvarStreakInterval.IntValue); | ||||||
|  | 
 | ||||||
|  | 				LogPlayerEvent(client, "triggered", sPlayerEvent); | ||||||
|  | 			} | ||||||
|  | 			else | ||||||
|  | 			{ | ||||||
|  | 				char sPlayerEvent[32]; | ||||||
|  | 				Format(sPlayerEvent, sizeof(sPlayerEvent), "ze_z_kill_streak_%d", RoundToFloor(float(g_iKillCount[client]) / float(g_cvarStreakInterval.IntValue)) * g_cvarStreakInterval.IntValue); | ||||||
|  | 
 | ||||||
|  | 				LogPlayerEvent(client, "triggered", sPlayerEvent); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	ResetClient(client); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | stock void ResetClient(int client) | ||||||
|  | { | ||||||
|  | 	g_iKillCount[client] = 0; | ||||||
|  | 	g_bMotherZM[client] = false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | stock bool IsValidClient(int client) | ||||||
|  | { | ||||||
|  | 	return (client > 0 && client <= MaxClients && IsClientInGame(client) && IsPlayerAlive(client)); | ||||||
|  | } | ||||||
| @ -107,10 +107,10 @@ public void EndKillStreak(int client) | |||||||
| 		if (g_iKillCount[client] > g_cvarMaximumStreak.IntValue) | 		if (g_iKillCount[client] > g_cvarMaximumStreak.IntValue) | ||||||
| 			g_iKillCount[client] = g_cvarMaximumStreak.IntValue; | 			g_iKillCount[client] = g_cvarMaximumStreak.IntValue; | ||||||
| 
 | 
 | ||||||
| 		char sEvent[32]; | 		char sPlayerEvent[32]; | ||||||
| 		Format(sEvent, sizeof(sEvent), "zr_kill_streak_%d", RoundToFloor(float(g_iKillCount[client]) / float(g_cvarStreakInterval.IntValue)) * g_cvarStreakInterval.IntValue); | 		Format(sPlayerEvent, sizeof(sPlayerEvent), "zr_kill_streak_%d", RoundToFloor(float(g_iKillCount[client]) / float(g_cvarStreakInterval.IntValue)) * g_cvarStreakInterval.IntValue); | ||||||
| 
 | 
 | ||||||
| 		LogPlayerEvent(client, "triggered", sEvent); | 		LogPlayerEvent(client, "triggered", sPlayerEvent); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ResetClient(client); | 	ResetClient(client); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user