DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionFishingNew.c
Go to the documentation of this file.
2{
3 const float FISHING_SUCCESS = 0.2;
4 const float FISHING_BAIT_LOSS = 0.02;
5 const float FISHING_HOOK_LOSS = 0.015;
6 const float FISHING_DAMAGE = 1.5;
7 const float FISHING_GARBAGE_CHANCE = 0.2;
8
14
15 void InitBait(ItemBase item)
16 {
17 m_Bait = item;
18 m_IsBaitAnEmptyHook = !m_Bait.ConfigIsExisting("hookType");
19 }
20
22 {
24 }
25}
26
27class ActionFishingNewCB : ActionContinuousBaseCB
28{
31 "Wellies_Black",
32 "Wellies_Brown",
33 "Wellies_Green",
34 "Wellies_Grey",
35 "Pot"
36 };
37
38 override void CreateActionComponent()
39 {
41 m_ActionData.m_ActionComponent = new CAContinuousRepeatFishing(3.0);
42 }
43
44 override void EndActionComponent()
45 {
46 m_ActionDataFishing = FishingActionData.Cast(m_ActionData);
47
49 {
50 super.EndActionComponent();
51 return;
52 }
53
55 {
57 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
59 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_FINISH);
60 }
62 {
64 if (action.HasAlternativeInterrupt())
65 {
66 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_FINISH);
67 }
68 else
69 {
70 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
71 }
72
73 m_Canceled = true;
74 return;
75 }
76 else
77 {
79 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
81 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_FINISH);
82 }
83
85 }
86
88 {
89 if (!GetGame().IsMultiplayer() || GetGame().IsServer())
90 {
91 ItemBase fish;
92
94 m_ActionDataFishing.InitBait(ItemBase.Cast(m_ActionDataFishing.m_MainItem.FindAttachmentBySlotName("Hook")));
95
97 {
99 MiscGameplayFunctions.TurnItemIntoItem(m_ActionDataFishing.m_Bait,m_ActionDataFishing.m_Bait.ConfigGetString("hookType"),m_ActionDataFishing.m_Player);
100 }
101 else
102 {
104 }
105
106 float rnd = Math.RandomFloatInclusive(0.0, 1.0);
108 {
110 fish = ItemBase.Cast(GetGame().CreateObjectEx("Mackerel",m_ActionDataFishing.m_Player.GetPosition(), ECE_PLACE_ON_SURFACE));
111 else
112 fish = ItemBase.Cast(GetGame().CreateObjectEx("Carp",m_ActionDataFishing.m_Player.GetPosition(), ECE_PLACE_ON_SURFACE));
113 }
114 else
115 {
117 {
118 string junkType = m_JunkTypes.Get(Math.RandomInt(0, m_JunkTypes.Count()));
119 fish = ItemBase.Cast(GetGame().CreateObjectEx(junkType, m_ActionDataFishing.m_Player.GetPosition(), ECE_PLACE_ON_SURFACE));
120 fish.SetHealth("", "Health", fish.GetMaxHealth("", "Health") * 0.1);
121 }
122 }
123
124 if (fish)
125 {
126 //Print("---Caught something: " + fish + "---");
127 fish.SetWet(0.3);
128 if (fish.HasQuantity())
129 {
130 float coef = Math.RandomFloatInclusive(0.5, 1.0);
131 float item_quantity = fish.GetQuantityMax() * coef;
132 item_quantity = Math.Round(item_quantity);
133 fish.SetQuantity( item_quantity );
134 fish.InsertAgent(eAgents.CHOLERA);
135 }
136 }
137
139 }
140 }
141
143 {
144 if (!GetGame().IsMultiplayer() || GetGame().IsServer())
145 {
147 m_ActionDataFishing.InitBait(ItemBase.Cast(m_ActionDataFishing.m_MainItem.FindAttachmentBySlotName("Hook")));
148
149 if (Math.RandomFloatInclusive(0.0,1.0) > m_ActionDataFishing.FISHING_HOOK_LOSS) //loss of worm only
150 {
152 {
154 MiscGameplayFunctions.TurnItemIntoItem(m_ActionDataFishing.m_Bait,m_ActionDataFishing.m_Bait.ConfigGetString("hookType"),m_ActionDataFishing.m_Player);
155 }
156 }
157 else //loss of the entire hook
158 {
160 }
161
163 }
164 }
165
166 override void OnStateChange(int pOldState, int pCurrentState)
167 {
168 if (pCurrentState == STATE_NONE && m_ActionDataFishing)
169 {
170 if (m_ActionDataFishing.m_FishingResult == 1 && pOldState == STATE_LOOP_END)
171 {
173 }
174 else if (m_ActionDataFishing.m_FishingResult == 0 && pOldState == STATE_LOOP_END2)
175 {
177 }
178 }
179 }
180};
181
183{
184 private const string ALLOWED_WATER_SURFACES = string.Format("%1|%2", UAWaterType.SEA, UAWaterType.FRESH);
185
187 {
188 m_CallbackClass = ActionFishingNewCB;
190 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_FISHING;
191 m_FullBody = true;
192 m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
193 m_Text = "#start_fishing";
194 }
195
197 {
200 }
201
202 override bool HasTarget()
203 {
204 return true;
205 }
206
208 {
209 return true;
210 }
211
212 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item )
213 {
214 ItemBase bait;
216
217 if (rod)
218 bait = ItemBase.Cast(rod.FindAttachmentBySlotName("Hook"));
219
220 if (bait && !bait.IsRuined())
221 return true;
222
223 return false;
224 }
225
227 {
228 FishingActionData actionData = new FishingActionData();
229 return actionData;
230 }
231
232 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = null)
233 {
234 if (super.SetupAction(player, target, item, action_data, extra_data))
235 {
236 vector cursorPosition = action_data.m_Target.GetCursorHitPos();
237 if (cursorPosition == vector.Zero)
238 cursorPosition = player.GetPosition();
239
240 if (GetGame().SurfaceIsSea(cursorPosition[0], cursorPosition[2]))
241 {
242 FishingActionData.Cast(action_data).m_IsSurfaceSea = true;
243 }
244
245 FishingRod_Base_New rod = FishingRod_Base_New.Cast(action_data.m_MainItem);
246 if (rod)
247 {
249 FishingActionData.Cast(action_data).InitBait(ItemBase.Cast(action_data.m_MainItem.FindAttachmentBySlotName("Hook")));
250 }
251 return true;
252 }
253 return false;
254 }
255
256 override void OnFinishProgressServer( ActionData action_data )
257 {
258 action_data.m_Callback.InternalCommand(DayZPlayerConstants.CMD_ACTIONINT_ACTION);
259 FishingActionData.Cast(action_data).m_FishingResult = EvaluateFishingResult(action_data);
260 }
261
262 override void OnFinishProgressClient( ActionData action_data )
263 {
264 action_data.m_Callback.InternalCommand(DayZPlayerConstants.CMD_ACTIONINT_ACTION);
265 FishingActionData.Cast(action_data).m_FishingResult = EvaluateFishingResult(action_data);
266 }
267
268 override void OnStartClient( ActionData action_data )
269 {
270 FishingRod_Base_New rod = FishingRod_Base_New.Cast(action_data.m_MainItem);
271 rod.AnimateFishingRod(true);
272 }
273 override void OnStartServer( ActionData action_data )
274 {
275 FishingRod_Base_New rod = FishingRod_Base_New.Cast(action_data.m_MainItem);
276 rod.AnimateFishingRod(true);
277 }
278
279 override void OnEndClient( ActionData action_data )
280 {
281 FishingRod_Base_New rod = FishingRod_Base_New.Cast(action_data.m_MainItem);
282 rod.AnimateFishingRod(false);
283 }
284 override void OnEndServer( ActionData action_data )
285 {
286 FishingRod_Base_New rod = FishingRod_Base_New.Cast(action_data.m_MainItem);
287 rod.AnimateFishingRod(false);
288 }
289
290 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
291 {
292 super.WriteToContext(ctx, action_data);
293
294 if (HasTarget())
295 {
296 ctx.Write(action_data.m_Target.GetCursorHitPos());
297 }
298 }
299
300 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
301 {
302 super.ReadFromContext(ctx, action_recive_data);
303
304 if (HasTarget())
305 {
306 vector cursor_position;
307 if (!ctx.Read(cursor_position))
308 return false;
309
310 action_recive_data.m_Target.SetCursorHitPos(cursor_position);
311 }
312 return true;
313 }
314
316 {
317 if (action_data.m_Player.IsQuickFishing())
318 return 1;
319
320 FishingActionData fad = FishingActionData.Cast(action_data);
321 float rnd = fad.m_Player.GetRandomGeneratorSyncManager().GetRandom01(RandomGeneratorSyncUsage.RGSGeneric);
322 float daytimeModifier = 1;
323 float hookModifier = 1;
324 float chance;
325
326 daytimeModifier = GetGame().GetDayTime();
327 if ((daytimeModifier > 18 && daytimeModifier < 22) || (daytimeModifier > 5 && daytimeModifier < 9))
328 {
329 daytimeModifier = 1;
330 }
331 else
332 {
333 daytimeModifier = 0.5;
334 }
335
336 //fishing with an empty hook
337 if (fad.IsBaitEmptyHook())
338 {
339 hookModifier = 0.05;
340 }
341
342 chance = 1 - (((fad.FISHING_SUCCESS * daytimeModifier) + fad.m_RodQualityModifier)) * hookModifier;
343
344 if (rnd > chance)
345 {
346 return 1;
347 }
348 else if (rnd < fad.FISHING_BAIT_LOSS && !fad.IsBaitEmptyHook()) // restricts the loss of an empty hook (low chance is enough)
349 {
350 return 0;
351 }
352
353 return -1;
354 }
355}
protected float m_SpecialtyWeight
Definition ActionBase.c:68
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
protected string m_Text
Definition ActionBase.c:49
protected bool m_FullBody
Definition ActionBase.c:52
protected int m_StanceMask
Definition ActionBase.c:53
void HandleFishingResultFailure()
void HandleFishingResultSuccess()
ref array< string > m_JunkTypes
FishingActionData m_ActionDataFishing
class ActionTargets ActionTarget
const int ECE_PLACE_ON_SURFACE
eAgents
Definition EAgents.c:3
bool m_Canceled
void SetCommand(int command_uid)
void CreateActionComponent()
override void EndActionComponent()
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
ref ActionBase m_Action
Definition ActionBase.c:27
ActionBaseCB m_Callback
Definition ActionBase.c:29
ref ActionTarget m_Target
Definition ActionBase.c:32
override void OnFinishProgressServer(ActionData action_data)
int EvaluateFishingResult(ActionData action_data)
override void OnEndServer(ActionData action_data)
private const string ALLOWED_WATER_SURFACES
override void OnStartClient(ActionData action_data)
override ActionData CreateActionData()
override void CreateConditionComponents()
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=null)
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
override bool HasAlternativeInterrupt()
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void OnFinishProgressClient(ActionData action_data)
override bool HasTarget()
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
override void OnEndClient(ActionData action_data)
override void OnStartServer(ActionData action_data)
proto native float GetDayTime()
Returns current daytime on server.
const float FISHING_GARBAGE_CHANCE
const float FISHING_HOOK_LOSS
const float FISHING_BAIT_LOSS
const float FISHING_SUCCESS
const float FISHING_DAMAGE
void InitBait(ItemBase item)
float GetFishingEffectivityBonus()
void AnimateFishingRod(bool state)
override void OnStateChange(int pOldState, int pCurrentState)
Definition EnMath.c:7
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
Serialization general interface. Serializer API works with:
Definition Serializer.c:56
proto bool Write(void value_out)
proto bool Read(void value_in)
const float BASEBUILDING
const float PRECISE_MEDIUM
const string SEA
const string FRESH
fake
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static const vector Zero
Definition EnConvert.c:110
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()
static proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].
static proto float Round(float f)
Returns mathematical round of value.
static float RandomFloatInclusive(float min, float max)
Returns a random float number between and min [inclusive] and max [inclusive].
Definition EnMath.c:86
static proto string Format(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
Gets n-th character from string.
const int UA_FINISHED
Definition constants.c:420
const int UA_CANCEL
Definition constants.c:421
static const int STATE_NONE
undef state - not running anymore
Definition human.c:340
static const int STATE_LOOP_END2
Definition human.c:346
static const int STATE_LOOP_END
Definition human.c:345
proto native void EnableStateChangeCallback()
enables state change callback OnStateChange