DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionRepairCarEngine.c
Go to the documentation of this file.
1class RepairCarEngineActionReciveData : ActionReciveData
2{
4}
5
6class RepairCarEngineActionData : ActionData
7{
9}
10
12{
13 override void CreateActionComponent()
14 {
16 }
17}
18
20{
24
26 {
27 m_CallbackClass = ActionRepairTentPartCB;
29 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
30 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
31 m_FullBody = true;
32 m_LockTargetOnUse = false;
33 m_Text = "#repair";
34 }
35
37 {
40 }
41
42 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
43 {
44 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
45 return false;
46
47 Object targetObject = target.GetObject();
48 Object targetParent = target.GetParent();
49 CarScript car = CarScript.Cast(targetObject);
50 EntityAI carEntity = EntityAI.Cast(targetObject);
51
52 if (!car || !player)
53 return false;
54
55 if (car.EngineIsOn())
56 return false;
57
58 if (GetGame().IsMultiplayer() && GetGame().IsServer())
59 return true;
60
61 if (m_LastValidType != target.Type() || m_LastValidComponentIndex != target.GetComponentIndex() || m_CurrentDamageZone == "")
62 {
63 string damageZone = "";
64 array<string> selections = new array<string>();
65 targetObject.GetActionComponentNameList(target.GetComponentIndex(), selections, LOD.NAME_VIEW);
66
67 foreach (string selection : selections)
68 {
69 //NOTE: relevant fire geometry and view geometry selection names MUST match in order to get a valid damage zone
70 if (carEntity && DamageSystem.GetDamageZoneFromComponentName(carEntity, selection, damageZone))
71 {
72 if (damageZone == "Engine")
73 {
74 int zoneHP = car.GetHealthLevel(damageZone);
75 if (zoneHP > GameConstants.STATE_WORN && zoneHP < GameConstants.STATE_RUINED)
76 {
77 m_CurrentDamageZone = damageZone;
78 m_LastValidComponentIndex = target.GetComponentIndex();
79
80 return true;
81 }
82 }
83 }
84 }
85 }
86
87 return false;
88 }
89
90 override void OnFinishProgressServer(ActionData action_data)
91 {
92 Object tgObject = action_data.m_Target.GetObject();
93
94 string damageZone = RepairCarPartActionData.Cast(action_data).m_DamageZone;
95 if (!GetGame().IsMultiplayer())
96 damageZone = m_CurrentDamageZone;
97
98 if (tgObject && damageZone != "")
99 {
100 CarScript car = CarScript.Cast(tgObject);
101 if (car)
102 {
103 int newDmgLevel = Math.Clamp(car.GetHealthLevel(damageZone) - 1, GameConstants.STATE_WORN, GameConstants.STATE_RUINED);
104 float zoneMax = car.GetMaxHealth(damageZone, "");
105 float randomValue = Math.RandomFloatInclusive(zoneMax * 0.05, zoneMax * 0.15);
106
107 switch (newDmgLevel)
108 {
110 car.SetHealth(damageZone, "", (zoneMax * GameConstants.DAMAGE_RUINED_VALUE) + randomValue);
111 break;
112
114 car.SetHealth(damageZone, "", (zoneMax * GameConstants.DAMAGE_BADLY_DAMAGED_VALUE) + randomValue);
115 break;
116
118 car.SetHealth(damageZone, "", (zoneMax * GameConstants.DAMAGE_DAMAGED_VALUE) + randomValue);
119 break;
120
121 default:
122 break;
123 }
124
125 MiscGameplayFunctions.DealAbsoluteDmg(action_data.m_MainItem, UADamageApplied.BUILD);
126 }
127 }
128 }
129
131 {
132 RepairCarPartActionData actionData = new RepairCarPartActionData();
133 return actionData;
134 }
135
136 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
137 {
138 super.WriteToContext(ctx, action_data);
139 RepairCarPartActionData repairActionData;
140
141 if (HasTarget() && Class.CastTo(repairActionData, action_data))
142 {
143 repairActionData.m_DamageZone = m_CurrentDamageZone;
144 ctx.Write(repairActionData.m_DamageZone);
145 }
146 }
147
148 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
149 {
150 if (!action_recive_data)
151 action_recive_data = new RepairCarPartActionReciveData();
152
153 super.ReadFromContext(ctx, action_recive_data);
154 RepairCarPartActionReciveData reciveDataRepair = RepairCarPartActionReciveData.Cast(action_recive_data);
155
156 if (HasTarget())
157 {
158 string zone;
159 if (!ctx.Read(zone))
160 return false;
161
162 reciveDataRepair.m_DamageZoneRecived = zone;
163 }
164
165 return true;
166 }
167
168 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
169 {
170 super.HandleReciveData(action_recive_data, action_data);
171
172 RepairCarPartActionReciveData reciveDataRepair = RepairCarPartActionReciveData.Cast(action_recive_data);
173 RepairCarPartActionData.Cast(action_data).m_DamageZone = reciveDataRepair.m_DamageZoneRecived;
174 }
175}
ActionData CreateActionData()
Definition ActionBase.c:213
void CreateConditionComponents()
Definition ActionBase.c:218
protected float m_SpecialtyWeight
Definition ActionBase.c:68
bool HasTarget()
Definition ActionBase.c:232
protected bool m_LockTargetOnUse
Definition ActionBase.c:51
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Definition ActionBase.c:517
protected string m_Text
Definition ActionBase.c:49
protected bool m_FullBody
Definition ActionBase.c:52
protected int m_StanceMask
Definition ActionBase.c:53
RepairCarChassisActionReciveData m_DamageZone
int m_LastValidComponentIndex
ActionRepairCarEngineCB m_LastValidType
string m_CurrentDamageZone
void ActionRepairCarEngine()
class ActionTargets ActionTarget
eBrokenLegs
Definition EBrokenLegs.c:2
void ReadFromContext(ParamsReadContext ctx)
Definition Hand_Events.c:63
void WriteToContext(ParamsWriteContext ctx)
Definition Hand_Events.c:65
protected ActionData m_ActionData
protected void OnFinishProgressServer(ActionData action_data)
ItemBase m_MainItem
Definition ActionBase.c:28
ref CABase m_ActionComponent
Definition ActionBase.c:30
ref ActionTarget m_Target
Definition ActionBase.c:32
override void CreateActionComponent()
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Super root of all classes in Enforce script.
Definition EnScript.c:11
LOD class.
Definition gameplay.c:203
static const string NAME_VIEW
Definition gameplay.c:206
Definition EnMath.c:7
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 REPAIR
const float BASEBUILDING_REPAIR_FAST
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
DayZPlayerConstants
defined in C++
Definition 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.
const float DAMAGE_RUINED_VALUE
Definition constants.c:758
const float DAMAGE_DAMAGED_VALUE
Definition constants.c:756
const float DAMAGE_BADLY_DAMAGED_VALUE
Definition constants.c:757
const int STATE_RUINED
Definition constants.c:742
const int STATE_BADLY_DAMAGED
Definition constants.c:743
const int STATE_DAMAGED
Definition constants.c:744
const int STATE_WORN
Definition constants.c:745
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static float RandomFloatInclusive(float min, float max)
Returns a random float number between and min [inclusive] and max [inclusive].
Definition EnMath.c:86