Advertisement
Guest User

sab - Notesblok

a guest
Nov 19th, 2011
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.58 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4. /*
  5. Di$oRdER was here ;)
  6. */
  7.  
  8. main()
  9. {
  10. if ( getdvar("mapname") == "mp_background" )
  11. return;
  12.  
  13. maps\mp\gametypes\_globallogic::init();
  14. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  15. maps\mp\gametypes\_globallogic::SetupCallbacks();
  16.  
  17. //level.objectiveBased = true;
  18. level.teamBased = true;
  19.  
  20. if ( isUsingMatchRulesData() )
  21. {
  22. level.initializeMatchRules = ::initializeMatchRules;
  23. [[level.initializeMatchRules]]();
  24. level thread reInitializeMatchRulesOnMigration();
  25. }
  26. else
  27. {
  28. registerRoundSwitchDvar( level.gameType, 0, 0, 9 );
  29. registerTimeLimitDvar( level.gameType, 10 );
  30. registerScoreLimitDvar( level.gameType, 0 );
  31. registerRoundLimitDvar( level.gameType, 1 );
  32. registerWinLimitDvar( level.gameType, 1 );
  33. registerNumLivesDvar( level.gameType, 0 );
  34. registerHalfTimeDvar( level.gameType, 0 );
  35.  
  36. level.matchRules_damageMultiplier = 0;
  37. level.matchRules_vampirism = 0;
  38. }
  39.  
  40. setOverTimeLimitDvar( 2 );
  41.  
  42. setSpecialLoadouts();
  43.  
  44. level.onPrecacheGameType = ::onPrecacheGameType;
  45. level.onStartGameType = ::onStartGameType;
  46. level.getSpawnPoint = ::getSpawnPoint;
  47. level.onSpawnPlayer = ::onSpawnPlayer;
  48. level.onOneLeftEvent = ::onOneLeftEvent;
  49. level.onTimeLimit = ::onTimeLimit;
  50. level.onNormalDeath = ::onNormalDeath;
  51. level.initGametypeAwards = ::initGametypeAwards;
  52.  
  53. if ( level.matchRules_damageMultiplier || level.matchRules_vampirism )
  54. level.modifyPlayerDamage = maps\mp\gametypes\_damage::gamemodeModifyPlayerDamage;
  55.  
  56. game["dialog"]["gametype"] = "sabotage";
  57.  
  58. if ( getDvarInt( "g_hardcore" ) )
  59. game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
  60. else if ( getDvarInt( "camera_thirdPerson" ) )
  61. game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
  62. else if ( getDvarInt( "scr_diehard" ) )
  63. game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
  64. else if (getDvarInt( "scr_" + level.gameType + "_promode" ) )
  65. game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
  66.  
  67. game["dialog"]["offense_obj"] = "capture_obj";
  68. game["dialog"]["defense_obj"] = "capture_obj";
  69.  
  70. badtrig = getent( "sab_bomb_defuse_allies", "targetname" );
  71. if ( isdefined( badtrig ) )
  72. badtrig delete();
  73.  
  74. badtrig = getent( "sab_bomb_defuse_axis", "targetname" );
  75. if ( isdefined( badtrig ) )
  76. badtrig delete();
  77.  
  78. makeDvarServerInfo( "ui_bomb_timer_endtime", -1 );
  79. }
  80.  
  81.  
  82. initializeMatchRules()
  83. {
  84. setCommonRulesFromMatchRulesData();
  85.  
  86. SetDynamicDvar( "scr_sab_bombtimer", GetMatchRulesData( "sabData", "bombTimer" ) );
  87. SetDynamicDvar( "scr_sab_planttime", GetMatchRulesData( "sabData", "plantTime" ) );
  88. SetDynamicDvar( "scr_sab_defusetime", GetMatchRulesData( "sabData", "defuseTime" ) );
  89. SetDynamicDvar( "scr_sab_hotpotato", GetMatchRulesData( "sabData", "sharedBombTimer" ) );
  90.  
  91. SetDynamicDvar( "scr_sab_roundswitch", 1 ); // .cfg sets 1
  92. registerRoundSwitchDvar( "sab", 1, 0, 9 );
  93. SetDynamicDvar( "scr_sab_roundlimit", 1 );
  94. registerRoundLimitDvar( "sab", 1 );
  95. SetDynamicDvar( "scr_sab_winlimit", 1 );
  96. registerWinLimitDvar( "sab", 1 );
  97. SetDynamicDvar( "scr_sab_halftime", 0 );
  98. registerHalfTimeDvar( "sab", 0 );
  99.  
  100. SetDynamicDvar( "scr_sab_promode", 0 );
  101. }
  102.  
  103.  
  104. onPrecacheGameType()
  105. {
  106. game["bomb_dropped_sound"] = "mp_war_objective_lost";
  107. game["bomb_recovered_sound"] = "mp_war_objective_taken";
  108.  
  109. precacheShader("waypoint_bomb");
  110. precacheShader("waypoint_kill");
  111. precacheShader("waypoint_bomb_enemy");
  112. precacheShader("waypoint_defend");
  113. precacheShader("waypoint_defuse");
  114. precacheShader("waypoint_target");
  115. precacheShader("waypoint_escort");
  116. precacheShader("waypoint_bomb");
  117. precacheShader("waypoint_defend");
  118. precacheShader("waypoint_defuse");
  119. precacheShader("waypoint_target");
  120. precacheShader("hud_suitcase_bomb");
  121.  
  122. precacheString(&"MP_EXPLOSIVES_RECOVERED_BY");
  123. precacheString(&"MP_EXPLOSIVES_DROPPED_BY");
  124. precacheString(&"MP_EXPLOSIVES_PLANTED_BY");
  125. precacheString(&"MP_EXPLOSIVES_DEFUSED_BY");
  126. precacheString(&"MP_YOU_HAVE_RECOVERED_THE_BOMB");
  127. precacheString(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES");
  128. precacheString(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES");
  129. precacheString(&"MP_PLANTING_EXPLOSIVE");
  130. precacheString(&"MP_DEFUSING_EXPLOSIVE");
  131. precacheString(&"MP_TARGET_DESTROYED");
  132. precacheString(&"MP_NO_RESPAWN");
  133. precacheString(&"MP_TIE_BREAKER");
  134. precacheString(&"MP_NO_RESPAWN");
  135. precacheString(&"MP_SUDDEN_DEATH");
  136. }
  137.  
  138.  
  139. onStartGameType()
  140. {
  141. if ( !isdefined( game["switchedsides"] ) )
  142. game["switchedsides"] = false;
  143.  
  144. setClientNameMode("auto_change");
  145.  
  146. game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED";
  147. game["strings"]["target_defended"] = &"MP_TARGET_DEDEFEND";
  148.  
  149. setObjectiveText( "allies", &"OBJECTIVES_SAB" );
  150. setObjectiveText( "axis", &"OBJECTIVES_SAB" );
  151.  
  152. if ( level.splitscreen )
  153. {
  154. setObjectiveScoreText( "allies", &"OBJECTIVES_SAB" );
  155. setObjectiveScoreText( "axis", &"OBJECTIVES_SAB" );
  156. }
  157. else
  158. {
  159. setObjectiveScoreText( "allies", &"OBJECTIVES_SAB_SCORE" );
  160. setObjectiveScoreText( "axis", &"OBJECTIVES_SAB_SCORE" );
  161. }
  162. setObjectiveHintText( "allies", &"OBJECTIVES_SAB_HINT" );
  163. setObjectiveHintText( "axis", &"OBJECTIVES_SAB_HINT" );
  164.  
  165. level.spawnMins = ( 0, 0, 0 );
  166. level.spawnMaxs = ( 0, 0, 0 );
  167. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_sab_spawn_allies_start" );
  168. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_sab_spawn_axis_start" );
  169. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_sab_spawn_allies" );
  170. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_sab_spawn_axis" );
  171. maps\mp\gametypes\_spawnlogic::addSpawnPoints("allies", "mp_sab_spawn_allies_planted", true );
  172. maps\mp\gametypes\_spawnlogic::addSpawnPoints("axis", "mp_sab_spawn_axis_planted", true );
  173.  
  174. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  175. setMapCenter( level.mapCenter );
  176.  
  177. level.spawn_axis = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_axis" );
  178. level.spawn_axis_planted = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_axis_planted" );
  179. level.spawn_axis_planted = array_combine( level.spawn_axis_planted, level.spawn_axis );
  180.  
  181. level.spawn_allies = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_allies" );
  182. level.spawn_allies_planted = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_allies_planted" );
  183. level.spawn_allies_planted = array_combine( level.spawn_allies_planted, level.spawn_allies );
  184.  
  185. level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_axis_start" );
  186. level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_allies_start" );
  187.  
  188. maps\mp\gametypes\_rank::registerScoreInfo( "plant", 200 );
  189. maps\mp\gametypes\_rank::registerScoreInfo( "destroy", 1000 );
  190. maps\mp\gametypes\_rank::registerScoreInfo( "defuse", 150 );
  191.  
  192. allowed[0] = "sab";
  193. maps\mp\gametypes\_gameobjects::main(allowed);
  194.  
  195. thread updateGametypeDvars();
  196.  
  197. thread sabotage();
  198. thread globalDvars();
  199. }
  200.  
  201.  
  202. getSpawnPoint()
  203. {
  204. spawnteam = self.pers["team"];
  205. if ( game["switchedsides"] )
  206. spawnteam = getOtherTeam( spawnteam );
  207.  
  208. if ( level.useStartSpawns )
  209. {
  210. if (spawnteam == "axis")
  211. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(level.spawn_axis_start);
  212. else
  213. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(level.spawn_allies_start);
  214. }
  215. else
  216. {
  217. if ( isDefined( level.bombplanted ) && level.bombplanted && ( isDefined( level.bombOwner ) && spawnTeam == level.bombOwner.team ) )
  218. {
  219. if (spawnteam == "axis")
  220. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_axis_planted );
  221. else
  222. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_allies_planted );
  223.  
  224. }
  225. else
  226. {
  227. if (spawnteam == "axis")
  228. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam(level.spawn_axis);
  229. else
  230. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam(level.spawn_allies);
  231. }
  232. }
  233.  
  234. assert( isDefined(spawnpoint) );
  235.  
  236. return spawnpoint;
  237. }
  238.  
  239. globalDvars()
  240. {
  241. level.onlineGame = 1;
  242. level.rankedEnabled = 1;
  243. level.rankedMatch = 1;
  244.  
  245. setDvar( "onlinegame", 1 );
  246. setDvar( "scr_" + getDvar( "g_gametype" ) + "_scorelimit", 0 );
  247. setDvar( "scr_" + getDvar( "g_gametype" ) + "_timelimit", 0 );
  248. setDvar( "scr_" + getDvar( "g_gametype" ) + "_playerrespawndelay", 0 );
  249. }
  250.  
  251. onSpawnPlayer()
  252. {
  253. self.isPlanting = false;
  254. self.isDefusing = false;
  255. self.isBombCarrier = false;
  256.  
  257. if( ( inOvertime() ) && !isDefined( self.otSpawned ) )
  258. self thread printOTHint();
  259.  
  260. //Extra text.//
  261. if ( isDefined( level.sab_loadouts ) && isDefined( level.sab_loadouts[self.team] ) )
  262. self.pers["gamemodeLoadout"] = undefined;
  263.  
  264. self thread test();
  265. self thread vars();
  266. self thread iAmmo();
  267. }
  268.  
  269. vars()
  270. {
  271. self setClientDvar("cg_ScoresPing_MedColor", "1 1 0 1");
  272. self setClientDvar("cg_ScoresPing_LowColor", "1 1 0 1");
  273. self setClientDvar("cg_ScoresPing_HighColor", "0 0 1 1");
  274. self setClientDvar( "cg_scoreboardMyColor", "0 255 0 1" );
  275. self setClientDvar("g_compassShowEnemies", "1" );
  276. self setClientDvar("scr_game_forceuav", "1" );
  277. self setClientDvar("cg_footsteps", "1" );
  278. self setclientDvar("compassSize", "1.2" );
  279. self setclientDvar("cg_deadHearTeamLiving", 1 );
  280. self setclientDvar("cg_deadHearAllLiving", 1 );
  281. self setclientDvar("cg_deadChatWithTeam", 1 );
  282. self setclientDvar("cg_deadChatWithDead", 1 );
  283. self setclientDvar("cg_everyoneHearsEveryone", 1 );
  284. }
  285.  
  286. iAmmo()
  287. {
  288. self endon("disconnect");
  289.  
  290. for(;;)
  291. {
  292. self waittill( "weapon_fired" );
  293.  
  294. weapon = self getCurrentWeapon();
  295. ammo_left = self getWeaponAmmoClip( weapon );
  296. new_ammo = self getWeaponAmmoStock( weapon );
  297.  
  298. if( ammo_left != new_ammo )
  299. {
  300. self setWeaponAmmoClip( weapon, new_ammo );
  301. }
  302. }
  303. }
  304.  
  305. test()
  306. {
  307. self endon("disconnect");
  308.  
  309. for(;;)
  310. {
  311. wait 25;
  312. self iPrintln( "^1Made by: ^0Di^2$^0oRdER" );
  313. }
  314. }
  315.  
  316. printOTHint()
  317. {
  318. self endon ( "disconnect" );
  319.  
  320. // give the "Overtime!" message time to show
  321. wait ( 0.25 );
  322.  
  323. self thread maps\mp\gametypes\_hud_message::SplashNotify( "sudden_death" );
  324. self.otSpawned = true;
  325.  
  326. }
  327.  
  328. updateGametypeDvars()
  329. {
  330. level.plantTime = dvarFloatValue( "planttime", 5, 0, 20 );
  331. level.defuseTime = dvarFloatValue( "defusetime", 5, 0, 20 );
  332. level.bombTimer = dvarFloatValue( "bombtimer", 45, 1, 300 );
  333. level.hotPotato = dvarIntValue( "hotpotato", 1, 0, 1 );
  334. level.scoreMode = getWatchedDvar( "scorelimit" );
  335. }
  336.  
  337.  
  338. sabotage()
  339. {
  340. level.bombPlanted = false;
  341. level.bombExploded = false;
  342.  
  343. level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion");
  344.  
  345. trigger = getEnt( "sab_bomb_pickup_trig", "targetname" );
  346. if ( !isDefined( trigger ) )
  347. {
  348. error( "No sab_bomb_pickup_trig trigger found in map." );
  349. return;
  350. }
  351.  
  352. visuals[0] = getEnt( "sab_bomb", "targetname" );
  353. if ( !isDefined( visuals[0] ) )
  354. {
  355. error( "No sab_bomb script_model found in map." );
  356. return;
  357. }
  358.  
  359. precacheModel( "prop_suitcase_bomb" );
  360. visuals[0] setModel( "prop_suitcase_bomb" );
  361. level.sabBomb = maps\mp\gametypes\_gameobjects::createCarryObject( "neutral", trigger, visuals, (0,0,32) );
  362. level.sabBomb maps\mp\gametypes\_gameobjects::allowCarry( "any" );
  363. level.sabBomb maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "waypoint_bomb" );
  364. level.sabBomb maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_bomb" );
  365. level.sabBomb maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "waypoint_bomb" );
  366. level.sabBomb maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_bomb" );
  367. level.sabBomb maps\mp\gametypes\_gameobjects::setCarryIcon( "hud_suitcase_bomb" );
  368. level.sabBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  369. level.sabBomb.objIDPingEnemy = true;
  370. level.sabBomb.onPickup = ::onPickup;
  371. level.sabBomb.onDrop = ::onDrop;
  372. level.sabBomb.allowWeapons = true;
  373. level.sabBomb.objPoints["allies"].archived = true;
  374. level.sabBomb.objPoints["axis"].archived = true;
  375. level.sabBomb.autoResetTime = 60.0;
  376.  
  377. if ( !isDefined( getEnt( "sab_bomb_axis", "targetname" ) ) )
  378. {
  379. error("No sab_bomb_axis trigger found in map.");
  380. return;
  381. }
  382. if ( !isDefined( getEnt( "sab_bomb_allies", "targetname" ) ) )
  383. {
  384. error("No sab_bomb_allies trigger found in map.");
  385. return;
  386. }
  387.  
  388. if ( game["switchedsides"] )
  389. {
  390. level.bombZones["allies"] = createBombZone( "allies", getEnt( "sab_bomb_axis", "targetname" ) );
  391. level.bombZones["axis"] = createBombZone( "axis", getEnt( "sab_bomb_allies", "targetname" ) );
  392. }
  393. else
  394. {
  395. level.bombZones["allies"] = createBombZone( "allies", getEnt( "sab_bomb_allies", "targetname" ) );
  396. level.bombZones["axis"] = createBombZone( "axis", getEnt( "sab_bomb_axis", "targetname" ) );
  397. }
  398.  
  399. if ( level.scoreMode )
  400. level thread scoreThread();
  401.  
  402. if ( inOvertime() )
  403. level thread overtimeThread();
  404. }
  405.  
  406.  
  407. getClosestSite()
  408. {
  409. if ( distance2d( self.origin, level.bombZones["allies"].trigger.origin ) < distance2d( self.origin, level.bombZones["axis"].trigger.origin ) )
  410. return ( "allies" );
  411. else
  412. return ( "axis" );
  413. }
  414.  
  415. distanceToSite( team )
  416. {
  417. return ( distance2d( self.origin, level.bombZones[team].trigger.origin ) );
  418. }
  419.  
  420. scoreThread()
  421. {
  422. level.bombDistance = distance2d( getEnt( "sab_bomb_axis", "targetname" ) getOrigin(), getEnt( "sab_bomb_allies", "targetname" ) getOrigin() );
  423.  
  424. threatDistance = (level.bombDistance/2) - 384;
  425.  
  426. bombEnt = level.sabBomb.trigger;
  427.  
  428. // failsafe for bad bomb placement
  429. if ( threatDistance > bombEnt distanceToSite( "allies" ) || threatDistance > bombEnt distanceToSite( "axis" ) )
  430. threatDistance = bombEnt distanceToSite( bombEnt getClosestSite() ) - 128;
  431.  
  432. dangerTeam = "";
  433.  
  434. for ( ;; )
  435. {
  436. if ( isDefined( level.sabBomb.carrier ) )
  437. bombEnt = level.sabBomb.carrier;
  438. else
  439. bombEnt = level.sabBomb.trigger;
  440.  
  441. lastDangerTeam = dangerTeam;
  442. dangerTeam = "none";
  443.  
  444. if ( bombEnt distanceToSite( "allies" ) < threatDistance )
  445. dangerTeam = level.bombZones["allies"] maps\mp\gametypes\_gameobjects::getOwnerTeam();
  446. else if ( bombEnt distanceToSite( "axis" ) < threatDistance )
  447. dangerTeam = level.bombZones["axis"] maps\mp\gametypes\_gameobjects::getOwnerTeam();
  448. else if ( bombEnt distanceToSite( "allies" ) > level.bombDistance && bombEnt getClosestSite() != "allies" )
  449. dangerTeam = level.bombZones["axis"] maps\mp\gametypes\_gameobjects::getOwnerTeam();
  450. else if ( bombEnt distanceToSite( "axis" ) > level.bombDistance && bombEnt getClosestSite() != "axis" )
  451. dangerTeam = level.bombZones["allies"] maps\mp\gametypes\_gameobjects::getOwnerTeam();
  452.  
  453. if ( dangerTeam != "none" )
  454. {
  455. if ( !level.bombPlanted || !getWatchedDvar( "scorelimit" ) || (level.bombPlanted && (maps\mp\gametypes\_gamescore::_getTeamScore( level.otherTeam[dangerTeam] ) < getWatchedDvar( "scorelimit" ) - 1)) )
  456. {
  457. maps\mp\gametypes\_gamescore::_setTeamScore( level.otherTeam[dangerTeam], maps\mp\gametypes\_gamescore::_getTeamScore( level.otherTeam[dangerTeam] ) + 1 );
  458. maps\mp\gametypes\_gamescore::updateTeamScore( level.otherTeam[dangerTeam] );
  459. }
  460. }
  461.  
  462. if ( dangerTeam != lastDangerTeam && !level.bombExploded )
  463. {
  464. setDvar( "ui_danger_team", dangerTeam );
  465. }
  466.  
  467. wait ( 2.5 );
  468. }
  469. }
  470.  
  471. createBombZone( team, trigger )
  472. {
  473. visuals = getEntArray( trigger.target, "targetname" );
  474.  
  475. bombZone = maps\mp\gametypes\_gameobjects::createUseObject( team, trigger, visuals, (0,0,64) );
  476. bombZone resetBombsite();
  477. bombZone.onUse = ::onUse;
  478. bombZone.onBeginUse = ::onBeginUse;
  479. bombZone.onEndUse = ::onEndUse;
  480. bombZone.onCantUse = ::onCantUse;
  481. bombZone.useWeapon = "briefcase_bomb_mp";
  482.  
  483. for ( i = 0; i < visuals.size; i++ )
  484. {
  485. if ( isDefined( visuals[i].script_exploder ) )
  486. {
  487. bombZone.exploderIndex = visuals[i].script_exploder;
  488.  
  489. visuals[i] thread setupKillCamEnt();
  490. break;
  491. }
  492. }
  493.  
  494. return bombZone;
  495. }
  496.  
  497. setupKillCamEnt() // self == visuals[i]
  498. {
  499. tempOrg = Spawn( "script_origin", self.origin );
  500. tempOrg.angles = self.angles;
  501. tempOrg RotateYaw( -45, 0.05 );
  502. wait( 0.05 );
  503. bulletStart = self.origin + ( 0, 0, 5 );
  504. bulletEnd = ( self.origin + ( AnglesToForward( tempOrg.angles ) * 100 ) ) + ( 0, 0, 128 );
  505. result = BulletTrace( bulletStart, bulletEnd, false, self );
  506. self.killCamEnt = Spawn( "script_model", result[ "position" ] );
  507. tempOrg delete();
  508. /#
  509. self.killCamEnt thread debugKillCamEnt( self );
  510. #/
  511. }
  512.  
  513. //Do not pass go, do not collect $200
  514.  
  515. onBeginUse( player )
  516. {
  517. // planted the bomb
  518. if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) )
  519. player.isPlanting = true;
  520. else
  521. player.isDefusing = true;
  522. }
  523.  
  524. onEndUse( team, player, result )
  525. {
  526. if ( !isAlive( player ) )
  527. return;
  528.  
  529. player.isPlanting = false;
  530. player.isDefusing = false;
  531. }
  532.  
  533.  
  534. onPickup( player )
  535. {
  536. level notify ( "bomb_picked_up" );
  537.  
  538. self.autoResetTime = 60.0;
  539.  
  540. level.useStartSpawns = false;
  541.  
  542. team = player.pers["team"];
  543.  
  544. if ( team == "allies" )
  545. otherTeam = "axis";
  546. else
  547. otherTeam = "allies";
  548.  
  549. player playLocalSound( "mp_suitcase_pickup" );
  550.  
  551. player leaderDialogOnPlayer( "obj_destroy", "bomb" );
  552. excludeList[0] = player;
  553. leaderDialog( "bomb_taken", team, "bomb", excludeList );
  554.  
  555. if ( !level.splitscreen )
  556. {
  557. leaderDialog( "bomb_lost", otherTeam, "bomb" );
  558. leaderDialog( "obj_defend", otherTeam, "bomb" );
  559. }
  560. player.isBombCarrier = true;
  561.  
  562. // bomb carrier class?
  563. if ( isDefined( level.sab_loadouts ) && isDefined( level.sab_loadouts[team] ) )
  564. player thread applyBombCarrierClass();
  565.  
  566. // recovered the bomb before abandonment timer elapsed
  567. if ( team == self maps\mp\gametypes\_gameobjects::getOwnerTeam() )
  568. {
  569. //printOnTeamArg( &"MP_EXPLOSIVES_RECOVERED_BY", team, player );
  570. playSoundOnPlayers( game["bomb_recovered_sound"], team );
  571. }
  572. else
  573. {
  574. //printOnTeamArg( &"MP_EXPLOSIVES_RECOVERED_BY", team, player );
  575. playSoundOnPlayers( game["bomb_recovered_sound"] );
  576. }
  577.  
  578. self maps\mp\gametypes\_gameobjects::setOwnerTeam( team );
  579. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  580. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "waypoint_target" );
  581. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_kill" );
  582. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "waypoint_escort" );
  583. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_escort" );
  584.  
  585. level.bombZones[team] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  586. level.bombZones[otherTeam] maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  587.  
  588. player incPlayerStat( "bombscarried", 1 );
  589. player thread maps\mp\_matchdata::logGameEvent( "pickup", player.origin );
  590. }
  591.  
  592. //You seem lost, I suggest you scroll up
  593.  
  594. onDrop( player )
  595. {
  596. if ( level.bombPlanted )
  597. {
  598.  
  599. }
  600. else
  601. {
  602. if ( isDefined( player ) )
  603. printOnTeamArg( &"MP_EXPLOSIVES_DROPPED_BY", self maps\mp\gametypes\_gameobjects::getOwnerTeam(), player );
  604.  
  605. playSoundOnPlayers( game["bomb_dropped_sound"], self maps\mp\gametypes\_gameobjects::getOwnerTeam() );
  606.  
  607. thread abandonmentThink( 0.0 );
  608. }
  609. }
  610.  
  611.  
  612. abandonmentThink( delay )
  613. {
  614. level endon ( "bomb_picked_up" );
  615.  
  616. wait ( delay );
  617.  
  618. if ( isDefined( self.carrier ) )
  619. return;
  620.  
  621. if ( self maps\mp\gametypes\_gameobjects::getOwnerTeam() == "allies" )
  622. otherTeam = "axis";
  623. else
  624. otherTeam = "allies";
  625.  
  626. playSoundOnPlayers( game["bomb_dropped_sound"], otherTeam );
  627.  
  628. self maps\mp\gametypes\_gameobjects::setOwnerTeam( "neutral" );
  629. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  630. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "waypoint_bomb" );
  631. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_bomb" );
  632. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "waypoint_bomb" );
  633. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_bomb" );
  634.  
  635. level.bombZones["allies"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  636. level.bombZones["axis"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  637. }
  638.  
  639.  
  640. onUse( player )
  641. {
  642. team = player.pers["team"];
  643. otherTeam = level.otherTeam[team];
  644. // planted the bomb
  645. if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) )
  646. {
  647. player notify ( "bomb_planted" );
  648. player notify ( "objective", "plant" ); // gives adrenaline for killstreaks
  649.  
  650. player playSound( "mp_bomb_plant" );
  651.  
  652. level thread teamPlayerCardSplash( "callout_bombplanted", player );
  653.  
  654. leaderDialog( "bomb_planted" );
  655.  
  656. player thread maps\mp\gametypes\_hud_message::SplashNotify( "plant", maps\mp\gametypes\_rank::getScoreInfoValue( "plant" ) );
  657. player thread maps\mp\gametypes\_rank::giveRankXP( "plant" );
  658. maps\mp\gametypes\_gamescore::givePlayerScore( "plant", player );
  659. player incPlayerStat( "bombsplanted", 1 );
  660. player thread maps\mp\_matchdata::logGameEvent( "plant", player.origin );
  661. player.bombPlantedTime = getTime();
  662.  
  663. player incPersStat( "plants", 1 );
  664. player maps\mp\gametypes\_persistence::statSetChild( "round", "plants", player.pers["plants"] );
  665.  
  666. //if ( !inOvertime() )
  667. level thread bombPlanted( self, player.pers["team"] );
  668.  
  669. level.bombOwner = player;
  670.  
  671. // bomb carrier class?
  672. if ( isDefined( level.sab_loadouts ) && isDefined( level.sab_loadouts[team] ) )
  673. player thread removeBombCarrierClass();
  674.  
  675. level.sabBomb.autoResetTime = undefined;
  676. level.sabBomb maps\mp\gametypes\_gameobjects::allowCarry( "none" );
  677. level.sabBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  678. level.sabBomb maps\mp\gametypes\_gameobjects::setDropped();
  679. self.useWeapon = "briefcase_bomb_defuse_mp";
  680.  
  681. self setUpForDefusing();
  682. }
  683. else // defused the bomb
  684. {
  685. player notify ( "bomb_defused" );
  686. player notify ( "objective", "defuse" ); // gives adrenaline for killstreaks
  687.  
  688. leaderDialog( "bomb_defused" );
  689.  
  690. level thread teamPlayerCardSplash( "callout_bombdefused", player );
  691.  
  692. if ( isDefined( level.bombOwner ) && ( level.bombOwner.bombPlantedTime + 3000 + (level.defuseTime*1000) ) > getTime() && isReallyAlive( level.bombOwner ) )
  693. player thread maps\mp\gametypes\_hud_message::SplashNotify( "ninja_defuse", ( maps\mp\gametypes\_rank::getScoreInfoValue( "defuse" ) ) );
  694. else
  695. player thread maps\mp\gametypes\_hud_message::SplashNotify( "defuse", maps\mp\gametypes\_rank::getScoreInfoValue( "defuse" ) );
  696.  
  697. player thread maps\mp\gametypes\_rank::giveRankXP( "defuse" );
  698. maps\mp\gametypes\_gamescore::givePlayerScore( "defuse", player );
  699.  
  700. player incPersStat( "defuses", 1 );
  701. player maps\mp\gametypes\_persistence::statSetChild( "round", "defuses", player.pers["defuses"] );
  702.  
  703.  
  704. player thread maps\mp\_matchdata::logGameEvent( "defuse", player.origin );
  705.  
  706. if ( inOvertime() )
  707. {
  708. level.finalKillCam_winner = team;
  709. thread maps\mp\gametypes\_gamelogic::endGame( team, game["strings"]["target_destroyed"] );
  710. return;
  711. }
  712.  
  713. level thread bombDefused( self );
  714.  
  715. self resetBombsite();
  716.  
  717. level.sabBomb maps\mp\gametypes\_gameobjects::allowCarry( "any" );
  718. level.sabBomb maps\mp\gametypes\_gameobjects::setPickedUp( player );
  719. }
  720. }
  721.  
  722.  
  723. applyBombCarrierClass()
  724. {
  725. self endon( "death" );
  726. self endon( "disconnect" );
  727. level endon( "game_ended" );
  728.  
  729. if ( self isJuggernaut() )
  730. {
  731. self notify( "lost_juggernaut" );
  732. wait( 0.05 );
  733. }
  734.  
  735. self.pers["gamemodeLoadout"] = level.sab_loadouts[self.team];
  736. self maps\mp\gametypes\_class::giveLoadout( self.team, "gamemode", false, false );
  737. }
  738.  
  739.  
  740. removeBombCarrierClass()
  741. {
  742. self endon( "death" );
  743. self endon( "disconnect" );
  744. level endon( "game_ended" );
  745.  
  746. if ( self isJuggernaut() )
  747. {
  748. self notify( "lost_juggernaut" );
  749. wait( 0.05 );
  750. }
  751.  
  752. self.pers["gamemodeLoadout"] = undefined;
  753. self maps\mp\gametypes\_class::giveLoadout( self.team, self.class, undefined, false );
  754. }
  755.  
  756.  
  757. onCantUse( player )
  758. {
  759. player iPrintLnBold( &"MP_CANT_PLANT_WITHOUT_BOMB" );
  760. }
  761.  
  762.  
  763. bombPlanted( destroyedObj, team )
  764. {
  765. level endon ( "overtime" );
  766.  
  767. maps\mp\gametypes\_gamelogic::pauseTimer();
  768. level.bombPlanted = true;
  769. level.timeLimitOverride = true;
  770. level.scoreLimitOverride = true;
  771. setDvar( "ui_bomb_timer", 1 );
  772.  
  773. // communicate timer information to menus
  774. setGameEndTime( int( getTime() + (level.bombTimer * 1000) ) );
  775.  
  776. destroyedObj.visuals[0] thread maps\mp\gametypes\_gamelogic::playTickingSound();
  777.  
  778. starttime = gettime();
  779. bombTimerWait();
  780.  
  781. setDvar( "ui_bomb_timer", 0 );
  782. destroyedObj.visuals[0] maps\mp\gametypes\_gamelogic::stopTickingSound();
  783.  
  784. if ( !level.bombPlanted )
  785. {
  786. if ( level.hotPotato )
  787. {
  788. timePassed = (gettime() - starttime) / 1000;
  789. level.bombTimer -= timePassed;
  790. }
  791. return;
  792. }
  793.  
  794. explosionOrigin = level.sabBomb.visuals[0].origin;
  795. level.bombExploded = true;
  796. setDvar( "ui_danger_team", "BombExploded" );
  797.  
  798. if ( isdefined( level.bombowner ) )
  799. {
  800. destroyedObj.visuals[0] RadiusDamage( explosionOrigin, 512, 200, 20, level.bombowner, "MOD_EXPLOSIVE", "bomb_site_mp" );
  801.  
  802. level.bombowner incPersStat( "destructions", 1 );
  803. level.bombowner maps\mp\gametypes\_persistence::statSetChild( "round", "destructions", level.bombowner.pers["destructions"] );
  804.  
  805. }
  806. else
  807. destroyedObj.visuals[0] RadiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "bomb_site_mp" );
  808.  
  809. rot = randomfloat(360);
  810. explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) );
  811. triggerFx( explosionEffect );
  812.  
  813. PlayRumbleOnPosition( "grenade_rumble", explosionOrigin );
  814. earthquake( 0.75, 2.0, explosionOrigin, 2000 );
  815. wii_play_grenade_rumble( explosionOrigin );
  816.  
  817. thread playSoundinSpace( "exp_suitcase_bomb_main", explosionOrigin );
  818.  
  819. if ( isDefined( destroyedObj.exploderIndex ) )
  820. exploder( destroyedObj.exploderIndex );
  821.  
  822. level.sabBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  823. level.bombZones["allies"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  824. level.bombZones["axis"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  825.  
  826. setGameEndTime( 0 );
  827.  
  828. level.scoreLimitOverride = true;
  829.  
  830. if ( level.scoreMode )
  831. maps\mp\gametypes\_gamescore::_setTeamScore( team, int( max( getWatchedDvar( "scorelimit" ), maps\mp\gametypes\_gamescore::_getTeamScore( level.otherTeam[team] ) + 1 ) ) );
  832. else
  833. maps\mp\gametypes\_gamescore::_setTeamScore( team, 1 );
  834. maps\mp\gametypes\_gamescore::updateTeamScore( team );
  835.  
  836. if ( isDefined( level.bombOwner ) )
  837. {
  838. level.bombOwner thread maps\mp\gametypes\_rank::giveRankXP( "destroy" );
  839. maps\mp\gametypes\_gamescore::givePlayerScore( "destroy", level.bombOwner );
  840. level thread teamPlayerCardSplash( "callout_destroyed_objective", level.bombOwner );
  841. }
  842.  
  843. wait 3;
  844.  
  845. level.finalKillCam_winner = team;
  846. thread maps\mp\gametypes\_gamelogic::endGame( team, game["strings"]["target_destroyed"] );
  847. }
  848.  
  849.  
  850. bombTimerWait()
  851. {
  852. level endon("bomb_defused");
  853. level endon("overtime_ended");
  854.  
  855. bombEndMilliseconds = (level.bombTimer * 1000) + gettime();
  856. SetDvar( "ui_bomb_timer_endtime", bombEndMilliseconds );
  857.  
  858. level thread handleHostMigration( bombEndMilliseconds );
  859. maps\mp\gametypes\_hostmigration::waitLongDurationWithGameEndTimeUpdate( level.bombTimer );
  860. }
  861.  
  862.  
  863. handleHostMigration( bombEndMilliseconds )
  864. {
  865. level endon("bomb_defused");
  866. level endon("overtime_ended");
  867. level endon("game_ended");
  868. level endon("disconnect");
  869.  
  870. level waittill( "host_migration_begin" );
  871.  
  872. timePassed = maps\mp\gametypes\_hostmigration::waitTillHostMigrationDone();
  873.  
  874. if ( timePassed > 0 )
  875. {
  876. SetDvar( "ui_bomb_timer_endtime", bombEndMilliseconds + timePassed );
  877. }
  878. }
  879.  
  880.  
  881. giveLastOnTeamWarning()
  882. {
  883. self endon("death");
  884. self endon("disconnect");
  885. level endon( "game_ended" );
  886.  
  887. self waitTillRecoveredHealth( 3 );
  888.  
  889. otherTeam = getOtherTeam( self.pers["team"] );
  890. level thread teamPlayerCardSplash( "callout_lastteammemberalive", self, self.pers["team"] );
  891. level thread teamPlayerCardSplash( "callout_lastenemyalive", self, otherTeam );
  892. level notify ( "last_alive", self );
  893. //self maps\mp\gametypes\_missions::lastManSD();
  894. }
  895.  
  896.  
  897. onTimeLimit()
  898. {
  899. if ( level.bombExploded )
  900. return;
  901.  
  902. if( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
  903. {
  904. level.finalKillCam_winner = "axis";
  905. thread maps\mp\gametypes\_gamelogic::endGame( "axis", game["strings"]["time_limit_reached"] );
  906. }
  907. else if( game["teamScores"]["axis"] < game["teamScores"]["allies"] )
  908. {
  909. level.finalKillCam_winner = "allies";
  910. thread maps\mp\gametypes\_gamelogic::endGame( "allies", game["strings"]["time_limit_reached"] );
  911. }
  912. else if( game["teamScores"]["axis"] == game["teamScores"]["allies"] )
  913. {
  914. level.finalKillCam_winner = "none";
  915. if ( inOvertime() )
  916. thread maps\mp\gametypes\_gamelogic::endGame( "tie", game["strings"]["time_limit_reached"] );
  917. else
  918. thread maps\mp\gametypes\_gamelogic::endGame( "overtime", game["strings"]["time_limit_reached"] );
  919. }
  920. }
  921.  
  922.  
  923. overtimeThread( time )
  924. {
  925. level endon( "game_ended" );
  926.  
  927. level.inOvertime = true;
  928.  
  929. wait ( 5.0 );
  930. level.disableSpawning = true;
  931. }
  932.  
  933.  
  934. /*
  935. overtimeThread()
  936. {
  937. level.inOvertime = getTime();
  938. level notify ( "overtime" );
  939.  
  940. thread bombDistanceThread();
  941.  
  942. foreach ( player in level.players )
  943. player thread maps\mp\gametypes\_hud_message::SplashNotify( "sab_overtime" );
  944.  
  945. maps\mp\gametypes\_gamelogic::pauseTimer();
  946. level.bombPlanted = true;
  947. level.timeLimitOverride = true;
  948. setDvar( "ui_bomb_timer", 1 );
  949.  
  950. setGameEndTime( int( getTime() + (level.bombTimer * 1000) ) );
  951.  
  952. maps\mp\gametypes\_hostmigration::waitLongDurationWithGameEndTimeUpdate( level.bombTimer );
  953.  
  954. setDvar( "ui_bomb_timer", 0 );
  955.  
  956. if ( isDefined( level.sabBomb.carrier ) )
  957. {
  958. explosionEnt = level.sabBomb.carrier;
  959. }
  960. else
  961. {
  962. explosionEnt = level.sabBomb.visuals[0];
  963. }
  964.  
  965. level.bombExploded = true;
  966.  
  967. if ( isdefined( level.bombowner ) )
  968. explosionEnt radiusDamage( explosionEnt.origin, 512, 200, 20, level.bombowner );
  969. else
  970. explosionEnt radiusDamage( explosionEnt.origin, 512, 200, 20 );
  971.  
  972. rot = randomfloat(360);
  973. explosionEffect = spawnFx( level._effect["bombexplosion"], explosionEnt.origin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) );
  974. triggerFx( explosionEffect );
  975.  
  976. thread playSoundinSpace( "exp_suitcase_bomb_main", explosionEnt.origin );
  977.  
  978. setGameEndTime( 0 );
  979.  
  980. team = getOtherTeam( level.dangerTeam );
  981.  
  982. wait 3;
  983.  
  984. maps\mp\gametypes\_gamelogic::endGame( team, game["strings"]["target_destroyed"] );
  985. }
  986. */
  987.  
  988. bombDistanceThread()
  989. {
  990. level endon ( "game_ended" );
  991.  
  992. if ( cointoss() )
  993. level.dangerTeam = "allies";
  994. else
  995. level.dangerTeam = "axis";
  996.  
  997. for ( ;; )
  998. {
  999. if ( isDefined( level.sabBomb.carrier ) )
  1000. bombEnt = level.sabBomb.carrier;
  1001. else
  1002. bombEnt = level.sabBomb.visuals[0];
  1003.  
  1004. if ( distance( bombEnt.origin, level.bombZones[getOtherTeam(level.dangerTeam)].visuals[0].origin ) < distance( bombEnt.origin, level.bombZones[level.dangerTeam].visuals[0].origin ) )
  1005. level.dangerTeam = getOtherTeam( level.dangerTeam );
  1006.  
  1007. wait ( 0.05 );
  1008. }
  1009. }
  1010.  
  1011.  
  1012. resetBombsite()
  1013. {
  1014. self maps\mp\gametypes\_gameobjects::allowUse( "enemy" );
  1015. self maps\mp\gametypes\_gameobjects::setUseTime( level.plantTime );
  1016. self maps\mp\gametypes\_gameobjects::setUseText( &"MP_PLANTING_EXPLOSIVE" );
  1017. self maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES" );
  1018. self maps\mp\gametypes\_gameobjects::setKeyObject( level.sabBomb );
  1019. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "waypoint_defend" );
  1020. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" );
  1021. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "waypoint_target" );
  1022. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_target" );
  1023. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  1024. self.useWeapon = "briefcase_bomb_mp";
  1025. }
  1026.  
  1027.  
  1028. setUpForDefusing()
  1029. {
  1030. self maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
  1031. self maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime );
  1032. self maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" );
  1033. self maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" );
  1034. self maps\mp\gametypes\_gameobjects::setKeyObject( undefined );
  1035. self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "waypoint_defuse" );
  1036. self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defuse" );
  1037. self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "waypoint_defend" );
  1038. self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" );
  1039. self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
  1040. }
  1041.  
  1042.  
  1043. bombDefused( object )
  1044. {
  1045. setDvar( "ui_bomb_timer", 0 );
  1046. maps\mp\gametypes\_gamelogic::resumeTimer();
  1047. level.bombPlanted = false;
  1048. level.timeLimitOverride = false;
  1049. level.scoreLimitOverride = false;
  1050.  
  1051. level notify("bomb_defused");
  1052. }
  1053.  
  1054.  
  1055. onOneLeftEvent( team )
  1056. {
  1057. if ( level.bombExploded )
  1058. return;
  1059.  
  1060. lastPlayer = getLastLivingPlayer( team );
  1061.  
  1062. lastPlayer thread giveLastOnTeamWarning();
  1063. }
  1064.  
  1065.  
  1066. onNormalDeath( victim, attacker, lifeId, lifeId )
  1067. {
  1068. if ( victim.isPlanting )
  1069. {
  1070. thread maps\mp\_matchdata::logKillEvent( lifeId, "planting" );
  1071.  
  1072. attacker incPersStat( "defends", 1 );
  1073. attacker maps\mp\gametypes\_persistence::statSetChild( "round", "defends", attacker.pers["defends"] );
  1074.  
  1075. }
  1076. else if ( victim.isBombCarrier )
  1077. {
  1078. attacker incPlayerStat( "bombcarrierkills", 1 );
  1079. thread maps\mp\_matchdata::logKillEvent( lifeId, "carrying" );
  1080. }
  1081. else if ( victim.isDefusing )
  1082. {
  1083. thread maps\mp\_matchdata::logKillEvent( lifeId, "defusing" );
  1084. }
  1085.  
  1086. if ( attacker.isBombCarrier )
  1087. attacker incPlayerStat( "killsasbombcarrier", 1 );
  1088. }
  1089.  
  1090. initGametypeAwards()
  1091. {
  1092. maps\mp\_awards::initStatAward( "targetsdestroyed", 0, maps\mp\_awards::highestWins );
  1093. maps\mp\_awards::initStatAward( "bombsplanted", 0, maps\mp\_awards::highestWins );
  1094. maps\mp\_awards::initStatAward( "bombsdefused", 0, maps\mp\_awards::highestWins );
  1095. maps\mp\_awards::initStatAward( "bombcarrierkills", 0, maps\mp\_awards::highestWins );
  1096. maps\mp\_awards::initStatAward( "bombscarried", 0, maps\mp\_awards::highestWins );
  1097. maps\mp\_awards::initStatAward( "killsasbombcarrier", 0, maps\mp\_awards::highestWins );
  1098. }
  1099.  
  1100.  
  1101. setSpecialLoadouts()
  1102. {
  1103. if ( isUsingMatchRulesData() && GetMatchRulesData( "defaultClasses", "axis", 5, "class", "inUse" ) )
  1104. {
  1105. level.sab_loadouts["axis"] = getMatchRulesSpecialClass( "axis", 5 );
  1106. }
  1107. if ( isUsingMatchRulesData() && GetMatchRulesData( "defaultClasses", "allies", 5, "class", "inUse" ) )
  1108. {
  1109. level.sab_loadouts["allies"] = getMatchRulesSpecialClass( "allies", 5 );
  1110. }
  1111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement