Перейти к содержимому


Фотография

Убрать особых зараженных во время танка


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 34

#1 history_maker

history_maker

    Участник

  • Пользователь
  • PipPip
  • 132 сообщений

Отправлено 18 Апрель 2017 - 21:41

Подскажите плагин или квар убирающих особых зараженных во время танка.



#2 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 806 сообщений

Отправлено 19 Апрель 2017 - 0:20

Подскажите плагин или квар убирающих особых зараженных во время танка.

Попробуй будет работать или нет так хз если честно:

#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required


public void OnPluginStart()
{
	HookEvent("tank_spawn", Event_tank_spawn);
	HookEvent("tank_killed", Event_tank_killed);
}

public void Event_tank_spawn(Event event, const char[] name, bool dontBroadcast)
{
	CreateTimer(1.0, Timer_director_stop, GetClientOfUserId(GetEventInt(event, "userid")), TIMER_FLAG_NO_MAPCHANGE);
}
public void Event_tank_killed(Event event, const char[] name, bool dontBroadcast)
{
	CreateTimer(1.0, Timer_director_start, GetClientOfUserId(GetEventInt(event, "userid")), TIMER_FLAG_NO_MAPCHANGE);
}
public Action Timer_director_stop(Handle timer)
{
	for (int i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i) && !IsFakeClient(i))
		{
			int flag = GetCommandFlags("director_stop");
			SetCommandFlags("director_stop", flag & ~FCVAR_CHEAT);
			FakeClientCommand(i, "director_stop");
			break;
		}
	}
	return;
}
public Action Timer_director_start(Handle timer)
{
	for (int i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i) && !IsFakeClient(i))
		{
			int flag = GetCommandFlags("director_start");
			SetCommandFlags("director_start", flag & ~FCVAR_CHEAT);
			FakeClientCommand(i, "director_start");
			break;
		}
	}
	return;
}


Но если даже и будет работать, какие боссы есть на карте они останутся новые не появятся.



#3 Figa

Figa

    Участник

  • Пользователь
  • PipPip
  • 60 сообщений

Отправлено 19 Апрель 2017 - 15:05

[L4D] Stop Mobs Rush
При появление танк, плагин останавливает спаун Танков, Ведьм, Спец. Заражённых, Волн Мобов.
 
Квары:
Скрытый текст
 
P.S. Плагин нуждается в тестировании
 

Прикрепленные файлы


  • Pringles это нравится

#4 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 806 сообщений

Отправлено 19 Апрель 2017 - 19:25

Зачем дублировать ServerCommand?

ServerCommand("director_start");
ServerCommand("director_no_specials 1");

Проще:

ServerCommand("director_start;director_no_specials 1");


#5 Pringles

Pringles

    Пользователь

  • Пользователь
  • PipPipPip
  • 155 сообщений

Отправлено 08 Август 2019 - 16:21

Попробуй будет работать или нет так хз если честно:

#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required


public void OnPluginStart()
{
	HookEvent("tank_spawn", Event_tank_spawn);
	HookEvent("tank_killed", Event_tank_killed);
}

public void Event_tank_spawn(Event event, const char[] name, bool dontBroadcast)
{
	CreateTimer(1.0, Timer_director_stop, GetClientOfUserId(GetEventInt(event, "userid")), TIMER_FLAG_NO_MAPCHANGE);
}
public void Event_tank_killed(Event event, const char[] name, bool dontBroadcast)
{
	CreateTimer(1.0, Timer_director_start, GetClientOfUserId(GetEventInt(event, "userid")), TIMER_FLAG_NO_MAPCHANGE);
}
public Action Timer_director_stop(Handle timer)
{
	for (int i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i) && !IsFakeClient(i))
		{
			int flag = GetCommandFlags("director_stop");
			SetCommandFlags("director_stop", flag & ~FCVAR_CHEAT);
			FakeClientCommand(i, "director_stop");
			break;
		}
	}
	return;
}
public Action Timer_director_start(Handle timer)
{
	for (int i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i) && !IsFakeClient(i))
		{
			int flag = GetCommandFlags("director_start");
			SetCommandFlags("director_start", flag & ~FCVAR_CHEAT);
			FakeClientCommand(i, "director_start");
			break;
		}
	}
	return;
}

Но если даже и будет работать, какие боссы есть на карте они останутся новые не появятся.

А если вместо "director_stop" поставить l4d_ais_enabled 0 (из плагина l4d2_autoIS.smx) это может сработать?



#6 history_maker

history_maker

    Участник

  • Пользователь
  • PipPip
  • 132 сообщений

Отправлено 08 Август 2019 - 22:59

А если вместо "director_stop" поставить l4d_ais_enabled 0 (из плагина l4d2_autoIS.smx) это может сработать?

 

Нет, так как плагин ты возможно отключишь, но сама игра продолжит спавнить мобов.

Попробуй так, но судя по коду, плагин будет работать если в игре не больше 1 танка.

Скрытый текст
Если не поможет вообще,  значит как я писал ранее, дело в аисе.


Сообщение отредактировал history_maker: 08 Август 2019 - 22:59


#7 Pringles

Pringles

    Пользователь

  • Пользователь
  • PipPipPip
  • 155 сообщений

Отправлено 08 Август 2019 - 23:24


Нет, так как плагин ты возможно отключишь, но сама игра продолжит спавнить мобов.

Попробуй так, но судя по коду, плагин будет работать если в игре не больше 1 танка.

Скрытый текст
Если не поможет вообще,  значит как я писал ранее, дело в аисе.

Да как Ты и говорил не сработало :(   Эх так не хотелось переходить на infectedbots ;)



#8 BloodyBlade

BloodyBlade

    Пользователь

  • Пользователь
  • PipPipPip
  • 435 сообщений

Отправлено 09 Август 2019 - 0:38

 


Да как Ты и говорил не сработало :(   Эх так не хотелось переходить на infectedbots ;)

 

Пробуй:

Скрытый текст


#9 history_maker

history_maker

    Участник

  • Пользователь
  • PipPip
  • 132 сообщений

Отправлено 09 Август 2019 - 1:04

 


Да как Ты и говорил не сработало :(   Эх так не хотелось переходить на infectedbots ;)

 

Не обязательно...

Вот StopMobRush, звёздочки замени на нужные числа особых после танка. И проверь внимательно, у тебя в плагине l4d(2!)_ais_*** или нет, если что, поправь во всех кварах.

Скрытый текст


#10 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 806 сообщений

Отправлено 09 Август 2019 - 13:10

Это забавно всё выглядит. Но можно всё намного проще сделать. Без таймеров. Напрямую добавь в события и всё и используй ServerCommand для включение и выключение плагина. Также в плагине в кваре есть ли этот FCVAR_NOTIFY флаг если нету то добавь. Будет всё чётка работать, я так делаю.


В принципи можно, если так не пройдет. Можно постоянно кикать кто появится или очистить карту от за спавленных уже боссов.



#11 Pringles

Pringles

    Пользователь

  • Пользователь
  • PipPipPip
  • 155 сообщений

Отправлено 09 Август 2019 - 13:18

BloodyBladehistory_maker

Ребят не получилось.  ;)


Сообщение отредактировал Pringles: 09 Август 2019 - 13:19


#12 Pringles

Pringles

    Пользователь

  • Пользователь
  • PipPipPip
  • 155 сообщений

Отправлено 09 Август 2019 - 15:12

Это забавно всё выглядит. Но можно всё намного проще сделать. Без таймеров. Напрямую добавь в события и всё и используй ServerCommand для включение и выключение плагина. Также в плагине в кваре есть ли этот FCVAR_NOTIFY флаг если нету то добавь. Будет всё чётка работать, я так делаю.

 

Можешь показать если не трудно



#13 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 806 сообщений

Отправлено 09 Август 2019 - 15:50

Можешь показать если не трудно

Скинь для начало исходник плагина.



#14 Pringles

Pringles

    Пользователь

  • Пользователь
  • PipPipPip
  • 155 сообщений

Отправлено 09 Август 2019 - 17:12

Скинь для начало исходник плагина.

"stop_mobrush" или "l4d2_autoIS"


Сообщение отредактировал Pringles: 09 Август 2019 - 17:57


#15 BloodyBlade

BloodyBlade

    Пользователь

  • Пользователь
  • PipPipPip
  • 435 сообщений

Отправлено 09 Август 2019 - 19:25

Это забавно всё выглядит. Но можно всё намного проще сделать. Без таймеров. Напрямую добавь в события и всё и используй ServerCommand для включение и выключение плагина. Также в плагине в кваре есть ли этот FCVAR_NOTIFY флаг если нету то добавь. Будет всё чётка работать, я так делаю.


В принципи можно, если так не пройдет. Можно постоянно кикать кто появится или очистить карту от за спавленных уже боссов.

Такой способ имеешь ввиду(кик) ?

Скрытый текст

Сообщение отредактировал BloodyBlade: 09 Август 2019 - 19:32


#16 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 806 сообщений

Отправлено 09 Август 2019 - 21:28

"stop_mobrush" или "l4d2_autoIS"

 

l4d2_autoIS . Смотри что я думаю на счет плагина. Ты понимаешь как бы раунд начинается, шестеренки начинают крутится? Даже если ты его выключишь, таймеры та уже запущены. Я не думаю что тебе это поможет. Плагин переписывать надо или кикать всех или ещё что-то другое придумывать.


Такой способ имеешь ввиду(кик) ?

Скрытый текст

Ну если это работает, почему бы и нет. Но я бы по другому написал.



#17 BloodyBlade

BloodyBlade

    Пользователь

  • Пользователь
  • PipPipPip
  • 435 сообщений

Отправлено 09 Август 2019 - 21:37

l4d2_autoIS . Смотри что я думаю на счет плагина. Ты понимаешь как бы раунд начинается, шестеренки начинают крутится? Даже если ты его выключишь, таймеры та уже запущены. Я не думаю что тебе это поможет. Плагин переписывать надо или кикать всех или ещё что-то другое придумывать.


Ну если это работает, почему бы и нет. Но я бы по другому написал.

Это работает. К тому же, в плагине MonsterBots, как раз этот метод используется...кикает всех боссов, кроме танка в конце раунда.

Думаю, можно просто добавить в событие отключения плагина убийство таймера. Вроде, при отключении плагина там UnHooks идут. Добавить ниже них убийство таймера и кик всех боссов, кроме танка.


Сообщение отредактировал BloodyBlade: 10 Август 2019 - 0:51


#18 Pringles

Pringles

    Пользователь

  • Пользователь
  • PipPipPip
  • 155 сообщений

Отправлено 09 Август 2019 - 22:24

l4d2_autoIS . Смотри что я думаю на счет плагина. Ты понимаешь как бы раунд начинается, шестеренки начинают крутится? Даже если ты его выключишь, таймеры та уже запущены. Я не думаю что тебе это поможет. Плагин переписывать надо или кикать всех или ещё что-то другое придумывать.

А так можно сделать? Что б кикало именно во время танка и без участия админа(что б в ручную не кикать через меню)?



#19 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 806 сообщений

Отправлено 10 Август 2019 - 2:31

Это работает. К тому же, в плагине MonsterBots, как раз этот метод используется...кикает всех боссов, кроме танка в конце раунда.

Думаю, можно просто добавить в событие отключения плагина убийство таймера. Вроде, при отключении плагина там UnHooks идут. Добавить ниже них убийство таймера и кик всех боссов, кроме танка.

 

Ну так добавь, сделай доброе дело.
 


А так можно сделать?

Да запросто, даже мудрить нечего не надо. Там код выйдет три копейки.



#20 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 806 сообщений

Отправлено 10 Август 2019 - 13:39

Вот пробуй, накидал. 

#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required


public void OnPluginStart()
{
	HookEvent("player_spawn", eventPlayerSpawn, EventHookMode_Post);
}

public void eventPlayerSpawn(Event event, const char [] name, bool dontBroadcast)
{
	static int sBoss;
	if((sBoss = GetClientOfUserId(event.GetInt("userid"))) && sBoss && IsClientInGame(sBoss) && IsGameL4DTank() > 0)
		if(IsGameL4DBoss(sBoss) == 1 || IsGameL4DBoss(sBoss) == 2 || IsGameL4DBoss(sBoss) == 3)
			KickClient(sBoss);
}

int IsGameL4DTank()
{
	int count = 0;
	for (int i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i) && IsPlayerAlive(i) && IsGameL4DBoss(i) == 5)
			count++;
	}
	return count;
}

int IsGameL4DBoss(int i_client)
{
	return GetEntProp(i_client, Prop_Send, "m_zombieClass");
}

Можно не кикать если что их а например убивать.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных