Advertisement
Guest User

ctf - Notesblok

a guest
Nov 19th, 2011
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 35.34 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4. /*
  5. One Flag CTF
  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. if ( isUsingMatchRulesData() )
  27. {
  28. level.initializeMatchRules = ::initializeMatchRules;
  29. [[level.initializeMatchRules]]();
  30. level thread reInitializeMatchRulesOnMigration();
  31. }
  32. else
  33. {
  34. registerTimeLimitDvar( level.gameType, 5 );
  35. registerScoreLimitDvar( level.gameType, 3 );
  36. registerRoundLimitDvar( level.gameType, 1 );
  37. registerWinLimitDvar( level.gameType, 1 );
  38. registerNumLivesDvar( level.gameType, 0 );
  39. registerHalfTimeDvar( level.gameType, 0 );
  40.  
  41. level.matchRules_damageMultiplier = 0;
  42. level.matchRules_vampirism = 0;
  43. }
  44.  
  45. setOverTimeLimitDvar( 4 );
  46.  
  47. setSpecialLoadouts();
  48.  
  49. level.teamBased = true;
  50. level.objectiveBased = true;
  51. level.overtimeScoreWinOverride = true;
  52. level.onPrecacheGameType = ::onPrecacheGameType;
  53. level.onStartGameType = ::onStartGameType;
  54. level.getSpawnPoint = ::getSpawnPoint;
  55. level.onPlayerKilled = ::onPlayerKilled;
  56. level.initGametypeAwards = ::initGametypeAwards;
  57. level.onTimeLimit = ::onTimeLimit;
  58. level.onSpawnPlayer = ::onSpawnPlayer;
  59.  
  60. if ( level.matchRules_damageMultiplier || level.matchRules_vampirism )
  61. level.modifyPlayerDamage = maps\mp\gametypes\_damage::gamemodeModifyPlayerDamage;
  62.  
  63. level.flagReturnTime = getIntProperty( "scr_ctf_returntime", 30 );
  64.  
  65. game["dialog"]["gametype"] = "captureflag";
  66.  
  67. if ( getDvarInt( "g_hardcore" ) )
  68. game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
  69. else if ( getDvarInt( "camera_thirdPerson" ) )
  70. game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
  71. else if ( getDvarInt( "scr_diehard" ) )
  72. game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
  73. else if (getDvarInt( "scr_" + level.gameType + "_promode" ) )
  74. game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
  75.  
  76. game["dialog"]["offense_obj"] = "capture_obj";
  77. game["dialog"]["defense_obj"] = "capture_obj";
  78. }
  79.  
  80.  
  81. initializeMatchRules()
  82. {
  83. // set common values
  84. setCommonRulesFromMatchRulesData();
  85.  
  86. // set everything else (private match options, default .cfg file values, and what normally is registered in the 'else' below)
  87. SetDynamicDvar( "scr_ctf_roundlimit", 1 );
  88. registerRoundLimitDvar( "ctf", 1 );
  89. SetDynamicDvar( "scr_ctf_winlimit", 1 );
  90. registerWinLimitDvar( "ctf", 1 );
  91. SetDynamicDvar( "scr_ctf_halftime", 0 );
  92. registerHalfTimeDvar( "ctf", 0 );
  93.  
  94. SetDynamicDvar( "scr_ctf_returntime", 30 );
  95. SetDynamicDvar( "scr_ctf_promode", 0 );
  96. }
  97.  
  98.  
  99. onPrecacheGameType()
  100. {
  101. precacheString(&"MP_FLAG_TAKEN_BY");
  102. precacheString(&"MP_ENEMY_FLAG_TAKEN_BY");
  103. precacheString(&"MP_FLAG_CAPTURED_BY");
  104. precacheString(&"MP_ENEMY_FLAG_CAPTURED_BY");
  105. precacheString(&"MP_FLAG_RETURNED");
  106. precacheString(&"MP_ENEMY_FLAG_RETURNED");
  107. precacheString(&"MP_YOUR_FLAG_RETURNING_IN");
  108. precacheString(&"MP_ENEMY_FLAG_RETURNING_IN");
  109. precacheString(&"MP_ENEMY_FLAG_DROPPED_BY");
  110. precacheString(&"MP_DOM_NEUTRAL_FLAG_CAPTURED");
  111. precacheString(&"MP_GRABBING_FLAG");
  112. precacheString(&"MP_RETURNING_FLAG");
  113. }
  114.  
  115.  
  116. onSpawnPlayer()
  117. {
  118. //if( ( inOvertime() ) && !isDefined( self.otSpawned ) )
  119. //self thread printOTHint();
  120.  
  121. // flag carrier class? clear this regardless if they were carrier
  122. if ( isDefined( level.ctf_loadouts ) && isDefined( level.ctf_loadouts[self.team] ) )
  123. self.pers["gamemodeLoadout"] = undefined;
  124. }
  125.  
  126.  
  127. printOTHint()
  128. {
  129. self endon ( "disconnect" );
  130. // give the "Overtime!" message time to show
  131. wait ( 0.25 );
  132.  
  133. self.otSpawned = true;
  134. hintMessage = getObjectiveHintText( self.team );
  135. self thread maps\mp\gametypes\_hud_message::hintMessage( hintMessage );
  136. }
  137.  
  138.  
  139. onStartGameType()
  140. {
  141. if ( !isdefined( game["switchedsides"] ) )
  142. game["switchedsides"] = false;
  143.  
  144. if ( inOvertime() )
  145. setDvar( "ui_override_halftime", 0 );
  146. else if ( game["switchedsides"] )
  147. setDvar( "ui_override_halftime", 2 );
  148. else
  149. setDvar( "ui_override_halftime", 1 );
  150.  
  151. if ( !isdefined( game["original_defenders"] ) )
  152. game["original_defenders"] = game["defenders"];
  153.  
  154. if ( game["switchedsides"] )
  155. {
  156. oldAttackers = game["attackers"];
  157. oldDefenders = game["defenders"];
  158. game["attackers"] = oldDefenders;
  159. game["defenders"] = oldAttackers;
  160. }
  161.  
  162. // set scores to zero at beginning of every round, round wins is what counts to game win
  163. game["teamScores"][game["attackers"]] = 0;
  164. setTeamScore( game["attackers"], 0 );
  165. game["teamScores"][game["defenders"]] = 0;
  166. setTeamScore( game["defenders"], 0 );
  167.  
  168. setClientNameMode("auto_change");
  169.  
  170. if ( level.splitscreen )
  171. {
  172. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER" );
  173. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER" );
  174. }
  175. else
  176. {
  177. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE" );
  178. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE" );
  179. }
  180.  
  181. setObjectiveText( game["attackers"], &"OBJECTIVES_CTF" );
  182. setObjectiveText( game["defenders"], &"OBJECTIVES_CTF" );
  183. setObjectiveHintText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER_HINT" );
  184. setObjectiveHintText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER_HINT" );
  185.  
  186. level.spawnMins = ( 0, 0, 0 );
  187. level.spawnMaxs = ( 0, 0, 0 );
  188. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_ctf_spawn_allies_start" );
  189. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_ctf_spawn_axis_start" );
  190. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_ctf_spawn_allies" );
  191. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_ctf_spawn_axis" );
  192.  
  193. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  194. setMapCenter( level.mapCenter );
  195.  
  196. maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 );
  197. maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 50 );
  198. maps\mp\gametypes\_rank::registerScoreInfo( "assist", 20 );
  199.  
  200. maps\mp\gametypes\_rank::registerScoreInfo( "pickup", 50 );
  201. maps\mp\gametypes\_rank::registerScoreInfo( "return", 50 );
  202. maps\mp\gametypes\_rank::registerScoreInfo( "capture", 250 );
  203.  
  204. maps\mp\gametypes\_rank::registerScoreInfo( "kill_carrier", 50 );
  205.  
  206. maps\mp\gametypes\_rank::registerScoreInfo( "defend", 100 );
  207. maps\mp\gametypes\_rank::registerScoreInfo( "defend_assist", 100 );
  208.  
  209. maps\mp\gametypes\_rank::registerScoreInfo( "assault", 200 );
  210. maps\mp\gametypes\_rank::registerScoreInfo( "assault_assist", 40 );
  211.  
  212. allowed[0] = "ctf";
  213. maps\mp\gametypes\_gameobjects::main(allowed);
  214.  
  215. thread ctf();
  216. }
  217.  
  218.  
  219. getSpawnPoint()
  220. {
  221. if ( self.team == "axis" )
  222. {
  223. spawnTeam = game["attackers"];
  224. }
  225. else
  226. {
  227. spawnTeam = game["defenders"];
  228. }
  229.  
  230. // if ( game["switchedsides"] )
  231. // spawnTeam = getOtherTeam( spawnteam );
  232.  
  233. if ( level.inGracePeriod )
  234. {
  235. spawnPoints = getentarray("mp_ctf_spawn_" + spawnteam + "_start", "classname");
  236. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  237. }
  238. else
  239. {
  240. spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( spawnteam );
  241. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  242. }
  243.  
  244. return spawnPoint;
  245. }
  246.  
  247.  
  248. ctf()
  249. {
  250. level.flagModel["allies"] = maps\mp\gametypes\_teams::getTeamFlagModel( "allies" );
  251. level.icon2D["allies"] = maps\mp\gametypes\_teams::getTeamFlagIcon( "allies" );
  252. level.carryFlag["allies"] = maps\mp\gametypes\_teams::getTeamFlagCarryModel( "allies" );
  253.  
  254. precacheModel( level.flagModel["allies"] );
  255. precacheModel( level.carryFlag["allies"] );
  256.  
  257. level.flagModel["axis"] = maps\mp\gametypes\_teams::getTeamFlagModel( "axis" );
  258. level.icon2D["axis"] = maps\mp\gametypes\_teams::getTeamFlagIcon( "axis" );
  259. level.carryFlag["axis"] = maps\mp\gametypes\_teams::getTeamFlagCarryModel( "axis" );
  260.  
  261. precacheModel( level.flagModel["axis"] );
  262. precacheModel( level.carryFlag["axis"] );
  263.  
  264. level.iconEscort3D = "waypoint_escort";
  265. level.iconEscort2D = "waypoint_escort";
  266. precacheShader( level.iconEscort3D );
  267. precacheShader( level.iconEscort2D );
  268. //level.iconEscort2D = level.iconEscort3D; // flags with words on compass
  269.  
  270. level.iconKill3D = "waypoint_kill";
  271. level.iconKill2D = "waypoint_kill";
  272. precacheShader( level.iconKill3D );
  273. precacheShader( level.iconKill2D );
  274. //level.iconKill2D = level.iconKill3D; // flags with words on compass
  275.  
  276. level.iconCaptureFlag3D = "waypoint_capture_flag";
  277. level.iconCaptureFlag2D = "waypoint_capture_flag";
  278. precacheShader( level.iconCaptureFlag3D );
  279. precacheShader( level.iconCaptureFlag2D );
  280. //level.iconCaptureFlag2D = level.iconCaptureFlag3D; // flags with words on compass
  281.  
  282. level.iconDefendFlag3D = "waypoint_defend_flag";
  283. level.iconDefendFlag2D = "waypoint_defend_flag";
  284. precacheShader( level.iconDefendFlag3D );
  285. precacheShader( level.iconDefendFlag2D );
  286. //level.iconDefendFlag2D = level.iconDefendFlag3D; // flags with words on compass
  287.  
  288. level.iconReturnFlag3D = "waypoint_return_flag";
  289. level.iconReturnFlag2D = "waypoint_return_flag";
  290. precacheShader( level.iconReturnFlag3D );
  291. precacheShader( level.iconReturnFlag2D );
  292. //level.iconReturnFlag2D = level.iconReturnFlag3D; // flags with words on compass
  293.  
  294. level.iconWaitForFlag3D = "waypoint_waitfor_flag";
  295. level.iconWaitForFlag2D = "waypoint_waitfor_flag";
  296. precacheShader( level.iconWaitForFlag3D );
  297. precacheShader( level.iconWaitForFlag2D );
  298. //level.iconWaitForFlag2D = level.iconWaitForFlag3D; // flags with words on compass
  299.  
  300. precacheShader( level.icon2D["axis"] );
  301. precacheShader( level.icon2D["allies"] );
  302.  
  303. precacheShader( "waypoint_flag_friendly" );
  304. precacheShader( "waypoint_flag_enemy" );
  305.  
  306. precacheString( &"OBJECTIVES_FLAG_HOME" );
  307. precacheString( &"OBJECTIVES_FLAG_NAME" );
  308. precacheString( &"OBJECTIVES_FLAG_AWAY" );
  309.  
  310. level.teamFlags[game["defenders"]] = createTeamFlag( game["defenders"], "allies" );
  311. level.teamFlags[game["attackers"]] = createTeamFlag( game["attackers"], level.otherTeam["allies"] );
  312.  
  313. level.capZones[game["defenders"]] = createCapZone( game["defenders"], "allies" );
  314. level.capZones[game["attackers"]] = createCapZone( game["attackers"], level.otherTeam["allies"] );
  315.  
  316. if ( level.splitScreen )
  317. hudElemAlpha = 0;
  318. else
  319. hudElemAlpha = 0.85;
  320.  
  321. level.friendlyFlagStatusIcon["allies"] = createServerIcon( "waypoint_flag_friendly", 32, 32, "allies" );
  322. level.friendlyFlagStatusIcon["allies"] setPoint( "TOP LEFT", "TOP LEFT", 132, 0 );
  323. level.friendlyFlagStatusIcon["allies"].alpha = hudElemAlpha;
  324. level.friendlyFlagStatusIcon["allies"].hideWhenInMenu = true;
  325. level thread hideHudElementOnGameEnd( level.friendlyFlagStatusIcon["allies"] );
  326.  
  327. level.friendlyFlagStatusText["allies"] = createServerFontString( "small", 1.6, "allies" );
  328. level.friendlyFlagStatusText["allies"] setParent( level.friendlyFlagStatusIcon["allies"] );
  329. level.friendlyFlagStatusText["allies"] setPoint( "LEFT", "RIGHT", 4 );
  330. level.friendlyFlagStatusText["allies"] setText( &"OBJECTIVES_FLAG_HOME" );
  331. level.friendlyFlagStatusText["allies"].alpha = hudElemAlpha;
  332. level.friendlyFlagStatusText["allies"].color = (1,1,1);
  333. level.friendlyFlagStatusText["allies"].glowAlpha = 1;
  334. level.friendlyFlagStatusText["allies"].hideWhenInMenu = true;
  335. level thread hideHudElementOnGameEnd( level.friendlyFlagStatusText["allies"] );
  336.  
  337. level.enemyFlagStatusIcon["allies"] = createServerIcon( "waypoint_flag_enemy", 24, 24, "allies" );
  338. level.enemyFlagStatusIcon["allies"] setPoint( "TOP LEFT", "TOP LEFT", 132, 26 );
  339. level.enemyFlagStatusIcon["allies"].alpha = hudElemAlpha;
  340. level.enemyFlagStatusIcon["allies"].hideWhenInMenu = true;
  341. level thread hideHudElementOnGameEnd( level.enemyFlagStatusIcon["allies"] );
  342.  
  343. level.enemyFlagStatusText["allies"] = createServerFontString( "small", 1.6, "allies" );
  344. level.enemyFlagStatusText["allies"] setParent( level.enemyFlagStatusIcon["allies"] );
  345. level.enemyFlagStatusText["allies"] setPoint( "LEFT", "RIGHT", 4 );
  346. level.enemyFlagStatusText["allies"] setText( &"OBJECTIVES_FLAG_HOME" );
  347. level.enemyFlagStatusText["allies"].alpha = hudElemAlpha;
  348. level.enemyFlagStatusText["allies"].color = (1,1,1);
  349. level.enemyFlagStatusText["allies"].glowAlpha = 1;
  350. level.enemyFlagStatusText["allies"].hideWhenInMenu = true;
  351. level thread hideHudElementOnGameEnd( level.enemyFlagStatusText["allies"] );
  352.  
  353.  
  354. level.friendlyFlagStatusIcon["axis"] = createServerIcon( "waypoint_flag_friendly", 32, 32, "axis" );
  355. level.friendlyFlagStatusIcon["axis"] setPoint( "TOP LEFT", "TOP LEFT", 132, 0 );
  356. level.friendlyFlagStatusIcon["axis"].alpha = hudElemAlpha;
  357. level.friendlyFlagStatusIcon["axis"].hideWhenInMenu = true;
  358. level thread hideHudElementOnGameEnd( level.friendlyFlagStatusIcon["axis"] );
  359.  
  360. level.friendlyFlagStatusText["axis"] = createServerFontString( "small", 1.6, "axis" );
  361. level.friendlyFlagStatusText["axis"] setParent( level.friendlyFlagStatusIcon["axis"] );
  362. level.friendlyFlagStatusText["axis"] setPoint( "LEFT", "RIGHT", 4 );
  363. level.friendlyFlagStatusText["axis"] setText( &"OBJECTIVES_FLAG_HOME" );
  364. level.friendlyFlagStatusText["axis"].alpha = hudElemAlpha;
  365. level.friendlyFlagStatusText["axis"].color = (1,1,1);
  366. level.friendlyFlagStatusText["axis"].glowAlpha = 1;
  367. level.friendlyFlagStatusText["axis"].hideWhenInMenu = true;
  368. level thread hideHudElementOnGameEnd( level.friendlyFlagStatusText["axis"] );
  369.  
  370. level.enemyFlagStatusIcon["axis"] = createServerIcon( "waypoint_flag_enemy", 24, 24, "axis" );
  371. level.enemyFlagStatusIcon["axis"] setPoint( "TOP LEFT", "TOP LEFT", 132, 26 );
  372. level.enemyFlagStatusIcon["axis"].alpha = hudElemAlpha;
  373. level.enemyFlagStatusIcon["axis"].hideWhenInMenu = true;
  374. level thread hideHudElementOnGameEnd( level.enemyFlagStatusIcon["axis"] );
  375.  
  376. level.enemyFlagStatusText["axis"] = createServerFontString( "small", 1.6, "axis" );
  377. level.enemyFlagStatusText["axis"] setParent( level.enemyFlagStatusIcon["axis"] );
  378. level.enemyFlagStatusText["axis"] setPoint( "LEFT", "RIGHT", 4 );
  379. level.enemyFlagStatusText["axis"] setText( &"OBJECTIVES_FLAG_HOME" );
  380. level.enemyFlagStatusText["axis"].alpha = hudElemAlpha;
  381. level.enemyFlagStatusText["axis"].color = (1,1,1);
  382. level.enemyFlagStatusText["axis"].glowAlpha = 1;
  383. level.enemyFlagStatusText["axis"].hideWhenInMenu = true;
  384. level thread hideHudElementOnGameEnd( level.enemyFlagStatusText["axis"] );
  385. }
  386.  
  387. hideHudElementOnGameEnd( hudElement )
  388. {
  389. level waittill( "game_ended" );
  390.  
  391. if ( isDefined( hudElement ) )
  392. hudElement.alpha = 0;
  393. }
  394.  
  395. spawnFxDelay( fxid, pos, forward, right, delay )
  396. {
  397. wait delay;
  398. effect = spawnFx( fxid, pos, forward, right );
  399. triggerFx( effect );
  400. }
  401.  
  402. createTeamFlag( team, entityTeam )
  403. {
  404. trigger = getEnt( "ctf_zone_" + entityTeam, "targetname" );
  405. if ( !isDefined( trigger ) )
  406. {
  407. error( "No ctf_zone_" + entityTeam + " trigger found in map." );
  408. return;
  409. }
  410. visuals[0] = getEnt( "ctf_flag_" + entityTeam, "targetname" );
  411. if ( !isDefined( visuals[0] ) )
  412. {
  413. error( "No ctf_flag_" + entityTeam + " script_model found in map." );
  414. return;
  415. }
  416.  
  417. cloneTrigger = spawn( "trigger_radius", trigger.origin, 0, 96, trigger.height );
  418. trigger = cloneTrigger;
  419.  
  420. visuals[0] setModel( level.flagModel[team] );
  421.  
  422. teamFlag = maps\mp\gametypes\_gameobjects::createCarryObject( team, trigger, visuals, (0,0,85) );
  423. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseTime( "friendly", 0.5 );
  424. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseTime( "enemy", 0.5 );
  425. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseText( "enemy", &"MP_GRABBING_FLAG" );
  426. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseText( "friendly", &"MP_RETURNING_FLAG" );
  427. teamFlag maps\mp\gametypes\_gameobjects::allowCarry( "enemy" );
  428.  
  429. teamFlag maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  430. teamFlag maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill2D );
  431. teamFlag maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D );
  432. teamFlag maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconEscort2D );
  433. teamFlag maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconEscort3D );
  434.  
  435. teamFlag maps\mp\gametypes\_gameobjects::setCarryIcon( level.icon2D[team] );
  436. teamFlag.objIDPingFriendly = true;
  437. teamFlag.allowWeapons = true;
  438. teamFlag.onPickup = ::onPickup;
  439. teamFlag.onPickupFailed = ::onPickup;
  440. teamFlag.onDrop = ::onDrop;
  441. teamFlag.onReset = ::onReset;
  442.  
  443. teamFlag.oldRadius = trigger.radius;
  444. // too risky, too many situations where people can block the flag grab and cap
  445. //teamFlag.requiresLOS = true;
  446.  
  447. traceStart = trigger.origin + (0,0,32);
  448. traceEnd = trigger.origin + (0,0,-32);
  449. trace = bulletTrace( traceStart, traceEnd, false, undefined );
  450.  
  451. fx = maps\mp\gametypes\_teams::getTeamFlagFX( team );
  452. fxid = loadfx( fx );
  453.  
  454. upangles = vectorToAngles( trace["normal"] );
  455. forward = anglesToForward( upangles );
  456. right = anglesToRight( upangles );
  457.  
  458. thread spawnFxDelay( fxid, trace["position"], forward, right, 0.5 );
  459.  
  460. return teamFlag;
  461. }
  462.  
  463. createCapZone( team, entityTeam )
  464. {
  465. trigger = getEnt( "ctf_zone_" + entityTeam, "targetname" );
  466. if ( !isDefined( trigger ) )
  467. {
  468. error("No ctf_zone_" + entityTeam + " trigger found in map.");
  469. return;
  470. }
  471.  
  472. visuals = [];
  473. capZone = maps\mp\gametypes\_gameobjects::createUseObject( team, trigger, visuals, (0,0,85) );
  474. capZone maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
  475.  
  476. capZone maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  477. capZone maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefendFlag2D );
  478. capZone maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefendFlag3D );
  479. capZone maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCaptureFlag2D );
  480. capZone maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCaptureFlag3D );
  481.  
  482. capZone maps\mp\gametypes\_gameobjects::setUseTime( 0 );
  483. capZone maps\mp\gametypes\_gameobjects::setKeyObject( level.teamFlags[ getOtherTeam( team ) ] );
  484.  
  485. capZone.onUse = ::onUse;
  486. capZone.onCantUse = ::onCantUse;
  487.  
  488. traceStart = trigger.origin + (0,0,32);
  489. traceEnd = trigger.origin + (0,0,-32);
  490. trace = bulletTrace( traceStart, traceEnd, false, undefined );
  491.  
  492. fx = maps\mp\gametypes\_teams::getTeamFlagFX( team );
  493. fxid = loadfx( fx );
  494.  
  495. upangles = vectorToAngles( trace["normal"] );
  496. forward = anglesToForward( upangles );
  497. right = anglesToRight( upangles );
  498.  
  499. thread spawnFxDelay( fxid, trace["position"], forward, right, 0.5 );
  500.  
  501. return capZone;
  502. }
  503.  
  504.  
  505. onBeginUse( player )
  506. {
  507. team = player.pers["team"];
  508.  
  509. if ( team == self maps\mp\gametypes\_gameobjects::getOwnerTeam() )
  510. self.trigger.radius = 1024;
  511. else
  512. self.trigger.radius = self.oldRadius;
  513. }
  514.  
  515.  
  516. onEndUse( player, team, success )
  517. {
  518. self.trigger.radius = self.oldRadius;
  519. }
  520.  
  521.  
  522. onPickup( player )
  523. {
  524. self notify ( "picked_up" );
  525.  
  526. team = player.pers["team"];
  527.  
  528. if ( team == "allies" )
  529. otherTeam = "axis";
  530. else
  531. otherTeam = "allies";
  532.  
  533. if ( team == self maps\mp\gametypes\_gameobjects::getOwnerTeam() )
  534. {
  535. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flagreturn", maps\mp\gametypes\_rank::getScoreInfoValue( "return" ) );
  536. player thread [[level.onXPEvent]]( "return" );
  537. self thread returnFlag();
  538. player incPlayerStat( "flagsreturned", 1 );
  539. player thread maps\mp\_matchdata::logGameEvent( "return", player.origin );
  540.  
  541. printAndSoundOnEveryone( team, getOtherTeam( team ), &"MP_FLAG_RETURNED", &"MP_ENEMY_FLAG_RETURNED", "mp_obj_returned", "mp_obj_returned", "" );
  542. leaderDialog( "enemy_flag_returned", otherteam, "status" );
  543. leaderDialog( "flag_returned", team, "status" );
  544.  
  545. player incPersStat( "returns", 1 );
  546. player maps\mp\gametypes\_persistence::statSetChild( "round", "returns", player.pers["returns"] );
  547.  
  548. level.friendlyFlagStatusText[team] setText( &"OBJECTIVES_FLAG_HOME" );
  549. level.friendlyFlagStatusText[team].glowColor = (1,1,1);
  550. level.friendlyFlagStatusText[team].glowAlpha = 0;
  551. level.enemyFlagStatusText[otherTeam] setText( &"OBJECTIVES_FLAG_HOME" );
  552. level.enemyFlagStatusText[otherTeam].glowColor = (1,1,1);
  553. level.enemyFlagStatusText[otherTeam].glowAlpha = 0;
  554. }
  555. else
  556. {
  557. // flag carrier class? (do before attaching flag)
  558. if ( isDefined( level.ctf_loadouts ) && isDefined( level.ctf_loadouts[team] ) )
  559. player thread applyFlagCarrierClass(); // does flag attach
  560. else
  561. player attachFlag();
  562.  
  563. level.friendlyFlagStatusText[otherTeam] setPlayerNameString( player );
  564. level.friendlyFlagStatusText[otherTeam].glowColor = (0.75,0.25,0.25);
  565. level.friendlyFlagStatusText[otherTeam].glowAlpha = 1;
  566.  
  567. level.enemyFlagStatusText[team] setPlayerNameString( player );
  568. level.enemyFlagStatusText[team].glowColor = (0.25,0.75,0.25);
  569. level.enemyFlagStatusText[team].glowAlpha = 1;
  570.  
  571. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  572. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill2D );
  573. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D );
  574. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconEscort2D );
  575. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconEscort3D );
  576.  
  577. level.capZones[otherTeam] maps\mp\gametypes\_gameobjects::allowUse( "none" );
  578. level.capZones[otherTeam] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  579. //level.capZones[otherTeam] maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D );
  580. //level.capZones[otherTeam] maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill3D );
  581.  
  582. if ( !level.teamFlags[ team ] maps\mp\gametypes\_gameobjects::isHome() )
  583. {
  584. level.capZones[ team ].trigger maps\mp\_entityheadIcons::setHeadIcon( player, level.iconWaitForFlag2D, (0,0,85), undefined, undefined, undefined, undefined, undefined, undefined, undefined, false );
  585.  
  586. if ( isDefined( level.teamFlags[ team ].carrier ) )
  587. level.capZones[ otherTeam ].trigger maps\mp\_entityheadIcons::setHeadIcon( level.teamFlags[ team ].carrier, level.iconWaitForFlag2D, (0,0,85), undefined, undefined, undefined, undefined, undefined, undefined, undefined, false );
  588. }
  589.  
  590. printAndSoundOnEveryone( team, otherteam, &"MP_ENEMY_FLAG_TAKEN_BY", &"MP_FLAG_TAKEN_BY", "mp_obj_taken", "mp_enemy_obj_taken", player );
  591.  
  592. leaderDialog( "enemy_flag_taken", team, "status" );
  593. leaderDialog( "flag_taken", otherteam, "status" );
  594.  
  595. thread teamPlayerCardSplash( "callout_flagpickup", player );
  596. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flagpickup", maps\mp\gametypes\_rank::getScoreInfoValue( "pickup" ) );
  597. maps\mp\gametypes\_gamescore::givePlayerScore( "pickup", player );
  598. player thread [[level.onXPEvent]]( "pickup" );
  599. player incPlayerStat( "flagscarried", 1 );
  600. player thread maps\mp\_matchdata::logGameEvent( "pickup", player.origin );
  601. }
  602. }
  603.  
  604.  
  605. returnFlag()
  606. {
  607. self maps\mp\gametypes\_gameobjects::returnHome();
  608. }
  609.  
  610.  
  611. onDrop( player )
  612. {
  613. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  614. otherTeam = level.otherTeam[team];
  615.  
  616. self maps\mp\gametypes\_gameobjects::allowCarry( "any" );
  617. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  618. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconReturnFlag2D );
  619. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconReturnFlag3D );
  620. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCaptureFlag2D );
  621. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCaptureFlag3D );
  622.  
  623. level.friendlyFlagStatusText[team] setText( &"OBJECTIVES_FLAG_AWAY" );
  624. level.friendlyFlagStatusText[team].glowColor = (1,1,1);
  625. level.friendlyFlagStatusText[team].glowAlpha = 0;
  626. level.enemyFlagStatusText[otherTeam] setText( &"OBJECTIVES_FLAG_AWAY" );
  627. level.enemyFlagStatusText[otherTeam].glowColor = (1,1,1);
  628. level.enemyFlagStatusText[otherTeam].glowAlpha = 0;
  629.  
  630. level.capZones[otherTeam].trigger maps\mp\_entityheadIcons::setHeadIcon( "none", "", (0,0,0) );
  631.  
  632. if ( isDefined( player ) )
  633. {
  634. if ( isDefined( player.carryFlag ) )
  635. player detachFlag();
  636.  
  637. printAndSoundOnEveryone( otherTeam, "none", &"MP_ENEMY_FLAG_DROPPED_BY", "", "mp_war_objective_lost", "", player );
  638. }
  639. else
  640. {
  641. playSoundOnPlayers( "mp_war_objective_lost", otherTeam );
  642. }
  643.  
  644. leaderDialog( "enemy_flag_dropped", otherTeam, "status" );
  645. leaderDialog( "flag_dropped", team, "status" );
  646.  
  647. self thread returnAfterTime();
  648. }
  649.  
  650. returnAfterTime()
  651. {
  652. self endon ( "picked_up" );
  653.  
  654. wait ( level.flagReturnTime );
  655.  
  656. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  657. otherTeam = level.otherTeam[team];
  658. playSoundOnPlayers( "mp_war_objective_taken", team );
  659. playSoundOnPlayers( "mp_war_objective_lost", otherTeam );
  660.  
  661. self maps\mp\gametypes\_gameobjects::returnHome();
  662. }
  663.  
  664.  
  665. onReset()
  666. {
  667. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  668. otherTeam = level.otherTeam[team];
  669.  
  670. self maps\mp\gametypes\_gameobjects::allowCarry( "enemy" );
  671. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  672. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill2D );
  673. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D );
  674. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconEscort2D );
  675. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconEscort3D );
  676.  
  677. level.friendlyFlagStatusText[team] setText( &"OBJECTIVES_FLAG_HOME" );
  678. level.friendlyFlagStatusText[team].glowColor = (1,1,1);
  679. level.friendlyFlagStatusText[team].glowAlpha = 0;
  680.  
  681. level.enemyFlagStatusText[otherTeam] setText( &"OBJECTIVES_FLAG_HOME" );
  682. level.enemyFlagStatusText[otherTeam].glowColor = (1,1,1);
  683. level.enemyFlagStatusText[otherTeam].glowAlpha = 0;
  684.  
  685. level.capZones[team] maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
  686. level.capZones[team] maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  687. level.capZones[team] maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefendFlag2D );
  688. level.capZones[team] maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefendFlag3D );
  689. level.capZones[team] maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCaptureFlag2D );
  690. level.capZones[team] maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCaptureFlag3D );
  691.  
  692. level.capZones[team].trigger maps\mp\_entityheadIcons::setHeadIcon( "none", "", (0,0,0) );
  693. }
  694.  
  695.  
  696. onUse( player )
  697. {
  698. team = player.pers["team"];
  699. if ( team == "allies" )
  700. otherTeam = "axis";
  701. else
  702. otherTeam = "allies";
  703.  
  704. leaderDialog( "enemy_flag_captured", team, "status" );
  705. leaderDialog( "flag_captured", otherteam, "status" );
  706.  
  707. thread teamPlayerCardSplash( "callout_flagcapture", player );
  708. maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( team, 1 );
  709. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flag_capture", maps\mp\gametypes\_rank::getScoreInfoValue( "capture" ) );
  710. maps\mp\gametypes\_gamescore::givePlayerScore( "capture", player );
  711. player thread [[level.onXPEvent]]( "capture" );
  712. player incPlayerStat( "flagscaptured", 1 );
  713. player notify( "objective", "captured" );
  714. player thread maps\mp\_matchdata::logGameEvent( "capture", player.origin );
  715.  
  716. player incPersStat( "captures", 1 );
  717. player maps\mp\gametypes\_persistence::statSetChild( "round", "captures", player.pers["captures"] );
  718.  
  719. printAndSoundOnEveryone( team, otherteam, &"MP_ENEMY_FLAG_CAPTURED_BY", &"MP_FLAG_CAPTURED_BY", "mp_obj_captured", "mp_enemy_obj_captured", player );
  720.  
  721. if ( isDefined( player.carryFlag ) )
  722. player detachFlag();
  723.  
  724. // flag carrier class? (do after detach flag)
  725. if ( isDefined( level.ctf_loadouts ) && isDefined( level.ctf_loadouts[team] ) )
  726. player thread removeFlagCarrierClass();
  727.  
  728. level.teamFlags[otherTeam] returnFlag();
  729.  
  730. level thread checkRoundWin( team );
  731. }
  732.  
  733.  
  734. checkRoundWin( team )
  735. {
  736. if ( inOvertime() )
  737. {
  738. game["roundsWon"][team]++;
  739. level.finalKillCam_winner = team;
  740. game["teamScores"]["axis"] = game["roundsWon"]["axis"];
  741. game["teamScores"]["allies"] = game["roundsWon"]["allies"];
  742. setTeamScore( "axis", game["teamScores"]["axis"] );
  743. setTeamScore( "allies", game["teamScores"]["allies"] );
  744. thread maps\mp\gametypes\_gamelogic::endGame( team, game["strings"]["score_limit_reached"] );
  745. }
  746. else if ( game["switchedsides"] )
  747. {
  748. if ( game["teamScores"][team] == getWatchedDvar( "scorelimit" ) )
  749. {
  750. game["roundsWon"][team]++;
  751. game["teamScores"]["axis"] = game["roundsWon"]["axis"];
  752. game["teamScores"]["allies"] = game["roundsWon"]["allies"];
  753. setTeamScore( "axis", game["teamScores"]["axis"] );
  754. setTeamScore( "allies", game["teamScores"]["allies"] );
  755.  
  756. if ( game["roundsWon"][team] > game["roundsWon"][level.otherTeam[team]] )
  757. {
  758. level.finalKillCam_winner = team;
  759. thread maps\mp\gametypes\_gamelogic::endGame( team, game["strings"]["score_limit_reached"] );
  760. }
  761. else
  762. {
  763. // tie, go into overtime
  764. level.finalKillCam_winner = "none";
  765. thread maps\mp\gametypes\_gamelogic::endGame( "overtime", game["strings"]["score_limit_reached"] );
  766. }
  767. }
  768. }
  769. else
  770. {
  771. if ( game["teamScores"][team] == getWatchedDvar( "scorelimit" ) )
  772. {
  773. game["roundsWon"][team]++;
  774. level.finalKillCam_winner = team;
  775. game["teamScores"]["axis"] = game["roundsWon"]["axis"];
  776. game["teamScores"]["allies"] = game["roundsWon"]["allies"];
  777. setTeamScore( "axis", game["teamScores"]["axis"] );
  778. setTeamScore( "allies", game["teamScores"]["allies"] );
  779. thread maps\mp\gametypes\_gamelogic::endGame( "halftime", game["strings"]["score_limit_reached"] );
  780. }
  781. }
  782. }
  783.  
  784.  
  785. onTimeLimit()
  786. {
  787. if ( inOvertime() )
  788. {
  789. game["teamScores"]["axis"] = game["roundsWon"]["axis"];
  790. game["teamScores"]["allies"] = game["roundsWon"]["allies"];
  791. setTeamScore( "axis", game["teamScores"]["axis"] );
  792. setTeamScore( "allies", game["teamScores"]["allies"] );
  793. level.finalKillCam_winner = "none";
  794. thread maps\mp\gametypes\_gamelogic::endGame( "tie", game["strings"]["time_limit_reached"] );
  795. }
  796. else if ( game["switchedsides"] )
  797. {
  798. // whoever is winning wins the round
  799. if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
  800. game["roundsWon"]["axis"]++;
  801. else if ( game["teamScores"]["allies"] > game["teamScores"]["axis"] )
  802. game["roundsWon"]["allies"]++;
  803.  
  804. game["teamScores"]["axis"] = game["roundsWon"]["axis"];
  805. game["teamScores"]["allies"] = game["roundsWon"]["allies"];
  806. setTeamScore( "axis", game["teamScores"]["axis"] );
  807. setTeamScore( "allies", game["teamScores"]["allies"] );
  808.  
  809. if ( game["roundsWon"]["axis"] > game["roundsWon"]["allies"] )
  810. {
  811. // win game
  812. level.finalKillCam_winner = "axis";
  813. thread maps\mp\gametypes\_gamelogic::endGame( "axis", game["strings"]["time_limit_reached"] );
  814. return;
  815. }
  816. else if ( game["roundsWon"]["allies"] > game["roundsWon"]["axis"] )
  817. {
  818. // win game
  819. level.finalKillCam_winner = "allies";
  820. thread maps\mp\gametypes\_gamelogic::endGame( "allies", game["strings"]["time_limit_reached"] );
  821. return;
  822. }
  823. else
  824. {
  825. // tie, go into overtime
  826. level.finalKillCam_winner = "none";
  827. thread maps\mp\gametypes\_gamelogic::endGame( "overtime", game["strings"]["time_limit_reached"] );
  828. }
  829. }
  830. else
  831. {
  832. // whoever is winning wins the round, tie goes to neither, endgame( "overtime" ) doesn't touch rounds won so update them
  833. if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
  834. {
  835. game["roundsWon"]["axis"]++;
  836. level.finalKillCam_winner = "axis";
  837. }
  838. else if ( game["teamScores"]["allies"] > game["teamScores"]["axis"] )
  839. {
  840. game["roundsWon"]["allies"]++;
  841. level.finalKillCam_winner = "allies";
  842. }
  843. else
  844. {
  845. level.finalKillCam_winner = "none";
  846. }
  847. game["teamScores"]["axis"] = game["roundsWon"]["axis"];
  848. game["teamScores"]["allies"] = game["roundsWon"]["allies"];
  849. setTeamScore( "axis", game["teamScores"]["axis"] );
  850. setTeamScore( "allies", game["teamScores"]["allies"] );
  851. thread maps\mp\gametypes\_gamelogic::endGame( "halftime", game["strings"]["time_limit_reached"] );
  852. }
  853. }
  854.  
  855.  
  856. applyFlagCarrierClass()
  857. {
  858. self endon( "death" );
  859. self endon( "disconnect" );
  860. level endon( "game_ended" );
  861.  
  862. if ( self isJuggernaut() )
  863. {
  864. self notify( "lost_juggernaut" );
  865. wait( 0.05 );
  866. }
  867.  
  868. self.pers["gamemodeLoadout"] = level.ctf_loadouts[self.team];
  869. self maps\mp\gametypes\_class::giveLoadout( self.team, "gamemode", false, false );
  870.  
  871. self attachFlag();
  872. }
  873.  
  874.  
  875. removeFlagCarrierClass()
  876. {
  877. self endon( "death" );
  878. self endon( "disconnect" );
  879. level endon( "game_ended" );
  880.  
  881. if ( self isJuggernaut() )
  882. {
  883. self notify( "lost_juggernaut" );
  884. wait( 0.05 );
  885. }
  886.  
  887. self.pers["gamemodeLoadout"] = undefined;
  888. self maps\mp\gametypes\_class::giveLoadout( self.team, self.class, undefined, false );
  889. }
  890.  
  891.  
  892. onCantUse( player )
  893. {
  894. // player iPrintLnBold( &"MP_CANT_PLANT_WITHOUT_BOMB" );
  895. }
  896.  
  897.  
  898. onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, killId )
  899. {
  900. if ( isDefined( attacker ) && isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] )
  901. {
  902. if ( isDefined( attacker.carryFlag ) )
  903. attacker incPlayerStat( "killsasflagcarrier", 1 );
  904.  
  905. if ( isDefined( self.carryFlag ) )
  906. {
  907. attacker thread [[level.onXPEvent]]( "kill_carrier" );
  908. maps\mp\gametypes\_gamescore::givePlayerScore( "kill_carrier", attacker );
  909. attacker incPlayerStat( "flagcarrierkills", 1 );
  910.  
  911. attacker incPersStat( "defends", 1 );
  912. attacker maps\mp\gametypes\_persistence::statSetChild( "round", "defends", attacker.pers["defends"] );
  913.  
  914. thread maps\mp\_matchdata::logKillEvent( killId, "carrying" );
  915.  
  916. self detachFlag();
  917. }
  918. }
  919. }
  920.  
  921.  
  922. attachFlag()
  923. {
  924. otherTeam = level.otherTeam[self.pers["team"]];
  925.  
  926. self attach( level.carryFlag[otherTeam], "J_spine4", true );
  927. self.carryFlag = level.carryFlag[otherTeam];
  928. }
  929.  
  930. detachFlag()
  931. {
  932. self detach( self.carryFlag, "J_spine4" );
  933. self.carryFlag = undefined;
  934. }
  935.  
  936. initGametypeAwards()
  937. {
  938. maps\mp\_awards::initStatAward( "flagscaptured", 0, maps\mp\_awards::highestWins );
  939. maps\mp\_awards::initStatAward( "flagsreturned", 0, maps\mp\_awards::highestWins );
  940. maps\mp\_awards::initStatAward( "flagcarrierkills", 0, maps\mp\_awards::highestWins );
  941. maps\mp\_awards::initStatAward( "flagscarried", 0, maps\mp\_awards::highestWins );
  942. maps\mp\_awards::initStatAward( "killsasflagcarrier", 0, maps\mp\_awards::highestWins );
  943. }
  944.  
  945.  
  946. setSpecialLoadouts()
  947. {
  948. if ( isUsingMatchRulesData() && GetMatchRulesData( "defaultClasses", "axis", 5, "class", "inUse" ) )
  949. {
  950. level.ctf_loadouts["axis"] = getMatchRulesSpecialClass( "axis", 5 );
  951. }
  952. if ( isUsingMatchRulesData() && GetMatchRulesData( "defaultClasses", "allies", 5, "class", "inUse" ) )
  953. {
  954. level.ctf_loadouts["allies"] = getMatchRulesSpecialClass( "allies", 5 );
  955. }
  956. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement