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

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

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

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

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

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

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

Нужно сделать чтоб 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 подцепить не могу, есть у кого идеи?

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

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


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





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

Оставляем.

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

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


Ссылка на сообщение
Поделиться на других сайтах
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 для того чтобы ее модить!

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


Ссылка на сообщение
Поделиться на других сайтах
		array<EntityAI> itemsArray = new array<EntityAI>;		
		m_Player.GetInventory().EnumerateInventory(InventoryTraversalType.PREORDER, itemsArray);

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

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

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


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

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

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

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

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

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


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

 

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

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

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

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

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

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

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


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

 

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

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

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


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

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

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


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

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

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

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

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

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


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

в 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;
        }

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


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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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