DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Watchtower.c
См. документацию.
1class Watchtower extends BaseBuildingBase
2{
3 typename ATTACHMENT_BARBED_WIRE = BarbedWire;
4 typename ATTACHMENT_CAMONET = CamoNet;
5
6 const float MAX_FLOOR_VERTICAL_DISTANCE = 0.5;
7
8 const float MIN_ACTION_DETECTION_ANGLE_RAD = 0.35; //0.35 RAD = 20 DEG
9 const float MAX_ACTION_DETECTION_DISTANCE = 2.0; //meters
10
11 static const string BASE_VIEW_NAME = "level_";
12 static const string BASE_WALL_NAME = "_wall_";
13 static const string BASE_ROOF_NAME = "_roof";
14 static const int MAX_WATCHTOWER_FLOORS = 3;
15 static const int MAX_WATCHTOWER_WALLS = 3;
16
18 {
19 }
20
21 override bool IsActionTargetVisible()
22 {
23 return true;
24 }
25
26 override string GetConstructionKitType()
27 {
28 return "WatchtowerKit";
29 }
30
31 override int GetMeleeTargetType()
32 {
33 return EMeleeTargetType.NONALIGNABLE;
34 }
35
36 /*override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
37 {
38 super.EEHitBy(damageResult, damageType, source, component, dmgZone, ammo, modelPos, speedCoef);
39
40 if (component == -1)
41 {
42 Print("EEHitBy: " + this + "; damageType: "+ damageType +"; source: "+ source +"; component: "+ component +"; dmgZone: "+ dmgZone +"; ammo: "+ ammo +"; modelPos: "+ modelPos);
43 Print("GetDamage " + damageResult.GetDamage("","Health"));
44 Print("GetHighestDamage " + damageResult.GetHighestDamage("Health"));
45 }
46 }*/
47
48 //overriden for the express purpose of handling view geometry (interaction) animations
49 override void UpdateVisuals()
50 {
51 super.UpdateVisuals();
52
53 SetAnimationPhase( "level_1", 0); //always visible
54 SetAnimationPhase( "level_1_wall_1", 0); //always visible
55 SetAnimationPhase( "level_1_wall_2", 0); //always visible
56 SetAnimationPhase( "level_1_wall_3", 0); //always visible
57
58 string part_name = "";
59 bool built = false;
60
61 for ( int i = 1; i < MAX_WATCHTOWER_FLOORS; ++i )
62 {
63 //roof checks
64 part_name = "" + BASE_VIEW_NAME + i + BASE_ROOF_NAME;
65 built = GetConstruction().IsPartConstructed(part_name);
66 //Print(part_name);
67 //Print(built);
68
69 //string tmp = "";
70
71 if ( built )
72 {
73 SetAnimationPhase( BASE_VIEW_NAME + (i + 1), 0); //show
74 for ( int j = 1; j < MAX_WATCHTOWER_WALLS + 1; ++j )
75 {
76 //tmp = BASE_VIEW_NAME + (i + 1) + BASE_WALL_NAME + j;
77 //Print(tmp);
78 SetAnimationPhase( BASE_VIEW_NAME + (i + 1) + BASE_WALL_NAME + j, 0); //show
79 }
80 }
81 else
82 {
83 SetAnimationPhase( BASE_VIEW_NAME + (i + 1), 1 ); //hide
84 for ( j = 1; j < MAX_WATCHTOWER_WALLS + 1; ++j )
85 {
86 //tmp = BASE_VIEW_NAME + (i + 1) + BASE_WALL_NAME + j;
87 //Print(tmp);
88 SetAnimationPhase( BASE_VIEW_NAME + (i + 1) + BASE_WALL_NAME + j, 1); //hide
89 }
90 }
91 }
92 }
93
94 //--- ATTACHMENT & CONDITIONS
95 override bool CanReceiveAttachment( EntityAI attachment, int slotId )
96 {
97 if ( !super.CanReceiveAttachment( attachment, slotId ) )
98 return false;
99
100 //because CanReceiveAttachment() method can be called on all clients in the vicinity, vertical distance check needs to be skipped on clients that don't
101 //interact with the object through attach action (AT_ATTACH_TO_CONSTRUCTION)
102 PlayerBase player;
103 if ( !g_Game.IsDedicatedServer() )
104 {
105 //check action initiator (AT_ATTACH_TO_CONSTRUCTION)
106 player = PlayerBase.Cast( g_Game.GetPlayer() );
107 if ( player )
108 {
109 ConstructionActionData construction_action_data = player.GetConstructionActionData();
110 PlayerBase action_initiator = construction_action_data.GetActionInitiator();
111
112 if ( action_initiator == player )
113 {
114 construction_action_data.SetActionInitiator( NULL ); //reset action initiator
115 }
116 else
117 {
118 player = null; //do not do vertical check (next)
119 }
120 }
121 }
122 //
123
124 return CheckSlotVerticalDistance( slotId, player );
125 }
126
127 //can put into hands
128 override bool CanPutIntoHands( EntityAI parent )
129 {
130 return false;
131 }
132
134 {
135 return true;
136 }
137
138 override bool PerformRoofCheckForBase( string partName, PlayerBase player, out bool result )
139 {
141 return false;
142
143 if (partName != "level_1_base" && partName != "level_2_base" && partName != "level_3_base" && partName != "level_3_roof")
144 {
145 return false;
146 }
147
148 vector center;
150 vector edge_length;
151 vector min_max[2];
152 ref array<Object> excluded_objects = new array<Object>;
153 ref array<Object> collided_objects = new array<Object>;
154
155 excluded_objects.Insert( this );
156 excluded_objects.Insert( player );
157
158 if ( partName == "level_2_base" )
159 {
160 min_max[0] = GetMemoryPointPos( "level_2_wall_1_down_min" );
161 min_max[1] = GetMemoryPointPos( "level_2_roof_max" );
162 }
163 else if ( partName == "level_3_base" )
164 {
165 min_max[0] = GetMemoryPointPos( "level_3_wall_1_down_min" );
166 min_max[1] = GetMemoryPointPos( "level_3_wall_2_up_max" );
167 }
168 else if ( partName == "level_3_roof" )
169 {
170 min_max[0] = GetMemoryPointPos( "level_3_roof_min" );
171 min_max[1] = GetMemoryPointPos( "level_3_roof_max" );
172 }
173 else
174 {
175 //min_max[0] = GetMemoryPointPos( "level_1_wall_1_up_min" );
176 //min_max[0] = GetMemoryPointPos( "level_1_wall_1_down_min" );
177 min_max[0] = GetMemoryPointPos( "level_1_collisioncheck_min" );
178 min_max[1] = GetMemoryPointPos( "level_1_roof_max" );
179 }
180 center = GetPosition();
181 center[1] = center[1] + ( min_max[1][1] + min_max[0][1] ) / 2;
182
183 edge_length[0] = min_max[1][0] - min_max[0][0];
184 edge_length[2] = min_max[1][2] - min_max[0][2];
185 edge_length[1] = min_max[1][1] - min_max[0][1];
186
187 result = false;
188 /*result = */g_Game.IsBoxCollidingGeometry( center, orientation, edge_length, ObjIntersectView, ObjIntersectGeom, excluded_objects, collided_objects );
189 if ( collided_objects.Count() > 0 )
190 {
191 foreach ( Object o : collided_objects )
192 {
193 if (Building.Cast(o))
194 {
195 result = true;
196 }
197 }
198 }
199 return true;
200 }
201
202 // --- INVENTORY
203 override bool CanDisplayAttachmentSlot( int slot_id )
204 {
205 //super
206 if ( !super.CanDisplayAttachmentSlot( slot_id ) )
207 return false;
208
209 string slot_name = InventorySlots.GetSlotName(slot_id);
210 slot_name.ToLower();
211 PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
212 //base attachments
213 if ( slot_name.Contains( "material_l1" ) || slot_name.Contains( "level_1_" ) )
214 {
215 if ( slot_name.Contains( "woodenlogs" ) )
216 {
218 }
219 else
220 {
221 return GetConstruction().IsPartConstructed( "level_1_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_1", player );
222 }
223 }
224 else if ( slot_name.Contains( "material_l2" ) || slot_name.Contains( "level_2_" ) )
225 {
226 if ( slot_name.Contains( "woodenlogs" ) )
227 {
229 }
230 else
231 {
232 return GetConstruction().IsPartConstructed( "level_2_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_2", player );
233 }
234 }
235 else if ( slot_name.Contains( "material_l3" ) || slot_name.Contains( "level_3_" ) )
236 {
237 if ( slot_name.Contains( "woodenlogs" ) )
238 {
240 }
241 else
242 {
243 return GetConstruction().IsPartConstructed( "level_3_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_3", player );
244 }
245 }
246
247 return true;
248 }
249
250 override bool CanDisplayAttachmentCategory( string category_name )
251 {
252 //super
253 if ( !super.CanDisplayAttachmentCategory( category_name ) )
254 return false;
255 //
256
257 category_name.ToLower();
258 PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
259 //level 1
260 if ( category_name.Contains( "level_1" ) )
261 {
262 if ( category_name.Contains( "level_1_" ) )
263 {
264 return GetConstruction().IsPartConstructed( "level_1_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_1", player );
265 }
266 else
267 {
269 }
270 }
271 //level 2
272 if ( category_name.Contains( "level_2" ) )
273 {
274 if ( category_name.Contains( "level_2_" ) )
275 {
276 return GetConstruction().IsPartConstructed( "level_2_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_2", player );
277 }
278 else
279 {
280 return GetConstruction().IsPartConstructed( "level_1_roof" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_2", player );
281 }
282 }
283 //level 3
284 if ( category_name.Contains( "level_3" ) )
285 {
286 if ( category_name.Contains( "level_3_" ) )
287 {
288 return GetConstruction().IsPartConstructed( "level_3_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_3", player );
289 }
290 else
291 {
292 return GetConstruction().IsPartConstructed( "level_2_roof" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_3", player );
293 }
294 }
295
296 return true;
297 }
298
299 //returns true if attachment slot position is within given range
300 override bool CheckSlotVerticalDistance( int slot_id, PlayerBase player )
301 {
302 string slot_name;
303 InventorySlots.GetSelectionForSlotId( slot_id , slot_name );
304 slot_name.ToLower();
305
306 //wall attachments
307 //level 1
308 if ( slot_name.Contains( "material_l1" ) || slot_name.Contains( "level_1_" ) )
309 {
310 if ( slot_name.Contains( "woodenlogs" ) )
311 {
313 }
314 else
315 {
316 return GetConstruction().IsPartConstructed( "level_1_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_1", player );
317 }
318 }
319 //level 2
320 if ( slot_name.Contains( "material_l2" ) || slot_name.Contains( "level_2_" ) )
321 {
322 if ( slot_name.Contains( "material_l2w" ) || slot_name.Contains( "level_2_wall" ) )
323 {
324 return GetConstruction().IsPartConstructed( "level_2_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_2", player );
325 }
326 else
327 {
328 if ( slot_name.Contains( "woodenlogs" ) )
329 {
331 }
332 else
333 {
334 return GetConstruction().IsPartConstructed( "level_1_roof" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_2", player );
335 }
336 }
337 }
338 //level 3
339 if ( slot_name.Contains( "material_l3" ) || slot_name.Contains( "level_3_" ) )
340 {
341 if ( slot_name.Contains( "material_l3w" ) || slot_name.Contains( "level_3_wall" ) )
342 {
343 return GetConstruction().IsPartConstructed( "level_3_base" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_3", player );
344 }
345 else
346 {
347 if ( slot_name.Contains( "woodenlogs" ) )
348 {
350 }
351 else
352 {
353 return GetConstruction().IsPartConstructed( "level_2_roof" ) && CheckMemoryPointVerticalDistance( MAX_FLOOR_VERTICAL_DISTANCE, "level_3", player );
354 }
355 }
356 }
357
358 return true;
359 }
360
361 //returns true if player->mem_point position is within given range
362 override bool CheckMemoryPointVerticalDistance( float max_dist, string selection, PlayerBase player )
363 {
364 if ( player )
365 {
366 //check vertical distance
367 vector player_pos = player.GetPosition();
368 vector pos;
369
370 if ( MemoryPointExists( selection ) )
371 {
372 pos = ModelToWorld( GetMemoryPointPos( selection ) );
373 }
374
375 if ( Math.AbsFloat( player_pos[1] - pos[1] ) <= max_dist )
376 {
377 return true;
378 }
379 else
380 {
381 return false;
382 }
383 }
384
385 return true;
386 }
387
388 override bool CheckLevelVerticalDistance( float max_dist, string selection, PlayerBase player )
389 {
390 if ( player )
391 {
392 if ( selection.Contains( "level_1_" ) )
393 return CheckMemoryPointVerticalDistance( max_dist, "level_1", player );
394
395 if ( selection.Contains( "level_2_" ) )
396 return CheckMemoryPointVerticalDistance( max_dist, "level_2", player );
397
398 if ( selection.Contains( "level_3_" ) )
399 return CheckMemoryPointVerticalDistance( max_dist, "level_3", player );
400 }
401 return false;
402 }
403 // ---
404 override void AfterStoreLoad()
405 {
406 super.AfterStoreLoad();
407
409 }
410
411 override void OnPartBuiltServer( notnull Man player, string part_name, int action_id )
412 {
413 super.OnPartBuiltServer( player, part_name, action_id );
414 //update visuals (server)
416 }
417
418 override void OnPartDismantledServer( notnull Man player, string part_name, int action_id )
419 {
420 super.OnPartDismantledServer( player, part_name, action_id );
421 //update visuals (server)
423 }
424
425 override void OnPartDestroyedServer( Man player, string part_name, int action_id, bool destroyed_by_connected_part = false )
426 {
427 super.OnPartDestroyedServer( player, part_name, action_id );
428 //update visuals (server)
430 }
431
432 //--- ACTION CONDITIONS
433 //returns dot product of player->construction direction based on existing/non-existing reference point
434 override bool IsFacingPlayer( PlayerBase player, string selection )
435 {
436 vector ref_pos;
437 vector ref_dir;
438 vector player_dir;
439 float dot;
440 bool has_memory_point = MemoryPointExists( selection );
441
442 if ( has_memory_point )
443 {
444 ref_pos = ModelToWorld( GetMemoryPointPos( selection ) );
445 ref_dir = ref_pos - GetPosition();
446 }
447 else
448 {
449 ref_pos = GetPosition();
450 ref_dir = ref_pos - player.GetPosition();
451 }
452
453 ref_dir.Normalize();
454 ref_dir[1] = 0; //ignore height
455
456 player_dir = player.GetDirection();
457 player_dir.Normalize();
458 player_dir[1] = 0; //ignore height
459
460 if ( ref_dir.Length() != 0 )
461 {
462 dot = vector.Dot( player_dir, ref_dir );
463 }
464
465 if ( has_memory_point )
466 {
467 if ( dot < 0 && Math.AbsFloat( dot ) > MIN_ACTION_DETECTION_ANGLE_RAD )
468 {
469 return true;
470 }
471 }
472 else
473 {
474 if ( dot > 0 && Math.AbsFloat( dot ) > MIN_ACTION_DETECTION_ANGLE_RAD )
475 {
476 return true;
477 }
478 }
479
480 return false;
481 }
482
483 override bool IsFacingCamera( string selection )
484 {
485 vector ref_pos;
486 vector ref_dir;
487 vector cam_dir = g_Game.GetCurrentCameraDirection();
488
489 if ( MemoryPointExists( selection ) )
490 {
491 ref_pos = ModelToWorld( GetMemoryPointPos( selection ) );
492 ref_dir = ref_pos - GetPosition();
493
494 ref_dir.Normalize();
495 ref_dir[1] = 0; //ignore height
496
497 cam_dir[1] = 0; //ignore height
498
499 if ( ref_dir.Length() > 0.5 ) //if the distance (m) is too low, ignore this check
500 {
501 float dot = vector.Dot( cam_dir, ref_dir );
502
503 if ( dot < 0 )
504 {
505 return true;
506 }
507 }
508 }
509
510 return false;
511 }
512
513 override bool IsPlayerInside( PlayerBase player, string selection )
514 {
515 if ( selection != "")
516 {
518 }
519 vector player_pos = player.GetPosition();
520 vector tower_pos = GetPosition();
521 vector ref_dir = GetDirection();
522 ref_dir[1] = 0;
523 ref_dir.Normalize();
524
525 vector min,max;
526
527 min = -GetMemoryPointPos( "interact_min" );
528 max = -GetMemoryPointPos( "interact_max" );
529
530 vector dir_to_tower = tower_pos - player_pos;
531 dir_to_tower[1] = 0;
532 float len = dir_to_tower.Length();
533
534
535 dir_to_tower.Normalize();
536
537 vector ref_dir_angle = ref_dir.VectorToAngles();
538 vector dir_to_tower_angle = dir_to_tower.VectorToAngles();
539 vector test_angles = dir_to_tower_angle - ref_dir_angle;
540
541 vector test_position = test_angles.AnglesToVector() * len;
542
543 if (test_position[0] > max[0] || test_position[0] < min[0] || test_position[2] > max[2] || test_position[2] < min[2] )
544 {
545 return false;
546 }
547
548 return true;
549 }
550
551 override bool HasProperDistance( string selection, PlayerBase player )
552 {
553 if ( MemoryPointExists( selection ) )
554 {
555 vector selection_pos = ModelToWorld( GetMemoryPointPos( selection ) );
556 float distance = vector.Distance( selection_pos, player.GetPosition() );
557 if ( distance >= MAX_ACTION_DETECTION_DISTANCE )
558 {
559 return false;
560 }
561 }
562
563 return true;
564 }
565
566 override void SetActions()
567 {
568 super.SetActions();
569
573 }
574
575 override bool DestroyOnFall()
576 {
577 return true;
578 }
579
580 //================================================================
581 // DEBUG
582 //================================================================
583
586 {
587 array<string> excludes;
588
589 #ifdef DIAG_DEVELOPER
590 bool bWood = DiagMenu.GetBool(DiagMenuIDs.BASEBUILDING_WOOD);
591 #else
592 bool bWood = false;
593 #endif
594
595 if (bWood)
596 {
597 excludes = {"_metal_"};
598 }
599 else
600 {
601 excludes = {"_wood_"};
602 }
603
604 return excludes;
605 }
606
607 //Debug menu Spawn Ground Special
608 override void OnDebugSpawn()
609 {
610 super.OnDebugSpawn();
611
612 int i;
613
614 for (i = 0; i < MAX_WATCHTOWER_FLOORS * MAX_WATCHTOWER_WALLS; ++i)
615 {
616 GetInventory().CreateInInventory("CamoNet");
617 }
618
619 for (i = 0; i < 2 * MAX_WATCHTOWER_WALLS; ++i)
620 {
621 BarbedWire wire = BarbedWire.Cast(GetInventory().CreateInInventory("BarbedWire"));
622 wire.SetMountedState(true);
623 }
624 }
625
626}
ActionFoldBaseBuildingObjectCB ActionContinuousBaseCB ActionFoldBaseBuildingObject()
Определения ActionFoldBaseBuildingObject.c:11
ActionPlaceObjectCB ActiondeployObjectCB ActionPlaceObject()
Определения ActionPlaceObject.c:11
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
vector GetOrientation()
Определения AreaDamageManager.c:306
Construction GetConstruction()
Определения BaseBuildingBase.c:2171
DayZGame g_Game
Определения DayZGame.c:4074
vector orientation
Определения DustKickupEffects.c:21
DiagMenuIDs
Определения EDiagMenuIDs.c:2
EMeleeTargetType
Определения EMeleeTargetType.c:2
override bool CanDisplayAttachmentCategory(string category_name)
Определения Watchtower.c:250
void Watchtower()
Определения Watchtower.c:17
override void OnDebugSpawn()
Определения Watchtower.c:608
override bool IsPlayerInside(PlayerBase player, string selection)
Определения Watchtower.c:513
static const string BASE_WALL_NAME
Определения Watchtower.c:12
override bool CanDisplayAttachmentSlot(int slot_id)
Определения Watchtower.c:203
static const string BASE_VIEW_NAME
Определения Watchtower.c:11
override bool DestroyOnFall()
Определения Watchtower.c:575
ATTACHMENT_CAMONET
Определения Watchtower.c:4
override string GetConstructionKitType()
Определения Watchtower.c:26
static const int MAX_WATCHTOWER_WALLS
Определения Watchtower.c:15
override bool CheckLevelVerticalDistance(float max_dist, string selection, PlayerBase player)
Определения Watchtower.c:388
const float MIN_ACTION_DETECTION_ANGLE_RAD
Определения Watchtower.c:8
override bool CanPutIntoHands(EntityAI parent)
Определения Watchtower.c:128
override array< string > OnDebugSpawnBuildExcludes()
Excludes certain parts from being built by OnDebugSpawn, uses Contains to compare.
Определения Watchtower.c:585
override void UpdateVisuals()
Определения Watchtower.c:49
override bool PerformRoofCheckForBase(string partName, PlayerBase player, out bool result)
Определения Watchtower.c:138
override void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
Определения Watchtower.c:411
override void SetActions()
Определения Watchtower.c:566
override bool CheckSlotVerticalDistance(int slot_id, PlayerBase player)
Определения Watchtower.c:300
override bool IsFacingCamera(string selection)
Определения Watchtower.c:483
override bool IsFacingPlayer(PlayerBase player, string selection)
Определения Watchtower.c:434
const float MAX_ACTION_DETECTION_DISTANCE
Определения Fence.c:16
override void AfterStoreLoad()
Определения Watchtower.c:404
override int GetMeleeTargetType()
Определения Watchtower.c:31
override bool HasProperDistance(string selection, PlayerBase player)
Определения Watchtower.c:551
ATTACHMENT_BARBED_WIRE
Определения Watchtower.c:3
override void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part=false)
Определения Watchtower.c:425
override bool CanReceiveAttachment(EntityAI attachment, int slotId)
Определения Watchtower.c:95
const float MAX_FLOOR_VERTICAL_DISTANCE
Определения Watchtower.c:6
override bool CanBeRepairedToPristine()
Определения Watchtower.c:133
static const int MAX_WATCHTOWER_FLOORS
Определения Watchtower.c:14
override bool CheckMemoryPointVerticalDistance(float max_dist, string selection, PlayerBase player)
Определения Watchtower.c:362
static const string BASE_ROOF_NAME
Определения Watchtower.c:13
override bool IsActionTargetVisible()
Определения Watchtower.c:21
override void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
Определения Watchtower.c:418
Определения Fence.c:2
static bool GetDisablePerformRoofCheck()
Определения CfgGameplayHandler.c:342
PlayerBase GetActionInitiator()
Определения ConstructionActionData.c:136
void SetActionInitiator(PlayerBase action_initiator)
Определения ConstructionActionData.c:131
Определения EnDebug.c:241
static proto bool GetSelectionForSlotId(int slot_Id, out string selection)
static proto native owned string GetSlotName(int id)
converts slot_id to string
provides access to slot configuration
Определения InventorySlots.c:6
Определения EnMath.c:7
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native float Length()
Returns length of vector (magnitude)
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
Определения EnConvert.c:305
proto float Normalize()
Normalizes vector. Returns length.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
proto vector VectorToAngles()
Converts vector to spherical coordinates with radius = 1.
proto vector AnglesToVector()
Converts spherical coordinates (yaw, pitch, roll in degrees) to unit length vector.
Определения EnConvert.c:119
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
static proto float AbsFloat(float f)
Returns absolute value.
vector GetPosition()
Get the world position of the Effect.
Определения Effect.c:473
bool Contains(string sample)
Returns true if sample is substring of string.
Определения EnString.c:286
proto int ToLower()
Changes string to lowercase. Returns length.