#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#define PLUGIN_VERSION "1.0"
#define CVAR_FLAGS FCVAR_NOTIFY
public Plugin myinfo =
{
name = "Flash Bang Damage",
author = "[RUS] SenatoR",
description = "наносит урон если рядом взорвалась флешка",
version = PLUGIN_VERSION
}
ConVar FlashBangDamageEnable, FlashBangDamageAllTeams, FlashBangDamage, FlashBangDamageRadius;
float fFlashBangDamage = 0.0, fFlashBangDamageRadius = 0.0;
bool bHooked = false, bFlashBangDamageAllTeams = false;
public void OnPluginStart()
{
CreateConVar("sm_flashbangdmg_version", PLUGIN_VERSION, "Версия плагина", CVAR_FLAGS|FCVAR_DONTRECORD);
FlashBangDamageEnable = CreateConVar("sm_flashbangdmg_enable", "1", "Вкл./выкл плагин", CVAR_FLAGS, true, 0.0, true, 1.0);
FlashBangDamageAllTeams = CreateConVar("sm_flashbangdmg_all_teams", "1", "Наносить ли урон товарищам по команде?", CVAR_FLAGS, true, 0.0, false);
FlashBangDamage = CreateConVar("sm_flashbangdmg", "20", "Урон от флешки", CVAR_FLAGS, true, 0.0, false);
FlashBangDamageRadius = CreateConVar("sm_flashbangdmg_radius", "20", "Радиус от флешки в котором игроки получат урон", CVAR_FLAGS, true, 0.0, false);
AutoExecConfig(true, "FlashBangDamage");
FlashBangDamageEnable.AddChangeHook(OnConVarEnableChanged);
FlashBangDamageAllTeams.AddChangeHook(OnConVarsChanged);
FlashBangDamage.AddChangeHook(OnConVarsChanged);
FlashBangDamageRadius.AddChangeHook(OnConVarsChanged);
}
public void OnConfigsExecuted()
{
IsAllowed();
}
void OnConVarEnableChanged(ConVar cvar, const char[] oldVal, const char[] newVal)
{
IsAllowed();
}
void OnConVarsChanged(ConVar convar, const char[] oValue, const char[] nValue)
{
if(convar == FlashBangDamageAllTeams)
{
bFlashBangDamageAllTeams = convar.BoolValue;
}
else if(convar == FlashBangDamage)
{
fFlashBangDamage = convar.FloatValue;
}
else if(convar == FlashBangDamageRadius)
{
fFlashBangDamageRadius = convar.FloatValue;
}
}
void IsAllowed()
{
bool bPluginOn = FlashBangDamageEnable.BoolValue;
if(!bHooked && bPluginOn)
{
bHooked = true;
OnConVarsChanged(FlashBangDamageAllTeams, "", "");
OnConVarsChanged(FlashBangDamage, "", "");
OnConVarsChanged(FlashBangDamageRadius, "", "");
HookEvent("flashbang_detonate", OnFlashBangDetonate);
}
else if(bHooked && !bPluginOn)
{
bHooked = false;
UnhookEvent("flashbang_detonate", OnFlashBangDetonate);
}
}
void OnFlashBangDetonate(Event event, const char[] name, bool dontBroadcast)
{
int attacker = GetClientOfUserId(event.GetInt("userid"));
if(attacker > 0 && IsClientInGame(attacker) && GetClientTeam(attacker) > 1)
{
float fPositionDetonade[3], fVec1[3];
fPositionDetonade[0] = event.GetFloat("x");
fPositionDetonade[1] = event.GetFloat("y");
fPositionDetonade[2] = event.GetFloat("z");
for (int i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) > 1 && ((!bFlashBangDamageAllTeams && i != GetClientTeam(attacker)) || bFlashBangDamageAllTeams))
{
GetClientAbsOrigin(i, fVec1);
if (GetVectorDistance(fPositionDetonade, fVec1) <= fFlashBangDamageRadius)
{
SDKHooks_TakeDamage(i, attacker, attacker, fFlashBangDamage, DMG_GENERIC);
}
}
}
}
}