Dayz Explorer  1.24.157551 (v105080)
Dayz Code Explorer by Zeroy
actionlockattachment.c
Go to the documentation of this file.
1 //Transfer locktypes from BasicDefines.hpp here. This is mostly for readability
2 //NONE must be 0 as it is actively used below
4 {
5  NONE = 0,
6  LOCK_SCREW = 1,
7  LOCK_BOLT = 2,
8  LOCK_NUT = 3,
9  LOCK_WIRE = 4
10 }
11 
12 class ActionLockAttachmentCB : ActionContinuousBaseCB
13 {
14  override void CreateActionComponent()
15  {
16  m_ActionData.m_ActionComponent = new CAContinuousTime( UATimeSpent.BASEBUILDING_REPAIR_FAST );
17  }
18 };
19 
21 {
22  private const string LOCK_VERSION = "#widget_lock";
23  private const string UNLOCK_VERSION = "#widget_unlock";
24  private string m_Name = LOCK_VERSION;
25 
27  {
28  m_CallbackClass = ActionLockAttachmentCB;
30 
31  m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
32  m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
33  m_FullBody = true;
34  }
35 
36  override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
37  {
38  ItemBase target_IB = ItemBase.Cast(target.GetObject());
39  if ( target_IB.IsLockedInSlot() )
40  m_Text = UNLOCK_VERSION;
41  else if ( target_IB.IsAlive() )
42  m_Text = LOCK_VERSION;
43  else
44  m_Text = "";
45  }
46 
47  override void CreateConditionComponents()
48  {
51  }
52 
53  override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
54  {
55  if ( !target )
56  return false;
57 
58  EntityAI parent_EAI = EntityAI.Cast(target.GetParent());
59  ItemBase target_IB = ItemBase.Cast(target.GetObject());
60 
61  array<int> compLock = item.m_CompatibleLocks;
62  int targetType = eLockTypes.NONE;
63 
64  if ( target_IB && parent_EAI )
65  {
66  //CAR DOOR HANDLING
67  //I don't really like this, but sometimes specifics have to be handled in generics
68  CarDoor targetDoor = CarDoor.Cast(target_IB);
69  if ( targetDoor )
70  {
72  bool isPresent = targetDoor.GetInventory().GetCurrentInventoryLocation( loc );
73 
74  if ( !isPresent || loc.GetSlot() == -1 )
75  return false;
76 
77  string slotName = InventorySlots.GetSlotName( loc.GetSlot() );
78  if ( slotName && CarScript.Cast( parent_EAI ).GetCarDoorsState( slotName ) != CarDoorState.DOORS_OPEN )
79  return false;
80  }
81  //END OF CAR DOOR SPECIFICS
82 
83 
84  if ( target_IB.IsLockedInSlot() )
85  m_Name = UNLOCK_VERSION;
86  else if ( target_IB.IsAlive() )
87  m_Name = LOCK_VERSION;
88  else if ( !target_IB.IsLockedInSlot() )
89  return false;
90 
91  targetType = target_IB.GetLockType();
92 
93  for (int i = 0; i < compLock.Count(); i++)
94  {
95  if ( targetType == compLock[i] && targetType != eLockTypes.NONE)
96  {
97  return true;
98  }
99  }
100  }
101  return false;
102  }
103 
104  override void OnStartAnimationLoop( ActionData action_data )
105  {
106  super.OnStartAnimationLoop( action_data );
107 
108  if ( !GetGame().IsMultiplayer() || GetGame().IsServer() )
109  {
110  ItemBase target_IB = ItemBase.Cast( action_data.m_Target.GetObject() );
111  Param2<bool, string> play = new Param2<bool, string>( true, action_data.m_MainItem.GetLockSoundSet() );
112  GetGame().RPCSingleParam( target_IB, ERPCs.RPC_SOUND_LOCK_ATTACH, play, true );
113  }
114  }
115 
116  override void OnEnd( ActionData action_data )
117  {
118  if ( !GetGame().IsMultiplayer() || GetGame().IsServer() )
119  {
120  ItemBase target_IB = ItemBase.Cast( action_data.m_Target.GetObject() );
121  Param2<bool, string> play = new Param2<bool, string>( false, action_data.m_MainItem.GetLockSoundSet() );
122  GetGame().RPCSingleParam( target_IB, ERPCs.RPC_SOUND_LOCK_ATTACH, play, true );
123  }
124  }
125 
126  override void OnEndAnimationLoop( ActionData action_data )
127  {
128  super.OnEndAnimationLoop( action_data );
129 
130  if ( !GetGame().IsMultiplayer() || GetGame().IsServer() )
131  {
132  ItemBase target_IB = ItemBase.Cast( action_data.m_Target.GetObject() );
133  Param2<bool, string> play = new Param2<bool, string>( false, action_data.m_MainItem.GetLockSoundSet() );
134  GetGame().RPCSingleParam( target_IB, ERPCs.RPC_SOUND_LOCK_ATTACH, play, true );
135  }
136  }
137 
138  override void OnFinishProgressServer( ActionData action_data )
139  {
140  ItemBase target_IB = ItemBase.Cast(action_data.m_Target.GetObject());
141 
142  MiscGameplayFunctions.DealAbsoluteDmg(action_data.m_MainItem, 5);
143 
144  if (target_IB.IsLockedInSlot())
145  {
146  target_IB.UnlockFromParent();
147  return;
148  }
149 
150  target_IB.LockToParent();
151  }
152 }
ItemBase
Definition: inventoryitem.c:730
Param2
Definition: ppeconstants.c:66
GetGame
proto native CGame GetGame()
CarDoor
Definition: inventoryitem.c:496
CAContinuousTime
Definition: cacontinuoustime.c:1
InventorySlots
provides access to slot configuration
Definition: inventoryslots.c:5
UASoftSkillsWeight
Definition: actionconstants.c:118
LOCK_NUT
LOCK_NUT
Definition: actionlockattachment.c:5
m_Name
string m_Name
Definition: bioslobbyservice.c:35
CarScript
Definition: civiliansedan.c:1
InventoryLocation
InventoryLocation.
Definition: inventorylocation.c:27
UAMaxDistances
Definition: actionconstants.c:104
CCTCursorNoRuinCheck
Definition: cctcursornoruincheck.c:1
m_FullBody
protected bool m_FullBody
Definition: actionbase.c:52
PlayerBase
Definition: playerbaseclient.c:1
LOCK_SCREW
LOCK_SCREW
Definition: actionlockattachment.c:3
ActionTarget
class ActionTargets ActionTarget
ActionData
Definition: actionbase.c:20
eLockTypes
eLockTypes
Definition: actionlockattachment.c:3
CreateActionComponent
enum eLockTypes CreateActionComponent()
Definition: actionlockattachment.c:14
DayZPlayerConstants
DayZPlayerConstants
defined in C++
Definition: dayzplayer.c:601
CarDoorState
CarDoorState
Definition: carscript.c:1
slotName
PlayerSpawnPreset slotName
LOCK_WIRE
LOCK_WIRE
Definition: actionlockattachment.c:6
UATimeSpent
Definition: actionconstants.c:26
ActionContinuousBaseCB
Definition: actioncontinuousbase.c:1
array
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Definition: isboxcollidinggeometryproxyclasses.c:27
LOCK_BOLT
LOCK_BOLT
Definition: actionlockattachment.c:4
m_Text
protected string m_Text
Definition: actionbase.c:49
m_ConditionItem
ref CCIBase m_ConditionItem
Definition: actionbase.c:55
ERPCs
ERPCs
Definition: erpcs.c:1
ActionContinuousBase
Definition: actioncontinuousbase.c:132
CCINonRuined
Definition: ccinonruined.c:1
m_ConditionTarget
ref CCTBase m_ConditionTarget
Definition: actionbase.c:56
ActionLockAttachment
Definition: actionlockattachment.c:20
NONE
NONE
Definition: actionlockattachment.c:2
m_SpecialtyWeight
protected float m_SpecialtyWeight
Definition: actionbase.c:68
m_StanceMask
protected int m_StanceMask
Definition: actionbase.c:53
EntityAI
Definition: building.c:5