You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
4.5 KiB
181 lines
4.5 KiB
/* Plugin Template generated by Pawn Studio */ |
|
|
|
#include <sourcemod> |
|
|
|
new client_pro[MAXPLAYERS+1]; |
|
new client_hp[MAXPLAYERS+1]; |
|
new Handle:timer_handle[MAXPLAYERS+1]; |
|
new Handle:h_time, Handle:h_color_r, Handle:h_color_g, Handle:h_color_b; |
|
new Float:time_amount, amount_r, amount_g, amount_b; |
|
|
|
public Plugin:myinfo = |
|
{ |
|
name = "SpawnProtection", |
|
author = "Chefe", |
|
description = "SpawnProtection", |
|
version = "1.4", |
|
url = "www.chefgaming.de" |
|
} |
|
|
|
public OnPluginStart() |
|
{ |
|
//Hooks |
|
HookEvent("player_spawn", Event_PlayerSpawn); |
|
HookEvent("player_death", Event_PlayerDeath); |
|
HookEvent("player_hurt", Event_PlayerHurt); |
|
HookEvent("dod_round_win", Event_RoundWin); |
|
HookEvent("player_changeclass", Event_PlayerChangeclass); |
|
|
|
//ConVars |
|
h_time = CreateConVar("sm_sp_time", "5.0", "Set the time for Spawn Protection", _, true, 0.1); |
|
h_color_r = CreateConVar("sm_sp_color_r", "0", "Set the red color part"); |
|
h_color_g = CreateConVar("sm_sp_color_g", "255", "Set the green color part"); |
|
h_color_b = CreateConVar("sm_sp_color_b", "0", "Set the blue color part"); |
|
|
|
//Get the values |
|
time_amount = GetConVarFloat(h_time); |
|
amount_r = GetConVarInt(h_color_r); |
|
amount_g = GetConVarInt(h_color_g); |
|
amount_b = GetConVarInt(h_color_b); |
|
|
|
//ConVar Change Callbacks |
|
HookConVarChange(h_time, TimeChanged); |
|
HookConVarChange(h_color_r, ColorR); |
|
HookConVarChange(h_color_g, ColorG); |
|
HookConVarChange(h_color_b, ColorB); |
|
|
|
AutoExecConfig(true); |
|
} |
|
|
|
public TimeChanged(Handle:cvar, const String:oldVal[], const String:newVal[]) |
|
{ |
|
time_amount = StringToFloat(newVal); |
|
} |
|
|
|
public ColorR(Handle:cvar, const String:oldVal[], const String:newVal[]) |
|
{ |
|
amount_r = StringToInt(newVal); |
|
} |
|
|
|
public ColorG(Handle:cvar, const String:oldVal[], const String:newVal[]) |
|
{ |
|
amount_g = StringToInt(newVal); |
|
} |
|
|
|
public ColorB(Handle:cvar, const String:oldVal[], const String:newVal[]) |
|
{ |
|
amount_b = StringToInt(newVal); |
|
} |
|
|
|
|
|
public OnClientConnected(client) |
|
{ |
|
client_pro[client] = 0; |
|
|
|
if (timer_handle[client] != INVALID_HANDLE) |
|
{ |
|
KillTimer(timer_handle[client]); |
|
} |
|
|
|
timer_handle[client] = INVALID_HANDLE; |
|
} |
|
|
|
public OnClientDisconnect(client) |
|
{ |
|
client_pro[client] = 0; |
|
|
|
if (timer_handle[client] != INVALID_HANDLE) |
|
{ |
|
KillTimer(timer_handle[client]); |
|
} |
|
|
|
timer_handle[client] = INVALID_HANDLE; |
|
} |
|
|
|
public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) |
|
{ |
|
new userid = GetEventInt(event, "userid"); |
|
new client = GetClientOfUserId(userid); |
|
|
|
if (IsClientInGame(client) && IsPlayerAlive(client)) |
|
{ |
|
SetEntityRenderColor(client, amount_r, amount_g, amount_b, 255); |
|
client_hp[client] = GetClientHealth(client); |
|
client_pro[client] = 1; |
|
PrintToChat(client, "\x01[\x04SP\x01] Spawn-Protection \x04ON\x01!") |
|
timer_handle[client] = CreateTimer(time_amount, DestroyProtection, client); |
|
} |
|
} |
|
|
|
public Action:DestroyProtection(Handle:timer, any:client) |
|
{ |
|
client_pro[client] = 0; |
|
timer_handle[client] = INVALID_HANDLE; |
|
|
|
if (IsClientInGame(client)) |
|
{ |
|
if (IsPlayerAlive(client)) |
|
{ |
|
SetEntityRenderColor(client, 255, 255, 255, 255); |
|
PrintToChat(client, "\x01[\x04SP\x01] Spawn-Protection \x04OFF\x01! Fight!"); |
|
} |
|
} |
|
} |
|
|
|
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) |
|
{ |
|
new client = GetClientOfUserId(GetEventInt(event, "userid")); |
|
|
|
client_pro[client] = 0; |
|
|
|
if (timer_handle[client] != INVALID_HANDLE) |
|
{ |
|
KillTimer(timer_handle[client]); |
|
timer_handle[client] = INVALID_HANDLE; |
|
} |
|
} |
|
|
|
public Event_PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast) |
|
{ |
|
new client = GetClientOfUserId(GetEventInt(event, "userid")); |
|
|
|
if (client_pro[client]) |
|
{ |
|
SetEntData(client, FindDataMapOffs(client, "m_iMaxHealth"), client_hp[client], 4, true); |
|
SetEntData(client, FindDataMapOffs(client, "m_iHealth"), client_hp[client], 4, true); |
|
} |
|
} |
|
|
|
public Event_RoundWin(Handle:event, const String:name[], bool:dontBroadcast) |
|
{ |
|
new clients = GetClientCount(true); |
|
|
|
for (new i = 1; i != clients; i++) |
|
{ |
|
if (timer_handle[i] != INVALID_HANDLE) |
|
{ |
|
KillTimer(timer_handle[i]) |
|
timer_handle[i] = INVALID_HANDLE; |
|
client_pro[i] = 0; |
|
|
|
if (IsPlayerAlive(i)) |
|
{ |
|
SetEntityRenderColor(i, 255, 255, 255, 255); |
|
PrintToChat(i, "\x01[\x04SP\x01] Round end. Spawn Protection \x04OFF\x01!"); |
|
} |
|
} |
|
} |
|
} |
|
|
|
public Event_PlayerChangeclass(Handle:event, const String:name[], bool:dontBroadcast) |
|
{ |
|
new userid = GetEventInt(event, "userid"); |
|
new client = GetClientOfUserId(userid); |
|
|
|
if (timer_handle[client] != INVALID_HANDLE) |
|
{ |
|
KillTimer(timer_handle[client]); |
|
timer_handle[client] = INVALID_HANDLE; |
|
} |
|
client_pro[client] = 0; |
|
} |