class ActionPackGiftCB : ActionContinuousBaseCB { override void CreateActionComponent() { m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.UNPACK); } }; class ActionPackGift: ActionContinuousBase { void ActionPackGift() { m_CallbackClass = ActionPackGiftCB; m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_OPENITEM; //m_FullBody = true; m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH; m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_LOW; m_Text = "#STR_Wrap"; } override void CreateConditionComponents() { m_ConditionItem = new CCINonRuined; m_ConditionTarget = new CCTNonRuined; } override bool HasTarget() { return true; } override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item ) { ItemBase item_to_pack = ItemBase.Cast(target.GetObject()); if (!item_to_pack) return false; if ( !item_to_pack.IsTakeable() ) return false; if ( item_to_pack.IsBeingPlaced() ) return false; if ( BaseBuildingBase.Cast(item_to_pack) ) return false; if ( !item_to_pack.CanPutInCargo(null) ) return false; EntityAI tgt_parent = EntityAI.Cast( target.GetParent() ); if ( tgt_parent ) { if ( item_to_pack.GetInventory().IsAttachment() ) { if ( !item_to_pack.CanDetachAttachment(tgt_parent) || !tgt_parent.CanReleaseAttachment(item_to_pack) ) return false; } else { if ( !item_to_pack.CanRemoveFromCargo(tgt_parent) || !tgt_parent.CanReleaseCargo(item_to_pack) ) return false; } } if ( item_to_pack.GetInventory().GetCargo() && item_to_pack.GetInventory().GetCargo().GetItemCount() > 0) return false; if ( !item_to_pack.IsWeapon() && item_to_pack.GetInventory().AttachmentCount() > 0) return false; int x,y; GetGame().GetInventoryItemSize( item_to_pack, x, y ); if( x > 5 || y > 5 ) return false; return true; } override void OnFinishProgressClient( ActionData action_data ) { PlayerBase player = action_data.m_Player; ItemBase item_to_pack = ItemBase.Cast(action_data.m_Target.GetObject()); player.RemoveQuickBarEntityShortcut(item_to_pack); } override void OnFinishProgressServer( ActionData action_data ) { ItemBase item_to_pack = ItemBase.Cast(action_data.m_Target.GetObject()); ItemBase item = action_data.m_MainItem; PlayerBase player = action_data.m_Player; string typeName; if (item_to_pack) { int x,y; GetGame().GetInventoryItemSize( item_to_pack, x, y ); int rnd = Math.RandomIntInclusive(1, 4); ReplaceWithNewReciveCargoLambda lambda; if( x <= 2 && y <= 2 ) { typeName = "GiftBox_Small_" + rnd; } else if( x <= 3 && y <= 3 ) { typeName = "GiftBox_Medium_" + rnd; } else if( x <= 5 && y <= 5 ) { typeName = "GiftBox_Large_" + rnd; } else return; if(!GetGame().IsDedicatedServer()) player.RemoveQuickBarEntityShortcut(item_to_pack); lambda = new ReplaceWithNewReciveCargoLambda( item, typeName, player,item_to_pack); player.ServerReplaceItemWithNew(lambda); } } }; class ReplaceWithNewReciveCargoLambda : TurnItemIntoItemLambda { protected EntityAI m_ItemToCargo; void ReplaceWithNewReciveCargoLambda(EntityAI old_item, string new_item_type, PlayerBase player, EntityAI item_to_cargo) { m_ItemToCargo = item_to_cargo; } override void OnSuccess(EntityAI new_item) { super.OnSuccess(new_item); InventoryLocation src = new InventoryLocation; m_ItemToCargo.GetInventory().GetCurrentInventoryLocation(src); InventoryLocation dst = new InventoryLocation; dst.SetCargo(new_item, m_ItemToCargo, 0,0,0,false); if ( dst.IsValid() ) { if(GetGame().IsDedicatedServer()) m_Player.ServerTakeToDst(src,dst); else m_Player.LocalTakeToDst(src,dst); } } };