Иконка ресурса

Root

AWOL.
Сообщения
76
Реакции
195
Map Zones
Текущая версия: 1.1

Доброго времени суток!
Представляю Вам мой самый крупный плагин. Я хотел его сделать еще давным давно, но не знал как создать визуальное отображение зоны.
Спасибо Peace-Maker за плагин Anti Rush, который очень в этом мне помог!

Описание:
Плагин создает зоны на карте куда не могут проходить игроки. Будь то террористы/красные/союзники, контры/синие/вермахт или вообще все игроки.
В плагин встроены различные наказания (до 5 стандартных и безлимитное количество "кастомных"). Админам можно выдать иммунитет от наказаний.
Скриптеры могут создавать свои зоны. Смотри пример такого плагина и второй пост.

Плагин может быть полезен для:
  • Блокировки прохождения в чужой респаун.
  • Блокировки прохождения в любое другое место.
  • Предотвращения rush'а.
  • Блокировки использования багов/эксплоитов карты.
  • Предотвращения кемперства.
  • Создания невидимых стен.
И многое другое!

Требования:
SourceMod

Поддерживаются игры:
  • CS: Source
  • CS: GO
  • Team Fortress 2
  • Insurgency
  • Все игры на движке source

Установка:
  1. Закинуть файл .sp в addons/sourcemod/scripting
  2. Закинуть файл .smx в addons/sourcemod/plugins
  3. Конфиг создается автоматически в cfg/sourcemod/sm_zones.cfg

Настройки:
  • Напишите !zones в чате и выберите пункт 'Добавить зону' (или создайте зону через Админское меню > Управление сервером > Настроить зоны на карте).
  • Встаньте в первый край зоны и нажмите кнопку E (команда +USE или Medic! в TF2).
  • Затем встаньте в конечную точку зоны (для указания площади) и еще раз нажмите кнопку E.
  • Напишите имя зоны в чате (Например middle).
  • Сохраните зону.
  • Настройте координаты, размер и наказание через главное меню.
P.S Не забывайте сохранять первые и вторые координаты зон сразу после их изменения, иначе они могут не сохраниться!

Команды:

Для управления зонами необходим флаг ADMFLAG_CONFIG ( известен по букве i ).
Если Вы хотите использовать другой флаг, измените доступ к команде sm_zones_immunity через overrides.
  • sm_zones - Открывает меню зон.
  • sm_actzone - Активирует отключенную зону.
  • sm_diactzone - Отключает зону, не удаляя её с карты.
После использования оных команд админам будет выскакивать меню с включенными или отключенными зонами на карте.
Если команда используется через серверный консоль, то необходимо полностью указать имя зоны (для ее включения или отключения соответственно).
Например: sm_diactzone middle

Переменные:
  • sm_zones_enable - Включить/выключить плагин зон. (по стандарту вкл.)
  • sm_zones_punishment - Стандартное наказание для любой зоны (если не указано через меню):
    • 1 = Оповещение в чате
    • 2 = Отталкивание назад (стандарт)
    • 3 = Убийство игрока
    • 4 = Предотвращение стрельбы внутри зоны
    • 5 = Использование оружия ближнего боя внутри зоны
    • 6 = Нестандартное (кастомное) наказание
  • sm_zones_admin_immunity - Защищать админов от наказаний зон. (по стандарту выкл.)
  • sm_zones_show_messages - Оповещать игроков в чате когда они заходит или выходит из какой-либо зоны. (по стандарту вкл.)
  • sm_zones_show - Всегда ли показывать очертания зон на карте? (по стандарту выкл.)

Заметки:
  • Отключенные зоны не удаляются из конфига и всё равно отображаются на карте. Чтобы их снова активировать, откройте пункт Активировать зону или введите !actzone в чате.
  • Вы можете найти конфиги зон для каждой карты в папке sourcemod/data/zones/
  • Все зоны заново создаются после начала раунда, даже если они были отключены ранее.
  • Красный/синий/зеленый цвета зоны означают что красная/синяя/зеленая команда может проходить сквозь эту зону безнаказанно :-D. "Свои" зоны не отображаются для игроков.
  • Если зоны иногда исчезают, укажите наименьший интервал их отображения в строке №27 и скомпилируйте плагин.
  • Не рекомендуется всегда отображать зоны на карте (с целью предотвращения возможных лагов сервера и/или игроков).
  • Плагин работает в любой игре, которую поддерживает SourceMod!
  • Плагин генерирует собственный конфиг (cfg/sourcemod/sm_zones.cfg).
  • Плагин поддерживает различные переводы!

Серверы с этим плагином

Посмотреть исходный код
 
Последнее редактирование модератором:

Root

AWOL.
Сообщения
76
Реакции
195
Re: [ANY] Map Zones (Зоны на карте)

Больше примеров использования "кастомных" зон.
PHP:
#include <sdktools>
#include <sdkhooks>
#undef REQUIRE_EXTENSIONS // Чтобы плагин загрузился, нужно отметить дополнения как "необязательные"
#include <cstrike>
#include <tf2_stocks>
#tryinclude <dodhooks> // Для компиляции
#define MAX_EDICTS (1 << 11)

// Для дуэльной зоны
new bool:InDuelingZone[MAXPLAYERS + 1] = {false, ...}, numDuellers[MAX_EDICTS];

public Plugin:myinfo =
{
	name        = "SM Custom Zones",
	author      = "Root",
	description = "Тестовый плагин \"кастомных\" зон.",
	version     = "1.0",
	url         = "http://www.dodsplugins.com/"
}

public OnPluginStart()
{
	// HookEventEx не будет выдавать ошибку, если такого события не существует (например в DoD:S)
	HookEventEx("round_freeze_end", OnRoundStart);
}

public OnEntityCreated(entity, const String:classname[])
{
	// Количество дуэлянтов ограничено! :D
	numDuellers[entity] = 0;
}

public OnEntityDestroyed(entity)
{
	// Если игрок ушел с сервера, значит он больше не в дуэльной зоне
	if (1 <= entity <= MaxClients)
	{
		InDuelingZone[entity] = false;
	}
	if (numDuellers[entity])
	{
		// Если вдруг удалилась дуэльная зона, тогда "обезвредим" всех дуэлянтов
		for (new i = 1; i <= MaxClients; i++)
			InDuelingZone[i] = false;
	}
}

public OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	// Когда раунд начался, активируем 'no rush' зону для терроров
	ServerCommand("sm_actzone norush");
	CreateTimer(1.0, Timer_ActivateZone, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action:Timer_ActivateZone(Handle:timer)
{
	// Т.к. таймер повторяется каждую секунду, создадим счетчик
	static TimesRepeated = 0;

	switch (++TimesRepeated)
	{
		case 10, 20, 30: // Каждые 10 секунд...
		{
			for (new i = 1; i <= MaxClients; i++)
			{
				if (IsClientInGame(i))
				{
					// ... будем показывать террористам ...
					if (GetClientTeam(i) != CS_TEAM_T)
						continue;

					// ... через сколько секунд они смогут рашить
					PrintToChat(i, "Вы сможете атаковать только через %i сек!", 40 - TimesRepeated);
				}
			}
		}
		case 40: // После 40 секунд отключим зону
		{
			// Обнулим счетчик таймера
			TimesRepeated = 0;

			// Активируем зону (по её названию) через консоль
			ServerCommand("sm_diactzone norush");

			PrintToChatAll("Готовьтесь к смерти!");

			// Остановим повторяющийся таймер
			return Plugin_Stop;
		}
	}

	return Plugin_Continue;
}

/**
 * OnEnteredProtectedZone()
 *
 * Когда игрок входит в зону.
 *
 * @param zone		Индекс зоны в которую вошел игрок.
 * @param client	Индекс игрока, который вошел в зону.
 * @param prefix	Префикс, отображаемый в чате (когда игрок входит в зону).
 * @noreturn
 * -------------------------------------------------------------------------- */
public Action:OnEnteredProtectedZone(zone, client, const String:prefix[])
{
	// Заполучим переменную sm_zones_show_messages, которая показывает сообщения
	static Handle:ShowZones   = INVALID_HANDLE;
	if (!ShowZones) ShowZones = FindConVar("sm_zones_show_messages");

	if (1 <= client <= MaxClients)
	{
		// Заполучим имя зоны (чтобы потом сравнивать в какую конкретно зону вошел игрок)
		decl String:m_iName[MAX_NAME_LENGTH*2], String:szMsg[PLATFORM_MAX_PATH];
		GetEntPropString(zone, Prop_Data, "m_iName", m_iName, sizeof(m_iName));

		// Пропустим первые 8 символов чтобы игнорировать префикс зоны (sm_zone )
		if (StrEqual(m_iName[8], "chat", false))
		{
			// Тестовая зона
			Format(szMsg, sizeof(szMsg), "Вы зашли в зону под названием \"%s\".", m_iName[8]);
		}

		// Зона неуязвимости
		else if (StrEqual(m_iName[8], "godmode", false))
		{
			// Сделаем игрока неуязвимым при помощи плагина, представленного ниже
			// https://forums.alliedmods.net/showthread.php?p=979550
			ServerCommand("sm_god #%i 1", GetClientUserId(client));
			strcopy(szMsg, sizeof(szMsg), "Вы зашли в зону бессмертия!");
		}

		// Зона пониженной гравитации
		else if (StrEqual(m_iName[8], "lowgrav", false))
		{
			// Применим только половинную гравитацию для игрока
			SetEntityGravity(client, 0.5);
			strcopy(szMsg, sizeof(szMsg), "Вы зашли в зону пониженной гравитации!");
		}

		// А это зона где игроки могут закупиться, но не могут стрелять
		else if (StrEqual(m_iName[8], "spawnoshoot", false))
		{
			if (SDKHookEx(client, SDKHook_PostThinkPost, PostThinkPost))
				strcopy(szMsg, sizeof(szMsg), "Вы не сможете стрелять пока находитесь в этой зоне!");
		}

		// Зона возвращения в респаун
		else if (StrEqual(m_iName[8], "spawntele", false))
		{
			// Возродим (т.е. возвратим) игрока на свою базу
			switch (EngineVersion:GetEngineVersion())
			{
				// CS:S и CS:GO использует свою функцию возрожедния
				case Engine_CSS, Engine_CSGO: CS_RespawnPlayer(client);
				case Engine_TF2: TF2_RespawnPlayer(client); // И TF2 тоже

#if defined _dodhooks_included
				case Engine_DODS: RespawnPlayer(client); // Для DoD:S необходимо использовать дополнение DoD Hooks
#endif
				default: TeleportEntity(client, Float:{123.0, 456.0, 789.0}, NULL_VECTOR, NULL_VECTOR); // Можно просто телепортируем игрока в нужные координаты
			}

			// Форматируем сообщение
			strcopy(szMsg, sizeof(szMsg), "You shall not pass, motherfucker!");
		}

		// Дуэльная зона
		else if (StrEqual(m_iName[8], "dueling", false))
		{
			// Увеличим кол-во дуэлянтов
			// Если дуэлянтов меньше или равно 2, то...
			if (++numDuellers[zone] <= 2)
			{
				// ... заблокируем получаемый урон от любых игроков, находящихся вне дуэльной зоны
				InDuelingZone[client] = true;
				SDKHook(client, SDKHook_TraceAttack,  TraceAttack);
				SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
				strcopy(szMsg, sizeof(szMsg), "Вы зашли в зону для дуэлей!");

				// Сделаем так чтобы иные игроки не смогли входить в зону
				//SetEntProp(zone, Prop_Send, "m_CollisionGroup", 17);
			}
		}

		// Проверим должно ли отображаться сообщение сразу как только игрок вошел в зону?
		if (GetConVarBool(ShowZones))
		{
			PrintToChat(client, "%s%s", prefix, szMsg);
		}
	}
}

/**
 * OnLeftProtectedZone()
 *
 * Когда игрок выходит из зоны.
 *
 * @param zone		Индекс зоны из которой вышел игрок.
 * @param client	Индекс игрока, который вышел из зоны.
 * @param prefix	Префикс, отображаемый в чате (когда игрок выходит из зоны).
 * @noreturn
 * -------------------------------------------------------------------------- */
public Action:OnLeftProtectedZone(zone, client, const String:prefix[])
{
	static Handle:ShowZones   = INVALID_HANDLE;

	// Сохраним носитель переменной (через static) чтобы в дальнейшем переменную не запрашивать
	if (!ShowZones) ShowZones = FindConVar("sm_zones_show_messages");

	if (1 <= client <= MaxClients)
	{
		// Необходимо проверять зоны по их названию, иначе "нестандартные" зоны были бы полной чушью
		decl String:m_iName[MAX_NAME_LENGTH*2], String:szMsg[PLATFORM_MAX_PATH];
		GetEntPropString(zone, Prop_Data, "m_iName", m_iName, sizeof(m_iName));

		// И здесь пропустим префиксы 'sm_zone '
		if (StrEqual(m_iName[8], "chat", false))
		{
			Format(szMsg, sizeof(szMsg), "Вы вышли из зоны \"%s\".", m_iName[8]);
		}
		// Имена зон должны строго соответствовать!
		else if (StrEqual(m_iName[8], "godmode", false))
		{
			// Отключим бессмертие после выхода из зоны неуязвимости
			ServerCommand("sm_god #%i 0", GetClientUserId(client));
			strcopy(szMsg, sizeof(szMsg), "Вы снова простой смертный!");
		}
		else if (StrEqual(m_iName[8], "lowgrav", false))
		{
			// Вернем стандартную гравитацию
			SetEntityGravity(client, 1.0);
			strcopy(szMsg, sizeof(szMsg), "Вы вышли из зоны пониженной гравитации!");
		}
		else if (StrEqual(m_iName[8], "spawnoshoot", false))
		{
			SDKUnhook(client, SDKHook_PostThinkPost, PostThinkPost);
			strcopy(szMsg, sizeof(szMsg), "Вы покинули зону и снова можете стрелять!"); // Звучит двойственно...
		}
		else if (StrEqual(m_iName[8], "dueling", false))
		{
			// Для предотвращения ошибок надо сверить что один из дуэлянтов покинул зону
			if (InDuelingZone[client])
			{
				numDuellers[zone]--;
				InDuelingZone[client] = false;
				SDKUnhook(client, SDKHook_TraceAttack,  TraceAttack);
				SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
				strcopy(szMsg, sizeof(szMsg), "Вы вышли из дуэльной зоны!");
				//SetEntProp(zone, Prop_Send, "m_CollisionGroup", 11);
			}
		}
		// И так далее...

		// Когда игрок умирает, считается что он покинул зону
		if (GetConVarBool(ShowZones) && IsPlayerAlive(client))
		{
			// Отобразим сообщение только когда живой игрок покидает зону
			PrintToChat(client, "%s%s", prefix, szMsg);
		}
	}
}

public PostThinkPost(client)
{
	SetEntPropFloat(client, Prop_Send, "m_flNextAttack", GetGameTime() + 0.5);
}

public Action:TraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
{
	return (InDuelingZone[attacker] && InDuelingZone[victim]) ? Plugin_Continue : Plugin_Handled;
}

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	return (InDuelingZone[attacker] && InDuelingZone[victim]) ? Plugin_Continue : Plugin_Handled;
}
 
