Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
Verum

Вывод сообщений

Ситуация такая.
Прописал проверку для масок на лице.
 

	bool CheckMaskHeadGear(string c_Reason = "default")
	{
		ItemBase Mask, HeadGear = NULL;
		bool condition = false;
		ref array<string> items = 
		{
			"GP5GasMask",
			"AirborneMask",
			"MouthRag",
			"WeldingMask", 
			"SurgicalMask", 
			"BalaclavaMask_Beige",
			"BalaclavaMask_Black", 
			"BalaclavaMask_Blackskull", 
			"BalaclavaMask_Blue", 
			"BalaclavaMask_Green", 
			"BalaclavaMask_Pink", 
			"BalaclavaMask_White", 
			"BandanaMask_BlackPattern", 
			"BandanaMask_CamoPattern", 
			"BandanaMask_GreenPattern", 
			"BandanaMask_PolkaPattern", 
			"BandanaMask_RedPattern", 
			"HockeyMask", 
			"NioshFaceMask",
			"DarkMotoHelmet_Black", 			
			"DarkMotoHelmet_Blue", 
			"DarkMotoHelmet_Green", 
			"DarkMotoHelmet_Grey", 
			"DarkMotoHelmet_Lime", 
			"DarkMotoHelmet_Red", 
			"DarkMotoHelmet_White", 
			"MotoHelmet_Black",
			"MotoHelmet_Blue", 
			"MotoHelmet_Green", 
			"MotoHelmet_Grey", 
			"MotoHelmet_Lime", 
			"MotoHelmet_Red", 
			"MotoHelmet_White", 
			"DG_Snipermask_Black", 
			"DG_Snipermask_Brown", 
			"DG_Snipermask_Green", 
			"DG_Snipermask_Grey"
		};

		ref array<string> ignoreitems = {"Balaclava3Holes"};
		Mask = ItemBase.Cast(GetHumanInventory().FindAttachment(InventorySlots.MASK));
		HeadGear = ItemBase.Cast(GetHumanInventory().FindAttachment(InventorySlots.HEADGEAR));

		if(Mask)
		{
			foreach(string itemM : items)
				foreach(string iitemM : ignoreitems)
					if(Mask.GetType().Contains(itemM) && !Mask.GetType().Contains(iitemM))
					return true;
		}
		if(HeadGear)
		{
			foreach(string itemH : items)
				foreach(string iitemH : ignoreitems)
					if(HeadGear.GetType().Contains(itemH) && !HeadGear.GetType().Contains(iitemH))
					return true;
		}
		return false;
	}

В экшене "попить воды" прописал следующее:
 

	override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
	{
		if (player.CheckMaskHeadGear())
		{
			Param1<string> m_MessageParam = new Param1<string>("На лице маска");
			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity());
			return false;
		}
		return super.ActionCondition(player, target, item );
	}

Проблема в том, что воду он не пьёт при надетых указанных масках, но и сообщение не выдаёт..

При этом, в скрипте на биологическую зону прописано:
 

			Param1<string> m_MessageParam = new Param1<string>("Меня что-то убивает... Нужен защитный костюм.");
			GetGame().RPCSingleParam(player1, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player1.GetIdentity());

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

Изменено пользователем Verum (история изменений)

Поделиться сообщением


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

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

  • 0

Изменил в экшене на вот это
 

modded class ActionDrink: ActionConsume
{
    override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
    {
        if(player.CheckMaskHeadGear())
        {
            if (GetGame().IsClient())
            {
                player.MessageAction("Моё лицо что-то закрывает...");
            }
            return false;
        }
        return super.ActionCondition(player, target, item );
    }
};

Теперь если маска одета, и я даже просто в руки беру бутылку, начинают лететь сообщения...
И не останавливаются...
Подскажите что не так сделал?

Поделиться сообщением


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





  • 0
modded class ActionDrink: ActionConsume
{
    override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
    {
        if(player.CheckMaskHeadGear())
        {
            return false;
        }
        return super.ActionCondition(player, target, item );
    }
};

потому как функция эта выполняется по кд постоянно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new а как дописать, что бв она выполнялась только при попытке действия?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
6 часов назад, Verum сказал:

@123new а как дописать, что бв она выполнялась только при попытке действия?

EnEndServer функцию (как-то так) моддить, вставить в ее начале проверку, мол если запрещено, вывести на экран. Получится так, что человек пытается выполнить экшен и ему сыпется ошибка на экран единоразово вместо выволнения действия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new Знать бы еще как ) я только учусь (

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
16 минут назад, Verum сказал:

@123new Знать бы еще как ) я только учусь (

попробовать вот так. Обращаю внимание, что 2 варианта вписано, первый, по идее, при попытке начать действие исполнится, второй по окончании анимации. Не тестил

modded class ActionDrink: ActionConsume
{	
	override void OnStart(ActionData action_data)
	{
		if(player.CheckMaskHeadGear())
        {
            if (GetGame().IsClient())
            {
                player.MessageAction("Моё лицо что-то закрывает...");
            }
            return;
        }
		super.OnStart(action_data);
	}
	
	override void OnFinishProgressServer( ActionData action_data )
	{
		if(player.CheckMaskHeadGear())
        {
            if (GetGame().IsClient())
            {
                player.MessageAction("Моё лицо что-то закрывает...");
            }
            return;
        }
		super.OnFinishProgressServer(action_data);
	}
};

А вообще то что выше скидывал за глаза должно хватать,  так как действия ж нету

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Verum сказал:

@123new 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

modded class ActionDrink: ActionConsume
{	
	override void OnStart(ActionData action_data)
	{
		if(action_data.m_Player.CheckMaskHeadGear())
        {
            if (GetGame().IsClient())
            {
                action_data.m_Player.MessageAction("Моё лицо что-то закрывает...");
            }
            return;
        }
		super.OnStart(action_data);
	}
	
	override void OnFinishProgressServer( ActionData action_data )
	{
		if(action_data.m_Player.CheckMaskHeadGear())
        {
            if (GetGame().IsClient())
            {
                action_data.m_Player.MessageAction("Моё лицо что-то закрывает...");
            }
            return;
        }
		super.OnFinishProgressServer(action_data);
	}
};

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new Ничего не происходит... пить он не пьёт при надетой маске, но и сообщений нет.

 

Я думаю, надо как то использовать это

 

Param1<string> m_MessageParam = new Param1<string>("Меня что-то убивает... Нужен защитный костюм.");
			GetGame().RPCSingleParam(player1, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player1.GetIdentity());

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
32 минуты назад, Verum сказал:

@123new Ничего не происходит... пить он не пьёт при надетой маске, но и сообщений нет.

 

Я думаю, надо как то использовать это

 

Param1<string> m_MessageParam = new Param1<string>("Меня что-то убивает... Нужен защитный костюм."); GetGame().RPCSingleParam(player1, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player1.GetIdentity());


Param1<string> m_MessageParam = new Param1<string>("Меня что-то убивает... Нужен защитный костюм.");
			GetGame().RPCSingleParam(player1, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player1.GetIdentity());

 

if (GetGame().IsClient())

убрать попробуй эту проверку - это раз.

Два - строку вида

action_data.m_Player.MessageAction("Моё лицо что-то закрывает...");

заменить например на

SendMessage(action_data.m_Player, "Моё лицо что-то закрывает...");

добавив

SendMessage(PlayerBase player, string Message)
{

Param1<string> m_MessageParam = new Param1<string>(Message);
			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity());

}

 

Изменено пользователем 123new (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new 
просто if оставить тут?

if (GetGame().IsClient())

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
13 минут назад, Verum сказал:

@123new 
просто if оставить тут?

if (GetGame().IsClient())


if (GetGame().IsClient())

 

нет конечно, учитесь читать код

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new да вроде учусь ) но так и не дошло что подставить туда )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
17 минут назад, Verum сказал:

@123new да вроде учусь ) но так и не дошло что подставить туда )

хреново учитесь, рекоммендую основы программирования нс c# или с++ изучить, база написания, основы работы с массивами и условиями, поможет.

modded class ActionDrink: ActionConsume
{	
	override void OnStart(ActionData action_data)
	{
		if(action_data.m_Player.CheckMaskHeadGear())
        {
            SendMessage(action_data.m_Player, "Моё лицо что-то закрывает...");
            return;
        }
		super.OnStart(action_data);
	}
	
	override void OnFinishProgressServer( ActionData action_data )
	{
		if(action_data.m_Player.CheckMaskHeadGear())
        {
            SendMessage(action_data.m_Player, "Моё лицо что-то закрывает...");
            return;
        }
		super.OnFinishProgressServer(action_data);
	}
	SendMessage(PlayerBase player, string Message)
	{
		Param1<string> m_MessageParam = new Param1<string>(Message);
		GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity());
	}
};

в качестве стимула с вас сотка (шутка)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new вотЬ )

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
48 минут назад, Verum сказал:

@123new вотЬ )

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

вставил не все из того, что скинул в последнем ответе

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new Таже ошибка

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
8 минут назад, Verum сказал:

@123new Таже ошибка

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

modded class ActionDrink: ActionConsume
{	
	override void OnStart(ActionData action_data)
	{
		if(action_data.m_Player.CheckMaskHeadGear())
        {
            SendMessage(action_data.m_Player, "Моё лицо что-то закрывает...");
            return;
        }
		super.OnStart(action_data);
	}
	
	override void OnFinishProgressServer( ActionData action_data )
	{
		if(action_data.m_Player.CheckMaskHeadGear())
        {
            SendMessage(action_data.m_Player, "Моё лицо что-то закрывает...");
            return;
        }
		super.OnFinishProgressServer(action_data);
	}
	void SendMessage(PlayerBase player, string Message)
	{
		Param1<string> m_MessageParam = new Param1<string>(Message);
		GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity());
	}
};

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

@123new К сожалению ничего не происходит. не пьёт, но и сообщений нет.
Есть ещё варианты? (((((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
32 минуты назад, Verum сказал:

@123new К сожалению ничего не происходит. не пьёт, но и сообщений нет.
Есть ещё варианты? (((((

добавь в каждой из функций вывод в лог

Print("какой-то текст");

в каждой функции текст свой лучше задать. запусти сервер, выполни действие 1 раз и смотри логи - файлы scriptlog. log

клиент - файлы в папке %localappdata%\dayz

сервер - в папке, обозначенной -profiles=
это будет означать на какой стороне работает твоя функция и работает ли. Далее от этого будем плясать.

 

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

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

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.