Dayz Explorer  1.24.157551 (v105080)
Dayz Code Explorer by Zeroy
actionrepairtent.c
Go to the documentation of this file.
1 class RepairTentActionReciveData : ActionReciveData
2 {
3  string m_DamageZoneRecived;
4 }
5 
6 class RepairTentActionData : ActionData
7 {
8  string m_DamageZone;
9 }
10 
12 {
13  override void CreateActionComponent()
14  {
15  m_ActionData.m_ActionComponent = new CAContinuousTime(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  {
27  m_CallbackClass = ActionRepairTentCB;
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  {
38  m_ConditionItem = new CCINonRuined; //?
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 };
ItemBase
Definition: inventoryitem.c:730
GetGame
proto native CGame GetGame()
CAContinuousTime
Definition: cacontinuoustime.c:1
UASoftSkillsWeight
Definition: actionconstants.c:118
ActionRepairTent
Definition: actionrepairtent.c:19
CCTCursorParent
Definition: cctcursorparent.c:1
UAMaxDistances
Definition: actionconstants.c:104
GetPlugin
PluginBase GetPlugin(typename plugin_type)
Definition: pluginmanager.c:316
ActionRepairTentCB
Definition: actionrepairtent.c:11
Serializer
Serialization general interface. Serializer API works with:
Definition: serializer.c:55
m_FullBody
protected bool m_FullBody
Definition: actionbase.c:52
PlayerBase
Definition: playerbaseclient.c:1
ActionTarget
class ActionTargets ActionTarget
ActionData
Definition: actionbase.c:20
CFG_VEHICLESPATH
const string CFG_VEHICLESPATH
Definition: constants.c:209
DayZPlayerConstants
DayZPlayerConstants
defined in C++
Definition: dayzplayer.c:601
Object
Definition: objecttyped.c:1
TentBase
Definition: cartent.c:1
RepairTentActionReciveData
Definition: actionrepairtent.c:1
UATimeSpent
Definition: actionconstants.c:26
ActionContinuousBaseCB
Definition: actioncontinuousbase.c:1
array< string >
m_CurrentDamageZone
string m_CurrentDamageZone
Definition: actionrepaircarengine.c:22
m_Text
protected string m_Text
Definition: actionbase.c:49
m_ConditionItem
ref CCIBase m_ConditionItem
Definition: actionbase.c:55
ActionContinuousBase
Definition: actioncontinuousbase.c:132
CCINonRuined
Definition: ccinonruined.c:1
m_ConditionTarget
ref CCTBase m_ConditionTarget
Definition: actionbase.c:56
Class
Super root of all classes in Enforce script.
Definition: enscript.c:10
m_SpecialtyWeight
protected float m_SpecialtyWeight
Definition: actionbase.c:68
m_StanceMask
protected int m_StanceMask
Definition: actionbase.c:53
path
string path
Definition: optionselectormultistate.c:135
m_DamageZone
RepairTentActionReciveData m_DamageZone