ActionUnlockContainerDoor.c
class ActionUnlockShippingContainer: ActionUnlockDoors
{
//custom condition, wrong key unlock attempt is allowed
override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
{
ContainerLockedBase shipCont;
if (Class.CastTo(shipCont, target.GetObject()))
{
int doorIndex = TranslateLockSelectionIntoDoorIdx(target);
if (doorIndex != -1)
return shipCont.IsDoorLocked(doorIndex);
}
return false;
}
override void OnFinishProgressServer( ActionData action_data )
{
ShippingContainerKeys_ColorBase key = ShippingContainerKeys_ColorBase.Cast(action_data.m_MainItem);
ContainerLockedBase shipCont = ContainerLockedBase.Cast(action_data.m_Target.GetObject());
if (shipCont && key && ((shipCont.GetLockCompatibilityType(shipCont.GetDoorIndex(action_data.m_Target.GetComponentIndex())) & key.GetKeyCompatibilityType()) == 0))
{
key.DestroyKeyServer();
}
else
{
UnlockDoor(action_data.m_Target);
MiscGameplayFunctions.DealAbsoluteDmg(action_data.m_MainItem, APPLIED_DMG);
}
}
override protected void UnlockDoor(ActionTarget target)
{
Building building;
if (Class.CastTo(building, target.GetObject()))
{
int doorIndex = TranslateLockSelectionIntoDoorIdx(target);
if (doorIndex != -1)
{
building.UnlockDoor(doorIndex,false);
}
}
}
//! Returns door idx
protected int TranslateLockSelectionIntoDoorIdx(ActionTarget target)
{
//side1_lock
ContainerLockedBase shipCont;
if (Class.CastTo(shipCont, target.GetObject()))
{
string selectionName = shipCont.GetActionComponentName( target.GetComponentIndex() );
if (selectionName.Contains("_lock"))
return (selectionName.Substring(4,1).ToInt() - 1);
}
return -1;
}
};