DIFF

ActionTakeFireplaceFromBarrel.c

//!DEPRECATED
class ActionTakeFireplaceFromBarrel: ActionInteractBase
{
	void ActionTakeFireplaceFromBarrel()
	{
		m_CommandUID        = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
		m_StanceMask        = DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT;
		m_Text = "#take_fireplace";
	}
	
	override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
	{
		Object target_object = target.GetObject();
		
		if ( target_object && target_object.IsFireplace() )
		{
			BarrelHoles_ColorBase fireplace_barrel = BarrelHoles_ColorBase.Cast( target_object );
			
			//check barrel fireplace state
			if ( fireplace_barrel && fireplace_barrel.IsOpen() && !fireplace_barrel.HasAshes() && !fireplace_barrel.IsBurning() )
			{
				//check cargo and attachments
				if ( fireplace_barrel.IsCargoEmpty() && fireplace_barrel.GetInventory().AttachmentCount() > 0 )
				{
					return true;
				}
			}
		}

		return false;
	}

	override void OnExecuteServer( ActionData action_data )
	{
		Object target_object = action_data.m_Target.GetObject();
		BarrelHoles_ColorBase fireplace_barrel = BarrelHoles_ColorBase.Cast( target_object );

		string newTypeName = "Fireplace";		
		InventoryLocation targetIL = new InventoryLocation;
		bool found = action_data.m_Player.GetInventory().FindFirstFreeLocationForNewEntity( newTypeName, FindInventoryLocationType.ANY, targetIL );
		if ( found )
		{
			// allow action only if there is place in inventory
			auto lambda = TakeFireplaceFromBarrelLambda( fireplace_barrel, newTypeName, action_data.m_Player );
			lambda.OverrideNewLocation( targetIL );
			action_data.m_Player.ServerReplaceItemWithNew( lambda );
		}
	}
}

class TakeFireplaceFromBarrelLambda : ReplaceItemWithNewLambdaBase
{
	PlayerBase m_Player;

	void TakeFireplaceFromBarrelLambda ( EntityAI old_item, string new_item_type, PlayerBase player )
	{
		m_Player = player;
	}
	
	override protected void RemoveOldItemFromLocation ()
	{
		// intentional no-operation
		m_RemoveFromLocationPassed = true; // but indicate the operation to be success
	}
	override protected void UndoRemoveOldItemFromLocation ()
	{
		// undo nothing
	}

	override void CopyOldPropertiesToNew( notnull EntityAI old_item, EntityAI new_item )
	{
		super.CopyOldPropertiesToNew( old_item, new_item );

		MiscGameplayFunctions.TransferInventory(old_item, new_item, m_Player);		
	}
	
	override protected void DeleteOldEntity ()
	{
		// intentional no-operation
	}
	
	override protected void CreateNetworkObjectInfo (EntityAI new_item)
	{
		super.CreateNetworkObjectInfo(new_item);
		g_Game.RemoteObjectTreeCreate(m_OldItem); // re-create network for old item 
	}
}