Перейти к содержанию

Разрывные боеприпасы в Сражении ([L4D2] Explosive Ammo Enable)


Райан

Рекомендуемые сообщения

  • Администратор

Не знаю почему, но этот плагин крашит сервер на "Нет Милосердию". Проверил два раза. То что задумывалось плагин делает, но вот крашит. Если сможете починить, дерзайте!

#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
}

 

Ссылка на комментарий
Поделиться на другие сайты
  • 4 недели спустя...
  • Администратор
5 минут назад, Чат Бот сказал:

СЛИШКОМ скучно

Вылетать с сервера как только заспавнилась коробка с разрывными боеприпасами далеко не скучно.

Кстати, сейчас кое что попробую Может поможет. Спасибо за напоминание.

Ссылка на комментарий
Поделиться на другие сайты
  • Администратор

Попробуйте, вроде не крашит. Надеюсь на обратную связь.

Тему перемещу в раздел плагинов.

Bullet.smx Bullet.sp

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Похожий контент

    • Автор KRUTIK
      Количество выдачи патронов и убийство заражённых, можно настраивать в исходнике...
      За убийство 20 заражённых, игроку выдаются рандомно. 
      50 зажигательных патронов
      50 разрывных патронов
      50 экспансивных патронов
      l4d2_specialammo.smx l4d2_specialammo.sp
    • Автор Райан
      Плагин возвращает в Сражение звуки, которые лежат в папке C:\MineGaming\steamapps\common\Left 4 Dead 2\left4dead2\sound\music\bacteria, и которые успешно однажды вырезали из Сражения. Просто поместите файл l4d2_bacteria.smx в папку /left4dead2/addons/sourcemod/plugins и перезапустите сервер.
       
      l4d2_bacteria.sp l4d2_bacteria.smx
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...