DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionInteractCodeLockItem.c
См. документацию.
6
7class InteractCodeLockActionReciveData : ActionReciveData
8{
9 bool m_IsFacingBackside = false;
11}
12
14{
16 {
19
20 m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_ATTACHITEM;
21 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
22 }
23
25 {
27 return actionData;
28 }
29
30 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
31 {
32 if (super.SetupAction( player, target, item, action_data, extra_data))
33 {
34 if (!g_Game.IsDedicatedServer())
35 {
36 DigitalCodeLock codeLock = DigitalCodeLock.Cast(target.GetObject());
37 if (!codeLock || (codeLock && !codeLock.HasEnergy()))
38 return false;
39
40 if (!codeLock.GetHierarchyRoot())
41 return false;
42
43 InteractCodeLockActionData interactActionData = InteractCodeLockActionData.Cast(action_data);
44 interactActionData.m_CodeLockPosition = codeLock.GetWorldPosition();
45 interactActionData.m_IsFacingBackside = codeLock.IsPlayerOnBackside(player);
46 }
47 }
48
49 return true;
50 }
51
52 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
53 {
54 super.WriteToContext(ctx, action_data);
55
56 InteractCodeLockActionData interactActionData = InteractCodeLockActionData.Cast(action_data);
57 if (!interactActionData)
58 return;
59
60 ctx.Write(interactActionData.m_IsFacingBackside);
61 ctx.Write(interactActionData.m_CodeLockPosition);
62 }
63
64 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
65 {
66 if (!action_recive_data)
67 action_recive_data = new InteractCodeLockActionReciveData;
68
69 super.ReadFromContext(ctx, action_recive_data);
70 InteractCodeLockActionReciveData interactReciveData = InteractCodeLockActionReciveData.Cast(action_recive_data);
71
72 bool isFacingBackside = false;
73 if (!ctx.Read(isFacingBackside))
74 return false;
75
76 interactReciveData.m_IsFacingBackside = isFacingBackside;
77
78 vector lockPos = vector.Zero;
79 if (!ctx.Read(lockPos))
80 return false;
81 interactReciveData.m_CodeLockPosition = lockPos;
82
83 return true;
84 }
85
86 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
87 {
88 super.HandleReciveData(action_recive_data, action_data);
89
90 InteractCodeLockActionReciveData interactReciveData = InteractCodeLockActionReciveData.Cast(action_recive_data);
91 InteractCodeLockActionData interactActionData = InteractCodeLockActionData.Cast(action_data);
92
93 interactActionData.m_IsFacingBackside = interactReciveData.m_IsFacingBackside;
94 interactActionData.m_CodeLockPosition = interactReciveData.m_CodeLockPosition;
95 }
96
97 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
98 {
99 if (!super.ActionCondition(player, target, item))
100 return false;
101
102 bool isFacingBackside = false;
103 DigitalCodeLock codeLock = DigitalCodeLock.Cast(target.GetObject());
104 if (!codeLock || (codeLock && !codeLock.HasEnergy()))
105 return false;
106
107 if (!g_Game.IsDedicatedServer())
108 {
109 if (!codeLock.GetHierarchyRoot())
110 return false;
111
112 isFacingBackside = codeLock.IsPlayerOnBackside(player);
113
114 if (codeLock.HasPIN())
115 {
116 if (!codeLock.IsLocked() && codeLock.CanBeLocked())
117 {
118 m_Text = "#STR_LOCK_CODELOCK";
119 return true;
120 }
121
122 if (codeLock.IsLocked() && codeLock.CanBeUnlocked())
123 {
124 if (!isFacingBackside && !codeLock.HasBruteForceProtection())
125 {
126 m_Text = "#STR_ENTER_CODE";
127 return true;
128 }
129 else if (isFacingBackside)
130 {
131 m_Text = "#STR_UNLOCK_CODELOCK";
132 return true;
133 }
134 }
135 }
136 else
137 {
138 if (!isFacingBackside && codeLock.CanSetCode())
139 {
140 m_Text = "#STR_SET_CODE";
141 return true;
142 }
143 }
144 }
145 else
146 {
147 return true;
148 }
149
150 return false;
151 }
152
153 override void OnExecuteServer(ActionData action_data)
154 {
155 DigitalCodeLock codeLock = DigitalCodeLock.Cast(action_data.m_Target.GetObject());
156 if (!codeLock)
157 return;
158
159 InteractCodeLockActionData interactActionData = InteractCodeLockActionData.Cast(action_data);
160 if (!interactActionData || interactActionData.m_CodeLockPosition == vector.Zero)
161 return;
162
164 bool isFacingBackside = codeLock.IsPlayerOnBackside(action_data.m_Player);
165
166 if (interactActionData.m_IsFacingBackside && !isFacingBackside)
167 {
168 ErrorEx(string.Format("[ActionInteractCodeLockItem] Client claimed backside but server disagrees, physical release rejected! Player=%1 | Lock=%2", action_data.m_Player, codeLock), ErrorExSeverity.INFO);
169 return;
170 }
171
172 if ((!codeLock.HasPIN() || codeLock.HasPIN() && codeLock.IsLocked()) && !isFacingBackside)
173 {
174 codeLock.StartItemSoundServer(SoundConstants.ITEM_DIGITAL_LOCK_ACCESS);
175 }
176
177 DigitalCodeLockUIBase codeLockUI;
178 if (codeLock.HasPIN())
179 {
180 if (!codeLock.IsLocked() && codeLock.CanBeLocked())
181 {
182 codeLock.SetLockState(true);
183 return;
184 }
185
186 if (codeLock.IsLocked() && codeLock.CanBeUnlocked() && isFacingBackside)
187 {
188 codeLock.SetLockState(false);
189 }
190 }
191
192 interactActionData.m_IsFacingBackside = false;
193 }
194
195 override void OnExecuteClient(ActionData action_data)
196 {
197 HandleCodelockClient(action_data);
198 }
199
201 override void OnExecute(ActionData action_data)
202 {
203 if (!GetGame().IsServer() && GetGame().IsMultiplayer())
204 return;
205
206 HandleCodelockClient(action_data);
207 }
208
209 protected void HandleCodelockClient(ActionData actionData)
210 {
211 DigitalCodeLock codeLock = DigitalCodeLock.Cast(actionData.m_Target.GetObject());
212 if (!codeLock)
213 return;
214
215 if (!codeLock.GetHierarchyRoot())
216 return;
217
218 InteractCodeLockActionData interactActionData = InteractCodeLockActionData.Cast(actionData);
219 bool isFacingBackside = interactActionData.m_IsFacingBackside;
220
221 DigitalCodeLockUIBase codeLockUI;
222 if ((!codeLock.HasPIN() || codeLock.HasPIN() && codeLock.IsLocked()) && !isFacingBackside)
223 {
224 #ifndef NO_GUI
225 codeLockUI = DigitalCodeLockUIBase.Cast(GetGame().GetUIManager().EnterScriptedMenu(MENU_DIGITAL_CODELOCK, null));
226 if (codeLockUI)
227 codeLockUI.SetTargetLock(codeLock.GetCodeLockComponent());
228 #endif
229 return;
230 }
231 }
232
233 override bool CanBeSetFromInventory()
234 {
235 return false;
236 }
237}
string m_Text
Определения ActionBase.c:57
ref CCIBase m_ConditionItem
Определения ActionBase.c:63
ref CCTBase m_ConditionTarget
Определения ActionBase.c:64
int m_StanceMask
Определения ActionBase.c:61
vector m_CodeLockPosition
Определения ActionInteractCodeLockItem.c:10
InteractCodeLockActionData m_IsFacingBackside
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:125
DayZGame g_Game
Определения DayZGame.c:4074
PlayerBase m_Player
Определения ActionBase.c:40
ref ActionTarget m_Target
Определения ActionBase.c:39
void ActionData()
Определения ActionBase.c:23
Определения ActionBase.c:22
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения ActionInteractCodeLockItem.c:52
override bool CanBeSetFromInventory()
Определения ActionInteractCodeLockItem.c:233
override void CreateConditionComponents()
Определения ActionInteractCodeLockItem.c:15
override void OnExecuteClient(ActionData action_data)
Определения ActionInteractCodeLockItem.c:195
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения ActionInteractCodeLockItem.c:64
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionInteractCodeLockItem.c:86
override void OnExecuteServer(ActionData action_data)
Определения ActionInteractCodeLockItem.c:153
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Определения ActionInteractCodeLockItem.c:30
override ActionData CreateActionData()
Определения ActionInteractCodeLockItem.c:24
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionInteractCodeLockItem.c:97
void HandleCodelockClient(ActionData actionData)
Определения ActionInteractCodeLockItem.c:209
override void OnExecute(ActionData action_data)
Only handles single player/offline handling.
Определения ActionInteractCodeLockItem.c:201
int m_CommandUID
Определения AnimatedActionBase.c:147
Определения CCINone.c:2
CodeLockComponent GetCodeLockComponent()
Определения CodeLock.c:368
bool HasBruteForceProtection()
Определения CodeLock.c:383
bool HasPIN()
Определения CodeLock.c:343
bool IsPlayerOnBackside(PlayerBase player)
Определения CodeLock.c:410
bool CanBeLocked()
Определения CodeLock.c:313
bool HasEnergy()
Определения CodeLock.c:338
bool CanSetCode()
Определения CodeLock.c:323
bool CanBeUnlocked()
Определения CodeLock.c:318
void SetLockState(bool state)
Определения CodeLock.c:363
bool IsLocked()
Определения CodeLock.c:373
Определения CodeLock.c:2
void SetTargetLock(CodeLockComponent lock)
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Определения param.c:12
Определения PlayerBaseClient.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
const float DEFAULT
Определения ActionConstants.c:114
static const vector Zero
Определения EnConvert.c:123
Определения EnConvert.c:119
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16
DayZGame GetGame()
Определения gameplay.c:636
ErrorExSeverity
Определения EnDebug.c:62
enum ShapeType ErrorEx
const int MENU_DIGITAL_CODELOCK
Определения 3_Game/DayZ/constants.c:222