Dayz Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Loading...
Searching...
No Matches
actionrepaircarpart.c
Go to the documentation of this file.
2{}
3
4class RepairCarPartActionData : RepairVehiclePartActionData
5{}
6
7class ActionRepairCarPartCB : ActionContinuousBaseCB
8{
9 override void CreateActionComponent()
10 {
11 m_ActionData.m_ActionComponent = new CAContinuousRepeat(UATimeSpent.BASEBUILDING_REPAIR_FAST);
12 }
13}
14
16{
20
22 {
23 m_CallbackClass = ActionRepairCarPartCB;
24 m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
25
26 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
27 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
28 m_FullBody = true;
29 m_LockTargetOnUse = false;
30 m_Text = "#repair";
31 }
32
38
39 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
40 {
41 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
42 return false;
43
44 Object targetObject = target.GetObject();
45 Object targetParent = target.GetParent();
46 CarDoor carDoor = CarDoor.Cast(targetObject);
47
48 if (!carDoor || !player)
49 return false;
50
51 if (g_Game.IsMultiplayer() && g_Game.IsServer())
52 return true;
53
54 if (carDoor)
55 {
56 //Check if item is attached to car -> If so, block repair if door is closed
57 if (targetParent != null)
58 {
60 bool isPresent = carDoor.GetInventory().GetCurrentInventoryLocation(loc);
61
62 if (!isPresent || loc.GetSlot() == -1)
63 return false;
64
66 if (slotName && CarScript.Cast(targetParent).GetCarDoorsState(slotName) != CarDoorState.DOORS_OPEN)
67 return false;
68 }
69
70 //Check health level of door
71 int zoneHP = carDoor.GetHealthLevel("");
72 return zoneHP > GameConstants.STATE_WORN && zoneHP < GameConstants.STATE_RUINED;
73 }
74
75 return false;
76 }
77
78 override void OnFinishProgressServer(ActionData action_data)
79 {
80 Object tgObject = action_data.m_Target.GetObject();
81
82 string damageZone = RepairCarPartActionData.Cast(action_data).m_DamageZone;
83 if (!g_Game.IsMultiplayer())
84 damageZone = m_CurrentDamageZone;
85
86 if (tgObject)
87 {
88 CarDoor carDoor = CarDoor.Cast(tgObject);
89 if (carDoor)
90 {
91 int newDmgLevel = Math.Clamp(carDoor.GetHealthLevel(damageZone) - 1, GameConstants.STATE_WORN, GameConstants.STATE_RUINED);
92 float zoneMax = carDoor.GetMaxHealth("", "");
93 float randomValue = Math.RandomFloatInclusive(zoneMax * 0.05, zoneMax * 0.15);
94
95 switch (newDmgLevel)
96 {
98 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_RUINED_VALUE) + randomValue);
99 break;
100
102 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_BADLY_DAMAGED_VALUE) + randomValue);
103 break;
104
106 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_DAMAGED_VALUE) + randomValue);
107 break;
108
109 default:
110 break;
111 }
112
113 if (action_data.m_MainItem.HasQuantity())
114 {
115 if (action_data.m_MainItem.GetQuantity() > 1)
116 {
117 int qnt = action_data.m_MainItem.GetQuantity();
118 qnt -= action_data.m_MainItem.GetQuantityMax() * 0.25;
119 action_data.m_MainItem.SetQuantity(qnt);
120 }
121 else
122 action_data.m_MainItem.Delete();
123 }
124 }
125 }
126 }
127
129 {
130 RepairCarPartActionData actionData = new RepairCarPartActionData();
131 return actionData;
132 }
133
134 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
135 {
136 super.WriteToContext(ctx, action_data);
137 RepairCarPartActionData repairActionData;
138
139 if (HasTarget() && Class.CastTo(repairActionData, action_data))
140 {
141 repairActionData.m_DamageZone = m_CurrentDamageZone;
142 ctx.Write(repairActionData.m_DamageZone);
143 }
144 }
145
146 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
147 {
148 if (!action_recive_data)
149 action_recive_data = new RepairCarPartActionReciveData();
150
151 super.ReadFromContext(ctx, action_recive_data);
152 RepairCarPartActionReciveData reciveDataRepair = RepairCarPartActionReciveData.Cast(action_recive_data);
153
154 if (HasTarget())
155 {
156 string zone;
157 if (!ctx.Read(zone))
158 return false;
159
160 reciveDataRepair.m_DamageZoneRecived = zone;
161 }
162
163 return true;
164 }
165
166 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
167 {
168 super.HandleReciveData(action_recive_data, action_data);
169
170 RepairCarPartActionReciveData reciveDataRepair = RepairCarPartActionReciveData.Cast(action_recive_data);
171 RepairCarPartActionData.Cast(action_data).m_DamageZone = reciveDataRepair.m_DamageZoneRecived;
172 }
173}
ActionBase ActionData
Definition actionbase.c:30
ActionEat CreateActionComponent
Definition actioneat.c:39
class ActionTargets ActionTarget
CarDoorState
Definition carscript.c:2
PlayerSpawnPreset slotName
bool m_FullBody
Definition actionbase.c:67
string m_Text
Definition actionbase.c:64
bool HasTarget()
Action is performed on target, not with item itself, when set to true.
Definition actionbase.c:250
bool m_LockTargetOnUse
Definition actionbase.c:66
ref CCIBase m_ConditionItem
Definition actionbase.c:70
float m_SpecialtyWeight
Definition actionbase.c:83
ref CCTBase m_ConditionTarget
Definition actionbase.c:71
int m_StanceMask
Definition actionbase.c:68
override void OnFinishProgressServer(ActionData action_data)
override ActionData CreateActionData()
override void CreateConditionComponents()
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
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)
Definition enmath.c:7
proto bool Write(void value_out)
proto bool Read(void value_in)
const float REPAIR
DayZGame g_Game
Definition dayzgame.c:3942
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
eBrokenLegs
Definition ebrokenlegs.c:2
Serializer ParamsReadContext
Definition gameplay.c:15
Serializer ParamsWriteContext
Definition gameplay.c:16
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:867
const float DAMAGE_DAMAGED_VALUE
Definition constants.c:865
const float DAMAGE_BADLY_DAMAGED_VALUE
Definition constants.c:866
const int STATE_RUINED
Definition constants.c:851
const int STATE_BADLY_DAMAGED
Definition constants.c:852
const int STATE_DAMAGED
Definition constants.c:853
const int STATE_WORN
Definition constants.c:854
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:106