Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
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
12class ActionLockAttachmentCB : ActionContinuousBaseCB
13{
14 override void CreateActionComponent()
15 {
16 m_ActionData.m_ActionComponent = new CAContinuousTime( UATimeSpent.BASEBUILDING_REPAIR_FAST );
17 }
18};
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;
29 m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
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}
CarDoorState
Definition carscript.c:2
PlayerSpawnPreset slotName
void CreateActionComponent()
float m_SpecialtyWeight
Definition actionbase.c:77
int m_StanceMask
Definition actionbase.c:62
string m_Text
Definition actionbase.c:58
ref CCIBase m_ConditionItem
Definition actionbase.c:64
bool m_FullBody
Definition actionbase.c:61
ref CCTBase m_ConditionTarget
Definition actionbase.c:65
override int GetCarDoorsState(string slotType)
InventoryLocation.
provides access to slot configuration
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
ERPCs
Definition erpcs.c:2
proto native CGame GetGame()
void OnEnd()
Definition sound.c:226
class SyncedValue m_Name