123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- class ActionUnrestrainTargetHandsCB : ActionContinuousBaseCB
- {
- const float DEFAULT_STRUGGLE_TIME = 2;
- const float UNRESTRAIN_STRUGGLE_MULTIPLIER = 0.75;//multiplier for the struggle time normally used for the player unrestraining themselves, this allows unrestraining to be bound to the 'StruggleLength' config param
-
- override void CreateActionComponent()
- {
- float time = DEFAULT_STRUGGLE_TIME;
- PlayerBase targetPlayer = PlayerBase.Cast(m_ActionData.m_Target.GetObject());
- EntityAI item_in_hands = targetPlayer.GetItemInHands();
-
- if ( item_in_hands.ConfigIsExisting("StruggleLength") )
- {
- time = item_in_hands.ConfigGetFloat("StruggleLength") * UNRESTRAIN_STRUGGLE_MULTIPLIER;
- }
- #ifdef DEVELOPER
- if ( m_ActionData.m_Player.IsQuickRestrain() )
- {
- time = DEBUG_QUICK_UNRESTRAIN_TIME;
- }
- #endif
-
- m_ActionData.m_ActionComponent = new CAContinuousTime(time);
- }
- };
- class ActionUnrestrainTargetHands: ActionContinuousBase
- {
- void ActionUnrestrainTargetHands()
- {
- m_CallbackClass = ActionUnrestrainTargetHandsCB;
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_RESTRAINTARGET;
- m_FullBody = true;
- m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
- m_Text = "#unrestrain";
- }
-
- override typename GetInputType()
- {
- return ContinuousInteractActionInput;
- }
-
-
-
- override void OnStartServer(ActionData action_data)
- {
- super.OnStartServer(action_data);
-
- action_data.m_Player.TryHideItemInHands(true);
- }
- override void OnEndServer(ActionData action_data)
- {
- super.OnEndServer(action_data);
-
- action_data.m_Player.TryHideItemInHands(false);
- }
-
- override void CreateConditionComponents()
- {
- m_ConditionItem = new CCINone;
- m_ConditionTarget = new CCTObject(UAMaxDistances.DEFAULT);
- }
-
- override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
- {
- PlayerBase targetPlayer = PlayerBase.Cast(target.GetObject());
- return targetPlayer && targetPlayer.IsRestrained();
- }
- override void OnFinishProgressServer( ActionData action_data )
- {
- PlayerBase targetPlayer = PlayerBase.Cast(action_data.m_Target.GetObject());
-
- if (CanReceiveAction(action_data.m_Target) && targetPlayer.IsRestrained())
- {
- EntityAI item_in_hands = targetPlayer.GetItemInHands();
- targetPlayer.SetRestrained(false);
- if (item_in_hands)
- {
- MiscGameplayFunctions.TransformRestrainItem(item_in_hands, null, action_data.m_Player, targetPlayer);
- }
- else
- {
- ErrorEx("Failed to obtain item in target player's hands during empty handed unrestraining");
- }
- }
- }
-
- override void OnStartClient(ActionData action_data)
- {
- action_data.m_Player.TryHideItemInHands(true);
- }
-
- override void OnEndClient( ActionData action_data )
- {
- if ( action_data.m_Player ) action_data.m_Player.TryHideItemInHands(false);
- }
-
- };
|