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
aimlock

Разрешение на использования Action функции предмета при наличие определенного предмета в инвентаре

Recommended Posts

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

class air_medical_cigaret_nofire : Clothing
{
	
	
  override void SetActions()
  {
   
  super.SetActions();
  PlayerBase player;
  if (player.FireInInventory())
  {
  AddAction(ActionOnFireMark);
  }
  }
 
}

Пытался сделать так, но не сработало.
 

bool FireInInventory()
	{
		
		for ( int att_i = 0; att_i < GetInventory().AttachmentCount(); ++att_i )
		{
			EntityAI attachment = GetInventory().GetAttachmentFromIndex( att_i );
			ref CargoBase attachment_cargo = attachment.GetInventory().GetCargo();
			
			if ( attachment_cargo )
			{
				for ( int cgo_i = 0; cgo_i < attachment_cargo.GetItemCount(); ++cgo_i )
				{
					EntityAI cargo_item = attachment_cargo.GetItem( cgo_i );
					

					if ( cargo_item.IsInherited(Matchbox) )
					{
						return true;						
					}
				}
			}
		}
		return false;
	}

Сделал поиск предмета в инвентаре (работает). Но на условие action подцепить не могу, есть у кого идеи?

Edited by aimlock (see edit history)

Share this post


Link to post
Share on other sites



class air_medical_cigaret_nofire : Clothing
{
	
	
  override void SetActions()
  {
   
  super.SetActions();
 
}

Оставляем.

А в самом экшене новом моддим IsCanDo функцию и возвращаем false если в инвентаре найдено нужное

Share this post


Link to post
Share on other sites
9 минут назад, 123new сказал:

class air_medical_cigaret_nofire : Clothing { override void SetActions() { super.SetActions(); }


class air_medical_cigaret_nofire : Clothing
{
	
	
  override void SetActions()
  {
   
  super.SetActions();
 
}

Оставляем.

А в самом экшене новом моддим IsCanDo функцию и возвращаем false если в инвентаре найдено нужное

Модить IsCanDo?  Я привязал акшен к ActionSingleUseBase. Там нету такой функции как IsCanDo для того чтобы ее модить!

Share this post


Link to post
Share on other sites
		array<EntityAI> itemsArray = new array<EntityAI>;		
		m_Player.GetInventory().EnumerateInventory(InventoryTraversalType.PREORDER, itemsArray);

itemsArray - массив будет содержать ВСЕ предметы (начиная от одежды и заканчивая предметов в инвентаре (и в одежде и в рюкзаке) и вообще все предметы которые есть у персонажа

Дальше сами разберетесь как действовать

Share this post


Link to post
Share on other sites
26 минут назад, aimlock сказал:

Модить IsCanDo?  Я привязал акшен к ActionSingleUseBase. Там нету такой

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

моддим его, например так

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

Share this post


Link to post
Share on other sites

 

10 минут назад, 123new сказал:

ищем например класс CraftRagRope

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

моддим его, например так

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

У меня нету привязки к крафту, следовательно и использовать класс для модификации я не могу. Только создавать с нуля в своем акшине.

Share this post


Link to post
Share on other sites
Только что, aimlock сказал:

 

У меня нету привязки к крафту, следовательно и использовать класс для модификации я не могу. Только создавать с нуля в своем акшине.

так а что мешает в своем сделать то же самое примерно?

Share this post


Link to post
Share on other sites

Да ничего просто проще использовать не override, а саму функцию в акшине bool

Share this post


Link to post
Share on other sites
16 минут назад, 123new сказал:

так а что мешает в своем сделать то же самое примерно?

Короче корректно не получилось у меня вернуть CanDo. Сделал проще :

override bool ActionCondition ( PlayerBase player, ActionTarget target, ItemBase item )
	{	
		return false;
	}

Нашел вот эту функцию в ActionSingleUseBase и вернул ее с условием. Буду сейчас тестировать.

Share this post


Link to post
Share on other sites

в override bool ActionCondition сделайте условие для выполнения 

    override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
    {
        private EntityAI itemInHands_pl = player.GetHumanInventory().GetEntityInHands();
        PA_key key = PA_key.Cast(itemInHands_pl);

            if(key)
            {
                return true;
            }

            return false;
        }

Share this post


Link to post
Share on other sites

Короче сделал максимально просто и все работает хорошо, фпс не проседает
 

override bool ActionCondition ( PlayerBase player, ActionTarget target, ItemBase item )
	{	
	    if (player.FireInInventory() || player.IsPlayerNearbyGasObject() || player.IsPlayerNearbyFireplace())
        {
         return true;
        }
	    return false;
	}

Добавил проверку на наличие рядом источников огня, можно объединить в 1 функцию, но мне нужно 2. В общем вопрос закрыт, спасибо что собрались. Поставил всем кто поучаствовал +rep

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.