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