DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
AnimatedActionBase.c
См. документацию.
2{
4 protected SoundOnVehicle m_SoundObject;//object of sound playing on entity
5 protected bool m_Canceled;//helps prevent doubled calling of actionbase End method
6 protected bool m_Interrupted;//force callback to wait till action syncs its interruption
7
8
10 {
11 }
12
14 {
15 return m_ActionData.m_PossibleStanceMask;
16 }
17
18 override void OnAnimationEvent(int pEventID)
19 {
20 if ( m_ActionData )
21 {
22 m_ActionData.m_DelayedAnimationEventID = pEventID;
23 }
24 }
25
26 //Command events
27 override void OnFinish(bool pCanceled)
28 {
30 {
31 if ( m_ActionData)
32 Debug.ActionLog("Time stamp: " + m_ActionData.m_Player.GetSimulationTimeStamp(), m_ActionData.m_Action.ToString() , "n/a", "OnFinish", m_ActionData.m_Player.ToString() );
33 else
34 Debug.ActionLog("n/a", this.ToString() , "n/a", "OnFinish", "n/a" );
35 }
36 if ( m_SoundObject )
37 {
39 }
40 if ( m_ActionData && m_ActionData.m_Player )
41 {
42 if ( pCanceled )
43 {
44 m_ActionData.m_State = m_ActionData.m_ActionComponent.Interrupt(m_ActionData);
45 }
46
48
49 if(action)
50 action.End(m_ActionData);
51 }
52 }
53
54 void SetCommand( int command_uid )
55 {
56 InternalCommand(command_uid);
57 }
58
59 //---------------------------------------------------------------
60 //Action Component handlers
62 {
63 m_ActionData.m_ActionComponent = new CADummy;
64 }
65
67 {
68 }
69
71 {
72 if ( m_ActionData.m_ActionComponent )
73 {
74 m_ActionData.m_State = m_ActionData.m_ActionComponent.Execute(m_ActionData);
75 }
76 }
77
79 {
80 }
81
83 void Interrupt()
84 {
85 if ( GetGame().IsServer() )
86 {
88 {
89 Debug.ActionLog("n/a", this.ToString() , "n/a", "Interrupt", m_ActionData.m_Player.ToString() );
90 }
91 if ( GetGame().IsMultiplayer() )
92 {
94 }
95 }
96 else
97 {
99 {
102 ctx.Write(DayZPlayerConstants.CMD_ACTIONINT_INTERRUPT);
103 ctx.Send();
104 }
105 }
106 m_Interrupted = true;
107 }
108
109 void SetActionData(ActionData action_data )
110 {
111 m_ActionData = action_data;
112 }
113
114 override bool IsUserActionCallback()
115 {
116 return true;
117 }
118
120 {
121 if ( m_ActionData.m_ActionComponent )
122 {
123 return m_ActionData.m_ActionComponent.GetProgress();
124 }
125 return 0;
126 }
127
129 {
130 return m_ActionData.m_State;
131 }
132
134 {
135 return m_ActionData.m_Target;
136 }
137};
138
139
140
142{
143 protected int m_CommandUID; //tells which command should be used for callback
144 protected int m_CommandUIDProne;
145 protected typename m_CallbackClass; //tells which callback should be instantiated
146
147
148 //-----------------------------------------------------
149 // Action events and methods
150 //-----------------------------------------------------
152 {
153 // definable
155 }
156
157 protected void OnAlternativeEndServer( PlayerBase player ) //method called when action has not met conditions in action component
158 {
159 }
160 protected void OnAlternativeEndClient( PlayerBase player ) //method called when action has not met conditions in action component
161 {
162 }
163
164 protected void OnInterruptServer( PlayerBase player ) //method called when action has not met conditions in action component
165 {
166 }
167 protected void OnInterruptClient( PlayerBase player ) //method called when action has not met conditions in action component
168 {
169 }
170
171 protected void OnExecute( ActionData action_data )
172 {
173 }
174
175 protected void OnExecuteServer( ActionData action_data )
176 {
177 }
178
179 protected void OnExecuteClient( ActionData action_data )
180 {
181 }
182
183 //TODO MW - add comment
184 void OnAnimationEvent( ActionData action_data )
185 {
186 if (action_data.m_DelayedAnimationEventID == UA_ANIM_EVENT)
187 {
188 if (HasMultipleExecution(action_data) || !action_data.m_WasExecuted)
189 {
190 ActionBase action = action_data.m_Action;
191
192 if (action && ( !action.UseMainItem() || action_data.m_MainItem ) && ( !action.HasTarget() || action_data.m_Target ))
193 {
194 OnExecute(action_data);
195
196 if (GetGame().IsServer())
197 OnExecuteServer(action_data);
198 else
199 OnExecuteClient(action_data);
200
201 action_data.m_WasExecuted = true;
202 action_data.m_WasActionStarted = true;
203 }
204 }
205 }
206 }
207
209 {
210 return false;
211 }
212
214 {
215 if (action_data.m_DelayedAnimationEventID != UA_NONE)
216 {
217 #ifdef ENABLE_LOGGING
219 {
220 if (action_data)
221 Debug.ActionLog("STS: " + action_data.m_Player.GetSimulationTimeStamp() + " Event: " + action_data.m_DelayedAnimationEventID, action_data.m_Action.ToString() , "n/a", "OnAnimationEvent", action_data.m_Player.ToString() );
222 }
223 #endif
224 OnAnimationEvent(action_data);
225 action_data.m_DelayedAnimationEventID = UA_NONE;
226 }
227 }
228
229 override void OnUpdate(ActionData action_data)
230 {
231 super.OnUpdate(action_data);
232 CheckAnimationEvent(action_data);
233 }
234
235 override bool ActionConditionContinue( ActionData action_data ) //condition for action
236 {
237 return ActionCondition(action_data.m_Player,action_data.m_Target,action_data.m_MainItem);
238 }
239
240 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item ) //condition for action
241 {
242 return true;
243 }
244
245 override protected int GetStanceMaskEx(PlayerBase player, ActionTarget target, ItemBase item)
246 {
247 int stanceOverride = GetStanceMaskOverride(item);
248 if (stanceOverride != -1)
249 return stanceOverride;
250
251 return GetStanceMask(player));
252 }
253
254 protected int GetActionCommandEx(ActionData actionData)
255 {
256 int commandOverride = GetCommandOverride(actionData);
257 if (commandOverride != -1)
258 return commandOverride;
259
260 return GetActionCommand(actionData.m_Player);
261 }
262
263 protected int GetActionCommand(PlayerBase player)
264 {
265 if ( HasProneException() )
266 {
267 if ( player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT))
268 return m_CommandUID;
269 else
270 return m_CommandUIDProne;
271 }
272 return m_CommandUID;
273 }
274
275 protected int GetCommandOverride(ActionData actionData)
276 {
277 if (!actionData.m_MainItem)
278 return -1;
279
280 TActionAnimOverrideMap overrideMap = ItemBase.m_ItemActionOverrides.Get(this.Type());
281 if (!overrideMap)
282 return -1;
283
284 ActionOverrideData overrideData = overrideMap.Get(actionData.m_MainItem.Type());
285 if (overrideData)
286 {
287 if ( HasProneException() && actionData.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_PRONE) )
288 return overrideData.m_CommandUIDProne;
289 else
290 return overrideData.m_CommandUID;
291 }
292
293 return -1;
294 }
295
296 protected int GetStanceMaskOverride(ItemBase item)
297 {
298 if (item)
299 {
300 TActionAnimOverrideMap overrideMap = ItemBase.m_ItemActionOverrides.Get(this.Type());
301 if (overrideMap)
302 {
303 ActionOverrideData overrideData = overrideMap.Get(item.Type());
304 if (overrideData && overrideData.m_StanceMask != -1)
305 return overrideData.m_StanceMask;
306 }
307 }
308
309 return -1;
310 }
311
312 protected typename GetCallbackClassTypename()
313 {
314 return m_CallbackClass;
315 }
316
317 // if it is set to true if action have special fullbody animation for prone and additive for crouch and erect
318 override bool HasProneException()
319 {
320 return false;
321 }
322
323 //TODO MW - add comment
324 protected void CreateAndSetupActionCallback( ActionData action_data )
325 {
326 //Print("ActionBase.c | CreateAndSetupActionCallback | DBG ACTION CALLBACK CREATION CALLED");
327 ActionBaseCB callback;
328 if ( IsFullBodyEx(action_data.m_Player, action_data.m_Target, action_data.m_MainItem) )
329 {
330 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(GetActionCommandEx(action_data),GetCallbackClassTypename(),GetStanceMaskEx(action_data.m_Player, action_data.m_Target, action_data.m_MainItem)));
331 //Print("ActionBase.c | CreateAndSetupActionCallback | DBG command starter");
332 }
333 else
334 {
335 Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(GetActionCommandEx(action_data),GetCallbackClassTypename()));
336 //Print("ActionBase.c | CreateAndSetupActionCallback | DBG command modif starter: "+callback.ToString()+" id:"+GetActionCommand().ToString());
337
338 }
339 callback.SetActionData(action_data);
340 callback.InitActionComponent(); //jtomasik - tohle mozna patri do constructoru callbacku?
341 action_data.m_Callback = callback;
342 }
343
344
345
346 // ACTION LOGIC -------------------------------------------------------------------
347 // called from actionmanager.c
348 override void Start( ActionData action_data ) //Setup on start of action
349 {
350 super.Start( action_data );
351 //Debug.Log("[Action DEBUG] Start time stamp: " + action_data.m_Player.GetSimulationTimeStamp());
352
353 if( !IsInstant() )
354 {
355 CreateAndSetupActionCallback(action_data);
356 }
357 /*Debug
358 SendMessageToClient( player, "ActionBase.c : Start");
359 Print("ActionBase.c : Start");
360 */
361 }
362
363 // THIS Interrupt is use for ACTUAL handling of intrrupt on action side - WARNING Interrupt without parametr is used for initialize interrupt
364 override void Interrupt( ActionData action_data )
365 {
366 if ( action_data.m_Callback )
367 {
368 action_data.m_Callback.Cancel();
369 }
370 else
371 {
372 End( action_data );
373 }
374 }
375
377 {
378
379 }
380
381 // called from ActionBaseCB.c
382 void Do( ActionData action_data, int state )
383 {
384 if ( state == UA_ERROR || !action_data.m_Callback || !action_data.m_Player || !action_data.m_ActionComponent ) //jtomasik - tohle mozna muze byt v CancelCondtion metodu callbacku?
385 {
386#ifdef ENABLE_LOGGING
388 {
389 Debug.ActionLog("ABRUPT CANCEL, CONDITIONS NOT MET", this.ToString() , "n/a", "Do", action_data.m_Player.ToString() );
390 }
391#endif
392 if ( action_data.m_Callback && action_data.m_Player )
393 {
394 action_data.m_Callback.Interrupt();
395 }
396 else
397 {
398 Debug.ActionLog("PLAYER LOST", this.ToString() , "n/a", "Do", action_data.m_Player.ToString() );
399 }
400 }
401 else
402 {
403 switch ( state )
404 {
405 case UA_PROCESSING:
406 if ( CanContinue(action_data) )
407 {
408 action_data.m_Callback.ProgressActionComponent();
409 InformPlayers(action_data.m_Player, action_data.m_Target, UA_PROCESSING);
410 }
411 else
412 {
413 action_data.m_Callback.Interrupt();
414 InformPlayers(action_data.m_Player, action_data.m_Target, UA_CANCEL);
415 Do(action_data, UA_CANCEL);
416 }
417 break;
418
419 case UA_FINISHED:
420 InformPlayers(action_data.m_Player,action_data.m_Target,UA_FINISHED);
421 action_data.m_Callback.EndActionComponent();
422 break;
423
424 case UA_CANCEL:
425 InformPlayers(action_data.m_Player,action_data.m_Target,UA_CANCEL);
426 action_data.m_Callback.EndActionComponent();
427 break;
428
429 case UA_INITIALIZE:
430 if ( !CanContinue(action_data) )
431 {
432 action_data.m_Callback.Interrupt();
433 InformPlayers(action_data.m_Player, action_data.m_Target, UA_CANCEL);
434 Do(action_data, UA_CANCEL);
435 }
436 default:
437 Debug.ActionLog("Action component returned wrong value", this.ToString() , "n/a", "Do", action_data.m_Player.ToString() );
438 action_data.m_Callback.Interrupt();
439 break;
440 }
441 }
442 }
443
444 // called from ActionBaseCB.c
445 override void End( ActionData action_data )
446 {
447 if ( action_data.m_Player )
448 {
449 if ( GetGame().IsServer() )
450 {
451 OnEndServer(action_data);
452 action_data.m_Player.SetSoundCategoryHash(0);
453 }
454 else
455 {
456 OnEndClient(action_data);
457 }
458 OnEnd(action_data);
459
460 // Xbox Achievemnts
461 if ( action_data.m_WasActionStarted )
462 {
463 if ( IsEat() )
464 {
466 }
467 else if ( IsDrink() )
468 {
470 }
471
472 action_data.m_WasActionStarted = false;
473 }
474
475 action_data.m_Player.GetActionManager().OnActionEnd();
476
477
478 }
479 else
480 {
482 {
483 Debug.ActionLog("Ation could not be finished right at the end", this.ToString() , "n/a", "End", action_data.m_Player.ToString() );
484 }
485 action_data.m_Callback.Interrupt();
486 }
487 }
488
489 override void OnStartServer(ActionData action_data)
490 {
491 super.OnStartServer(action_data);
492
493 if (!IsInstant())
494 action_data.m_Player.SetPerformedActionID(GetID());
495 }
496
497 override void OnEndServer(ActionData action_data)
498 {
499 action_data.m_Player.SetPerformedActionID(-1);
500 super.OnEndServer(action_data);
501 }
502
503 override float GetProgress( ActionData action_data )
504 {
505 if ( action_data.m_ActionComponent )
506 {
507 return action_data.m_ActionComponent.GetProgress();
508 }
509 return 0;
510 }
511
512 override float GetProgressWidgetMultiplier( ActionData action_data )
513 {
514 if ( action_data.m_ActionComponent )
515 return action_data.m_ActionComponent.GetProgressWidgetMultiplier();
516
517 return 1;
518 }
519};
const int INPUT_UDT_STANDARD_ACTION_END_REQUEST
Определения _constants.c:3
ActionBase ActionData
Определения ActionBase.c:30
class ActionTargets ActionTarget
proto string ToString()
map< typename, ref ActionOverrideData > TActionAnimOverrideMap
Определения ItemBase.c:2
string Type
Определения JsonDataContaminatedArea.c:11
int GetStanceMask()
Определения PluginDayzPlayerDebug.c:76
proto static native void End()
Finalizes the testing process.
void OnEndClient(ActionData action_data)
Определения ActionBase.c:1276
bool IsEat()
Определения ActionBase.c:283
int GetID()
Определения ActionBase.c:1321
bool IsDrink()
Определения ActionBase.c:288
bool HasTarget()
Определения ActionBase.c:244
void ActionBase()
Определения ActionBase.c:82
bool IsFullBodyEx(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:703
bool IsInstant()
Определения ActionBase.c:262
bool UseMainItem()
Определения ActionBase.c:379
void InformPlayers(PlayerBase player, ActionTarget target, int state)
DEPRECATED delivers message ids to clients based on given context.
bool CanContinue(ActionData action_data)
Определения ActionBase.c:907
bool m_Interrupted
Определения AnimatedActionBase.c:6
int GetPossileStanceMask()
Определения AnimatedActionBase.c:13
void ProgressActionComponent()
Определения AnimatedActionBase.c:70
bool m_Canceled
Определения AnimatedActionBase.c:5
void CreateActionComponent()
Определения AnimatedActionBase.c:61
void SetCommand(int command_uid)
Определения AnimatedActionBase.c:54
SoundOnVehicle m_SoundObject
Определения AnimatedActionBase.c:4
void InitActionComponent()
Определения AnimatedActionBase.c:66
void EndActionComponent()
Определения AnimatedActionBase.c:78
void ActionBaseCB()
Определения AnimatedActionBase.c:9
ActionTarget GetTarget()
Определения AnimatedActionBase.c:133
float GetActionComponentProgress()
Определения AnimatedActionBase.c:119
ActionData m_ActionData
Определения AnimatedActionBase.c:3
override void OnAnimationEvent(int pEventID)
Определения AnimatedActionBase.c:18
override bool IsUserActionCallback()
Определения AnimatedActionBase.c:114
override void OnFinish(bool pCanceled)
Определения AnimatedActionBase.c:27
void Interrupt()
Определения AnimatedActionBase.c:83
int GetActionState()
Определения AnimatedActionBase.c:128
void SetActionData(ActionData action_data)
Определения AnimatedActionBase.c:109
Определения AnimatedActionBase.c:2
int m_StanceMask
Определения ActionBase.c:25
int m_CommandUIDProne
Определения ActionBase.c:24
int m_CommandUID
Определения ActionBase.c:23
Определения ActionBase.c:22
void OnActionDrink()
Определения AnalyticsManagerClient.c:29
int GetStanceMaskOverride(ItemBase item)
Определения AnimatedActionBase.c:296
void Do(ActionData action_data, int state)
Определения AnimatedActionBase.c:382
int GetStanceMaskEx(PlayerBase player, ActionTarget target, ItemBase item)
Определения AnimatedActionBase.c:245
void CreateAndSetupActionCallback(ActionData action_data)
Определения AnimatedActionBase.c:324
override void OnUpdate(ActionData action_data)
Определения AnimatedActionBase.c:229
override void OnStartServer(ActionData action_data)
Определения AnimatedActionBase.c:489
override bool ActionConditionContinue(ActionData action_data)
Определения AnimatedActionBase.c:235
int GetActionCommandEx(ActionData actionData)
Определения AnimatedActionBase.c:254
override void OnEndServer(ActionData action_data)
Определения AnimatedActionBase.c:497
void OnAnimationEvent(ActionData action_data)
Определения AnimatedActionBase.c:184
int m_CommandUID
Определения AnimatedActionBase.c:143
override float GetProgress(ActionData action_data)
Определения AnimatedActionBase.c:503
override void Interrupt(ActionData action_data)
Определения AnimatedActionBase.c:364
void OnAlternativeEndClient(PlayerBase player)
Определения AnimatedActionBase.c:160
void OnInterruptClient(PlayerBase player)
Определения AnimatedActionBase.c:167
GetCallbackClassTypename()
Определения AnimatedActionBase.c:312
void OnInterruptServer(PlayerBase player)
Определения AnimatedActionBase.c:164
void OnAlternativeEndServer(PlayerBase player)
Определения AnimatedActionBase.c:157
override float GetProgressWidgetMultiplier(ActionData action_data)
Определения AnimatedActionBase.c:512
int GetActionCommand(PlayerBase player)
Определения AnimatedActionBase.c:263
override void Start(ActionData action_data)
Определения AnimatedActionBase.c:348
bool HasMultipleExecution(ActionData action_data)
Определения AnimatedActionBase.c:208
override bool HasProneException()
Определения AnimatedActionBase.c:318
void CheckAnimationEvent(ActionData action_data)
Определения AnimatedActionBase.c:213
void AnimatedActionBase()
Определения AnimatedActionBase.c:151
void OnJumpStart()
Определения AnimatedActionBase.c:376
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения AnimatedActionBase.c:240
override void End(ActionData action_data)
Определения AnimatedActionBase.c:445
void OnExecute(ActionData action_data)
Определения AnimatedActionBase.c:171
int m_CommandUIDProne
Определения AnimatedActionBase.c:144
void OnExecuteServer(ActionData action_data)
Определения AnimatedActionBase.c:175
int GetCommandOverride(ActionData actionData)
Определения AnimatedActionBase.c:275
void OnExecuteClient(ActionData action_data)
Определения AnimatedActionBase.c:179
Определения CADummy.c:2
AnalyticsManagerClient GetAnalyticsClient()
Определения Game.c:1513
proto native void ObjectDelete(Object obj)
Super root of all classes in Enforce script.
Определения EnScript.c:11
static void SendActionInterrupt(DayZPlayer pPlayer)
Определения DayZPlayerSyncJunctures.c:265
static void ActionLog(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Определения Debug.c:127
Определения Debug.c:2
Определения InventoryItem.c:731
static bool IsActionLogEnable()
Определения Debug.c:638
Определения Debug.c:594
Определения PlayerBaseClient.c:2
proto native void Send()
proto static native bool CanStoreInputUserData()
Returns true when the channel is free, AND the InputBuffer is NOT full (same as '!...
Определения gameplay.c:121
proto bool Write(void value_out)
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
proto native CGame GetGame()
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
void OnEnd()
Определения Sound.c:226
const int UA_FINISHED
Определения constants.c:464
const int UA_ERROR
Определения constants.c:483
const int UA_INITIALIZE
Определения constants.c:472
const int UA_ANIM_EVENT
Определения constants.c:471
const int UA_NONE
Определения constants.c:460
const int UA_PROCESSING
Определения constants.c:462
const int UA_CANCEL
Определения constants.c:465
proto native void InternalCommand(int pInternalCommandId)