ActionPlugTargetIntoThis.c
class ActionPlugTargetIntoThis: ActionSingleUseBase
{
bool m_Retoggle;
void ActionPlugTargetIntoThis()
{
m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_INTERACTONCE;
m_Retoggle = false;
m_Text = "#connect_together";
}
override void CreateConditionComponents()
{
m_ConditionItem = new CCINonRuined();
m_ConditionTarget = new CCTNonRuined(UAMaxDistances.DEFAULT);
}
override bool Can(PlayerBase player, ActionTarget target, ItemBase item)
{
if (super.Can(player, target, item))
{
if (player.IsPlacingLocal())
{
m_Retoggle = true;
player.GetHologramLocal().SetIsHidden(true);
player.GetHologramLocal().GetProjectionEntity().HideAllSelections();
}
}
if (!super.Can(player, target, item))
{
if (m_Retoggle)
{
m_Retoggle = false;
player.GetHologramLocal().SetIsHidden(false);
player.GetHologramLocal().GetProjectionEntity().ShowAllSelections();
}
}
return super.Can(player, target, item);
}
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
{
ItemBase targetIB = ItemBase.Cast(target.GetObject());
//Prevent plugging to items in inventory
if (targetIB && targetIB.GetHierarchyRoot() == targetIB && item && targetIB.HasEnergyManager() && item.HasEnergyManager())
{
if (!targetIB.GetCompEM().IsPlugged() && item.GetCompEM().CanReceivePlugFrom(targetIB))
{
//hotfix, re-work entire action!
return targetIB.IsElectricAppliance();
}
// Special case for vehicle batteries
if (item.IsInherited(VehicleBattery))
{
MetalWire metalWire = MetalWire.Cast(item.GetCompEM().GetPluggedDevice());
if (metalWire && metalWire.GetCompEM().CanReceivePlugFrom(targetIB))
{
return true; // We can power the action_data.m_Target from vehicle battery because it has metal wire attached.
}
}
}
return false;
}
override bool IsDeploymentAction()
{
return true;
}
override void OnExecuteServer(ActionData action_data)
{
Process(action_data);
}
override void OnExecuteClient(ActionData action_data)
{
m_Retoggle = false;
}
void Process(ActionData action_data)
{
ItemBase targetIB = ItemBase.Cast(action_data.m_Target.GetObject());
if (action_data.m_MainItem.IsInherited(VehicleBattery))
{
// Car/truck batteries can have a metal wire attached through which they can power common electric appliances
MetalWire metalWire = MetalWire.Cast(action_data.m_MainItem.GetCompEM().GetPluggedDevice());
if (metalWire)
targetIB.GetCompEM().PlugThisInto(metalWire);
}
else
{
// Everything else in general
targetIB.GetCompEM().PlugThisInto(action_data.m_MainItem);
}
Spotlight spotlight;
if (Spotlight.CastTo(spotlight, targetIB))
spotlight.Unfold();
targetIB.GetInventory().TakeEntityAsAttachment(InventoryMode.LOCAL, action_data.m_MainItem);
action_data.m_Player.ServerDropEntity(action_data.m_MainItem);
}
}