Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
actionrepairtent.c
Go to the documentation of this file.
1class RepairTentActionReciveData : ActionReciveData
2{
3 string m_DamageZoneRecived;
4}
5
6class RepairTentActionData : ActionData
7{
9}
10
12{
13 override void CreateActionComponent()
14 {
15 m_ActionData.m_ActionComponent = new CAContinuousRepeat(UATimeSpent.BASEBUILDING_REPAIR_FAST);
16 }
17};
18
20{
21 typename m_LastValidType; //legacy stuff
22 string m_CurrentDamageZone = "";
23 int m_LastValidComponentIndex = -1; //legacy stuff
24
25 void ActionRepairTent()
26 {
28 m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
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
36 override void CreateConditionComponents()
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
110 override ActionData CreateActionData()
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};
RepairTentActionReciveData m_DamageZone
ActionData m_ActionData
float m_SpecialtyWeight
Definition actionbase.c:77
int m_StanceMask
Definition actionbase.c:62
string m_Text
Definition actionbase.c:58
ref CCIBase m_ConditionItem
Definition actionbase.c:64
bool m_FullBody
Definition actionbase.c:61
ref CCTBase m_ConditionTarget
Definition actionbase.c:65
Super root of all classes in Enforce script.
Definition enscript.c:11
Serialization general interface. Serializer API works with:
Definition serializer.c:56
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()
const string CFG_VEHICLESPATH
Definition constants.c:220
PluginBase GetPlugin(typename plugin_type)