Advertisement
Guest User

grnd - Notesblok

a guest
Nov 19th, 2011
352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.46 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5. /*
  6. Drop Zone
  7. Objective: Score points for your team over time by holding the drop zone.
  8. Periodic carepackage awarded to player who's been in drop zone the longest.
  9. Map ends: When one team reaches the score limit, or time limit is reached
  10. Respawning: No wait / Near teammates / Near drop zone
  11.  
  12. Level requirementss
  13. ------------------
  14. Start Spawnpoints:
  15. classname mp_sab_spawn_allies_start, mp_sab_spawn_axis_start
  16.  
  17. Spawnpoints:
  18. classname mp_tdm_spawn
  19. All players spawn from these. The spawnpoint chosen is dependent on the current locations of drop zone, teammates, and enemies
  20. at the time of spawn. Players generally spawn behind their teammates relative to the direction of enemies.
  21.  
  22. Spectator Spawnpoints:
  23. classname mp_global_intermission
  24. Spectators spawn from these and intermission is viewed from these positions.
  25. Atleast one is required, any more and they are randomly chosen between.
  26. */
  27.  
  28. GRND_ZONE_TOUCH_RADIUS = 300;
  29. GRND_ZONE_DROP_RADIUS = 72;
  30.  
  31. main()
  32. {
  33. if(getdvar("mapname") == "mp_background")
  34. return;
  35.  
  36. maps\mp\gametypes\_globallogic::init();
  37. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  38. maps\mp\gametypes\_globallogic::SetupCallbacks();
  39.  
  40. if ( isUsingMatchRulesData() )
  41. {
  42. level.initializeMatchRules = ::initializeMatchRules;
  43. [[level.initializeMatchRules]]();
  44. level thread reInitializeMatchRulesOnMigration();
  45. }
  46. else
  47. {
  48. registerRoundSwitchDvar( level.gameType, 0, 0, 9 );
  49. registerTimeLimitDvar( level.gameType, 10 );
  50. registerScoreLimitDvar( level.gameType, 20000 );
  51. registerRoundLimitDvar( level.gameType, 1 );
  52. registerWinLimitDvar( level.gameType, 1 );
  53. registerNumLivesDvar( level.gameType, 0 );
  54. registerHalfTimeDvar( level.gameType, 0 );
  55.  
  56. level.matchRules_dropTime = 30;
  57. level.matchRules_zoneSwitchTime = 120;
  58. level.matchRules_damageMultiplier = 0;
  59. level.matchRules_vampirism = 0;
  60. }
  61.  
  62. level.teamBased = true;
  63. level.onPrecacheGameType = ::onPrecacheGameType;
  64. level.onStartGameType = ::onStartGameType;
  65. level.getSpawnPoint = ::getSpawnPoint;
  66. level.onSpawnPlayer = ::onSpawnPlayer;
  67.  
  68. if ( level.matchRules_damageMultiplier || level.matchRules_vampirism )
  69. level.modifyPlayerDamage = maps\mp\gametypes\_damage::gamemodeModifyPlayerDamage;
  70.  
  71. level.grnd_fx["smoke"] = loadFx( "smoke/airdrop_flare_mp_effect_now" );
  72. level.grnd_fx["flare"] = loadFx( "smoke/signal_smoke_airdrop" );
  73.  
  74. createZones();
  75. }
  76.  
  77.  
  78. initializeMatchRules()
  79. {
  80. // set common values
  81. setCommonRulesFromMatchRulesData();
  82.  
  83. // set everything else (private match options, default .cfg file values, and what normally is registered in the 'else' below)
  84. level.matchRules_dropTime = GetMatchRulesData( "grndData", "dropTime" );
  85. level.matchRules_zoneSwitchTime = 60 * GetMatchRulesData( "grndData", "zoneSwitchTime" );
  86.  
  87. SetDynamicDvar( "scr_grnd_roundswitch", 0 );
  88. registerRoundSwitchDvar( "grnd", 0, 0, 9 );
  89. SetDynamicDvar( "scr_grnd_roundlimit", 1 );
  90. registerRoundLimitDvar( "grnd", 1 );
  91. SetDynamicDvar( "scr_grnd_winlimit", 1 );
  92. registerWinLimitDvar( "grnd", 1 );
  93. SetDynamicDvar( "scr_grnd_halftime", 0 );
  94. registerHalfTimeDvar( "grnd", 0 );
  95.  
  96. SetDynamicDvar( "scr_grnd_promode", 0 );
  97. }
  98.  
  99.  
  100. onPrecacheGameType()
  101. {
  102. precacheShader( "waypoint_captureneutral" );
  103. precacheShader( "waypoint_capture" );
  104. precacheShader( "waypoint_defend" );
  105.  
  106. precacheModel( "prop_flag_neutral" );
  107.  
  108. precacheString( &"OBJECTIVES_GRND" );
  109. precacheString( &"OBJECTIVES_GRND_SCORE" );
  110. precacheString( &"OBJECTIVES_GRND_HINT" );
  111. precacheString( &"OBJECTIVES_GRND_CONFIRM" );
  112. precacheString( &"MP_CALLING_AIRDROP" );
  113. precacheString( &"MP_NEXT_DROP_ZONE_IN" );
  114.  
  115. precacheModel( "weapon_us_smoke_grenade_burnt2" );
  116. }
  117.  
  118.  
  119. onStartGameType()
  120. {
  121. setClientNameMode("auto_change");
  122.  
  123. if ( !isdefined( game["switchedsides"] ) )
  124. game["switchedsides"] = false;
  125.  
  126. setObjectiveText( "allies", &"OBJECTIVES_GRND" );
  127. setObjectiveText( "axis", &"OBJECTIVES_GRND" );
  128.  
  129. if ( level.splitscreen )
  130. {
  131. setObjectiveScoreText( "allies", &"OBJECTIVES_GRND" );
  132. setObjectiveScoreText( "axis", &"OBJECTIVES_GRND" );
  133. }
  134. else
  135. {
  136. setObjectiveScoreText( "allies", &"OBJECTIVES_GRND_SCORE" );
  137. setObjectiveScoreText( "axis", &"OBJECTIVES_GRND_SCORE" );
  138. }
  139. setObjectiveHintText( "allies", &"OBJECTIVES_GRND_HINT" );
  140. setObjectiveHintText( "axis", &"OBJECTIVES_GRND_HINT" );
  141.  
  142. level.spawnMins = ( 0, 0, 0 );
  143. level.spawnMaxs = ( 0, 0, 0 );
  144. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_sab_spawn_allies_start" );
  145. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_sab_spawn_axis_start" );
  146. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" );
  147. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" );
  148. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  149. setMapCenter( level.mapCenter );
  150.  
  151. // get the central loction for first DZ using the SAB bomb, before it is removed
  152. centerLocObj = getEnt( "sab_bomb", "targetname" );
  153. level.grnd_centerLoc = centerLocObj.origin;
  154.  
  155. maps\mp\gametypes\_rank::registerScoreInfo( "zone_kill", 100 );
  156. maps\mp\gametypes\_rank::registerScoreInfo( "zone_tick", 20 );
  157.  
  158. allowed[0] = level.gameType;
  159. allowed[1] = "tdm";
  160.  
  161. maps\mp\gametypes\_gameobjects::main(allowed);
  162.  
  163. level.grnd_timerDisplay = createServerTimer( "objective", 1.4 );
  164. level.grnd_timerDisplay setPoint( "TOPLEFT", "TOPLEFT", 115, 5 );
  165. level.grnd_timerDisplay.label = &"MP_NEXT_DROP_ZONE_IN";
  166. level.grnd_timerDisplay.alpha = 0;
  167. level.grnd_timerDisplay.archived = false;
  168. level.grnd_timerDisplay.hideWhenInMenu = true;
  169. thread hideHudElementOnGameEnd( level.grnd_timerDisplay );
  170.  
  171. initFirstZone();
  172. }
  173.  
  174.  
  175. initFirstZone()
  176. {
  177. level.zonesCycling = false;
  178.  
  179. // find the closest zone to center
  180. shortestDistance = 999999;
  181. shortestDistanceIndex = 0;
  182. for ( i=0; i<level.grnd_dropZones[level.script].size; i++ )
  183. {
  184. dropZone = level.grnd_dropZones[level.script][i];
  185. distToCenter = distance2d( level.grnd_centerLoc, dropZone );
  186. if ( distToCenter < shortestDistance )
  187. {
  188. shortestDistance = distToCenter;
  189. shortestDistanceIndex = i;
  190. }
  191. }
  192. level.grnd_initialIndex = shortestDistanceIndex;
  193. initilPos = level.grnd_dropZones[level.script][shortestDistanceIndex];
  194.  
  195. // create marker
  196. level.grnd_zone = spawn( "script_model", initilPos );
  197. level.grnd_zone.origin = initilPos;
  198. level.grnd_zone.angles = ( 90, 0, 0 );
  199. level.grnd_zone setModel( "weapon_us_smoke_grenade_burnt2" );
  200.  
  201. // spawning
  202. level.favorCloseSpawnEnt = level.grnd_zone;
  203. level.favorCloseSpawnScalar = 5;
  204.  
  205. // make the rest
  206. level thread initZones();
  207. }
  208.  
  209.  
  210. initZones()
  211. {
  212. level.grnd_zones = [];
  213. for ( i=0; i<level.grnd_dropZones[level.script].size; i++ )
  214. {
  215. dropZone = level.grnd_dropZones[level.script][i];
  216. level.grnd_zones[i] = spawn( "script_origin", dropZone );
  217. level.grnd_zones[i].origin = dropZone;
  218. wait( 0.05 );
  219. }
  220.  
  221. level.grnd_zones[level.grnd_initialIndex] delete();
  222. level.grnd_zones[level.grnd_initialIndex] = undefined;
  223. level.grnd_zones = array_removeUndefined( level.grnd_zones );
  224. }
  225.  
  226.  
  227. getSpawnPoint()
  228. {
  229. if ( level.inGracePeriod )
  230. {
  231. spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_" + self.pers["team"] + "_start" );
  232. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  233. }
  234. else
  235. {
  236. spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( self.pers["team"] );
  237. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  238. }
  239.  
  240. return spawnPoint;
  241. }
  242.  
  243.  
  244. onSpawnPlayer()
  245. {
  246. // in/out zone indicator
  247. if ( !isDefined( self.inGrindZone ) )
  248. {
  249. level thread setPlayerMessages( self );
  250.  
  251. // let the first player in activate this
  252. if ( !level.zonesCycling )
  253. {
  254. level thread cycleZones();
  255. level thread locationScoring();
  256. }
  257. }
  258.  
  259. level notify ( "spawned_player" );
  260. }
  261.  
  262.  
  263. setPlayerMessages( player )
  264. {
  265. level endon( "game_ended" );
  266.  
  267. gameFlagWait( "prematch_done" );
  268.  
  269. // points
  270. player.inGrindZonePoints = 0;
  271.  
  272. // hud indicator
  273. player.grndHUDText = player createFontString( "small", 1.6 );
  274. player.grndHUDText setPoint( "TOP LEFT", "TOP LEFT", 115, 22 );
  275. player.grndHUDText.alpha = 1;
  276. player.grndHUDText.hideWhenInMenu = true;
  277. level thread hideHudElementOnGameEnd( player.grndHUDText );
  278.  
  279. // hud icon
  280. player.grndHeadIcon = level.grnd_zone maps\mp\_entityheadIcons::setHeadIcon( player, "waypoint_captureneutral", (0,0,0), 14, 14, undefined, undefined, undefined, undefined, undefined, false );
  281.  
  282. // minimap waypoint
  283. player.grndObjId = maps\mp\gametypes\_gameobjects::getNextObjID();
  284. objective_add( player.grndObjId, "invisible", (0,0,0) );
  285. objective_player( player.grndObjId, player getEntityNumber() );
  286. Objective_OnEntity( player.grndObjId, level.grnd_zone );
  287. objective_icon( player.grndObjId, "waypoint_captureneutral" );
  288. objective_state( player.grndObjId, "active" );
  289.  
  290. if ( distance2D( level.grnd_zone.origin, player.origin ) < GRND_ZONE_TOUCH_RADIUS )
  291. {
  292. player.inGrindZone = true;
  293. player.grndHUDText setText( &"OBJECTIVES_GRND_CONFIRM" );
  294. player.grndHUDText.color = (0.6,1,0.6);
  295. player.grndHeadIcon.alpha = 0;
  296. }
  297. else
  298. {
  299. player.inGrindZone = false;
  300. player.grndHUDText setText( &"OBJECTIVES_GRND_HINT" );
  301. player.grndHUDText.color = (1,0.6,0.6);
  302. player.grndHeadIcon.alpha = 0.85;
  303. }
  304.  
  305. player.grnd_wasSpectator = false;
  306. if ( player.team == "spectator" )
  307. {
  308. player.inGrindZone = false;
  309. player.inGrindZonePoints = 0;
  310. player.grndHeadIcon.alpha = 0;
  311. player.grndHUDText.alpha = 0;
  312. player.grnd_wasSpectator = true;
  313. }
  314.  
  315. player thread grndTracking();
  316. }
  317.  
  318.  
  319. getNextZone()
  320. {
  321. pos = undefined;
  322. index = undefined;
  323.  
  324. if ( level.grnd_zones.size > 2 )
  325. {
  326. // get the distance to the current zone from all the remaining zones
  327. // set index and save furthest and closest along the way
  328. closestDistance = 999999;
  329. furthestDistance = 0;
  330. for ( i=0; i<level.grnd_zones.size; i++ )
  331. {
  332. level.grnd_zones[i].index = i;
  333. level.grnd_zones[i].distToZone = distance( level.grnd_zones[i].origin, level.grnd_zone.origin );
  334. if ( level.grnd_zones[i].distToZone > furthestDistance )
  335. furthestDistance = level.grnd_zones[i].distToZone;
  336. else if ( level.grnd_zones[i].distToZone < closestDistance )
  337. closestDistance = level.grnd_zones[i].distToZone;
  338. }
  339.  
  340. // try to get a grouping of far zones to randomly choose from
  341. farZones = [];
  342. closeZones = [];
  343. halfDistance = int( ( closestDistance + furthestDistance ) / 2 );
  344. for ( i=0; i<level.grnd_zones.size; i++ )
  345. {
  346. if ( level.grnd_zones[i].distToZone >= halfDistance )
  347. farZones[farZones.size] = level.grnd_zones[i];
  348. else
  349. closeZones[closeZones.size] = level.grnd_zones[i];
  350. }
  351. zone = undefined;
  352. if ( farZones.size > 1 )
  353. zone = farZones[ randomIntRange( 0, farZones.size ) ];
  354. else
  355. zone = farZones[0];
  356. index = zone.index;
  357. }
  358. else if ( level.grnd_zones.size == 2 )
  359. {
  360. distanceA = distance( level.grnd_zones[0].origin, level.grnd_zone.origin );
  361. distanceB = distance( level.grnd_zones[1].origin, level.grnd_zone.origin );
  362. if ( distanceA > distanceB )
  363. index = 0;
  364. else
  365. index = 1;
  366. }
  367. else if ( level.grnd_zones.size == 1 )
  368. {
  369. index = 0;
  370. }
  371.  
  372. if ( isDefined( index ) )
  373. {
  374. pos = level.grnd_zones[index].origin;
  375. level.grnd_zones[index] delete();
  376. level.grnd_zones[index] = undefined;
  377. level.grnd_zones = array_removeUndefined( level.grnd_zones );
  378. }
  379. else
  380. {
  381. // start all over
  382. pos = level.grnd_dropZones[level.script][level.grnd_initialIndex];
  383. level thread initZones();
  384. }
  385.  
  386. return pos;
  387. }
  388.  
  389.  
  390. cycleZones()
  391. {
  392. level endon( "game_ended" );
  393.  
  394. gameFlagWait( "prematch_done" );
  395.  
  396. while( true )
  397. {
  398. initialScores["axis"] = game["teamScores"]["axis"];
  399. initialScores["allies"] = game["teamScores"]["allies"];
  400.  
  401. // move zone
  402. pos = undefined;
  403. if ( !level.zonesCycling )
  404. {
  405. level.zonesCycling = true;
  406. pos = level.grnd_zone.origin;
  407. }
  408. else
  409. {
  410. pos = getNextZone();
  411. StopFxOnTag( level.grnd_fx["smoke"], level.grnd_zone, "tag_fx" );
  412. wait( 0.05 );
  413. }
  414. traceStart = pos;
  415. traceEnd = pos + (0,0,-1000);
  416. trace = bulletTrace( traceStart, traceEnd, false, undefined );
  417. level.grnd_zone.origin = trace["position"]+(0,0,1);
  418.  
  419. // smoke
  420. wait( 0.05 );
  421. PlayFxOnTag( level.grnd_fx["smoke"], level.grnd_zone, "tag_fx" );
  422.  
  423. // reset drops
  424. if ( level.matchRules_dropTime )
  425. level thread randomDrops();
  426.  
  427. // wait
  428. level.grnd_timerDisplay.label = &"MP_NEXT_DROP_ZONE_IN";
  429. level.grnd_timerDisplay setTimer( level.matchRules_zoneSwitchTime );
  430. level.grnd_timerDisplay.alpha = 1;
  431. maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( level.matchRules_zoneSwitchTime );
  432. level.grnd_timerDisplay.alpha = 0;
  433.  
  434. // audio cue for progress
  435. if ( game["teamScores"]["axis"] - initialScores["axis"] > game["teamScores"]["allies"] - initialScores["allies"] )
  436. {
  437. playSoundOnPlayers( "mp_obj_captured", "axis" );
  438. playSoundOnPlayers( "mp_enemy_obj_captured", "allies" );
  439. }
  440. else if ( game["teamScores"]["allies"] - initialScores["allies"] > game["teamScores"]["axis"] - initialScores["axis"] )
  441. {
  442. playSoundOnPlayers( "mp_obj_captured", "allies" );
  443. playSoundOnPlayers( "mp_enemy_obj_captured", "axis" );
  444. }
  445. }
  446. }
  447.  
  448.  
  449. grndTracking()
  450. {
  451. self endon( "disconnect" );
  452. level endon( "game_ended" );
  453.  
  454. while( true )
  455. {
  456. if ( !self.grnd_wasSpectator && self.team == "spectator" )
  457. {
  458. self.inGrindZone = false;
  459. self.inGrindZonePoints = 0;
  460. self.grndHeadIcon.alpha = 0;
  461. self.grndHUDText.alpha = 0;
  462. self.grnd_wasSpectator = true;
  463. }
  464. else if ( self.team != "spectator" )
  465. {
  466. if ( ( self.grnd_wasSpectator || !self.inGrindZone ) && distance2D( level.grnd_zone.origin, self.origin ) < GRND_ZONE_TOUCH_RADIUS )
  467. {
  468. self.inGrindZone = true;
  469. self.inGrindZonePoints = 0;
  470. self.grndHUDText setText( &"OBJECTIVES_GRND_CONFIRM" );
  471. self.grndHUDText.color = (0.6,1,0.6);
  472. self.grndHUDText.alpha = 1;
  473. self.grndHeadIcon.alpha = 0;
  474. }
  475. else if ( ( self.grnd_wasSpectator || self.inGrindZone ) && distance2D( level.grnd_zone.origin, self.origin ) >= GRND_ZONE_TOUCH_RADIUS )
  476. {
  477. self.inGrindZone = false;
  478. self.inGrindZonePoints = 0;
  479. self.grndHUDText setText( &"OBJECTIVES_GRND_HINT" );
  480. self.grndHUDText.color = (1,0.6,0.6);
  481. self.grndHUDText.alpha = 1;
  482. self.grndHeadIcon.alpha = 0.85;
  483. }
  484. self.grnd_wasSpectator = false;
  485. }
  486.  
  487. wait( 0.05 );
  488. }
  489. }
  490.  
  491.  
  492. locationScoring()
  493. {
  494. level endon( "game_ended" );
  495.  
  496. gameFlagWait( "prematch_done" );
  497.  
  498. score = maps\mp\gametypes\_rank::getScoreInfoValue( "zone_tick" );
  499. assert( isDefined( score ) );
  500.  
  501. while( true )
  502. {
  503. numPlayers["axis"] = 0;
  504. numPlayers["allies"] = 0;
  505.  
  506. // score
  507. foreach( player in level.players )
  508. {
  509. if ( isDefined( player.inGrindZone ) && isAlive( player ) && distance2D( level.grnd_zone.origin, player.origin ) < GRND_ZONE_TOUCH_RADIUS )
  510. {
  511. numPlayers[player.pers["team"]]++;
  512. player.inGrindZonePoints += score;
  513. }
  514. }
  515. if ( numPlayers["axis"] )
  516. maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( "axis", score * numPlayers["axis"] );
  517. if ( numPlayers["allies"] )
  518. maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( "allies", score * numPlayers["allies"] );
  519.  
  520. // waypoints and compasspings
  521. if ( numPlayers["axis"] == numPlayers["allies"] )
  522. {
  523. foreach( player in level.players )
  524. {
  525. if ( isDefined( player.inGrindZone ) )
  526. {
  527. player.grndHeadIcon setShader( "waypoint_captureneutral", 14, 14 );
  528. player.grndHeadIcon setWaypoint( false, false, false, false );
  529. objective_icon( player.grndObjId, "waypoint_captureneutral" );
  530. }
  531. }
  532. }
  533. else
  534. {
  535. foreach( player in level.players )
  536. {
  537. if ( isDefined( player.inGrindZone ) )
  538. {
  539. if ( numPlayers[player.pers["team"]] > numPlayers[level.otherTeam[player.pers["team"]]] )
  540. {
  541. player.grndHeadIcon setShader( "waypoint_defend", 14, 14 );
  542. player.grndHeadIcon setWaypoint( false, false, false, false );
  543. objective_icon( player.grndObjId, "waypoint_defend" );
  544. }
  545. else
  546. {
  547. player.grndHeadIcon setShader( "waypoint_capture", 14, 14 );
  548. player.grndHeadIcon setWaypoint( false, false, false, false );
  549. objective_icon( player.grndObjId, "waypoint_capture" );
  550. }
  551. }
  552. }
  553. }
  554.  
  555. // wait
  556. maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( 1.0 );
  557. }
  558. }
  559.  
  560. randomDrops()
  561. {
  562. level endon( "game_ended" );
  563. level notify( "reset_grnd_drops" );
  564. level endon( "reset_grnd_drops" );
  565.  
  566. // try for no repeats per zone
  567. level.grnd_previousCrateTypes = [];
  568.  
  569. while( true )
  570. {
  571. owner = getBestPlayer();
  572. numIncomingVehicles = 1;
  573. if( isDefined( owner ) &&
  574. currentActiveVehicleCount() < maxVehiclesAllowed() &&
  575. level.fauxVehicleCount + numIncomingVehicles < maxVehiclesAllowed() &&
  576. level.numDropCrates < 8 )
  577. {
  578. owner thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_EARNED_CAREPACKAGE" );
  579. thread teamPlayerCardSplash( "callout_earned_carepackage", owner );
  580. owner thread leaderDialog( level.otherTeam[ owner.team ] + "_enemy_airdrop_assault_inbound", level.otherTeam[ owner.team ] );
  581. owner thread leaderDialog( owner.team + "_friendly_airdrop_assault_inbound", owner.team );
  582. playSoundOnPlayers( "mp_war_objective_taken", owner.team );
  583. playSoundOnPlayers( "mp_war_objective_lost", level.otherTeam[owner.team] );
  584.  
  585. position = level.grnd_zone.origin + ( randomIntRange( (-1*GRND_ZONE_DROP_RADIUS), GRND_ZONE_DROP_RADIUS ), randomIntRange( (-1*GRND_ZONE_DROP_RADIUS), GRND_ZONE_DROP_RADIUS ), 0 );
  586.  
  587. crateType = getDropZoneCrateType();
  588. if ( isSubStr( toLower( crateType ), "juggernaut" ) )
  589. {
  590. level thread maps\mp\killstreaks\_airdrop::doC130FlyBy( owner, position, randomFloat( 360 ), crateType );
  591. }
  592. else if ( crateType == "mega" )
  593. {
  594. level thread maps\mp\killstreaks\_airdrop::doMegaC130FlyBy( owner, position, randomFloat( 360 ), "airdrop_grnd", -360 );
  595. }
  596. else
  597. {
  598. level thread maps\mp\killstreaks\_airdrop::doFlyBy( owner, position, randomFloat( 360 ), "airdrop_grnd", 0, crateType );
  599. }
  600.  
  601. waitTime = level.matchRules_dropTime;
  602. }
  603. else
  604. waitTime = 0.5;
  605.  
  606. maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( waitTime );
  607. }
  608. }
  609.  
  610.  
  611. getBestPlayer()
  612. {
  613. bestPlayer = undefined;
  614. bestPlayerPoints = 0;
  615.  
  616. // find the player with the currently highest accumulated points in the zone
  617. foreach ( player in level.players )
  618. {
  619. if ( isAlive( player ) )
  620. {
  621. if ( distance2D( level.grnd_zone.origin, player.origin ) < GRND_ZONE_TOUCH_RADIUS && player.inGrindZonePoints > bestPlayerPoints )
  622. {
  623. bestPlayer = player;
  624. bestPlayerPoints = player.inGrindZonePoints;
  625. }
  626. }
  627. }
  628.  
  629. // may return undefined
  630. return bestPlayer;
  631. }
  632.  
  633.  
  634. getDropZoneCrateType()
  635. {
  636. crateType = undefined;
  637. if ( !isDefined( level.grnd_previousCrateTypes["mega"] ) && level.numDropCrates == 0 && randomIntRange( 0, 100 ) < 5 )
  638. {
  639. crateType = "mega";
  640. }
  641. else
  642. {
  643. if ( level.grnd_previousCrateTypes.size )
  644. {
  645. maxTries = 200;
  646. while( maxTries )
  647. {
  648. crateType = maps\mp\killstreaks\_airdrop::getRandomCrateType( "airdrop_grnd" );
  649. if ( isDefined( level.grnd_previousCrateTypes[crateType] ) )
  650. crateType = undefined;
  651. else
  652. break;
  653.  
  654. maxTries--;
  655. }
  656. }
  657.  
  658. if ( !isDefined( crateType ) )
  659. crateType = maps\mp\killstreaks\_airdrop::getRandomCrateType( "airdrop_grnd" );
  660. }
  661.  
  662. // track it
  663. level.grnd_previousCrateTypes[crateType] = 1;
  664. if ( level.grnd_previousCrateTypes.size == 15 )
  665. level.grnd_previousCrateTypes = [];
  666.  
  667. return crateType;
  668. }
  669.  
  670.  
  671. hideHudElementOnGameEnd( hudElement )
  672. {
  673. level waittill("game_ended");
  674. hudElement.alpha = 0;
  675. }
  676.  
  677.  
  678. createZones()
  679. {
  680. level.grnd_dropZones = [];
  681.  
  682. // future way
  683. dropZones = getEntArray( "grnd_dropZone", "targetname" );
  684. if ( isDefined( dropZones ) && dropZones.size )
  685. {
  686. i=0;
  687. foreach ( dropZone in dropZones )
  688. {
  689. level.grnd_dropZones[level.script][i] = dropZone.origin;
  690. i++;
  691. }
  692. }
  693. else
  694. {
  695. // current way
  696. level.grnd_dropZones["mp_seatown"][0] = (-1226, -1399, 204);
  697. level.grnd_dropZones["mp_seatown"][1] = (1048, 886, 228);
  698. level.grnd_dropZones["mp_seatown"][2] = (-1982, 1494, 229);
  699. level.grnd_dropZones["mp_seatown"][3] = (-2297, -855, 210);
  700. level.grnd_dropZones["mp_seatown"][4] = (-2261, -334, 248);
  701. level.grnd_dropZones["mp_seatown"][5] = (-2048, 512, 248);
  702. level.grnd_dropZones["mp_seatown"][6] = (-1439, 1065, 72);
  703. level.grnd_dropZones["mp_seatown"][7] = (-410, 982, 127);
  704. level.grnd_dropZones["mp_seatown"][8] = (-666, -217, 226);
  705. level.grnd_dropZones["mp_seatown"][9] = (-523, -875, 260);
  706. level.grnd_dropZones["mp_seatown"][10] = (-345, -1449, 254);
  707. level.grnd_dropZones["mp_seatown"][11] = (1167, -533, 294);
  708. level.grnd_dropZones["mp_seatown"][12] = (367, 991, 179);
  709. level.grnd_dropZones["mp_seatown"][13] = (1106, 219, 292);
  710.  
  711. level.grnd_dropZones["mp_dome"][0] = (97, 898, -240);
  712. level.grnd_dropZones["mp_dome"][1] = (-226, 1464, -231);
  713. level.grnd_dropZones["mp_dome"][2] = (-603, 194, -358);
  714. level.grnd_dropZones["mp_dome"][3] = (814, -406, -335);
  715. level.grnd_dropZones["mp_dome"][4] = (5, 1975, -231);
  716. level.grnd_dropZones["mp_dome"][5] = (-673, 1100, -284);
  717. level.grnd_dropZones["mp_dome"][6] = (669, 1028, -255);
  718. level.grnd_dropZones["mp_dome"][7] = (1231, 807, -267);
  719. level.grnd_dropZones["mp_dome"][8] = (709, 210, -342);
  720. level.grnd_dropZones["mp_dome"][9] = (1223, 10, -336);
  721. level.grnd_dropZones["mp_dome"][10] = (-222, 418, -333);
  722. level.grnd_dropZones["mp_dome"][11] = (501, -183, -330);
  723.  
  724. level.grnd_dropZones["mp_plaza2"][0] = (221, 440, 754);
  725. level.grnd_dropZones["mp_plaza2"][1] = (155, 1763, 668);
  726. level.grnd_dropZones["mp_plaza2"][2] = (-430, 1871, 691);
  727. level.grnd_dropZones["mp_plaza2"][3] = (-1190, 1759, 668);
  728. level.grnd_dropZones["mp_plaza2"][4] = (-1273, 1279, 829);
  729. level.grnd_dropZones["mp_plaza2"][5] = (-593, 1274, 676);
  730. level.grnd_dropZones["mp_plaza2"][6] = (-251, 1006, 722);
  731. level.grnd_dropZones["mp_plaza2"][7] = (80, 1343, 676);
  732. level.grnd_dropZones["mp_plaza2"][8] = (397, -99, 708);
  733. level.grnd_dropZones["mp_plaza2"][9] = (-1109, 92, 741);
  734. level.grnd_dropZones["mp_plaza2"][10] = (-280, -195, 700);
  735. level.grnd_dropZones["mp_plaza2"][11] = (28, -1600, 668);
  736. level.grnd_dropZones["mp_plaza2"][12] = (764, -1752, 669);
  737.  
  738. level.grnd_dropZones["mp_mogadishu"][0] = (1448, 1945, 39);
  739. level.grnd_dropZones["mp_mogadishu"][1] = (1499, -1193, 15);
  740. level.grnd_dropZones["mp_mogadishu"][2] = (791, -880, 16);
  741. level.grnd_dropZones["mp_mogadishu"][3] = (38, -1007, 16);
  742. level.grnd_dropZones["mp_mogadishu"][4] = (-691, -260, 22);
  743. level.grnd_dropZones["mp_mogadishu"][5] = (2, 52, 2);
  744. level.grnd_dropZones["mp_mogadishu"][6] = (664, 69, 12);
  745. level.grnd_dropZones["mp_mogadishu"][7] = (1676, 251, -1);
  746. level.grnd_dropZones["mp_mogadishu"][8] = (2314, 1860, 63);
  747. level.grnd_dropZones["mp_mogadishu"][9] = (73, 858, 3);
  748. level.grnd_dropZones["mp_mogadishu"][10] = (710, 837, 16);
  749. level.grnd_dropZones["mp_mogadishu"][11] = (-549, 829, 2);
  750. level.grnd_dropZones["mp_mogadishu"][12] = (34, 1850, 84);
  751. level.grnd_dropZones["mp_mogadishu"][13] = (-778, 2614, 157);
  752. level.grnd_dropZones["mp_mogadishu"][14] = (-204, 3206, 152);
  753. level.grnd_dropZones["mp_mogadishu"][15] = (752, 3189, 148);
  754. level.grnd_dropZones["mp_mogadishu"][16] = (692, 2354, 95);
  755.  
  756. level.grnd_dropZones["mp_paris"][0] = (-931, -921, 110);
  757. level.grnd_dropZones["mp_paris"][1] = (1597, 1768, 47);
  758. level.grnd_dropZones["mp_paris"][2] = (716, 1809, 33);
  759. level.grnd_dropZones["mp_paris"][3] = (258, 2074, 36);
  760. level.grnd_dropZones["mp_paris"][4] = (459, 1067, 37);
  761. level.grnd_dropZones["mp_paris"][5] = (852, 1350, 118);
  762. level.grnd_dropZones["mp_paris"][6] = (1601, 897, 45);
  763. level.grnd_dropZones["mp_paris"][7] = (1286, 420, 41);
  764. level.grnd_dropZones["mp_paris"][8] = (1613, 181, 172);
  765. level.grnd_dropZones["mp_paris"][9] = (466, -752, 67);
  766. level.grnd_dropZones["mp_paris"][10] = (994, -625, 50);
  767. level.grnd_dropZones["mp_paris"][11] = (-211, -60, 63);
  768. level.grnd_dropZones["mp_paris"][12] = (-742, 177, 133);
  769. level.grnd_dropZones["mp_paris"][13] = (-1532, 100, 250);
  770. level.grnd_dropZones["mp_paris"][14] = (-343, 1922, 121);
  771. level.grnd_dropZones["mp_paris"][15] = (-1127, 1555, 284);
  772. level.grnd_dropZones["mp_paris"][16] = (-2025, 1327, 316);
  773. level.grnd_dropZones["mp_paris"][17] = (-1039, 841, 187);
  774.  
  775. level.grnd_dropZones["mp_exchange"][0] = (-614, 1286, 113);
  776. level.grnd_dropZones["mp_exchange"][1] = (182, 1155, 148);
  777. level.grnd_dropZones["mp_exchange"][2] = (1018, 1254, 120);
  778. level.grnd_dropZones["mp_exchange"][3] = (2182, 1322, 145);
  779. level.grnd_dropZones["mp_exchange"][4] = (655, 815, 13);
  780. level.grnd_dropZones["mp_exchange"][5] = (761, -312, -18);
  781. level.grnd_dropZones["mp_exchange"][6] = (761, -771, 112);
  782. level.grnd_dropZones["mp_exchange"][7] = (635, -1450, 110);
  783. level.grnd_dropZones["mp_exchange"][8] = (152, -1538, 96);
  784. level.grnd_dropZones["mp_exchange"][9] = (303, -824, 88);
  785. level.grnd_dropZones["mp_exchange"][10] = (-953, -768, 45);
  786. level.grnd_dropZones["mp_exchange"][11] = (2392, 1305, 144);
  787. level.grnd_dropZones["mp_exchange"][12] = (1634, 1329, 151);
  788. level.grnd_dropZones["mp_exchange"][13] = (1315, 743, 159);
  789.  
  790. level.grnd_dropZones["mp_bootleg"][0] = (-1432, 1404, 8);
  791. level.grnd_dropZones["mp_bootleg"][1] = (-1017, 1787, -39);
  792. level.grnd_dropZones["mp_bootleg"][2] = (-590, 1514, -43);
  793. level.grnd_dropZones["mp_bootleg"][3] = (-588, 614, -12);
  794. level.grnd_dropZones["mp_bootleg"][4] = (-1732, 84, 11);
  795. level.grnd_dropZones["mp_bootleg"][5] = (-1809, -302, 140);
  796. level.grnd_dropZones["mp_bootleg"][6] = (-1649, -1147, 92);
  797. level.grnd_dropZones["mp_bootleg"][7] = (-884, -1035, -4);
  798. level.grnd_dropZones["mp_bootleg"][8] = (-719, -1673, 60);
  799. level.grnd_dropZones["mp_bootleg"][9] = (-335, -2111, 60);
  800. level.grnd_dropZones["mp_bootleg"][10] = (208, -1955, 68);
  801. level.grnd_dropZones["mp_bootleg"][11] = (-198, -1726, 60);
  802. level.grnd_dropZones["mp_bootleg"][12] = (100, -1101, -9);
  803. level.grnd_dropZones["mp_bootleg"][13] = (-427, -100, -8);
  804. level.grnd_dropZones["mp_bootleg"][14] = (949, -1132, -10);
  805. level.grnd_dropZones["mp_bootleg"][15] = (884, 1182, -28);
  806. level.grnd_dropZones["mp_bootleg"][16] = (242, 1194, -45);
  807.  
  808. level.grnd_dropZones["mp_carbon"][0] = (-3330, -3392, 3630);
  809. level.grnd_dropZones["mp_carbon"][1] = (-3635, -3735, 3630);
  810. level.grnd_dropZones["mp_carbon"][2] = (-3625, -4189, 3633);
  811. level.grnd_dropZones["mp_carbon"][3] = (-2992, -4339, 3627);
  812. level.grnd_dropZones["mp_carbon"][4] = (-2925, -4999, 3673);
  813. level.grnd_dropZones["mp_carbon"][5] = (-2573, -4771, 3784);
  814. level.grnd_dropZones["mp_carbon"][6] = (-1705, -4643, 3813);
  815. level.grnd_dropZones["mp_carbon"][7] = (-1799, -3957, 3813);
  816. level.grnd_dropZones["mp_carbon"][8] = (-2141, -3647, 3815);
  817. level.grnd_dropZones["mp_carbon"][9] = (-3212, -2879, 3807);
  818. level.grnd_dropZones["mp_carbon"][10] = (-1623, -3339, 3808);
  819. level.grnd_dropZones["mp_carbon"][11] = (-1223, -4234, 3834);
  820. level.grnd_dropZones["mp_carbon"][12] = (-896, -4888, 3944);
  821. level.grnd_dropZones["mp_carbon"][13] = (-228, -4535, 3975);
  822. level.grnd_dropZones["mp_carbon"][14] = (-257, -3865, 3956);
  823. level.grnd_dropZones["mp_carbon"][15] = (-215, -3260, 3967);
  824. level.grnd_dropZones["mp_carbon"][16] = (-535, -3798, 3966);
  825.  
  826. level.grnd_dropZones["mp_hardhat"][0] = (2035, -229, 246);
  827. level.grnd_dropZones["mp_hardhat"][1] = (1959, -772, 352);
  828. level.grnd_dropZones["mp_hardhat"][2] = (1883, -1384, 351);
  829. level.grnd_dropZones["mp_hardhat"][3] = (848, -1520, 334);
  830. level.grnd_dropZones["mp_hardhat"][4] = (1326, -1380, 342);
  831. level.grnd_dropZones["mp_hardhat"][5] = (-338, -1273, 348);
  832. level.grnd_dropZones["mp_hardhat"][6] = (-821, -884, 348);
  833. level.grnd_dropZones["mp_hardhat"][7] = (-920, -290, 230);
  834. level.grnd_dropZones["mp_hardhat"][8] = (-463, -250, 333);
  835. level.grnd_dropZones["mp_hardhat"][9] = (-741, 208, 245);
  836. level.grnd_dropZones["mp_hardhat"][10] = (-201, 806, 437);
  837. level.grnd_dropZones["mp_hardhat"][11] = (224, 980, 436);
  838. level.grnd_dropZones["mp_hardhat"][12] = (1125, 656, 255);
  839. level.grnd_dropZones["mp_hardhat"][13] = (1531, 1241, 364);
  840. level.grnd_dropZones["mp_hardhat"][14] = (1522, 542, 244);
  841.  
  842. level.grnd_dropZones["mp_alpha"][0] = (-1979, 1653, 148);
  843. level.grnd_dropZones["mp_alpha"][1] = (-1392, 1623, 60);
  844. level.grnd_dropZones["mp_alpha"][2] = (-1697, 1205, 52);
  845. level.grnd_dropZones["mp_alpha"][3] = (-1671, 692, 54);
  846. level.grnd_dropZones["mp_alpha"][4] = (-572, -272, 55);
  847. level.grnd_dropZones["mp_alpha"][5] = (634, -345, 52);
  848. level.grnd_dropZones["mp_alpha"][6] = (391, 121, 60);
  849. level.grnd_dropZones["mp_alpha"][7] = (291, 1271, 60);
  850. level.grnd_dropZones["mp_alpha"][8] = (-459, 868, 52);
  851. level.grnd_dropZones["mp_alpha"][9] = (-353, 1334, 52);
  852. level.grnd_dropZones["mp_alpha"][10] = (-37, 1637, 52);
  853. level.grnd_dropZones["mp_alpha"][11] = (-5, 2226, 52);
  854. level.grnd_dropZones["mp_alpha"][12] = (-407, 2198, 196);
  855.  
  856. level.grnd_dropZones["mp_village"][0] = (647, 1891, 332);
  857. level.grnd_dropZones["mp_village"][1] = (-26, 1749, 334);
  858. level.grnd_dropZones["mp_village"][2] = (104, 1292, 323);
  859. level.grnd_dropZones["mp_village"][3] = (-1064, 1552, 322);
  860. level.grnd_dropZones["mp_village"][4] = (-599, 886, 378);
  861. level.grnd_dropZones["mp_village"][5] = (-1038, 569, 317);
  862. level.grnd_dropZones["mp_village"][6] = (-1899, 1217, 336);
  863. level.grnd_dropZones["mp_village"][7] = (-1540, 289, 304);
  864. level.grnd_dropZones["mp_village"][8] = (-454, -277, 270);
  865. level.grnd_dropZones["mp_village"][9] = (-1734, -790, 365);
  866. level.grnd_dropZones["mp_village"][10] = (-1418, -1371, 431);
  867. level.grnd_dropZones["mp_village"][11] = (-928, -749, 417);
  868. level.grnd_dropZones["mp_village"][12] = (-861, -2105, 408);
  869. level.grnd_dropZones["mp_village"][13] = (-191, -1550, 400);
  870. level.grnd_dropZones["mp_village"][14] = (357, -678, 245);
  871. level.grnd_dropZones["mp_village"][15] = (-216, 295, 223);
  872. level.grnd_dropZones["mp_village"][16] = (162, -199, 229);
  873. level.grnd_dropZones["mp_village"][17] = (179, -3052, 447);
  874. level.grnd_dropZones["mp_village"][18] = (510, -1790, 375);
  875. level.grnd_dropZones["mp_village"][19] = (1089, -615, 398);
  876. level.grnd_dropZones["mp_village"][20] = (1631, 394, 297);
  877. level.grnd_dropZones["mp_village"][21] = (1007, 1385, 337);
  878. level.grnd_dropZones["mp_village"][22] = (992, 248, 330);
  879. level.grnd_dropZones["mp_village"][23] = (551, 732, 386);
  880.  
  881. level.grnd_dropZones["mp_lambeth"][0] = (-293, -1286, -180);
  882. level.grnd_dropZones["mp_lambeth"][1] = (-938, -785, -130);
  883. level.grnd_dropZones["mp_lambeth"][2] = (-375, -250, -187);
  884. level.grnd_dropZones["mp_lambeth"][3] = (-355, 409, -196);
  885. level.grnd_dropZones["mp_lambeth"][4] = (161, -5, -181);
  886. level.grnd_dropZones["mp_lambeth"][5] = (682, -407, -197);
  887. level.grnd_dropZones["mp_lambeth"][6] = (694, 263, -196);
  888. level.grnd_dropZones["mp_lambeth"][7] = (690, 1158, -243);
  889. level.grnd_dropZones["mp_lambeth"][8] = (1181, 801, -67);
  890. level.grnd_dropZones["mp_lambeth"][9] = (1281, 1248, -257);
  891. level.grnd_dropZones["mp_lambeth"][10] = (2057, 757, -249);
  892. level.grnd_dropZones["mp_lambeth"][11] = (1470, -1040, -109);
  893. level.grnd_dropZones["mp_lambeth"][12] = (1761, -258, -210);
  894. level.grnd_dropZones["mp_lambeth"][13] = (2800, -652, -186);
  895. level.grnd_dropZones["mp_lambeth"][14] = (2785, 445, -244);
  896. level.grnd_dropZones["mp_lambeth"][15] = (2751, 1090, -263);
  897. level.grnd_dropZones["mp_lambeth"][16] = (1535, 1980, -214);
  898. level.grnd_dropZones["mp_lambeth"][17] = (1262, 2602, -213);
  899. level.grnd_dropZones["mp_lambeth"][18] = (419, 2218, -183);
  900. level.grnd_dropZones["mp_lambeth"][19] = (170, 1631, -182);
  901. level.grnd_dropZones["mp_lambeth"][20] = (-606, 1549, -201);
  902. level.grnd_dropZones["mp_lambeth"][21] = (-1199, 1030, -196);
  903.  
  904. level.grnd_dropZones["mp_radar"][0] = (-3482, -498, 1222);
  905. level.grnd_dropZones["mp_radar"][1] = (-4263, -124, 1229);
  906. level.grnd_dropZones["mp_radar"][2] = (-4006, 827, 1238);
  907. level.grnd_dropZones["mp_radar"][3] = (-3375, 342, 1222);
  908. level.grnd_dropZones["mp_radar"][4] = (-4623, 531, 1298);
  909. level.grnd_dropZones["mp_radar"][5] = (-5157, 877, 1200);
  910. level.grnd_dropZones["mp_radar"][6] = (-5950, 1071, 1305);
  911. level.grnd_dropZones["mp_radar"][7] = (-6509, 1660, 1299);
  912. level.grnd_dropZones["mp_radar"][8] = (-7013, 2955, 1359);
  913. level.grnd_dropZones["mp_radar"][9] = (-6333, 3473, 1421);
  914. level.grnd_dropZones["mp_radar"][10] = (-5675, 2923, 1388);
  915. level.grnd_dropZones["mp_radar"][11] = (-7119, 4357, 1380);
  916. level.grnd_dropZones["mp_radar"][12] = (-5487, 4077, 1356);
  917. level.grnd_dropZones["mp_radar"][13] = (-5736, 2960, 1407);
  918. level.grnd_dropZones["mp_radar"][14] = (-4908, 3281, 1225);
  919. level.grnd_dropZones["mp_radar"][15] = (-4421, 4071, 1268);
  920. level.grnd_dropZones["mp_radar"][16] = (-4979, 1816, 1205);
  921. level.grnd_dropZones["mp_radar"][17] = (-4874, 2306, 1223);
  922.  
  923. level.grnd_dropZones["mp_interchange"][0] = (2465, -402, 149);
  924. level.grnd_dropZones["mp_interchange"][1] = (2128, 199, 68);
  925. level.grnd_dropZones["mp_interchange"][2] = (1280, 1263, 126);
  926. level.grnd_dropZones["mp_interchange"][3] = (762, 1747, 114);
  927. level.grnd_dropZones["mp_interchange"][4] = (-9, 1836, 38);
  928. level.grnd_dropZones["mp_interchange"][5] = (-284, 1171, 159);
  929. level.grnd_dropZones["mp_interchange"][6] = (-1028, 944, 31);
  930. level.grnd_dropZones["mp_interchange"][7] = (-256, 264, 126);
  931. level.grnd_dropZones["mp_interchange"][8] = (462, -463, 158);
  932. level.grnd_dropZones["mp_interchange"][9] = (1029, -1045, 179);
  933. level.grnd_dropZones["mp_interchange"][10] = (1760, -1434, 142);
  934. level.grnd_dropZones["mp_interchange"][11] = (1538, -361, 142);
  935. level.grnd_dropZones["mp_interchange"][12] = (1150, -2977, 171);
  936. level.grnd_dropZones["mp_interchange"][13] = (371, -2883, 209);
  937. level.grnd_dropZones["mp_interchange"][14] = (399, -2149, 220);
  938.  
  939. level.grnd_dropZones["mp_underground"][0] = (-602, 3072, -68);
  940. level.grnd_dropZones["mp_underground"][1] = (-285, 2551, -215);
  941. level.grnd_dropZones["mp_underground"][2] = (574, 2656, -40);
  942. level.grnd_dropZones["mp_underground"][3] = (-627, 1579, -196);
  943. level.grnd_dropZones["mp_underground"][4] = (28, 1556, -196);
  944. level.grnd_dropZones["mp_underground"][5] = (727, 1615, -196);
  945. level.grnd_dropZones["mp_underground"][6] = (-1491, 1268, -196);
  946. level.grnd_dropZones["mp_underground"][7] = (-1370, 1757, -196);
  947. level.grnd_dropZones["mp_underground"][8] = (-1259, 599, -156);
  948. level.grnd_dropZones["mp_underground"][9] = (-959, -26, 60);
  949. level.grnd_dropZones["mp_underground"][10] = (-303, -562, 60);
  950. level.grnd_dropZones["mp_underground"][11] = (193, -922, 60);
  951. level.grnd_dropZones["mp_underground"][12] = (305, 817, -68);
  952. level.grnd_dropZones["mp_underground"][13] = (-276, 370, -68);
  953.  
  954. level.grnd_dropZones["mp_bravo"][0] = (-1359, 608, 975);
  955. level.grnd_dropZones["mp_bravo"][1] = (-1686, 313, 991);
  956. level.grnd_dropZones["mp_bravo"][2] = (-1228, 41, 976);
  957. level.grnd_dropZones["mp_bravo"][3] = (-732, -715, 1032);
  958. level.grnd_dropZones["mp_bravo"][4] = (31, -771, 1038);
  959. level.grnd_dropZones["mp_bravo"][5] = (986, -833, 1116);
  960. level.grnd_dropZones["mp_bravo"][6] = (1800, -577, 1229);
  961. level.grnd_dropZones["mp_bravo"][7] = (1588, -55, 1181);
  962. level.grnd_dropZones["mp_bravo"][8] = (619, 916, 1175);
  963. level.grnd_dropZones["mp_bravo"][9] = (-129, 1310, 1228);
  964. level.grnd_dropZones["mp_bravo"][10] = (-726, 1272, 1268);
  965. level.grnd_dropZones["mp_bravo"][11] = (-741, 752, 1053);
  966. level.grnd_dropZones["mp_bravo"][12] = (6, -136, 1282);
  967. }
  968. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement