‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_dogs.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\array_shared;
4 #using scripts\shared\system_shared;
5 #using scripts\shared\tweakables_shared;
6 #using scripts\shared\scoreevents_shared;
7 #using scripts\shared\util_shared;
8 #using scripts\shared\weapons\_weapons;
9 #using scripts\shared\weapons\_weapon_utils;
10 
11 #insert scripts\shared\shared.gsh;
12 
13 #using scripts\mp\gametypes\_battlechatter;
14 #using scripts\mp\gametypes\_dev;
15 #using scripts\mp\gametypes\_spawning;
16 #using scripts\mp\gametypes\_spawnlogic;
17 
18 #using scripts\mp\_util;
19 #using scripts\mp\killstreaks\_killstreakrules;
20 #using scripts\mp\killstreaks\_killstreaks;
21 #using scripts\mp\killstreaks\_supplydrop;
22 
23 #define DOG_MODEL_FRIENDLY "german_shepherd_vest"
24 #define DOG_MODEL_ENEMY "german_shepherd_vest_black"
25 #define DOG_SPAWN_TIME_DELAY_MIN 2
26 #define DOG_SPAWN_TIME_DELAY_MAX 5
27 #define DOG_MAX_DOG_ATTACKERS 2
28 #define DOG_HEALTH_REGEN_TIME 5
29 
30 #define DOG_TIME 45
31 #define DOG_HEALTH 100
32 #define DOG_COUNT 10
33 #define DOG_COUNT_MAX_AT_ONCE 5
34 
35 #precache( "string", "KILLSTREAK_EARNED_DOGS" );
36 #precache( "string", "KILLSTREAK_DOGS_NOT_AVAILABLE" );
37 #precache( "string", "KILLSTREAK_DOGS_INBOUND" );
38 #precache( "string", "KILLSTREAK_DOGS_HACKED" );
39 #precache( "eventstring", "mpl_killstreak_dogs" );
40 
41 #namespace dogs;
42 
43 //Please note, the killstreak init is a separate call below
44 function ‪init()
45 {
46  level.dog_targets = [];
47  level.dog_targets[ level.dog_targets.size ] = "trigger_radius";
48  level.dog_targets[ level.dog_targets.size ] = "trigger_multiple";
49  level.dog_targets[ level.dog_targets.size ] = "trigger_use_touch";
50 
51  level.dog_spawns = [];
52 
53  level.dogsOnFlashDogs = &‪flash_dogs;
54 }
55 
56 function ‪init_spawns()
57 {
58  spawns = GetNodeArray( "spawn", "script_noteworthy" );
59 
60  if ( !IsDefined( spawns ) || !spawns.size )
61  {
62  /# println( "No dog spawn nodes found in map" ); #/
63  return;
64  }
65 
66  dog_spawner = GetEnt( "dog_spawner", "targetname" );
67 
68  if ( !IsDefined( dog_spawner ) )
69  {
70  /# println( "No dog_spawner entity found in map" ); #/
71  return;
72  }
73 
74  valid = ‪spawnlogic::get_spawnpoint_array( "mp_tdm_spawn" );
75  dog = dog_spawner SpawnFromSpawner();
76 
77  foreach( ‪spawn in spawns )
78  {
79  valid = ArraySort( valid, ‪spawn.origin, false );
80 
81  for( i = 0; i < 5; i++ )
82  {
83  if ( dog FindPath( ‪spawn.origin, valid[i].origin, true, false ) )
84  {
85  level.dog_spawns[ level.dog_spawns.size ] = ‪spawn;
86  break;
87  }
88  }
89  }
90 
91 /#
92  if ( !level.dog_spawns.size )
93  {
94  println( "No dog spawns connect to MP spawn nodes" );
95  }
96 #/
97 
98  dog delete();
99 }
100 
102 {
103 }
104 
105 function ‪useKillstreakDogs(hardpointType)
106 {
107  if ( !‪dog_killstreak_init() )
108  return false;
109 
110  if ( !self ‪killstreakrules::isKillstreakAllowed( hardpointType, self.team ) )
111  return false;
112 
113  killstreak_id = self ‪killstreakrules::killstreakStart( "dogs", self.team );
114 
115  self thread ‪ownerHadActiveDogs();
116 
117  if ( killstreak_id == -1 )
118  return false;
119 
120  if ( level.teambased )
121  {
122  foreach( team in level.teams )
123  {
124  if ( team == self.team )
125  continue;
126  }
127  }
128 
129  self ‪killstreaks::play_killstreak_start_dialog( "dogs", self.team, true );
130  self AddWeaponStat( GetWeapon( "dogs" ), "used", 1 );
131 
132  ownerDeathCount = self.deathCount;
133 
134  level thread ‪dog_manager_spawn_dogs( self, ownerDeathCount, killstreak_id );
135  level notify( "called_in_the_dogs" );
136  return true;
137 }
138 
140 {
141  self endon( "disconnect" );
142  self.dogsActive = true;
143  self.dogsActiveKillstreak = 0;
144  self ‪util::waittill_any( "death", "game_over", "dogs_complete" );
145 
146  self.dogsActiveKillstreak = 0;
147  self.dogsActive = undefined;
148 }
149 
151 {
152  dog_spawner = GetEnt( "dog_spawner", "targetname" );
153 
154  if( !isdefined( dog_spawner ) )
155  {
156  /# println( "No dog spawners found in map" ); #/
157  return false;
158  }
159 
160  spawns = GetNodeArray( "spawn", "script_noteworthy" );
161 
162  if ( level.dog_spawns.size <= 0 )
163  {
164  /# println( "No dog spawn nodes found in map" ); #/
165  return false;
166  }
167 
168  exits = GetNodeArray( "exit", "script_noteworthy" );
169 
170  if ( exits.size <= 0 )
171  {
172  /# println( "No dog exit nodes found in map" ); #/
173  return false;
174  }
175 
176  return true;
177 }
178 
180 {
181  self SetModel( ‪DOG_MODEL_FRIENDLY );
182  self SetEnemyModel( ‪DOG_MODEL_ENEMY );
183 }
184 
185 function ‪init_dog()
186 {
187  assert( IsAi( self ) );
188 
189  self.targetname = "attack_dog";
190 
191  self.animTree = "dog.atr";
192  self.type = "dog";
193  self.accuracy = 0.2;
194  self.health = ‪DOG_HEALTH;
195  self.maxhealth = ‪DOG_HEALTH; // this currently does not hook to code maxhealth
196  self.secondaryweapon = "";
197  self.sidearm = "";
198  self.grenadeAmmo = 0;
199  self.goalradius = 128;
200  self.noDodgeMove = true;
201  self.ignoreSuppression = true;
202  self.suppressionThreshold = 1;
203  self.disableArrivals = false;
204  self.pathEnemyFightDist = 512;
205  self.soundMod = "dog";
206 
207  self thread ‪dog_health_regen();
208  self thread ‪selfDefenseChallenge();
209 }
210 
211 function ‪get_spawn_node( owner, team )
212 {
213  assert( level.dog_spawns.size > 0 );
214  return array::random( level.dog_spawns );
215 }
216 
217 function ‪get_score_for_spawn( origin, team )
218 {
219  players = GetPlayers();
220  score = 0;
221 
222  foreach( player in players )
223  {
224  if ( !isdefined( player ) )
225  {
226  continue;
227  }
228 
229  if ( !IsAlive( player ) )
230  {
231  continue;
232  }
233 
234  if ( player.sessionstate != "playing" )
235  {
236  continue;
237  }
238 
239  if ( DistanceSquared( player.origin, origin ) > 2048 * 2048 )
240  {
241  continue;
242  }
243 
244  if ( player.team == team )
245  {
246  score++;
247  }
248  else
249  {
250  score--;
251  }
252  }
253 
254  return score;
255 }
256 
257 function ‪dog_set_owner( owner, team, requiredDeathCount )
258 {
259  self SetEntityOwner( owner );
260  self.team = team;
261 
262  self.requiredDeathCount = requiredDeathCount;
263 }
264 
266 {
268 }
269 
270 function ‪dog_manager_spawn_dog( owner, team, spawn_node, requiredDeathCount )
271 {
272  dog_spawner = GetEnt( "dog_spawner", "targetname" );
273 
274  dog = dog_spawner SpawnFromSpawner();
275  dog ForceTeleport( spawn_node.origin, spawn_node.angles );
276 
277  dog ‪init_dog();
278  dog ‪dog_set_owner( owner, team, requiredDeathCount );
279  dog ‪dog_set_model();
280  dog ‪dog_create_spawn_influencer( team );
281 
282  dog thread ‪dog_owner_kills();
283  dog thread ‪dog_notify_level_on_death();
284  dog thread ‪dog_patrol();
285  dog thread ‪monitor_dog_special_grenades();
286 
287  return dog;
288 }
289 
290 
291 function ‪monitor_dog_special_grenades() // self == dog
292 {
293  // watch and see if the dog gets damage from a flash or concussion
294  // smoke and tabun handle themselves
295  self endon("death");
296 
297  while(1)
298  {
299  self waittill( "damage", ‪damage, attacker, direction_vec, point, type, modelName, tagName, partName, weapon, iDFlags );
300 
302  {
303  damage_area = ‪spawn( "trigger_radius", self.origin, 0, 128, 128 );
304  attacker thread ‪dogs::flash_dogs( damage_area );
306  damage_area delete();
307  }
308  }
309 }
310 
311 
312 function ‪dog_manager_spawn_dogs( owner, deathCount, killstreak_id )
313 {
314  requiredDeathCount = deathCount;
315  team = owner.team;
316 
317  level.dog_abort = false;
318  owner thread ‪dog_manager_abort();
319  level thread ‪dog_manager_game_ended();
320 
321  for ( count = 0; count < ‪DOG_COUNT; )
322  {
323  if ( level.dog_abort )
324  {
325  break;
326  }
327 
328  dogs = ‪dog_manager_get_dogs();
329 
330  while ( dogs.size < ‪DOG_COUNT_MAX_AT_ONCE && count < ‪DOG_COUNT && !level.dog_abort )
331  {
332  node = ‪get_spawn_node( owner, team );
333  level ‪dog_manager_spawn_dog( owner, team, node, requiredDeathCount );
334  count++;
335 
336  wait ( randomfloatrange( ‪DOG_SPAWN_TIME_DELAY_MIN, ‪DOG_SPAWN_TIME_DELAY_MAX ) );
337  dogs = ‪dog_manager_get_dogs();
338  }
339 
340  level waittill( "dog_died" );
341  }
342 
343  for ( ;; )
344  {
345  dogs = ‪dog_manager_get_dogs();
346 
347  if ( dogs.size <= 0 )
348  {
349  ‪killstreakrules::killstreakStop( "dogs", team, killstreak_id );
350  if ( isdefined( owner ) )
351  {
352  owner notify( "dogs_complete" );
353  }
354  return;
355  }
356 
357  level waittill( "dog_died" );
358  }
359 }
360 
361 function ‪dog_abort()
362 {
363  level.dog_abort = true;
364 
365  dogs = ‪dog_manager_get_dogs();
366 
367  foreach( dog in dogs )
368  {
369  dog notify( "abort" );
370  }
371 
372  level notify( "dog_abort" );
373 }
374 
376 {
377  level endon( "dog_abort" );
378  self ‪util::wait_endon( ‪DOG_TIME, "disconnect", "joined_team", "joined_spectators" );
379  ‪dog_abort();
380 }
381 
383 {
384  level endon( "dog_abort" );
385 
386  level waittill( "game_ended" );
387  ‪dog_abort();
388 }
389 
391 {
392  self waittill( "death" );
393  level notify( "dog_died" );
394 }
395 
396 function ‪dog_leave()
397 {
398  // have them run to an exit node
399  self clearentitytarget();
400  self.ignoreall = true;
401  self.goalradius = 30;
402  self SetGoal( self ‪dog_get_exit_node() );
403 
404  self ‪util::wait_endon( 20, "goal", "bad_path" );
405  self delete();
406 }
407 
408 function ‪dog_patrol()
409 {
410  self endon( "death" );
411 
412  for ( ;; )
413  {
414  if ( level.dog_abort )
415  {
416  self ‪dog_leave();
417  return;
418  }
419 
420  if ( isdefined( self.enemy ) )
421  {
422  wait( RandomIntRange( 3, 5 ) );
423  continue;
424  }
425 
426  nodes = [];
427 
428  objectives = ‪dog_patrol_near_objective();
429 
430  for ( i = 0; i < objectives.size; i++ )
431  {
432  objective = array::random( objectives );
433 
434  nodes = GetNodesInRadius( objective.origin, 256, 64, 512, "Path", 16 );
435 
436  if ( nodes.size )
437  {
438  break;
439  }
440  }
441 
442  if ( !nodes.size )
443  {
444  player = self ‪dog_patrol_near_enemy();
445 
446  if ( isdefined( player ) )
447  {
448  nodes = GetNodesInRadius( player.origin, 1024, 0, 128, "Path", 8 );
449  }
450  }
451 
452  if ( !nodes.size && isdefined( self.script_owner ) )
453  {
454  if ( IsAlive( self.script_owner ) && self.script_owner.sessionstate == "playing" )
455  {
456  nodes = GetNodesInRadius( self.script_owner.origin, 512, 256, 512, "Path", 16 );
457  }
458  }
459 
460  if ( !nodes.size )
461  {
462  nodes = GetNodesInRadius( self.origin, 1024, 512, 512, "Path" );
463  }
464 
465  if ( nodes.size )
466  {
467  nodes = array::randomize( nodes );
468 
469  foreach( node in nodes )
470  {
471  if ( isdefined( node.script_noteworthy ) )
472  {
473  continue;
474  }
475 
476  if ( isdefined( node.dog_claimed ) && IsAlive( node.dog_claimed ) )
477  {
478  continue;
479  }
480 
481  self SetGoal( node );
482  node.dog_claimed = self;
483 
484  nodes = [];
485  event = self ‪util::waittill_any_return( "goal", "bad_path", "enemy", "abort" );
486 
487  if ( event == "goal" )
488  {
489  ‪util::wait_endon( RandomIntRange( 3, 5 ), "damage", "enemy", "abort" );
490  }
491 
492  node.dog_claimed = undefined;
493  break;
494  }
495  }
496 
497  wait( 0.5 );
498  }
499 }
500 
502 {
503  if ( !isdefined( level.dog_objectives ) )
504  {
505  level.dog_objectives = [];
506  level.dog_objective_next_update = 0;
507  }
508 
509  if ( level.gameType == "tdm" || level.gameType == "dm" )
510  {
511  return level.dog_objectives;
512  }
513 
514  if ( GetTime() >= level.dog_objective_next_update )
515  {
516  level.dog_objectives = [];
517 
518  foreach( target in level.dog_targets )
519  {
520  ents = GetEntArray( target, "classname" );
521 
522  foreach( ent in ents )
523  {
524  if ( level.gameType == "koth" )
525  {
526  if ( isdefined( ent.targetname ) && ent.targetname == "radiotrigger" )
527  {
528  level.dog_objectives[ level.dog_objectives.size ] = ent;
529  }
530 
531  continue;
532  }
533 
534  if ( level.gameType == "sd" )
535  {
536  if ( isdefined( ent.targetname ) && ent.targetname == "bombzone" )
537  {
538  level.dog_objectives[ level.dog_objectives.size ] = ent;
539  }
540 
541  continue;
542  }
543 
544  if ( !isdefined( ent.script_gameobjectname ) )
545  {
546  continue;
547  }
548 
549  if ( !IsSubStr( ent.script_gameobjectname, level.gameType ) )
550  {
551  continue;
552  }
553 
554  level.dog_objectives[ level.dog_objectives.size ] = ent;
555  }
556  }
557 
558  level.dog_objective_next_update = GetTime() + RandomIntRange( 5000, 10000 );
559  }
560 
561  return level.dog_objectives;
562 }
563 
565 {
566  players = GetPlayers();
567 
568  closest = undefined;
569  distSq = 99999999;
570 
571  foreach( player in players )
572  {
573  if ( !isdefined( player ) )
574  {
575  continue;
576  }
577 
578  if ( !IsAlive( player ) )
579  {
580  continue;
581  }
582 
583  if ( player.sessionstate != "playing" )
584  {
585  continue;
586  }
587 
588  if ( isdefined( self.script_owner ) && player == self.script_owner )
589  {
590  continue;
591  }
592 
593  if ( level.teambased )
594  {
595  if ( player.team == self.team )
596  {
597  continue;
598  }
599  }
600 
601  if ( GetTime() - player.lastFireTime > 3000 )
602  {
603  continue;
604  }
605 
606  if ( !isdefined( closest ) )
607  {
608  closest = player;
609  distSq = DistanceSquared( self.origin, player.origin );
610  continue;
611  }
612 
613  d = DistanceSquared( self.origin, player.origin );
614 
615  if ( d < distSq )
616  {
617  closest = player;
618  distSq = d;
619  }
620  }
621 
622  return closest;
623 }
624 
626 {
627  dogs = GetEntArray( "attack_dog", "targetname" );
628  return dogs;
629 }
630 
632 {
633  if ( !isdefined( self.script_owner ) )
634  return;
635 
636  self endon("clear_owner");
637  self endon("death");
638  self.script_owner endon("disconnect");
639 
640  while(1)
641  {
642  self waittill("killed", player);
643  self.script_owner notify( "dog_handler" );
644  }
645 }
646 
648 {
649  self endon( "death" );
650 
651  interval = 0.5;
652  regen_interval = Int( ( self.health / ‪DOG_HEALTH_REGEN_TIME ) * interval );
653  regen_start = 2;
654 
655  for ( ;; )
656  {
657  self waittill( "damage", ‪damage, attacker, direction, point, type, tagName, modelName, partname, weapon, iDFlags );
658  self ‪trackAttackerDamage( attacker );
659 
660  self thread ‪dog_health_regen_think( regen_start, interval, regen_interval );
661  }
662 }
663 
664 function ‪trackAttackerDamage( attacker )
665 {
666  if ( !isdefined( attacker ) || !isPlayer( attacker ) || !isdefined( self.script_owner ) )
667  {
668  return;
669  }
670 
671  if ( ( level.teambased && attacker.team == self.script_owner.team ) || attacker == self )
672  {
673  return;
674  }
675 
676  if ( !isdefined( self.attackerData ) || !isdefined( self.attackers ) )
677  {
678  self.attackerData = [];
679  self.attackers = [];
680  }
681  if ( !isdefined( self.attackerData[attacker.clientid] ) )
682  {
683  self.attackerClientID[attacker.clientid] = spawnstruct();
684  self.attackers[ self.attackers.size ] = attacker;
685  }
686 }
687 
689 {
690  self.attackerData = [];
691  self.attackers = [];
692 }
693 
694 function ‪dog_health_regen_think( ‪delay, interval, regen_interval )
695 {
696  self endon( "death" );
697  self endon( "damage" );
698 
699  wait( ‪delay );
700 
701  for ( step = 0; step <= ‪DOG_HEALTH_REGEN_TIME; step += interval )
702  {
703  if ( self.health >= ‪DOG_HEALTH )
704  {
705  break;
706  }
707 
708  self.health += regen_interval;
709  wait( interval );
710  }
711 
712  self ‪resetAttackerDamage();
713  self.health = ‪DOG_HEALTH;
714 }
715 
717 {
718  self waittill ("death", attacker);
719 
720  if ( isdefined( attacker ) && isPlayer( attacker ) )
721  {
722  if (isdefined ( self.script_owner ) && self.script_owner == attacker)
723  return;
724  if ( level.teambased && isdefined ( self.script_owner ) && self.script_owner.team == attacker.team )
725  return;
726 
727  if ( isdefined( self.attackers ) )
728  {
729  foreach ( player in self.attackers )
730  {
731  if ( player != attacker )
732  {
733  ‪scoreevents::processScoreEvent( "killed_dog_assist", player );
734  }
735  }
736  }
737  attacker notify ("selfdefense_dog");
738  }
739 
740 }
741 
743 {
744  exits = GetNodeArray( "exit", "script_noteworthy" );
745  return ArrayGetClosest( self.origin, exits );
746 }
747 
748 function ‪flash_dogs( area )
749 {
750  self endon("disconnect");
751 
752  dogs = ‪dog_manager_get_dogs();
753 
754  foreach( dog in dogs )
755  {
756  if ( !isalive(dog) )
757  continue;
758 
759  if ( dog istouching(area) )
760  {
761  do_flash = true;
762  if ( isPlayer( self ) )
763  {
764  if ( level.teamBased && (dog.team == self.team) )
765  {
766  do_flash = false;
767  }
768  else if ( !level.teambased && isdefined(dog.script_owner) && self == dog.script_owner )
769  {
770  do_flash = false;
771  }
772  }
773 
774  if ( isdefined( dog.lastFlashed ) && dog.lastFlashed + 1500 > gettime() )
775  {
776  do_flash = false;
777  }
778 
779  if ( do_flash )
780  {
781  dog setFlashBanged( true, 500 );
782  dog.lastFlashed = gettime();
783  }
784  }
785  }
786 }
787 
‪processScoreEvent
‪function processScoreEvent(event, player, victim, weapon)
Definition: scoreevents_shared.gsc:19
‪resetAttackerDamage
‪function resetAttackerDamage()
Definition: _dogs.gsc:688
‪trackAttackerDamage
‪function trackAttackerDamage(attacker)
Definition: _dogs.gsc:664
‪dog_notify_level_on_death
‪function dog_notify_level_on_death()
Definition: _dogs.gsc:390
‪DOG_HEALTH
‪#define DOG_HEALTH
Definition: _dogs.gsc:31
‪get_spawn_node
‪function get_spawn_node(owner, team)
Definition: _dogs.gsc:211
‪DOG_HEALTH_REGEN_TIME
‪#define DOG_HEALTH_REGEN_TIME
Definition: _dogs.gsc:28
‪DOG_SPAWN_TIME_DELAY_MIN
‪#define DOG_SPAWN_TIME_DELAY_MIN
Definition: _dogs.gsc:25
‪waittill_any_return
‪function waittill_any_return(string1, string2, string3, string4, string5, string6, string7)
Definition: util_shared.csc:212
‪play_killstreak_start_dialog
‪function play_killstreak_start_dialog(killstreakType, team, killstreakId)
Definition: _killstreaks.gsc:1905
‪dog_manager_spawn_dogs
‪function dog_manager_spawn_dogs(owner, deathCount, killstreak_id)
Definition: _dogs.gsc:312
‪selfDefenseChallenge
‪function selfDefenseChallenge()
Definition: _dogs.gsc:716
‪dog_patrol_near_objective
‪function dog_patrol_near_objective()
Definition: _dogs.gsc:501
‪init_dog
‪function init_dog()
Definition: _dogs.gsc:185
‪spawn
‪function spawn(v_origin=(0, 0, 0), v_angles=(0, 0, 0))
Definition: struct.csc:23
‪delay
‪function delay(time_or_notify, str_endon, func, arg1, arg2, arg3, arg4, arg5, arg6)
Definition: util_shared.csc:784
‪DOG_COUNT
‪#define DOG_COUNT
Definition: _dogs.gsc:32
‪DOG_COUNT_MAX_AT_ONCE
‪#define DOG_COUNT_MAX_AT_ONCE
Definition: _dogs.gsc:33
‪flash_dogs
‪function flash_dogs(area)
Definition: _dogs.gsc:748
‪damage
‪function damage(trap)
Definition: _zm_trap_electric.gsc:116
‪dog_patrol
‪function dog_patrol()
Definition: _dogs.gsc:408
‪dog_manager_game_ended
‪function dog_manager_game_ended()
Definition: _dogs.gsc:382
‪dog_manager_spawn_dog
‪function dog_manager_spawn_dog(owner, team, spawn_node, requiredDeathCount)
Definition: _dogs.gsc:270
‪dog_owner_kills
‪function dog_owner_kills()
Definition: _dogs.gsc:631
‪dog_manager_get_dogs
‪function dog_manager_get_dogs()
Definition: _dogs.gsc:625
‪isKillstreakAllowed
‪function isKillstreakAllowed(hardpointType, team)
Definition: _killstreakrules.gsc:352
‪useKillstreakDogs
‪function useKillstreakDogs(hardpointType)
Definition: _dogs.gsc:105
‪create_entity_enemy_influencer
‪function create_entity_enemy_influencer(name, team)
Definition: _spawning.gsc:310
‪get_spawnpoint_array
‪function get_spawnpoint_array(classname)
Definition: _spawnlogic.gsc:27
‪dog_health_regen
‪function dog_health_regen()
Definition: _dogs.gsc:647
‪waittill_any
‪function waittill_any(str_notify1, str_notify2, str_notify3, str_notify4, str_notify5)
Definition: util_shared.csc:375
‪initKillstreak
‪function initKillstreak()
Definition: _dogs.gsc:101
‪DOG_MODEL_FRIENDLY
‪#define DOG_MODEL_FRIENDLY
Definition: _dogs.gsc:23
‪dog_patrol_near_enemy
‪function dog_patrol_near_enemy()
Definition: _dogs.gsc:564
‪DOG_SPAWN_TIME_DELAY_MAX
‪#define DOG_SPAWN_TIME_DELAY_MAX
Definition: _dogs.gsc:26
‪dog_manager_abort
‪function dog_manager_abort()
Definition: _dogs.gsc:375
‪monitor_dog_special_grenades
‪function monitor_dog_special_grenades()
Definition: _dogs.gsc:291
‪dog_abort
‪function dog_abort()
Definition: _dogs.gsc:361
‪killstreakStop
‪function killstreakStop(hardpointType, team, id)
Definition: _killstreakrules.gsc:293
‪dog_set_owner
‪function dog_set_owner(owner, team, requiredDeathCount)
Definition: _dogs.gsc:257
‪killstreakStart
‪function killstreakStart(hardpointType, team, hacked, displayTeamMessage)
Definition: _killstreakrules.gsc:184
‪dog_create_spawn_influencer
‪function dog_create_spawn_influencer(team)
Definition: _dogs.gsc:265
‪get_score_for_spawn
‪function get_score_for_spawn(origin, team)
Definition: _dogs.gsc:217
‪dog_killstreak_init
‪function dog_killstreak_init()
Definition: _dogs.gsc:150
‪dog_health_regen_think
‪function dog_health_regen_think(delay, interval, regen_interval)
Definition: _dogs.gsc:694
‪ownerHadActiveDogs
‪function ownerHadActiveDogs()
Definition: _dogs.gsc:139
‪DOG_TIME
‪#define DOG_TIME
Definition: _dogs.gsc:30
‪init
‪function init()
Definition: _dogs.gsc:44
‪isFlashOrStunWeapon
‪function isFlashOrStunWeapon(weapon)
Definition: _weapon_utils.gsc:13
‪init_spawns
‪function init_spawns()
Definition: _dogs.gsc:56
‪wait_endon
‪function wait_endon(waitTime, endOnString, endonString2, endonString3, endonString4)
Definition: _util.gsc:396
‪dog_set_model
‪function dog_set_model()
Definition: _dogs.gsc:179
‪dog_get_exit_node
‪function dog_get_exit_node()
Definition: _dogs.gsc:742
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265
‪dog_leave
‪function dog_leave()
Definition: _dogs.gsc:396
‪DOG_MODEL_ENEMY
‪#define DOG_MODEL_ENEMY
Definition: _dogs.gsc:24