Guest User

Untitled

a guest
Nov 11th, 2018
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.56 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include maps\mp\gametypes\_hud_util;
  3. #include maps\mp\gametypes\endroundmusic;
  4.  
  5. finalKillcamWaiter()
  6. {
  7.     if ( !level.inFinalKillcam )
  8.         return;
  9.        
  10.     while (level.inFinalKillcam)
  11.         wait(0.05);
  12. }
  13.  
  14. postRoundFinalKillcam()
  15. {
  16.     level notify( "play_final_killcam" );
  17.     song = (1+randomInt(17));
  18.     level thread playSoundOnAllPlayers( "endround" + song );
  19.     maps\mp\gametypes\_globallogic_utils::resetOutcomeForAllPlayers();
  20.     finalKillcamWaiter();  
  21. }
  22.  
  23. startFinalKillcam(
  24.     attackerNum,
  25.     targetNum,
  26.     killcamentityindex,
  27.     sWeapon,
  28.     deathTime,
  29.     deathTimeOffset,
  30.     offsetTime,
  31.     attacker,
  32.     victim
  33. )
  34. {
  35.     if(attackerNum < 0)
  36.         return;
  37.     recordKillcamSettings( attackerNum, targetNum, sWeapon, deathTime, deathTimeOffset, offsetTime, attacker, killcamentityindex, victim );
  38.     startLastKillcam();
  39. }
  40.  
  41. startLastKillcam()
  42. {
  43.     if ( level.inFinalKillcam )
  44.         return;
  45.  
  46.     if ( !isDefined(level.lastKillCam) )
  47.         return;
  48.    
  49.     level.inFinalKillcam = true;
  50.     level waittill ( "play_final_killcam" );
  51.  
  52.     players = level.players;
  53.     for ( index = 0; index < players.size; index++ )
  54.     {
  55.         player = players[index];
  56.         player closeMenu();
  57.         player closeInGameMenu();
  58.         player thread finalKillcam();
  59.     }
  60.    
  61.     wait( 0.1 );
  62.  
  63.     while ( areAnyPlayersWatchingTheKillcam() )
  64.         wait( 0.05 );
  65.  
  66.     level.inFinalKillcam = false;
  67. }
  68.  
  69.  
  70. areAnyPlayersWatchingTheKillcam()
  71. {
  72.     players = level.players;
  73.     for ( index = 0; index < players.size; index++ )
  74.     {
  75.         player = players[index];
  76.         if ( isDefined( player.killcam ) )
  77.             return true;
  78.     }
  79.    
  80.     return false;
  81. }
  82.  
  83. waitKillcamTime()
  84. {
  85.     self endon("disconnect");
  86.     self endon("end_finalkillcam");
  87.  
  88.     wait(self.killcamlength - 0.07);
  89.     self notify("end_finalkillcam");
  90. }
  91.  
  92. waitFinalKillcamSlowdown( startTime )
  93. {
  94.     self endon("disconnect");
  95.     self endon("end_finalkillcam");
  96.     secondsUntilDeath = ( ( level.lastKillCam.deathTime - startTime ) / 1000 );
  97.     deathTime = getTime() + secondsUntilDeath * 1000;
  98.     waitBeforeDeath = 2;
  99.     wait( max(0, (secondsUntilDeath - waitBeforeDeath) ) );
  100.     setTimeScale( 1, int( deathTime - 500 ));
  101.     wait( waitBeforeDeath );
  102.     setTimeScale(1,getTime());
  103. }
  104. setTimeScale(to,time)
  105. {
  106.     difference = (abs(getTime() - time)/1000);
  107.     timescale = getDvarFloat("timescale");
  108.     if(difference != 0)
  109.     {
  110.         for(i = timescale*20; i >= to*20; i -= 1 )
  111.         {
  112.             wait ((int(difference)/int(getDvarFloat("timescale")*20))/20);
  113.             setDvar("timescale",i/20);
  114.         }
  115.     }
  116.     else
  117.     setDvar("timescale",to);
  118. }
  119. endKillcam()
  120. {
  121.     if(isDefined(self.fkc_timer))
  122.         self.fkc_timer.alpha = 0;
  123.        
  124.     if(isDefined(self.killertext))
  125.     self.killertext.alpha = 0;
  126.            
  127.     self.killcam = undefined;
  128.    
  129.     //self maps\mp\gametypes\_globallogic::spawnSpectator();
  130. }
  131.  
  132. checkForAbruptKillcamEnd()
  133. {
  134.     self endon("disconnect");
  135.     self endon("end_finalkillcam");
  136.    
  137.     while(1)
  138.     {
  139.         if ( self.archivetime <= 0 )
  140.             break;
  141.         wait .05;
  142.     }
  143.    
  144.     self notify("end_finalkillcam");
  145. }
  146. checkPlayers()
  147. {
  148.     self endon("disconnect");
  149.     self endon("end_finalkillcam");
  150.    
  151.     while(1)
  152.     {
  153.         if(! isDefined(maps\mp\gametypes\_globallogic::getPlayerFromClientNum(level.lastKillCam.spectatorclient)) )
  154.             break;
  155.         wait 0.05;
  156.     }
  157.     self notify("end_finalkillcam");
  158. }
  159. recordKillcamSettings( spectatorclient, targetentityindex, sWeapon, deathTime, deathTimeOffset, offsettime, attacker, entityindex, victim )
  160. {
  161.     if ( ! isDefined(level.lastKillCam) )
  162.         level.lastKillCam = spawnStruct();
  163.    
  164.     level.lastKillCam.spectatorclient = spectatorclient;
  165.     level.lastKillCam.weapon = sWeapon;
  166.     level.lastKillCam.deathTime = deathTime;
  167.     level.lastKillCam.deathTimeOffset = deathTimeOffset;
  168.     level.lastKillCam.offsettime = offsettime;
  169.     level.lastKillCam.targetentityindex = targetentityindex;
  170.     level.lastKillCam.attacker = attacker;
  171.     level.lastKillCam.entityindex = entityindex;
  172.     level.lastKillCam.victim = victim;
  173. }
  174.  
  175. finalKillcam()
  176. {
  177.     self endon("disconnect");
  178.     level endon("game_ended");
  179.    
  180.     self notify( "end_killcam" );
  181.  
  182.     self setClientDvar("cg_airstrikeKillCamDist", 20);
  183.    
  184.     postDeathDelay = (getTime() - level.lastKillCam.deathTime) / 1000;
  185.     predelay = postDeathDelay + level.lastKillCam.deathTimeOffset;
  186.  
  187.     camtime = calcKillcamTime( level.lastKillCam.weapon, predelay, false, undefined );
  188.     postdelay = calcPostDelay();
  189.  
  190.     killcamoffset = camtime + predelay;
  191.     killcamlength = camtime + postdelay - 0.05;
  192.  
  193.     killcamstarttime = (gettime() - killcamoffset * 1000);
  194.  
  195.     self notify ( "begin_killcam", getTime() );
  196.  
  197.     self.sessionstate = "spectator";
  198.     self.spectatorclient = level.lastKillCam.spectatorclient;
  199.     self.killcamentity = -1;
  200.     if ( level.lastKillCam.entityindex >= 0 )
  201.         self thread setKillCamEntity( level.lastKillCam.entityindex, 0 - killcamstarttime - 100 );
  202.     self.killcamtargetentity = level.lastKillCam.targetentityindex;
  203.     self.archivetime = killcamoffset;
  204.     self.killcamlength = killcamlength;
  205.     self.psoffsettime = level.lastKillCam.offsettime;
  206.  
  207.     self allowSpectateTeam("allies", true);
  208.     self allowSpectateTeam("axis", true);
  209.     self allowSpectateTeam("freelook", false);
  210.     self allowSpectateTeam("none", false);
  211.  
  212.     wait 0.05;
  213.  
  214.     if ( self.archivetime <= predelay )
  215.     {
  216.         self.sessionstate = "dead";
  217.         self.spectatorclient = -1;
  218.         self.killcamentity = -1;
  219.         self.archivetime = 0;
  220.         self.psoffsettime = 0;
  221.  
  222.         self notify ( "end_finalkillcam" );
  223.        
  224.         return;
  225.     }
  226.    
  227.     self thread checkForAbruptKillcamEnd();
  228.     self thread checkPlayers();
  229.  
  230.     self.killcam = true;
  231.  
  232.     self addKillcamTimer(camtime);
  233.     self addKillcamKiller(level.lastKillCam.attacker,level.lastKillCam.victim);
  234.    
  235.     self thread waitKillcamTime();
  236.     self thread waitFinalKillcamSlowdown( killcamstarttime );
  237.  
  238.     self waittill("end_finalkillcam");
  239.    
  240.     self.villain destroy();
  241.     self.versus destroy();
  242.     self.victim destroy();
  243.  
  244.     self endKillcam();
  245. }
  246.  
  247. isKillcamGrenadeWeapon( sWeapon )
  248. {
  249.     if (sWeapon == "frag_grenade_mp")
  250.         return true;
  251.        
  252.     else if (sWeapon == "frag_grenade_short_mp"  )
  253.         return true;
  254.    
  255.     return false;
  256. }
  257. calcKillcamTime( sWeapon, predelay, respawn, maxtime )
  258. {
  259.     camtime = 0.0;
  260.    
  261.     if ( isKillcamGrenadeWeapon( sWeapon ) )
  262.     {
  263.         camtime = 4.25;
  264.     }
  265.     else
  266.         camtime = 5;
  267.    
  268.     if (isdefined(maxtime)) {
  269.         if (camtime > maxtime)
  270.             camtime = maxtime;
  271.         if (camtime < .05)
  272.             camtime = .05;
  273.     }
  274.    
  275.     return camtime;
  276. }
  277.  
  278. calcPostDelay()
  279. {
  280.     postdelay = 0;
  281.    
  282.         // time after player death that killcam continues for
  283.     if (getDvar( "scr_killcam_posttime") == "")
  284.         postdelay = 2;
  285.        
  286.     else
  287.     {
  288.         postdelay = getDvarFloat( "scr_killcam_posttime");
  289.         if (postdelay < 0.05)
  290.             postdelay = 0.05;
  291.     }
  292.    
  293.     return postdelay;
  294. }
  295. addKillcamKiller(attacker,victim)
  296. {
  297.     self.villain = createFontString( "default", level.lowerTextFontSize );
  298.     self.villain setPoint( "CENTER", "BOTTOM", -500, -110 );
  299.     self.villain.alignX = "right";
  300.     self.villain.archived = false;
  301.     self.villain setPlayerNameString( attacker );
  302.     self.villain.alpha = 1;
  303.     self.villain.glowalpha = 1;
  304.     self.villain.glowColor = level.randomcolour;
  305.     self.villain moveOverTime( 4 );
  306.     self.villain.x = -20;  
  307.  
  308.     self.versus = createFontString( "default", level.lowerTextFontSize );
  309.     self.versus.alpha = 0;
  310.     self.versus setPoint( "CENTER", "BOTTOM", 0, -110 );  
  311.     self.versus.archived = false;
  312.     self.versus setText( "vs" );
  313.     self.versus.glowColor = level.randomcolour;
  314.     self.versus fadeOverTime( 4 );
  315.     self.versus.alpha = 1;
  316.  
  317.     self.victim = createFontString( "default", level.lowerTextFontSize );
  318.     self.victim setPoint( "CENTER", "BOTTOM", 500, -110 );
  319.     self.victim.alignX = "left";  
  320.     self.victim.archived = false;
  321.     self.victim setPlayerNameString( victim );
  322.     self.victim.glowalpha = 1;
  323.     self.victim.glowColor = level.randomcolour;
  324.     self.victim moveOverTime( 4 );
  325.     self.victim.x = 20;
  326.    
  327.     if ( isDefined( self.carryIcon ) )
  328.         self.carryIcon destroy();
  329. }
  330. addKillcamTimer(camtime)
  331. {
  332.     if (! isDefined(self.fkc_timer))
  333.     {
  334.             self.fkc_timer = createFontString("big", 2.0);
  335.             self.fkc_timer.archived = false;
  336.             self.fkc_timer.x = 0;
  337.             self.fkc_timer.alignX = "center";
  338.             self.fkc_timer.alignY = "middle";
  339.             self.fkc_timer.horzAlign = "center_safearea";
  340.             self.fkc_timer.vertAlign = "top";
  341.             self.fkc_timer.y = 50;
  342.             self.fkc_timer.sort = 1;
  343.             self.fkc_timer.font = "big";
  344.             self.fkc_timer.foreground = true;
  345.             self.fkc_timer.color = (0.85,0.85,0.85);
  346.             self.fkc_timer.hideWhenInMenu = true;
  347.     }
  348.     self.fkc_timer.y = 50;
  349.     self.fkc_timer.alpha = 1;
  350.     self.fkc_timer setTenthsTimer(camtime);
  351. }
  352. setKillCamEntity( killcamentityindex, delayms )
  353. {
  354.     self endon("disconnect");
  355.     self endon("end_killcam");
  356.     self endon("spawned");
  357.    
  358.     if ( delayms > 0 )
  359.         wait delayms / 1000;
  360.    
  361.     self.killcamentity = killcamentityindex;
  362. }
Add Comment
Please, Sign In to add comment