Advertisement
Guest User

vip - Notesblok

a guest
Nov 19th, 2011
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.34 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include maps\mp\gametypes\_hud_util;
  3. /*
  4. VIP
  5. Objective: Escort the VIP to safety, or eliminate the VIP beofore he reaches extraction
  6. Map ends: When one team eliminates the enemy team, or the flag is reached
  7. Respawning: Beginning of next round
  8.  
  9. Level requirementss
  10. ------------------
  11. Spawnpoints:
  12. classname mp_tdm_spawn
  13.  
  14.  
  15. Spectator Spawnpoints:
  16. classname mp_global_intermission
  17. */
  18.  
  19. main()
  20. {
  21. if(getdvar("mapname") == "mp_background")
  22. return;
  23.  
  24. maps\mp\gametypes\_globallogic::init();
  25. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  26. maps\mp\gametypes\_globallogic::SetupCallbacks();
  27.  
  28. registerRoundSwitchDvar( level.gameType, 0, 0, 9 );
  29. registerTimeLimitDvar( level.gameType, 10, 0, 1440 );
  30. registerScoreLimitDvar( level.gameType, 500, 0, 5000 );
  31. registerRoundLimitDvar( level.gameType, 1, 0, 10 );
  32. registerWinLimitDvar( level.gameType, 1, 0, 10 );
  33. registerRoundSwitchDvar( level.gameType, 3, 0, 30 );
  34. registerNumLivesDvar( level.gameType, 1, 0, 10 );
  35. registerWatchDvarInt( "halftime", 0 );
  36.  
  37. level.teamBased = true;
  38. level.objectiveBased = true;
  39.  
  40. level.onPrecacheGameType = ::onPrecacheGameType;
  41. level.onStartGameType = ::onStartGameType;
  42. level.getSpawnPoint = ::getSpawnPoint;
  43. level.onSpawnPlayer = ::onSpawnPlayer;
  44. level.onNormalDeath = ::onNormalDeath;
  45. level.onPlayerKilled = ::onPlayerKilled;
  46. level.onDeadEvent = ::onDeadEvent;
  47.  
  48. game["dialog"]["gametype"] = "VIP";
  49. }
  50.  
  51. onPrecacheGameType()
  52. {
  53. precacheShader( "compass_waypoint_captureneutral" );
  54. precacheShader( "compass_waypoint_capture" );
  55. precacheShader( "compass_waypoint_defend" );
  56.  
  57. precacheShader( "waypoint_captureneutral" );
  58. precacheShader( "waypoint_capture" );
  59. precacheShader( "waypoint_defend" );
  60.  
  61. precacheString( &"MP_ELIMINATED_VIP" );
  62. precacheString( &"MP_DEFENDED_VIP" );
  63. precacheString( &"SPLASHES_VIP" );
  64.  
  65. game["flagmodels"] = [];
  66. game["flagmodels"]["neutral"] = "prop_flag_neutral";
  67.  
  68. game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getTeamFlagModel( "allies" );
  69. game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getTeamFlagModel( "axis" );
  70.  
  71. precacheModel( game["flagmodels"]["neutral"] );
  72. precacheModel( game["flagmodels"]["allies"] );
  73. precacheModel( game["flagmodels"]["axis"] );
  74.  
  75. }
  76.  
  77. onStartGameType()
  78. {
  79. setClientNameMode("auto_change");
  80.  
  81. if ( !isdefined( game["switchedsides"] ) )
  82. game["switchedsides"] = false;
  83.  
  84. if ( game["switchedsides"] )
  85. {
  86. oldAttackers = game["attackers"];
  87. oldDefenders = game["defenders"];
  88. game["attackers"] = oldDefenders;
  89. game["defenders"] = oldAttackers;
  90. }
  91.  
  92. setObjectiveText( "allies", &"OBJECTIVES_VIP" );
  93. setObjectiveText( "axis", &"OBJECTIVES_VIP" );
  94.  
  95. if ( level.splitscreen )
  96. {
  97. setObjectiveScoreText( "allies", &"OBJECTIVES_VIP" );
  98. setObjectiveScoreText( "axis", &"OBJECTIVES_VIP" );
  99. }
  100. else
  101. {
  102. setObjectiveScoreText( "allies", &"OBJECTIVES_VIP_SCORE" );
  103. setObjectiveScoreText( "axis", &"OBJECTIVES_VIP_SCORE" );
  104. }
  105. setObjectiveHintText( "allies", &"OBJECTIVES_VIP_HINT" );
  106. setObjectiveHintText( "axis", &"OBJECTIVES_VIP_HINT" );
  107.  
  108. level.spawnMins = ( 0, 0, 0 );
  109. level.spawnMaxs = ( 0, 0, 0 );
  110. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_allies_start" );
  111. maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_axis_start" );
  112. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" );
  113. maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" );
  114.  
  115. level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  116. setMapCenter( level.mapCenter );
  117.  
  118. allowed[0] = "vip";
  119. allowed[1] = "sd";
  120. //maps\mp\gametypes\_rank::registerScoreInfo( "capture", 200 );
  121.  
  122. maps\mp\gametypes\_gameobjects::main(allowed);
  123.  
  124. self thread waitToProcess();
  125. }
  126.  
  127. waitToProcess()
  128. {
  129. level endon( "game_end" );
  130. level endon( "waitSkipped" );
  131.  
  132. self thread extractionZone();
  133. self thread skipWait();
  134.  
  135. gameFlagWait( "prematch_done" );
  136. gameFlagWait( "graceperiod_done" );
  137. self notify( "graceComplete" );
  138.  
  139. self thread vipSelection();
  140. }
  141.  
  142. skipWait()
  143. {
  144. self endon( "graceComplete" );
  145.  
  146. for(;;)
  147. {
  148. if( level.players.size > 2 )
  149. break;
  150.  
  151. wait( .5 );
  152. }
  153.  
  154. self notify( "waitSkipped" );
  155. self thread vipSelection();
  156.  
  157. }
  158.  
  159. getSpawnPoint()
  160. {
  161. spawnteam = self.pers["team"];
  162. if ( game["switchedsides"] )
  163. spawnteam = getOtherTeam( spawnteam );
  164.  
  165. if ( level.inGracePeriod )
  166. {
  167. spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn_" + spawnteam + "_start" );
  168. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  169. }
  170. else
  171. {
  172. spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( spawnteam );
  173. spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  174. }
  175.  
  176. return spawnPoint;
  177. }
  178.  
  179. onSpawnPlayer()
  180. {
  181. self.isVip = false;
  182. self.usingObj = undefined;
  183. level notify ( "spawned_player" );
  184. }
  185.  
  186. onNormalDeath( victim, attacker, lifeId )
  187. {
  188. score = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" );
  189. assert( isDefined( score ) );
  190.  
  191. attacker maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( attacker.pers["team"], score );
  192.  
  193. team = victim.team;
  194.  
  195. if ( isDefined( victim.isVip ) && victim.isVip )
  196. {
  197. level thread vip_endGame( game["attackers"], &"MP_ELIMINATED_VIP" );
  198. attacker.finalKill = true;
  199. }
  200. }
  201.  
  202. onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, killId)
  203. {
  204. thread checkAllowSpectating();
  205. }
  206.  
  207. onTimeLimit()
  208. {
  209. if ( game["status"] == "overtime" )
  210. {
  211. winner = "forfeit";
  212. }
  213. else if ( game["teamScores"]["allies"] == game["teamScores"]["axis"] )
  214. {
  215. winner = "overtime";
  216. }
  217. else if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
  218. {
  219. winner = "axis";
  220. }
  221. else
  222. {
  223. winner = "allies";
  224. }
  225.  
  226. thread maps\mp\gametypes\_gamelogic::endGame( winner, game["strings"]["time_limit_reached"] );
  227. }
  228.  
  229. checkAllowSpectating()
  230. {
  231. wait ( 0.05 );
  232.  
  233. update = false;
  234. if ( !level.aliveCount[ game["attackers"] ] )
  235. {
  236. level.spectateOverride[game["attackers"]].allowEnemySpectate = 1;
  237. update = true;
  238. }
  239. if ( !level.aliveCount[ game["defenders"] ] )
  240. {
  241. level.spectateOverride[game["defenders"]].allowEnemySpectate = 1;
  242. update = true;
  243. }
  244. if ( update )
  245. maps\mp\gametypes\_spectating::updateSpectateSettings();
  246. }
  247.  
  248. onDeadEvent( team )
  249. {
  250. if ( team == game["attackers"] )
  251. {
  252. level thread vip_endGame( game["defenders"], game["strings"][game["attackers"]+"_eliminated"] );
  253. }
  254. else if ( team == game["defenders"] )
  255. {
  256. level thread vip_endGame( game["attackers"], game["strings"][game["defenders"]+"_eliminated"] );
  257. }
  258. }
  259.  
  260. vip_endGame( winningTeam, endReasonText )
  261. {
  262. thread maps\mp\gametypes\_gamelogic::endGame( winningTeam, endReasonText );
  263. }
  264.  
  265. vipSelection()
  266. {
  267. println( "SELECTION" );
  268. potentialVIPs = [];
  269. abortTime = 0;
  270.  
  271. for( ;; )
  272. {
  273. if ( level.players.size >= 2 )
  274. break;
  275.  
  276. if ( abortTime >= 100 )
  277. {
  278. iPrintlnBold( "Game mode only playable with 2 or more players" );
  279. wait( 2 );
  280. maps\mp\gametypes\_callbacksetup::AbortLevel();
  281. }
  282.  
  283. abortTime++;
  284. wait( .1 );
  285. }
  286.  
  287. foreach ( player in level.players )
  288. {
  289. if ( player.team == game["defenders"] )
  290. potentialVIPs[ potentialVIPs.size ] = player;
  291. }
  292.  
  293. selectedVIPNum = RandomIntRange( 0, potentialVIPs.size );
  294. selectedPlayer = potentialVIPs[ selectedVIPNum ];
  295.  
  296. if ( !isAlive(selectedPlayer ) && !isSubStr( selectedPlayer.guid, "bot" ) )
  297. selectedPlayer forceVIPSpawn();
  298.  
  299. setupVip( selectedPlayer );
  300. }
  301.  
  302. setupVip ( vipPlayer )
  303. {
  304. vipPlayer TakeAllWeapons();
  305. vipPlayer _clearPerks();
  306.  
  307. vipPlayer.isVip = true;
  308.  
  309. vipPlayer giveWeapon( "deserteagle_fmj_mp" );
  310. vipPlayer giveStartAmmo( "deserteagle_fmj_mp" );
  311.  
  312. vipPlayer giveWeapon( "riotshield_mp" );
  313. vipPlayer switchToWeapon( "riotshield_mp" );
  314.  
  315. vipPlayer givePerk( "specialty_armorvest", false );
  316. vipPlayer givePerk( "specialty_finalstand", false );
  317.  
  318. vipPlayer iPrintlnBold( "You Are the VIP" );
  319. //TO DO: add defend icon on the VIP
  320. }
  321.  
  322. extractionZone()
  323. {
  324. extractionZone = getEntArray("extraction_vip", "targetname");
  325.  
  326. // check to see if zone is available.
  327. if ( !isDefined( extractionZone ) )
  328. {
  329. println("WARNING: no extraction zone specified" );
  330.  
  331. printLn( "^1Not enough extraction zones found in level!" );
  332. maps\mp\gametypes\_callbacksetup::AbortLevel();
  333. return;
  334. }
  335. else
  336. level.extractionZone = extractionZone;
  337.  
  338. trigger = level.extractionZone[0];
  339. if ( isDefined( trigger.target ) )
  340. {
  341. visuals[0] = getEnt( trigger.target, "targetname" );
  342. }
  343. else
  344. {
  345. visuals[0] = spawn( "script_model", trigger.origin );
  346. visuals[0].angles = trigger.angles;
  347. }
  348.  
  349. extractionZone = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, (0,0,100) );
  350. extractionZone maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
  351. extractionZone maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
  352. extractionZone maps\mp\gametypes\_gameobjects::setUseText( &"MP_CALLING_EXTRACTION" );
  353. extractionZone maps\mp\gametypes\_gameobjects::setUseTime( 0 );
  354.  
  355. extractionZone.onUse = ::onUse;
  356. extractionZone.onCantUse = ::onCantUse;
  357.  
  358. traceStart = trigger.origin + (0,0,32);
  359. traceEnd = trigger.origin + (0,0,-32);
  360. trace = bulletTrace( traceStart, traceEnd, false, undefined );
  361.  
  362. fx = maps\mp\gametypes\_teams::getTeamFlagFX( game["defenders"] );
  363. fxid = loadfx( fx );
  364.  
  365. upangles = vectorToAngles( trace["normal"] );
  366. forward = anglesToForward( upangles );
  367. right = anglesToRight( upangles );
  368. thread spawnFxDelay( fxid, trace["position"], forward, right, 0.5 );
  369.  
  370. extractionZone maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend");
  371. extractionZone maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend");
  372. extractionZone maps\mp\gametypes\_gameobjects::setVisibleTeam( "friendly" );
  373.  
  374. level.extractionZone = extractionZone;
  375. }
  376.  
  377. setVIPUse()
  378. {
  379. foreach (player in level.players)
  380. {
  381. if ( ! player.isVip )
  382. self.trigger disablePlayerUse(player);
  383. }
  384. }
  385.  
  386. onUse( player )
  387. {
  388. if ( !isDefined( player.isVip ) || ! player.isVip )
  389. {
  390. return;
  391. }
  392.  
  393. iPrintlnBold( "Extraction on its way" );
  394. self handleTimer( player );
  395. }
  396.  
  397. handleTimer( player )
  398. {
  399. player endon( "death" );
  400. level endon( "game_end" );
  401.  
  402. level.extractionTime = 45;
  403. maps\mp\gametypes\_gamelogic::pauseTimer();
  404. level.timeLimitOverride = true;
  405. setGameEndTime( int( getTime() + (level.extractionTime * 1000) ) );
  406. wait level.extractionTime;
  407.  
  408. //call the sentry airdrops
  409. level thread vip_endGame( game["defenders"], &"MP_DEFENDED_VIP" );
  410. }
  411.  
  412. onEndUse( team, player, success )
  413. {
  414. println( "End Use" );
  415. }
  416.  
  417. onCantUse( player )
  418. {
  419. // player iPrintLnBold( &"MP_CANT_PLANT_WITHOUT_BOMB" );
  420. }
  421.  
  422. spawnFxDelay( fxid, pos, forward, right, delay )
  423. {
  424. wait delay;
  425. effect = spawnFx( fxid, pos, forward, right );
  426. triggerFx( effect );
  427. }
  428.  
  429. forceVIPSpawn()
  430. {
  431. self endon ( "death" );
  432. self endon ( "disconnect" );
  433. self endon ( "spawned" );
  434.  
  435. if ( self.hasSpawned )
  436. return;
  437.  
  438. if ( !isValidClass( self.pers["class"] ) )
  439. {
  440. self.pers["class"] = "CLASS_CUSTOM1";
  441.  
  442. self.class = self.pers["class"];
  443. }
  444.  
  445. self closeMenus();
  446. self thread maps\mp\gametypes\_playerlogic::spawnClient();
  447. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement