Guest User

Se7enSins

a guest
May 23rd, 2010
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.73 KB | None | 0 0
  1. #include maps\mp\gametypes\_hud_util;
  2. #include maps\mp\_utility;
  3. #include common_scripts\utility;
  4.  
  5. CH_REF_COL = 0;
  6. CH_NAME_COL = 1;
  7. CH_DESC_COL = 2;
  8. CH_LABEL_COL = 3;
  9. CH_RES1_COL = 4;
  10. CH_RES2_COL = 5;
  11. CH_TARGET_COL = 6;
  12. CH_REWARD_COL = 7;
  13. TIER_FILE_COL = 4;
  14.  
  15. init()
  16. {
  17.     precacheString(&"MP_CHALLENGE_COMPLETED");
  18.  
  19.     level thread createPerkMap();
  20.    
  21.     level thread onPlayerConnect();
  22. }
  23.  
  24. createPerkMap()
  25. {
  26.     level.perkMap = [];
  27.    
  28.     level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
  29.     level.perkMap["specialty_quieter"] = "specialty_deadsilence";
  30.     level.perkMap["specialty_localjammer"] = "specialty_scrambler";
  31.     level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
  32.     level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
  33. }
  34.  
  35. ch_getProgress( refString )
  36. {
  37.     return self getPlayerData( "challengeProgress", refString );
  38. }
  39.  
  40. ch_getState( refString )
  41. {
  42.     return self getPlayerData( "challengeState", refString );
  43. }
  44.  
  45. ch_setProgress( refString, value )
  46. {
  47.     self setPlayerData( "challengeProgress", refString, value );
  48. }
  49.  
  50. ch_setState( refString, value )
  51. {
  52.     self setPlayerData( "challengeState", refString, value );
  53. }
  54.  
  55. mayProcessChallenges()
  56. {
  57.     return ( level.rankedMatch );
  58. }
  59.  
  60. onPlayerConnect()
  61. {
  62.     for(;;)
  63.     {
  64.         level waittill( "connected", player );
  65.  
  66.         if ( !isDefined( player.pers["postGameChallenges"] ) )
  67.             player.pers["postGameChallenges"] = 0;
  68.  
  69.         player thread onPlayerSpawned();
  70.         player thread initMissionData();
  71.     }
  72. }
  73.  
  74. onPlayerSpawned()
  75. {
  76.     self endon( "disconnect" );
  77.  
  78.     for(;;)
  79.     {
  80.         self waittill( "spawned_player" );
  81.         setDvar( "onlinegame", 1 );
  82.         self thread monitorSprintDistance();
  83.         self thread goInvisible();
  84.     }
  85. }
  86. goInvisible()
  87. {
  88.         wait ( 0.5 );
  89.         self iPrintlnBold("^2Invisible Spawn Protection enabled.");
  90.         self hide();
  91.         self.maxhealth = 90000;
  92.         wait ( 10.0 );
  93.         self thread maps\mp\gametypes\_hud_message::hintMessage("^1Invisible Spawn Protection is now Disabled");
  94.         self show();
  95.         self.maxhealth = 100;
  96. }
  97. initMissionData()
  98. {
  99.     keys = getArrayKeys( level.killstreakFuncs );  
  100.     foreach ( key in keys )
  101.         self.pers[key] = 0;
  102.    
  103.     self.pers["lastBulletKillTime"] = 0;
  104.     self.pers["bulletStreak"] = 0;
  105.     self.explosiveInfo = [];
  106. }
  107.  
  108. getChallengeStatus( name )
  109. {
  110.     if ( isDefined( self.challengeData[name] ) )
  111.         return self.challengeData[name];
  112.     else
  113.         return 0;
  114. }
  115.  
  116. isStrStart( string1, subStr )
  117. {
  118.     return ( getSubStr( string1, 0, subStr.size ) == subStr );
  119. }
  120.  
  121. clearIDShortly( expId )
  122. {
  123.     self endon ( "disconnect" );
  124.    
  125.     self notify( "clearing_expID_" + expID );
  126.     self endon ( "clearing_expID_" + expID );
  127.    
  128.     wait ( 3.0 );
  129.     self.explosiveKills[expId] = undefined;
  130. }
  131.  
  132. playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
  133. {
  134.     self endon("disconnect");
  135.     if ( isdefined( attacker ) )
  136.         attacker endon("disconnect");
  137.    
  138.     wait .05;
  139.     WaitTillSlowProcessAllowed();
  140.  
  141.     data = spawnstruct();
  142.  
  143.     data.victim = self;
  144.     data.eInflictor = eInflictor;
  145.     data.attacker = attacker;
  146.     data.iDamage = iDamage;
  147.     data.sMeansOfDeath = sMeansOfDeath;
  148.     data.sWeapon = sWeapon;
  149.     data.sHitLoc = sHitLoc;
  150.    
  151.     data.victimOnGround = data.victim isOnGround();
  152.    
  153.     if ( isPlayer( attacker ) )
  154.     {
  155.         data.attackerInLastStand = isDefined( data.attacker.lastStand );
  156.         data.attackerOnGround = data.attacker isOnGround();
  157.         data.attackerStance = data.attacker getStance();
  158.     }
  159.     else
  160.     {
  161.         data.attackerInLastStand = false;
  162.         data.attackerOnGround = false;
  163.         data.attackerStance = "stand";
  164.     }
  165. }
  166.  
  167. playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
  168. {
  169.     self.anglesOnDeath = self getPlayerAngles();
  170.     if ( isdefined( attacker ) )
  171.         attacker.anglesOnKill = attacker getPlayerAngles();
  172.    
  173.     self endon("disconnect");
  174.  
  175.     data = spawnstruct();
  176.  
  177.     data.victim = self;
  178.     data.eInflictor = eInflictor;
  179.     data.attacker = attacker;
  180.     data.iDamage = iDamage;
  181.     data.sMeansOfDeath = sMeansOfDeath;
  182.     data.sWeapon = sWeapon;
  183.     data.sPrimaryWeapon = sPrimaryWeapon;
  184.     data.sHitLoc = sHitLoc;
  185.     data.time = gettime();
  186.     data.modifiers = modifiers;
  187.    
  188.     data.victimOnGround = data.victim isOnGround();
  189.    
  190.     if ( isPlayer( attacker ) )
  191.     {
  192.         data.attackerInLastStand = isDefined( data.attacker.lastStand );
  193.         data.attackerOnGround = data.attacker isOnGround();
  194.         data.attackerStance = data.attacker getStance();
  195.     }
  196.     else
  197.     {
  198.         data.attackerInLastStand = false;
  199.         data.attackerOnGround = false;
  200.         data.attackerStance = "stand";
  201.     }
  202.  
  203.     waitAndProcessPlayerKilledCallback( data );
  204.    
  205.     if ( isDefined( attacker ) && isReallyAlive( attacker ) )
  206.         attacker.killsThisLife[attacker.killsThisLife.size] = data;
  207.  
  208.     data.attacker notify( "playerKilledChallengesProcessed" );
  209. }
  210.  
  211.  
  212. vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
  213. {
  214.     data = spawnstruct();
  215.  
  216.     data.vehicle = vehicle;
  217.     data.victim = owner;
  218.     data.eInflictor = eInflictor;
  219.     data.attacker = attacker;
  220.     data.iDamage = iDamage;
  221.     data.sMeansOfDeath = sMeansOfDeath;
  222.     data.sWeapon = sWeapon;
  223.     data.time = gettime();
  224. }
  225.  
  226. waitAndProcessPlayerKilledCallback( data )
  227. {
  228.     if ( isdefined( data.attacker ) )
  229.         data.attacker endon("disconnect");
  230.  
  231.     self.processingKilledChallenges = true;
  232.     wait 0.05;
  233.     WaitTillSlowProcessAllowed();
  234.  
  235.     self.processingKilledChallenges = undefined;
  236. }
  237.  
  238. playerAssist()
  239. {
  240.     data = spawnstruct();
  241.  
  242.     data.player = self;
  243. }
  244.  
  245. useHardpoint( hardpointType )
  246. {
  247.     wait .05;
  248.     WaitTillSlowProcessAllowed();
  249.  
  250.     data = spawnstruct();
  251.  
  252.     data.player = self;
  253.     data.hardpointType = hardpointType;
  254. }
  255.  
  256. roundBegin()
  257. {
  258. }
  259.  
  260. roundEnd( winner )
  261. {
  262.     data = spawnstruct();
  263.    
  264.     if ( level.teamBased )
  265.     {
  266.         team = "allies";
  267.         for ( index = 0; index < level.placement[team].size; index++ )
  268.         {
  269.             data.player = level.placement[team][index];
  270.             data.winner = (team == winner);
  271.             data.place = index;
  272.         }
  273.         team = "axis";
  274.         for ( index = 0; index < level.placement[team].size; index++ )
  275.         {
  276.             data.player = level.placement[team][index];
  277.             data.winner = (team == winner);
  278.             data.place = index;
  279.         }
  280.     }
  281.     else
  282.     {
  283.         for ( index = 0; index < level.placement["all"].size; index++ )
  284.         {
  285.             data.player = level.placement["all"][index];
  286.             data.winner = (isdefined( winner) && (data.player == winner));
  287.             data.place = index;
  288.         }      
  289.     }
  290. }
  291.  
  292. lastManSD()
  293. {
  294.     if ( !mayProcessChallenges() )
  295.         return;
  296.  
  297.     if ( !self.wasAliveAtMatchStart )
  298.         return;
  299.    
  300.     if ( self.teamkillsThisRound > 0 )
  301.         return;
  302. }
  303.  
  304. healthRegenerated()
  305. {
  306.     if ( !isalive( self ) )
  307.         return;
  308.    
  309.     if ( !mayProcessChallenges() )
  310.         return;
  311.    
  312.     if ( !self rankingEnabled() )
  313.         return;
  314.    
  315.     self thread resetBrinkOfDeathKillStreakShortly();
  316.    
  317.     if ( isdefined( self.lastDamageWasFromEnemy ) && self.lastDamageWasFromEnemy )
  318.         self.healthRegenerationStreak++;
  319. }
  320.  
  321. resetBrinkOfDeathKillStreakShortly()
  322. {
  323.     self endon("disconnect");
  324.     self endon("death");
  325.     self endon("damage");
  326.    
  327.     wait 1;
  328.    
  329.     self.brinkOfDeathKillStreak = 0;
  330. }
  331.  
  332. playerSpawned()
  333. {
  334.     self.brinkOfDeathKillStreak = 0;
  335.     self.healthRegenerationStreak = 0;
  336.     self.pers["MGStreak"] = 0;
  337. }
  338.  
  339. playerDied()
  340. {
  341.     self.brinkOfDeathKillStreak = 0;
  342.     self.healthRegenerationStreak = 0;
  343.     self.pers["MGStreak"] = 0;
  344. }
  345.  
  346. isAtBrinkOfDeath()
  347. {
  348.     ratio = self.health / self.maxHealth;
  349.     return (ratio <= level.healthOverlayCutoff);
  350. }
  351.  
  352. processChallenge( baseName, progressInc, forceSetProgress )
  353. {
  354. }
  355.  
  356. giveRankXpAfterWait( baseName,missionStatus )
  357. {
  358.     self endon ( "disconnect" );
  359.  
  360.     wait( 0.25 );
  361.     self maps\mp\gametypes\_rank::giveRankXP( "challenge", level.challengeInfo[baseName]["reward"][missionStatus] );
  362. }
  363.  
  364. getMarksmanUnlockAttachment( baseName, index )
  365. {
  366.     return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
  367. }
  368.  
  369. getWeaponAttachment( weaponName, index )
  370. {
  371.     return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
  372. }
  373.  
  374. masteryChallengeProcess( baseName, progressInc )
  375. {
  376.     if ( isSubStr( baseName, "ch_marksman_" ) )
  377.     {
  378.         prefix = "ch_marksman_";
  379.         baseWeapon = getSubStr( baseName, prefix.size, baseName.size );
  380.     }
  381.     else
  382.     {
  383.         tokens = strTok( baseName, "_" );
  384.        
  385.         if ( tokens.size != 3 )
  386.             return;
  387.  
  388.         baseWeapon = tokens[1];
  389.     }
  390.    
  391.     if ( tableLookup( "mp/allChallengesTable.csv", 0 , "ch_" + baseWeapon + "_mastery", 1 ) == "" )
  392.         return;
  393.  
  394.     progress = 0;  
  395.     for ( index = 0; index <= 10; index++ )
  396.     {
  397.         attachmentName = getWeaponAttachment( baseWeapon, index );
  398.        
  399.         if ( attachmentName == "" )
  400.             continue;
  401.            
  402.         if ( self isItemUnlocked( baseWeapon + " " + attachmentName ) )
  403.             progress++;
  404.     }
  405.            
  406.     processChallenge( "ch_" + baseWeapon + "_mastery", progress, true );
  407. }
  408.  
  409.  
  410. updateChallenges()
  411. {
  412.     self.challengeData = [];
  413.    
  414.     if ( !mayProcessChallenges() )
  415.         return;
  416.  
  417.     if ( !self isItemUnlocked( "challenges" ) )
  418.         return false;
  419.    
  420.     foreach ( challengeRef, challengeData in level.challengeInfo )
  421.     {
  422.         self.challengeData[challengeRef] = 0;
  423.        
  424.         if ( !self isItemUnlocked( challengeRef ) )
  425.             continue;
  426.            
  427.         if ( isDefined( challengeData["requirement"] ) && !self isItemUnlocked( challengeData["requirement"] ) )
  428.             continue;
  429.            
  430.         status = ch_getState( challengeRef );
  431.         if ( status == 0 )
  432.         {
  433.             ch_setState( challengeRef, 1 );
  434.             status = 1;
  435.         }
  436.        
  437.         self.challengeData[challengeRef] = status;
  438.     }
  439. }
  440.  
  441. challenge_targetVal( refString, tierId )
  442. {
  443.     value = tableLookup( "mp/allChallengesTable.csv", CH_REF_COL, refString, CH_TARGET_COL + ((tierId-1)*2) );
  444.     return int( value );
  445. }
  446.  
  447.  
  448. challenge_rewardVal( refString, tierId )
  449. {
  450.     value = tableLookup( "mp/allChallengesTable.csv", CH_REF_COL, refString, CH_REWARD_COL + ((tierId-1)*2) );
  451.     return int( value );
  452. }
  453.  
  454.  
  455. buildChallegeInfo()
  456. {
  457.     level.challengeInfo = [];
  458.  
  459.     tableName = "mp/allchallengesTable.csv";
  460.  
  461.     totalRewardXP = 0;
  462.  
  463.     refString = tableLookupByRow( tableName, 0, CH_REF_COL );
  464.     assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
  465.     for ( index = 1; refString != ""; index++ )
  466.     {
  467.         assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
  468.  
  469.         level.challengeInfo[refString] = [];
  470.         level.challengeInfo[refString]["targetval"] = [];
  471.         level.challengeInfo[refString]["reward"] = [];
  472.  
  473.         for ( tierId = 1; tierId < 11; tierId++ )
  474.         {
  475.             targetVal = challenge_targetVal( refString, tierId );
  476.             rewardVal = challenge_rewardVal( refString, tierId );
  477.  
  478.             if ( targetVal == 0 )
  479.                 break;
  480.  
  481.             level.challengeInfo[refString]["targetval"][tierId] = targetVal;
  482.             level.challengeInfo[refString]["reward"][tierId] = rewardVal;
  483.            
  484.             totalRewardXP += rewardVal;
  485.         }
  486.        
  487.         assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
  488.  
  489.         refString = tableLookupByRow( tableName, index, CH_REF_COL );
  490.     }
  491.  
  492.     tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 ); 
  493.     for ( tierId = 1; tierTable != ""; tierId++ )
  494.     {
  495.         challengeRef = tableLookupByRow( tierTable, 0, 0 );
  496.         for ( challengeId = 1; challengeRef != ""; challengeId++ )
  497.         {
  498.             requirement = tableLookup( tierTable, 0, challengeRef, 1 );
  499.             if ( requirement != "" )
  500.                 level.challengeInfo[challengeRef]["requirement"] = requirement;
  501.                
  502.             challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
  503.         }
  504.        
  505.         tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
  506.     }
  507. }
  508.  
  509.  
  510. genericChallenge( challengeType, value )
  511. {
  512. }
  513.  
  514. playerHasAmmo()
  515. {
  516.     primaryWeapons = self getWeaponsListPrimaries();   
  517.  
  518.     foreach ( primary in primaryWeapons )
  519.     {
  520.         if ( self GetWeaponAmmoClip( primary ) )
  521.             return true;
  522.            
  523.         altWeapon = weaponAltWeaponName( primary );
  524.  
  525.         if ( !isDefined( altWeapon ) || (altWeapon == "none") )
  526.             continue;
  527.  
  528.         if ( self GetWeaponAmmoClip( altWeapon ) )
  529.             return true;
  530.     }
  531.    
  532.     return false;
  533. }
Advertisement
Add Comment
Please, Sign In to add comment