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

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

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

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

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

Есть/пить (mask/headgear)

Помогите решить задачку,

 

В ванильке на слоте маски есть CanEatAndDrink, соответственно правив наследование маски в ItemBase на "AllowFoodConsumption - return false", то все работает, персонаж не кушает и не пьет.

 

Добавив в скрипт "headgear", и так же добавляя параметр "AllowFoodConsumption " в ItemBase - не робит. Думаю я начудил что то не так

	override bool CanEatAndDrink()
	{
		ItemBase mask = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK));
		return (!mask || (mask && mask.AllowFoodConsumption()));
		
        ItemBase headgear = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR));
		return (!headgear || (headgear && headgear.AllowFoodConsumption()));
	}

 

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


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

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

  • 0

не знаю правильно или нет, но я делал вот так, думаю что будет понятно что и как и зачем тут
 

modded class PlayerBase extends ManBase
{
    override bool CanEatAndDrink()
    {
        if (MotoHelmet_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))
            return false;

        if (DarkMotoHelmet_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))
            return false;
        
        if (Balaclava3Holes_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK)))
            return true;
    
        if (Clothing.Cast(GetInventory().FindAttachment(InventorySlots.MASK)))
            return false;
        
        if (WeldingMask.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))
            return false;
        
        if (GreatHelm.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))
            return false;

        return true;
    }
}

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte
  • 0
GetInventory().FindAttachment(InventorySlots.MASK)

Если вы это вызываете в классе Itembase, именно в таком вызове, без указания объект вызова в начале, типа так:

player.GetInventory().FindAttachment(InventorySlots.MASK)

то вы ищете объект в слоте Mask не у игрока, а у вещи текущей.

Причем, учитывая что это класс ItemBase, то исполняется оно считай почти для всех вещей.

Не трудно догадаться, что если такого слома у объекта нет или ничего не одето, то

ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK));

вот в таком вызове будет краш-лог, ибо Cast  объекта, которого не существует - это с точки зрения логики бесполезное занятие, которое игра не понимает.

Так что думаем, к чему обращаемся в коде и что пишем))

36 минут назад, Dima198901 сказал:

не знаю правильно или нет, но я делал вот так, думаю что будет понятно что и как и зачем тут
 

modded class PlayerBase extends ManBase {     override bool CanEatAndDrink()     {         if (MotoHelmet_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))             return false;         if (DarkMotoHelmet_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))             return false;                  if (Balaclava3Holes_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK)))             return true;              if (Clothing.Cast(GetInventory().FindAttachment(InventorySlots.MASK)))             return false;                  if (WeldingMask.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))             return false;                  if (GreatHelm.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))             return false;         return true;     } }


modded class PlayerBase extends ManBase
{
    override bool CanEatAndDrink()
    {
        if (MotoHelmet_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))
            return false;

        if (DarkMotoHelmet_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))
            return false;
        
        if (Balaclava3Holes_ColorBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK)))
            return true;
    
        if (Clothing.Cast(GetInventory().FindAttachment(InventorySlots.MASK)))
            return false;
        
        if (WeldingMask.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))
            return false;
        
        if (GreatHelm.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)))
            return false;

        return true;
    }
}

 

вставляйте код в спец теги для вставки

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


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

Проблему решил следующим образом:
 

modded class PlayerBase
{  
	override bool CanEatAndDrink()
	{
		ItemBase mask = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK));
			if (mask)
			{
				return (!mask || (mask && mask.AllowFoodConsumption()));
			}

		ItemBase headgear = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR));
			if (headgear)
			{
				return (!headgear || (headgear && headgear.AllowFoodConsumption()));
			}
		return true;
	}
};

 

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


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

По такому же принципу можно получается добавить другие InventorySlots, а затем и вещи, которые (в теории) могли бы помешать кушать/пить.
 

11 минут назад, rival_jf сказал:

Проблему решил следующим образом:
 

modded class PlayerBase { override bool CanEatAndDrink() { ItemBase mask = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK)); if (mask) { return (!mask || (mask && mask.AllowFoodConsumption())); } ItemBase headgear = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR)); if (headgear) { return (!headgear || (headgear && headgear.AllowFoodConsumption())); } return true; } };


modded class PlayerBase
{  
	override bool CanEatAndDrink()
	{
		ItemBase mask = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK));
			if (mask)
			{
				return (!mask || (mask && mask.AllowFoodConsumption()));
			}

		ItemBase headgear = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR));
			if (headgear)
			{
				return (!headgear || (headgear && headgear.AllowFoodConsumption()));
			}
		return true;
	}
};

 

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка