Advertisement
Guest User

tjugg - Notesblok

a guest
Nov 19th, 2011
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.46 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5. main()
  6. {
  7. maps\mp\gametypes\_globallogic::init();
  8. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  9. maps\mp\gametypes\_globallogic::SetupCallbacks();
  10.  
  11. if ( isUsingMatchRulesData() )
  12. {
  13. level.initializeMatchRules = ::initializeMatchRules;
  14. [[level.initializeMatchRules]]();
  15. level thread reInitializeMatchRulesOnMigration();
  16. }
  17. else
  18. {
  19. registerTimeLimitDvar( level.gameType, 10 );
  20. registerRoundLimitDvar( level.gameType, 1 );
  21. registerScoreLimitDvar( level.gameType, 7500 );
  22. registerWinLimitDvar( level.gameType, 1 );
  23. registerNumLivesDvar( level.gameType, 0 );
  24. registerHalfTimeDvar( level.gameType, 0 );
  25.  
  26. level.matchRules_juggSwitchTime = 90;
  27. level.matchRules_damageMultiplier = 0;
  28. level.matchRules_vampirism = 0;
  29. }
  30.  
  31. setSpecialLoadouts();
  32.  
  33. level.teamBased = true;
  34. level.doPrematch = true;
  35. level.onPrecacheGametype = ::onPrecacheGametype;
  36. level.onStartGameType = ::onStartGameType;
  37. level.getSpawnPoint = ::getSpawnPoint;
  38. level.onPlayerKilled = ::onPlayerKilled;
  39.  
  40. if ( level.matchRules_damageMultiplier || level.matchRules_vampirism )
  41. level.modifyPlayerDamage = maps\mp\gametypes\_damage::gamemodeModifyPlayerDamage;
  42. }
  43.  
  44.  
  45. initializeMatchRules()
  46. {
  47. // set common values
  48. setCommonRulesFromMatchRulesData();
  49.  
  50. // set everything else (private match options, default .cfg file values, and what normally is registered in the 'else' below)
  51. level.matchRules_juggSwitchTime = GetMatchRulesData( "tjuggData", "juggSwitchTime" );
  52.  
  53. SetDynamicDvar( "scr_tjugg_roundswitch", 0 );
  54. registerRoundSwitchDvar( "tjugg", 0, 0, 9 );
  55. SetDynamicDvar( "scr_tjugg_roundlimit", 1 );
  56. registerRoundLimitDvar( "tjugg", 1 );
  57. SetDynamicDvar( "scr_tjugg_winlimit", 1 );
  58. registerWinLimitDvar( "tjugg", 1 );
  59. SetDynamicDvar( "scr_tjugg_halftime", 0 );
  60. registerHalfTimeDvar( "tjugg", 0 );
  61.  
  62. SetDynamicDvar( "scr_tjugg_promode", 0 );
  63. }
  64.  
  65.  
  66. onPrecacheGametype()
  67. {
  68. precacheString( &"MP_JUGG_NEXT_JUGG_IN" );
  69. }
  70.  
  71.  
  72. onStartGameType()
  73. {
  74. setClientNameMode("auto_change");
  75.  
  76. setObjectiveText( "allies", &"OBJECTIVES_TJUGG" );
  77. setObjectiveText( "axis", &"OBJECTIVES_TJUGG" );
  78.  
  79. if ( level.splitscreen )
  80. {
  81. setObjectiveScoreText( "allies", &"OBJECTIVES_TJUGG" );
  82. setObjectiveScoreText( "axis", &"OBJECTIVES_TJUGG" );
  83. }
  84. else
  85. {
  86. setObjectiveScoreText( "allies", &"OBJECTIVES_TJUGG_SCORE" );
  87. setObjectiveScoreText( "axis", &"OBJECTIVES_TJUGG_SCORE" );
  88. }
  89. setObjectiveHintText( "allies", &"OBJECTIVES_TJUGG_HINT" );
  90. setObjectiveHintText( "axis", &"OBJECTIVES_TJUGG_HINT" );
  91.  
  92. level.spawnMins = ( 0, 0, 0 );
  93. level.spawnMaxs = ( 0, 0, 0 );
  94.  
  95. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_allies_start" );
  96. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_axis_start" );
  97. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" );
  98. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" );
  99.  
  100. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  101. setMapCenter( level.mapCenter );
  102.  
  103. maps\mp\gametypes\_rank::registerScoreInfo( "got_juggernaut", 250 );
  104. maps\mp\gametypes\_rank::registerScoreInfo( "kill_juggernaut", 250 );
  105. maps\mp\gametypes\_rank::registerScoreInfo( "kill_as_juggernaut", 100 );
  106. //maps\mp\gametypes\_rank::registerScoreInfo( "defend_juggernaut", 100 );
  107. maps\mp\gametypes\_rank::registerScoreInfo( "jugg_on_jugg", 400 );
  108.  
  109. allowed[0] = "tjugg";
  110. maps\mp\gametypes\_gameobjects::main(allowed);
  111.  
  112. level.QuickMessageToAll = true;
  113. level.blockWeaponDrops = true;
  114.  
  115. level.jugg_available = [];
  116. level.jugg_available["axis"] = true;
  117. level.jugg_available["allies"] = true;
  118.  
  119. level.jugg_attackers = [];
  120. level.jugg_attackers["axis"] = [];
  121. level.jugg_attackers["allies"] = [];
  122.  
  123. level.jugg_currJugg = [];
  124. level.jugg_currJugg["axis"] = undefined;
  125. level.jugg_currJugg["allies"] = undefined;
  126.  
  127. level.tjugg_timerDisplay = [];
  128. level.tjugg_timerDisplay["allies"] = createServerTimer( "objective", 1.4, "allies" );
  129. level.tjugg_timerDisplay["allies"] setPoint( "TOPLEFT", "TOPLEFT", 115, 5 );
  130. level.tjugg_timerDisplay["allies"].label = &"MP_JUGG_NEXT_JUGG_IN";
  131. level.tjugg_timerDisplay["allies"].alpha = 0;
  132. level.tjugg_timerDisplay["allies"].archived = false;
  133. level.tjugg_timerDisplay["allies"].hideWhenInMenu = true;
  134.  
  135. level.tjugg_timerDisplay["axis" ] = createServerTimer( "objective", 1.4, "axis" );
  136. level.tjugg_timerDisplay["axis" ] setPoint( "TOPLEFT", "TOPLEFT", 115, 5 );
  137. level.tjugg_timerDisplay["axis" ].label = &"MP_JUGG_NEXT_JUGG_IN";
  138. level.tjugg_timerDisplay["axis" ].alpha = 0;
  139. level.tjugg_timerDisplay["axis" ].archived = false;
  140. level.tjugg_timerDisplay["axis" ].hideWhenInMenu = true;
  141.  
  142. thread hideTimerDisplayOnGameEnd( level.tjugg_timerDisplay["allies"] );
  143. thread hideTimerDisplayOnGameEnd( level.tjugg_timerDisplay["axis" ] );
  144.  
  145. level.favorCloseSpawnScalar = 5;
  146.  
  147. level thread onPlayerConnect();
  148. }
  149.  
  150.  
  151. onPlayerConnect()
  152. {
  153. while ( true )
  154. {
  155. level waittill( "connected", player );
  156.  
  157. player.jugg_alligience = 0;
  158. }
  159. }
  160.  
  161.  
  162. getSpawnPoint()
  163. {
  164. if ( level.inGracePeriod )
  165. {
  166. spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn_" + self.pers["team"] + "_start" );
  167. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  168. }
  169. else
  170. {
  171. level.favorCloseSpawnEnt = level.jugg_currJugg[self.pers["team"]];
  172.  
  173. spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( self.pers["team"] );
  174. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  175. }
  176.  
  177. return spawnPoint;
  178. }
  179.  
  180.  
  181. onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, lifeId )
  182. {
  183. victim = self;
  184. if ( isDefined( attacker ) )
  185. {
  186. newJugg = false;
  187. giveJugg = false;
  188. juggKillJugg = false;
  189. killJugg = false;
  190. killAsJugg = false;
  191. defendJugg = false;
  192. score = 0;
  193.  
  194. if ( attacker == victim )
  195. {
  196. // juggernaut suicide
  197. if ( isDefined( victim.isJuggModeJuggernaut ) )
  198. giveJugg = true;
  199. }
  200. else
  201. {
  202. score += maps\mp\gametypes\_rank::getScoreInfoValue( "kill" );
  203.  
  204. // juggernaut death
  205. if ( isDefined( victim.isJuggModeJuggernaut ) )
  206. {
  207. giveJugg = true;
  208.  
  209. if ( isDefined( attacker.isJuggModeJuggernaut ) )
  210. // jugg on jugg,
  211. juggKillJugg = true;
  212. else
  213. // normal player on jugg,
  214. killJugg = true;
  215. }
  216. else
  217. {
  218. if ( isDefined( attacker.isJuggModeJuggernaut ) )
  219. // regular kill as juggernaut
  220. killAsJugg = true;
  221. }
  222.  
  223. // new juggernaut
  224. if ( level.jugg_available[attacker.team] )
  225. newJugg = true;
  226. }
  227.  
  228. // attacker's team doesn't have a juggernaut yet, give it to the attacker
  229. if ( newJugg )
  230. {
  231. resetJugg( attacker );
  232. }
  233.  
  234. // victim was juggernaut, give it to victim's best teammate
  235. if ( giveJugg )
  236. {
  237. nextJugg = getBestTeammate();
  238. // if not defined, then the jugg is the only one on the team, just give it back to them
  239. if ( !isDefined( nextJugg ) )
  240. nextJugg = victim;
  241. resetJugg( nextJugg, victim );
  242. }
  243.  
  244. if ( newJugg || giveJugg )
  245. {
  246. playSoundOnPlayers( "mp_enemy_obj_captured" );
  247. }
  248.  
  249. // if not suicide and the attacker isn't the juggernaut, log brownie points for attacker team's juggernaut
  250. if ( attacker != victim && !isDefined( attacker.isJuggModeJuggernaut ) )
  251. {
  252. // brownie points for killing anyone
  253. attacker.jugg_alligience += 50;
  254. // extra brownie points for killing jug
  255. if ( killJugg )
  256. attacker.jugg_alligience += 100;
  257. // extra brownie points for killing anyone who attacked the attacker's team juggernaut
  258. if ( isDefined( level.jugg_attackers[attacker.team][ victim.guid ] ) )
  259. {
  260. defendJugg = true;
  261. attacker.jugg_alligience += 100;
  262. level.jugg_attackers[attacker.team][ victim.guid ] = undefined;
  263. }
  264. }
  265.  
  266. // messaging and scoring
  267. killer = undefined;
  268. if ( isPlayer( attacker ) )
  269. killer = attacker;
  270. else if ( isDefined( attacker.owner ) )
  271. killer = attacker.owner;
  272. if ( isDefined( killer ) )
  273. {
  274. // messaging
  275. if ( killJugg )
  276. {
  277. killJuggBonus = maps\mp\gametypes\_rank::getScoreInfoValue( "kill_juggernaut" );
  278. score += killJuggBonus;
  279. attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_KILLED_JUGGERNAUT" );
  280. maps\mp\gametypes\_gamescore::givePlayerScore( "kill_juggernaut", attacker, victim, true );
  281. attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill_juggernaut" );
  282. }
  283. else if ( juggKillJugg )
  284. {
  285. score += maps\mp\gametypes\_rank::getScoreInfoValue( "jugg_on_jugg" );
  286. attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_JUGGERNAUT_KILL_JUGGERNAUT" );
  287. maps\mp\gametypes\_gamescore::givePlayerScore( "jugg_on_jugg", attacker, victim, true );
  288. attacker thread maps\mp\gametypes\_rank::giveRankXP( "jugg_on_jugg" );
  289. }
  290. else if ( killAsJugg )
  291. {
  292. score += maps\mp\gametypes\_rank::getScoreInfoValue( "kill_as_juggernaut" );
  293. attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_JUGGERNAUT_KILL" );
  294. maps\mp\gametypes\_gamescore::givePlayerScore( "kill_as_juggernaut", attacker, victim, true );
  295. attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill_as_juggernaut" );
  296. }
  297.  
  298. // scoring
  299. if ( score )
  300. attacker maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( attacker.pers["team"], score );
  301.  
  302. // final kill cam
  303. if ( game["state"] == "postgame" && game["teamScores"][attacker.team] > game["teamScores"][level.otherTeam[attacker.team]] )
  304. attacker.finalKill = true;
  305. }
  306. }
  307. }
  308.  
  309.  
  310. resetJugg( newJugg, oldJugg )
  311. {
  312. // clear old jugg
  313. if ( isDefined( oldJugg ) )
  314. {
  315. //oldJugg.class = oldJugg.chosenClass;
  316. oldJugg.isJuggModeJuggernaut = undefined;
  317. }
  318. else
  319. level.jugg_available[newJugg.team] = false;
  320.  
  321. // clear new jugg
  322. level.jugg_currJugg[newJugg.team] = undefined;
  323. level.tjugg_timerDisplay[newJugg.team].alpha = 0;
  324. level.jugg_attackers[newJugg.team] = [];
  325.  
  326. // clear teammate allegience for old jugg
  327. foreach ( player in level.players )
  328. {
  329. if ( player.team == newJugg.team )
  330. player.jugg_alligience = 0;
  331. }
  332.  
  333. // set the new jugg
  334. newJugg thread giveJuggLoadout();
  335. }
  336.  
  337.  
  338. giveJuggLoadout()
  339. {
  340. // wait till they've spawned if they're dead
  341. while( !isAlive( self ) )
  342. wait( 0.05 );
  343.  
  344. // set vars
  345. self.isJuggModeJuggernaut = true;
  346. level.jugg_currJugg[self.team] = self;
  347.  
  348. // suit up
  349. self.pers["gamemodeLoadout"] = level.tjugg_loadouts[self.pers["team"]];
  350. self thread maps\mp\killstreaks\_juggernaut::giveJuggernaut( "tjugg_juggernaut" );
  351.  
  352. // bonus!
  353. gotJuggBonus = maps\mp\gametypes\_rank::getScoreInfoValue( "got_juggernaut" );
  354. self thread maps\mp\gametypes\_hud_message::SplashNotify( "got_juggernaut", gotJuggBonus );
  355. maps\mp\gametypes\_gamescore::givePlayerScore( "got_juggernaut", self, undefined, true );
  356.  
  357. // watch disconnect
  358. self thread resetJuggLoadoutOnDisconnect();
  359.  
  360. // watch teammates
  361. self thread rewardTeammateProximity();
  362. self thread logAttackers();
  363.  
  364. // watch timeout
  365. self thread nextJuggTimeout();
  366. }
  367.  
  368.  
  369. nextJuggTimeout()
  370. {
  371. level endon( "game_ended" );
  372. self endon( "disconnect" );
  373. self endon( "death" );
  374.  
  375. level.tjugg_timerDisplay[self.team].label = &"MP_JUGG_NEXT_JUGG_IN";
  376. level.tjugg_timerDisplay[self.team] setTimer( level.matchRules_juggSwitchTime );
  377. level.tjugg_timerDisplay[self.team].alpha = 1;
  378.  
  379. maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( level.matchRules_juggSwitchTime );
  380.  
  381. level.tjugg_timerDisplay[self.team].alpha = 0;
  382.  
  383. newJugg = getBestTeammate();
  384. // if not defined, then the jugg is the only one on the team, just give it back to them
  385. if ( !isDefined( newJugg ) )
  386. {
  387. // remove old jugg since they didn't die
  388. self notify( "lost_juggernaut" );
  389. wait( 0.05 );
  390. newJugg = self;
  391. }
  392.  
  393. playSoundOnPlayers( "mp_enemy_obj_captured" );
  394. resetJugg( newJugg, self );
  395.  
  396. // respawn
  397. if ( newJugg != self )
  398. self thread respawnOldJugg();
  399. }
  400.  
  401.  
  402. respawnOldJugg()
  403. {
  404. level endon( "game_ended" );
  405. self endon( "disconnect" );
  406.  
  407. self notify( "lost_juggernaut" );
  408. wait( 0.05 );
  409. self thread maps\mp\gametypes\_playerlogic::spawnClient();
  410. }
  411.  
  412.  
  413. rewardTeammateProximity()
  414. {
  415. level endon( "game_ended" );
  416. self endon( "death" );
  417. self endon( "disconnect" );
  418.  
  419. while ( true )
  420. {
  421. wait( 1.0 );
  422.  
  423. foreach ( player in level.players )
  424. {
  425. if ( isAlive( player) && player != self && player.team == self.team && distanceSquared( player.origin, self.origin ) < 48400 )
  426. player.jugg_alligience += 25;
  427. }
  428. }
  429. }
  430.  
  431.  
  432. logAttackers()
  433. {
  434. level endon( "game_ended" );
  435. self endon( "death" );
  436. self endon( "disconnect" );
  437.  
  438. while( true )
  439. {
  440. self waittill( "damage", amount, attacker );
  441.  
  442. if ( isPlayer( attacker ) && attacker.team != self.team )
  443. {
  444. if ( !isDefined( level.jugg_attackers[self.team][ attacker.guid ] ) )
  445. level.jugg_attackers[self.team][ attacker.guid ] = true;
  446. }
  447. }
  448. }
  449.  
  450.  
  451. resetJuggLoadoutOnDisconnect()
  452. {
  453. level endon( "game_ended" );
  454. self endon( "death" );
  455.  
  456. self waittill( "disconnected" );
  457.  
  458. newJugg = getBestTeammate();
  459. // if not defined, then there is no one left on their team and it will forfeit
  460. if ( isDefined( newJugg ) )
  461. {
  462. playSoundOnPlayers( "mp_enemy_obj_captured" );
  463. resetJugg( newJugg );
  464. }
  465. }
  466.  
  467.  
  468. getBestTeammate()
  469. {
  470. bestTeammate = undefined;
  471. bestAlligience = -1;
  472.  
  473. foreach ( player in level.players )
  474. {
  475. if ( player!= self && player.team == self.team && player.jugg_alligience > bestAlligience )
  476. {
  477. bestTeammate = player;
  478. bestAlligience = player.jugg_alligience;
  479. }
  480. }
  481.  
  482. return bestTeammate;
  483. }
  484.  
  485.  
  486. hideTimerDisplayOnGameEnd( timerDisplay )
  487. {
  488. level waittill("game_ended");
  489. timerDisplay.alpha = 0;
  490. }
  491.  
  492.  
  493. setSpecialLoadouts()
  494. {
  495. // axis jugg
  496. if ( isUsingMatchRulesData() && GetMatchRulesData( "defaultClasses", "axis", 5, "class", "inUse" ) )
  497. {
  498. level.tjugg_loadouts["axis"] = getMatchRulesSpecialClass( "axis", 5 );
  499. level.tjugg_loadouts["axis"]["loadoutJuggernaut"] = 1; // irrelevant because we call giveJugg()
  500. }
  501. else
  502. {
  503. // no killstreaks defined for special classes
  504. level.tjugg_loadouts["axis"]["loadoutPrimary"] = "iw5_scar";
  505. level.tjugg_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
  506. level.tjugg_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
  507. level.tjugg_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration";
  508. level.tjugg_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
  509. level.tjugg_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
  510.  
  511. level.tjugg_loadouts["axis"]["loadoutSecondary"] = "rpg";
  512. level.tjugg_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
  513. level.tjugg_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
  514. level.tjugg_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
  515. level.tjugg_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
  516. level.tjugg_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
  517.  
  518. level.tjugg_loadouts["axis"]["loadoutEquipment"] = "frag_grenade_mp";
  519. level.tjugg_loadouts["axis"]["loadoutOffhand"] = "smoke_grenade_mp";
  520.  
  521. level.tjugg_loadouts["axis"]["loadoutPerk1"] = "specialty_scavenger";
  522. level.tjugg_loadouts["axis"]["loadoutPerk2"] = "_specialty_blastshield";
  523. level.tjugg_loadouts["axis"]["loadoutPerk3"] = "specialty_bulletaccuracy";
  524.  
  525. level.tjugg_loadouts["axis"]["loadoutDeathstreak"] = "specialty_null";
  526. level.tjugg_loadouts["axis"]["loadoutJuggernaut"] = 1; // irrelevant because we call giveJugg()
  527. }
  528.  
  529. // allies jugg
  530. if ( isUsingMatchRulesData() && GetMatchRulesData( "defaultClasses", "allies", 5, "class", "inUse" ) )
  531. {
  532. level.tjugg_loadouts["allies"] = getMatchRulesSpecialClass( "allies", 5 );
  533. level.tjugg_loadouts["allies"]["loadoutJuggernaut"] = 1; // irrelevant because we call giveJugg()
  534. }
  535. else
  536. {
  537. // no killstreaks defined for special classes
  538. level.tjugg_loadouts["allies"]["loadoutPrimary"] = "iw5_scar";
  539. level.tjugg_loadouts["allies"]["loadoutPrimaryAttachment"] = "none";
  540. level.tjugg_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none";
  541. level.tjugg_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration";
  542. level.tjugg_loadouts["allies"]["loadoutPrimaryCamo"] = "none";
  543. level.tjugg_loadouts["allies"]["loadoutPrimaryReticle"] = "none";
  544.  
  545. level.tjugg_loadouts["allies"]["loadoutSecondary"] = "rpg";
  546. level.tjugg_loadouts["allies"]["loadoutSecondaryAttachment"] = "none";
  547. level.tjugg_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none";
  548. level.tjugg_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null";
  549. level.tjugg_loadouts["allies"]["loadoutSecondaryCamo"] = "none";
  550. level.tjugg_loadouts["allies"]["loadoutSecondaryReticle"] = "none";
  551.  
  552. level.tjugg_loadouts["allies"]["loadoutEquipment"] = "frag_grenade_mp";
  553. level.tjugg_loadouts["allies"]["loadoutOffhand"] = "smoke_grenade_mp";
  554.  
  555. level.tjugg_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger";
  556. level.tjugg_loadouts["allies"]["loadoutPerk2"] = "_specialty_blastshield";
  557. level.tjugg_loadouts["allies"]["loadoutPerk3"] = "specialty_bulletaccuracy";
  558.  
  559. level.tjugg_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null";
  560. level.tjugg_loadouts["allies"]["loadoutJuggernaut"] = 1; // irrelevant because we call giveJugg()
  561. }
  562. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement