Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 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());

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

Edited by Verum (see edit history)

Share this post


Link to post
Share on other sites

20 answers to this question

Recommended Posts

  • 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 );
    }
};

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

Share this post


Link to post
Share on other sites







  • 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 );
    }
};

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

 

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0
6 часов назад, Verum сказал:

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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 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);
	}
};

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

Share this post


Link to post
Share on other sites
  • 0

@123new 

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

Share this post


Link to post
Share on other sites
  • 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);
	}
};

 

Share this post


Link to post
Share on other sites
  • 0

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

 

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

 

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

 

Share this post


Link to post
Share on other sites
  • 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());

}

 

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0
13 минут назад, Verum сказал:

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

if (GetGame().IsClient())


if (GetGame().IsClient())

 

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 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());
	}
};

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

Share this post


Link to post
Share on other sites
  • 0

@123new вотЬ )

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

Share this post


Link to post
Share on other sites
  • 0
48 минут назад, Verum сказал:

@123new вотЬ )

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 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());
	}
};

 

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0
32 минуты назад, Verum сказал:

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

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

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

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

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

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

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.