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