Advertisement
Guest User

oneflag - Notesblok

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