Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.56 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. registerTimeLimitDvar( level.gameType, 3, 0, 1440 );
  27. registerScoreLimitDvar( level.gameType, 1, 0, 10000 );
  28. registerRoundLimitDvar( level.gameType, 0, 0, 30 );
  29. registerWinLimitDvar( level.gameType, 4, 0, 10 );
  30. registerRoundSwitchDvar( level.gameType, 3, 0, 30 );
  31. registerNumLivesDvar( level.gameType, 0, 0, 10 );
  32. registerHalfTimeDvar( level.gameType, 0, 0, 1 );
  33.  
  34. level.objectiveBased = true;
  35. level.teamBased = true;
  36. level.onPrecacheGameType = ::onPrecacheGameType;
  37. level.onStartGameType = ::onStartGameType;
  38. level.getSpawnPoint = ::getSpawnPoint;
  39. level.onSpawnPlayer = ::onSpawnPlayer;
  40. level.onPlayerKilled = ::onPlayerKilled;
  41. level.onTimeLimit = ::onTimeLimit;
  42. level.initGametypeAwards = ::initGametypeAwards;
  43.  
  44. game["dialog"]["gametype"] = "oneflag";
  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. if ( getdvar("scr_oneflag_returntime") == "" )
  56. setdvar("scr_oneflag_returntime", "15");
  57. level.flagReturnTime = getdvarint( "scr_oneflag_returntime" );
  58. }
  59.  
  60. onPrecacheGameType()
  61. {
  62. precacheString(&"MP_FLAG_TAKEN_BY");
  63. precacheString(&"MP_ENEMY_FLAG_TAKEN_BY");
  64. precacheString(&"MP_FLAG_CAPTURED_BY");
  65. precacheString(&"MP_ENEMY_FLAG_CAPTURED_BY");
  66. //precacheString(&"MP_FLAG_RETURNED_BY");
  67. precacheString(&"MP_FLAG_RETURNED");
  68. precacheString(&"MP_ENEMY_FLAG_RETURNED");
  69. precacheString(&"MP_YOUR_FLAG_RETURNING_IN");
  70. precacheString(&"MP_ENEMY_FLAG_RETURNING_IN");
  71. precacheString(&"MP_ENEMY_FLAG_DROPPED_BY");
  72. precacheString( &"MP_DOM_NEUTRAL_FLAG_CAPTURED" );
  73. }
  74.  
  75.  
  76. onStartGameType()
  77. {
  78. if ( !isdefined( game["switchedsides"] ) )
  79. game["switchedsides"] = false;
  80.  
  81. if ( !isdefined( game["original_defenders"] ) )
  82. game["original_defenders"] = game["defenders"];
  83.  
  84. if ( game["switchedsides"] )
  85. {
  86. oldAttackers = game["attackers"];
  87. oldDefenders = game["defenders"];
  88. game["attackers"] = oldDefenders;
  89. game["defenders"] = oldAttackers;
  90. }
  91.  
  92.  
  93. setClientNameMode("auto_change");
  94.  
  95. setObjectiveText( game["attackers"], &"OBJECTIVES_CTF" );
  96. setObjectiveText( game["defenders"], &"OBJECTIVES_CTF" );
  97.  
  98. if ( level.splitscreen )
  99. {
  100. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER" );
  101. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER" );
  102. }
  103. else
  104. {
  105. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE" );
  106. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE" );
  107. }
  108. setObjectiveHintText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER_HINT" );
  109. setObjectiveHintText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER_HINT" );
  110.  
  111.  
  112. level.spawnMins = ( 0, 0, 0 );
  113. level.spawnMaxs = ( 0, 0, 0 );
  114. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_ctf_spawn_allies_start" );
  115. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_ctf_spawn_axis_start" );
  116. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_ctf_spawn_allies" );
  117. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_ctf_spawn_axis" );
  118.  
  119. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  120. setMapCenter( level.mapCenter );
  121.  
  122. thread maps\mp\gametypes\_dev::init();
  123.  
  124. allowed[0] = "ctf";
  125. maps\mp\gametypes\_gameobjects::main(allowed);
  126.  
  127. maps\mp\gametypes\_rank::registerScoreInfo( "kill", 100 );
  128. maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 100 );
  129. maps\mp\gametypes\_rank::registerScoreInfo( "assist", 20 );
  130.  
  131. maps\mp\gametypes\_rank::registerScoreInfo( "pickup", 100 );
  132. maps\mp\gametypes\_rank::registerScoreInfo( "return", 50 );
  133. maps\mp\gametypes\_rank::registerScoreInfo( "capture", 500 );
  134.  
  135. maps\mp\gametypes\_rank::registerScoreInfo( "kill_carrier", 100 );
  136.  
  137. maps\mp\gametypes\_rank::registerScoreInfo( "defend", 100 );
  138. maps\mp\gametypes\_rank::registerScoreInfo( "defend_assist", 100 );
  139.  
  140. maps\mp\gametypes\_rank::registerScoreInfo( "assault", 200 );
  141. maps\mp\gametypes\_rank::registerScoreInfo( "assault_assist", 40 );
  142.  
  143. thread oneflag_ctf();
  144. }
  145.  
  146.  
  147. getSpawnPoint()
  148. {
  149. spawnteam = self.pers["team"];
  150. if ( game["switchedsides"] )
  151. spawnteam = getOtherTeam( spawnteam );
  152.  
  153. if ( level.inGracePeriod )
  154. {
  155. spawnPoints = getentarray("mp_ctf_spawn_" + spawnteam + "_start", "classname");
  156. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  157. }
  158. else
  159. {
  160. spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( spawnteam );
  161. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  162. }
  163.  
  164. return spawnPoint;
  165. }
  166.  
  167.  
  168. onSpawnPlayer()
  169. {
  170. self.usingObj = undefined;
  171. }
  172.  
  173.  
  174. oneflag_ctf()
  175. {
  176.  
  177. level.flagModel["allies"] = maps\mp\gametypes\_teams::getTeamFlagModel( "allies" );
  178. level.icon2D["allies"] = maps\mp\gametypes\_teams::getTeamFlagIcon( "allies" );
  179. level.carryFlag["allies"] = maps\mp\gametypes\_teams::getTeamFlagCarryModel( "allies" );
  180.  
  181. precacheModel( level.flagModel["allies"] );
  182. precacheModel( level.carryFlag["allies"] );
  183.  
  184. level.flagModel["axis"] = maps\mp\gametypes\_teams::getTeamFlagModel( "axis" );
  185. level.icon2D["axis"] = maps\mp\gametypes\_teams::getTeamFlagIcon( "axis" );
  186. level.carryFlag["axis"] = maps\mp\gametypes\_teams::getTeamFlagCarryModel( "axis" );
  187.  
  188. precacheModel( level.flagModel["axis"] );
  189. precacheModel( level.carryFlag["axis"] );
  190.  
  191. level.iconCapture3D = "waypoint_capture";
  192. level.iconCapture2D = "compass_waypoint_capture";
  193. level.iconDefend3D = "waypoint_defend";
  194. level.iconDefend2D = "compass_waypoint_defend";
  195. level.iconTarget3D = "waypoint_target";
  196. level.iconTarget2D = "compass_waypoint_target";
  197.  
  198. precacheShader( level.icon2D["axis"] );
  199. precacheShader( level.icon2D["allies"] );
  200.  
  201. precacheShader( level.iconCapture3D );
  202. precacheShader( level.iconDefend3D );
  203.  
  204. precacheShader( level.iconCapture2D );
  205. precacheShader( level.iconDefend2D );
  206.  
  207. precacheShader( level.iconTarget3D );
  208. precacheShader( level.iconTarget2D );
  209.  
  210. precacheShader( "waypoint_kill" );
  211.  
  212. level.teamFlags[game["defenders"]] = createTeamFlag( game["defenders"] );
  213. level.capZones[game["attackers"]] = createCapZone( game["attackers"] );
  214. level.flagCaptured = false;
  215. }
  216.  
  217.  
  218. spawnFxDelay( fxid, pos, forward, right, delay )
  219. {
  220. wait delay;
  221. effect = spawnFx( fxid, pos, forward, right );
  222. triggerFx( effect );
  223. }
  224.  
  225. createTeamFlag( team )
  226. {
  227. entityTeam = game["original_defenders"];
  228.  
  229. trigger = getEnt( "ctf_trig_" + entityTeam, "targetname" );
  230. if ( !isDefined( trigger ) )
  231. {
  232. error( "No ctf_trig_" + entityTeam + " trigger found in map." );
  233. return;
  234. }
  235. visuals[0] = getEnt( "ctf_flag_" + entityTeam, "targetname" );
  236. if ( !isDefined( visuals[0] ) )
  237. {
  238. error( "No ctf_flag_" + entityTeam + " script_model found in map." );
  239. return;
  240. }
  241.  
  242. cloneTrigger = spawn( "trigger_radius", trigger.origin, 0, 96, trigger.height );
  243. trigger delete();
  244. trigger = cloneTrigger;
  245.  
  246. visuals[0] setModel( level.flagModel[team] );
  247.  
  248. teamFlag = maps\mp\gametypes\_gameobjects::createCarryObject( team, trigger, visuals, (0,0,85) );
  249. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseTime( "friendly", 15.0 );
  250. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseTime( "enemy", 0 );
  251. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseText( "enemy", &"MP_CAPTURING_FLAG" );
  252. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseText( "friendly", &"MP_RETURNING_FLAG" );
  253.  
  254. teamFlag maps\mp\gametypes\_gameobjects::allowCarry( "enemy" );
  255. teamFlag maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  256. teamFlag maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefend2D );
  257. teamFlag maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefend3D );
  258. teamFlag maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCapture2D );
  259. teamFlag maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCapture3D );
  260. teamFlag maps\mp\gametypes\_gameobjects::setCarryIcon( level.icon2D[team] );
  261. teamFlag.allowWeapons = true;
  262. teamFlag.onPickup = ::onPickup;
  263. teamFlag.onPickupFailed = ::onPickup;
  264. teamFlag.onDrop = ::onDrop;
  265. teamFlag.onReset = ::onReset;
  266. //teamFlag.onBeginUse = ::onBeginUse;
  267. //teamFlag.onEndUse = ::onEndUse;
  268.  
  269. teamFlag.oldRadius = trigger.radius;
  270.  
  271. traceStart = trigger.origin + (0,0,32);
  272. traceEnd = trigger.origin + (0,0,-32);
  273. trace = bulletTrace( traceStart, traceEnd, false, undefined );
  274.  
  275. fx = maps\mp\gametypes\_teams::getTeamFlagFX( team );
  276. fxid = loadfx( fx );
  277.  
  278. upangles = vectorToAngles( trace["normal"] );
  279. forward = anglesToForward( upangles );
  280. right = anglesToRight( upangles );
  281.  
  282. thread spawnFxDelay( fxid, trace["position"], forward, right, 0.5 );
  283.  
  284. return teamFlag;
  285. }
  286.  
  287. createCapZone( team )
  288. {
  289. entityTeam = level.otherTeam[game["original_defenders"]];
  290.  
  291. trigger = getEnt( "ctf_zone_" + entityTeam, "targetname" );
  292. if ( !isDefined( trigger ) )
  293. {
  294. error("No ctf_zone_" + entityTeam + " trigger found in map.");
  295. return;
  296. }
  297.  
  298. visuals[0] = getEnt( "ctf_flag_" + entityTeam, "targetname" );
  299. if ( !isDefined( visuals[0] ) )
  300. {
  301. error( "No ctf_flag_" + entityTeam + " script_model found in map." );
  302. return;
  303. }
  304.  
  305. visuals[0] hide();
  306.  
  307. visuals = [];
  308. capZone = maps\mp\gametypes\_gameobjects::createUseObject( team, trigger, visuals, (0,0,85) );
  309. capZone maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
  310. capZone maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  311. capZone maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconTarget2D );
  312. capZone maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconTarget3D );
  313.  
  314. capZone maps\mp\gametypes\_gameobjects::setUseTime( 0 );
  315. capZone maps\mp\gametypes\_gameobjects::setKeyObject( level.teamFlags[ getOtherTeam( team ) ] );
  316.  
  317. capZone.onUse = ::onUse;
  318. capZone.onCantUse = ::onCantUse;
  319.  
  320. traceStart = trigger.origin + (0,0,32);
  321. traceEnd = trigger.origin + (0,0,-32);
  322. trace = bulletTrace( traceStart, traceEnd, false, undefined );
  323.  
  324. fx = maps\mp\gametypes\_teams::getTeamFlagFX( team );
  325. fxid = loadfx( fx );
  326.  
  327. upangles = vectorToAngles( trace["normal"] );
  328. forward = anglesToForward( upangles );
  329. right = anglesToRight( upangles );
  330.  
  331. thread spawnFxDelay( fxid, trace["position"], forward, right, 0.5 );
  332.  
  333. return capZone;
  334. }
  335.  
  336.  
  337. onBeginUse( player )
  338. {
  339. team = player.pers["team"];
  340.  
  341. if ( team == self maps\mp\gametypes\_gameobjects::getOwnerTeam() )
  342. self.trigger.radius = 1024;
  343. else
  344. self.trigger.radius = self.oldRadius;
  345. }
  346.  
  347.  
  348. onEndUse( player, team, success )
  349. {
  350. self.trigger.radius = self.oldRadius;
  351. }
  352.  
  353.  
  354. onPickup( player )
  355. {
  356. team = player.pers["team"];
  357.  
  358. if ( team == "allies" )
  359. otherTeam = "axis";
  360. else
  361. otherTeam = "allies";
  362.  
  363.  
  364. if ( team == self maps\mp\gametypes\_gameobjects::getOwnerTeam() )
  365. {
  366. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flagreturn", maps\mp\gametypes\_rank::getScoreInfoValue( "pickup" ) );
  367. player thread [[level.onXPEvent]]( "pickup" );
  368. self thread returnFlag();
  369. player incPlayerStat( "flagsreturned", 1 );
  370. player thread maps\mp\_matchdata::logGameEvent( "return", player.origin );
  371. }
  372. else
  373. {
  374. player attachFlag();
  375.  
  376. level.capZones[team] maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  377.  
  378. //self maps\mp\gametypes\_gameobjects::setVisibleTeam( "enemy" );
  379. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" );
  380. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_kill" );
  381. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconTarget2D );
  382.  
  383. printAndSoundOnEveryone( team, otherteam, &"MP_ENEMY_FLAG_TAKEN_BY", &"MP_FLAG_TAKEN_BY", "mp_obj_taken", "mp_enemy_obj_taken", player );
  384.  
  385. leaderDialog( "enemy_flag_taken", team, "status" );
  386. leaderDialog( "flag_taken", otherteam, "status" );
  387.  
  388. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flagpickup", maps\mp\gametypes\_rank::getScoreInfoValue( "pickup" ) );
  389. maps\mp\gametypes\_gamescore::givePlayerScore( "pickup", player );
  390. player thread [[level.onXPEvent]]( "pickup" );
  391. player incPlayerStat( "flagscarried", 1 );
  392. player thread maps\mp\_matchdata::logGameEvent( "pickup", player.origin );
  393. }
  394. }
  395.  
  396.  
  397. returnFlag()
  398. {
  399. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  400. otherTeam = level.otherTeam[team];
  401.  
  402. self maps\mp\gametypes\_gameobjects::returnHome();
  403. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  404. self maps\mp\gametypes\_gameobjects::allowCarry( "enemy" );
  405.  
  406. level.capZones[otherTeam] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  407.  
  408. printAndSoundOnEveryone( team, getOtherTeam( team ), &"MP_FLAG_RETURNED", &"MP_ENEMY_FLAG_RETURNED", "mp_obj_returned", "mp_obj_returned", "" );
  409. leaderDialog( "enemy_flag_returned", otherteam, "status" );
  410. leaderDialog( "flag_returned", team, "status" );
  411. }
  412.  
  413.  
  414. onDrop( player )
  415. {
  416. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  417. otherTeam = level.otherTeam[team];
  418.  
  419. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefend3D );
  420. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefend2D );
  421. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCapture3D );
  422. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  423. self maps\mp\gametypes\_gameobjects::allowCarry( "any" );
  424.  
  425. level.capZones[otherTeam] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  426.  
  427. if ( isDefined( player ) )
  428. {
  429. if ( isDefined( player.carryFlag ) )
  430. player detachFlag();
  431.  
  432. printAndSoundOnEveryone( otherTeam, "none", &"MP_ENEMY_FLAG_DROPPED_BY", "", "mp_war_objective_lost", "", player );
  433. }
  434. else
  435. {
  436. playSoundOnPlayers( "mp_war_objective_lost", otherTeam );
  437. }
  438.  
  439. leaderDialog( "enemy_flag_dropped", otherTeam, "status" );
  440. leaderDialog( "flag_dropped", team, "status" );
  441. }
  442.  
  443.  
  444. onReset()
  445. {
  446. self notify ( "flag_reset" );
  447.  
  448. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  449. otherTeam = level.otherTeam[team];
  450.  
  451. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  452. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefend3D );
  453. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefend2D );
  454. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCapture3D );
  455.  
  456. level.capZones[otherTeam] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  457. }
  458.  
  459.  
  460. onUse( player )
  461. {
  462. team = player.pers["team"];
  463. if ( team == "allies" )
  464. otherTeam = "axis";
  465. else
  466. otherTeam = "allies";
  467.  
  468. leaderDialog( "enemy_flag_captured", team, "status" );
  469. leaderDialog( "flag_captured", otherteam, "status" );
  470.  
  471. maps\mp\gametypes\_gamescore::givePlayerScore( "capture", player );
  472. player thread [[level.onXPEvent]]( "capture" );
  473. player incPlayerStat( "flagscaptured", 1 );
  474. player notify( "objective", "captured" );
  475. player thread maps\mp\_matchdata::logGameEvent( "capture", player.origin );
  476.  
  477. // round win here, no reset necessary
  478.  
  479. printAndSoundOnEveryone( team, otherteam, &"MP_ENEMY_FLAG_CAPTURED_BY", &"MP_FLAG_CAPTURED_BY", "mp_obj_captured", "mp_enemy_obj_captured", player );
  480.  
  481. thread flagCaptured( team, &"MP_DOM_NEUTRAL_FLAG_CAPTURED" );
  482.  
  483. level.teamFlags[otherTeam] maps\mp\gametypes\_gameobjects::allowCarry( "none" );
  484. level.teamFlags[otherTeam] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  485. level.teamFlags[otherTeam] maps\mp\gametypes\_gameobjects::disableObject();
  486. level.capZones[team] maps\mp\gametypes\_gameobjects::allowUse( "none" );
  487.  
  488. if ( isDefined( player.carryFlag ) )
  489. player detachFlag();
  490. }
  491.  
  492.  
  493. flagCaptured( winningTeam, endReasonText )
  494. {
  495. maps\mp\gametypes\_gamelogic::endGame( winningTeam, endReasonText );
  496. level.flagCaptured = true;
  497. }
  498.  
  499.  
  500. onTimeLimit()
  501. {
  502. if ( level.flagCaptured )
  503. return;
  504.  
  505. // TODO: change to "Flag Defended" or some such
  506. maps\mp\gametypes\_gamelogic::endGame( game["defenders"], game["strings"]["time_limit_reached"] );
  507. }
  508.  
  509.  
  510. onCantUse( player )
  511. {
  512. // player iPrintLnBold( &"MP_CANT_PLANT_WITHOUT_BOMB" );
  513. }
  514.  
  515.  
  516. onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, killId )
  517. {
  518. if ( isDefined( attacker ) && isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] )
  519. {
  520. if ( isDefined( attacker.carryFlag ) )
  521. attacker incPlayerStat( "killsasflagcarrier", 1 );
  522.  
  523. if ( isDefined( self.carryFlag ) )
  524. {
  525. attacker thread [[level.onXPEvent]]( "kill_carrier" );
  526. maps\mp\gametypes\_gamescore::givePlayerScore( "kill_carrier", attacker );
  527. attacker incPlayerStat( "flagcarrierkills", 1 );
  528.  
  529. thread maps\mp\_matchdata::logKillEvent( killId, "carrying" );
  530.  
  531. self detachFlag();
  532. }
  533. }
  534. }
  535.  
  536.  
  537. attachFlag()
  538. {
  539. otherTeam = level.otherTeam[self.pers["team"]];
  540.  
  541. self attach( level.carryFlag[otherTeam], "J_spine4", true );
  542. self.carryFlag = level.carryFlag[otherTeam];
  543. }
  544.  
  545. detachFlag()
  546. {
  547. self detach( self.carryFlag, "J_spine4" );
  548. self.carryFlag = undefined;
  549. }
  550.  
  551. initGametypeAwards()
  552. {
  553. maps\mp\_awards::initStatAward( "flagscaptured", 0, maps\mp\_awards::highestWins );
  554. maps\mp\_awards::initStatAward( "flagsreturned", 0, maps\mp\_awards::highestWins );
  555. maps\mp\_awards::initStatAward( "flagcarrierkills", 0, maps\mp\_awards::highestWins );
  556. maps\mp\_awards::initStatAward( "flagscarried", 0, maps\mp\_awards::highestWins );
  557. maps\mp\_awards::initStatAward( "killsasflagcarrier", 0, maps\mp\_awards::highestWins );
  558. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement