DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionBuildPartInstant.c
См. документацию.
1
2#ifdef DIAG_DEVELOPER
3class ActionBuildPartInstantDebug : ActionInstantBase
4{
5 void ActionBuildPartInstantDebug()
6 {
7 m_Text = "build part debug";
8 }
9
10 override bool HasTarget()
11 {
12 return true;
13 }
14
15 override void CreateConditionComponents()
16 {
17 m_ConditionItem = new CCINone();
18 m_ConditionTarget = new CCTCursor();
19 }
20
21 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
22 {
23 ConstructionActionData cad = player.GetConstructionActionData();
24 ConstructionPart part = cad.GetBuildPartInstantAtIndex(m_VariantID);
25 if (part)
26 {
27 m_Text = "dbgBuild "+ part.GetName() + " - INSTANT";
28
29 #ifdef DIAG_DEVELOPER
30 if (DiagMenu.GetBool(DiagMenuIDs.BASEBUILDING_FULLDEBUG))
31 {
32 m_Text = "dbgBuild | part classname: " + part.GetPartName() + " - INSTANT";
33 }
34 #endif
35 }
36 }
37
38 override void InitInfoData()
39 {
40 m_InfoData = new ActionInfoDataConstructionPossible();
41 }
42
43 override bool CanBeUsedLeaning()
44 {
45 return false;
46 }
47
48 override bool CanBeUsedInFreelook()
49 {
50 return false;
51 }
52
53 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
54 {
55 ConstructionActionData cad = player.GetConstructionActionData();
56 if (cad.GetFastConstructionMode() != EConstructionDebugModes.INSTANT)
57 return false;
58
59 EntityAI ent;
60 if (!Class.CastTo(ent,target.GetObject()))
61 return false;
62
63 if (player.IsPlacingLocal() || player.IsPlacingServer())
64 return false;
65
66 //Action not allowed if player has broken legs
67 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
68 return false;
69
70 if (!ent.CanUseConstruction() || !ent.CanUseConstructionBuild())
71 return false;
72
73 if ((!GetGame().IsDedicatedServer()))
74 {
75 if (!PositioningCheck(player, target))
76 return false;
77
78 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
79 return GatherInfoData(player,target,item);
80
81 return false;
82 }
83 return true;
84 }
85
86 override void OnStartServer(ActionData action_data)
87 {
88 EntityAI ent = EntityAI.Cast(action_data.m_Target.GetObject());
89 ConstructionBase construction = ConstructionBase.Cast(ent.GetConstructionBasic());
90
91 string partName = BuildPartActionData.Cast(action_data).m_PartType;
92 ConstructionPart part = construction.GetConstructionPart(partName);
93 CollisionCheckData checkData = new CollisionCheckData();
94
95 checkData.m_PartName = partName;
96 checkData.m_AdditionalExcludes.Insert(action_data.m_Player);
97
98 bool canBuild = construction.CanBuildPart(partName, action_data.m_MainItem, UseMainItem()); //TODO: do we need to check it here when ActionVariantManager already does it?
99 #ifdef DIAG_DEVELOPER
100 if (action_data.m_Player.GetConstructionActionData().GetFastConstructionMode())
101 canBuild = true;
102 #endif
103 if (!construction.IsCollidingEx(checkData) && canBuild)
104 {
105 //build
106 construction.BuildPartServerEx(action_data.m_Player, partName, AT_BUILD_PART);
107 }
108 }
109
110 override ActionData CreateActionData()
111 {
112 BuildPartActionData action_data = new BuildPartActionData();
113 return action_data;
114 }
115
116 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
117 {
118 if (super.SetupAction(player, target, item, action_data, extra_data))
119 {
120 if (!g_Game.IsDedicatedServer())
121 ComposeBuildActionDataClient(player,target,item,action_data,extra_data);
122
123 return true;
124 }
125
126 return false;
127 }
128
129 protected void ComposeBuildActionDataClient(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
130 {
131 ConstructionActionData cad = action_data.m_Player.GetConstructionActionData();
132 ConstructionPart part = cad.GetBuildPartInstantAtIndex(m_VariantID);
133 BuildPartActionData.Cast(action_data).m_PartType = part.GetPartName();
134 }
135
136 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
137 {
138 super.WriteToContext(ctx, action_data);
139
140 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
141 }
142
143 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
144 {
145 action_recive_data = new BuildPartActionReciveData();
146 super.ReadFromContext(ctx, action_recive_data);
147
148 string partType;
149 if (ctx.Read(partType))
150 {
151 BuildPartActionReciveData.Cast(action_recive_data).m_PartType = partType;
152 return true;
153 }
154 else
155 {
156 return false;
157 }
158 }
159
160 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
161 {
162 super.HandleReciveData(action_recive_data, action_data);
163
164 BuildPartActionData.Cast(action_data).m_PartType = BuildPartActionReciveData.Cast(action_recive_data).m_PartType;
165 }
166
167 protected void ClearInfoData()
168 {
170 }
171
172 protected bool GatherInfoData(PlayerBase player, ActionTarget target, ItemBase item)
173 {
175
176 ActionInfoDataConstructionPossible info = ActionInfoDataConstructionPossible.Cast(m_InfoData);
177 ConstructionActionData cad = player.GetConstructionActionData();
178 ConstructionPart part = cad.GetBuildPartInstantAtIndex(m_VariantID);
179 info.SetConstructionPart(part);
180 info.SetTool(item);
181
182 info.m_InfoContextMask |= EConstructionInfoCategories.MATERIALS_PRESENCE; //material info should always be visible
183 info.m_InfoContextMask |= EConstructionInfoCategories.TOOL_PRESENCE; //tools info should always be visible
184
185 return info.CanDisplayInfo();
186 }
187
189 protected bool PositioningCheck(PlayerBase player, ActionTarget target)
190 {
191 EntityAI ent = EntityAI.Cast(target.GetObject());
192 BaseBuildingBase bbb = BaseBuildingBase.Cast(ent);
193 ConstructionActionData cad = player.GetConstructionActionData();
195
196 if (part)
197 {
198 ConstructionBase construction = ConstructionBase.Cast(ent.GetConstructionBasic());
199 if (!ent.IsPlayerInsideEx(player, part.GetPartName()))
200 {
201 if (bbb && !bbb.MustBeBuiltFromOutside())
202 return false;
203 else if (!bbb)
204 return false;
205 }
206 if (!construction.ConstructionDirectionCheck(player, part, EConstructionDirCheckType.INDOORS))
207 return false;
208 if (!construction.ConstructionInsiderBoxCheck(player, part))
209 return false;
210
211 return true;
212 }
213 return false;
214 }
215
217 protected ConstructionPart GetTargetPart(ConstructionActionData cad)
218 {
219 return cad.GetBuildPartInstantAtIndex(m_VariantID);
220 }
221};
222#endif
class LogManager EntityAI
const int AT_BUILD_PART
ActionData CreateActionData()
Определения ActionBase.c:240
bool CanBeUsedInFreelook()
Определения ActionBase.c:406
string m_Text
Определения ActionBase.c:57
ref ActionInfoDataBase m_InfoData
Определения ActionBase.c:70
void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:1342
bool HasTarget()
Определения ActionBase.c:259
int m_VariantID
Определения ActionBase.c:67
void CreateConditionComponents()
Определения ActionBase.c:245
ref CCIBase m_ConditionItem
Определения ActionBase.c:63
void OnStartServer(ActionData action_data)
Определения ActionBase.c:1391
ref CCTBase m_ConditionTarget
Определения ActionBase.c:64
void InitInfoData()
Определения ActionBase.c:159
bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Определения ActionBase.c:163
bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:441
bool UseMainItem()
Определения ActionBase.c:417
void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionBase.c:603
bool CanBeUsedLeaning()
Определения ActionBase.c:396
void ComposeBuildActionDataClient(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Определения ActionBuildPart.c:579
bool GatherInfoData(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBuildPart.c:662
bool PositioningCheck(PlayerBase player, ActionTarget target)
Can build from the inside only, if applicable.
Определения ActionBuildPart.c:679
void ClearInfoData()
Определения ActionBuildPart.c:657
ConstructionPart GetTargetPart(ConstructionActionData cad)
Does not work on server, since variants are not updated there (invoker does not invoke)
Определения ActionBuildPart.c:707
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:125
void BaseBuildingBase()
Определения BaseBuildingBase.c:1326
void ConstructionBase(EntityAI parent)
Определения ConstructionBase.c:58
void CollisionCheckData()
Определения ConstructionBase.c:1923
EConstructionInfoCategories
Определения ConstructionConstants.c:2
void ConstructionPart(string name, string part_name, string main_part_name, int id, bool is_built, bool is_base, bool is_gate, array< string > required_parts)
Определения ConstructionPart.c:531
DayZGame g_Game
Определения DayZGame.c:4074
eBrokenLegs
Определения EBrokenLegs.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
class GP5GasMask extends MaskBase ItemBase
void ReadFromContext(ParamsReadContext ctx)
Определения Hand_Events.c:70
void WriteToContext(ParamsWriteContext ctx)
Определения Hand_Events.c:72
PlayerBase m_Player
Определения ActionBase.c:40
ref ActionTarget m_Target
Определения ActionBase.c:39
ItemBase m_MainItem
Определения ActionBase.c:35
int m_InfoContextMask
Определения ActionPartInfo.c:211
override bool MustBeBuiltFromOutside()
Определения ShelterSite.c:80
string GetPartName()
Определения ConstructionPart.c:198
string GetName()
Определения ConstructionPart.c:193
proto bool Write(void value_out)
proto bool Read(void value_in)
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16
DayZGame GetGame()
Определения gameplay.c:636
proto void Insert(int index, string input)
Inserts a string into the n-th index, increasing the string length by the size of the input.