DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionRestrainTarget.c
См. документацию.
2{
3 const float DEFAULT_RESTRAIN_TIME = 2;
4
5 override void CreateActionComponent()
6 {
7 float time = DEFAULT_RESTRAIN_TIME;
8
9 if ( m_ActionData.m_MainItem.ConfigIsExisting("RestrainTime") )
10 {
11 time = m_ActionData.m_MainItem.ConfigGetFloat("RestrainTime");
12 }
13
14 if ( m_ActionData.m_Player.IsQuickRestrain() )
15 {
17 }
18
19 m_ActionData.m_ActionComponent = new CAContinuousTime(time);
20 }
21};
22
24{
26 {
28 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_RESTRAINTARGET;
29 m_FullBody = true;
30 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
31 m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
32 m_Text = "#restrain";
33 }
34
40
41 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
42 {
43 PlayerBase other_player = PlayerBase.Cast(target.GetObject());
44 if (!other_player)
45 return false;
46 if ( player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER )
47 {
48 return other_player.CanBeRestrained();
49 }
50 else
51 {
52 return !other_player.IsRestrained();
53 }
54
55 }
56
57 override int GetStanceMask(PlayerBase player)
58 {
59 if ( player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_PRONE))
60 return DayZPlayerConstants.STANCEMASK_CROUCH;
61 else
62 return DayZPlayerConstants.STANCEMASK_ERECT;
63 }
64
65 override bool ActionConditionContinue(ActionData action_data)
66 {
67 PlayerBase target_player = PlayerBase.Cast(action_data.m_Target.GetObject());
68
69 if ( GetGame().IsServer() && GetGame().IsMultiplayer() )
70 {
71 if ( target_player.IsSurrendered() || !target_player.CanBeRestrained() )
72 {
73 return false;
74 }
75 }
76 if ( GetGame().IsServer() )
77 {
78 ActionRestrainTargetCB callback = ActionRestrainTargetCB.Cast(action_data.m_Callback);
79
80 if ( callback.GetActionComponentProgress() > 0.75 && !target_player.IsRestrainPrelocked() )
81 {
82 target_player.SetRestrainPrelocked(true);
83 }
84
85 return !GetGame().GetMission().IsPlayerDisconnecting(target_player);
86
87 }
88 return true;
89 }
90
91 override void OnStartServer(ActionData action_data)
92 {
93 super.OnStartServer(action_data);
94
95 PlayerBase target_player = PlayerBase.Cast(action_data.m_Target.GetObject());
96 if ( target_player.IsSurrendered() )
97 {
98 SurrenderDataRestrain sdr = new SurrenderDataRestrain;
99 target_player.EndSurrenderRequest(sdr);
100 }
101 else if ( target_player.IsEmotePlaying() )
102 {
103 target_player.m_EmoteManager.ServerRequestEmoteCancel();
104 }
105
106 target_player.SetRestrainStarted(true);
107 }
108
109 override void OnEndServer(ActionData action_data)
110 {
111 super.OnEndServer(action_data);
112
113 PlayerBase target_player = PlayerBase.Cast(action_data.m_Target.GetObject());
114 if (target_player)
115 {
116 target_player.SetRestrainStarted(false);
117 target_player.SetRestrainPrelocked(false);
118 }
119 }
120
121 override void OnFinishProgressServer( ActionData action_data )
122 {
123 PlayerBase target_player = PlayerBase.Cast(action_data.m_Target.GetObject());
124 PlayerBase source_player = PlayerBase.Cast(action_data.m_Player);
125
126 if (CanReceiveAction(action_data.m_Target) && !target_player.IsRestrained())
127 {
128 EntityAI item_in_hands_target = target_player.GetHumanInventory().GetEntityInHands();
129 EntityAI item_in_hands_source = source_player.GetHumanInventory().GetEntityInHands();
130
131 if ( !item_in_hands_source )
132 {
133 Error("Restraining target failed, nothing in hands");
134 return;
135 }
136
137 string new_item_name = MiscGameplayFunctions.ObtainRestrainItemTargetClassname(item_in_hands_source);
138 if (item_in_hands_target)
139 {
140 ChainedDropAndRestrainLambda lambda2 = new ChainedDropAndRestrainLambda(item_in_hands_target, item_in_hands_target.GetType(), target_player, false, source_player);
141 MiscGameplayFunctions.TurnItemInHandsIntoItemEx(target_player, lambda2);
142 }
143 else
144 {
145 RestrainTargetPlayerLambda lambda = new RestrainTargetPlayerLambda(item_in_hands_source, new_item_name, target_player);
146 source_player.LocalReplaceItemInHandsWithNewElsewhere(lambda);
147 }
148 }
149 }
150
151 override void OnFinishProgressClient( ActionData action_data )
152 {
153 super.OnFinishProgressClient( action_data );
154
156 }
157};
158
160{
163
164 void ChainedDropAndRestrainLambda (EntityAI old_item, string new_item_type, PlayerBase player, bool destroy = false, PlayerBase src_player = null)
165 {
166 m_SourcePlayer = src_player;
167 }
168
169 override void OnSuccess(EntityAI new_item)
170 {
171 super.OnSuccess(new_item);
172
174 {
175 m_PairedExplosive.UnpairRemote();
176 ItemBase ib = ItemBase.Cast(new_item);
177 ib.PairWithDevice(m_PairedExplosive);
178 m_PairedExplosive.Arm();
179 }
180
181 // as soon as previous op is finish, start another one
182 EntityAI item_in_hands_source = m_SourcePlayer.GetHumanInventory().GetEntityInHands();
183 if (item_in_hands_source)
184 {
185 string new_item_name = MiscGameplayFunctions.ObtainRestrainItemTargetClassname(item_in_hands_source);
186 RestrainTargetPlayerLambda lambda = new RestrainTargetPlayerLambda(item_in_hands_source, new_item_name, m_Player);
187 if (m_SourcePlayer)
188 m_SourcePlayer.LocalReplaceItemInHandsWithNewElsewhere(lambda);
189 else
190 Error("ChainedDropAndRestrainLambda: missing source player!");
191 }
192 else
193 {
194 Error("ChainedDropAndRestrainLambda: missing source item in hands!");
195 }
196 }
197
198 override void CopyOldPropertiesToNew (notnull EntityAI old_item, EntityAI new_item)
199 {
200 super.CopyOldPropertiesToNew(old_item, new_item);
201 RemoteDetonatorTrigger trigger = RemoteDetonatorTrigger.Cast(old_item);
202 if (trigger)
204 }
205}
206
207
209{
211
212 void RestrainTargetPlayerLambda (EntityAI old_item, string new_item_type, PlayerBase player)
213 {
214 m_TargetPlayer = player;
215
216 InventoryLocation targetHnd = new InventoryLocation;
217 targetHnd.SetHands(m_TargetPlayer, null);
218 OverrideNewLocation(targetHnd);
219 }
220
221 override void OnSuccess(EntityAI new_item)
222 {
223 super.OnSuccess(new_item);
224
225 m_TargetPlayer.SetRestrained(true);
226 m_TargetPlayer.OnItemInHandsChanged();
227 }
228};
229
230class SurrenderDataRestrain extends SurrenderData
231{
232 override void End()
233 {
234
235 }
236}
ActionBase ActionData
Определения ActionBase.c:30
void RestrainTargetPlayerLambda(EntityAI old_item, string new_item_type, PlayerBase player)
Определения ActionRestrainTarget.c:212
ChainedDropAndRestrainLambda m_TargetPlayer
class ActionTargets ActionTarget
void ExplosivesBase()
Определения ExplosivesBase.c:42
DayZPlayer m_Player
Определения Hand_Events.c:42
float m_SpecialtyWeight
Определения ActionBase.c:77
int m_StanceMask
Определения ActionBase.c:62
string m_Text
Определения ActionBase.c:58
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
bool CanReceiveAction(ActionTarget target)
Определения ActionBase.c:793
bool m_FullBody
Определения ActionBase.c:61
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
float GetActionComponentProgress()
Определения AnimatedActionBase.c:119
ActionData m_ActionData
Определения AnimatedActionBase.c:3
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
override bool ActionConditionContinue(ActionData action_data)
Определения ActionRestrainTarget.c:65
override void OnStartServer(ActionData action_data)
Определения ActionRestrainTarget.c:91
override void OnFinishProgressServer(ActionData action_data)
Определения ActionRestrainTarget.c:121
void ActionRestrainTarget()
Определения ActionRestrainTarget.c:25
override int GetStanceMask(PlayerBase player)
Определения ActionRestrainTarget.c:57
override void CreateConditionComponents()
Определения ActionRestrainTarget.c:35
override void OnEndServer(ActionData action_data)
Определения ActionRestrainTarget.c:109
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionRestrainTarget.c:41
override void OnFinishProgressClient(ActionData action_data)
Определения ActionRestrainTarget.c:151
const float DEFAULT_RESTRAIN_TIME
Определения ActionRestrainTarget.c:3
override void CreateActionComponent()
Определения ActionRestrainTarget.c:5
void OnActionRestrain()
Определения AnalyticsManagerClient.c:61
int m_CommandUID
Определения AnimatedActionBase.c:143
Определения CCINonRuined.c:2
Определения CCTMan.c:2
AnalyticsManagerClient GetAnalyticsClient()
Определения Game.c:1513
proto native Mission GetMission()
void ChainedDropAndRestrainLambda(EntityAI old_item, string new_item_type, PlayerBase player, bool destroy=false, PlayerBase src_player=null)
Определения ActionRestrainTarget.c:164
ExplosivesBase m_PairedExplosive
Определения ActionRestrainTarget.c:162
override void OnSuccess(EntityAI new_item)
Определения ActionRestrainTarget.c:169
PlayerBase m_SourcePlayer
Определения ActionRestrainTarget.c:161
override void CopyOldPropertiesToNew(notnull EntityAI old_item, EntityAI new_item)
Определения ActionRestrainTarget.c:198
void DestroyItemInCorpsesHandsAndCreateNewOnGndLambda(EntityAI old_item, string new_item_type, PlayerBase player, bool destroy=false)
Определения MiscGameplayFunctions.c:1902
Определения Building.c:6
proto native void SetHands(notnull EntityAI parent, EntityAI e)
sets current inventory location type to Hands
InventoryLocation.
Определения InventoryLocation.c:29
Определения InventoryItem.c:731
bool IsPlayerDisconnecting(Man player)
Определения PlayerBaseClient.c:2
EntityAI GetControlledDevice()
Определения RemoteDetonator.c:150
override void End()
Определения ActionRestrainTarget.c:232
Определения EmoteManager.c:1192
override void OnSuccess(EntityAI new_item)
Определения MiscGameplayFunctions.c:93
const float DEFAULT
Определения ActionConstants.c:112
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1068
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
const float DEBUG_QUICK_UNRESTRAIN_TIME
Определения constants.c:645