127 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #include <sourcemod>
 | |
| #include <sdkhooks>
 | |
| #include <sdktools>
 | |
| #include <zombiereloaded>
 | |
| 
 | |
| #pragma semicolon 1
 | |
| #pragma newdecls required
 | |
| 
 | |
| public Plugin myinfo =
 | |
| {
 | |
| 	name 			= "RadarSpotAll",
 | |
| 	author 			= "BotoX",
 | |
| 	description 	= "Always spot every player on the radar.",
 | |
| 	version 		= "1.0",
 | |
| 	url 			= ""
 | |
| };
 | |
| 
 | |
| ConVar g_cRadarMode;
 | |
| int g_RadarMode;
 | |
| 
 | |
| int g_hPlayerSpotted;
 | |
| int g_aSpottedPlayers[MAXPLAYERS+1];
 | |
| 
 | |
| public void OnPluginStart()
 | |
| {
 | |
| 	g_hPlayerSpotted = FindSendPropInfo("CCSPlayerResource", "m_bPlayerSpotted");
 | |
| 	if(g_hPlayerSpotted == -1)
 | |
| 		SetFailState("Couldn't find CCSPlayerResource::m_bPlayerSpotted");
 | |
| 
 | |
| 	g_cRadarMode = CreateConVar("sm_radar_mode", "2", "RadarSpotAll mode: 0 = Default, 1 = Show zombies, 2 = Show all, 3 = Show none", FCVAR_NONE, true, 0.0, true, 3.0);
 | |
| 	g_cRadarMode.AddChangeHook(RadarModeChanged);
 | |
| 
 | |
| 	HookEvent("player_spawn", Event_Spawn, EventHookMode_Post);
 | |
| 
 | |
| 	AutoExecConfig(true);
 | |
| 	RadarModeChanged(g_cRadarMode, "", "");
 | |
| }
 | |
| 
 | |
| public void RadarModeChanged(ConVar cvar, const char[] sOldVal, const char[] sNewVal)
 | |
| {
 | |
| 	g_RadarMode = cvar.IntValue;
 | |
| 
 | |
| 	for(int client = 1; client < MaxClients; client++)
 | |
| 	{
 | |
| 		if(g_RadarMode == 0)
 | |
| 		{
 | |
| 			g_aSpottedPlayers[client] = 0;
 | |
| 		}
 | |
| 		else if(g_RadarMode == 1)
 | |
| 		{
 | |
| 			if(IsClientInGame(client) && IsPlayerAlive(client) && ZR_IsClientZombie(client))
 | |
| 			{
 | |
| 				g_aSpottedPlayers[client] = 1;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				g_aSpottedPlayers[client] = 0;
 | |
| 			}
 | |
| 		}
 | |
| 		else if(g_RadarMode == 2)
 | |
| 		{
 | |
| 			g_aSpottedPlayers[client] = 1;
 | |
| 		}
 | |
| 		else if(g_RadarMode == 3)
 | |
| 		{
 | |
| 			g_aSpottedPlayers[client] = 0;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| public void OnMapStart()
 | |
| {
 | |
| 	int entity = FindEntityByClassname(MaxClients+1, "cs_player_manager");
 | |
| 	if(entity == -1)
 | |
| 		SetFailState("Unable to find cs_player_manager entity");
 | |
| 
 | |
| 	SDKHook(entity, SDKHook_ThinkPost, OnThinkPost);
 | |
| }
 | |
| 
 | |
| public void OnThinkPost(int entity)
 | |
| {
 | |
| 	if(!g_RadarMode)
 | |
| 		return;
 | |
| 
 | |
| 	if(g_RadarMode == 1)
 | |
| 	{
 | |
| 		for(int client = 1; client < MaxClients; client++)
 | |
| 		{
 | |
| 			if(g_aSpottedPlayers[client])
 | |
| 				SetEntData(entity, g_hPlayerSpotted + client, 1, 1, true);
 | |
| 		}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SetEntDataArray(entity, g_hPlayerSpotted, g_aSpottedPlayers, MAXPLAYERS+1, 1, true);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
 | |
| {
 | |
| 	int client = GetClientOfUserId(GetEventInt(event, "userid"));
 | |
| 	if(!client)
 | |
| 		return;
 | |
| 
 | |
| 	if(g_RadarMode == 1)
 | |
| 	{
 | |
| 		g_aSpottedPlayers[client] = 0;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn)
 | |
| {
 | |
| 	if(g_RadarMode == 1)
 | |
| 	{
 | |
| 		g_aSpottedPlayers[client] = 1;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| public void ZR_OnClientHumanPost(int client, bool respawn, bool protect)
 | |
| {
 | |
| 	if(g_RadarMode == 1)
 | |
| 	{
 | |
| 		g_aSpottedPlayers[client] = 0;
 | |
| 	}
 | |
| }
 |