123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- class BuildPartActionReciveData : ActionReciveData
- {
- string m_PartType;
- }
- class BuildPartActionData : ActionData
- {
- string m_PartType;
- };
- class ActionBuildPartCB : ActionContinuousBaseCB
- {
- override void CreateActionComponent()
- {
- float time = SetCallbackDuration(m_ActionData.m_MainItem);
- m_ActionData.m_ActionComponent = new CAContinuousTime(time);
- }
-
- float SetCallbackDuration(ItemBase item)
- {
- return UATimeSpent.BASEBUILDING_CONSTRUCT_MEDIUM;
- }
- };
- class ActionBuildPart: ActionContinuousBase
- {
- void ActionBuildPart()
- {
- m_CallbackClass = ActionBuildPartCB;
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
- m_FullBody = true;
- m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
-
- m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_HIGH;
- m_Text = "#build";
- }
-
- override void CreateConditionComponents()
- {
- m_ConditionItem = new CCINonRuined;
- m_ConditionTarget = new CCTNone;
- }
-
- override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
- {
- ConstructionActionData construction_action_data = player.GetConstructionActionData();
- ConstructionPart constrution_part = construction_action_data.GetBuildPartAtIndex(m_VariantID);
-
- if (constrution_part)
- {
- m_Text = "#build " + constrution_part.GetName();
- }
- }
-
- override bool CanBeUsedLeaning()
- {
- return false;
- }
-
- override bool CanBeUsedInFreelook()
- {
- return false;
- }
-
- override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
- {
- if (player.IsPlacingLocal() || player.IsPlacingServer())
- return false;
-
- //Action not allowed if player has broken legs
- if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
- return false;
-
- //gate..
- if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
- return false;
-
- if ((!GetGame().IsDedicatedServer()))
- {
- if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
- {
- return true;
- }
- return false;
- }
- return true;
- }
-
- override bool ActionConditionContinue(ActionData action_data)
- {
- BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
- Construction construction = base_building.GetConstruction();
- string part_name = BuildPartActionData.Cast(action_data).m_PartType;
- CollisionCheckData check_data = new CollisionCheckData;
-
- check_data.m_PartName = part_name;
- check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
-
- bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
- if (GetGame().IsServer())
- {
- bool collides = construction.IsCollidingEx(check_data);
-
- return !collides && canBuild;
- }
- else
- {
- return canBuild;
- }
- }
-
- override void OnFinishProgressServer(ActionData action_data)
- {
- BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
- Construction construction = base_building.GetConstruction();
-
- string part_name = BuildPartActionData.Cast(action_data).m_PartType;
- CollisionCheckData check_data = new CollisionCheckData;
-
- check_data.m_PartName = part_name;
- check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
-
- if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
- {
- //build
- construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
- //add damage to tool
- action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
- }
- }
-
- override string GetSoundCategory(ActionData action_data)
- {
- return "Base_building";
- }
-
- override ActionData CreateActionData()
- {
- BuildPartActionData action_data = new BuildPartActionData;
- return action_data;
- }
-
- //setup
- override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
- {
- if (super.SetupAction(player, target, item, action_data, extra_data))
- {
- SetBuildingAnimation(item);
-
- if (!GetGame().IsDedicatedServer())
- {
- ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
- BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
- }
- return true;
- }
-
- return false;
- }
-
- protected void SetBuildingAnimation(ItemBase item)
- {
- switch (item.Type())
- {
- case Pickaxe:
- case Shovel:
- case FarmingHoe:
- case FieldShovel:
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
- break;
- case Pliers:
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
- break;
- case SledgeHammer:
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
- break;
- default:
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
- break;
- }
- }
-
- override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
- {
- super.WriteToContext(ctx, action_data);
-
- ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
- }
-
- override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
- {
- action_recive_data = new BuildPartActionReciveData;
- super.ReadFromContext(ctx, action_recive_data);
-
- string part_type;
- if (ctx.Read(part_type))
- {
- BuildPartActionReciveData.Cast(action_recive_data).m_PartType = part_type;
- return true;
- }
- else
- {
- return false;
- }
- }
-
- override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
- {
- super.HandleReciveData(action_recive_data, action_data);
-
- BuildPartActionData.Cast(action_data).m_PartType = BuildPartActionReciveData.Cast(action_recive_data).m_PartType;
- }
-
- override string GetAdminLogMessage(ActionData action_data)
- {
- ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
- string partName = BuildPartActionData.Cast(action_data).m_PartType;
-
- string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
- return message;
- }
- }
- class ActionActionBuildPartNoTool: ActionBuildPart
- {
- override typename GetInputType()
- {
- return ContinuousInteractActionInput;
- }
-
- override bool UseMainItem()
- {
- return false;
- }
-
- override bool HasProgress()
- {
- return true;
- }
-
- override bool HasAlternativeInterrupt()
- {
- return false;
- }
- }
|