DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionRepairPart.c
См. документацию.
1
2/*
3TODO:
4No pairing with part and tool similar to 'CanUseToolToBuildPart' exists here, since only one type of part is damage-able at this point.
5This should be handled by adding "repair_action_type" array to basebuilding and tool configs, this would allow for independent pairing of repair action.
6*/
7
8class RepairPartActionReciveData : ActionReciveData
9{
11}
12
13class RepairPartActionData : ActionData
14{
16}
17
19{
20 override void CreateActionComponent()
21 {
22 float time = SetCallbackDuration(m_ActionData.m_MainItem);
23 m_ActionData.m_ActionComponent = new CAContinuousRepeat( time );
24 }
25
27 {
28 /*switch( item.Type() )
29 {
30 case WoodAxe:
31 return UATimeSpent.BASEBUILDING_REPAIR_SLOW;
32 default:
33 return UATimeSpent.BASEBUILDING_REPAIR_FAST;
34 }*/
36 }
37};
38
40{
42 {
44 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
45 m_FullBody = true;
46 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
47
48 m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_HIGH;
49 m_Text = "#repair";
50 }
51
57
58 override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
59 {
60 ConstructionActionData construction_action_data = player.GetConstructionActionData();
61 m_Text = "#repair " + construction_action_data.GetTargetPart().GetName();
62 }
63
64 override string GetText()
65 {
66 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
67 if ( player )
68 {
69 ConstructionActionData construction_action_data = player.GetConstructionActionData();
70 ConstructionPart constrution_part = construction_action_data.GetTargetPart();
71
72 if ( constrution_part )
73 {
74 return "#repair" + " " + constrution_part.GetName();
75 }
76 }
77
78 return "";
79 }
80
81 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
82 {
83 //Action not allowed if player has broken legs
84 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
85 return false;
86
87 return RepairCondition( player, target, item, true );
88 }
89
90 override bool ActionConditionContinue( ActionData action_data )
91 {
92 return RepairCondition( action_data.m_Player, action_data.m_Target, action_data.m_MainItem , false );
93 }
94
95 override void OnFinishProgressServer( ActionData action_data )
96 {
97 BaseBuildingBase base_building = BaseBuildingBase.Cast( action_data.m_Target.GetObject() );
98 Construction construction = base_building.GetConstruction();
99
100 //repairing
101 string part_name = action_data.m_Target.GetObject().GetActionComponentName( RepairPartActionData.Cast(action_data).m_ComponentIndex );
102 string zone_name;
103 PluginRepairing module_repairing;
104 Class.CastTo(module_repairing, GetPlugin(PluginRepairing));
105
106 DamageSystem.GetDamageZoneFromComponentName(base_building,part_name,zone_name);
107 module_repairing.Repair(action_data.m_Player,action_data.m_MainItem,base_building,m_SpecialtyWeight,zone_name);
108
109 //consume materials
110 construction.TakeMaterialsServer(part_name,true);
111
112 //add damage to tool
113 action_data.m_MainItem.DecreaseHealth( UADamageApplied.REPAIR, false );
114 }
115
116 protected override void SetBuildingAnimation( ItemBase item )
117 {
118 switch( item.Type() )
119 {
120 case Pickaxe:
121 case Shovel:
122 case FarmingHoe:
123 case FieldShovel:
124 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
125 break;
126 case Pliers:
127 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
128 break;
129 default:
130 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
131 break;
132 }
133 }
134
136 {
137 RepairPartActionData action_data = new RepairPartActionData;
138 return action_data;
139 }
140
141 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
142 {
143 super.WriteToContext(ctx, action_data);
144 RepairPartActionData repair_action_data;
145
146 if( HasTarget() && Class.CastTo(repair_action_data,action_data) )
147 {
148 repair_action_data.m_ComponentIndex = action_data.m_Target.GetComponentIndex();
149 ctx.Write(repair_action_data.m_ComponentIndex);
150 }
151 }
152
153 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
154 {
155 if(!action_recive_data)
156 {
157 action_recive_data = new RepairPartActionReciveData;
158 }
159 RepairPartActionReciveData recive_data_repair = RepairPartActionReciveData.Cast(action_recive_data);
160
161 super.ReadFromContext(ctx, action_recive_data);
162
163 if( HasTarget() )
164 {
165 int component_index;
166 if ( !ctx.Read(component_index) )
167 return false;
168
169 recive_data_repair.m_ComponentIndexRecived = component_index;
170 }
171 return true;
172 }
173
174 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
175 {
176 super.HandleReciveData(action_recive_data, action_data);
177
178 RepairPartActionReciveData recive_data_repair = RepairPartActionReciveData.Cast(action_recive_data);
179 RepairPartActionData.Cast(action_data).m_ComponentIndex = recive_data_repair.m_ComponentIndexRecived;
180 }
181
182 protected bool RepairCondition( PlayerBase player, ActionTarget target, ItemBase item, bool camera_check )
183 {
184 string zone_name;
185
186 Object target_object = target.GetObject();
187 if ( target_object && target_object.CanUseConstruction() )
188 {
189 string part_name = target_object.GetActionComponentName( target.GetComponentIndex() );
190
191 BaseBuildingBase base_building = BaseBuildingBase.Cast( target_object );
192 Construction construction = base_building.GetConstruction();
193 ConstructionPart construction_part = construction.GetConstructionPart( part_name );
194
195 if ( construction_part )
196 {
197 //camera and position checks
198 if ( !base_building.IsFacingPlayer( player, part_name ) && !player.GetInputController().CameraIsFreeLook() && base_building.HasProperDistance( construction_part.GetMainPartName(), player ) )
199 {
200 //Camera check (client-only)
201 if ( camera_check )
202 {
203 if ( GetGame() && ( !GetGame().IsDedicatedServer() ) )
204 {
205 if ( base_building.IsFacingCamera( part_name ) )
206 {
207 return false;
208 }
209 }
210 }
211
212 //damage check
213 DamageSystem.GetDamageZoneFromComponentName(base_building,part_name,zone_name);
214 if ( base_building.GetHealthLevel(zone_name) < GameConstants.STATE_WORN || base_building.GetHealthLevel(zone_name) == GameConstants.STATE_RUINED )
215 {
216 return false;
217 }
218
219 //materials check
220 if ( !construction.HasMaterials(part_name,true) )
221 {
222 return false;
223 }
224
225 ConstructionActionData construction_action_data = player.GetConstructionActionData();
226 construction_action_data.SetTargetPart( construction_part );
227 return true;
228 }
229 }
230 }
231
232 return false;
233 }
234
235 override string GetAdminLogMessage(ActionData action_data)
236 {
237 return " repaired " + action_data.m_Target.GetObject().GetDisplayName() + " with " + action_data.m_MainItem.GetDisplayName();
238 }
239}
int m_StanceMask
Определения ActionBase.c:33
ActionBase ActionData
Определения ActionBase.c:30
class ActionTargets ActionTarget
void Construction(BaseBuildingBase parent)
Определения Construction.c:26
eBrokenLegs
Определения EBrokenLegs.c:2
int m_ComponentIndex
Определения ImpactEffects.c:14
PlayerBase GetPlayer()
Определения ModifierBase.c:51
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:316
float m_SpecialtyWeight
Определения ActionBase.c:77
bool HasTarget()
Определения ActionBase.c:244
string m_Text
Определения ActionBase.c:58
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
bool m_FullBody
Определения ActionBase.c:61
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
ActionData m_ActionData
Определения AnimatedActionBase.c:3
void ActionDismantlePart()
Определения ActionDismantlePart.c:28
override void SetBuildingAnimation(ItemBase item)
Определения ActionRepairPart.c:116
override string GetText()
Определения ActionRepairPart.c:64
override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionRepairPart.c:58
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения ActionRepairPart.c:153
override string GetAdminLogMessage(ActionData action_data)
Определения ActionRepairPart.c:235
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionRepairPart.c:81
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения ActionRepairPart.c:141
void ActionRepairPart()
Определения ActionRepairPart.c:41
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionRepairPart.c:174
override void OnFinishProgressServer(ActionData action_data)
Определения ActionRepairPart.c:95
override ActionData CreateActionData()
Определения ActionRepairPart.c:135
override bool ActionConditionContinue(ActionData action_data)
Определения ActionRepairPart.c:90
bool RepairCondition(PlayerBase player, ActionTarget target, ItemBase item, bool camera_check)
Определения ActionRepairPart.c:182
override void CreateConditionComponents()
Определения ActionRepairPart.c:52
float SetCallbackDuration(ItemBase item)
Определения ActionRepairPart.c:26
override void CreateActionComponent()
Определения ActionRepairPart.c:20
int m_CommandUID
Определения AnimatedActionBase.c:143
override bool IsFacingCamera(string selection)
Определения Fence.c:678
override bool IsFacingPlayer(PlayerBase player, string selection)
Определения Fence.c:651
override bool HasProperDistance(string selection, PlayerBase player)
Определения Fence.c:703
Определения Fence.c:2
Определения CCINonRuined.c:2
Определения CCTNonRuined.c:2
Super root of all classes in Enforce script.
Определения EnScript.c:11
ConstructionPart GetTargetPart()
Определения ConstructionActionData.c:93
void SetTargetPart(ConstructionPart target_part)
Определения ConstructionActionData.c:88
string GetName()
Определения ConstructionPart.c:24
string GetMainPartName()
Определения ConstructionPart.c:35
Определения FarmingHoe.c:2
Определения constants.c:659
Определения InventoryItem.c:731
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
int m_ComponentIndexRecived
Определения ActionRepairPart.c:10
proto bool Write(void value_out)
proto bool Read(void value_in)
const float REPAIR
Определения ActionConstants.c:150
const float BASEBUILDING
Определения ActionConstants.c:116
const float BASEBUILDING_REPAIR_FAST
Определения ActionConstants.c:67
Определения ActionConstants.c:28
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 int STATE_RUINED
Определения constants.c:846
const int STATE_WORN
Определения constants.c:849