DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionRepairCarPart.c
Go to the documentation of this file.
1class RepairCarPartActionReciveData : ActionReciveData
2{
4}
5
6class RepairCarPartActionData : ActionData
7{
9}
10
12{
13 override void CreateActionComponent()
14 {
16 }
17}
18
20{
24
26 {
27 m_CallbackClass = ActionRepairCarPartCB;
29
30 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
31 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
32 m_FullBody = true;
33 m_LockTargetOnUse = false;
34 m_Text = "#repair";
35 }
36
38 {
41 }
42
43 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
44 {
45 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
46 return false;
47
48 Object targetObject = target.GetObject();
49 Object targetParent = target.GetParent();
50 CarDoor carDoor = CarDoor.Cast(targetObject);
51
52 if (!carDoor || !player)
53 return false;
54
55 if (GetGame().IsMultiplayer() && GetGame().IsServer())
56 return true;
57
58 if (carDoor)
59 {
60 //Check if item is attached to car -> If so, block repair if door is closed
61 if (targetParent != null)
62 {
64 bool isPresent = carDoor.GetInventory().GetCurrentInventoryLocation(loc);
65
66 if (!isPresent || loc.GetSlot() == -1)
67 return false;
68
69 string slotName = InventorySlots.GetSlotName(loc.GetSlot());
70 if (slotName && CarScript.Cast(targetParent).GetCarDoorsState(slotName) != CarDoorState.DOORS_OPEN)
71 return false;
72 }
73
74 //Check health level of door
75 int zoneHP = carDoor.GetHealthLevel("");
76 return zoneHP > GameConstants.STATE_WORN && zoneHP < GameConstants.STATE_RUINED);
77 }
78
79 return false;
80 }
81
82 override void OnFinishProgressServer(ActionData action_data)
83 {
84 Object tgObject = action_data.m_Target.GetObject();
85
86 string damageZone = RepairCarPartActionData.Cast(action_data).m_DamageZone;
87 if (!GetGame().IsMultiplayer())
88 damageZone = m_CurrentDamageZone;
89
90 if (tgObject)
91 {
92 CarDoor carDoor = CarDoor.Cast(tgObject);
93 if (carDoor)
94 {
95 int newDmgLevel = Math.Clamp(carDoor.GetHealthLevel(damageZone) - 1, GameConstants.STATE_WORN, GameConstants.STATE_RUINED);
96 float zoneMax = carDoor.GetMaxHealth("", "");
97 float randomValue = Math.RandomFloatInclusive(zoneMax * 0.05, zoneMax * 0.15);
98
99 switch (newDmgLevel)
100 {
102 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_RUINED_VALUE) + randomValue);
103 break;
104
106 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_BADLY_DAMAGED_VALUE) + randomValue);
107 break;
108
110 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_DAMAGED_VALUE) + randomValue);
111 break;
112
113 default:
114 break;
115 }
116
117 if (action_data.m_MainItem.HasQuantity())
118 {
119 if (action_data.m_MainItem.GetQuantity() > 1)
120 {
121 int qnt = action_data.m_MainItem.GetQuantity();
122 qnt -= action_data.m_MainItem.GetQuantityMax() * 0.25;
123 action_data.m_MainItem.SetQuantity(qnt);
124 }
125 else
126 action_data.m_MainItem.Delete();
127 }
128 }
129 }
130 }
131
133 {
134 RepairCarPartActionData actionData = new RepairCarPartActionData();
135 return actionData;
136 }
137
138 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
139 {
140 super.WriteToContext(ctx, action_data);
141 RepairCarPartActionData repairActionData;
142
143 if (HasTarget() && Class.CastTo(repairActionData, action_data))
144 {
145 repairActionData.m_DamageZone = m_CurrentDamageZone;
146 ctx.Write(repairActionData.m_DamageZone);
147 }
148 }
149
150 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
151 {
152 if (!action_recive_data)
153 action_recive_data = new RepairCarPartActionReciveData();
154
155 super.ReadFromContext(ctx, action_recive_data);
156 RepairCarPartActionReciveData reciveDataRepair = RepairCarPartActionReciveData.Cast(action_recive_data);
157
158 if (HasTarget())
159 {
160 string zone;
161 if (!ctx.Read(zone))
162 return false;
163
164 reciveDataRepair.m_DamageZoneRecived = zone;
165 }
166
167 return true;
168 }
169
170 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
171 {
172 super.HandleReciveData(action_recive_data, action_data);
173
174 RepairCarPartActionReciveData reciveDataRepair = RepairCarPartActionReciveData.Cast(action_recive_data);
175 RepairCarPartActionData.Cast(action_data).m_DamageZone = reciveDataRepair.m_DamageZoneRecived;
176 }
177}
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 ActionRepairCarPart()
class ActionTargets ActionTarget
CarDoorState
Definition CarScript.c:2
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)
override int GetCarDoorsState(string slotType)
Super root of all classes in Enforce script.
Definition EnScript.c:11
InventoryLocation.
proto native int GetSlot()
returns slot id if current type is Attachment
provides access to slot configuration
static proto native owned string GetSlotName(int id)
converts slot_id to string
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
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