ActionFoldEntityToSlot.c
class ActionFoldEntityToSlot : ActionSingleUseBase
{
int m_SlotID = InventorySlots.INVALID;
override void CreateConditionComponents ()
{
m_ConditionItem = new CCINonRuined;
m_ConditionTarget = new CCTNone;
}
override bool HasTarget () { return false; }
override bool ActionCondition ( PlayerBase player, ActionTarget target, ItemBase item )
{
EntityAI att = player.GetInventory().FindAttachment(m_SlotID);
if ( item && att == null )
return true;
return false;
}
override bool ActionConditionContinue ( ActionData action_data ) { return true; }
override void OnExecuteClient ( ActionData action_data )
{
ClearInventoryReservationEx(action_data);
}
override void OnExecuteServer ( ActionData action_data )
{
if ( !g_Game.IsMultiplayer() )
ClearInventoryReservationEx(action_data);
ItemBase old_item = action_data.m_MainItem;
if (old_item.ConfigIsExisting("ChangeIntoOnAttach"))
{
string slot_name = InventorySlots.GetSlotName(m_SlotID);
string str = old_item.ChangeIntoOnAttach(slot_name);
if (str != "")
{
FoldBandanaToSlotLambda lambda = new FoldBandanaToSlotLambda(action_data.m_MainItem, str, action_data.m_Player, m_SlotID);
action_data.m_Player.ServerReplaceItemInHandsWithNewElsewhere(lambda);
}
}
}
};
class FoldBandanaToSlotLambda : TurnItemIntoItemLambda
{
void FoldBandanaToSlotLambda (EntityAI old_item, string new_item_type, PlayerBase player, int slot)
{
InventoryLocation targetAtt = new InventoryLocation;
targetAtt.SetAttachment(player, NULL, slot);
OverrideNewLocation(targetAtt);
}
};