DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionFishingNew.c
См. документацию.
1class FishingActionReceiveData : ActionReciveData
2{
4}
5
6class FishingActionData : ActionData
7{
9 int m_FishingResult = -1; //use for hashed name?
10 bool m_IsSignalActive = false;
11
13
15
17 {
20
21 m_IsSignalActive = false; //redundant?
22 if (m_ContextData.RollCatch())
23 {
25 }
26 else
27 {
28 component.SetNewSignalData(-1,-1);
29 }
30 }
31
32 //signal methods
33 protected void RandomizeSignalValues()
34 {
37
38 component.SetNewSignalData(m_ContextData.RandomizeSignalStartTime(),m_ContextData.RandomizeSignalDuration());
39 }
40
41 void AnimateRod(float phase, bool instant = false)
42 {
44 rod.AnimateFishingRodEx(phase,instant);
45 }
46
47 //------------------------------------------------------------------
48 //DEPRECATED
49 //------------------------------------------------------------------
50 const float FISHING_SUCCESS = 0.2;
51 const float FISHING_BAIT_LOSS = 0.02;
52 const float FISHING_HOOK_LOSS = 0.015;
53 const float FISHING_DAMAGE = 1.5;
54 const float FISHING_GARBAGE_CHANCE = 0.2;
58 void InitBait(ItemBase item)
59 {
60 m_Bait = item;
61 m_IsBaitAnEmptyHook = !m_Bait.ConfigIsExisting("hookType");
62 }
64 {
66 }
67}
68
70{
71 FishingActionData m_ActionDataFishing;
72
73 override void CreateActionComponent()
74 {
76 float cycleTime = UAFishingConstants.CYCLE_LENGTH_BASE; //redundant?
78 {
79 cycleTime = m_ActionDataFishing.m_ContextData.GetActionCycleTime();
80 }
81 m_ActionData.m_ActionComponent = new CAContinuousRepeatFishing(cycleTime);
82 }
83
84 override void InitActionComponent()
85 {
86 super.InitActionComponent();
87
90 }
91
92 override void EndActionComponent()
93 {
94 bool animateRod = false;
95 if (m_ActionDataFishing.m_State == UA_CANCEL)
96 m_Canceled = true;
97
98 if (m_ActionDataFishing.m_State == UA_FINISHED)
99 {
100 if (m_ActionDataFishing.m_FishingResult == 1)
101 {
102 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
103 }
104 else
105 {
106 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_FINISH);
107 animateRod = true;
108 }
109 }
110 else
111 {
112 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_INTERRUPT);
113 animateRod = true;
114 }
115
116 animateRod |= m_Canceled;
117 if (animateRod)
118 {
119 m_ActionDataFishing.AnimateRod(false,m_Canceled);
120 }
121
123 }
124
125 override void OnStateChange(int pOldState, int pCurrentState)
126 {
127 super.OnStateChange(pOldState,pCurrentState);
128
129 if (pOldState == STATE_NONE && pCurrentState == STATE_LOOP_IN)
130 {
131 m_ActionDataFishing.AnimateRod(true);
132 }
133 }
134
136 {
138 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_ACTIONLOOP);
139 }
140
143 {
144 if (GetGame().IsServer() && m_ActionDataFishing.m_SplashUniqueID >= 0)
145 {
147 m_ActionDataFishing.m_SplashUniqueID = -1;
148 }
149 }
150
151 //DEPRECATED
155};
156
158{
159 private const string ALLOWED_WATER_SURFACES = string.Format("%1|%2", UAWaterType.SEA, UAWaterType.FRESH);
160
162 {
164 m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_MEDIUM;
165 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_FISHING;
166 m_FullBody = true;
167 m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
168 m_Text = "#start_fishing";
169 }
170
176
177 override bool HasTarget()
178 {
179 return true;
180 }
181
183 {
184 return true;
185 }
186
187 override bool CanBeUsedInFreelook()
188 {
189 return false;
190 }
191
192 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item )
193 {
194 ItemBase hook;
195 hook = ItemBase.Cast(item.FindAttachmentBySlotName("Hook"));
196
197 return hook && !hook.IsRuined() && !hook.IsPendingDeletion();
198 }
199
201 {
202 FishingActionData actionData = new FishingActionData();
203 return actionData;
204 }
205
206 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = null)
207 {
208 if (super.SetupAction(player, target, item, action_data, extra_data))
209 {
210 FishingActionData data;
211 if (Class.CastTo(data,action_data))
212 {
214 return true;
215 }
216 }
217 return false;
218 }
219
220 protected void ComposeLocalContextData(FishingActionData data)
221 {
222 #ifndef SERVER
223 data.m_IsSurfaceSea = CheckForSea(data); //already synced from client by this point
224 #endif
225 Param2<EntityAI,bool> par = new Param2<EntityAI,bool>(data.m_MainItem,data.m_IsSurfaceSea);
226 data.m_ContextData = new CatchingContextFishingRodAction(par);
227
228 data.m_ContextData.GenerateResult(); //call only once
229
230 #ifdef DEVELOPER
231 data.m_ContextData.SetResultChanceOverride(data.m_Player.IsQuickFishing(),1.0); //active override sets chance to 100% for the action duration
232 #endif
233 }
234
235 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
236 {
237 super.WriteToContext(ctx, action_data);
238 FishingActionData data
239 if (Class.CastTo(data,action_data))
240 {
241 ctx.Write(data.m_IsSurfaceSea);
242 }
243 }
244
245 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
246 {
247 if (!action_recive_data)
248 {
249 action_recive_data = new FishingActionReceiveData;
250 }
251
252 super.ReadFromContext(ctx, action_recive_data);
253
254 FishingActionReceiveData receiveDataFishing;
255 if (Class.CastTo(receiveDataFishing,action_recive_data))
256 {
257 if (!ctx.Read(receiveDataFishing.m_IsSurfaceSea))
258 return false;
259
260 return true;
261 }
262
263 return false;
264 }
265
266 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
267 {
268 super.HandleReciveData(action_recive_data, action_data);
269
270 FishingActionReceiveData receiveDataFishing = FishingActionReceiveData.Cast(action_recive_data);
271 FishingActionData fishingData = FishingActionData.Cast(action_data);
272
273 fishingData.m_IsSurfaceSea = receiveDataFishing.m_IsSurfaceSea;
274 }
275
276 override protected void CreateAndSetupActionCallback(ActionData action_data)
277 {
278 super.CreateAndSetupActionCallback(action_data);
279
280 FishingActionData data;
281 if (Class.CastTo(data,action_data))
282 {
283 data.RollNextResultChance(); //performed here so that component exists
284 }
285 }
286
287 override void OnAnimationEvent( ActionData action_data )
288 {
289 super.OnAnimationEvent(action_data);
290 FishingActionData actionDataFishing = FishingActionData.Cast(action_data);
291
292 switch (action_data.m_DelayedAnimationEventID)
293 {
295 PlaySplashEffectSynced(actionDataFishing);
296 break;
297
299 actionDataFishing.AnimateRod(false,false);
300 break;
301 }
302 }
303
304 override void OnUpdate(ActionData action_data)
305 {
306 super.OnUpdate(action_data);
307
308 vector dir = vector.Direction(action_data.m_Player.GetPosition(), action_data.m_Target.GetCursorHitPos());
309 dir[1] = 0;
310 dir.Normalize();
311 action_data.m_Player.AlignDirectionWS(dir);
312 }
313
314 void PlaySplashEffectSynced(FishingActionData actionDataFishing)
315 {
316 if (GetGame().IsServer())
317 {
318 int particleId = actionDataFishing.m_ContextData.GetResultParticleId();
319 if (actionDataFishing.m_SplashUniqueID < 0)
320 {
321 actionDataFishing.m_SplashUniqueID = SEffectManager.CreateParticleServer(actionDataFishing.m_Target.GetCursorHitPos(), new ParticleEffecterParameters("ParticleEffecter", EffecterBase.NOT_DEFINED_LIFESPAN, particleId));
322 }
323 else
324 {
325 SEffectManager.ReinitParticleServer(actionDataFishing.m_SplashUniqueID, new ParticleEffecterParameters("ParticleEffecter", EffecterBase.NOT_DEFINED_LIFESPAN, particleId)); //reinit here, since particleId might differ
326 SEffectManager.ReactivateParticleServer(actionDataFishing.m_SplashUniqueID);
327 }
328 }
329 }
330
331 protected bool CheckForSea(ActionData action_data)
332 {
333 bool ret = false;
334 vector cursorPosition = action_data.m_Target.GetCursorHitPos();
335
336 if (GetGame().SurfaceIsSea(cursorPosition[0], cursorPosition[2]))
337 {
338 ret = true;
339 }
340
341 return ret;
342 }
343
344 //------------------------------------------------------
345
346 override void OnFinishProgress(ActionData action_data)
347 {
348 super.OnFinishProgress(action_data);
349
350 FishingActionData data;
351 if (Class.CastTo(data,action_data))
352 {
353 data.RollNextResultChance();
354 }
355 }
356
357 override void OnEndInput(ActionData action_data)
358 {
359 ActionContinuousBaseCB callback;
360 if (Class.CastTo(callback, action_data.m_Callback))
361 {
362 switch (callback.GetState())
363 {
364 case HumanCommandActionCallback.STATE_LOOP_ACTION:
365 case HumanCommandActionCallback.STATE_LOOP_LOOP:
366 case HumanCommandActionCallback.STATE_LOOP_LOOP2:
367 FishingActionData data;
368 if (Class.CastTo(data,action_data))
369 {
370 data.m_FishingResult = EvaluateFishingResult(action_data);
371 if (data.m_FishingResult != -1)
372 data.m_State = UA_FINISHED;
373 }
374 break;
375
376 default:
377 super.OnEndInput(action_data);
378 callback.EndActionComponent(); //think about putting this everywhere, interrupts HumanCommandActionCallback.STATE_LOOP_IN neatly
379 break;
380 }
381 }
382 }
383
384 override void OnEnd(ActionData action_data)
385 {
386 super.OnEnd(action_data);
387
388 FishingActionData fad;
389 if (Class.CastTo(fad,action_data))
390 fad.AnimateRod(false,true); //just in case
391 }
392
395 {
396 FishingActionData fad;
397 if (Class.CastTo(fad,action_data))
398 {
399 //legacy stuff
400 ActionFishingNewCB legacyCB = ActionFishingNewCB.Cast(fad.m_Callback);
401 if (fad.m_IsSignalActive)//catch
402 {
403 fad.m_ContextData.OnBeforeSpawnSignalHit();
404
405 if (!GetGame().IsMultiplayer() || GetGame().IsDedicatedServer())
406 TrySpawnCatch(fad);
407
408 fad.m_ContextData.OnAfterSpawnSignalHit();
409 if (legacyCB)
411
412 EntityAI hookCheck = action_data.m_MainItem.FindAttachmentBySlotName("Hook");
413 return hookCheck != null && !hookCheck.IsPendingDeletion(); //success animation only if hook loss didn't prevent catch (local)
414 }
415 else//fail
416 {
417 fad.m_ContextData.OnSignalMiss();
418 if (legacyCB)
420
421 return false;
422 }
423 }
424
425 return -1;
426 }
427
428 //------------------------------------------------------
429 void OnSignalStart(FishingActionData action_data)
430 {
431 action_data.m_IsSignalActive = true;
432 ActionFishingNewCB fishingCB;
433 if (Class.CastTo(fishingCB,action_data.m_Callback))
434 fishingCB.ToggleFishBiting();
435 }
436
437 void OnSignalEnd(FishingActionData action_data)
438 {
439 action_data.m_IsSignalActive = false;
440 ActionFishingNewCB fishingCB;
441 if (Class.CastTo(fishingCB,action_data.m_Callback))
442 fishingCB.ToggleFishBiting();
443
444 action_data.m_ContextData.OnSignalPass();
445 }
446
447 protected EntityAI TrySpawnCatch(FishingActionData action_data)
448 {
449 vector spawnPos = vector.Direction(action_data.m_Player.GetPosition(),action_data.m_Target.GetCursorHitPos()); //direction first
450 spawnPos = MiscGameplayFunctions.GetRandomizedPositionVerified(action_data.m_Player.GetPosition(),action_data.m_Player.GetPosition() + spawnPos * 0.1,0.15,action_data.m_Player);
451
452 int idx;
453 return action_data.m_ContextData.SpawnAndSetupCatch(idx,spawnPos);
454 }
455}
ref CABase m_ActionComponent
Определения ActionBase.c:38
ActionBase ActionData
Определения ActionBase.c:30
ItemBase m_Bait
Определения ActionFishingNew.c:57
const float FISHING_GARBAGE_CHANCE
Определения ActionFishingNew.c:54
FishingActionReceiveData m_IsSurfaceSea
float m_RodQualityModifier
Определения ActionFishingNew.c:56
const float FISHING_HOOK_LOSS
Определения ActionFishingNew.c:52
bool m_IsSignalActive
Определения ActionFishingNew.c:10
int m_FishingResult
Определения ActionFishingNew.c:9
void RollNextResultChance()
Определения ActionFishingNew.c:16
void AnimateRod(float phase, bool instant=false)
Определения ActionFishingNew.c:41
int m_SplashUniqueID
Определения ActionFishingNew.c:12
const float FISHING_BAIT_LOSS
Определения ActionFishingNew.c:51
const float FISHING_SUCCESS
Определения ActionFishingNew.c:50
const float FISHING_DAMAGE
Определения ActionFishingNew.c:53
void RandomizeSignalValues()
Определения ActionFishingNew.c:33
bool IsBaitEmptyHook()
Определения ActionFishingNew.c:63
bool m_IsBaitAnEmptyHook
Определения ActionFishingNew.c:55
void InitBait(ItemBase item)
Определения ActionFishingNew.c:58
ref CatchingContextFishingRodAction m_ContextData
Определения ActionFishingNew.c:14
class ActionTargets ActionTarget
void CCTWaterSurfaceEx(float maximal_target_distance, int allowedLiquidSource)
Определения CCTWaterSurface.c:62
class BaitData m_MainItem
Определения ActionBase.c:36
class DayZCreatureAnimInterface RegisterAnimationEvent(string event_name, string function_name)
void EffecterBase()
Определения EffectManager.c:690
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
float m_SpecialtyWeight
Определения ActionBase.c:77
int m_StanceMask
Определения ActionBase.c:62
string m_Text
Определения ActionBase.c:58
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
bool m_FullBody
Определения ActionBase.c:61
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
bool m_Canceled
Определения AnimatedActionBase.c:5
void SetCommand(int command_uid)
Определения AnimatedActionBase.c:54
ActionData m_ActionData
Определения AnimatedActionBase.c:3
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
override void EndActionComponent()
Определения ActionContinuousBase.c:79
int EvaluateFishingResult(ActionData action_data)
Player input reaction evaluation.
Определения ActionFishingNew.c:394
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения ActionFishingNew.c:245
override void OnEndInput(ActionData action_data)
Определения ActionFishingNew.c:357
EntityAI TrySpawnCatch(FishingActionData action_data)
Определения ActionFishingNew.c:447
void OnSignalEnd(FishingActionData action_data)
Определения ActionFishingNew.c:437
void CreateAndSetupActionCallback(ActionData action_data)
Определения ActionFishingNew.c:276
override void CreateConditionComponents()
Определения ActionFishingNew.c:171
override void OnUpdate(ActionData action_data)
Определения ActionFishingNew.c:304
void ActionFishingNew()
Определения ActionFishingNew.c:161
override bool CanBeUsedInFreelook()
Определения ActionFishingNew.c:187
override void OnAnimationEvent(ActionData action_data)
Определения ActionFishingNew.c:287
const string ALLOWED_WATER_SURFACES
Определения ActionFishingNew.c:159
override void OnFinishProgress(ActionData action_data)
Определения ActionFishingNew.c:346
void ComposeLocalContextData(FishingActionData data)
Определения ActionFishingNew.c:220
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения ActionFishingNew.c:235
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionFishingNew.c:192
override void OnEnd(ActionData action_data)
Определения ActionFishingNew.c:384
override bool HasTarget()
Определения ActionFishingNew.c:177
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionFishingNew.c:266
void PlaySplashEffectSynced(FishingActionData actionDataFishing)
Определения ActionFishingNew.c:314
override bool HasAlternativeInterrupt()
Определения ActionFishingNew.c:182
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=null)
Определения ActionFishingNew.c:206
void OnSignalStart(FishingActionData action_data)
Определения ActionFishingNew.c:429
bool CheckForSea(ActionData action_data)
Определения ActionFishingNew.c:331
override ActionData CreateActionData()
Определения ActionFishingNew.c:200
void ToggleFishBiting()
Определения ActionFishingNew.c:135
override void EndActionComponent()
Определения ActionFishingNew.c:92
ref array< string > m_JunkTypes
Определения ActionFishingNew.c:152
override void OnStateChange(int pOldState, int pCurrentState)
Определения ActionFishingNew.c:125
void HandleFishingResultSuccess()
void HandleFishingResultFailure()
override void InitActionComponent()
Определения ActionFishingNew.c:84
override void CreateActionComponent()
Определения ActionFishingNew.c:73
void DestroySplashEffectSynced()
Destroys the effecter, but lets the rest of the particle play out.
Определения ActionFishingNew.c:142
FishingActionData m_ActionDataFishing
Определения ActionFishingNew.c:71
int m_CommandUID
Определения AnimatedActionBase.c:143
Определения CCINonRuined.c:2
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения Building.c:6
bool m_IsSurfaceSea
Определения ActionFishingNew.c:3
void AnimateFishingRodEx(float phase, bool instant=false)
Определения FishingRod_Base.c:34
Определения InventoryItem.c:731
Определения PPEConstants.c:68
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Определения param.c:12
Определения PlayerBaseClient.c:2
static void DestroyEffecterParticleServer(int effecterID)
Определения EffectManager.c:630
static int CreateParticleServer(vector pos, EffecterParameters parameters)
returns unique effecter ID
Определения EffectManager.c:577
static void ReinitParticleServer(int effecterID, EffecterParameters parameters)
allows re-initializing existing effecter with new parameters (extept m_EffecterType,...
Определения EffectManager.c:593
static void ReactivateParticleServer(int effecterID)
Определения EffectManager.c:602
Manager class for managing Effect (EffectParticle, EffectSound)
Определения EffectManager.c:6
proto bool Write(void value_out)
proto bool Read(void value_in)
const int EVENT_SPLASH_SIGNAL
Определения ActionConstants.c:198
const int EVENT_ANIMATE_ROD_CLOSE
Определения ActionConstants.c:199
const float CYCLE_LENGTH_BASE
Определения ActionConstants.c:180
const string FRESH
fake
Определения ActionConstants.c:163
const string SEA
Определения ActionConstants.c:162
Определения ActionConstants.c:161
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto float Normalize()
Normalizes vector. Returns length.
static vector Direction(vector p1, vector p2)
Returns direction vector from point p1 to point p2.
Определения EnConvert.c:220
Определения EnConvert.c:106
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
const int LIQUID_FRESHWATER
Определения constants.c:549
const int LIQUID_SALTWATER
Определения constants.c:548
const int UA_FINISHED
Определения constants.c:464
const int UA_CANCEL
Определения constants.c:465
static const int STATE_NONE
undef state - not running anymore
Определения human.c:349
static const int STATE_LOOP_IN
looped state
Определения human.c:352
proto native void EnableStateChangeCallback()
enables state change callback OnStateChange
static const int STATE_LOOP_LOOP
Определения human.c:353
proto native int GetState()
returns one of STATE_...
Определения StaminaHandler.c:31
static const int STATE_LOOP_LOOP2
Определения human.c:356