Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.17 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4. /*
  5. Global Thermal Nuclear War
  6. */
  7.  
  8. /*QUAKED mp_ctf_spawn_axis (0.75 0.0 0.5) (-16 -16 0) (16 16 72)
  9. Axis players spawn away from enemies and near their team at one of these positions.*/
  10.  
  11. /*QUAKED mp_ctf_spawn_allies (0.0 0.75 0.5) (-16 -16 0) (16 16 72)
  12. Allied players spawn away from enemies and near their team at one of these positions.*/
  13.  
  14. /*QUAKED mp_ctf_spawn_axis_start (1.0 0.0 0.5) (-16 -16 0) (16 16 72)
  15. Axis players spawn away from enemies and near their team at one of these positions at the start of a round.*/
  16.  
  17. /*QUAKED mp_ctf_spawn_allies_start (0.0 1.0 0.5) (-16 -16 0) (16 16 72)
  18. Allied players spawn away from enemies and near their team at one of these positions at the start of a round.*/
  19.  
  20. main()
  21. {
  22. maps\mp\gametypes\_globallogic::init();
  23. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  24. maps\mp\gametypes\_globallogic::SetupCallbacks();
  25.  
  26. registerTimeLimitDvar( level.gameType, 3, 0, 1440 );
  27. registerScoreLimitDvar( level.gameType, 101, 0, 10000 );
  28. registerRoundLimitDvar( level.gameType, 1, 0, 30 );
  29. registerWinLimitDvar( level.gameType, 1, 0, 10 );
  30. registerRoundSwitchDvar( level.gameType, 0, 0, 30 );
  31. registerNumLivesDvar( level.gameType, 0, 0, 10 );
  32. registerHalfTimeDvar( level.gameType, 0, 0, 1 );
  33.  
  34. level.teamBased = true;
  35. level.onPrecacheGameType = ::onPrecacheGameType;
  36. level.onStartGameType = ::onStartGameType;
  37. level.getSpawnPoint = ::getSpawnPoint;
  38. level.onDeadEvent = ::onDeadEvent;
  39. level.initGametypeAwards = ::initGametypeAwards;
  40. level.onTimeLimit = ::onTimeLimit;
  41. level.onNormalDeath = ::onNormalDeath;
  42. level.gtnw = true;
  43.  
  44. game["dialog"]["gametype"] = "gtw";
  45.  
  46. if ( getDvarInt( "g_hardcore" ) )
  47. game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
  48. else if ( getDvarInt( "camera_thirdPerson" ) )
  49. game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
  50. else if ( getDvarInt( "scr_diehard" ) )
  51. game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
  52. else if (getDvarInt( "scr_" + level.gameType + "_promode" ) )
  53. game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
  54.  
  55. game["dialog"]["offense_obj"] = "obj_destroy";
  56. game["dialog"]["defense_obj"] = "obj_defend";
  57. level thread onPlayerConnect();
  58. }
  59.  
  60. gtnw_endGame( winningTeam, endReasonText )
  61. {
  62. thread maps\mp\gametypes\_gamelogic::endGame( winningTeam, endReasonText );
  63. }
  64.  
  65.  
  66. onPlayerConnect()
  67. {
  68. for(;;)
  69. {
  70. level waittill( "connected", player );
  71.  
  72. useBar = player createPrimaryProgressBar();
  73. useBarText = player createPrimaryProgressBarText();
  74. useBarText setText( &"MP_CAPTURING_NUKE" );
  75.  
  76. useBar.useTime = 100;
  77. player.useBar = useBar;
  78. player.useBar hideElem();
  79. player.useBarText = useBarText;
  80. player.useBarText hideElem();
  81. }
  82. }
  83.  
  84.  
  85. onStartGameType()
  86. {
  87. if ( !isdefined( game["switchedsides"] ) )
  88. game["switchedsides"] = false;
  89.  
  90. if ( !isdefined( game["original_defenders"] ) )
  91. game["original_defenders"] = game["defenders"];
  92.  
  93. if ( game["switchedsides"] )
  94. {
  95. oldAttackers = game["attackers"];
  96. oldDefenders = game["defenders"];
  97. game["attackers"] = oldDefenders;
  98. game["defenders"] = oldAttackers;
  99. }
  100.  
  101. setClientNameMode("auto_change");
  102.  
  103.  
  104. if ( level.splitscreen )
  105. {
  106. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_GTNW" );
  107. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_GTNW" );
  108. }
  109. else
  110. {
  111. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_GTNW_SCORE" );
  112. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_GTNW_SCORE" );
  113. }
  114.  
  115. setObjectiveText( game["attackers"], &"OBJECTIVES_GTNW" );
  116. setObjectiveText( game["defenders"], &"OBJECTIVES_GTNW" );
  117.  
  118. setObjectiveHintText( game["attackers"], &"OBJECTIVES_GTNW_HINT" );
  119. setObjectiveHintText( game["defenders"], &"OBJECTIVES_GTNW_HINT" );
  120.  
  121. level.spawnMins = ( 0, 0, 0 );
  122. level.spawnMaxs = ( 0, 0, 0 );
  123. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_ctf_spawn_allies_start" );
  124. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_ctf_spawn_axis_start" );
  125. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_ctf_spawn_allies" );
  126. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_ctf_spawn_axis" );
  127.  
  128. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  129. setMapCenter( level.mapCenter );
  130.  
  131. thread maps\mp\gametypes\_dev::init();
  132.  
  133. maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 );
  134. maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 100 );
  135. maps\mp\gametypes\_rank::registerScoreInfo( "assist", 20 );
  136. maps\mp\gametypes\_rank::registerScoreInfo( "capture", 500 );
  137.  
  138. allowed[0] = "airdrop_pallet";
  139. allowed[1] = "gtnw";
  140. allowed[2] = "gtnw_zone";
  141. maps\mp\gametypes\_gameobjects::main(allowed);
  142.  
  143. thread setupNukeSite();
  144.  
  145. }
  146.  
  147. onPrecacheGameType()
  148. {
  149. precacheShader("waypoint_defend");
  150. precacheShader("waypoint_target");
  151. precacheShader("waypoint_capture");
  152. precacheShader("compass_waypoint_target");
  153. precacheShader("compass_waypoint_defend");
  154. precacheShader("compass_waypoint_capture");
  155.  
  156. precacheString( &"MP_CAPTURING_NUKE" );
  157. return;
  158. }
  159.  
  160. setupNukeSite()
  161. {
  162. level.lastStatus["allies"] = 0;
  163. level.lastStatus["axis"] = 0;
  164.  
  165. nukeZone = getEnt( "gtnw_zone", "targetname" );
  166. assertEx( isDefined( nukeZone ), "GTNW Zone prefab doesn't exist in this map" );
  167. visuals = [];
  168.  
  169. nukeSite = maps\mp\gametypes\_gameobjects::createUseObject( "neutral", nukeZone, visuals, (0,0,100) );
  170.  
  171. nukeSite maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend");
  172. nukeSite maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" );
  173.  
  174. nukeSite maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_captureneutral" );
  175. nukeSite maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_captureneutral" );
  176.  
  177. nukeSite maps\mp\gametypes\_gameobjects::allowUse( "enemy" );
  178. nukeSite.noUseBar = true;
  179. nukeSite maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  180.  
  181. nukeSite.onBeginUse = ::onBeginUse;
  182. nukeSite.onEndUse = ::onEndUse;
  183.  
  184. level.nukeSite = nukeSite;
  185. nukeSite thread scoreCounter();
  186. }
  187.  
  188.  
  189. getSpawnPoint()
  190. {
  191. if ( self.team == "axis" )
  192. {
  193. spawnTeam = game["attackers"];
  194. }
  195. else
  196. {
  197. spawnTeam = game["defenders"];
  198. }
  199.  
  200. if ( level.inGracePeriod )
  201. {
  202. spawnPoints = getentarray("mp_ctf_spawn_" + spawnteam + "_start", "classname");
  203. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  204. }
  205. else
  206. {
  207. spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( spawnteam );
  208. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  209. }
  210.  
  211. return spawnPoint;
  212. }
  213.  
  214.  
  215. spawnFxDelay( fxid, pos, forward, right, delay )
  216. {
  217. wait delay;
  218. effect = spawnFx( fxid, pos, forward, right );
  219. triggerFx( effect );
  220. }
  221.  
  222.  
  223. onDeadEvent( team )
  224. {
  225. if ( ( isDefined( level.nukeIncoming ) && level.nukeIncoming ) || ( isDefined( level.nukeDetonated ) && level.nukeDetonated ) )
  226. return;
  227.  
  228. if ( team == game["attackers"] )
  229. {
  230. maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( team, 1 );
  231. level thread gtnw_endGame( game["defenders"], game["strings"][game["attackers"]+"_eliminated"] );
  232. }
  233. else if ( team == game["defenders"] )
  234. {
  235. maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( team, 1 );
  236. level thread gtnw_endGame( game["attackers"], game["strings"][game["defenders"]+"_eliminated"] );
  237. }
  238. }
  239.  
  240. initGametypeAwards()
  241. {
  242. return;
  243. }
  244.  
  245. onTimeLimit()
  246. {
  247. if ( game["teamScores"]["allies"] == game["teamScores"]["axis"] )
  248. {
  249. level thread overtimeThread();
  250. }
  251. else if( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
  252. {
  253. thread maps\mp\gametypes\_gamelogic::endGame( "axis", game["strings"]["time_limit_reached"] );
  254. }
  255. else if( game["teamScores"]["axis"] < game["teamScores"]["allies"] )
  256. {
  257. thread maps\mp\gametypes\_gamelogic::endGame( "allies", game["strings"]["time_limit_reached"] );
  258. }
  259. }
  260.  
  261. overtimeThread( time )
  262. {
  263. level endon( "game_ended" );
  264.  
  265. level.inOvertime = true;
  266. level thread disableSpawning( 5 );
  267.  
  268. level.endGameTime = 120;
  269.  
  270. time = level.endGameTime;
  271.  
  272. foreach ( player in level.players )
  273. player thread maps\mp\gametypes\_hud_message::SplashNotify( "gtnw_overtime" );
  274.  
  275. maps\mp\gametypes\_gamelogic::pauseTimer();
  276. level.timeLimitOverride = true;
  277. setGameEndTime( int( getTime() + ( level.endGameTime * 1000 ) ) );
  278.  
  279. maps\mp\gametypes\_hostmigration::waitLongDurationWithGameEndTimeUpdate( time );
  280.  
  281. if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
  282. {
  283. thread maps\mp\gametypes\_gamelogic::endGame( "axis", game["strings"]["time_limit_reached"] );
  284. }
  285. else if ( game["teamScores"]["axis"] < game["teamScores"]["allies"] )
  286. {
  287. thread maps\mp\gametypes\_gamelogic::endGame( "allies", game["strings"]["time_limit_reached"] );
  288. }
  289. else
  290. {
  291. thread maps\mp\gametypes\_gamelogic::endGame( "tie", game["strings"]["time_limit_reached"] );
  292. }
  293.  
  294. }
  295.  
  296. disableSpawning( waitTime )
  297. {
  298. level endon( "game_ended" );
  299.  
  300. wait ( 5 );
  301. level.disableSpawning = true;
  302. }
  303.  
  304.  
  305. onBeginUse( player )
  306. {
  307. player.useBar showElem();
  308. player.useBarText showElem();
  309. return;
  310. }
  311.  
  312. onEndUse( team, player, success )
  313. {
  314. player.useBar hideElem();
  315. player.useBarText hideElem();
  316. return;
  317. }
  318.  
  319. scoreCounter()
  320. {
  321. level endon( "game_ended" );
  322. self endon( "stop_counting" );
  323.  
  324. for ( ;; )
  325. {
  326.  
  327. if ( !self.touchList["axis"].size && !self.touchlist["allies"].size )
  328. {
  329. setDvar( "ui_danger_team", "none" );
  330.  
  331. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_captureneutral" );
  332. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_captureneutral" );
  333.  
  334. self maps\mp\gametypes\_gameobjects::setOwnerTeam( "none" );
  335. self updateHudElems();
  336. wait 1;
  337. continue;
  338. }
  339.  
  340. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend");
  341. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" );
  342. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_capture" );
  343. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_capture" );
  344.  
  345. if ( self.touchList["axis"].size > self.touchList["allies"].size )
  346. {
  347. if ( maps\mp\gametypes\_gamescore::_getTeamScore( "axis" ) < 100 )
  348. maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( "axis", 1 );
  349.  
  350. self thread setUseBarScore( "axis" );
  351. setDvar( "ui_danger_team", "allies" );
  352. self maps\mp\gametypes\_gameobjects::setOwnerTeam( "axis" );
  353.  
  354. if ( maps\mp\gametypes\_gamescore::_getTeamScore( "axis" ) >= 100 )
  355. {
  356. self maps\mp\gametypes\_gameobjects::allowUse( "none" );
  357. activateNuke( "axis" );
  358. self notify( "stop_counting" );
  359. }
  360. }
  361. else if ( self.touchList["axis"].size < self.touchList["allies"].size )
  362. {
  363. if ( maps\mp\gametypes\_gamescore::_getTeamScore( "allies" ) < 100 )
  364. maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( "allies", 1 );
  365.  
  366. self thread setUseBarScore( "allies" );
  367. setDvar( "ui_danger_team", "axis" );
  368. self maps\mp\gametypes\_gameobjects::setOwnerTeam( "allies" );
  369.  
  370. if ( maps\mp\gametypes\_gamescore::_getTeamScore( "allies" ) >= 100 )
  371. {
  372. self maps\mp\gametypes\_gameobjects::allowUse( "none" );
  373. activateNuke( "allies" );
  374. self notify( "stop_counting" );
  375. }
  376. }
  377. else
  378. {
  379. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_captureneutral" );
  380. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_captureneutral" );
  381.  
  382. self maps\mp\gametypes\_gameobjects::setOwnerTeam( "none" );
  383. setDvar( "ui_danger_team", "contested" );
  384. }
  385. updateHudElems();
  386.  
  387. wait( 1 );
  388. }
  389. }
  390.  
  391.  
  392. activateNuke( team )
  393. {
  394. self giveFlagCaptureXP( self.touchList[team] );
  395. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  396. self maps\mp\gametypes\_gameobjects::allowUse( "none" );
  397.  
  398.  
  399. bestTime = 99999999;
  400. nukeOwner = undefined;
  401.  
  402. foreach( player in level.players )
  403. {
  404. if ( !isDefined( player ) )
  405. continue;
  406.  
  407. player.useBar hideElem();
  408. player.useBarText hideElem();
  409.  
  410. if ( player.team != team )
  411. continue;
  412.  
  413. if ( !isDefined( self.touchlist[team][player.guid] ) )
  414. continue;
  415.  
  416. timeStarted = self.touchlist[team][player.guid].startTime;
  417.  
  418. if ( timeStarted < bestTime )
  419. {
  420. nukeOwner = player;
  421. bestTime = timeStarted;
  422. }
  423. }
  424. assert( isDefined( nukeOwner ) );
  425.  
  426. nukeOwner maps\mp\killstreaks\_nuke::tryUseNuke( 1 );
  427. }
  428.  
  429.  
  430. giveFlagCaptureXP( touchList )
  431. {
  432. level endon ( "game_ended" );
  433. wait .05;
  434. WaitTillSlowProcessAllowed();
  435.  
  436. players = getArrayKeys( touchList );
  437. for ( index = 0; index < players.size; index++ )
  438. {
  439. player = touchList[players[index]].player;
  440. player thread maps\mp\gametypes\_hud_message::SplashNotify( "captured_nuke", maps\mp\gametypes\_rank::getScoreInfoValue( "capture" ) );
  441. player thread [[level.onXPEvent]]( "capture" );
  442. maps\mp\gametypes\_gamescore::givePlayerScore( "capture", player );
  443. }
  444. }
  445.  
  446. setUseBarScore( team )
  447. {
  448. teamScore = getTeamScore( team );
  449.  
  450. foreach( player in level.players )
  451. {
  452. if ( !isDefined( player ) )
  453. continue;
  454.  
  455. if ( player.team != team )
  456. continue;
  457.  
  458. if ( !isDefined( self.touchlist[team][player.guid] ) )
  459. continue;
  460.  
  461. //player thread maps\mp\gametypes\_rank::giveRankXP( "challenge",50 );
  462.  
  463. player.useBar updateBar( teamScore/100, 0 );
  464. }
  465. }
  466.  
  467. updateHudElems()
  468. {
  469. foreach( player in level.players )
  470. {
  471. if ( !isDefined( player ) )
  472. continue;
  473.  
  474. if ( !isDefined( self.touchlist["axis"][player.guid] ) && !isDefined( self.touchlist["allies"][player.guid] ) )
  475. {
  476. player.useBar hideElem();
  477. player.useBarText hideElem();
  478. }
  479.  
  480. if ( isDefined( self.touchlist["axis"][player.guid] ) || isDefined( self.touchlist["allies"][player.guid] ) )
  481. {
  482. player.useBar showElem();
  483. player.useBarText showElem();
  484. }
  485. }
  486. }
  487.  
  488.  
  489. onNormalDeath( victim, attacker, lifeId )
  490. {
  491. if ( !isDefined( level.inOvertime ) || !level.inOvertime )
  492. return;
  493.  
  494. team = victim.team;
  495.  
  496. if ( game["state"] == "postgame" )
  497. attacker.finalKill = true;
  498. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement