Advertisement
Guest User

tdef - Notesblok

a guest
Nov 19th, 2011
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.71 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include common_scripts\utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5. /*
  6. Team Defender
  7. Objective: Score points for your team by eliminating players on the opposing team.
  8. Team with flag scores double kill points.
  9. First corpse spawns the flag.
  10. Map ends: When one team reaches the score limit, or time limit is reached
  11. Respawning: No wait / Near teammates
  12.  
  13. Level requirementss
  14. ------------------
  15. Spawnpoints:
  16. classname mp_tdm_spawn
  17. All players spawn from these. The spawnpoint chosen is dependent on the current locations of teammates and enemies
  18. at the time of spawn. Players generally spawn behind their teammates relative to the direction of enemies.
  19.  
  20. Spectator Spawnpoints:
  21. classname mp_global_intermission
  22. Spectators spawn from these and intermission is viewed from these positions.
  23. Atleast one is required, any more and they are randomly chosen between.
  24. */
  25.  
  26.  
  27. main()
  28. {
  29. if(getdvar("mapname") == "mp_background")
  30. return;
  31.  
  32. maps\mp\gametypes\_globallogic::init();
  33. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  34. maps\mp\gametypes\_globallogic::SetupCallbacks();
  35.  
  36. if ( isUsingMatchRulesData() )
  37. {
  38. level.initializeMatchRules = ::initializeMatchRules;
  39. [[level.initializeMatchRules]]();
  40. level thread reInitializeMatchRulesOnMigration();
  41. }
  42. else
  43. {
  44. registerRoundSwitchDvar( level.gameType, 0, 0, 9 );
  45. registerTimeLimitDvar( level.gameType, 10 );
  46. registerScoreLimitDvar( level.gameType, 7500 );
  47. registerRoundLimitDvar( level.gameType, 1 );
  48. registerWinLimitDvar( level.gameType, 1 );
  49. registerNumLivesDvar( level.gameType, 0 );
  50. registerHalfTimeDvar( level.gameType, 0 );
  51.  
  52. level.matchRules_enemyFlagRadar = true;
  53. level.matchRules_damageMultiplier = 0;
  54. level.matchRules_vampirism = 0;
  55. }
  56.  
  57. setSpecialLoadouts();
  58.  
  59. level.teamBased = true;
  60. level.initGametypeAwards = ::initGametypeAwards;
  61. level.onPrecacheGameType = ::onPrecacheGameType;
  62. level.onStartGameType = ::onStartGameType;
  63. level.getSpawnPoint = ::getSpawnPoint;
  64. level.onSpawnPlayer = ::onSpawnPlayer;
  65. level.onNormalDeath = ::onNormalDeath;
  66.  
  67. if ( level.matchRules_damageMultiplier || level.matchRules_vampirism )
  68. level.modifyPlayerDamage = maps\mp\gametypes\_damage::gamemodeModifyPlayerDamage;
  69.  
  70. precacheShader( "waypoint_targetneutral" );
  71.  
  72. game["dialog"]["gametype"] = "team_def";
  73. if ( getDvarInt( "g_hardcore" ) )
  74. game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
  75.  
  76. game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD";
  77. }
  78.  
  79.  
  80. initializeMatchRules()
  81. {
  82. // set common values
  83. setCommonRulesFromMatchRulesData();
  84.  
  85. // set everything else (private match options, default .cfg file values, and what normally is registered in the 'else' below)
  86. level.matchRules_enemyFlagRadar = GetMatchRulesData( "tdefData", "enemyFlagRadar" );
  87.  
  88. SetDynamicDvar( "scr_tdef_roundswitch", 0 );
  89. registerRoundSwitchDvar( "tdef", 0, 0, 9 );
  90. SetDynamicDvar( "scr_tdef_roundlimit", 1 );
  91. registerRoundLimitDvar( "tdef", 1 );
  92. SetDynamicDvar( "scr_tdef_winlimit", 1 );
  93. registerWinLimitDvar( "tdef", 1 );
  94. SetDynamicDvar( "scr_tdef_halftime", 0 );
  95. registerHalfTimeDvar( "tdef", 0 );
  96.  
  97. SetDynamicDvar( "scr_tdef_promode", 0 );
  98. }
  99.  
  100.  
  101. onPrecacheGameType()
  102. {
  103. precacheString( &"MP_NEUTRAL_FLAG_CAPTURED_BY" );
  104. precacheString( &"MP_NEUTRAL_FLAG_DROPPED_BY" );
  105. PreCacheString( &"MP_GRABBING_FLAG" );
  106.  
  107. precacheString( &"OBJECTIVES_TDEF_ATTACKER_HINT" );
  108. precacheString( &"OBJECTIVES_TDEF_DEFENDER_HINT" );
  109. precacheString( &"OBJECTIVES_TDEF" );
  110. precacheString( &"OBJECTIVES_TDEF_SCORE" );
  111. precacheString( &"OBJECTIVES_TDEF_HINT" );
  112. }
  113.  
  114.  
  115. onStartGameType()
  116. {
  117. setClientNameMode("auto_change");
  118.  
  119. if ( !isdefined( game["switchedsides"] ) )
  120. game["switchedsides"] = false;
  121.  
  122. if ( game["switchedsides"] )
  123. {
  124. oldAttackers = game["attackers"];
  125. oldDefenders = game["defenders"];
  126. game["attackers"] = oldDefenders;
  127. game["defenders"] = oldAttackers;
  128. }
  129.  
  130. setObjectiveText( "allies", &"OBJECTIVES_TDEF" );
  131. setObjectiveText( "axis", &"OBJECTIVES_TDEF" );
  132.  
  133. if ( level.splitscreen )
  134. {
  135. setObjectiveScoreText( "allies", &"OBJECTIVES_TDEF" );
  136. setObjectiveScoreText( "axis", &"OBJECTIVES_TDEF" );
  137. }
  138. else
  139. {
  140. setObjectiveScoreText( "allies", &"OBJECTIVES_TDEF_SCORE" );
  141. setObjectiveScoreText( "axis", &"OBJECTIVES_TDEF_SCORE" );
  142. }
  143. setObjectiveHintText( "allies", &"OBJECTIVES_TDEF_ATTACKER_HINT" );
  144. setObjectiveHintText( "axis", &"OBJECTIVES_TDEF_ATTACKER_HINT" );
  145.  
  146. level.spawnMins = ( 0, 0, 0 );
  147. level.spawnMaxs = ( 0, 0, 0 );
  148. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_allies_start" );
  149. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_axis_start" );
  150. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" );
  151. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" );
  152.  
  153. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  154. setMapCenter( level.mapCenter );
  155.  
  156. maps\mp\gametypes\_rank::registerScoreInfo( "firstblood", 200 );
  157. maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 );
  158. maps\mp\gametypes\_rank::registerScoreInfo( "kill_bonus", 50 );
  159. maps\mp\gametypes\_rank::registerScoreInfo( "capture", 100 );
  160. maps\mp\gametypes\_rank::registerScoreInfo( "kill_carrier", 50 );
  161. maps\mp\gametypes\_rank::registerScoreInfo( "team_assist", 20 );
  162.  
  163. allowed[0] = level.gameType;
  164. allowed[1] = "tdm";
  165.  
  166. maps\mp\gametypes\_gameobjects::main(allowed);
  167.  
  168. tdef();
  169. }
  170.  
  171.  
  172. tdef()
  173. {
  174. level.icon2D["allies"] = maps\mp\gametypes\_teams::getTeamFlagIcon( "allies" );
  175. level.icon2D["axis"] = maps\mp\gametypes\_teams::getTeamFlagIcon( "axis" );
  176. precacheShader( level.icon2D["axis"] );
  177. precacheShader( level.icon2D["allies"] );
  178.  
  179. level.carryFlag["allies"] = maps\mp\gametypes\_teams::getTeamFlagCarryModel( "allies" );
  180. level.carryFlag["axis"] = maps\mp\gametypes\_teams::getTeamFlagCarryModel( "axis" );
  181. level.carryFlag["neutral"] = "prop_flag_neutral";
  182. precacheModel( level.carryFlag["allies"] );
  183. precacheModel( level.carryFlag["axis"] );
  184. precacheModel( level.carryFlag["neutral"] );
  185.  
  186. level.iconEscort3D = "waypoint_defend";
  187. level.iconEscort2D = "waypoint_defend";
  188. precacheShader( level.iconEscort3D );
  189. precacheShader( level.iconEscort2D );
  190.  
  191. level.iconKill3D = "waypoint_kill";
  192. level.iconKill2D = "waypoint_kill";
  193. precacheShader( level.iconKill3D );
  194. precacheShader( level.iconKill2D );
  195.  
  196. level.iconCaptureFlag3D = "waypoint_capture_flag";
  197. level.iconCaptureFlag2D = "waypoint_capture_flag";
  198. precacheShader( level.iconCaptureFlag3D );
  199. precacheShader( level.iconCaptureFlag2D );
  200.  
  201. precacheShader( "waypoint_flag_friendly" );
  202. precacheShader( "waypoint_flag_enemy" );
  203.  
  204. level.gameFlag = undefined;
  205. }
  206.  
  207.  
  208. onSpawnPlayer()
  209. {
  210. // flag carrier class? clear this regardless if they were carrier
  211. if ( isDefined( level.tdef_loadouts ) && isDefined( level.tdef_loadouts[self.team] ) )
  212. self.pers["gamemodeLoadout"] = undefined;
  213.  
  214. level notify ( "spawned_player" );
  215. }
  216.  
  217.  
  218. onNormalDeath( victim, attacker, lifeId )
  219. {
  220. score = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" );
  221. assert( isDefined( score ) );
  222.  
  223. // we got the flag - give bonus
  224. if ( isDefined( level.gameFlag ) && level.gameFlag maps\mp\gametypes\_gameobjects::getOwnerTeam() == attacker.pers["team"] )
  225. {
  226. // I'm the carrier
  227. if ( isDefined( attacker.carryFlag ) )
  228. attacker incPlayerStat( "killsasflagcarrier", 1 );
  229. // someone else is
  230. else
  231. {
  232. // give flag carrier a bonus for kills achieved by team
  233. level.gameFlag.carrier thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_TEAM_ASSIST" );
  234. maps\mp\gametypes\_gamescore::givePlayerScore( "team_assist", level.gameFlag.carrier, victim, true );
  235. level.gameFlag.carrier thread maps\mp\gametypes\_rank::giveRankXP( "team_assist" );
  236. }
  237.  
  238. attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_X2_BONUS" );
  239. maps\mp\gametypes\_gamescore::givePlayerScore( "kill_bonus", attacker, victim, true );
  240. attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill_bonus" );
  241.  
  242. score *= 2;
  243. }
  244. // no flag yet - create it
  245. else if ( !isDefined( level.gameFlag ) && canCreateFlagAtVictimOrigin( victim ))
  246. {
  247. level.gameFlag = createFlag( victim );
  248.  
  249. score += maps\mp\gametypes\_rank::getScoreInfoValue( "firstblood" );
  250. maps\mp\gametypes\_gamescore::givePlayerScore( "firstblood", attacker, victim, true );
  251. }
  252. // killed carrier - give bonus
  253. else if ( isDefined( victim.carryFlag ) )
  254. {
  255. killCarrierBonus = maps\mp\gametypes\_rank::getScoreInfoValue( "kill_carrier" );
  256.  
  257. thread teamPlayerCardSplash( "callout_killflagcarrier", attacker );
  258. attacker thread maps\mp\gametypes\_hud_message::SplashNotify( "flag_carrier_killed", killCarrierBonus );
  259. maps\mp\gametypes\_gamescore::givePlayerScore( "kill_carrier", attacker, victim, true );
  260. attacker incPlayerStat( "flagcarrierkills", 1 );
  261. attacker thread [[level.onXPEvent]]( "kill_carrier" );
  262. attacker notify( "objective", "kill_carrier" );
  263. attacker thread maps\mp\_matchdata::logGameEvent( "kill_carrier", attacker.origin );
  264.  
  265. score += killCarrierBonus;
  266. }
  267.  
  268. attacker maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( attacker.pers["team"], score );
  269.  
  270. if ( game["state"] == "postgame" && game["teamScores"][attacker.team] > game["teamScores"][level.otherTeam[attacker.team]] )
  271. attacker.finalKill = true;
  272. }
  273.  
  274.  
  275. onDrop( player )
  276. {
  277. // get the time when they dropped it
  278. if( IsDefined( player.tdef_flagTime ) )
  279. {
  280. flagTime = int( GetTime() - player.tdef_flagTime );
  281. player incPlayerStat( "holdingteamdefenderflag", flagTime );
  282. player.tdef_flagTime = undefined;
  283. player notify( "dropped_flag" );
  284. }
  285.  
  286. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  287. otherTeam = level.otherTeam[team];
  288.  
  289. // remove portable radar
  290. if ( isDefined( self.portable_radar ) )
  291. {
  292. level maps\mp\gametypes\_portable_radar::deletePortableRadar( self.portable_radar );
  293. self.portable_radar = undefined;
  294. }
  295. self.currentCarrier = undefined;
  296.  
  297. self maps\mp\gametypes\_gameobjects::setOwnerTeam( "neutral" );
  298. self maps\mp\gametypes\_gameobjects::allowCarry( "any" );
  299. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  300. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconCaptureFlag2D );
  301. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconCaptureFlag3D );
  302. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCaptureFlag2D );
  303. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCaptureFlag3D );
  304.  
  305. if ( isDefined( player ) )
  306. {
  307. if ( isDefined( player.carryFlag ) )
  308. player detachFlag();
  309.  
  310. printAndSoundOnEveryone( team, otherTeam, &"MP_NEUTRAL_FLAG_DROPPED_BY", &"MP_NEUTRAL_FLAG_DROPPED_BY", "mp_war_objective_lost", "mp_war_objective_lost", player );
  311. }
  312. else
  313. {
  314. playSoundOnPlayers( "mp_war_objective_lost", team );
  315. playSoundOnPlayers( "mp_war_objective_lost", otherTeam );
  316. }
  317.  
  318. leaderDialog( "dropped_flag", team, "status" );
  319. leaderDialog( "enemy_dropped_flag", otherTeam, "status" );
  320. }
  321.  
  322.  
  323. onPickup( player )
  324. {
  325. self notify ( "picked_up" );
  326.  
  327. // get the time when they picked it up
  328. player.tdef_flagTime = GetTime();
  329. player thread watchForEndGame();
  330.  
  331. score = maps\mp\gametypes\_rank::getScoreInfoValue( "capture" );
  332. assert( isDefined( score ) );
  333.  
  334. team = player.pers["team"];
  335. otherTeam = level.otherTeam[team];
  336.  
  337. // flag carrier class? (do before attaching flag)
  338. if ( isDefined( level.tdef_loadouts ) && isDefined( level.tdef_loadouts[team] ) )
  339. player thread applyFlagCarrierClass(); // attaches flag
  340. else
  341. player attachFlag();
  342.  
  343. self.currentCarrier = player;
  344. player.carryIcon setShader( level.icon2D[team], player.carryIcon.width, player.carryIcon.height );
  345.  
  346. self maps\mp\gametypes\_gameobjects::setOwnerTeam( team );
  347. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  348. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconEscort2D );
  349. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconEscort2D );
  350. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconKill3D );
  351. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconKill3D );
  352.  
  353. leaderDialog( "got_flag", team, "status" );
  354. leaderDialog( "enemy_got_flag", otherTeam, "status" );
  355.  
  356. thread teamPlayerCardSplash( "callout_flagcapture", player );
  357. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flag_capture", score );
  358. maps\mp\gametypes\_gamescore::givePlayerScore( "capture", player, undefined, true );
  359. player thread [[level.onXPEvent]]( "capture" );
  360. player incPlayerStat( "flagscaptured", 1 );
  361. player notify( "objective", "captured" );
  362. player thread maps\mp\_matchdata::logGameEvent( "capture", player.origin );
  363.  
  364. printAndSoundOnEveryone( team, otherTeam, &"MP_NEUTRAL_FLAG_CAPTURED_BY", &"MP_NEUTRAL_FLAG_CAPTURED_BY", "mp_obj_captured", "mp_enemy_obj_captured", player );
  365.  
  366. // give a capture bonus to the capturing team if the flag is changing hands
  367. if ( self.currentTeam == otherTeam )
  368. player maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( team, score );
  369. self.currentTeam = team;
  370.  
  371. // activate portable radar on flag for the opposing team
  372. if ( level.matchRules_enemyFlagRadar )
  373. self thread flagAttachRadar( otherTeam );
  374. }
  375.  
  376.  
  377. applyFlagCarrierClass()
  378. {
  379. self endon( "death" );
  380. self endon( "disconnect" );
  381. level endon( "game_ended" );
  382.  
  383. if ( self isJuggernaut() )
  384. {
  385. self notify( "lost_juggernaut" );
  386. wait( 0.05 );
  387. }
  388.  
  389. self.pers["gamemodeLoadout"] = level.tdef_loadouts[self.team];
  390. self maps\mp\gametypes\_class::giveLoadout( self.team, "gamemode", false, false );
  391.  
  392. self attachFlag();
  393. }
  394.  
  395. canCreateFlagAtVictimOrigin( victim )
  396. {
  397. mineTriggers = getEntArray( "minefield", "targetname" );
  398. hurtTriggers = getEntArray( "trigger_hurt", "classname" );
  399. radTriggers = getEntArray( "radiation", "targetname" );
  400.  
  401. for ( index = 0; index < radTriggers.size; index++ )
  402. {
  403. if ( victim isTouching( radTriggers[index] ) )
  404. return false;
  405. }
  406.  
  407. for ( index = 0; index < mineTriggers.size; index++ )
  408. {
  409. if ( victim isTouching( mineTriggers[index] ) )
  410. return false;
  411. }
  412.  
  413. for ( index = 0; index < hurtTriggers.size; index++ )
  414. {
  415. if ( victim isTouching( hurtTriggers[index] ) )
  416. return false;
  417. }
  418.  
  419. return true;
  420. }
  421.  
  422. watchForEndGame()
  423. {
  424. self endon( "dropped_flag" );
  425. self endon( "disconnect" );
  426.  
  427. level waittill( "game_ended" );
  428.  
  429. if( IsDefined( self ) )
  430. {
  431. if( IsDefined( self.tdef_flagTime ) )
  432. {
  433. flagTime = int( GetTime() - self.tdef_flagTime );
  434. self incPlayerStat( "holdingteamdefenderflag", flagTime );
  435. }
  436. }
  437. }
  438.  
  439. createFlag( victim )
  440. {
  441. // flag
  442. visuals[0] = spawn( "script_model", victim.origin );
  443. visuals[0] setModel( level.carryFlag["neutral"] );
  444.  
  445. // trigger
  446. trigger = spawn( "trigger_radius", victim.origin, 0, 96, 72);
  447.  
  448. gameFlag = maps\mp\gametypes\_gameobjects::createCarryObject( "neutral", trigger, visuals, (0,0,85) );
  449. gameFlag maps\mp\gametypes\_gameobjects::setTeamUseTime( "friendly", 0.5 );
  450. gameFlag maps\mp\gametypes\_gameobjects::setTeamUseTime( "enemy", 0.5 );
  451. gameFlag maps\mp\gametypes\_gameobjects::setTeamUseText( "enemy", &"MP_GRABBING_FLAG" );
  452. gameFlag maps\mp\gametypes\_gameobjects::setTeamUseText( "friendly", &"MP_GRABBING_FLAG" );
  453. gameFlag maps\mp\gametypes\_gameobjects::allowCarry( "any" );
  454.  
  455. gameFlag maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  456. gameFlag maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCaptureFlag2D );
  457. gameFlag maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCaptureFlag3D );
  458. gameFlag maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconCaptureFlag2D );
  459. gameFlag maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconCaptureFlag3D );
  460.  
  461. gameFlag maps\mp\gametypes\_gameobjects::setCarryIcon( level.icon2D["axis"] ); //temp, manually changed after picked up
  462.  
  463. // these do nothing but the slow update on minimap icon and world icon
  464. // leave as false (set on createCarryObject()), we want fast update for friendly and enemy
  465. //gameFlag.objIDPingFriendly = true;
  466. //gameFlag.objIDPingEnemy = true;
  467.  
  468. gameFlag.allowWeapons = true;
  469. gameFlag.onPickup = ::onPickup;
  470. gameFlag.onPickupFailed = ::onPickup;
  471. gameFlag.onDrop = ::onDrop;
  472.  
  473. gameFlag.oldRadius = 96;
  474. gameFlag.currentTeam = "none";
  475. gameFlag.requiresLOS = true;
  476.  
  477. // set it as flag trigger when on ground
  478. level.favorCloseSpawnEnt = gameFlag.trigger;
  479. level.favorCloseSpawnScalar = 3;
  480.  
  481. return gameFlag;
  482. }
  483.  
  484.  
  485. attachFlag()
  486. {
  487. self attach( level.carryFlag[self.pers["team"]], "J_spine4", true );
  488. self.carryFlag = level.carryFlag[self.pers["team"]];
  489.  
  490. // set it as flag carrier when carried
  491. level.favorCloseSpawnEnt = self;
  492. }
  493.  
  494.  
  495. detachFlag()
  496. {
  497. self detach( self.carryFlag, "J_spine4" );
  498. self.carryFlag = undefined;
  499.  
  500. // set it as flag trigger when on ground
  501. level.favorCloseSpawnEnt = level.gameFlag.trigger;
  502. }
  503.  
  504.  
  505. flagAttachRadar( team )
  506. {
  507. level endon("game_ended");
  508. self endon( "dropped" );
  509.  
  510. // - makePortableRadar( owner ) needs an owner
  511. // - owner has to be on the team the radar is showing to
  512. // - this blocks until it finds an owner
  513. radarOwner = getFlagRadarOwner( team );
  514.  
  515. portable_radar = spawn( "script_model", self.currentCarrier.origin );
  516. portable_radar.team = team;
  517. portable_radar.owner = radarOwner;
  518. portable_radar makePortableRadar( radarOwner );
  519. self.portable_radar = portable_radar;
  520. self thread flagRadarMover();
  521. self thread flagWatchRadarOwnerLost();
  522. }
  523.  
  524.  
  525. getFlagRadarOwner( team )
  526. {
  527. level endon("game_ended");
  528. self endon( "dropped" );
  529.  
  530. while ( true )
  531. {
  532. foreach( player in level.players )
  533. {
  534. if ( isAlive( player ) && player.pers["team"] == team )
  535. return player;
  536. }
  537. wait( 0.05 );
  538. }
  539. }
  540.  
  541.  
  542. flagRadarMover()
  543. {
  544. level endon("game_ended");
  545. self endon( "dropped" );
  546. self.portable_radar endon( "death" );
  547.  
  548. for( ;; )
  549. {
  550. self.portable_radar MoveTo( self.currentCarrier.origin, .05 );
  551. wait (0.05);
  552. }
  553. }
  554.  
  555.  
  556. flagWatchRadarOwnerLost()
  557. {
  558. level endon("game_ended");
  559. self endon( "dropped" );
  560.  
  561. radarTeam = self.portable_radar.team;
  562.  
  563. self.portable_radar.owner waittill_any( "disconnect", "joined_team", "joined_spectators" );
  564.  
  565. // delete the old flag radar
  566. level maps\mp\gametypes\_portable_radar::deletePortableRadar( self.portable_radar );
  567. self.portable_radar = undefined;
  568.  
  569. // make a new one
  570. flagAttachRadar( radarTeam );
  571. }
  572.  
  573.  
  574. getSpawnPoint()
  575. {
  576. spawnteam = self.pers["team"];
  577. if ( game["switchedsides"] )
  578. spawnteam = getOtherTeam( spawnteam );
  579.  
  580. if ( level.inGracePeriod )
  581. {
  582. spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn_" + spawnteam + "_start" );
  583. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  584. }
  585. else
  586. {
  587. spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( spawnteam );
  588. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  589. }
  590.  
  591. return spawnPoint;
  592. }
  593.  
  594.  
  595. initGametypeAwards()
  596. {
  597. maps\mp\_awards::initStatAward( "flagscaptured", 0, maps\mp\_awards::highestWins );
  598. maps\mp\_awards::initStatAward( "flagcarrierkills", 0, maps\mp\_awards::highestWins );
  599. maps\mp\_awards::initStatAward( "killsasflagcarrier", 0, maps\mp\_awards::highestWins );
  600. }
  601.  
  602.  
  603. setSpecialLoadouts()
  604. {
  605. if ( isUsingMatchRulesData() && GetMatchRulesData( "defaultClasses", "axis", 5, "class", "inUse" ) )
  606. {
  607. level.tdef_loadouts["axis"] = getMatchRulesSpecialClass( "axis", 5 );
  608. }
  609. if ( isUsingMatchRulesData() && GetMatchRulesData( "defaultClasses", "allies", 5, "class", "inUse" ) )
  610. {
  611. level.tdef_loadouts["allies"] = getMatchRulesSpecialClass( "allies", 5 );
  612. }
  613. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement