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

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

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

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

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

Ребят, есть сей код...
 

class ActionCookOnFryingPanCB : ActionContinuousBaseCB
{
	override void CreateActionComponent()
	{
		m_ActionData.m_ActionComponent = new CAContinuousTime( 30 );
	}
};

class ActionCookOnFryingPan: ActionContinuousBase
{
	void ActionCookOnFryingPan()
	{
		m_CallbackClass = ActionCookOnFryingPanCB;
		m_CommandUID = DayZPlayerConstants.CMD_GESTUREFB_CAMPFIRE;
		m_FullBody = true;
		m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT;
		m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_LOW;
		
		m_LockTargetOnUse = false;
	}
	
	override void CreateConditionComponents()  
	{	
		m_ConditionTarget = new CCTNonRuined(UAMaxDistances.DEFAULT);
		m_ConditionItem = new CCINonRuined;
	}
		
	override string GetText()
	{
		return "Пожарить на сковородке";
	}

	override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
	{	
		FireplaceBase fireplace_target = FireplaceBase.Cast( target.GetObject() );
		Object targetObject = target.GetObject();
		Edible_Base item_on_cargo = Edible_Base.Cast( item.GetItemTypeFromCargo( Edible_Base ) );
		if ( fireplace_target && item_on_cargo && item_on_cargo.CanBeCookedOnStick() )
		{
			BarrelHoles_ColorBase barrel = BarrelHoles_ColorBase.Cast( fireplace_target );
			
			//barrel with holes
			if ( barrel )
			{
				if ( barrel.IsOpen() && fireplace_target.CanCookOnStick() )
				{
					return true;
				}
				else
				{
					return false;
				}
			}
			
			//fireplace
			if ( fireplace_target.IsBaseFireplace() )
			{
				Fireplace fireplace = Fireplace.Cast( fireplace_target );
				if ( !fireplace.IsOven() && fireplace_target.CanCookOnStick() ) 
				{
					return true;
				}
			}
			
			//fireplace indoor
			if ( fireplace_target.IsFireplaceIndoor() )
			{
				if ( fireplace_target.CanCookOnStick() ) 
				{
					return true;
				}	
			}			
		}		
		return false;
	}
};

Попытка привязать к сковородке экшн - Пожарить.. По аналогии с жиркой на палке.. Выдаётся ошибка... Undefined function "GetItemTypeFromCargo"
Если заменить две строчки :
 

		Edible_Base item_on_cargo = Edible_Base.Cast( item.GetItemTypeFromCargo( Edible_Base ) );
		if ( fireplace_target && item_on_cargo && item_on_cargo.CanBeCookedOnStick() )

на
 

		Edible_Base item_on_stick = Edible_Base.Cast( item.GetAttachmentByType( Edible_Base ) );
		if ( fireplace_target && item_on_stick && item_on_stick.CanBeCookedOnStick() )

то сервер запускается, экшн проходит... но мясо не жарится..
Подскажет кто решение? Думаю данный момент и другим будет интересен к использованию.

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


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

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

  • 0

В классе ItemBase (тип переменной item, с которой вызывается ваша функция) есть фуцнкция вида:

protected ItemBase GetItemTypeFromCargo( typename item_type, ItemBase cooking_equipment )
	{
		CargoBase cargo = cooking_equipment.GetInventory().GetCargo();
		
		for ( int i = 0; i < cargo.GetItemCount(); i++ )
		{
			EntityAI entity = cargo.GetItem( i );
			if ( entity.Type() == item_type )
			{
				ItemBase item = ItemBase.Cast( entity );

				return item;
			}
		}
		
		return NULL;
	}

с модификатором типа protected, что, как я понимаю (я не эксперт), означает, что эта функция не доступна к внешнему вызову вне этого класса. Также, насколько я вижу, у ункции 2 входнх значения, а не одно.

Так что как минимум надо выяснять откуда вы брали кусок своего кода с заведомо рабочей функции, а также смотреть что именно это за функция была в том коде, так как в теккущей версии игры это явно не применимо

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


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





  • 0
23.06.2021 в 18:00, 123new сказал:

В классе ItemBase (тип переменной item, с которой вызывается ваша функция) есть фуцнкция вида:

protected ItemBase GetItemTypeFromCargo( typename item_type, ItemBase cooking_equipment ) { CargoBase cargo = cooking_equipment.GetInventory().GetCargo(); for ( int i = 0; i < cargo.GetItemCount(); i++ ) { EntityAI entity = cargo.GetItem( i ); if ( entity.Type() == item_type ) { ItemBase item = ItemBase.Cast( entity ); return item; } } return NULL; }


protected ItemBase GetItemTypeFromCargo( typename item_type, ItemBase cooking_equipment )
	{
		CargoBase cargo = cooking_equipment.GetInventory().GetCargo();
		
		for ( int i = 0; i < cargo.GetItemCount(); i++ )
		{
			EntityAI entity = cargo.GetItem( i );
			if ( entity.Type() == item_type )
			{
				ItemBase item = ItemBase.Cast( entity );

				return item;
			}
		}
		
		return NULL;
	}

с модификатором типа protected, что, как я понимаю (я не эксперт), означает, что эта функция не доступна к внешнему вызову вне этого класса. Также, насколько я вижу, у ункции 2 входнх значения, а не одно.

Так что как минимум надо выяснять откуда вы брали кусок своего кода с заведомо рабочей функции, а также смотреть что именно это за функция была в том коде, так как в теккущей версии игры это явно не применимо

 

Достаточно отмоддидь класс ItemBase и сделать так

 

override void GetItemTypeFromCargo (блаблабла)
{
   super.GetItemTypeFromCargo(блаблабла);
}

 

И эта функция становится доступна из-за пределов класса

 

 

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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