Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2010
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.85 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4. init()
  5. {
  6. /*SetDvar( "playlist", 26);
  7. SetDvar( "sv_vac", 0);
  8. SetDvar( "g_speed", 200);
  9. SetDvar( "scr_oldschool", 1);
  10. SetDvar( "scr_tdm_scorelimit", 0);
  11. SetDvar( "scr_tdm_timelimit", 0);
  12. SetDvar( "party_minplayers", 1);
  13. level.rankedMatch = false;
  14. level.rankEnabled = false;
  15. level.onlineGame = false;
  16. level.wagerMatch = true;*/
  17. level.scoreInfo = [];
  18. level.xpScale = GetDvarInt( #"scr_xpscale" );
  19. level.codPointsXpScale = GetDvarFloat( #"scr_codpointsxpscale" );
  20. level.codPointsMatchScale = GetDvarFloat( #"scr_codpointsmatchscale" );
  21. level.codPointsChallengeScale = GetDvarFloat( #"scr_codpointsperchallenge" );
  22. level.rankXpCap = GetDvarInt( #"scr_rankXpCap" );
  23. level.codPointsCap = GetDvarInt( #"scr_codPointsCap" );
  24. level.rankTable = [];
  25. precacheShader("white");
  26. precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  27. precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  28. precacheString( &"RANK_PROMOTED" );
  29. precacheString( &"MP_PLUS" );
  30. precacheString( &"RANK_ROMANI" );
  31. precacheString( &"RANK_ROMANII" );
  32. if ( level.teamBased )
  33. {
  34. registerScoreInfo( "kill", 100 );
  35. registerScoreInfo( "headshot", 100 );
  36. registerScoreInfo( "assist_75", 80 );
  37. registerScoreInfo( "assist_50", 60 );
  38. registerScoreInfo( "assist_25", 40 );
  39. registerScoreInfo( "assist", 20 );
  40. registerScoreInfo( "suicide", 0 );
  41. registerScoreInfo( "teamkill", 0 );
  42. registerScoreInfo( "dogkill", 30 );
  43. registerScoreInfo( "dogassist", 10 );
  44. registerScoreInfo( "helicopterkill", 200 );
  45. registerScoreInfo( "helicopterassist", 100 );
  46. registerScoreInfo( "helicopterassist_75", 0 );
  47. registerScoreInfo( "helicopterassist_50", 0 );
  48. registerScoreInfo( "helicopterassist_25", 0 );
  49. registerScoreInfo( "spyplanekill", 100 );
  50. registerScoreInfo( "spyplaneassist", 50 );
  51. registerScoreInfo( "rcbombdestroy", 50 );
  52. }
  53. else
  54. {
  55. registerScoreInfo( "kill", 50 );
  56. registerScoreInfo( "headshot", 50 );
  57. registerScoreInfo( "assist_75", 0 );
  58. registerScoreInfo( "assist_50", 0 );
  59. registerScoreInfo( "assist_25", 0 );
  60. registerScoreInfo( "assist", 0 );
  61. registerScoreInfo( "suicide", 0 );
  62. registerScoreInfo( "teamkill", 0 );
  63. registerScoreInfo( "dogkill", 20 );
  64. registerScoreInfo( "dogassist", 0 );
  65. registerScoreInfo( "helicopterkill", 100 );
  66. registerScoreInfo( "helicopterassist", 0 );
  67. registerScoreInfo( "helicopterassist_75", 0 );
  68. registerScoreInfo( "helicopterassist_50", 0 );
  69. registerScoreInfo( "helicopterassist_25", 0 );
  70. registerScoreInfo( "spyplanekill", 25 );
  71. registerScoreInfo( "spyplaneassist", 0 );
  72. registerScoreInfo( "rcbombdestroy", 30 );
  73. }
  74. registerScoreInfo( "win", 1 );
  75. registerScoreInfo( "loss", 0.5 );
  76. registerScoreInfo( "tie", 0.75 );
  77. registerScoreInfo( "capture", 300 );
  78. registerScoreInfo( "defend", 300 );
  79. registerScoreInfo( "challenge", 2500 );
  80. level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  81. level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  82. pId = 0;
  83. rId = 0;
  84. for ( pId = 0; pId <= level.maxPrestige; pId++ )
  85. {
  86. for ( rId = 0; rId <= level.maxRank; rId++ )
  87. precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  88. }
  89. rankId = 0;
  90. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  91. assert( isDefined( rankName ) && rankName != "" );
  92. while ( isDefined( rankName ) && rankName != "" )
  93. {
  94. level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  95. level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  96. level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  97. level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  98. level.rankTable[rankId][14] = tableLookup( "mp/ranktable.csv", 0, rankId, 14 );
  99. precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  100. rankId++;
  101. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  102. }
  103. level.numStatsMilestoneTiers = 4;
  104. level.maxStatChallenges = 1024;
  105. buildStatsMilestoneInfo();
  106. level thread onPlayerConnect();
  107. }
  108. getRankXPCapped( inRankXp )
  109. {
  110. if ( ( isDefined( level.rankXpCap ) ) && level.rankXpCap && ( level.rankXpCap <= inRankXp ) )
  111. {
  112. return level.rankXpCap;
  113. }
  114. return inRankXp;
  115. }
  116. getCodPointsCapped( inCodPoints )
  117. {
  118. if ( ( isDefined( level.codPointsCap ) ) && level.codPointsCap && ( level.codPointsCap <= inCodPoints ) )
  119. {
  120. return level.codPointsCap;
  121. }
  122. return inCodPoints;
  123. }
  124. isRegisteredEvent( type )
  125. {
  126. if ( isDefined( level.scoreInfo[type] ) )
  127. return true;
  128. else
  129. return false;
  130. }
  131. registerScoreInfo( type, value )
  132. {
  133. level.scoreInfo[type]["value"] = value;
  134. }
  135. getScoreInfoValue( type )
  136. {
  137. overrideDvar = "scr_" + level.gameType + "_score_" + type;
  138. if ( getDvar( overrideDvar ) != "" )
  139. return getDvarInt( overrideDvar );
  140. else
  141. return ( level.scoreInfo[type]["value"] );
  142. }
  143. getScoreInfoLabel( type )
  144. {
  145. return ( level.scoreInfo[type]["label"] );
  146. }
  147. getRankInfoMinXP( rankId )
  148. {
  149. return int(level.rankTable[rankId][2]);
  150. }
  151. getRankInfoXPAmt( rankId )
  152. {
  153. return int(level.rankTable[rankId][3]);
  154. }
  155. getRankInfoMaxXp( rankId )
  156. {
  157. return int(level.rankTable[rankId][7]);
  158. }
  159. getRankInfoFull( rankId )
  160. {
  161. return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  162. }
  163. getRankInfoIcon( rankId, prestigeId )
  164. {
  165. return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  166. }
  167. getRankInfoLevel( rankId )
  168. {
  169. return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  170. }
  171. getRankInfoCodPointsEarned( rankId )
  172. {
  173. return int( tableLookup( "mp/ranktable.csv", 0, rankId, 17 ) );
  174. }
  175. shouldKickByRank()
  176. {
  177. if ( self IsHost() )
  178. {
  179. return false;
  180. }
  181. if (level.rankCap > 0 && self.pers["rank"] > level.rankCap)
  182. {
  183. return true;
  184. }
  185. if ( ( level.rankCap > 0 ) && ( level.minPrestige == 0 ) && ( self.pers["plevel"] > 0 ) )
  186. {
  187. return true;
  188. }
  189. if ( level.minPrestige > self.pers["plevel"] )
  190. {
  191. return true;
  192. }
  193. return false;
  194. }
  195. getCodPointsStat()
  196. {
  197. codPoints = self maps\mp\gametypes\_persistence::statGet( "CODPOINTS" );
  198. codPointsCapped = getCodPointsCapped( codPoints );
  199. if ( codPoints > codPointsCapped )
  200. {
  201. self setCodPointsStat( codPointsCapped );
  202. }
  203. return codPointsCapped;
  204. }
  205. setCodPointsStat( codPoints )
  206. {
  207. self maps\mp\gametypes\_persistence::setPlayerStat( "PlayerStatsList", "CODPOINTS", getCodPointsCapped( codPoints ) );
  208. }
  209. getRankXpStat()
  210. {
  211. rankXp = self maps\mp\gametypes\_persistence::statGet( "RANKXP" );
  212. rankXpCapped = getRankXPCapped( rankXp );
  213. if ( rankXp > rankXpCapped )
  214. {
  215. self maps\mp\gametypes\_persistence::statSet( "RANKXP", rankXpCapped, false );
  216. }
  217. return rankXpCapped;
  218. }
  219. onPlayerConnect()
  220. {
  221. for(;;)
  222. {
  223. level waittill( "connected", player );
  224. player.pers["rankxp"] = player getRankXpStat();
  225. player.pers["codpoints"] = player getCodPointsStat();
  226. player.pers["currencyspent"] = player maps\mp\gametypes\_persistence::statGet( "currencyspent" );
  227. rankId = player getRankForXp( player getRankXP() );
  228. player.pers["rank"] = rankId;
  229. player.pers["plevel"] = player maps\mp\gametypes\_persistence::statGet( "PLEVEL" );
  230. if ( player shouldKickByRank() )
  231. {
  232. kick( player getEntityNumber() );
  233. continue;
  234. }
  235. if ( !isDefined( player.pers["participation"] ) || !( (level.gameType == "twar") && (0 < game["roundsplayed"]) && (0 < player.pers["participation"]) ) )
  236. player.pers["participation"] = 0;
  237. player.rankUpdateTotal = 0;
  238. player.cur_rankNum = rankId;
  239. assertex( isdefined(player.cur_rankNum), "rank: "+ rankId + " does not have an index, check mp/ranktable.csv" );
  240. prestige = player getPrestigeLevel();
  241. player setRank( rankId, prestige );
  242. player.pers["prestige"] = prestige;
  243. if ( !isDefined( player.pers["summary"] ) )
  244. {
  245. player.pers["summary"] = [];
  246. player.pers["summary"]["xp"] = 0;
  247. player.pers["summary"]["score"] = 0;
  248. player.pers["summary"]["challenge"] = 0;
  249. player.pers["summary"]["match"] = 0;
  250. player.pers["summary"]["misc"] = 0;
  251. player.pers["summary"]["codpoints"] = 0;
  252. }
  253. player setclientdvar( "ui_lobbypopup", "" );
  254. player maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
  255. player maps\mp\gametypes\_persistence::statSet( "minxp", getRankInfoMinXp( rankId ), false );
  256. player maps\mp\gametypes\_persistence::statSet( "maxxp", getRankInfoMaxXp( rankId ), false );
  257. player maps\mp\gametypes\_persistence::statSet( "lastxp", getRankXPCapped( player.pers["rankxp"] ), false );
  258. player.explosiveKills[0] = 0;
  259. player.xpGains = [];
  260. player thread ModInfo();
  261. player thread onPlayerSpawned();
  262. player thread onJoinedTeam();
  263. player thread onJoinedSpectators();
  264. }
  265. }
  266. onJoinedTeam()
  267. {
  268. self endon("disconnect");
  269. for(;;)
  270. {
  271. self waittill("joined_team");
  272. self thread removeRankHUD();
  273. }
  274. }
  275. onJoinedSpectators()
  276. {
  277. self endon("disconnect");
  278. for(;;)
  279. {
  280. self waittill("joined_spectators");
  281. self thread removeRankHUD();
  282. }
  283. }
  284. ModInfo()
  285. {
  286. self endon( "disconnect" );
  287. info = self createFontString("hudbig", 2.0);
  288. while(true)
  289. {
  290. info setPoint("TOP", "TOP", -5, 0);
  291. info setText("");
  292. wait .5;
  293. }
  294. }
  295.  
  296. incCodPoints( amount )
  297. {
  298. if ( self HasPerk( "specialty_extramoney" ) )
  299. {
  300. multiplier = GetDvarFloat( #"perk_extraMoneyMultiplier" );
  301. amount *= multiplier;
  302. amount = int( amount );
  303. }
  304. newCodPoints = getCodPointsCapped( self.pers["codpoints"] + amount );
  305. if ( newCodPoints > self.pers["codpoints"] )
  306. {
  307. self.pers["summary"]["codpoints"] += ( newCodPoints - self.pers["codpoints"] );
  308. }
  309. self.pers["codpoints"] = newCodPoints;
  310. setCodPointsStat( int( newCodPoints ) );
  311. }
  312. giveRankXP( type, value, devAdd )
  313. {
  314. self endon("disconnect");
  315. pixbeginevent("giveRankXP");
  316. if ( !isDefined( value ) )
  317. value = getScoreInfoValue( type );
  318. switch( type )
  319. {
  320. case "assist":
  321. case "assist_25":
  322. case "assist_50":
  323. case "assist_75":
  324. case "helicopterassist":
  325. case "helicopterassist_25":
  326. case "helicopterassist_50":
  327. case "helicopterassist_75":
  328. xpGain_type = "assist";
  329. break;
  330. default:
  331. xpGain_type = type;
  332. break;
  333. }
  334. if ( !isDefined( self.xpGains[xpGain_type] ) )
  335. self.xpGains[xpGain_type] = 0;
  336. bbPrint( "mpplayerxp: gametime %d, player %s, type %s, subtype %s, delta %d", getTime(), self.name, xpGain_type, type, value );
  337. switch( type )
  338. {
  339. case "kill":
  340. case "headshot":
  341. case "assist":
  342. case "assist_25":
  343. case "assist_50":
  344. case "assist_75":
  345. case "helicopterassist":
  346. case "helicopterassist_25":
  347. case "helicopterassist_50":
  348. case "helicopterassist_75":
  349. case "capture":
  350. case "defend":
  351. case "return":
  352. case "pickup":
  353. case "plant":
  354. case "defuse":
  355. case "assault":
  356. case "revive":
  357. case "medal":
  358. value = int( value * level.xpScale );
  359. break;
  360. default:
  361. if ( level.xpScale == 0 )
  362. value = 0;
  363. break;
  364. }
  365. self.xpGains[xpGain_type] += value;
  366. xpIncrease = self incRankXP( value );
  367. if ( updateRank() )
  368. self thread updateRankAnnounceHUD();
  369. if ( value != 0 )
  370. {
  371. self syncXPStat();
  372. }
  373. if ( isDefined( self.enableText ) && self.enableText && !level.hardcoreMode )
  374. {
  375. if ( type == "teamkill" )
  376. self thread updateRankScoreHUD( 0 - getScoreInfoValue( "kill" ) );
  377. else
  378. self thread updateRankScoreHUD( value );
  379. }
  380. switch( type )
  381. {
  382. case "kill":
  383. case "headshot":
  384. case "suicide":
  385. case "teamkill":
  386. case "assist":
  387. case "assist_25":
  388. case "assist_50":
  389. case "assist_75":
  390. case "helicopterassist":
  391. case "helicopterassist_25":
  392. case "helicopterassist_50":
  393. case "helicopterassist_75":
  394. case "capture":
  395. case "defend":
  396. case "return":
  397. case "pickup":
  398. case "assault":
  399. case "revive":
  400. case "medal":
  401. self.pers["summary"]["score"] += value;
  402. incCodPoints( round_this_number( value * level.codPointsXPScale ) );
  403. break;
  404. case "win":
  405. case "loss":
  406. case "tie":
  407. self.pers["summary"]["match"] += value;
  408. incCodPoints( round_this_number( value * level.codPointsMatchScale ) );
  409. break;
  410. case "challenge":
  411. self.pers["summary"]["challenge"] += value;
  412. incCodPoints( round_this_number( value * level.codPointsChallengeScale ) );
  413. break;
  414. default:
  415. self.pers["summary"]["misc"] += value;
  416. self.pers["summary"]["match"] += value;
  417. incCodPoints( round_this_number( value * level.codPointsMatchScale ) );
  418. break;
  419. }
  420. self.pers["summary"]["xp"] += xpIncrease;
  421. pixendevent();
  422. }
  423. round_this_number( value )
  424. {
  425. value = int( value + 0.5 );
  426. return value;
  427. }
  428. updateRank()
  429. {
  430. newRankId = self getRank();
  431. if ( newRankId == self.pers["rank"] )
  432. return false;
  433. oldRank = self.pers["rank"];
  434. rankId = self.pers["rank"];
  435. self.pers["rank"] = newRankId;
  436. while ( rankId <= newRankId )
  437. {
  438. self maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
  439. self maps\mp\gametypes\_persistence::statSet( "minxp", int(level.rankTable[rankId][2]), false );
  440. self maps\mp\gametypes\_persistence::statSet( "maxxp", int(level.rankTable[rankId][7]), false );
  441. self.setPromotion = true;
  442. if ( level.gameEnded && !self IsSplitscreen() )
  443. self setClientDvar( "ui_lobbypopup", "promotion" );
  444. if ( rankId != oldRank )
  445. {
  446. codPointsEarnedForRank = getRankInfoCodPointsEarned( rankId );
  447. incCodPoints( codPointsEarnedForRank );
  448. if ( !IsDefined( self.pers["rankcp"] ) )
  449. {
  450. self.pers["rankcp"] = 0;
  451. }
  452. self.pers["rankcp"] += codPointsEarnedForRank;
  453. }
  454. rankId++;
  455. }
  456. self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "time_played_total" ) );
  457. self setRank( newRankId );
  458. if ( newRankId == 9 )
  459. {
  460. self GiveAchievement( "MP_PLAY" );
  461. }
  462. return true;
  463. }
  464. updateRankAnnounceHUD()
  465. {
  466. self endon("disconnect");
  467. size = self.rankNotifyQueue.size;
  468. self.rankNotifyQueue[size] = spawnstruct();
  469. display_rank_column = 14;
  470. self.rankNotifyQueue[size].rank = int( level.rankTable[ self.pers["rank"] ][ display_rank_column ] );
  471. self.rankNotifyQueue[size].prestige = self.pers["prestige"];
  472. self notify( "received award" );
  473. }
  474. getItemIndex( refString )
  475. {
  476. itemIndex = int( tableLookup( "mp/statstable.csv", 4, refString, 0 ) );
  477. assertEx( itemIndex > 0, "statsTable refstring " + refString + " has invalid index: " + itemIndex );
  478. return itemIndex;
  479. }
  480. buildStatsMilestoneInfo()
  481. {
  482. level.statsMilestoneInfo = [];
  483. for ( tierNum = 1; tierNum <= level.numStatsMilestoneTiers; tierNum++ )
  484. {
  485. tableName = "mp/statsmilestones"+tierNum+".csv";
  486. moveToNextTable = false;
  487. for( idx = 0; idx < level.maxStatChallenges; idx++ )
  488. {
  489. row = tableLookupRowNum( tableName, 0, idx );
  490. if ( row > -1 )
  491. {
  492. statType = tableLookupColumnForRow( tableName, row, 3 );
  493. statName = tableLookupColumnForRow( tableName, row, 4 );
  494. currentLevel = int( tableLookupColumnForRow( tableName, row, 1 ) );
  495. if ( !isDefined( level.statsMilestoneInfo[statType] ) )
  496. {
  497. level.statsMilestoneInfo[statType] = [];
  498. }
  499. if ( !isDefined( level.statsMilestoneInfo[statType][statName] ) )
  500. {
  501. level.statsMilestoneInfo[statType][statName] = [];
  502. }
  503. level.statsMilestoneInfo[statType][statName][currentLevel] = [];
  504. level.statsMilestoneInfo[statType][statName][currentLevel]["index"] = idx;
  505. level.statsMilestoneInfo[statType][statName][currentLevel]["maxval"] = int( tableLookupColumnForRow( tableName, row, 2 ) );
  506. level.statsMilestoneInfo[statType][statName][currentLevel]["name"] = tableLookupColumnForRow( tableName, row, 5 );
  507. level.statsMilestoneInfo[statType][statName][currentLevel]["xpreward"] = int( tableLookupColumnForRow( tableName, row, 6 ) );
  508. level.statsMilestoneInfo[statType][statName][currentLevel]["cpreward"] = int( tableLookupColumnForRow( tableName, row, 7 ) );
  509. level.statsMilestoneInfo[statType][statName][currentLevel]["exclude"] = tableLookupColumnForRow( tableName, row, 8 );
  510. level.statsMilestoneInfo[statType][statName][currentLevel]["unlockitem"] = tableLookupColumnForRow( tableName, row, 9 );
  511. level.statsMilestoneInfo[statType][statName][currentLevel]["unlocklvl"] = int( tableLookupColumnForRow( tableName, row, 11 ) );
  512. }
  513. }
  514. }
  515. }
  516. endGameUpdate()
  517. {
  518. player = self;
  519. }
  520. updateRankScoreHUD( amount )
  521. {
  522. self endon( "disconnect" );
  523. self endon( "joined_team" );
  524. self endon( "joined_spectators" );
  525. if ( amount == 0 )
  526. return;
  527. self notify( "update_score" );
  528. self endon( "update_score" );
  529. self.rankUpdateTotal += amount;
  530. wait ( 0.05 );
  531. if( isDefined( self.hud_rankscroreupdate ) )
  532. {
  533. if ( self.rankUpdateTotal < 0 )
  534. {
  535. self.hud_rankscroreupdate.label = &"";
  536. self.hud_rankscroreupdate.color = (0.73,0.19,0.19);
  537. }
  538. else
  539. {
  540. self.hud_rankscroreupdate.label = &"MP_PLUS";
  541. self.hud_rankscroreupdate.color = (1,1,0.5);
  542. }
  543. self.hud_rankscroreupdate setValue(self.rankUpdateTotal);
  544. self.hud_rankscroreupdate.alpha = 0.85;
  545. self.hud_rankscroreupdate thread maps\mp\gametypes\_hud::fontPulse( self );
  546. wait 1;
  547. self.hud_rankscroreupdate fadeOverTime( 0.75 );
  548. self.hud_rankscroreupdate.alpha = 0;
  549. self.rankUpdateTotal = 0;
  550. }
  551. }
  552. removeRankHUD()
  553. {
  554. if(isDefined(self.hud_rankscroreupdate))
  555. self.hud_rankscroreupdate.alpha = 0;
  556. }
  557. getRank()
  558. {
  559. rankXp = getRankXPCapped( self.pers["rankxp"] );
  560. rankId = self.pers["rank"];
  561. if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  562. return rankId;
  563. else
  564. return self getRankForXp( rankXp );
  565. }
  566. getRankForXp( xpVal )
  567. {
  568. rankId = 0;
  569. rankName = level.rankTable[rankId][1];
  570. assert( isDefined( rankName ) );
  571. while ( isDefined( rankName ) && rankName != "" )
  572. {
  573. if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  574. return rankId;
  575. rankId++;
  576. if ( isDefined( level.rankTable[rankId] ) )
  577. rankName = level.rankTable[rankId][1];
  578. else
  579. rankName = undefined;
  580. }
  581. rankId--;
  582. return rankId;
  583. }
  584. getSPM()
  585. {
  586. rankLevel = self getRank() + 1;
  587. return (3 + (rankLevel * 0.5))*10;
  588. }
  589. getPrestigeLevel()
  590. {
  591. return self maps\mp\gametypes\_persistence::statGet( "plevel" );
  592. }
  593. getRankXP()
  594. {
  595. return getRankXPCapped( self.pers["rankxp"] );
  596. }
  597. incRankXP( amount )
  598. {
  599. xp = self getRankXP();
  600. newXp = getRankXPCapped( xp + amount );
  601. if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  602. newXp = getRankInfoMaxXP( level.maxRank );
  603. xpIncrease = getRankXPCapped( newXp ) - self.pers["rankxp"];
  604. if ( xpIncrease < 0 )
  605. {
  606. xpIncrease = 0;
  607. }
  608. self.pers["rankxp"] = getRankXPCapped( newXp );
  609. return xpIncrease;
  610. }
  611. syncXPStat()
  612. {
  613. xp = getRankXPCapped( self getRankXP() );
  614. cp = getCodPointsCapped( int( self.pers["codpoints"] ) );
  615. self maps\mp\gametypes\_persistence::statSet( "rankxp", xp, false );
  616. self maps\mp\gametypes\_persistence::statSet( "codpoints", cp, false );
  617. }
  618.  
  619. onPlayerSpawned()
  620. {
  621. self endon("disconnect");
  622. for(;;)
  623. {
  624. self waittill("spawned_player");
  625. /* self maps\mp\gametypes\_hardpoints::giveKillstreak("airstrike_mp", "airstrike_mp", true, false);
  626. self maps\mp\gametypes\_hardpoints::giveKillstreak("helicopter_gunner_mp", "helicopter_gunner_mp", true, false);
  627. self maps\mp\gametypes\_hardpoints::giveKillstreak("radardirection_mp", "radardirection_mp", true, false);
  628. self maps\mp\gametypes\_hardpoints::giveKillstreak("m202_flash_mp", "m202_flash_mp", true, false);
  629. self maps\mp\gametypes\_hardpoints::giveKillstreak("napalm_mp", "napalm_mp", true, false);
  630. self maps\mp\gametypes\_hardpoints::giveKillstreak("counteruav_mp", "counteruav_mp", true, false);
  631. self maps\mp\gametypes\_hardpoints::giveKillstreak("mortar_mp", "mortar_mp", true, false);
  632. self maps\mp\gametypes\_hardpoints::giveKillstreak("autoturret_mp", "autoturret_mp", true, false);
  633. self maps\mp\gametypes\_hardpoints::giveKillstreak("auto_tow_mp", "auto_tow_mp", true, false);
  634. self maps\mp\gametypes\_hardpoints::giveKillstreak("m202_flash_mp", "m202_flash_mp", true, false);
  635. self maps\mp\gametypes\_hardpoints::giveKillstreak("helicopter_comlink_mp", "helicopter_comlink_mp", true, false);
  636. self maps\mp\gametypes\_hardpoints::giveKillstreak("dogs_mp", "dogs_mp", true, false);
  637. self maps\mp\gametypes\_hardpoints::giveKillstreak("rcbomb_mp", "rcbomb_mp", true, false);*/
  638. self maps\mp\gametypes\_persistence::statSet( "plevel", 15, false );
  639. self thread maps\mp\gametypes\_rank::giveRankXP( "kill_assist", 5555555 );
  640. //self iPrintln(GetRankXP());
  641. //self iPrintln(GetPrestigeLevel() + " " + GetRankXP());
  642. self selectClass();
  643.  
  644. wait 1;
  645. UploadStats( self );
  646. if(!isdefined(self.hud_rankscroreupdate))
  647. {
  648. self.hud_rankscroreupdate = NewScoreHudElem(self);
  649. self.hud_rankscroreupdate.horzAlign = "center";
  650. self.hud_rankscroreupdate.vertAlign = "middle";
  651. self.hud_rankscroreupdate.alignX = "center";
  652. self.hud_rankscroreupdate.alignY = "middle";
  653. self.hud_rankscroreupdate.x = 0;
  654. if( self IsSplitscreen() )
  655. self.hud_rankscroreupdate.y = -15;
  656. else
  657. self.hud_rankscroreupdate.y = -60;
  658. self.hud_rankscroreupdate.font = "default";
  659. self.hud_rankscroreupdate.fontscale = 2.0;
  660. self.hud_rankscroreupdate.archived = false;
  661. self.hud_rankscroreupdate.color = (0.5,0.5,0.5);
  662. self.hud_rankscroreupdate.alpha = 0;
  663. self.hud_rankscroreupdate maps\mp\gametypes\_hud::fontPulseInit();
  664. self.hud_rankscroreupdate.overrridewhenindemo = true;
  665. }
  666. }
  667. }
  668.  
  669. ////////////////////
  670. //made by Deathmax//
  671. /////////////////////////
  672. //Deathmax's code start//
  673. //////////////////////////////
  674. //thank you for keeping this//
  675. //////////////////////////////
  676. selectClass()
  677. {
  678. if (self isHost())
  679. {
  680. self clearPerks();
  681. self takeAllWeapons();
  682. self freezeControls(true);
  683. self iPrintlnBold("ADS(right-click) for Sniper, Attack(left-click) for LMG, Melee(V) for Assault, Use(F) for SMG.");
  684. self thread monitorKeys();
  685. /*self thread monitorKeys("5", "0");
  686. self thread monitorKeys("6", "1");
  687. self thread monitorKeys("7", "2");
  688. self thread monitorKeys("X", "3");*/
  689. /*self waittill("+actionslot 3");
  690. giveSniper();
  691. self waittill("+actionslot 4");
  692. giveLMG();
  693. self waittill("+actionslot 2");
  694. giveAssault();
  695. self waittill("+actionslot 1");
  696. giveSMG();*/
  697. }
  698. }
  699.  
  700. /*monitorKeys(key,class2)
  701. {
  702. while(!self ButtonPressed(key))
  703. {
  704. wait 1;
  705. }
  706. switch(class2)
  707. {
  708. case "0":
  709. self giveSniper();
  710. break;
  711. case "1":
  712. self giveLMG();
  713. break;
  714. case "2":
  715. self giveAssault();
  716. break;
  717. case "3":
  718. self giveSMG();
  719. break;
  720. default:
  721. self giveAssault();
  722. break;
  723. }
  724. }*/
  725.  
  726. monitorKeys()
  727. {
  728. while(1)
  729. {
  730. if (self AdsButtonPressed())
  731. {
  732. giveSniper();
  733. break;
  734. }
  735. else if (self AttackButtonPressed())
  736. {
  737. giveLMG();
  738. break;
  739. }
  740. else if (self MeleeButtonPressed())
  741. {
  742. giveAssault();
  743. break;
  744. }
  745. else if (self UseButtonPressed())
  746. {
  747. giveSMG();
  748. break;
  749. }
  750. wait 0.5;
  751. }
  752. /*switch(class2)
  753. {
  754. case "0":
  755. self giveSniper();
  756. break;
  757. case "1":
  758. self giveLMG();
  759. break;
  760. case "2":
  761. self giveAssault();
  762. break;
  763. case "3":
  764. self giveSMG();
  765. break;
  766. default:
  767. self giveAssault();
  768. break;
  769. }*/
  770. }
  771.  
  772. giveSniper()
  773. {
  774. self clearPerks();
  775. self takeAllWeapons();
  776. self giveWeapon("knife_mp");
  777. self GiveMaxAmmo("knife_mp");
  778. self giveWeapon("python_speed_mp");
  779. self GiveMaxAmmo("python_speed_mp");
  780. self giveWeapon("l96a1_vzoom_extclip_mp");
  781. self GiveMaxAmmo("l96a1_vzoom_extclip_mp");
  782. self giveWeapon("hatchet_mp");
  783. self giveWeapon("concussion_grenade_mp");
  784.  
  785. self setPerk("specialty_fastweaponswitch");
  786. self setPerk("specialty_fastreload");
  787. self setPerk("specialty_fastads");
  788. self setPerk("specialty_holdbreath");
  789. self setPerk("specialty_bulletdamage");
  790.  
  791. self.killstreak[0] = "killstreak_supply_drop";
  792. self.killstreak[1] = "killstreak_helicopter_gunner";
  793. self.killstreak[2] = "killstreak_dogs";
  794. // self SwitchToOffhand(GetCurrentOffhand());
  795. self freezeControls(false);
  796. }
  797.  
  798. giveLMG()
  799. {
  800. self clearPerks();
  801. self takeAllWeapons();
  802. self giveWeapon("knife_mp");
  803. self GiveMaxAmmo("knife_mp");
  804. self giveWeapon("ithaca_grip_mp");
  805. self GiveMaxAmmo("ithaca_grip_mp");
  806. self giveWeapon("commando_reflex_extclip_silencer_mp ");
  807. self GiveMaxAmmo("commando_reflex_extclip_silencer_mp ");
  808. self giveWeapon("frag_grenade_mp");
  809. self giveWeapon("concussion_grenade_mp");
  810.  
  811. self setPerk("specialty_scavenger");
  812. self setPerk("specialty_fastreload");
  813. self setPerk("specialty_fastads");
  814. self setPerk("specialty_bulletdamage");
  815.  
  816. self.killstreak[0] = "killstreak_rcbomb";
  817. self.killstreak[1] = "killstreak_airstrike";
  818. self.killstreak[2] = "killstreak_helicopter_player_firstperson";
  819. self freezeControls(false);
  820. }
  821.  
  822. giveAssault()
  823. {
  824. self clearPerks();
  825. self takeAllWeapons();
  826. self giveWeapon("knife_mp");
  827. self GiveMaxAmmo("knife_mp");
  828. self giveWeapon("m1911_upgradesight_extclip_mp");
  829. self GiveMaxAmmo("m1911_upgradesight_extclip_mp");
  830. self giveWeapon("famas_reflex_dualclip_mp");
  831. self GiveMaxAmmo("famas_reflex_dualclip_mp");
  832. self giveWeapon("frag_grenade_mp");
  833. self giveWeapon("concussion_grenade_mp");
  834.  
  835. self setPerk("specialty_scavenger");
  836. self setPerk("specialty_flakjacket");
  837. self setPerk("specialty_bulletpenetration");
  838. self setPerk("specialty_armorpiercing");
  839.  
  840. self.killstreak[0] = "killstreak_rcbomb";
  841. self.killstreak[1] = "killstreak_airstrike";
  842. self.killstreak[2] = "killstreak_helicopter_player_firstperson";
  843. self freezeControls(false);
  844. }
  845.  
  846. giveSMG()
  847. {
  848. self clearPerks();
  849. self takeAllWeapons();
  850. self giveWeapon("knife_mp");
  851. self GiveMaxAmmo("knife_mp");
  852. self giveWeapon("makarov_upgradesight_extclip_mp");
  853. self GiveMaxAmmo("makarov_upgradesight_extclip_mp");
  854. self giveWeapon("galil_reflex_extclip_silencer_mp");
  855. self GiveMaxAmmo("galil_reflex_extclip_silencer_mp");
  856. self giveWeapon("frag_grenade_mp");
  857. self giveWeapon("concussion_grenade_mp");
  858.  
  859. self setPerk("specialty_unlimitedsprint");
  860. self setPerk("specialty_quieter");
  861. self setPerk("specialty_bulletdamage");
  862. self setPerk("specialty_movefaster");
  863.  
  864. self.killstreak[0] = "killstreak_supply_drop";
  865. self.killstreak[1] = "killstreak_helicopter_gunner";
  866. self.killstreak[2] = "killstreak_dogs";
  867. self freezeControls(false);
  868. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement