123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- class ActionBuildShelter: ActionContinuousBase
- {
- string m_SoundsetBuildStart;
- string m_SoundsetBuildLoop;
- string m_SoundsetBuildFinish;
- ref protected EffectSound m_BuildLoopSound;
-
- void ActionBuildShelter()
- {
- m_CallbackClass = ActionBuildPartCB;
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_2HD;
- m_FullBody = true;
- m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
- m_Text = "#build_shelter_leather";
- }
-
- void ~ActionBuildShelter()
- {
- DestroyActionLoopSound();
- }
-
- override void CreateConditionComponents()
- {
- m_ConditionItem = new CCINone;
- m_ConditionTarget = new CCTCursor;
- }
-
- override string GetText()
- {
- PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
- if ( player )
- {
- ConstructionActionData construction_action_data = player.GetConstructionActionData();
- ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
-
- if ( constrution_part )
- {
- string ret = "";
- switch (constrution_part.GetName())
- {
- case "leather":
- ret = "#build_shelter_leather";
- break;
-
- case "fabric":
- ret = "#build_shelter_fabric";
- break;
-
- case "stick":
- ret = "#build_shelter_stick";
- break;
- }
- }
- }
-
- return ret;
- }
-
- override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
- {
- ConstructionActionData construction_action_data = player.GetConstructionActionData();
- ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
-
- if ( constrution_part )
- {
- switch (constrution_part.GetName())
- {
- case "leather":
- m_Text = "#build_shelter_leather";
- break;
-
- case "fabric":
- m_Text = "#build_shelter_fabric";
- break;
-
- case "stick":
- m_Text = "#build_shelter_stick";
- break;
- }
- }
- }
-
- override bool CanBeUsedLeaning()
- {
- return false;
- }
-
- override typename GetInputType()
- {
- return ContinuousInteractActionInput;
- }
-
- override bool UseMainItem()
- {
- return false;
- }
-
- override bool HasProgress()
- {
- return true;
- }
-
- override bool HasAlternativeInterrupt()
- {
- return false;
- }
-
- override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
- {
- //Action not allowed if player has broken legs
- if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
- return false;
-
- if (target.GetObject() && !target.GetObject().CanUseConstructionBuild())
- return false;
- if ( player.IsPlacingLocal() || player.IsPlacingServer() )
- return false;
-
- if ( (!GetGame().IsDedicatedServer()) )
- {
- if ( MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID ) )
- {
- return true;
- }
- return false;
- }
- return true;
- }
-
- //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 ) )
- {
- if ( !GetGame().IsDedicatedServer() )
- {
- ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
- BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID).GetPartName();
- }
- return true;
- }
-
- return false;
- }
-
- override ActionData CreateActionData()
- {
- BuildPartActionData action_data = new BuildPartActionData;
- return action_data;
- }
-
- 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 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);
-
- return !construction.IsCollidingEx( check_data ) && construction.CanBuildPart( part_name, action_data.m_MainItem, false );
- }
-
- override void OnStart( ActionData action_data )
- {
- super.OnStart(action_data);
- action_data.m_Player.TryHideItemInHands(true);
- }
-
- override void OnStartClient( ActionData action_data )
- {
- super.OnStartClient(action_data);
-
- DetermineConstructionSounds(action_data);
- PlayActionStartSound(action_data);
- }
-
- override void OnStartAnimationLoopClient( ActionData action_data )
- {
- super.OnStartAnimationLoopClient(action_data);
-
- PlayActionLoopSound(action_data);
- }
-
- override void OnEnd( ActionData action_data )
- {
- super.OnEnd(action_data);
- action_data.m_Player.TryHideItemInHands(false);
- }
-
- override void OnEndClient( ActionData action_data )
- {
- super.OnEndClient(action_data);
-
- StopActionLoopSound();
- //DestroyActionLoopSound();
- }
-
- 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;
-
- if ( !construction.IsColliding( part_name ) && construction.CanBuildPart( part_name, action_data.m_MainItem, false ) )
- {
- //build
- construction.BuildPartServer( action_data.m_Player, part_name, AT_BUILD_PART );
- }
- }
-
- override void OnFinishProgressClient( ActionData action_data )
- {
- super.OnFinishProgressClient(action_data);
-
- PlayActionFinishSound(action_data);
- }
-
- void DetermineConstructionSounds( ActionData action_data )
- {
- ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
- ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);;
- if (constrution_part)
- {
- switch (constrution_part.GetName())
- {
- case "leather":
- m_SoundsetBuildStart = "Shelter_Leather_Build_Start_SoundSet";
- m_SoundsetBuildLoop = "Shelter_Leather_Build_Loop_SoundSet";
- m_SoundsetBuildFinish = "Shelter_Leather_Build_Finish_SoundSet";
- break;
-
- case "fabric":
- m_SoundsetBuildStart = "Shelter_Fabric_Build_Start_SoundSet";
- m_SoundsetBuildLoop = "Shelter_Fabric_Build_Loop_SoundSet";
- m_SoundsetBuildFinish = "Shelter_Fabric_Build_Finish_SoundSet";
- break;
-
- case "stick":
- m_SoundsetBuildStart = "Shelter_Wooden_Stick_Build_Start_SoundSet";
- m_SoundsetBuildLoop = "Shelter_Wooden_Stick_Build_Loop_SoundSet";
- m_SoundsetBuildFinish = "Shelter_Wooden_Stick_Build_Finish_SoundSet";
- break;
-
- default:
- m_SoundsetBuildStart = "";
- m_SoundsetBuildLoop = "";
- m_SoundsetBuildFinish = "";
- break;
- }
- }
- }
-
- void PlayActionStartSound( ActionData action_data )
- {
- EffectSound sound = SEffectManager.PlaySound(m_SoundsetBuildStart, action_data.m_Target.GetObject().GetPosition());
- sound.SetAutodestroy( true );
- }
-
- void PlayActionLoopSound( ActionData action_data )
- {
- if ( !m_BuildLoopSound || !m_BuildLoopSound.IsSoundPlaying() )
- {
- m_BuildLoopSound = SEffectManager.PlaySound( m_SoundsetBuildLoop, action_data.m_Target.GetObject().GetPosition(), 0, 0, true );
- }
- }
-
- void StopActionLoopSound()
- {
- if (m_BuildLoopSound)
- {
- m_BuildLoopSound.SetSoundFadeOut(0.5);
- m_BuildLoopSound.SoundStop();
- }
- }
-
- void DestroyActionLoopSound()
- {
- SEffectManager.DestroyEffect( m_BuildLoopSound );
- }
-
- void PlayActionFinishSound( ActionData action_data )
- {
- EffectSound sound = SEffectManager.PlaySound(m_SoundsetBuildFinish, action_data.m_Target.GetObject().GetPosition());
- sound.SetAutodestroy( true );
- }
-
- override string GetSoundCategory(ActionData action_data)
- {
- return "Base_building";
- }
- }
|