Последнее редактирование:

Leckter Hannibal

Участник
Сообщения
538
Реакции
182
Re: [ANY] Map Zones (Зоны на карте)

Здравствуйте плагин отличный .
Вот если бы еще доработать в нем чтоб зона запрета настраивалась на срабатывание через определенной время это было бы сильно . Ведь можно было бы ее использовать на карте даст 2 для таких целей чтоб не крысили люди на респе .То есть отметил зону и секунд через тридцать там был бы запрет терам стрелять или тупо выталкивала от туда.Может создатель плагина Root подумает над этим если конечно не трудно или не в лом.Вроде неплохое дополнение было бы.
P.S. За труды спасибо !!! :beer:
 

Lominad

Участник
Сообщения
195
Реакции
33
Re: [ANY] Map Zones (Зоны на карте)

Здравствуйте плагин отличный .
Вот если бы еще доработать в нем чтоб зона запрета настраивалась на срабатывание через определенной время это было бы сильно . Ведь можно было бы ее использовать на карте даст 2 для таких целей чтоб не крысили люди на респе .То есть отметил зону и секунд через тридцать там был бы запрет терам стрелять или тупо выталкивала от туда.Может создатель плагина Root подумает над этим если конечно не трудно или не в лом.Вроде неплохое дополнение было бы.
P.S. За труды спасибо !!! :beer:

