DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionLockAttachment.c
См. документацию.
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 private const string CODE_LOCK_SELECTION_BACK = "back";
26
28 {
29 m_CallbackClass = ActionLockAttachmentCB;
30 m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
31
32 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
33 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
34 m_FullBody = true;
35 }
36
37 override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
38 {
39 ItemBase target_IB = ItemBase.Cast(target.GetObject());
40 if ( target_IB.IsLockedInSlot() )
42 else if ( target_IB.IsAlive() )
44 else
45 m_Text = "";
46 }
47
53
54 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
55 {
56 if ( !target )
57 return false;
58
59 EntityAI parent_EAI = EntityAI.Cast(target.GetParent());
60 ItemBase target_IB = ItemBase.Cast(target.GetObject());
61
62 array<int> compLock = ItemBaseType.Cast(item.GetEntityType()).m_CompatibleLocks;
63 int targetType = eLockTypes.NONE;
64
65 if ( target_IB && parent_EAI )
66 {
67 //CAR DOOR HANDLING
68 //I don't really like this, but sometimes specifics have to be handled in generics
69 CarDoor targetDoor = CarDoor.Cast(target_IB);
70 if ( targetDoor )
71 {
73 bool isPresent = targetDoor.GetInventory().GetCurrentInventoryLocation( loc );
74
75 if ( !isPresent || loc.GetSlot() == -1 )
76 return false;
77
79 if ( slotName && CarScript.Cast( parent_EAI ).GetCarDoorsState( slotName ) != CarDoorState.DOORS_OPEN )
80 return false;
81 }
82 //END OF CAR DOOR SPECIFICS
83
84 // CONSTRUCTION HANDLING
85 bool hasConstruction = parent_EAI.CanUseConstruction();
86 bool isPlayerInside = parent_EAI.IsPlayerInsideEx(player, "");
87 if (hasConstruction && !isPlayerInside)
88 return false;
89
90 // CODE LOCK HANDLING
91 DigitalCodeLock codeLock = DigitalCodeLock.Cast(target_IB);
92 if (codeLock)
93 {
94 array<string> selections = new array<string>;
95 codeLock.GetActionComponentNameList(target.GetComponentIndex(), selections);
96
97 foreach (string selectionName : selections)
98 {
99 if (selectionName != CODE_LOCK_SELECTION_BACK)
100 return false;
101 }
102 }
103
104 if ( target_IB.IsLockedInSlot() )
106 else if ( target_IB.IsAlive() )
108 else if ( !target_IB.IsLockedInSlot() )
109 return false;
110
111 targetType = target_IB.GetLockType();
112
113 for (int i = 0; i < compLock.Count(); i++)
114 {
115 if ( targetType == compLock[i] && targetType != eLockTypes.NONE)
116 {
117 return true;
118 }
119 }
120 }
121 return false;
122 }
123
124 override void OnStartAnimationLoop( ActionData action_data )
125 {
126 super.OnStartAnimationLoop( action_data );
127
128 if ( !g_Game.IsMultiplayer() || g_Game.IsServer() )
129 {
130 ItemBase target_IB = ItemBase.Cast( action_data.m_Target.GetObject() );
131 Param2<bool, string> play = new Param2<bool, string>( true, action_data.m_MainItem.GetLockSoundSet() );
132 g_Game.RPCSingleParam( target_IB, ERPCs.RPC_SOUND_LOCK_ATTACH, play, true );
133 }
134 }
135
136 override void OnEnd( ActionData action_data )
137 {
138 if ( !g_Game.IsMultiplayer() || g_Game.IsServer() )
139 {
140 ItemBase target_IB = ItemBase.Cast( action_data.m_Target.GetObject() );
141 Param2<bool, string> play = new Param2<bool, string>( false, action_data.m_MainItem.GetLockSoundSet() );
142 g_Game.RPCSingleParam( target_IB, ERPCs.RPC_SOUND_LOCK_ATTACH, play, true );
143 }
144 }
145
146 override void OnEndAnimationLoop( ActionData action_data )
147 {
148 super.OnEndAnimationLoop( action_data );
149
150 if ( !g_Game.IsMultiplayer() || g_Game.IsServer() )
151 {
152 ItemBase target_IB = ItemBase.Cast( action_data.m_Target.GetObject() );
153 Param2<bool, string> play = new Param2<bool, string>( false, action_data.m_MainItem.GetLockSoundSet() );
154 g_Game.RPCSingleParam( target_IB, ERPCs.RPC_SOUND_LOCK_ATTACH, play, true );
155 }
156 }
157
158 override void OnFinishProgressServer( ActionData action_data )
159 {
160 ItemBase target_IB = ItemBase.Cast(action_data.m_Target.GetObject());
161
162 MiscGameplayFunctions.DealAbsoluteDmg(action_data.m_MainItem, 5);
163
164 if (target_IB.IsLockedInSlot())
165 {
166 target_IB.UnlockFromParent();
167 return;
168 }
169
170 target_IB.LockToParent();
171 }
172}
bool m_FullBody
Определения ActionBase.c:60
string m_Text
Определения ActionBase.c:57
ref CCIBase m_ConditionItem
Определения ActionBase.c:63
float m_SpecialtyWeight
Определения ActionBase.c:77
ref CCTBase m_ConditionTarget
Определения ActionBase.c:64
int m_StanceMask
Определения ActionBase.c:61
LOCK_SCREW
Определения ActionLockAttachment.c:16
LOCK_NUT
Определения ActionLockAttachment.c:18
LOCK_BOLT
Определения ActionLockAttachment.c:17
eLockTypes
Определения ActionLockAttachment.c:4
LOCK_WIRE
Определения ActionLockAttachment.c:19
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:125
CarDoorState
Определения CarScript.c:2
PlayerSpawnPreset slotName
DayZGame g_Game
Определения DayZGame.c:4074
ERPCs
Определения ERPCs.c:2
void CreateActionComponent()
Определения AnimatedActionBase.c:63
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
ref ActionTarget m_Target
Определения ActionBase.c:39
ItemBase m_MainItem
Определения ActionBase.c:35
Определения ActionBase.c:22
override void CreateConditionComponents()
Определения ActionLockAttachment.c:48
override void OnStartAnimationLoop(ActionData action_data)
Определения ActionLockAttachment.c:124
const string CODE_LOCK_SELECTION_BACK
Определения ActionLockAttachment.c:25
override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionLockAttachment.c:37
const string UNLOCK_VERSION
Определения ActionLockAttachment.c:23
void ActionLockAttachment()
Определения ActionLockAttachment.c:27
override void OnFinishProgressServer(ActionData action_data)
Определения ActionLockAttachment.c:158
string m_Name
Определения ActionLockAttachment.c:24
override void OnEnd(ActionData action_data)
Определения ActionLockAttachment.c:136
const string LOCK_VERSION
Определения ActionLockAttachment.c:22
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionLockAttachment.c:54
override void OnEndAnimationLoop(ActionData action_data)
Определения ActionLockAttachment.c:146
int m_CommandUID
Определения AnimatedActionBase.c:147
Определения CCINonRuined.c:2
override int GetCarDoorsState(string slotType)
Определения Truck_02.c:106
Определения Truck_02.c:2
Определения CodeLock.c:2
proto native int GetSlot()
returns slot id if current type is Attachment
InventoryLocation.
Определения InventoryLocation.c:30
static proto native owned string GetSlotName(int id)
converts slot_id to string
provides access to slot configuration
Определения InventorySlots.c:6
ref TIntArray m_CompatibleLocks
Определения ItemBaseType.c:31
Определения ItemBaseType.c:5
Определения PPEConstants.c:68
Определения PlayerBaseClient.c:2
const float SMALL
Определения ActionConstants.c:113
const float BASEBUILDING_REPAIR_FAST
Определения ActionConstants.c:67
Определения ActionConstants.c:28
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
@ NONE
body is not in simulation, nor in collision world
Определения SimulationState.c:15