102 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
#pragma semicolon 1
 | 
						|
 | 
						|
#include <sourcemod>
 | 
						|
#include <sdktools>
 | 
						|
#include <zombiereloaded>
 | 
						|
 | 
						|
ConVar g_CVar_ZRInfectKill;
 | 
						|
ConVar g_CVar_PlayerShotHook;
 | 
						|
ConVar g_CVar_PlayerShotCount;
 | 
						|
 | 
						|
bool g_bPlayerShotHook;
 | 
						|
bool g_bZRInfectKill;
 | 
						|
 | 
						|
int g_PlayerShotCount;
 | 
						|
 | 
						|
int g_PlayerShotCurrent[MAXPLAYERS + 1] = {0, ...};
 | 
						|
 | 
						|
public void OnPluginStart()
 | 
						|
{
 | 
						|
		g_CVar_ZRInfectKill = CreateConVar("zr_shotinfectkill", "1", "Enable the game_playerdie/kill entities to be triggered by ZR.", 0, true, 0.0, true, 1.0);
 | 
						|
		g_bZRInfectKill = g_CVar_ZRInfectKill.BoolValue;
 | 
						|
		g_CVar_ZRInfectKill.AddChangeHook(OnConVarChanged);
 | 
						|
 | 
						|
		g_CVar_PlayerShotHook = CreateConVar("zr_playershothook", "1", "Enable the usage of the game_playershot entity.", 0, true, 0.0, true, 1.0);
 | 
						|
		g_bPlayerShotHook = g_CVar_PlayerShotHook.BoolValue;
 | 
						|
		g_CVar_PlayerShotHook.AddChangeHook(OnConVarChanged);
 | 
						|
 | 
						|
		g_CVar_PlayerShotCount = CreateConVar("zr_playershotcount", "1", "Bullet count required per game_playershot call.", 0, true, 1.0);
 | 
						|
		g_PlayerShotCount = g_CVar_PlayerShotCount.IntValue;
 | 
						|
		g_CVar_PlayerShotCount.AddChangeHook(OnConVarChanged);
 | 
						|
 | 
						|
		HookEvent("player_hurt", EventPlayerHurt);
 | 
						|
}
 | 
						|
 | 
						|
public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
 | 
						|
{
 | 
						|
		if(convar == g_CVar_ZRInfectKill)
 | 
						|
				g_bZRInfectKill = g_CVar_ZRInfectKill.BoolValue;
 | 
						|
 | 
						|
		else if(convar == g_CVar_PlayerShotHook)
 | 
						|
				g_bPlayerShotHook = g_CVar_PlayerShotHook.BoolValue;
 | 
						|
 | 
						|
		else if(convar == g_CVar_PlayerShotCount)
 | 
						|
				g_PlayerShotCount = g_CVar_PlayerShotCount.IntValue;
 | 
						|
}
 | 
						|
 | 
						|
public int ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn)
 | 
						|
{
 | 
						|
		if(g_bZRInfectKill && !motherInfect)
 | 
						|
		{
 | 
						|
				int entity = INVALID_ENT_REFERENCE;
 | 
						|
				while((entity = FindEntityByClassname(entity, "trigger_brush")) != INVALID_ENT_REFERENCE)
 | 
						|
				{
 | 
						|
						static char sTargetname[64];
 | 
						|
						GetEntPropString(entity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname));
 | 
						|
 | 
						|
						if(client > 0 && StrEqual(sTargetname, "game_playerdie"))
 | 
						|
								AcceptEntityInput(entity, "Use", client, client);
 | 
						|
						else if(attacker > 0 && StrEqual(sTargetname, "game_playerkill"))
 | 
						|
								AcceptEntityInput(entity, "Use", attacker, attacker);
 | 
						|
				}
 | 
						|
		}
 | 
						|
}
 | 
						|
 | 
						|
public Action EventPlayerHurt(Handle event, const char[] name, bool dontBroadcast)
 | 
						|
{
 | 
						|
		if(g_bPlayerShotHook)
 | 
						|
		{
 | 
						|
				int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
 | 
						|
 | 
						|
				if(attacker <= 0)
 | 
						|
					return Plugin_Continue;
 | 
						|
 | 
						|
				if(g_PlayerShotCount > 1)
 | 
						|
                {
 | 
						|
                        g_PlayerShotCurrent[attacker] = g_PlayerShotCurrent[attacker] + 1;
 | 
						|
                        if(g_PlayerShotCurrent[attacker] >= g_PlayerShotCount)
 | 
						|
                        {
 | 
						|
                                g_PlayerShotCurrent[attacker] = 0;
 | 
						|
                                FirePlayerShot(attacker);
 | 
						|
                        }
 | 
						|
                }
 | 
						|
				else
 | 
						|
                {
 | 
						|
                        FirePlayerShot(attacker);
 | 
						|
                }
 | 
						|
        }
 | 
						|
		return Plugin_Continue;
 | 
						|
}
 | 
						|
 | 
						|
void FirePlayerShot(int client)
 | 
						|
{
 | 
						|
        int entity = INVALID_ENT_REFERENCE;
 | 
						|
        while((entity = FindEntityByClassname(entity, "trigger_brush")) != INVALID_ENT_REFERENCE)
 | 
						|
        {
 | 
						|
                static char sTargetname[64];
 | 
						|
                GetEntPropString(entity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname));
 | 
						|
 | 
						|
                if(StrEqual(sTargetname, "game_playershot"))
 | 
						|
                        AcceptEntityInput(entity, "Use", client, client);
 | 
						|
        }
 | 
						|
} |