DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
HandAnimated_Guards.c
Go to the documentation of this file.
1int SlotToAnimType(notnull Man player, notnull InventoryLocation src, InventoryLocation dst = null)
2{
3 //Print("src.GetType() " + src.GetType());
5 //InventoryLocation invloc2 = new InventoryLocation;
6
7 if ( (dst && dst.GetParent() && !dst.GetParent().GetHierarchyRootPlayer()) || (src && src.GetParent() && !src.GetParent().GetHierarchyRootPlayer()) )
8 return -1;
9
10 if (dst && (dst.GetType() == InventoryLocationType.ATTACHMENT || dst.GetType() == InventoryLocationType.CARGO))
11 {
12 invloc1.Copy(dst);
13 //invloc2.Copy(src);
14 }
15 else if (src.GetType() == InventoryLocationType.ATTACHMENT || src.GetType() == InventoryLocationType.CARGO)
16 {
17 invloc1.Copy(src);
18 //invloc2.Copy(dst);
19 }
20 else
21 {
22 return -1;
23 }
24
25 int val = -1;
26 if ( invloc1.GetItem() && invloc1.GetItem().GetInventoryHandAnimation(invloc1,val) )
27 {
28 return val;
29 }
30
31 if (invloc1.GetType() == InventoryLocationType.ATTACHMENT /*|| src.GetType() == InventoryLocationType.HANDS*/)
32 {
33 //return WeaponHideShowTypes.HIDESHOW_SLOT_KNIFEBACK;
34 switch (invloc1.GetSlot())
35 {
36 case InventorySlots.SHOULDER:
37 {
38 if (invloc1.GetItem() && invloc1.GetItem().IsWeapon())
39 {
40 return WeaponHideShowTypes.HIDESHOW_SLOT_RFLLEFTBACK;
41 }
42 else if (invloc1.GetItem() && invloc1.GetItem().IsOneHandedBehaviour())
43 {
44 return WeaponHideShowTypes.HIDESHOW_SLOT_1HDLEFTBACK;
45 }
46 return WeaponHideShowTypes.HIDESHOW_SLOT_2HDLEFTBACK;
47 }
48 case InventorySlots.MELEE:
49 {
50 if (invloc1.GetItem() && invloc1.GetItem().IsWeapon())
51 {
52 return WeaponHideShowTypes.HIDESHOW_SLOT_RFLRIGHTBACK;
53 }
54 else if (invloc1.GetItem() && invloc1.GetItem().IsOneHandedBehaviour())
55 {
56 return WeaponHideShowTypes.HIDESHOW_SLOT_1HDRIGHTBACK;
57 }
58 return WeaponHideShowTypes.HIDESHOW_SLOT_2HDRIGHTBACK;
59 }
60 case InventorySlots.PISTOL:
61 {
62 EntityAI parent_item = invloc1.GetParent(); // belt
63 Man owner;
64 if (parent_item)
65 owner = parent_item.GetHierarchyRootPlayer(); // player
66 if (!owner)
67 return -1;
68
69 EntityAI item1 = owner.GetInventory().FindAttachment(InventorySlots.HIPS);
70 EntityAI item2 = parent_item.GetHierarchyParent();
71 if (owner && item1 == item2) // is the pistol in a belt holster?
72 {
73 return WeaponHideShowTypes.HIDESHOW_SLOT_PISTOLBELT;
74 }
75 return WeaponHideShowTypes.HIDESHOW_SLOT_PISTOLCHEST;
76 }
77 case InventorySlots.KNIFE:
78 return WeaponHideShowTypes.HIDESHOW_SLOT_KNIFEBACK;
79
80 /*case InventorySlots.VEST:
81 case InventorySlots.FEET:
82 case InventorySlots.BODY:
83 case InventorySlots.LEGS:
84 case InventorySlots.BACK:
85 case InventorySlots.HIPS:
86 case InventorySlots.HEADGEAR:
87 return WeaponHideShowTypes.HIDESHOW_SLOT_INVENTORY;*/
88
89 default:
90 return WeaponHideShowTypes.HIDESHOW_SLOT_INVENTORY;
91 //Print("[hndfsm] SlotToAnimType - not animated slot in src_loc=" + InventoryLocation.DumpToStringNullSafe(invloc1));
92 };
93 //
94 //if (InventorySlots.GetSlotIdFromString("Pistol"))
95 }
96 else if (invloc1.GetType() == InventoryLocationType.CARGO)
97 {
98 if ( invloc1.GetItem() && (invloc1.GetItem().GetInventory().HasInventorySlot(InventorySlots.SHOULDER) || invloc1.GetItem().GetInventory().HasInventorySlot(InventorySlots.MELEE)) )
99 {
100 //Print("Special inventory anim");
101 if (invloc1.GetItem() && invloc1.GetItem().IsWeapon())
102 {
103 return WeaponHideShowTypes.HIDESHOW_SLOT_RFLRIGHTBACK;
104 }
105 else if (invloc1.GetItem() && invloc1.GetItem().IsOneHandedBehaviour())
106 {
107 return WeaponHideShowTypes.HIDESHOW_SLOT_1HDRIGHTBACK;
108 }
109 return WeaponHideShowTypes.HIDESHOW_SLOT_2HDRIGHTBACK;
110 }
111 //Print("Default inventory anim");
112 return WeaponHideShowTypes.HIDESHOW_SLOT_INVENTORY; //default item animation
113 }
114 return -1;
115}
116
117bool SelectAnimationOfTakeToHands(notnull Man player, notnull InventoryLocation src, notnull InventoryLocation dst, out int animType)
118{
119 if (player.IsInTransport())
120 return false;
121 if (src.GetType() == InventoryLocationType.GROUND)
122 return false;
123
124 if (src.GetItem().GetHierarchyRootPlayer() == player)
125 {
126 animType = SlotToAnimType(player, src);
127 if (animType != -1)
128 {
129 hndDebugPrint("[hndfsm] SelectAnimationOfTakeToHands - selected animType=" + animType + " for item=" + src.GetItem());
130 return true;
131 }
132 }
133 hndDebugPrint("[hndfsm] SelectAnimationOfTakeToHands - no animation");
134 return false;
135}
136
137bool SelectAnimationOfMoveFromHands(notnull Man player, notnull InventoryLocation src, notnull InventoryLocation dst, out int animType)
138{
139 if (player.IsInTransport())
140 return false;
141
142 if (src.GetItem().GetHierarchyRootPlayer() == player)
143 {
144 animType = SlotToAnimType(player, dst);
145 if (animType != -1)
146 {
147 hndDebugPrint("[hndfsm] SelectAnimationOfMoveFromHands guard - selected animType=" + animType + " for item=" + src.GetItem());
148 return true;
149 }
150 }
151 hndDebugPrint("[hndfsm] SelectAnimationOfMoveFromHands - no animation");
152 return false;
153}
154
155bool SelectAnimationOfForceSwapInHands(notnull Man player, notnull InventoryLocation old_src, notnull InventoryLocation new_src, notnull InventoryLocation old_dst, notnull InventoryLocation new_dst, out int animType1, out int animType2)
156{
157 if (player.IsInTransport())
158 return false;
159
160 hndDebugPrint("[hndfsm] SlotToAnimType - old_src=" + InventoryLocation.DumpToStringNullSafe(old_src) + " new_src=" + InventoryLocation.DumpToStringNullSafe(new_src) + " old_dst=" + InventoryLocation.DumpToStringNullSafe(old_dst) + " new_dst=" + InventoryLocation.DumpToStringNullSafe(new_dst));
161
162 if (old_src.GetItem().GetHierarchyRootPlayer() == player || new_src.GetItem().GetHierarchyRootPlayer() == player)
163 {
164 animType1 = SlotToAnimType(player, old_src, old_dst);
165 animType2 = SlotToAnimType(player, new_src, new_dst);
166 //Print("animType1 = " + animType1);
167 //Print("animType2 = " + animType2);
168 if (animType1 != -1 && animType2 != -1)
169 {
170 hndDebugPrint("[hndfsm] SelectAnimationOfForceSwapInHands guard - selected animType1=" + animType1 + " animType2=" + animType2 + " for old_item=" + old_src.GetItem() + " for new_item=" + new_src.GetItem());
171 return true;
172 }
173 /*else if (animType1 != -1 || animType2 != -1) //HACK
174 {
175 animType1 = -1;
176 animType2 = -1;
177 return false;
178 }*/
179 }
180 hndDebugPrint("[hndfsm] SelectAnimationOfForceSwapInHands - no animation");
181 return false;
182}
183
184
185class HandSelectAnimationOfTakeToHandsEvent extends HandGuardBase
186{
188
190 {
191 int animType = -1;
192 if (SelectAnimationOfTakeToHands(e.m_Player, e.GetSrc(), e.GetDst(), animType))
193 {
194 e.m_AnimationID = animType;
195 return true;
196 }
197 return false;
198 }
199};
200
201class HandSelectAnimationOfMoveFromHandsEvent extends HandGuardBase
202{
203 protected Man m_Player;
204
206 {
207 m_Player = p;
208 }
209
211 {
212 EntityAI eai = m_Player.GetHumanInventory().GetEntityInHands();
213 if (eai)
214 {
216 if (eai.GetInventory().GetCurrentInventoryLocation(src))
217 {
219 {
220 hndDebugPrint("[hndfsm] HandSelectAnimationOfMoveFromHandsEvent - rejected");
221 return false;
222 }
223
224 int animType = -1;
225 if (SelectAnimationOfMoveFromHands(e.m_Player, src, e.GetDst(), animType))
226 {
227 e.m_AnimationID = animType;
228 return true;
229 }
230 return false;
231 }
232 }
233 return false;
234 }
235};
236
238{
239 protected Man m_Player;
240
242
243 bool ProcessSwapEvent(notnull HandEventBase e, out int animType1, out int animType2)
244 {
245 HandEventSwap es = HandEventSwap.Cast(e);
246 if (es)
247 return SelectAnimationOfForceSwapInHands(e.m_Player, es.m_Src, es.m_Src2, es.m_Dst, es.m_Dst2, animType1, animType2);
248 Error("HandSelectAnimationOfForceSwapInHandsEvent - not an swap event");
249 return false;
250 }
251
253 {
254 HandEventForceSwap es = HandEventForceSwap.Cast(e);
255 if (es)
256 {
257 hndDebugPrint("[hndfsm] HandSelectAnimationOfForceSwapInHandsEvent FSwap e=" + e.DumpToString());
258
259 if ( !es.m_Src2.IsValid() || !es.m_Src.IsValid() )
260 {
261 Error("[hndfsm] HandSelectAnimationOfForceSwapInHandsEvent - invalid item source");
262 return false;
263 }
264
265 bool allow = false;
266 if (GameInventory.CanSwapEntitiesEx(es.GetSrc().GetItem(), es.m_Src2.GetItem()))
267 allow = true; // allow if ordinary swap
268 else if (es.m_Dst2)
269 {
270 if (!GameInventory.CanForceSwapEntitiesEx(es.GetSrc().GetItem(), es.m_Dst, es.m_Src2.GetItem(), es.m_Dst2))
271 {
272 Error("[hndfsm] HandSelectAnimationOfForceSwapInHandsEvent - no room at dst=" + InventoryLocation.DumpToStringNullSafe(es.m_Dst2));
273 }
274 else
275 {
276 allow = true;
277 }
278 }
279
280 if (allow)
281 {
282 int animType1 = -1;
283 int animType2 = -1;
284 if (ProcessSwapEvent(e, animType1, animType2))
285 {
286 e.m_AnimationID = animType1;
287 es.m_Animation2ID = animType2;
288 return true;
289 }
290 }
291 else
292 Error("[hndfsm] HandSelectAnimationOfForceSwapInHandsEvent - m_HasRoomGuard.GuardCondition failed");
293 }
294 else
295 Error("[hndfsm] HandSelectAnimationOfForceSwapInHandsEvent - not a swap event");
296 return false;
297 }
298};
299
300class HandSelectAnimationOfSwapInHandsEvent extends HandSelectAnimationOfForceSwapInHandsEvent
301{
303 {
304 HandEventSwap es = HandEventSwap.Cast(e);
305 if (es)
306 {
307 int animType1 = -1;
308 int animType2 = -1;
309 if (ProcessSwapEvent(e, animType1, animType2))
310 {
311 e.m_AnimationID = animType1;
312 es.m_Animation2ID = animType2;
313 return true;
314 }
315 }
316 else
317 Error("[hndfsm] HandSelectAnimationOfSwapInHandsEvent - not a swap event");
318 return false;
319 }
320};
321
DayZPlayer m_Player
Definition Hand_Events.c:42
bool SelectAnimationOfMoveFromHands(notnull Man player, notnull InventoryLocation src, notnull InventoryLocation dst, out int animType)
int SlotToAnimType(notnull Man player, notnull InventoryLocation src, InventoryLocation dst=null)
bool SelectAnimationOfTakeToHands(notnull Man player, notnull InventoryLocation src, notnull InventoryLocation dst, out int animType)
bool SelectAnimationOfForceSwapInHands(notnull Man player, notnull InventoryLocation old_src, notnull InventoryLocation new_src, notnull InventoryLocation old_dst, notnull InventoryLocation new_dst, out int animType1, out int animType2)
void hndDebugPrint(string s)
Definition HandFSM.c:1
InventoryLocationType
types of Inventory Location
script counterpart to engine's class Inventory
Definition Inventory.c:77
static bool CanForceSwapEntitiesEx(notnull EntityAI item1, InventoryLocation item1_dst, notnull EntityAI item2, out InventoryLocation item2_dst)
Definition Inventory.c:638
static bool CanSwapEntitiesEx(notnull EntityAI item1, notnull EntityAI item2)
Definition Inventory.c:601
static proto native bool LocationCanMoveEntity(notnull InventoryLocation src, notnull InventoryLocation dst)
queries if the entity contained in inv_loc.m_item can be moved to another location This is a shorthan...
Abstracted event, not to be used, only inherited.
int m_Animation2ID
destination for old item that was in hands
override string DumpToString()
override InventoryLocation GetDst()
override bool GuardCondition(HandEventBase e)
void HandSelectAnimationOfMoveFromHandsEvent(Man p=null)
void HandSelectAnimationOfTakeToHandsEvent(Man p=null)
protected Man m_Player
Definition Hand_Guards.c:82
void HandSelectAnimationOfForceSwapInHandsEvent(Man p=NULL)
bool ProcessSwapEvent(notnull HandEventBase e, out int animType1, out int animType2)
override bool GuardCondition(HandEventBase e)
InventoryLocation.
proto native int GetType()
returns type of InventoryLocation
proto native InventoryLocation Copy(notnull InventoryLocation rhs)
copies location data to another location
proto native EntityAI GetParent()
returns parent of current inventory location
proto native EntityAI GetItem()
returns item of current inventory location
proto native int GetSlot()
returns slot id if current type is Attachment
static string DumpToStringNullSafe(InventoryLocation loc)
provides access to slot configuration
void Error(string err)
Messagebox with error message.
Definition EnDebug.c:90
WeaponHideShowTypes
Definition human.c:912