DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionRepairTent.c
Go to the documentation of this file.
1class RepairTentActionReciveData : ActionReciveData
2{
4}
5
6class RepairTentActionData : ActionData
7{
9}
10
12{
13 override void CreateActionComponent()
14 {
16 }
17};
18
20{
21 typename m_LastValidType; //legacy stuff
23 int m_LastValidComponentIndex = -1; //legacy stuff
24
26 {
29
30 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
31 m_FullBody = true;
32 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
33 m_Text = "#repair";
34 }
35
37 {
40 }
41
42 override bool IsUsingProxies()
43 {
44 return true;
45 }
46
47 override bool HasTarget()
48 {
49 return true;
50 }
51
52 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
53 {
54 Object targetObject = target.GetObject();
55 Object targetParent = target.GetParent();
56 if ( !targetParent || !targetParent.IsInherited(TentBase) )
57 return false;
58
59 if ( player && targetObject && targetParent )
60 {
61 array<string> selections = new array<string>;
62 PluginRepairing module_repairing;
63 Class.CastTo(module_repairing, GetPlugin(PluginRepairing));
64 targetObject.GetActionComponentNameList(target.GetComponentIndex(), selections, "view");
65 TentBase tent = TentBase.Cast( targetParent );
66
67 string damageZone = "";
68
69 for (int s = 0; s < selections.Count(); s++)
70 {
71 if ( DamageSystem.GetDamageZoneFromComponentName(tent, selections[s], damageZone) ) //NOTE: relevant fire geometry and view geometry selection names MUST match in order to get a valid damage zone
72 {
73 //Print("selections[s]: " + selections[s] + " | damageZone: " + damageZone);
74 break;
75 }
76 }
77
78 if ( damageZone != "" )
79 {
80 if (module_repairing.CanRepair(item,tent,damageZone))
81 {
82 m_CurrentDamageZone = damageZone;
83 return true;
84 }
85 }
86 }
87 return false;
88 }
89
90 override void OnFinishProgressServer( ActionData action_data )
91 {
92 Object targetObject = action_data.m_Target.GetObject();
93 Object targetParent = action_data.m_Target.GetParent();
94
95 string damageZone = RepairTentActionData.Cast(action_data).m_DamageZone;
96 if (!GetGame().IsMultiplayer())
97 damageZone = m_CurrentDamageZone;
98
99 if ( targetParent && targetParent.IsInherited(TentBase) && damageZone != "" )
100 {
101 TentBase tent = TentBase.Cast( targetParent );
102 PluginRepairing module_repairing;
103 Class.CastTo(module_repairing, GetPlugin(PluginRepairing));
104
105 RepairDamageTransfer(action_data.m_Player,action_data.m_MainItem,tent,m_SpecialtyWeight,damageZone);
106 module_repairing.Repair(action_data.m_Player,action_data.m_MainItem,tent,m_SpecialtyWeight,damageZone);
107 }
108 }
109
111 {
112 RepairTentActionData action_data = new RepairTentActionData;
113 return action_data;
114 }
115
116 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
117 {
118 super.WriteToContext(ctx, action_data);
119 RepairTentActionData repair_action_data;
120
121 if( HasTarget() && Class.CastTo(repair_action_data,action_data) )
122 {
123 repair_action_data.m_DamageZone = m_CurrentDamageZone;
124 ctx.Write(repair_action_data.m_DamageZone);
125 }
126 }
127
128 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
129 {
130 if(!action_recive_data)
131 {
132 action_recive_data = new RepairTentActionReciveData;
133 }
134 super.ReadFromContext(ctx, action_recive_data);
135 RepairTentActionReciveData recive_data_repair = RepairTentActionReciveData.Cast(action_recive_data);
136
137 if( HasTarget() )
138 {
139 string zone;
140 if ( !ctx.Read(zone) )
141 return false;
142
143 recive_data_repair.m_DamageZoneRecived = zone;
144 }
145 return true;
146 }
147
148 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
149 {
150 super.HandleReciveData(action_recive_data, action_data);
151
152 RepairTentActionReciveData recive_data_repair = RepairTentActionReciveData.Cast(action_recive_data);
153 RepairTentActionData.Cast(action_data).m_DamageZone = recive_data_repair.m_DamageZoneRecived;
154 }
155
156 void RepairDamageTransfer(PlayerBase player, ItemBase repair_kit, ItemBase item, float specialty_weight, string damage_zone = "") //hack; mirrors current config setup, replace with either native DamageSystem methods, or script-side DamageSystem systemic solution
157 {
158 float transfer_to_global_coef = 0;
159 array<string> transfer_zones = new array<string>;
160 string path = "" + CFG_VEHICLESPATH + " " + item.GetType() + " DamageSystem DamageZones " + damage_zone;
161 PluginRepairing module_repairing;
162 Class.CastTo(module_repairing, GetPlugin(PluginRepairing));
163
164 GetGame().ConfigGetTextArray("" + path + " transferToZonesNames", transfer_zones);
165
166 for (int i = 0; i < transfer_zones.Count(); i++)
167 {
168 transfer_to_global_coef += GetGame().ConfigGetFloat("" + path + " Health transferToGlobalCoef");
169 if (transfer_zones.Get(i) == damage_zone)
170 continue;
171
172 module_repairing.Repair(player,repair_kit,item,specialty_weight,transfer_zones.Get(i),false);
173 }
174
175 //finally, repairs global
176 if (transfer_to_global_coef > 0)
177 {
178 module_repairing.Repair(player,repair_kit,item,specialty_weight,"",false);
179 }
180 }
181};
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
RepairCarChassisActionReciveData m_DamageZone
class ActionTargets ActionTarget
PluginBase GetPlugin(typename plugin_type)
protected ActionData m_ActionData
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
ref CABase m_ActionComponent
Definition ActionBase.c:30
ref ActionTarget m_Target
Definition ActionBase.c:32
override void CreateActionComponent()
override void OnFinishProgressServer(ActionData action_data)
override ActionData CreateActionData()
override void CreateConditionComponents()
void RepairDamageTransfer(PlayerBase player, ItemBase repair_kit, ItemBase item, float specialty_weight, string damage_zone="")
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override bool HasTarget()
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
override bool IsUsingProxies()
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
proto native float ConfigGetFloat(string path)
Get float value from config on path.
proto native void ConfigGetTextArray(string path, out TStringArray values)
Get array of strings from config on path.
Super root of all classes in Enforce script.
Definition EnScript.c:11
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 SMALL
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 string CFG_VEHICLESPATH
Definition constants.c:195