Всеми руками и ногами поддерживаю!
 

Root

AWOL.
Сообщения
76
Реакции
195
Re: [ANY] Map Zones (Зоны на карте)

Как то так
PHP:
#include <sdktools>
#include <sdkhooks>

public OnPluginStart()
{
	// Отловим событие начала раунда
	switch (EngineVersion:GetEngineVersion())
	{
		case Engine_DODS: HookEvent("dod_round_start",      OnRoundStart, EventHookMode_PostNoCopy);
		case Engine_TF2:  HookEvent("teamplay_round_start", OnRoundStart, EventHookMode_PostNoCopy);
		default:          HookEventEx("round_start",        OnRoundStart, EventHookMode_PostNoCopy);
	}
}

public OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	// Деактивируем нашу зону в начале раунда
	ServerCommand("sm_diactzone myzone");
	CreateTimer(30.0, Timer_ActivateMyZone, _, TIMER_FLAG_NO_MAPCHANGE);
}

public Action:Timer_ActivateMyZone(Handle:timer)
{
	// Активируем зону спустя 30 секунд
	ServerCommand("sm_actzone myzone");

	// Найдем нашу зону на карте
	decl String:class[MAX_NAME_LENGTH*2], zone; zone = -1;
	while ((zone = FindEntityByClassname(zone, "trigger_multiple")) != -1)
	{
		if (IsValidEntity(zone)
		&& GetEntPropString(zone, Prop_Data, "m_iName", class, sizeof(class))
		&& StrEqual(class[8], "myzone", false)) // Сверим её по имени
		{
			// Сделаем зону отталкивающей
			SetEntProp(zone, Prop_Send, "m_CollisionGroup", 17);
		}
	}
}

public Action:OnEnteredProtectedZone(zone, client, const String:prefix[])
{
	// Не забывайте что наказание должно быть "нестандартным"
	static Handle:ShowZones   = INVALID_HANDLE;
	if (!ShowZones) ShowZones = FindConVar("sm_zones_show_messages");

	if (1 <= client <= MaxClients)
	{
		decl String:m_iName[MAX_NAME_LENGTH*2];
		GetEntPropString(zone, Prop_Data, "m_iName", m_iName, sizeof(m_iName));

		// Когда игрок заходит в нашу зону
		if (StrEqual(m_iName[8], "myzone", false))
		{
			// Запретим стрельбу пока игрок находится внутри зоны
			SDKHookEx(client, SDKHook_PostThinkPost, PostThinkPost);

			if (GetConVarBool(ShowZones))
			{
				PrintToChat(client, "%sВы не можете стрелять пока находитесь в этой зоне!", prefix)
			}
		}
	}
}

public Action:OnLeftProtectedZone(zone, client, const String:prefix[])
{
	static Handle:ShowZones   = INVALID_HANDLE;
	if (!ShowZones) ShowZones = FindConVar("sm_zones_show_messages");

	if (1 <= client <= MaxClients)
	{
		decl String:m_iName[MAX_NAME_LENGTH*2];
		GetEntPropString(zone, Prop_Data, "m_iName", m_iName, sizeof(m_iName));

		if (StrEqual(m_iName[8], "myzone", false))
		{
			// Разрешим стрельбу
			SDKUnhook(client, SDKHook_PostThinkPost, PostThinkPost);

			if (GetConVarBool(ShowZones) && IsPlayerAlive(client))
			{
				PrintToChat(client, "%sВы снова можете стрелять!", prefix);
			}
		}
	}
}

public PostThinkPost(client)
{
	SetEntPropFloat(client, Prop_Send, "m_flNextAttack", GetGameTime() + 0.5);
}
 
Последнее редактирование:

Niver

Участник
Сообщения
4
Реакции
0
Re: [ANY] Map Zones (Зоны на карте)

Привет. Отличный плагин, но можно как нибудь сделать так что бы при создать двух точек, что бы с первой точки телепотировало во вторую для всех игроков?
 
Последнее редактирование:

dp_ua

Участник
Сообщения
9
Реакции
0
Re: [ANY] Map Zones (Зоны на карте)

в лефте 1 не пашет. во-первых ошибки при компиляции, во-вторых потом ни на одну команду не отвечает, хотя плаг "стал" после редактирования проблемных строк.
+ "вырванный" лог ошибок из консоли

L 09/14/2014 - 23:26:46: [SM] Plugin encountered error 4: Invalid parameter or parameter type
L 09/14/2014 - 23:26:46: [SM] Native "Format" reported: Language phrase "Setup Zones" not found
L 09/14/2014 - 23:26:46: [SM] Displaying call stack trace for plugin "sm_zones.smx":
L 09/14/2014 - 23:26:46: [SM] [0] Line 1041, sm_zones.sp::AdminMenu_Zones()
L 09/14/2014 - 23:26:46: [SM] Plugin encountered error 4: Invalid parameter or parameter type
L 09/14/2014 - 23:26:46: [SM] Native "Format" reported: Language phrase "Setup Zones" not found
L 09/14/2014 - 23:26:46: [SM] Displaying call stack trace for plugin "sm_zones.smx":
L 09/14/2014 - 23:26:46: [SM] [0] Line 1041, sm_zones.sp::AdminMenu_Zones()
dp_ua: !zones
L 09/14/2014 - 23:26:53: [SM] Plugin encountered error 4: Invalid parameter or parameter type
L 09/14/2014 - 23:26:53: [SM] Native "SetMenuTitle" reported: Language phrase "Setup Zones For" not found
L 09/14/2014 - 23:26:53: [SM] Displaying call stack trace for plugin "sm_zones.smx":
L 09/14/2014 - 23:26:53: [SM] [0] Line 1067, sm_zones.sp::ShowZonesMainMenu()
L 09/14/2014 - 23:26:53: [SM] [1] Line 975, sm_zones.sp::Command_SetupZones()
 

FBZA

Участник
Сообщения
58
Реакции
8
Re: [ANY] Map Zones (Зоны на карте)

dp_ua, все прекрасно компилируется, возможно, тебе требуется обновить sourcemod или у тебя нет sdkhooks.
А по-сабжу: ты переводы кинул?
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Re: [ANY] Map Zones (Зоны на карте)

dp_ua, у тебя ошибки связанные с транслитом (наверно его нет или не полный).
 

Sam_Fisher

Участник
Сообщения
703
Реакции
203
Re: [ANY] Map Zones (Зоны на карте)

А на CS:S будет работать? Он вроде как для DoD, но вдруг....
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #11
Re: [ANY] Map Zones (Зоны на карте)

Sam_Fisher, будет.
 

Sam_Fisher

Участник
Сообщения
703
Реакции
203
Re: [ANY] Map Zones (Зоны на карте)

R1KO, а его как-то можно использовать в целях блокировки проходов при N-м кол-ве игроков?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #13
Re: [ANY] Map Zones (Зоны на карте)

Sam_Fisher, Во вором посте пример использования.
Нужно сделать как в Blocker passes только с этими зонами
 

