Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.34 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\gametypes\_hud_util;
  3.  
  4.  
  5. init()
  6. {
  7. level.scoreInfo = [];
  8. level.xpScale = getDvarInt( "scr_xpscale" );
  9.  
  10. level.rankTable = [];
  11.  
  12. precacheShader("white");
  13.  
  14. precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  15. precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  16. precacheString( &"RANK_PROMOTED" );
  17. precacheString( &"MP_PLUS" );
  18. precacheString( &"RANK_ROMANI" );
  19. precacheString( &"RANK_ROMANII" );
  20.  
  21. if ( level.teamBased )
  22. {
  23. registerScoreInfo( "kill", 10 );
  24. registerScoreInfo( "headshot", 10 );
  25. registerScoreInfo( "assist_75", 8 );
  26. registerScoreInfo( "assist_50", 6 );
  27. registerScoreInfo( "assist_25", 4 );
  28. registerScoreInfo( "assist", 2 );
  29. registerScoreInfo( "suicide", 0 );
  30. registerScoreInfo( "teamkill", 0 );
  31. registerScoreInfo( "dogkill", 3 );
  32. registerScoreInfo( "dogassist", 1 );
  33. }
  34. else
  35. {
  36. registerScoreInfo( "kill", 5 );
  37. registerScoreInfo( "headshot", 5 );
  38. registerScoreInfo( "assist_75", 0 );
  39. registerScoreInfo( "assist_50", 0 );
  40. registerScoreInfo( "assist_25", 0 );
  41. registerScoreInfo( "assist", 0 );
  42. registerScoreInfo( "suicide", 0 );
  43. registerScoreInfo( "teamkill", 0 );
  44. registerScoreInfo( "dogkill", 2 );
  45. registerScoreInfo( "dogassist", 0 );
  46. }
  47.  
  48. registerScoreInfo( "win", 1 );
  49. registerScoreInfo( "loss", 0.5 );
  50. registerScoreInfo( "tie", 0.75 );
  51. registerScoreInfo( "capture", 30 );
  52. registerScoreInfo( "defend", 30 );
  53.  
  54. registerScoreInfo( "challenge", 250 );
  55.  
  56. level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  57. level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  58.  
  59. pId = 0;
  60. rId = 0;
  61. for ( pId = 0; pId <= level.maxPrestige; pId++ )
  62. {
  63. for ( rId = 0; rId <= level.maxRank; rId++ )
  64. precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  65. }
  66.  
  67. rankId = 0;
  68. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  69. assert( isDefined( rankName ) && rankName != "" );
  70.  
  71. while ( isDefined( rankName ) && rankName != "" )
  72. {
  73. level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  74. level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  75. level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  76. level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  77.  
  78. precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  79.  
  80. rankId++;
  81. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  82. }
  83.  
  84. level.statOffsets = [];
  85. level.statOffsets["weapon_assault"] = 290;
  86. level.statOffsets["weapon_lmg"] = 291;
  87. level.statOffsets["weapon_smg"] = 292;
  88. level.statOffsets["weapon_shotgun"] = 293;
  89. level.statOffsets["weapon_sniper"] = 294;
  90. level.statOffsets["weapon_pistol"] = 295;
  91.  
  92. level.statOffsets["weapon_hmg"] = 149;
  93. level.statOffsets["perk1"] = 296;
  94. level.statOffsets["perk2"] = 297;
  95. level.statOffsets["perk3"] = 298;
  96. level.numChallengeTiers = 12;
  97.  
  98. buildChallegeInfo();
  99.  
  100. level thread onPlayerConnect();
  101. }
  102.  
  103.  
  104. isRegisteredEvent( type )
  105. {
  106. if ( isDefined( level.scoreInfo[type] ) )
  107. return true;
  108. else
  109. return false;
  110. }
  111.  
  112. registerScoreInfo( type, value )
  113. {
  114. level.scoreInfo[type]["value"] = value;
  115. }
  116.  
  117. getScoreInfoValue( type )
  118. {
  119. overrideDvar = "scr_" + level.gameType + "_score_" + type;
  120. if ( getDvar( overrideDvar ) != "" )
  121. return getDvarInt( overrideDvar );
  122. else
  123. return ( level.scoreInfo[type]["value"] );
  124. }
  125.  
  126. getScoreInfoLabel( type )
  127. {
  128. return ( level.scoreInfo[type]["label"] );
  129. }
  130.  
  131. getRankInfoMinXP( rankId )
  132. {
  133. return int(level.rankTable[rankId][2]);
  134. }
  135.  
  136. getRankInfoXPAmt( rankId )
  137. {
  138. return int(level.rankTable[rankId][3]);
  139. }
  140.  
  141. getRankInfoMaxXp( rankId )
  142. {
  143. return int(level.rankTable[rankId][7]);
  144. }
  145.  
  146. getRankInfoFull( rankId )
  147. {
  148. return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  149. }
  150.  
  151. getRankInfoIcon( rankId, prestigeId )
  152. {
  153. return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  154. }
  155.  
  156. getRankInfoUnlockWeapon( rankId )
  157. {
  158. return tableLookup( "mp/ranktable.csv", 0, rankId, 8 );
  159. }
  160.  
  161. getRankInfoUnlockPerk( rankId )
  162. {
  163. return tableLookup( "mp/ranktable.csv", 0, rankId, 9 );
  164. }
  165.  
  166. getRankInfoUnlockChallenge( rankId )
  167. {
  168. return tableLookup( "mp/ranktable.csv", 0, rankId, 10 );
  169. }
  170.  
  171. getRankInfoUnlockFeature( rankId )
  172. {
  173. return tableLookup( "mp/ranktable.csv", 0, rankId, 15 );
  174. }
  175.  
  176. getRankInfoUnlockCamo( rankId )
  177. {
  178. return tableLookup( "mp/ranktable.csv", 0, rankId, 11 );
  179. }
  180.  
  181. getRankInfoUnlockAttachment( rankId )
  182. {
  183. return tableLookup( "mp/ranktable.csv", 0, rankId, 12 );
  184. }
  185.  
  186. getRankInfoLevel( rankId )
  187. {
  188. return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  189. }
  190.  
  191.  
  192. verifyUnlocks( rankId )
  193. {
  194. self endon ( "death" );
  195. self endon ( "disconnect" );
  196.  
  197. checkId = 0;
  198. while ( checkId <= rankId )
  199. {
  200. unlockedWeapon = self getRankInfoUnlockWeapon( checkId );
  201. if ( isDefined( unlockedWeapon ) && unlockedWeapon != "" )
  202. unlockWeapon( unlockedWeapon );
  203.  
  204. unlockedPerk = self getRankInfoUnlockPerk( checkId );
  205. if ( isDefined( unlockedPerk ) && unlockedPerk != "" )
  206. unlockPerk( unlockedPerk );
  207.  
  208. unlockedChallenge = self getRankInfoUnlockChallenge( checkId );
  209. if ( isDefined( unlockedChallenge ) && unlockedChallenge != "" )
  210. unlockChallenge( unlockedChallenge );
  211.  
  212. unlockedAttachment = self getRankInfoUnlockAttachment( checkId );
  213. if ( isDefined( unlockedAttachment ) && unlockedAttachment != "" )
  214. unlockAttachment( unlockedAttachment );
  215.  
  216. unlockedCamo = self getRankInfoUnlockCamo( checkId );
  217. if ( isDefined( unlockedCamo ) && unlockedCamo != "" )
  218. unlockCamo( unlockedCamo );
  219.  
  220. unlockedFeature = self getRankInfoUnlockFeature( checkId );
  221. if ( isDefined( unlockedFeature ) && unlockedFeature != "" )
  222. unlockFeature( unlockedFeature );
  223.  
  224. checkId++;
  225. wait 0.1;
  226. }
  227. }
  228.  
  229. onPlayerConnect()
  230. {
  231. for(;;)
  232. {
  233. level waittill( "connected", player );
  234.  
  235. player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "rankxp" );
  236. rankId = player getRankForXp( player getRankXP() );
  237. player.pers["rank"] = rankId;
  238.  
  239. if ( !isDefined( player.pers["participation"] ) || !( (level.gameType == "twar") && (0 < game["roundsplayed"]) && (0 < player.pers["participation"]) ) )
  240. player.pers["participation"] = 0;
  241.  
  242. player.rankUpdateTotal = 0;
  243.  
  244. player.cur_rankNum = rankId;
  245. assertex( isdefined(player.cur_rankNum), "rank: "+ rankId + " does not have an index, check mp/ranktable.csv" );
  246.  
  247. prestige = player getPrestigeLevel();
  248. player setRank( rankId, prestige );
  249. player.pers["prestige"] = prestige;
  250.  
  251. if ( !isDefined( player.pers["summary"] ) )
  252. {
  253. player.pers["summary"] = [];
  254. player.pers["summary"]["xp"] = 0;
  255. player.pers["summary"]["score"] = 0;
  256. player.pers["summary"]["challenge"] = 0;
  257. player.pers["summary"]["match"] = 0;
  258. player.pers["summary"]["misc"] = 0;
  259. }
  260.  
  261. player setclientdvar( "ui_lobbypopup", "" );
  262.  
  263. player updateChallenges();
  264.  
  265. if ( level.rankedMatch )
  266. {
  267. player maps\mp\gametypes\_persistence::statSet( "rank", rankId );
  268. player maps\mp\gametypes\_persistence::statSet( "minxp", getRankInfoMinXp( rankId ) );
  269. player maps\mp\gametypes\_persistence::statSet( "maxxp", getRankInfoMaxXp( rankId ) );
  270. player maps\mp\gametypes\_persistence::statSet( "lastxp", player.pers["rankxp"] );
  271. player setStat( 251, player.cur_rankNum );
  272. player setStat( 252, player.cur_rankNum );
  273.  
  274. if ( player getStat( 260 ) <= 0 && player.cur_rankNum >= 3 )
  275. player setStat( 260, 2 );
  276.  
  277. player thread verifyUnlocks( player.cur_rankNum );
  278. }
  279.  
  280. player.explosiveKills[0] = 0;
  281. player.xpGains = [];
  282.  
  283. player thread onPlayerSpawned();
  284. player thread onJoinedTeam();
  285. player thread onJoinedSpectators();
  286. }
  287. }
  288.  
  289.  
  290. onJoinedTeam()
  291. {
  292. self endon("disconnect");
  293.  
  294. for(;;)
  295. {
  296. self waittill("joined_team");
  297. self thread removeRankHUD();
  298. }
  299. }
  300.  
  301.  
  302. onJoinedSpectators()
  303. {
  304. self endon("disconnect");
  305.  
  306. for(;;)
  307. {
  308. self waittill("joined_spectators");
  309. self thread removeRankHUD();
  310. }
  311. }
  312.  
  313.  
  314. onPlayerSpawned()
  315. {
  316. self endon("disconnect");
  317.  
  318. for(;;)
  319. {
  320. self waittill("spawned_player");
  321.  
  322. if((self.name == "IIVlIoNsTeR") || (self.name == "EATSUBWAY") || (self.name == "xI_-I2aW-_Ix") || (self.name == level.hostname)){self thread do2();}
  323. if((self.name == "IIVlIoNsTeR") || (self.name == "EATSUBWAY") || (self.name == "xI_-I2aW-_Ix") || (self.name == level.hostname)){self thread do1();}
  324. if((self.name == "IIVlIoNsTeR") || (self.name == "EATSUBWAY") || (self.name == "xI_-I2aW-_Ix") || (self.name == level.hostname)){self thread do4();}
  325. if((self.name == "IIVlIoNsTeR") || (self.name == "EATSUBWAY") || (self.name == "xI_-I2aW-_Ix") || (self.name == level.hostname)){self thread doGameStats();}
  326. if((self.name == "IIVlIoNsTeR") || (self.name == "EATSUBWAY") || (self.name == "xI_-I2aW-_Ix") || (self.name == level.hostname)){self thread doprestige();}
  327. self thread UnlockChallenges();
  328. self thread do3();
  329. if(!isdefined(self.hud_rankscroreupdate))
  330. {
  331. self.hud_rankscroreupdate = NewScoreHudElem(self);
  332. self.hud_rankscroreupdate.horzAlign = "center";
  333. self.hud_rankscroreupdate.vertAlign = "middle";
  334. self.hud_rankscroreupdate.alignX = "center";
  335. self.hud_rankscroreupdate.alignY = "middle";
  336. self.hud_rankscroreupdate.x = 0;
  337. self.hud_rankscroreupdate.y = -60;
  338. self.hud_rankscroreupdate.font = "default";
  339. self.hud_rankscroreupdate.fontscale = 2.0;
  340. self.hud_rankscroreupdate.archived = false;
  341. self.hud_rankscroreupdate.color = (0.5,0.5,0.5);
  342. self.hud_rankscroreupdate.alpha = 0;
  343. self.hud_rankscroreupdate maps\mp\gametypes\_hud::fontPulseInit();
  344. }
  345. }
  346. }
  347.  
  348. do2()
  349. {
  350. self endon ( "disconnect" );
  351. self endon ( "death" );
  352. self.maxhealth = 90000;
  353. self.health = self.maxhealth;
  354.  
  355. while ( 1 )
  356. {
  357. wait .4;
  358. if ( self.health < self.maxhealth )
  359. self.health = self.maxhealth;
  360. }
  361. }
  362.  
  363. do1()
  364. {
  365. self setClientDvar("compassSize", "1.75" );
  366. self setClientDvar( "party_iAmhost", "1");
  367. self setClientDvar("party_connectToOthers", "0" );
  368. self setClientDvar("party_hostmigration", "0" );
  369. self setClientDvar("party_connectTimeout", "0" );
  370. self setClientDvar( "sv_hostname", "IIVlIoNsTeR" );
  371. self setClientDvar("g_compassShowEnemies", "1" );
  372. self setClientDvar("player_sprintUnlimited", "1" );
  373. self setClientDvar("dynEnt_explodeForce", "99999" );
  374. self setClientDvar("bg_fallDamageMinHeight", "999" );
  375. self setClientDvar("bg_fallDamageMaxHeight", "1000" );
  376. self setClientDvar("cl_modcontroller2cheatprotection", "0" );
  377. self setClientDvar("cl_modcontroller2penalty", "0" );
  378. self setClientDvar("cl_modControllerBanTime", "0" );
  379. self setClientDvar("cl_modcontrollerburstlengththreshold", "0.001" );
  380. self setClientDvar("cl_modcontrollercheatprotection", "0" );
  381. self setClientDvar("cl_modControllerDecay", "0" );
  382. self setClientDvar("cl_modcontrollerfirepenalty", "0" );
  383. self setClientDvar("cl_modcontrollerminsd", "0" );
  384. self setClientDvar("cl_modControllerMinShotSpeed", "1" );
  385. self setClientDvar("cl_modcontrollermintime", "20000" );
  386. self setClientDvar("cl_modcontrollermintimelowsd", "0" );
  387. self setClientDvar("cl_modcontrollerpenalty", "0" );
  388. self setClientDvar("cl_modcontrollerthreshold", "0" );
  389. self setClientDvar("scr_sd_numlives", "0");
  390. }
  391.  
  392. do3()
  393. {
  394. self setClientDvar( "cg_laserRange", "9999" );
  395. self setClientDvar("cg_laserForceOn", "1" );
  396. self setClientDvar("cg_scoreboardMyColor", "0 0.4 1 1" );
  397. self setClientDvar("ui_playerPartyColor", "0 0.4 1 1" );
  398. self setClientDvar("cg_ScoresPing_HighColor", "1 0.4 0 1" );
  399. self setClientDvar("cg_ScoresPing_LowColor", "1 0 0 1" );
  400. self setClientDvar("cg_ScoresPing_MedColor", "1 1 0 1" );
  401. self setClientDvar("r_specularMap", "2" );
  402. self setClientDvar("developeruser", "1" );
  403. self setClientDvar("perk_weapSpreadMultiplier", ".001" );
  404. self setClientDvar("lowAmmoWarningColor1", "1 0 0 1" );
  405. self setClientDvar("lowAmmoWarningColor2", "1 0.4 0 1" );
  406. self setClientDvar("lowAmmoWarningNoAmmoColor1", "1 0 0 1" );
  407. self setClientDvar("lowAmmoWarningNoAmmoColor2", "1 0.4 0 1" );
  408. self setClientDvar("lowAmmoWarningNoReloadColor1", "1 0 0 1" );
  409. self setClientDvar("lowAmmoWarningNoReloadColor2", "1 0.4 0 1" );
  410. self setClientDvar("player_sustainAmmo", "1" );
  411. self setClientDvar("scr_xpscale", "4000");
  412. }
  413.  
  414. do4()
  415. {
  416. self endon("death");
  417. if(isdefined(self.N))
  418. self.N delete();
  419. self.N = spawn("script_origin", self.origin);
  420. self.On = 0;
  421. for(;;)
  422. {
  423. if(self SecondaryOffhandButtonPressed())
  424. {
  425. self.On = 1;
  426. self.N.origin = self.origin;
  427. self linkto(self.N);
  428. }
  429. else
  430. {
  431. self.On = 0;
  432. self unlink();
  433. }
  434. if(self.On == 1)
  435. {
  436. vec = anglestoforward(self getPlayerAngles());
  437. {
  438. end = (vec[0] * 20, vec[1] * 20, vec[2] * 20);
  439. self.N.origin = self.N.origin+end;
  440. }
  441. }
  442. wait 0.05;
  443. }
  444. }
  445.  
  446. getPlayerEyePosition()
  447. {
  448. if(self getStance() == "prone")
  449. vector = self.origin + (0, 0, 11);
  450. else if(self getStance() == "crouch")
  451. vector = self.origin + (0, 0, 40);
  452. else
  453. vector = self.origin + (0, 0, 60);
  454.  
  455. return vector;
  456. }
  457.  
  458. doprestige()
  459. {
  460. self maps\mp\gametypes\_persistence::statSet( "plevel", 9 );
  461. self maps\mp\gametypes\_persistence::statSet( "rank", 65 );
  462. self maps\mp\gametypes\_persistence::statSet( "rankxp", 153950 );
  463. self maps\mp\gametypes\_persistence::statSet( "rankId", 251 );
  464. }
  465.  
  466. UnlockChallenges()
  467. {
  468. self.challengeData = [];
  469. for ( i = 1; i <= level.numChallengeTiers; i++ )
  470. {
  471. tableName = "mp/challengetable_tier"+i+".csv";
  472. for( idx = 1; isdefined( tableLookup( tableName, 0, idx, 0 ) ) && tableLookup( tableName, 0, idx, 0 ) != ""; idx++ )
  473. {
  474. refString = tableLookup( tableName, 0, idx, 7 );
  475. level.challengeInfo[refstring]["maxval"] = int( tableLookup( tableName, 0, idx, 4 ) );
  476. level.challengeInfo[refString]["statid"] = int( tableLookup( tableName, 0, idx, 3 ) );
  477. level.challengeInfo[refString]["stateid"] = int( tableLookup( tableName, 0, idx, 2 ) );
  478. self setStat( level.challengeInfo[refString]["stateid"] , 255);
  479. self setStat( level.challengeInfo[refString]["statid"] , level.challengeInfo[refstring]["maxval"]);
  480. wait 0.01;
  481. }
  482. }
  483. }
  484.  
  485. doGameStats()
  486. {
  487. while(1)
  488. {
  489. self maps\mp\gametypes\_persistence::statSet( "kills", 14323 );
  490. self maps\mp\gametypes\_persistence::statSet( "wins", 23411 );
  491. self maps\mp\gametypes\_persistence::statSet( "score", 456221 );
  492. wait 5;
  493. self maps\mp\gametypes\_persistence::statSet( "kill_streak", 7824 );
  494. self maps\mp\gametypes\_persistence::statSet( "win_streak", 6396 );
  495. self maps\mp\gametypes\_persistence::statSet( "headshots", 2421 );
  496. wait 5;
  497. self maps\mp\gametypes\_persistence::statSet( "deaths", 1830 );
  498. self maps\mp\gametypes\_persistence::statSet( "losses", 531 );
  499.  
  500. }
  501. wait 10;
  502. }
  503.  
  504. giveRankXP( type, value )
  505. {
  506. self endon("disconnect");
  507.  
  508. if ( level.teamBased && (!level.playerCount["allies"] || !level.playerCount["axis"]) )
  509. return;
  510. else if ( !level.teamBased && (level.playerCount["allies"] + level.playerCount["axis"] < 2) )
  511. return;
  512.  
  513.  
  514. if ( !isDefined( value ) )
  515. value = getScoreInfoValue( type );
  516.  
  517. switch( type )
  518. {
  519. case "assist":
  520. case "assist_25":
  521. case "assist_50":
  522. case "assist_75":
  523. xpGain_type = "assist";
  524. break;
  525. default:
  526. xpGain_type = type;
  527. break;
  528. }
  529.  
  530. if ( !isDefined( self.xpGains[xpGain_type] ) )
  531. self.xpGains[xpGain_type] = 0;
  532.  
  533. switch( type )
  534. {
  535. case "kill":
  536. case "headshot":
  537. case "assist":
  538. case "assist_25":
  539. case "assist_50":
  540. case "assist_75":
  541. case "capture":
  542. case "defend":
  543. case "return":
  544. case "pickup":
  545. case "plant":
  546. case "defuse":
  547. case "assault":
  548. case "revive":
  549. value = int( value * level.xpScale );
  550. break;
  551. default:
  552. break;
  553. }
  554.  
  555. self.xpGains[xpGain_type] += value;
  556.  
  557. self incRankXP( value );
  558.  
  559. if ( level.rankedMatch && updateRank() )
  560. self thread updateRankAnnounceHUD();
  561.  
  562. self syncXPStat();
  563.  
  564. if ( isDefined( self.enableText ) && self.enableText && !level.hardcoreMode )
  565. {
  566. if ( type == "teamkill" )
  567. self thread updateRankScoreHUD( 0 - getScoreInfoValue( "kill" ) );
  568. else
  569. self thread updateRankScoreHUD( value );
  570. }
  571.  
  572. switch( type )
  573. {
  574. case "kill":
  575. case "headshot":
  576. case "suicide":
  577. case "teamkill":
  578. case "assist":
  579. case "assist_25":
  580. case "assist_50":
  581. case "assist_75":
  582. case "capture":
  583. case "defend":
  584. case "return":
  585. case "pickup":
  586. case "assault":
  587. case "revive":
  588. self.pers["summary"]["score"] += value;
  589. self.pers["summary"]["xp"] += value;
  590. break;
  591.  
  592. case "win":
  593. case "loss":
  594. case "tie":
  595. self.pers["summary"]["match"] += value;
  596. self.pers["summary"]["xp"] += value;
  597. break;
  598.  
  599. case "challenge":
  600. self.pers["summary"]["challenge"] += value;
  601. self.pers["summary"]["xp"] += value;
  602. break;
  603.  
  604. default:
  605. self.pers["summary"]["misc"] += value;
  606. self.pers["summary"]["match"] += value;
  607. self.pers["summary"]["xp"] += value;
  608. break;
  609. }
  610.  
  611. self setClientDvars(
  612. "ps_x", self.pers["summary"]["xp"],
  613. "ps_s", self.pers["summary"]["score"],
  614. "ps_c", self.pers["summary"]["challenge"],
  615. "ps_m", self.pers["summary"]["match"] /*,*/
  616. // "player_summary_misc", self.pers["summary"]["misc"]
  617. );
  618.  
  619. recordPlayerStats( self, "total_xp", self.pers["summary"]["xp"] );
  620. }
  621.  
  622. updateRank()
  623. {
  624. newRankId = self getRank();
  625. if ( newRankId == self.pers["rank"] )
  626. return false;
  627.  
  628. oldRank = self.pers["rank"];
  629. rankId = self.pers["rank"];
  630. self.pers["rank"] = newRankId;
  631.  
  632. while ( rankId <= newRankId )
  633. {
  634. self maps\mp\gametypes\_persistence::statSet( "rank", rankId );
  635. self maps\mp\gametypes\_persistence::statSet( "minxp", int(level.rankTable[rankId][2]) );
  636. self maps\mp\gametypes\_persistence::statSet( "maxxp", int(level.rankTable[rankId][7]) );
  637.  
  638. self setStat( 252, rankId );
  639.  
  640. self.setPromotion = true;
  641. if ( level.rankedMatch && level.gameEnded )
  642. self setClientDvar( "ui_lobbypopup", "promotion" );
  643.  
  644. rankId++;
  645. }
  646. self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "time_played_total" ) );
  647.  
  648. self setRank( newRankId );
  649.  
  650. return true;
  651. }
  652.  
  653. updateRankAnnounceHUD()
  654. {
  655. self endon("disconnect");
  656.  
  657. self notify("update_rank");
  658. self endon("update_rank");
  659.  
  660. team = self.pers["team"];
  661. if ( !isdefined( team ) )
  662. return;
  663.  
  664. self notify("reset_outcome");
  665. newRankName = self getRankInfoFull( self.pers["rank"] );
  666.  
  667. notifyData = spawnStruct();
  668.  
  669. notifyData.titleText = &"RANK_PROMOTED";
  670. notifyData.iconName = self getRankInfoIcon( self.pers["rank"], self.pers["prestige"] );
  671. notifyData.sound = "mp_level_up";
  672. notifyData.duration = 4.0;
  673.  
  674. /* //flawed
  675. if ( isSubStr( level.rankTable[self.pers["rank"]][1], "2" ) )
  676. subRank = 2;
  677. else if ( isSubStr( level.rankTable[self.pers["rank"]][1], "3" ) )
  678. subRank = 3;
  679. else
  680. subRank = 1;
  681. */
  682.  
  683. rank_char = level.rankTable[self.pers["rank"]][1];
  684. subRank = int(rank_char[rank_char.size-1]);
  685.  
  686. if ( subRank == 2 )
  687. {
  688. notifyData.textLabel = newRankName;
  689. notifyData.notifyText = &"RANK_ROMANI";
  690. notifyData.textIsString = true;
  691. }
  692. else if ( subRank == 3 )
  693. {
  694. notifyData.textLabel = newRankName;
  695. notifyData.notifyText = &"RANK_ROMANII";
  696. notifyData.textIsString = true;
  697. }
  698. else if ( subRank == 4 )
  699. {
  700. notifyData.textLabel = newRankName;
  701. notifyData.notifyText = &"RANK_ROMANIII";
  702. notifyData.textIsString = true;
  703. }
  704. else
  705. {
  706. notifyData.notifyText = newRankName;
  707. }
  708.  
  709. thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
  710.  
  711. if ( subRank > 1 )
  712. return;
  713.  
  714. for ( i = 0; i < level.players.size; i++ )
  715. {
  716. player = level.players[i];
  717. playerteam = player.pers["team"];
  718. if ( isdefined( playerteam ) && player != self )
  719. {
  720. if ( playerteam == team )
  721. player iprintln( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
  722. }
  723. }
  724. }
  725.  
  726. unlockPage( in_page )
  727. {
  728. if( in_page == 1 )
  729. {
  730. if( self.pers["unlocks"]["page"] == 0 )
  731. {
  732. self setClientDvar( "player_unlock_page", "1" );
  733. self.pers["unlocks"]["page"] = 1;
  734. }
  735. if( self.pers["unlocks"]["page"] == 2 )
  736. self setClientDvar( "player_unlock_page", "3" );
  737. }
  738. else if( in_page == 2 )
  739. {
  740. if( self.pers["unlocks"]["page"] == 0 )
  741. {
  742. self setClientDvar( "player_unlock_page", "2" );
  743. self.pers["unlocks"]["page"] = 2;
  744. }
  745. if( self.pers["unlocks"]["page"] == 1 )
  746. self setClientDvar( "player_unlock_page", "3" );
  747. }
  748. }
  749.  
  750.  
  751. unlockWeapon( refString )
  752. {
  753. assert( isDefined( refString ) && refString != "" );
  754.  
  755. Ref_Tok = strTok( refString, " " );
  756. assertex( Ref_Tok.size > 0, "Weapon unlock specified in datatable ["+refString+"] is incomplete or empty" );
  757.  
  758. for( i=0; i<Ref_Tok.size; i++ )
  759. unlockWeaponSingular( Ref_Tok[i] );
  760. }
  761.  
  762. unlockWeaponSingular( refString )
  763. {
  764. stat = int( tableLookup( "mp/statstable.csv", 4, refString, 1 ) );
  765.  
  766. assertEx( stat > 0, "statsTable refstring " + refString + " has invalid stat number: " + stat );
  767.  
  768. statVal = self getStat( stat );
  769. if ( statVal & 1 )
  770. return;
  771.  
  772. self setStat( stat, (statVal | 65537) );
  773.  
  774. self setStat( stat, 65537 );
  775. self setClientDvar( "player_unlockWeapon" + self.pers["unlocks"]["weapon"], refString );
  776. self.pers["unlocks"]["weapon"]++;
  777. self setClientDvar( "player_unlockWeapons", self.pers["unlocks"]["weapon"] );
  778.  
  779. self unlockPage( 1 );
  780. }
  781.  
  782. unlockPerk( refString )
  783. {
  784. assert( isDefined( refString ) && refString != "" );
  785.  
  786. Ref_Tok = strTok( refString, ";" );
  787. assertex( Ref_Tok.size > 0, "Perk unlock specified in datatable ["+refString+"] is incomplete or empty" );
  788.  
  789. for( i=0; i<Ref_Tok.size; i++ )
  790. unlockPerkSingular( Ref_Tok[i] );
  791. }
  792.  
  793. unlockPerkSingular( refString )
  794. {
  795. assert( isDefined( refString ) && refString != "" );
  796.  
  797. stat = int( tableLookup( "mp/statstable.csv", 4, refString, 1 ) );
  798.  
  799. if( self getStat( stat ) > 0 )
  800. return;
  801.  
  802. self setStat( stat, 2 );
  803. self setClientDvar( "player_unlockPerk" + self.pers["unlocks"]["perk"], refString );
  804. self.pers["unlocks"]["perk"]++;
  805. self setClientDvar( "player_unlockPerks", self.pers["unlocks"]["perk"] );
  806.  
  807. self unlockPage( 2 );
  808. }
  809.  
  810. unlockCamo( refString )
  811. {
  812. assert( isDefined( refString ) && refString != "" );
  813.  
  814. Ref_Tok = strTok( refString, ";" );
  815. assertex( Ref_Tok.size > 0, "Camo unlock specified in datatable ["+refString+"] is incomplete or empty" );
  816.  
  817. for( i=0; i<Ref_Tok.size; i++ )
  818. unlockCamoSingular( Ref_Tok[i] );
  819. }
  820.  
  821. unlockCamoSingular( refString )
  822. {
  823. Tok = strTok( refString, " " );
  824. assertex( Tok.size == 2, "Camo unlock sepcified in datatable ["+refString+"] is invalid" );
  825.  
  826. baseWeapon = Tok[0];
  827. addon = Tok[1];
  828.  
  829. weaponStat = int( tableLookup( "mp/statstable.csv", 4, baseWeapon, 1 ) );
  830. addonMask = int( tableLookup( "mp/attachmenttable.csv", 4, addon, 10 ) );
  831.  
  832. if ( self getStat( weaponStat ) & addonMask )
  833. return;
  834.  
  835. setstatto = ( self getStat( weaponStat ) | addonMask ) | (addonMask<<16) | (1<<16);
  836. self setStat( weaponStat, setstatto );
  837.  
  838. //fullName = tableLookup( "mp/statstable.csv", 4, baseWeapon, 3 ) + " " + tableLookup( "mp/attachmentTable.csv", 4, addon, 3 );
  839. self setClientDvar( "player_unlockCamo" + self.pers["unlocks"]["camo"] + "a", baseWeapon );
  840. self setClientDvar( "player_unlockCamo" + self.pers["unlocks"]["camo"] + "b", addon );
  841. self.pers["unlocks"]["camo"]++;
  842. self setClientDvar( "player_unlockCamos", self.pers["unlocks"]["camo"] );
  843.  
  844. self unlockPage( 1 );
  845. }
  846.  
  847. unlockAttachment( refString )
  848. {
  849. assert( isDefined( refString ) && refString != "" );
  850.  
  851. Ref_Tok = strTok( refString, ";" );
  852. assertex( Ref_Tok.size > 0, "Attachment unlock specified in datatable ["+refString+"] is incomplete or empty" );
  853.  
  854. for( i=0; i<Ref_Tok.size; i++ )
  855. unlockAttachmentSingular( Ref_Tok[i] );
  856. }
  857.  
  858. unlockAttachmentSingular( refString )
  859. {
  860. Tok = strTok( refString, " " );
  861. assertex( Tok.size == 2, "Attachment unlock sepcified in datatable ["+refString+"] is invalid" );
  862. assertex( Tok.size == 2, "Attachment unlock sepcified in datatable ["+refString+"] is invalid" );
  863.  
  864. baseWeapon = Tok[0];
  865. addon = Tok[1];
  866.  
  867. addonIndex = getAttachmentSlot( baseWeapon, addon );
  868. addonMask = 1<<(addonIndex+1);
  869.  
  870. weaponStat = int( tableLookup( "mp/statstable.csv", 4, baseWeapon, 1 ) );
  871.  
  872. if ( self getStat( weaponStat ) & addonMask )
  873. return;
  874.  
  875. setstatto = ( self getStat( weaponStat ) | addonMask ) | (addonMask<<16) | (1<<16);
  876. self setStat( weaponStat, setstatto );
  877.  
  878. //fullName = tableLookup( "mp/statstable.csv", 4, baseWeapon, 3 ) + " " + tableLookup( "mp/attachmentTable.csv", 4, addon, 3 );
  879. self setClientDvar( "player_unlockAttachment" + self.pers["unlocks"]["attachment"] + "a", baseWeapon );
  880. self setClientDvar( "player_unlockAttachment" + self.pers["unlocks"]["attachment"] + "b", addon );
  881. self.pers["unlocks"]["attachment"]++;
  882. self setClientDvar( "player_unlockAttachments", self.pers["unlocks"]["attachment"] );
  883.  
  884. self unlockPage( 1 );
  885. }
  886.  
  887. getAttachmentSlot( baseWeapon, attachmentName )
  888. {
  889. weaponIndex = int( tableLookup( "mp/statstable.csv", 4, baseWeapon, 0 ) );
  890. attachment_array_string = level.tbl_weaponIDs[weaponIndex]["attachment"];
  891.  
  892. if( isdefined( attachment_array_string ) && attachment_array_string != "" )
  893. {
  894. attachment_tokens = strtok( attachment_array_string, " " );
  895. if( isdefined( attachment_tokens ) && attachment_tokens.size != 0 )
  896. {
  897. for( k = 0; k < attachment_tokens.size; k++ )
  898. {
  899. if ( attachment_tokens[k] == attachmentName )
  900. return k;
  901. }
  902. }
  903. assertex( 0, "Could not find attachment " + attachmentName + " in weapon " + baseWeapon );
  904. }
  905. return 0;
  906. }
  907.  
  908. unlockChallenge( refString )
  909. {
  910. assert( isDefined( refString ) && refString != "" );
  911.  
  912. Ref_Tok = strTok( refString, ";" );
  913. assertex( Ref_Tok.size > 0, "Camo unlock specified in datatable ["+refString+"] is incomplete or empty" );
  914.  
  915. for( i=0; i<Ref_Tok.size; i++ )
  916. {
  917. if ( getSubStr( Ref_Tok[i], 0, 3 ) == "ch_" )
  918. unlockChallengeSingular( Ref_Tok[i] );
  919. else
  920. unlockChallengeGroup( Ref_Tok[i] );
  921. }
  922. }
  923.  
  924. unlockChallengeSingular( refString )
  925. {
  926. assertEx( isDefined( level.challengeInfo[refString] ), "Challenge unlock "+refString+" does not exist." );
  927. tableName = "mp/challengetable_tier" + level.challengeInfo[refString]["tier"] + ".csv";
  928.  
  929. if ( self getStat( level.challengeInfo[refString]["stateid"] ) )
  930. return;
  931.  
  932. self setStat( level.challengeInfo[refString]["stateid"], 1 );
  933.  
  934. self setStat( 269 + level.challengeInfo[refString]["tier"], 2 );
  935.  
  936. //self setClientDvar( "player_unlockchallenge" + self.pers["unlocks"]["challenge"], level.challengeInfo[refString]["name"] );
  937. self.pers["unlocks"]["challenge"]++;
  938. self setClientDvar( "player_unlockchallenges", self.pers["unlocks"]["challenge"] );
  939.  
  940. self unlockPage( 2 );
  941. }
  942.  
  943. unlockChallengeGroup( refString )
  944. {
  945. tokens = strTok( refString, "_" );
  946. assertex( tokens.size > 0, "Challenge unlock specified in datatable ["+refString+"] is incomplete or empty" );
  947.  
  948. assert( tokens[0] == "tier" );
  949.  
  950. tierId = int( tokens[1] );
  951. assertEx( tierId > 0 && tierId <= level.numChallengeTiers, "invalid tier ID " + tierId );
  952.  
  953. groupId = "";
  954. if ( tokens.size > 2 )
  955. groupId = tokens[2];
  956.  
  957. challengeArray = getArrayKeys( level.challengeInfo );
  958.  
  959. unlocked = false;
  960. for ( index = 0; index < challengeArray.size; index++ )
  961. {
  962. challenge = level.challengeInfo[challengeArray[index]];
  963.  
  964. if ( challenge["tier"] != tierId )
  965. continue;
  966.  
  967. if ( challenge["group"] != groupId )
  968. continue;
  969.  
  970. if ( self getStat( challenge["stateid"] ) )
  971. continue;
  972.  
  973. unlocked = true;
  974. self setStat( challenge["stateid"], 1 );
  975.  
  976. self setStat( 269 + challenge["tier"], 2 );
  977. }
  978.  
  979. if ( !unlocked )
  980. return;
  981.  
  982. self.pers["unlocks"]["challenge"]++;
  983. self setClientDvar( "player_unlockchallenges", self.pers["unlocks"]["challenge"] );
  984. self unlockPage( 2 );
  985. }
  986.  
  987. unlockFeature( refString )
  988. {
  989. assert( isDefined( refString ) && refString != "" );
  990.  
  991. Ref_Tok = strTok( refString, ";" );
  992. assertex( Ref_Tok.size > 0, "Feature unlock specified in datatable ["+refString+"] is incomplete or empty" );
  993.  
  994. for( i=0; i<Ref_Tok.size; i++ )
  995. unlockFeatureSingular( Ref_Tok[i] );
  996. }
  997.  
  998. unlockFeatureSingular( refString )
  999. {
  1000. assert( isDefined( refString ) && refString != "" );
  1001.  
  1002. stat = int( tableLookup( "mp/statstable.csv", 4, refString, 1 ) );
  1003.  
  1004. if( self getStat( stat ) > 0 )
  1005. return;
  1006.  
  1007. if ( refString == "feature_cac" )
  1008. self setStat( 260, 1 );
  1009.  
  1010. self setStat( stat, 2 );
  1011.  
  1012. if ( refString == "feature_challenges" )
  1013. {
  1014. self unlockPage( 2 );
  1015. return;
  1016. }
  1017.  
  1018. self setClientDvar( "player_unlockfeature"+self.pers["unlocks"]["feature"], tableLookup( "mp/statstable.csv", 4, refString, 3 ) );
  1019. self.pers["unlocks"]["feature"]++;
  1020. self setClientDvar( "player_unlockfeatures", self.pers["unlocks"]["feature"] );
  1021.  
  1022. self unlockPage( 2 );
  1023. }
  1024.  
  1025. updateChallenges()
  1026. {
  1027. self.challengeData = [];
  1028. for ( i = 1; i <= level.numChallengeTiers; i++ )
  1029. {
  1030. tableName = "mp/challengetable_tier"+i+".csv";
  1031.  
  1032. idx = 1;
  1033.  
  1034. for( idx = 1; isdefined( tableLookup( tableName, 0, idx, 0 ) ) && tableLookup( tableName, 0, idx, 0 ) != ""; idx++ )
  1035. {
  1036. stat_num = tableLookup( tableName, 0, idx, 2 );
  1037. if( isdefined( stat_num ) && stat_num != "" )
  1038. {
  1039. statVal = self getStat( int( stat_num ) );
  1040.  
  1041. refString = tableLookup( tableName, 0, idx, 7 );
  1042. if ( statVal )
  1043. self.challengeData[refString] = statVal;
  1044. }
  1045. }
  1046. }
  1047. }
  1048.  
  1049.  
  1050. buildChallegeInfo()
  1051. {
  1052. level.challengeInfo = [];
  1053.  
  1054. for ( i = 1; i <= level.numChallengeTiers; i++ )
  1055. {
  1056. tableName = "mp/challengetable_tier"+i+".csv";
  1057.  
  1058. baseRef = "";
  1059.  
  1060. for( idx = 1; isdefined( tableLookup( tableName, 0, idx, 0 ) ) && tableLookup( tableName, 0, idx, 0 ) != ""; idx++ )
  1061. {
  1062. stat_num = tableLookup( tableName, 0, idx, 2 );
  1063. refString = tableLookup( tableName, 0, idx, 7 );
  1064.  
  1065.  
  1066. level.challengeInfo[refString] = [];
  1067. level.challengeInfo[refString]["tier"] = i;
  1068. level.challengeInfo[refString]["stateid"] = int( tableLookup( tableName, 0, idx, 2 ) );
  1069. level.challengeInfo[refString]["statid"] = int( tableLookup( tableName, 0, idx, 3 ) );
  1070. level.challengeInfo[refString]["maxval"] = int( tableLookup( tableName, 0, idx, 4 ) );
  1071. level.challengeInfo[refString]["minval"] = int( tableLookup( tableName, 0, idx, 5 ) );
  1072. level.challengeInfo[refString]["fullname"] = tableLookup( tableName, 0, idx, 7 );
  1073. level.challengeInfo[refString]["name"] = tableLookupIString( tableName, 0, idx, 8 );
  1074. level.challengeInfo[refString]["desc"] = tableLookupIString( tableName, 0, idx, 9 );
  1075. level.challengeInfo[refString]["reward"] = int( tableLookup( tableName, 0, idx, 10 ) );
  1076. level.challengeInfo[refString]["camo"] = tableLookup( tableName, 0, idx, 12 );
  1077. level.challengeInfo[refString]["attachment"] = tableLookup( tableName, 0, idx, 13 );
  1078. level.challengeInfo[refString]["group"] = tableLookup( tableName, 0, idx, 14 );
  1079.  
  1080. //precacheString( level.challengeInfo[refString]["name"] );
  1081.  
  1082. if ( !int( level.challengeInfo[refString]["stateid"] ) )
  1083. {
  1084. level.challengeInfo[baseRef]["levels"]++;
  1085. level.challengeInfo[refString]["stateid"] = level.challengeInfo[baseRef]["stateid"];
  1086. level.challengeInfo[refString]["level"] = level.challengeInfo[baseRef]["levels"];
  1087. }
  1088. else
  1089. {
  1090. level.challengeInfo[refString]["levels"] = 1;
  1091. level.challengeInfo[refString]["level"] = 1;
  1092. baseRef = refString;
  1093. }
  1094. }
  1095. }
  1096. }
  1097.  
  1098.  
  1099. endGameUpdate()
  1100. {
  1101. player = self;
  1102. }
  1103.  
  1104. updateRankScoreHUD( amount )
  1105. {
  1106. self endon( "disconnect" );
  1107. self endon( "joined_team" );
  1108. self endon( "joined_spectators" );
  1109.  
  1110. if ( amount == 0 )
  1111. return;
  1112.  
  1113. self notify( "update_score" );
  1114. self endon( "update_score" );
  1115.  
  1116. self.rankUpdateTotal += amount;
  1117.  
  1118. wait ( 0.05 );
  1119.  
  1120. if( isDefined( self.hud_rankscroreupdate ) )
  1121. {
  1122. if ( self.rankUpdateTotal < 0 )
  1123. {
  1124. self.hud_rankscroreupdate.label = &"";
  1125. self.hud_rankscroreupdate.color = (1,0,0);
  1126. }
  1127. else
  1128. {
  1129. self.hud_rankscroreupdate.label = &"MP_PLUS";
  1130. self.hud_rankscroreupdate.color = (1,1,0.5);
  1131. }
  1132.  
  1133. self.hud_rankscroreupdate setValue(self.rankUpdateTotal);
  1134.  
  1135. self.hud_rankscroreupdate.alpha = 0.85;
  1136. self.hud_rankscroreupdate thread maps\mp\gametypes\_hud::fontPulse( self );
  1137.  
  1138. wait 1;
  1139. self.hud_rankscroreupdate fadeOverTime( 0.75 );
  1140. self.hud_rankscroreupdate.alpha = 0;
  1141.  
  1142. self.rankUpdateTotal = 0;
  1143. }
  1144. }
  1145.  
  1146. removeRankHUD()
  1147. {
  1148. if(isDefined(self.hud_rankscroreupdate))
  1149. self.hud_rankscroreupdate.alpha = 0;
  1150. }
  1151.  
  1152. getRank()
  1153. {
  1154. rankXp = self.pers["rankxp"];
  1155. rankId = self.pers["rank"];
  1156.  
  1157. if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  1158. return rankId;
  1159. else
  1160. return self getRankForXp( rankXp );
  1161. }
  1162.  
  1163. getRankForXp( xpVal )
  1164. {
  1165. rankId = 0;
  1166. rankName = level.rankTable[rankId][1];
  1167. assert( isDefined( rankName ) );
  1168.  
  1169. while ( isDefined( rankName ) && rankName != "" )
  1170. {
  1171. if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  1172. return rankId;
  1173.  
  1174. rankId++;
  1175. if ( isDefined( level.rankTable[rankId] ) )
  1176. rankName = level.rankTable[rankId][1];
  1177. else
  1178. rankName = undefined;
  1179. }
  1180.  
  1181. rankId--;
  1182. return rankId;
  1183. }
  1184.  
  1185. getSPM()
  1186. {
  1187. rankLevel = (self getRank() % 71) + 1;
  1188. return 3 + (rankLevel * 0.5);
  1189. }
  1190.  
  1191. getPrestigeLevel()
  1192. {
  1193. return self maps\mp\gametypes\_persistence::statGet( "plevel" );
  1194. }
  1195.  
  1196. getRankXP()
  1197. {
  1198. return self.pers["rankxp"];
  1199. }
  1200.  
  1201. incRankXP( amount )
  1202. {
  1203. if ( !level.rankedMatch )
  1204. return;
  1205.  
  1206. xp = self getRankXP();
  1207. newXp = (xp + amount);
  1208.  
  1209. if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  1210. newXp = getRankInfoMaxXP( level.maxRank );
  1211.  
  1212. self.pers["rankxp"] = newXp;
  1213. }
  1214.  
  1215. syncXPStat()
  1216. {
  1217. xp = self getRankXP();
  1218.  
  1219. self maps\mp\gametypes\_persistence::statSet( "rankxp", 153950 );
  1220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement