DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ OnFinishProgressServer()

override void ActionBuildPart::OnFinishProgressServer ( ActionData action_data)
inlineprivate

См. определение в файле ActionBuildPart.c строка 150

151 {
152 EntityAI ent = EntityAI.Cast(action_data.m_Target.GetObject());
153 ConstructionBase construction = ConstructionBase.Cast(ent.GetConstructionBasic());
154
155 string partName = BuildPartActionData.Cast(action_data).m_PartType;
156 ConstructionPart part = construction.GetConstructionPart(partName);
158
159 checkData.m_PartName = partName;
160 checkData.m_AdditionalExcludes.Insert(action_data.m_Player);
161
162 bool canBuild = construction.CanBuildPart(partName, action_data.m_MainItem, UseMainItem()); //TODO: do we need to check it here when ActionVariantManager already does it?
163 #ifdef DIAG_DEVELOPER
164 if (action_data.m_Player.GetConstructionActionData().GetFastConstructionMode())
165 canBuild = true;
166 #endif
167 if (!construction.IsCollidingEx(checkData) && canBuild)
168 {
169 //build
170 construction.BuildPartServerEx(action_data.m_Player, partName, AT_BUILD_PART);
171
172 #ifdef DIAG_DEVELOPER
173 //skip tool/hand damage on debug action
174 if (action_data.m_Player.GetConstructionActionData().GetFastConstructionMode())
175 return;
176 #endif
177
178 //add damage to tool or hands
179 if (action_data.m_MainItem)
180 {
181 if (part.DamageToolOnBuild())
182 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
183 }
184 else
185 {
186 if (part.DamageHandsOnBuild())
187 {
188 EntityAI gloves = action_data.m_Player.GetInventory().FindAttachment(InventorySlots.GLOVES);
189 if (gloves && gloves.GetHealthLevel() < 4)
190 {
191 gloves.AddHealth("","", PlayerConstants.GLOVES_DAMAGE_HAND_CONSTRUCTION);
192 }
193 else if (Math.RandomFloat01() < PlayerConstants.CHANCE_TO_BLEED_HAND_CONSTRUCTION)
194 {
195 if (Math.RandomFloat01() < 0.5)
196 action_data.m_Player.GetBleedingManagerServer().AttemptAddBleedingSourceBySelection("LeftForeArmRoll");
197 else
198 action_data.m_Player.GetBleedingManagerServer().AttemptAddBleedingSourceBySelection("RightForeArmRoll");
199 action_data.m_Player.RequestSoundEventEx(EPlayerSoundEventID.INJURED_LIGHT); //play sound regardless?
200 }
201 }
202 }
203 }
204 }
class LogManager EntityAI
const int AT_BUILD_PART
override bool UseMainItem()
Определения ActionBuildPart.c:390
void ConstructionBase(EntityAI parent)
Определения ConstructionBase.c:58
void CollisionCheckData()
Определения ConstructionBase.c:1923
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
EPlayerSoundEventID
Определения PlayerSoundEventHandler.c:3
PlayerBase m_Player
Определения ActionBase.c:40
ref ActionTarget m_Target
Определения ActionBase.c:39
ItemBase m_MainItem
Определения ActionBase.c:35
bool DamageHandsOnBuild()
Определения ConstructionPart.c:218
bool DamageToolOnBuild()
Определения ConstructionPart.c:213
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.

Перекрестные ссылки AT_BUILD_PART, UADamageApplied::BUILD, PlayerConstants::CHANCE_TO_BLEED_HAND_CONSTRUCTION, CollisionCheckData(), ConstructionBase(), ConstructionPart::DamageHandsOnBuild(), ConstructionPart::DamageToolOnBuild(), PlayerConstants::GLOVES_DAMAGE_HAND_CONSTRUCTION, string::Insert(), ActionData::m_MainItem, ActionData::m_Player, ActionData::m_Target, Math::RandomFloat01() и UseMainItem().