Advertisement
Guest User

Untitled

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