Elkroal

Участник
Сообщения
3
Реакции
1
Re: [ANY] Map Zones (Зоны на карте)

Расскажите, пожалуйста, незнающему как добавить телепорт на респавн в плагин
Буду премного благодарен
 

Max Exception

Участник
Сообщения
1
Реакции
0
Re: [ANY] Map Zones (Зоны на карте)

Вот так сохраняет зоны, без имени и конфинга например что бы в чат только писало а не откидывало

Игра CS:S

PHP:
"Zones"
{
    "0"
    {
        "zone_ident"        "\"
        "coordinates 1"        "1616.219727 348.182709 80.031250"
        "coordinates 2"        "1254.987793 332.031250 80.031250"
    }
}
Как это исправить?

А должно быть вот так

PHP:
"Zones"
{
    "0"
    {
        "zone_ident"        "test"
        "restrict_team"        "3"
        "punishment"        "3"
        "coordinates 1"        "1616.219727 348.182709 80.031250"
        "coordinates 2"        "1254.987793 332.031250 80.031250"
    }
}
 
Последнее редактирование:

dp_ua

Участник
Сообщения
9
Реакции
0
Re: [ANY] Map Zones (Зоны на карте)

l4d лог ошибок. так на каждой карте. в чем может быть проблема?

[SM] Displaying call stack trace for plugin "sm_zones.smx":
[SM] [0] Line 2330, sm_zones.sp::SpawnZone()
[SM] [1] Line 485, sm_zones.sp::OnRoundStart()
Error log file session closed.
SourceMod error session started

Info (map "l4d_vs_smalltown03_ranchhouse") (file "errors_20141012.log")
[SM] Native "CreateEntityByName" reported: Cannot create new entity when no map is running
 

Грешник

Участник
Сообщения
1
Реакции
0
Re: [ANY] Map Zones (Зоны на карте)

Css, v80+, все верно залил.
Сервер не видит плагин( Скорее всего руки из опы...
 

AsJ

Участник
Сообщения
16
Реакции
0
PHP:
                    case NOSHOOT:
                    {
                        if (StartTouch)
                        {
                            // Notify player that he is not allowed to shoot
                            if (messages) PrintToChat(activator, "%s%t", PREFIX, "Can't shoot");
                            if (!IsTF2)   WeaponPunishment[activator] = true;
                        }
                        else // Nope - player just left zone
                        {
                            // Dont set weapon punishments for TF2 because players cant drop/equip weapons
                            if (messages) PrintToChat(activator, "%s%t", PREFIX, "Can shoot");
                            if (!IsTF2)   WeaponPunishment[activator] = false;
                        }

                        new weapons = -1, Float:time = GetGameTime();
                        for (i = 0; i < MAX_WEAPONS; i += 4)
                        {
                            // Retrieve all player weapons
                            if ((weapons = GetEntDataEnt2(activator, m_hMyWeapons + i)) != -1)
                            {
                                // Checking for 'alive player' is also required
                                if (StartTouch)
                                {
                                    // Set very very big (an unlimited) cooldown for weapons to prevent shooting
                                    SetEntDataFloat(weapons, m_flNextPrimaryAttack,   time + 999.9);
                                    SetEntDataFloat(weapons, m_flNextSecondaryAttack, time + 999.9);
                                }
                                else // If player dies in that zone, he will not able to shoot on respawn, so checking for alive player does the trick
                                {
                                    // Setup default timestamp to allow shooting by weapons
                                    SetEntDataFloat(weapons, m_flNextPrimaryAttack,   time);
                                    SetEntDataFloat(weapons, m_flNextSecondaryAttack, time);
                                }
                            }
                        }
Че тут нужно изменить чтобы не отнимало оружие ?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #19
AsJ, оно его и не отнимает, а просто не дает стрелять
 

DRUID

Участник
Сообщения
59
Реакции
10
Я немного не понимаю, как добавить зону бессмертия, помогите.
 
Сверху Снизу