Advertisement
Guest User

ctfpro - Notesblok

a guest
Nov 19th, 2011
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.61 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5. /*QUAKED mp_ctf_pro_spawn_attackers_start (1.0 0.5 0.5) (-16 -16 0) (16 16 72)
  6. Attackers spawn away from enemies and near their team at one of these positions at the start of a round.*/
  7.  
  8. /*QUAKED mp_ctf_pro_spawn_attackers (0.75 0.5 0.5) (-16 -16 0) (16 16 72)
  9. Attackers spawn away from enemies and near their team at one of these positions.*/
  10.  
  11. /*QUAKED mp_ctf_pro_spawn_defenders_start (0.5 1.0 0.5) (-16 -16 0) (16 16 72)
  12. Defenders spawn away from enemies and near their team at one of these positions at the start of a round.*/
  13.  
  14. /*QUAKED mp_ctf_pro_spawn_defenders (0.5 0.75 0.5) (-16 -16 0) (16 16 72)
  15. Defenders spawn away from enemies and near their team at one of these positions.*/
  16.  
  17. main()
  18. {
  19. maps\mp\gametypes\_globallogic::init();
  20. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  21. maps\mp\gametypes\_globallogic::SetupCallbacks();
  22.  
  23. registerScoreLimitDvar( level.gameType, 1000 );
  24. registerTimeLimitDvar( level.gameType, 6, 0, 0 );
  25. registerRoundLimitDvar( level.gameType, 2, 0, 0 );
  26. setOverrideWatchDvar( "winlimit", 2 );
  27. registerRoundSwitchDvar( level.gameType, 1, 0, 0 );
  28. registerNumLivesDvar( level.gameType, 0, 0, 0 );
  29. registerHalfTimeDvar( level.gameType, 1, 0, 0 );
  30.  
  31. //setOverTimeLimitDvar( 3 );
  32.  
  33. level.teamBased = true;
  34. level.onPrecacheGameType = ::onPrecacheGameType;
  35. level.onStartGameType = ::onStartGameType;
  36. level.getSpawnPoint = ::getSpawnPoint;
  37. level.onPlayerKilled = ::onPlayerKilled;
  38. level.initGametypeAwards = ::initGametypeAwards;
  39. level.onHalfTime = ::onTimeLimit;
  40. level.onTimeLimit = ::onTimeLimit;
  41. level.onSpawnPlayer = ::onSpawnPlayer;
  42.  
  43. level.scoreLimitOverride = true;
  44. level.overtimeScoreWinOverride = true;
  45.  
  46. level.flagReturnTime = getIntProperty( "scr_ctf_returntime", 30 );
  47.  
  48. game["dialog"]["gametype"] = "captureflag";
  49.  
  50. if ( getDvarInt( "g_hardcore" ) )
  51. game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
  52. else if ( getDvarInt( "camera_thirdPerson" ) )
  53. game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
  54. else if ( getDvarInt( "scr_diehard" ) )
  55. game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
  56. else if (getDvarInt( "scr_" + level.gameType + "_promode" ) )
  57. game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
  58.  
  59. game["dialog"]["offense_obj"] = "capture_obj";
  60. game["dialog"]["defense_obj"] = "capture_obj";
  61. }
  62.  
  63. onPrecacheGameType()
  64. {
  65. precacheString(&"MP_FLAG_TAKEN_BY");
  66. precacheString(&"MP_ENEMY_FLAG_TAKEN_BY");
  67. precacheString(&"MP_FLAG_CAPTURED_BY");
  68. precacheString(&"MP_ENEMY_FLAG_CAPTURED_BY");
  69. precacheString(&"MP_FLAG_RETURNED");
  70. precacheString(&"MP_ENEMY_FLAG_RETURNED");
  71. precacheString(&"MP_YOUR_FLAG_RETURNING_IN");
  72. precacheString(&"MP_ENEMY_FLAG_RETURNING_IN");
  73. precacheString(&"MP_ENEMY_FLAG_DROPPED_BY");
  74. precacheString(&"MP_DOM_NEUTRAL_FLAG_CAPTURED");
  75. precacheString(&"MP_GRABBING_FLAG");
  76. precacheString(&"MP_RETURNING_FLAG");
  77. }
  78.  
  79.  
  80. onSpawnPlayer()
  81. {
  82. if( ( inOvertime() ) && !isDefined( self.otSpawned ) )
  83. self thread printOTHint();
  84. }
  85.  
  86.  
  87. printOTHint()
  88. {
  89. self endon ( "disconnect" );
  90. // give the "Overtime!" message time to show
  91. wait ( 0.25 );
  92.  
  93. self.otSpawned = true;
  94. hintMessage = getObjectiveHintText( self.team );
  95. self thread maps\mp\gametypes\_hud_message::hintMessage( hintMessage );
  96. }
  97.  
  98.  
  99. onStartGameType()
  100. {
  101. if ( !isdefined( game["switchedsides"] ) )
  102. game["switchedsides"] = false;
  103.  
  104. if ( !isdefined( game["original_defenders"] ) )
  105. game["original_defenders"] = game["defenders"];
  106.  
  107. if ( game["switchedsides"] )
  108. {
  109. oldAttackers = game["attackers"];
  110. oldDefenders = game["defenders"];
  111. game["attackers"] = oldDefenders;
  112. game["defenders"] = oldAttackers;
  113.  
  114. if ( game["roundsWon"][game["defenders"]] > 0 )
  115. {
  116. game["teamScores"][game["defenders"]] = 500;
  117. setTeamScore( game["defenders"], 500 );
  118. }
  119. else
  120. {
  121. game["teamScores"][game["defenders"]] = 0;
  122. setTeamScore( game["defenders"], 0 );
  123. }
  124. }
  125.  
  126. setClientNameMode("auto_change");
  127.  
  128. if ( level.splitscreen )
  129. {
  130. if ( inOvertime() )
  131. {
  132. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_GRAB_FLAG" );
  133. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_GRAB_FLAG" );
  134. }
  135. else
  136. {
  137. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER" );
  138. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER" );
  139. }
  140. }
  141. else
  142. {
  143. if ( inOvertime() )
  144. {
  145. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_GRAB_FLAG_SCORE" );
  146. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_GRAB_FLAG_SCORE" );
  147. }
  148. else
  149. {
  150. setObjectiveScoreText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE" );
  151. setObjectiveScoreText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE" );
  152. }
  153. }
  154.  
  155. if ( inOvertime() )
  156. {
  157. setObjectiveText( game["attackers"], &"OBJECTIVES_OVERTIME_CTF" );
  158. setObjectiveText( game["defenders"], &"OBJECTIVES_OVERTIME_CTF" );
  159. setObjectiveHintText( game["attackers"], &"OBJECTIVES_GRAB_FLAG_HINT" );
  160. setObjectiveHintText( game["defenders"], &"OBJECTIVES_GRAB_FLAG_HINT" );
  161. }
  162. else
  163. {
  164. setObjectiveText( game["attackers"], &"OBJECTIVES_CTF" );
  165. setObjectiveText( game["defenders"], &"OBJECTIVES_CTF" );
  166. setObjectiveHintText( game["attackers"], &"OBJECTIVES_ONE_FLAG_ATTACKER_HINT" );
  167. setObjectiveHintText( game["defenders"], &"OBJECTIVES_ONE_FLAG_DEFENDER_HINT" );
  168. }
  169.  
  170. level.spawnMins = ( 0, 0, 0 );
  171. level.spawnMaxs = ( 0, 0, 0 );
  172. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_ctf_pro_spawn_attackers_start" );
  173. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_ctf_pro_spawn_defenders_start" );
  174. maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["attackers"], "mp_ctf_pro_spawn_attackers" );
  175. maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["defenders"], "mp_ctf_pro_spawn_defenders" );
  176.  
  177. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  178. setMapCenter( level.mapCenter );
  179.  
  180. maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 );
  181. maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 50 );
  182. maps\mp\gametypes\_rank::registerScoreInfo( "assist", 20 );
  183.  
  184. maps\mp\gametypes\_rank::registerScoreInfo( "pickup", 50 );
  185. maps\mp\gametypes\_rank::registerScoreInfo( "return", 50 );
  186. maps\mp\gametypes\_rank::registerScoreInfo( "capture", 250 );
  187.  
  188. maps\mp\gametypes\_rank::registerScoreInfo( "kill_carrier", 50 );
  189.  
  190. maps\mp\gametypes\_rank::registerScoreInfo( "defend", 100 );
  191. maps\mp\gametypes\_rank::registerScoreInfo( "defend_assist", 100 );
  192.  
  193. maps\mp\gametypes\_rank::registerScoreInfo( "assault", 100 );
  194. maps\mp\gametypes\_rank::registerScoreInfo( "assault_assist", 100 );
  195.  
  196. // extra killstreak points for hard flags
  197. maps\mp\killstreaks\_killstreaks::registerAdrenalineInfo( "capture", 1);
  198.  
  199. allowed[0] = "ctf_pro";
  200. maps\mp\gametypes\_gameobjects::main(allowed);
  201.  
  202. thread ctfPro();
  203. }
  204.  
  205.  
  206. getSpawnPoint()
  207. {
  208. if ( level.inGracePeriod )
  209. {
  210. if ( self.team == game["attackers"] )
  211. label = "attackers";
  212. else
  213. label = "defenders";
  214.  
  215. spawnPoints = getentarray("mp_ctf_pro_spawn_" + label + "_start", "classname");
  216. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  217. }
  218. else
  219. {
  220. spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( self.team );
  221. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  222. }
  223.  
  224. return spawnPoint;
  225. }
  226.  
  227.  
  228. ctfPro()
  229. {
  230. level.flagModel[game["defenders"]] = maps\mp\gametypes\_teams::getTeamFlagModel( game["defenders"] );
  231. level.icon2D[game["defenders"]] = maps\mp\gametypes\_teams::getTeamFlagIcon( game["defenders"] );
  232. level.carryFlag[game["defenders"]] = maps\mp\gametypes\_teams::getTeamFlagCarryModel( game["defenders"] );
  233.  
  234. precacheModel( level.flagModel[game["defenders"]] );
  235. precacheModel( level.carryFlag[game["defenders"]] );
  236.  
  237. level.iconEscort2D["a"] = "waypoint_escort_a";
  238. level.iconEscort2D["b"] = "waypoint_escort_b";
  239. level.iconEscort3D["a"] = level.iconEscort2D["a"];
  240. level.iconEscort3D["b"] = level.iconEscort2D["b"];
  241. precacheShader( level.iconEscort2D["a"] );
  242. precacheShader( level.iconEscort2D["b"] );
  243.  
  244. level.iconKill2D["a"] = "waypoint_kill_a";
  245. level.iconKill2D["b"] = "waypoint_kill_b";
  246. level.iconKill3D["a"] = level.iconKill2D["a"];
  247. level.iconKill3D["b"] = level.iconKill2D["b"];
  248. precacheShader( level.iconKill2D["a"] );
  249. precacheShader( level.iconKill2D["b"] );
  250.  
  251. level.iconCaptureFlag2D["a"] = "waypoint_capture_flag_a";
  252. level.iconCaptureFlag2D["b"] = "waypoint_capture_flag_b";
  253. level.iconCaptureFlag3D["a"] = level.iconCaptureFlag2D["a"];
  254. level.iconCaptureFlag3D["b"] = level.iconCaptureFlag2D["b"];
  255. precacheShader( level.iconCaptureFlag2D["a"] );
  256. precacheShader( level.iconCaptureFlag2D["b"] );
  257.  
  258. level.iconDefendFlag2D["a"] = "waypoint_defend_flag_a";
  259. level.iconDefendFlag2D["b"] = "waypoint_defend_flag_b";
  260. level.iconDefendFlag3D["a"] = level.iconDefendFlag2D["a"];
  261. level.iconDefendFlag3D["b"] = level.iconDefendFlag2D["b"];
  262. precacheShader( level.iconDefendFlag2D["a"] );
  263. precacheShader( level.iconDefendFlag2D["b"] );
  264.  
  265. level.iconReturnFlag2D["a"] = "waypoint_return_flag_a";
  266. level.iconReturnFlag2D["b"] = "waypoint_return_flag_b";
  267. level.iconReturnFlag3D["a"] = level.iconReturnFlag2D["a"];
  268. level.iconReturnFlag3D["b"] = level.iconReturnFlag2D["b"];
  269. precacheShader( level.iconReturnFlag2D["a"] );
  270. precacheShader( level.iconReturnFlag2D["b"] );
  271.  
  272. level.iconFlagBase2D = "waypoint_flag_base";
  273. level.iconFlagBase3D = level.iconFlagBase2D;
  274. precacheShader( level.iconFlagBase2D );
  275.  
  276. precacheShader( level.icon2D[game["defenders"]] );
  277.  
  278. precacheShader( "waypoint_flag_friendly" );
  279. precacheShader( "waypoint_flag_enemy" );
  280.  
  281. precacheString( &"OBJECTIVES_FLAG_HOME" );
  282. precacheString( &"OBJECTIVES_FLAG_NAME" );
  283. precacheString( &"OBJECTIVES_FLAG_AWAY" );
  284.  
  285. level.teamFlags[game["defenders"]] = createTeamFlags( game["defenders"] );
  286. level.capZones[game["attackers"]] = createCapZones( game["attackers"] );
  287. }
  288.  
  289. //sets overtime and associated variables
  290. onTimeLimit()
  291. {
  292. if ( game["switchedsides"] == true )
  293. {
  294. if ( game["roundsWon"][game["defenders"]] > 0 )
  295. {
  296. game["teamScores"][game["defenders"]] = 1;
  297. setTeamScore( game["defenders"], 1 );
  298. game["teamScores"][game["attackers"]] = 0;
  299. setTeamScore( game["attackers"], 0 );
  300.  
  301. setOverrideWatchDvar( "winlimit", 1 );
  302. level.onlyRoundOverride = true;
  303. thread maps\mp\gametypes\_gamelogic::endGame( game["defenders"], game["strings"]["time_limit_reached"] );
  304. }
  305. else
  306. {
  307. game["teamScores"][game["defenders"]] = 0;
  308. setTeamScore( game["defenders"], 0 );
  309. game["teamScores"][game["attackers"]] = 0;
  310. setTeamScore( game["attackers"], 0 );
  311. thread maps\mp\gametypes\_gamelogic::endGame( "tie", game["strings"]["time_limit_reached"] );
  312. }
  313. }
  314. else
  315. {
  316. game["roundsPlayed"]++;
  317. game["teamScores"][game["attackers"]] = 0;
  318. setTeamScore( game["attackers"], 0 );
  319. thread maps\mp\gametypes\_gamelogic::endGame( "halftime", game["strings"]["time_limit_reached"] );
  320. }
  321. }
  322.  
  323. spawnFxDelay( fxid, pos, forward, right, delay )
  324. {
  325. wait delay;
  326. effect = spawnFx( fxid, pos, forward, right );
  327. triggerFx( effect );
  328. }
  329.  
  330. createTeamFlags( team )
  331. {
  332. teamFlags = [];
  333. teamFlags[0] = createTeamFlag( team, "a" );
  334. teamFlags[0].points = 200;
  335. teamFlags[1] = createTeamFlag( team, "b" );
  336. teamFlags[1].points = 200;
  337.  
  338. return teamFlags;
  339. }
  340.  
  341. createTeamFlag( team, label )
  342. {
  343. trigger = getEnt( "ctf_pro_trig_" + label, "targetname" );
  344. if ( !isDefined( trigger ) )
  345. {
  346. error( "No ctf_pro_trig_" + label + " trigger found in map." );
  347. return;
  348. }
  349. visual = getEnt( "ctf_pro_flag_" + label, "targetname" );
  350. if ( !isDefined( visual ) )
  351. {
  352. error( "No ctf_pro_flag_" + label + " script_model found in map." );
  353. return;
  354. }
  355. marker = getEnt( "ctf_pro_flag_spawn_" + label, "targetname" );
  356. if ( !isDefined( marker ) )
  357. {
  358. error( "No ctf_pro_flag_spawn_" + label + " script_origin found in map." );
  359. return;
  360. }
  361.  
  362. visual setModel( level.flagModel[team] );
  363. carryVisuals[0] = visual;
  364.  
  365. teamFlag = maps\mp\gametypes\_gameobjects::createCarryObject( team, trigger, carryVisuals, (0,0,85) );
  366. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseTime( "friendly", 0.5 );
  367. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseTime( "enemy", 0.5 );
  368. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseText( "enemy", &"MP_GRABBING_FLAG" );
  369. teamFlag maps\mp\gametypes\_gameobjects::setTeamUseText( "friendly", &"MP_RETURNING_FLAG" );
  370. teamFlag maps\mp\gametypes\_gameobjects::allowCarry( "enemy" );
  371.  
  372. teamFlag maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  373. teamFlag maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill2D[label] );
  374. teamFlag maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D[label] );
  375. teamFlag maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconEscort2D[label] );
  376. teamFlag maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconEscort3D[label] );
  377.  
  378. teamFlag maps\mp\gametypes\_gameobjects::setCarryIcon( level.icon2D[team] );
  379. teamFlag.objIDPingFriendly = true;
  380. teamFlag.allowWeapons = true;
  381. teamFlag.onPickup = ::onPickup;
  382. teamFlag.onPickupFailed = ::onPickup;
  383. teamFlag.onDrop = ::onDrop;
  384. teamFlag.onReset = ::onReset;
  385.  
  386. teamFlag.oldRadius = trigger.radius;
  387. teamFlag.atHome = true;
  388. teamFlag.label = label;
  389.  
  390. carryVisuals = [];
  391. flagMarker = maps\mp\gametypes\_gameobjects::createUseObject( team, marker, carryVisuals, (0,0,85) );
  392. flagMarker maps\mp\gametypes\_gameobjects::allowUse( "none" );
  393. flagMarker maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  394. flagMarker maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefendFlag2D[label] );
  395. flagMarker maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefendFlag3D[label] );
  396. flagMarker maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCaptureFlag2D[label] );
  397. flagMarker maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCaptureFlag3D[label] );
  398. teamFlag.marker = flagMarker;
  399.  
  400. traceStart = trigger.origin + (0,0,32);
  401. traceEnd = trigger.origin + (0,0,-32);
  402. trace = bulletTrace( traceStart, traceEnd, false, undefined );
  403.  
  404. fx = maps\mp\gametypes\_teams::getTeamFlagFX( team );
  405. fxid = loadfx( fx );
  406.  
  407. upangles = vectorToAngles( trace["normal"] );
  408. forward = anglesToForward( upangles );
  409. right = anglesToRight( upangles );
  410.  
  411. thread spawnFxDelay( fxid, trace["position"], forward, right, 0.5 );
  412.  
  413. return teamFlag;
  414. }
  415.  
  416. createCapZones( team )
  417. {
  418. triggers = [];
  419. triggers = getEntArray( "ctf_pro_zone", "targetname" );
  420. if ( !isDefined( triggers[0] ) )
  421. {
  422. error("No ctf_pro_zone" + " triggers found in map.");
  423. return;
  424. }
  425.  
  426. capZones = [];
  427. for( i=0; i<triggers.size; i++ )
  428. {
  429. // temp until I get rid of the 3rd flag
  430. if ( isDefined( level.teamFlags[ getOtherTeam( team ) ][i] ) )
  431. {
  432. visuals = [];
  433. capZones[i] = maps\mp\gametypes\_gameobjects::createUseObject( team, triggers[i], visuals, (0,0,0) );
  434. capZones[i] maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
  435. capZones[i] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  436. capZones[i] maps\mp\gametypes\_gameobjects::setUseTime( 0 );
  437. capZones[i] maps\mp\gametypes\_gameobjects::setKeyObject( level.teamFlags[ getOtherTeam( team ) ][i] );
  438.  
  439. capZones[i].onUse = ::onUse;
  440. capZones[i].onCantUse = ::onCantUse;
  441. }
  442. }
  443.  
  444. // Only need visuals for one cap zone (the three exist in the same place, each keyed to a different flag)
  445. // save origin on one of the cap zones for cap zone headicon creation for flag carrier
  446. capZones[0].origin = triggers[0].origin;
  447.  
  448. traceStart = triggers[0].origin + (0,0,32);
  449. traceEnd = triggers[0].origin + (0,0,-32);
  450. trace = bulletTrace( traceStart, traceEnd, false, undefined );
  451.  
  452. fx = maps\mp\gametypes\_teams::getTeamFlagFX( team );
  453. fxid = loadfx( fx );
  454.  
  455. upangles = vectorToAngles( trace["normal"] );
  456. forward = anglesToForward( upangles );
  457. right = anglesToRight( upangles );
  458.  
  459. thread spawnFxDelay( fxid, trace["position"], forward, right, 0.5 );
  460.  
  461. return capZones;
  462. }
  463.  
  464.  
  465. onBeginUse( player )
  466. {
  467. team = player.pers["team"];
  468.  
  469. if ( team == self maps\mp\gametypes\_gameobjects::getOwnerTeam() )
  470. self.trigger.radius = 1024;
  471. else
  472. self.trigger.radius = self.oldRadius;
  473. }
  474.  
  475.  
  476. onEndUse( player, team, success )
  477. {
  478. self.trigger.radius = self.oldRadius;
  479. }
  480.  
  481.  
  482. onPickup( player )
  483. {
  484. self notify ( "picked_up" );
  485.  
  486. team = player.pers["team"];
  487.  
  488. if ( team == "allies" )
  489. otherTeam = "axis";
  490. else
  491. otherTeam = "allies";
  492.  
  493. if ( team == self maps\mp\gametypes\_gameobjects::getOwnerTeam() )
  494. {
  495. thread teamPlayerCardSplash( "callout_flagreturn", player );
  496. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flagreturn", maps\mp\gametypes\_rank::getScoreInfoValue( "return" ) );
  497. maps\mp\gametypes\_gamescore::givePlayerScore( "return", player );
  498. player thread [[level.onXPEvent]]( "return" );
  499. self thread returnFlag();
  500. player incPlayerStat( "flagsreturned", 1 );
  501.  
  502. player incPersStat( "returns", 1 );
  503. //player maps\mp\gametypes\_persistence::statSetChild( "round", "returns", player.flagsreturned );
  504.  
  505. player thread maps\mp\_matchdata::logGameEvent( "return", player.origin );
  506.  
  507. printAndSoundOnEveryone( team, getOtherTeam( team ), &"MP_FLAG_RETURNED", &"MP_ENEMY_FLAG_RETURNED", "mp_obj_returned", "mp_obj_returned", "" );
  508. leaderDialog( "enemy_flag_returned", otherteam, "status" );
  509. leaderDialog( "flag_returned", team, "status" );
  510. }
  511. else
  512. {
  513. player attachFlag( self );
  514.  
  515. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  516. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill2D[self.label] );
  517. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D[self.label] );
  518. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconEscort2D[self.label] );
  519. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconEscort3D[self.label] );
  520.  
  521. self.marker maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  522.  
  523. player.zoneHeadIcon = level.capZones[game["attackers"]][0] maps\mp\_entityheadIcons::setHeadIcon( player, level.iconFlagBase2D, (0,0,0), 24, 24, undefined, undefined, undefined, undefined, undefined, false );
  524.  
  525. player.zoneMapIcon = maps\mp\gametypes\_gameobjects::getNextObjID();
  526. objective_add( player.zoneMapIcon, "invisible", (0,0,0) );
  527. objective_position( player.zoneMapIcon, level.capZones[game["attackers"]][0].origin );
  528. objective_state( player.zoneMapIcon, "active" );
  529. objective_player( player.zoneMapIcon, player getEntityNumber() );
  530. objective_icon( player.zoneMapIcon, level.iconFlagBase2D );
  531.  
  532. printAndSoundOnEveryone( team, otherteam, &"MP_ENEMY_FLAG_TAKEN_BY", &"MP_FLAG_TAKEN_BY", "mp_obj_taken", "mp_enemy_obj_taken", player );
  533.  
  534. leaderDialog( "enemy_flag_taken", team, "status" );
  535. leaderDialog( "flag_taken", otherteam, "status" );
  536.  
  537. thread teamPlayerCardSplash( "callout_flagpickup", player );
  538. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flagpickup", maps\mp\gametypes\_rank::getScoreInfoValue( "pickup" ) );
  539. maps\mp\gametypes\_gamescore::givePlayerScore( "pickup", player );
  540. player thread [[level.onXPEvent]]( "pickup" );
  541. player incPlayerStat( "flagscarried", 1 );
  542. player thread maps\mp\_matchdata::logGameEvent( "pickup", player.origin );
  543. }
  544. }
  545.  
  546.  
  547. returnFlag()
  548. {
  549. self maps\mp\gametypes\_gameobjects::returnHome();
  550. }
  551.  
  552.  
  553. onDrop( player )
  554. {
  555. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  556. otherTeam = level.otherTeam[team];
  557.  
  558. self maps\mp\gametypes\_gameobjects::allowCarry( "any" );
  559. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  560. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconReturnFlag2D[self.label] );
  561. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconReturnFlag3D[self.label] );
  562. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCaptureFlag2D[self.label] );
  563. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCaptureFlag3D[self.label] );
  564.  
  565. if ( isDefined( player ) )
  566. {
  567. if ( isDefined( player.carryFlag ) )
  568. player detachFlag();
  569.  
  570. printAndSoundOnEveryone( otherTeam, "none", &"MP_ENEMY_FLAG_DROPPED_BY", "", "mp_war_objective_lost", "", player );
  571.  
  572. if ( isDefined( player.zoneHeadIcon ) )
  573. player.zoneHeadIcon destroy();
  574. if ( isDefined( player.zoneMapIcon ) )
  575. {
  576. _objective_delete( player.zoneMapIcon );
  577. player.zoneMapIcon = undefined;
  578. }
  579. }
  580. else
  581. {
  582. playSoundOnPlayers( "mp_war_objective_lost", otherTeam );
  583. }
  584.  
  585. leaderDialog( "enemy_flag_dropped", otherTeam, "status" );
  586. leaderDialog( "flag_dropped", team, "status" );
  587.  
  588. self thread returnAfterTime();
  589. }
  590.  
  591. returnAfterTime()
  592. {
  593. self endon ( "picked_up" );
  594.  
  595. wait ( level.flagReturnTime );
  596.  
  597. self maps\mp\gametypes\_gameobjects::returnHome();
  598. }
  599.  
  600.  
  601. onReset()
  602. {
  603. team = self maps\mp\gametypes\_gameobjects::getOwnerTeam();
  604. otherTeam = level.otherTeam[team];
  605.  
  606. self maps\mp\gametypes\_gameobjects::allowCarry( "enemy" );
  607. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  608. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill2D[self.label] );
  609. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D[self.label] );
  610. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconEscort2D[self.label] );
  611. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconEscort3D[self.label] );
  612.  
  613. self.marker maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  614. }
  615.  
  616.  
  617. onUse( player )
  618. {
  619. team = player.pers["team"];
  620. if ( team == "allies" )
  621. otherTeam = "axis";
  622. else
  623. otherTeam = "allies";
  624.  
  625. leaderDialog( "enemy_flag_captured", team, "status" );
  626. leaderDialog( "flag_captured", otherteam, "status" );
  627.  
  628. thread teamPlayerCardSplash( "callout_flagcapture", player );
  629. giveScore( team, player.cappedFlag.points );
  630. player thread maps\mp\gametypes\_hud_message::SplashNotify( "flag_capture", maps\mp\gametypes\_rank::getScoreInfoValue( "capture" ) );
  631. maps\mp\gametypes\_gamescore::givePlayerScore( "capture", player );
  632. player thread [[level.onXPEvent]]( "capture" );
  633.  
  634. player incPlayerStat( "flagscaptured", 1 );
  635.  
  636. player incPersStat( "captures", 1 );
  637. //player maps\mp\gametypes\_persistence::statSetChild( "round", "captures", player.flagscaptured );
  638.  
  639. player notify( "objective", "captured" );
  640. player thread maps\mp\_matchdata::logGameEvent( "capture", player.origin );
  641.  
  642. // extra killstreak points for hard flags
  643. if ( isDefined( level.adrenalineInfo[ "capture" ] ) )
  644. player maps\mp\killstreaks\_killstreaks::giveAdrenaline( "capture" );
  645.  
  646.  
  647. printAndSoundOnEveryone( team, otherteam, &"MP_ENEMY_FLAG_CAPTURED_BY", &"MP_FLAG_CAPTURED_BY", "mp_obj_captured", "mp_enemy_obj_captured", player );
  648.  
  649. if ( isDefined( player.carryFlag ) )
  650. player detachFlag();
  651.  
  652. if ( isDefined( player.zoneHeadIcon ) )
  653. player.zoneHeadIcon destroy();
  654. if ( isDefined( player.zoneMapIcon ) )
  655. {
  656. _objective_delete( player.zoneMapIcon );
  657. player.zoneMapIcon = undefined;
  658. }
  659.  
  660. player.cappedFlag returnFlag();
  661. }
  662.  
  663. giveScore( team, score )
  664. {
  665. maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( team, score );
  666.  
  667. if ( game["state"] != "playing" )
  668. return;
  669.  
  670. if ( game["switchedsides"] )
  671. {
  672. if( game["teamScores"][game["attackers"]] >= getWatchedDvar( "scorelimit" ) )
  673. {
  674. setOverrideWatchDvar( "winlimit", 1 );
  675. level.onlyRoundOverride = true;
  676.  
  677. if ( game["roundsWon"][game["defenders"]] == 0 )
  678. {
  679. game["teamScores"][game["attackers"]] = 1;
  680. setTeamScore( game["attackers"], 1 );
  681. game["teamScores"][game["defenders"]] = 0;
  682. setTeamScore( game["defenders"], 0 );
  683.  
  684. thread maps\mp\gametypes\_gamelogic::endGame( game["attackers"], game["strings"]["score_limit_reached"] );
  685. }
  686. else
  687. {
  688. game["teamScores"][game["attackers"]] = 1;
  689. setTeamScore( game["attackers"], 1 );
  690. game["teamScores"][game["defenders"]] = 1;
  691. setTeamScore( game["defenders"], 1 );
  692.  
  693. thread maps\mp\gametypes\_gamelogic::endGame( "tie", game["strings"]["score_limit_reached"] );
  694. }
  695. }
  696. }
  697. else
  698. {
  699. if( game["teamScores"][game["attackers"]] >= getWatchedDvar( "scorelimit" ) )
  700. {
  701. game["roundsPlayed"]++;
  702.  
  703. game["teamScores"][game["attackers"]] = 1;
  704. setTeamScore( game["attackers"], 1 );
  705. game["teamScores"][game["defenders"]] = 0;
  706. setTeamScore( game["defenders"], 0 );
  707.  
  708. game["roundsWon"][game["attackers"]]++;
  709. maps\mp\gametypes\_gamescore::updateTeamScore( game["attackers"] );
  710. thread maps\mp\gametypes\_gamelogic::endGame( "halftime", game["strings"]["score_limit_reached"] );
  711. }
  712. }
  713. }
  714.  
  715.  
  716. onCantUse( player )
  717. {
  718. // player iPrintLnBold( &"MP_CANT_PLANT_WITHOUT_BOMB" );
  719. }
  720.  
  721.  
  722. onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, killId )
  723. {
  724. if ( isDefined( attacker ) && isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] )
  725. {
  726. if ( isDefined( attacker.carryFlag ) )
  727. attacker incPlayerStat( "killsasflagcarrier", 1 );
  728.  
  729. if ( isDefined( self.carryFlag ) )
  730. {
  731. thread teamPlayerCardSplash( "callout_killflagcarrier", attacker );
  732. attacker thread maps\mp\gametypes\_hud_message::SplashNotify( "killflagcarrier", maps\mp\gametypes\_rank::getScoreInfoValue( "kill_carrier" ) );
  733. maps\mp\gametypes\_gamescore::givePlayerScore( "kill_carrier", attacker );
  734. attacker thread [[level.onXPEvent]]( "kill_carrier" );
  735.  
  736. attacker incPersStat( "defends", 1 );
  737. //attacker maps\mp\gametypes\_persistence::statSetChild( "round", "defends", attacker.defends );
  738.  
  739. thread maps\mp\_matchdata::logKillEvent( killId, "carrying" );
  740.  
  741. self detachFlag();
  742. }
  743. }
  744. }
  745.  
  746.  
  747. attachFlag( cappedFlag )
  748. {
  749. otherTeam = level.otherTeam[self.pers["team"]];
  750.  
  751. self attach( level.carryFlag[otherTeam], "J_spine4", true );
  752. self.carryFlag = level.carryFlag[otherTeam];
  753. self.cappedFlag = cappedFlag;
  754. }
  755.  
  756. detachFlag()
  757. {
  758. self detach( self.carryFlag, "J_spine4" );
  759. self.carryFlag = undefined;
  760. }
  761.  
  762. initGametypeAwards()
  763. {
  764. maps\mp\_awards::initStatAward( "flagscaptured", 0, maps\mp\_awards::highestWins );
  765. maps\mp\_awards::initStatAward( "flagsreturned", 0, maps\mp\_awards::highestWins );
  766. maps\mp\_awards::initStatAward( "flagcarrierkills", 0, maps\mp\_awards::highestWins );
  767. maps\mp\_awards::initStatAward( "flagscarried", 0, maps\mp\_awards::highestWins );
  768. maps\mp\_awards::initStatAward( "killsasflagcarrier", 0, maps\mp\_awards::highestWins );
  769. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement