Не знаю почему, но этот плагин крашит сервер на "Нет Милосердию". Проверил два раза. То что задумывалось плагин делает, но вот крашит. Если сможете починить, дерзайте!
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#define DEFAULT_FLAGS FCVAR_PLUGIN|FCVAR_NOTIFY
#define PLUGIN_VERSION "1.1"
#define TEST_DEBUG 0
#define TEST_DEBUG_LOG 1
static Handle:IAtoEATransformCVAR = INVALID_HANDLE;
public Plugin:myinfo =
{
name = "Разрывные патроны",
author = "McFlurry; Редакция - L4D2Noob.RU",
description = "Возвращает разрывные патроны в Сражение",
version = PLUGIN_VERSION,
url = "L4D2Noob.RU"
}
public OnPluginStart()
{
decl String:game_name[64];
GetGameFolderName(game_name, sizeof(game_name));
if (!StrEqual(game_name, "left4dead2", false))
{
SetFailState("Плагин работает только в L4D2");
}
CreateConVar("l4d2_eammo_version", PLUGIN_VERSION, "Версия плагина", DEFAULT_FLAGS|FCVAR_SPONLY|FCVAR_DONTRECORD);
IAtoEATransformCVAR = CreateConVar("l4d2_eammo_chance", "2", "Шанс появления разрывных патронов. 1 - 100%; 2 - 50%.", DEFAULT_FLAGS);
HookEvent("round_start", Event_Round_Start);
AutoExecConfig(true, "l4d2_eammo");
}
public Action:Event_Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
CreateTimer(10.0, ReplaceIAWithEADelayed);
if (!IsModelPrecached("models/w_models/weapons/w_eq_explosive_ammopack.mdl")) PrecacheModel("models/w_models/weapons/w_eq_explosive_ammopack.mdl");
if (!IsModelPrecached("models/v_models/v_explosive_ammopack.mdl")) PrecacheModel("models/v_models/v_explosive_ammopack.mdl");
}
public Action:ReplaceIAWithEADelayed(Handle:timer)
{
ReplaceIAWithEA(GetConVarInt(IAtoEATransformCVAR));
}
ReplaceIAWithEA(chance)
{
decl String:GameMode[16];
GetConVarString(FindConVar("mp_gamemode"), GameMode, sizeof(GameMode));
if(StrEqual(GameMode, "versus") || StrEqual(GameMode, "teamversus"))
{
if (chance == 0) return;
new ent = -1;
new prev = 0;
new replacement;
decl Float:origin[3];
decl Float:angles[3];
while ((ent = FindEntityByClassname(ent, "weapon_upgradepack_incendiary_spawn")) != -1)
{
if (prev)
{
if (GetRandomInt(1, chance) == 1)
{
GetEntPropVector(prev, Prop_Send, "m_vecOrigin", origin);
GetEntPropVector(prev, Prop_Send, "m_angRotation", angles);
replacement = CreateEntityByName("weapon_upgradepack_explosive_spawn");
DispatchSpawn(replacement);
DebugPrintToAll("Была произведена замена", prev, replacement);
if (!IsValidEdict(replacement)) return;
TeleportEntity(replacement, origin, angles, NULL_VECTOR);
DebugPrintToAll("Была произведена замена", replacement);
RemoveEdict(prev);
}
}
prev = ent;
}
if (prev)
{
if (GetRandomInt(1, chance) == 1)
{
GetEntPropVector(prev, Prop_Send, "m_vecOrigin", origin);
GetEntPropVector(prev, Prop_Send, "m_angRotation", angles);
replacement = CreateEntityByName("weapon_upgradepack_explosive_spawn");
DispatchSpawn(replacement);
DebugPrintToAll("Была произведена замена", prev, replacement);
if (!IsValidEdict(replacement)) return;
TeleportEntity(replacement, origin, angles, NULL_VECTOR);
DebugPrintToAll("Была произведена замена", replacement);
RemoveEdict(prev);
}
}
}
}
stock DebugPrintToAll(const String:format[], any:...)
{
#if (TEST_DEBUG || TEST_DEBUG_LOG)
decl String:buffer[256];
VFormat(buffer, sizeof(buffer), format, 2);
#if TEST_DEBUG
PrintToChatAll("%s", buffer);
PrintToConsole(0, "%s", buffer);
#endif
LogMessage("%s", buffer);
#else
//suppress "format" never used warning
if(format[0])
return;
else
return;
#endif
}