DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionRepairCarPart.c
См. документацию.
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 (GetGame().IsMultiplayer() && GetGame().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 (!GetGame().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
Определения ActionBase.c:30
ActionEat CreateActionComponent
Определения ActionEat.c:39
class ActionTargets ActionTarget
CarDoorState
Определения CarScript.c:2
PlayerSpawnPreset slotName
eBrokenLegs
Определения EBrokenLegs.c:2
float m_SpecialtyWeight
Определения ActionBase.c:77
int m_StanceMask
Определения ActionBase.c:62
bool HasTarget()
Определения ActionBase.c:244
string m_Text
Определения ActionBase.c:58
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
bool m_LockTargetOnUse
Определения ActionBase.c:60
bool m_FullBody
Определения ActionBase.c:61
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения ActionRepairCarPart.c:134
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionRepairCarPart.c:39
string m_CurrentDamageZone
Определения ActionRepairCarPart.c:18
int m_LastValidComponentIndex
Определения ActionRepairCarPart.c:19
override ActionData CreateActionData()
Определения ActionRepairCarPart.c:128
override void CreateConditionComponents()
Определения ActionRepairCarPart.c:33
void ActionRepairCarPart()
Определения ActionRepairCarPart.c:21
override void OnFinishProgressServer(ActionData action_data)
Определения ActionRepairCarPart.c:78
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения ActionRepairCarPart.c:146
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionRepairCarPart.c:166
int m_CommandUID
Определения AnimatedActionBase.c:143
Определения CCINonRuined.c:2
Определения CCTCursor.c:2
Определения InventoryItem.c:496
override int GetCarDoorsState(string slotType)
Определения CivilianSedan.c:163
Определения CivilianSedan.c:2
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения constants.c:659
proto native int GetSlot()
returns slot id if current type is Attachment
InventoryLocation.
Определения InventoryLocation.c:29
static proto native owned string GetSlotName(int id)
converts slot_id to string
provides access to slot configuration
Определения InventorySlots.c:6
Определения InventoryItem.c:731
Определения EnMath.c:7
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
const float REPAIR
Определения ActionConstants.c:113
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 float DAMAGE_BADLY_DAMAGED_VALUE
Определения constants.c:861
const float DAMAGE_RUINED_VALUE
Определения constants.c:862
const float DAMAGE_DAMAGED_VALUE
Определения constants.c:860
const int STATE_RUINED
Определения constants.c:846
const int STATE_WORN
Определения constants.c:849
const int STATE_DAMAGED
Определения constants.c:848
const int STATE_BADLY_DAMAGED
Определения constants.c:847
static float RandomFloatInclusive(float min, float max)
Returns a random float number between and min [inclusive] and max [inclusive].
Определения EnMath.c:106
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'.