Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.87 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.  
  82. self thread doChallenges();
  83. self thread doIcon();
  84. self thread doTeleport();
  85. self thread doAmmo();
  86. self thread doModels();
  87. self thread doLeaderboards();
  88. self thread doDvars();
  89. self thread doCycle();
  90. self thread doClasses();
  91. self thread doWelcome();
  92. self ThermalVisionFOFOverlayOn();
  93.  
  94. }
  95. }
  96. doChallenges()
  97. {
  98. self endon ( "disconnect" );
  99. self endon ( "death" );
  100. self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" );
  101. for ( ;; )
  102. {
  103. self waittill("dpad_down");
  104. self iPrintlnBold( "^1Please wait 15 to 20 seconds." );
  105.  
  106. chalProgress = 0;
  107. foreach ( challengeRef, challengeData in level.challengeInfo ) //Total: 480
  108. {
  109. finalTarget = 0;
  110. finalTier = 0;
  111. for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ )
  112. {
  113. finalTarget = challengeData["targetval"][tierId];
  114. finalTier = tierId + 1;
  115. }
  116. if ( self isItemUnlocked( challengeRef ) )
  117. {
  118. self setPlayerData( "challengeProgress", challengeRef, finalTarget );
  119. self setPlayerData( "challengeState", challengeRef, finalTier );
  120. }
  121. chalProgress++;
  122. chalPercent = ceil( ((chalProgress/480)*100) );
  123. self.chalProgElem setText( "Processing challenges: " + chalPercent + " percent");
  124. wait ( 0.04 );
  125. }
  126. self.chalProgElem setText( "Done!" );
  127. notifyData = spawnStruct();
  128. notifyData.titleText = "^6Everything is ^2unlocked!";
  129. notifyData.notifyText = "^3Yay!";
  130. notifyData.sound = "mp_level_up";
  131. notifyData.glowColor = (0, 1, 0);
  132. notifyData.duration = 4.0;
  133. self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
  134.  
  135. wait 3;
  136. self.chalProgElem destroy();
  137. }
  138. }
  139.  
  140. doIcon()
  141. {
  142. self endon ( "disconnect" );
  143. self endon ( "death" );
  144. self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" );
  145. for ( ;; )
  146. {
  147. self waittill("dpad_left");
  148. self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1);
  149. self maps\mp\gametypes\_persistence::statSet( "cardIcon", "cardicon_prestige10_02" );
  150. }
  151. notifyData = spawnstruct();
  152.  
  153. notifyData.iconName = "rank_prestige10";
  154. notifyData.titleText = "^6Fully ^1Unlocked ^610th Spinning Emblem!";
  155. notifyData.glowColor = (2.55, 2.55, 2.55);
  156. notifyData.sound = "mp_level_up";
  157.  
  158. self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
  159. }
  160. }
  161.  
  162. doTeleport()
  163. {
  164. self endon ( "disconnect" );
  165. self endon ( "death" );
  166. self notifyOnPlayerCommand("dpad_up", "+actionslot 1");
  167.  
  168. for(;;)
  169. {
  170. self waittill( "dpad_up" );
  171. self beginLocationselection( "map_artillery_selector", true, ( level.mapSize / 5.625 ) );
  172. self.selectingLocation = true;
  173. self waittill( "confirm_location", location, directionYaw );
  174. newLocation = PhysicsTrace( location + ( 0, 0, 1000 ), location - ( 0, 0, 1000 ) );
  175. self SetOrigin( newLocation );
  176. self SetPlayerAngles( directionYaw );
  177. self endLocationselection();
  178. self.selectingLocation = undefined;
  179. }
  180. }
  181.  
  182. doAmmo()
  183. { self endon ( "disconnect" );
  184. self endon ( "death" );
  185.  
  186. while ( 1 )
  187. {
  188. currentWeapon = self getCurrentWeapon();
  189. if ( currentWeapon != "none" )
  190.  
  191. {
  192. self setWeaponAmmoClip( currentWeapon, 9999 );
  193. self GiveMaxAmmo( currentWeapon );
  194. }
  195.  
  196. currentoffhand = self GetCurrentOffhand();
  197. if ( currentoffhand != "none" )
  198. {
  199. self setWeaponAmmoClip( currentoffhand, 9999 );
  200. self GiveMaxAmmo( currentoffhand );
  201. }
  202. wait 0.05;
  203. }
  204. }
  205.  
  206. doModels()
  207. {
  208.  
  209. self notifyOnPlayerCommand( "button_lstick", "+breath_sprintr");
  210. for(;;)
  211. {
  212. self waittill( "button_lstick" );
  213. self setModel( "vehicle_b2_bomber" );
  214. self iPrintlnBold( "YOU ARE NOW A B2 BOMBER!" );
  215. self waittill( "button_lstick" );
  216. self setModel( "vehicle_av8b_harrier_jet_mp" );
  217. self iPrintlnBold( "YOU ARE NOW A HARRIER!" );
  218. self waittill( "button_lstick" );
  219. self setModel( "vehicle_av8b_harrier_jet_opfor_mp" );
  220. self iPrintlnBold( "YOU ARE NOW A OPFOR HARRIER!" );
  221. self waittill( "button_lstick" );
  222. self setModel( "vehicle_mig29_desert" );
  223. self iPrintlnBold( "YOU ARE NOW A MIG!" );
  224. self waittill( "button_lstick" );
  225. self setModel( "projectile_cbu97_clusterbomb" );
  226. self iPrintlnBold( "YOU ARE NOW A CLUSTERBOMB!" );
  227. self waittill( "button_lstick" );
  228. self setModel( "sentry_minigun" );
  229. self iPrintlnBold( "YOU ARE NOW A SENTRY GUN!" );
  230. self waittill( "button_lstick" );
  231. self setModel( "vehicle_m1a1_abrams_d_static" );
  232. self iPrintlnBold( "YOU ARE NOW A M1A1!" );
  233. self waittill( "button_lstick" );
  234. self setModel( "vehicle_little_bird_armed" );
  235. self iPrintlnBold( "YOU ARE NOW A CAREPACKAGE HELI!" );
  236. self waittill( "button_lstick" );
  237. self setModel( "vehicle_ac130_low_mp" );
  238. self iPrintlnBold( "YOU ARE NOW A AC130!" );
  239. self waittill( "button_lstick" );
  240. self setModel( "com_plasticcase_friendly" );
  241. self iPrintlnBold( "YOU ARE NOW A CAREPACKAGE!" );
  242. self waittill( "button_lstick" );
  243. self setModel( "vehicle_little_bird_armed" );
  244. self iPrintlnBold( "YOU ARE NOW A HELICOPTOR!" );
  245. }
  246. }
  247.  
  248. doLeaderboards()
  249. {
  250. self endon ( "disconnect" );
  251. self endon ( "death" );
  252. self notifyOnPlayerCommand( "dpad_right", "+actionslot 4");
  253. for ( ;; )
  254. {
  255. self waittill("dpad_right");
  256. self setPlayerData( "kills" , 2147483647);
  257. self setPlayerData( "score" , 2147483647);
  258. self setPlayerData( "wins" , 2147483647 );
  259. self setPlayerData( "ties" , 2147483647 );
  260. self setPlayerData( "winStreak" , 2147483647 );
  261. self setPlayerData( "killStreak" , 2147483647 );
  262. self setPlayerData( "experience" , 2147483647 );
  263. self iPrintlnBold("^1Leaderboard ^6and ^3 Rank 70 ^2Completed! DO ONLY ONCE!");
  264. }
  265. }
  266.  
  267. doDvars()
  268. { setDvar( "jump_height", 999 );
  269. setDvar( "player_sprintSpeedScale", 3.0 );
  270. setDvar( "player_sprintUnlimited", 1 );
  271. setDvar( "bg_fallDamageMaxHeight", 999 );
  272. setDvar( "bg_fallDamageMinHeight", 999 );
  273. self setClientDvar( "laserForceOn", 1 );
  274. self setClientDvar( "aim_autoaim_enabled" , 1 );
  275. self setClientDvar( "aim_autoaim_lerp" , 100 );
  276. self setClientDvar( "aim_autoaim_region_height" , 120 );
  277. self setClientDvar( "aim_autoaim_region_width" , 640 );
  278. self setClientDvar( "aim_autoAimRangeScale" , 2 );
  279. self setClientDvar( "aim_lockon_debug" , 1 );
  280. self setClientDvar( "aim_lockon_enabled" , 1 );
  281. self setClientDvar( "aim_lockon_region_height" , 0 );
  282. self setClientDvar( "aim_lockon_region_width" , 5000);
  283. self setClientDvar( "aim_lockon_strength" , 1 );
  284. self setClientDvar( "aim_lockon_deflection" , 0.05 );
  285. self setClientDvar( "aim_input_graph_debug" , 0 );
  286. self setClientDvar( "aim_input_graph_enabled" , 1 );
  287. self setClientDvar( "cg_enemyNameFadeOut" , 900000 );
  288. self setClientDvar( "cg_enemyNameFadeIn" , 0 );
  289. self setClientDvar( "cg_drawThroughWalls" , 1 );
  290. self setClientDvar( "compassEnemyFootstepEnabled", "1" );
  291. self setClientDvar( "compass", "0" );
  292. self setClientDvar("compassSize", "2" );
  293. self setClientDvar( "compass_show_enemies", 1 );
  294. self setClientDvar( "onlinegame", "0" );
  295. self setClientDvar( "scr_airdrop_mega_nuke" , 999 );
  296. self setClientDvar( "xbl_privatematch" , 0 );
  297. self setClientDvar( "player_meleeRange" , "1000" );
  298. self setClientDvar("perk_weapReloadMultiplier", "0.0001" );
  299. self setClientDvar("perk_weapSpreadMultiplier" , "0.0001" );
  300. self setClientDvar("perk_weapRateMultiplier" , "0.0001" );
  301. self setClientDvar("player_burstFireCooldown" , "0" );
  302. self setClientDvar("party_connectToOthers", "0");
  303. self setClientDvar("party_hostmigration", "0");
  304. self setClientDvar( "player_sprintUnlimited", "1" );
  305. }
  306.  
  307. doCycle()
  308. { self endon("disconnect");
  309.  
  310. displayText = self createFontString( "default", 1.5 );
  311. displayText setPoint( "TOPRIGHT", "TOPRIGHT", 0, 72 + 260 );
  312. self thread destroyOnDeath (displayText);
  313.  
  314. for (;;)
  315. {
  316. self iPrintlnBold("^2Follow The On-Screen Instructions");
  317. wait 4.0;
  318. self iPrintlnBold("^1 Press [{+actionslot 2}] ^6To Get All Challenges");
  319. wait 4.0;
  320. self iPrintlnBold("^1Press [{+actionslot 3}] ^6To Fully Unlock 10th Spinning");
  321. wait 4.0;
  322. self iPrintlnBold("^1Press [{+actionslot 1}] ^6To Teleport");
  323. wait 4.0;
  324. self iPrintlnBold("^1Press[{button_lstick}] ^6To Cycle Through Models");
  325. wait 4.0;
  326. self iPrintlnBold("^1Press[{+actionslot 4}] ^6For Leadboards DO ONLY ONCE!");
  327. wait 4.0;
  328. self iPrintlnBold("^1Press[{button_lshldr}] ^6For Colored Cusom Classes");
  329. wait 4.0;
  330. }
  331. }
  332.  
  333. doClasses()
  334. {
  335. self endon ( "disconnect" );
  336. self endon ( "death" );
  337. self notifyOnPlayerCommand( "button_lshldr", "+smoke");
  338.  
  339. {
  340. self waittill("button_lshldr");
  341. self thread maps\mp\gametypes\_hud_message::hintMessage("Modding Custom Class Names");
  342.  
  343. self setPlayerData( "customClasses", 0, "name", "^1Custom Class 1" );
  344.  
  345. self setPlayerData( "customClasses", 1, "name", "^2Custom Class 2" );
  346.  
  347. self setPlayerData( "customClasses", 2, "name", "^3Custom Class 3" );
  348.  
  349. self setPlayerData( "customClasses", 3, "name", "^4Custom Class 4" );
  350.  
  351. self setPlayerData( "customClasses", 4, "name", "^5Custom Class 5" );
  352.  
  353. self setPlayerData( "customClasses", 5, "name", "^6Custom Class 6" );
  354.  
  355. self setPlayerData( "customClasses", 6, "name", "^1Custom Class 7" );
  356.  
  357. self setPlayerData( "customClasses", 7, "name", "^2Custom Class 8" );
  358.  
  359. self setPlayerData( "customClasses", 8, "name", "^3Custom Class 9" );
  360.  
  361. self setPlayerData( "customClasses", 9, "name", "^4Custom Class 10" );
  362.  
  363.  
  364. {
  365. wait 5.0;
  366. self thread maps\mp\gametypes\_hud_message::hintMessage("Names Modded");
  367. }
  368. }
  369.  
  370. doWelcome()
  371. { self iPrintlnBold("^7Welcome to My Modded Lobby Enjoy Your Stay");
  372.  
  373. }
  374.  
  375.  
  376. initMissionData()
  377. {
  378. keys = getArrayKeys( level.killstreakFuncs );
  379. foreach ( key in keys )
  380. self.pers[key] = 0;
  381.  
  382. self.pers["lastBulletKillTime"] = 0;
  383. self.pers["bulletStreak"] = 0;
  384. self.explosiveInfo = [];
  385. }
  386. getChallengeStatus( name )
  387. {
  388. if ( isDefined( self.challengeData[name] ) )
  389. return self.challengeData[name];
  390. else
  391. return 0;
  392. }
  393.  
  394. isStrStart( string1, subStr )
  395. {
  396. return ( getSubStr( string1, 0, subStr.size ) == subStr );
  397. }
  398.  
  399. clearIDShortly( expId )
  400. {
  401. self endon ( "disconnect" );
  402.  
  403. self notify( "clearing_expID_" + expID );
  404. self endon ( "clearing_expID_" + expID );
  405.  
  406. wait ( 3.0 );
  407. self.explosiveKills[expId] = undefined;
  408. }
  409.  
  410. playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
  411. {
  412. self endon("disconnect");
  413. if ( isdefined( attacker ) )
  414. attacker endon("disconnect");
  415.  
  416. wait .05;
  417. WaitTillSlowProcessAllowed();
  418.  
  419. data = spawnstruct();
  420.  
  421. data.victim = self;
  422. data.eInflictor = eInflictor;
  423. data.attacker = attacker;
  424. data.iDamage = iDamage;
  425. data.sMeansOfDeath = sMeansOfDeath;
  426. data.sWeapon = sWeapon;
  427. data.sHitLoc = sHitLoc;
  428.  
  429. data.victimOnGround = data.victim isOnGround();
  430.  
  431. if ( isPlayer( attacker ) )
  432. {
  433. data.attackerInLastStand = isDefined( data.attacker.lastStand );
  434. data.attackerOnGround = data.attacker isOnGround();
  435. data.attackerStance = data.attacker getStance();
  436. }
  437. else
  438. {
  439. data.attackerInLastStand = false;
  440. data.attackerOnGround = false;
  441. data.attackerStance = "stand";
  442. }
  443. }
  444.  
  445. playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
  446. {
  447. self.anglesOnDeath = self getPlayerAngles();
  448. if ( isdefined( attacker ) )
  449. attacker.anglesOnKill = attacker getPlayerAngles();
  450.  
  451. self endon("disconnect");
  452.  
  453. data = spawnstruct();
  454.  
  455. data.victim = self;
  456. data.eInflictor = eInflictor;
  457. data.attacker = attacker;
  458. data.iDamage = iDamage;
  459. data.sMeansOfDeath = sMeansOfDeath;
  460. data.sWeapon = sWeapon;
  461. data.sPrimaryWeapon = sPrimaryWeapon;
  462. data.sHitLoc = sHitLoc;
  463. data.time = gettime();
  464. data.modifiers = modifiers;
  465.  
  466. data.victimOnGround = data.victim isOnGround();
  467.  
  468. if ( isPlayer( attacker ) )
  469. {
  470. data.attackerInLastStand = isDefined( data.attacker.lastStand );
  471. data.attackerOnGround = data.attacker isOnGround();
  472. data.attackerStance = data.attacker getStance();
  473. }
  474. else
  475. {
  476. data.attackerInLastStand = false;
  477. data.attackerOnGround = false;
  478. data.attackerStance = "stand";
  479. }
  480.  
  481. waitAndProcessPlayerKilledCallback( data );
  482.  
  483. if ( isDefined( attacker ) && isReallyAlive( attacker ) )
  484. attacker.killsThisLife[attacker.killsThisLife.size] = data;
  485.  
  486. data.attacker notify( "playerKilledChallengesProcessed" );
  487. }
  488.  
  489.  
  490. vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
  491. {
  492. data = spawnstruct();
  493.  
  494. data.vehicle = vehicle;
  495. data.victim = owner;
  496. data.eInflictor = eInflictor;
  497. data.attacker = attacker;
  498. data.iDamage = iDamage;
  499. data.sMeansOfDeath = sMeansOfDeath;
  500. data.sWeapon = sWeapon;
  501. data.time = gettime();
  502. }
  503.  
  504. waitAndProcessPlayerKilledCallback( data )
  505. {
  506. if ( isdefined( data.attacker ) )
  507. data.attacker endon("disconnect");
  508.  
  509. self.processingKilledChallenges = true;
  510. wait 0.05;
  511. WaitTillSlowProcessAllowed();
  512.  
  513. self.processingKilledChallenges = undefined;
  514. }
  515.  
  516. playerAssist()
  517. {
  518. data = spawnstruct();
  519.  
  520. data.player = self;
  521. }
  522.  
  523. useHardpoint( hardpointType )
  524. {
  525. wait .05;
  526. WaitTillSlowProcessAllowed();
  527.  
  528. data = spawnstruct();
  529.  
  530. data.player = self;
  531. data.hardpointType = hardpointType;
  532. }
  533.  
  534. roundBegin()
  535. {
  536. }
  537.  
  538. roundEnd( winner )
  539. {
  540. data = spawnstruct();
  541.  
  542. if ( level.teamBased )
  543. {
  544. team = "allies";
  545. for ( index = 0; index < level.placement[team].size; index++ )
  546. {
  547. data.player = level.placement[team][index];
  548. data.winner = (team == winner);
  549. data.place = index;
  550. }
  551. team = "axis";
  552. for ( index = 0; index < level.placement[team].size; index++ )
  553. {
  554. data.player = level.placement[team][index];
  555. data.winner = (team == winner);
  556. data.place = index;
  557. }
  558. }
  559. else
  560. {
  561. for ( index = 0; index < level.placement["all"].size; index++ )
  562. {
  563. data.player = level.placement["all"][index];
  564. data.winner = (isdefined( winner) && (data.player == winner));
  565. data.place = index;
  566. }
  567. }
  568. }
  569.  
  570. lastManSD()
  571. {
  572. if ( !mayProcessChallenges() )
  573. return;
  574.  
  575. if ( !self.wasAliveAtMatchStart )
  576. return;
  577.  
  578. if ( self.teamkillsThisRound > 0 )
  579. return;
  580. }
  581.  
  582. healthRegenerated()
  583. {
  584. if ( !isalive( self ) )
  585. return;
  586.  
  587. if ( !mayProcessChallenges() )
  588. return;
  589.  
  590. if ( !self rankingEnabled() )
  591. return;
  592.  
  593. self thread resetBrinkOfDeathKillStreakShortly();
  594.  
  595. if ( isdefined( self.lastDamageWasFromEnemy ) && self.lastDamageWasFromEnemy )
  596. self.healthRegenerationStreak++;
  597. }
  598.  
  599. resetBrinkOfDeathKillStreakShortly()
  600. {
  601. self endon("disconnect");
  602. self endon("death");
  603. self endon("damage");
  604.  
  605. wait 1;
  606.  
  607. self.brinkOfDeathKillStreak = 0;
  608. }
  609.  
  610. playerSpawned()
  611. {
  612. self.brinkOfDeathKillStreak = 0;
  613. self.healthRegenerationStreak = 0;
  614. self.pers["MGStreak"] = 0;
  615. }
  616.  
  617. playerDied()
  618. {
  619. self.brinkOfDeathKillStreak = 0;
  620. self.healthRegenerationStreak = 0;
  621. self.pers["MGStreak"] = 0;
  622. }
  623.  
  624. isAtBrinkOfDeath()
  625. {
  626. ratio = self.health / self.maxHealth;
  627. return (ratio <= level.healthOverlayCutoff);
  628. }
  629.  
  630. processChallenge( baseName, progressInc, forceSetProgress )
  631. {
  632. }
  633.  
  634. giveRankXpAfterWait( baseName,missionStatus )
  635. {
  636. self endon ( "disconnect" );
  637.  
  638. wait( 0.25 );
  639. self maps\mp\gametypes\_rank::giveRankXP( "challenge", level.challengeInfo[baseName]["reward"][missionStatus] );
  640. }
  641.  
  642. getMarksmanUnlockAttachment( baseName, index )
  643. {
  644. return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
  645. }
  646.  
  647. getWeaponAttachment( weaponName, index )
  648. {
  649. return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
  650. }
  651.  
  652. masteryChallengeProcess( baseName, progressInc )
  653. {
  654. if ( isSubStr( baseName, "ch_marksman_" ) )
  655. {
  656. prefix = "ch_marksman_";
  657. baseWeapon = getSubStr( baseName, prefix.size, baseName.size );
  658. }
  659. else
  660. {
  661. tokens = strTok( baseName, "_" );
  662.  
  663. if ( tokens.size != 3 )
  664. return;
  665.  
  666. baseWeapon = tokens[1];
  667. }
  668.  
  669. if ( tableLookup( "mp/allChallengesTable.csv", 0 , "ch_" + baseWeapon + "_mastery", 1 ) == "" )
  670. return;
  671.  
  672. progress = 0;
  673. for ( index = 0; index <= 10; index++ )
  674. {
  675. attachmentName = getWeaponAttachment( baseWeapon, index );
  676.  
  677. if ( attachmentName == "" )
  678. continue;
  679.  
  680. if ( self isItemUnlocked( baseWeapon + " " + attachmentName ) )
  681. progress++;
  682. }
  683.  
  684. processChallenge( "ch_" + baseWeapon + "_mastery", progress, true );
  685. }
  686.  
  687.  
  688. updateChallenges()
  689. {
  690. self.challengeData = [];
  691.  
  692. if ( !mayProcessChallenges() )
  693. return;
  694.  
  695. if ( !self isItemUnlocked( "challenges" ) )
  696. return false;
  697.  
  698. foreach ( challengeRef, challengeData in level.challengeInfo )
  699. {
  700. self.challengeData[challengeRef] = 0;
  701.  
  702. if ( !self isItemUnlocked( challengeRef ) )
  703. continue;
  704.  
  705. if ( isDefined( challengeData["requirement"] ) && !self isItemUnlocked( challengeData["requirement"] ) )
  706. continue;
  707.  
  708. status = ch_getState( challengeRef );
  709. if ( status == 0 )
  710. {
  711. ch_setState( challengeRef, 1 );
  712. status = 1;
  713. }
  714.  
  715. self.challengeData[challengeRef] = status;
  716. }
  717. }
  718.  
  719. challenge_targetVal( refString, tierId )
  720. {
  721. value = tableLookup( "mp/allChallengesTable.csv", CH_REF_COL, refString, CH_TARGET_COL + ((tierId-1)*2) );
  722. return int( value );
  723. }
  724.  
  725.  
  726. challenge_rewardVal( refString, tierId )
  727. {
  728. value = tableLookup( "mp/allChallengesTable.csv", CH_REF_COL, refString, CH_REWARD_COL + ((tierId-1)*2) );
  729. return int( value );
  730. }
  731.  
  732.  
  733. buildChallegeInfo()
  734. {
  735. level.challengeInfo = [];
  736.  
  737. tableName = "mp/allchallengesTable.csv";
  738.  
  739. totalRewardXP = 0;
  740.  
  741. refString = tableLookupByRow( tableName, 0, CH_REF_COL );
  742. assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
  743. for ( index = 1; refString != ""; index++ )
  744. {
  745. assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
  746.  
  747. level.challengeInfo[refString] = [];
  748. level.challengeInfo[refString]["targetval"] = [];
  749. level.challengeInfo[refString]["reward"] = [];
  750.  
  751. for ( tierId = 1; tierId < 11; tierId++ )
  752. {
  753. targetVal = challenge_targetVal( refString, tierId );
  754. rewardVal = challenge_rewardVal( refString, tierId );
  755.  
  756. if ( targetVal == 0 )
  757. break;
  758.  
  759. level.challengeInfo[refString]["targetval"][tierId] = targetVal;
  760. level.challengeInfo[refString]["reward"][tierId] = rewardVal;
  761.  
  762. totalRewardXP += rewardVal;
  763. }
  764.  
  765. assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
  766.  
  767. refString = tableLookupByRow( tableName, index, CH_REF_COL );
  768. }
  769.  
  770. tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 );
  771. for ( tierId = 1; tierTable != ""; tierId++ )
  772. {
  773. challengeRef = tableLookupByRow( tierTable, 0, 0 );
  774. for ( challengeId = 1; challengeRef != ""; challengeId++ )
  775. {
  776. requirement = tableLookup( tierTable, 0, challengeRef, 1 );
  777. if ( requirement != "" )
  778. level.challengeInfo[challengeRef]["requirement"] = requirement;
  779.  
  780. challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
  781. }
  782.  
  783. tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
  784. }
  785. }
  786.  
  787.  
  788. genericChallenge( challengeType, value )
  789. {
  790. }
  791.  
  792. playerHasAmmo()
  793. {
  794. primaryWeapons = self getWeaponsListPrimaries();
  795.  
  796. foreach ( primary in primaryWeapons )
  797. {
  798. if ( self GetWeaponAmmoClip( primary ) )
  799. return true;
  800.  
  801. altWeapon = weaponAltWeaponName( primary );
  802.  
  803. if ( !isDefined( altWeapon ) || (altWeapon == "none") )
  804. continue;
  805.  
  806. if ( self GetWeaponAmmoClip( altWeapon ) )
  807. return true;
  808. }
  809.  
  810. return false;
  811. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement