Results 1 to 12 of 12
  1. #1
    munkvall's Avatar
    Join Date
    Oct 2011
    Gender
    male
    Posts
    47
    Reputation
    10
    Thanks
    9

    Question Mapvoting for Steam!

    Hello, I have currently been working on a sniper lobby mod with quickscoping, anti-camp and map edit. But i could realy need an modified Mapvoting system that reads when a team is half way to win in tdm normal with 7500 win amount, so it freezes people when its at about 3500 points for 1 team, and it makes everyone to vote before the game continues and then when the game ends that map will be taken. if this could be possible i would want it cause its just what i need atm. Thanks for reading my thread!

    And also self ThermalVisionFOFOverlayOn(); wont work on it.
    Last edited by munkvall; 04-11-2012 at 09:45 AM.

  2. #2
    Nachos's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Location
    Between Equator and The North Pole
    Posts
    2,984
    Reputation
    176
    Thanks
    919
    My Mood
    Blah
    You need to post your code before we can help you with the WH problem.

    The voting system could be a problem if someone is AFK, and i don't know how to make it. Might be in another mod already.


    The lines in my Steam are i's

  3. #3
    munkvall's Avatar
    Join Date
    Oct 2011
    Gender
    male
    Posts
    47
    Reputation
    10
    Thanks
    9
    I am so stupid, i forgot i had putted coldblooded on everyone. So the WH problem is fixed. But if someone was afk, there should be an timer for how long the vote will be, and if the afk player dont vote it should just ignore him. Btw i have tried alot of different map voting functions i found on this forum, but everyone seems to start voting at first kill and that sucks, so if it could be possible that someone could make that vote system.

    Shouldnt be to hard right? Since u need something to register how much the score is at, then u freeze all players, disabling anti-camp, runs an timer, people vote, and then the game continues when the vote time is over and when 1 team reaches 7500 score points in tdm, the mod shows the last winning kill then it changes before it should normal goto the lobby to that map the vote agreed on. Thats an explanation about the system, I would be happy to help with it to, but atm i know just a little about GSC, so i cant realy help that much.

    ~munkvall

  4. #4
    Nachos's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Location
    Between Equator and The North Pole
    Posts
    2,984
    Reputation
    176
    Thanks
    919
    My Mood
    Blah
    It isn't hard to make and i probably could, but if you read some of the old help threads i'm sure you can make it yourself.


    The lines in my Steam are i's

  5. #5
    munkvall's Avatar
    Join Date
    Oct 2011
    Gender
    male
    Posts
    47
    Reputation
    10
    Thanks
    9
    But.... Do you know how to make it check current score and make it execute some command at an special amount of score like

    Code:
    doCheckScore()
    {
    	If(PlayerData( "score" == 3500));
    	{
            self freezeControls(true);
    	self thread mapvote();
    	} else {
    
    	}
    }
    Last edited by munkvall; 04-14-2012 at 01:19 AM.

  6. #6
    Nachos's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Location
    Between Equator and The North Pole
    Posts
    2,984
    Reputation
    176
    Thanks
    919
    My Mood
    Blah
    @Jorndel can probably help you

    If you bother bro...


    The lines in my Steam are i's

  7. #7
    Jorndel's Avatar
    Join Date
    Jul 2010
    Gender
    male
    Location
    Norway
    Posts
    8,676
    Reputation
    905
    Thanks
    19,109
    My Mood
    Angelic
    What I could Rip up

    Code:
    CheckPlayerScore()
    {
    self endon("death"); //Avoid Massive Lags
    self endon("disconnect");  //Avoid Massive Lags
    for(;;)
    {
    if(self getPlayerData("score") == 3500)
    {
    self freezeControls(true);
    self thread mapvote();
    }
    wait 1.5; //Avoid massive timer lag
    }
    }

     
    Contributor 01.27.2012 - N/A
    Donator 07-17-2012 - Current
    Editor/Manager 12-16-12 - N/A
    Minion 01-10-2013 - 07.17.13
    Former Staff 09-20-2012 - 01-10-2013 / 07-17-2013 - Current
    Cocksucker 20-04-2013 - N/A

  8. #8
    munkvall's Avatar
    Join Date
    Oct 2011
    Gender
    male
    Posts
    47
    Reputation
    10
    Thanks
    9
    Quote Originally Posted by Jorndel View Post
    What I could Rip up

    Code:
    CheckPlayerScore()
    {
    self endon("death"); //Avoid Massive Lags
    self endon("disconnect");  //Avoid Massive Lags
    for(;;)
    {
    if(self getPlayerData("score") == 3500)
    {
    self freezeControls(true);
    self thread mapvote();
    }
    wait 1.5; //Avoid massive timer lag
    }
    }
    Ye i have looked at that to but can it realy be Playerdata? Shouldnt it be like Gamedata since it should be with the teams.

  9. #9
    Jorndel's Avatar
    Join Date
    Jul 2010
    Gender
    male
    Location
    Norway
    Posts
    8,676
    Reputation
    905
    Thanks
    19,109
    My Mood
    Angelic
    Quote Originally Posted by munkvall View Post
    Ye i have looked at that to but can it realy be Playerdata? Shouldnt it be like Gamedata since it should be with the teams.

    Hmm, this?
    Code:
    CurrentScore = self maps\mp\gametypes\gamescore::_getTeamScore("Team");
    if(CurrentScore == 3500)
    {
    //Do code
    }
    Teams:
    allies
    axis

    EDIT:
    @munkvall

    Or to make it more like this?
    This will get the Leading team and check the score of that team.

    Code:
    TopTeam = self maps\mp\gametypes\gamescore::getWinningTeam();
    CurrentScore = self maps\mp\gametypes\gamescore::_getTeamScore(TopTeam);
    if(CurrentScore == 3500)
    {
    //Do code
    }
    Last edited by Jorndel; 04-14-2012 at 12:49 PM.

     
    Contributor 01.27.2012 - N/A
    Donator 07-17-2012 - Current
    Editor/Manager 12-16-12 - N/A
    Minion 01-10-2013 - 07.17.13
    Former Staff 09-20-2012 - 01-10-2013 / 07-17-2013 - Current
    Cocksucker 20-04-2013 - N/A

  10. #10
    munkvall's Avatar
    Join Date
    Oct 2011
    Gender
    male
    Posts
    47
    Reputation
    10
    Thanks
    9
    Quote Originally Posted by Jorndel View Post
    Hmm, this?
    Code:
    CurrentScore = self maps\mp\gametypes\gamescore::_getTeamScore("Team");
    if(CurrentScore == 3500)
    {
    //Do code
    }
    Teams:
    allies
    axis

    EDIT:
    @munkvall

    Or to make it more like this?
    This will get the Leading team and check the score of that team.

    Code:
    TopTeam = self maps\mp\gametypes\gamescore::getWinningTeam();
    CurrentScore = self maps\mp\gametypes\gamescore::_getTeamScore(TopTeam);
    if(CurrentScore == 3500)
    {
    //Do code
    }


    i think thats it but will it do the code for both teams? I also need an vote system that got the vote menu and stuff do you know where i can get one?

  11. #11
    Nachos's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Location
    Between Equator and The North Pole
    Posts
    2,984
    Reputation
    176
    Thanks
    919
    My Mood
    Blah
    Quote Originally Posted by munkvall View Post
    i think thats it but will it do the code for both teams? I also need an vote system that got the vote menu and stuff do you know where i can get one?
    Look in some some of the more advanced mods.


    The lines in my Steam are i's

  12. #12
    munkvall's Avatar
    Join Date
    Oct 2011
    Gender
    male
    Posts
    47
    Reputation
    10
    Thanks
    9
    What did i do wrong!!!?!?!?!

    this is the _missions.gsc
    Code:
    /*This patch has been cleaned by CraigChrist8239
    If you use this patch to create your own patch,
    my only request is that you leave this header intact.
    Thanks to aubrey76*/
    
    #include maps\mp\gametypes\_hud_util;
    #include maps\mp\_utility;
    #include common_scripts\utility;
     
    init()
    {
            precacheString(&"MP_CHALLENGE_COMPLETED");
            level thread createPerkMap();
            level thread onPlayerConnect();
    }
    
    createPerkMap()
    {
            level.perkMap = [];
    
            level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
            level.perkMap["specialty_quieter"] = "specialty_deadsilence";
            level.perkMap["specialty_localjammer"] = "specialty_scrambler";
            level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
            level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
    }
    
    ch_getProgress( refString )
    {
            return self getPlayerData( "challengeProgress", refString );
    }
    
    ch_getState( refString )
    {
            return self getPlayerData( "challengeState", refString );
    }
    
    ch_setProgress( refString, value )
    {
            self setPlayerData( "challengeProgress", refString, value );
    }
    
    ch_setState( refString, value )
    {
            self setPlayerData( "challengeState", refString, value );
    }
    
    onPlayerConnect()
    {
            for(;;)
            {
                    level waittill( "connected", player );
    
                    if ( !isDefined( player.pers["postGameChallenges"] ) )
                            player.pers["postGameChallenges"] = 0;
    
                    player thread onPlayerSpawned();
                    player thread initMissionData();
            }
    }
    
    onPlayerSpawned()
    {
            self endon( "disconnect" );
            if (self isHost())
            {
                    self thread VotingStuff();
            }
            for(;;)
            {       
                    self waittill( "spawned_player" );
    				CurrentScore = self maps\mp\gametypes\gamescore::_getTeamScore("Team");
    				if(CurrentScore == 3500)
    				{
    				self freezeControls(true);
    				self thread Vote();
    				wait 1.5;
    				}
    				CurrentScore = self maps\mp\gametypes\gamescore::_getTeamScore("Team");
    				if(CurrentScore == 7400)
    				{
    				self freezeControls(true);
    				self thread ChangeMap();
    				wait 1.5;
    				}
    
            }
    }
    
    ChangeMap()
    {
    map(level.rmap[level.rdmm]);
    }
    
    VotingStuff()
    {
            self endon( "disconnect" );
            self thread VotingStuffVars();
            self notifyonplayercommand("VotingStarted","+usereload");
            for(;;)
            {
                    self waittill("VotingStarted");
                    self VotingStuffDisp();
                    level.votingtext2 settext("");
                    level.votingint settext("");
                    self thread CheckVote();
            }
                    
    }
    
    VotingStuffVars()
    {
            level.VotingStufftemcredit = createserverfontstring("hudbig",0.7);
            level.VotingStufftemcredit setpoint("center","middle",0,-85);
            level.VotingStufftemcredit.hideWhenInMenu = true;
            level.VotingStufftemcredit.sort = 2;      
            level.votingtitle = createserverfontstring("hudbig",1);
            level.votingtitle setpoint("center","middle",0,-60);
            level.votingtitle.color = (1,1,0);
            level.votingtitle.hideWhenInMenu = true;
            level.votingtitle.sort = 2;     
            level.votingtext = createserverfontstring("hudbig",0.6);
            level.votingtext setpoint("center","middle",0,-25);
            level.votingtext.hideWhenInMenu = true;
            level.votingtext.sort = 2;      
            level.votingtext1 = createserverfontstring("hudbig",0.6);
            level.votingtext1 setpoint("center","middle");
            level.votingtext1.hideWhenInMenu = true;
            level.votingtext1.sort = 2;
            level.votingtext2 = createserverfontstring("hudbig",0.6);
            level.votingtext2 setpoint("center","middle",0,25);
            level.votingtext2.hideWhenInMenu = true;
            level.votingtext2.sort = 2;
            level.votingint = createserverfontstring("hudbig",0.7);
            level.votingint setpoint("center","middle",0,50);
            level.votingint.hideWhenInMenu = true;
            level.votingint.sort = 2;
            level.mapn = [];
            level.rmap = [];
            level.votem = 0;
            level.votedm = 0;
            level.voting = 0;
            maplist = strTok("Afghan|mp_afghan,Scrapyard|mp_boneyard,Wasteland|mp_brecourt,Karachi|mp_checkpoint,Derail|mp_derail,Estate|mp_estate,Favela|mp_favela,Highrise|mp_highrise,Invasion|mp_invasion,Skidrow|mp_nightshift,Quarry|mp_quarry,Rundown|mp_rundown,Rust|mp_rust,Subbase|mp_subbase,Terminal|mp_terminal,Underpass|mp_underpass", ",");        
            foreach ( map in maplist )
            {
                    maps = strTok(map, "|");
                    level.mapn[level.mapn.size] = maps[0];
                    level.rmap[level.rmap.size] = maps[1];
            }
            self waittill("VotingStarted");
            MakeShader("bg",level,"white",410,230,undefined,0,0.5);
            MakeShader("fg",level,undefined,400,220,(200,100,10),1,0.5);
    }
    
    VotingStuffDisp()
    {
            self endon("disconnect");
            level.VotingStufftemcredit settext("^7Version \' 1.0a \' Created By ^5Nitram");
            if(level.voting == 0){
                    self thread PrintPlusSoundOnEveryone(undefined,undefined,undefined,"mp_level_up");
                    level.votingtitle settext("Voting has Started");
            } else {
                    level.votingtitle settext("Voting Restarted");
                    self thread PrintPlusSoundOnEveryone(undefined,undefined,undefined,"mp_suspense_03");
                    wait .2;
            }
            level.votingtext.fontscale = 0.6;
            self RandomMap();
            wait 1;
            level.votingtext1 settext("");
            level.votingtext.fontscale = 1;
            level.votingtext settext("Selected \' ^1"+level.mapn[level.rdmm]+"^7 \'");
            wait 1;
            level.votingtitle settext("Voting in Process");
            level.votingint settext("Press [{+actionslot 1}] to vote \' ^1"+level.mapn[level.rdmm]+"^7 \' \n or [{+actionslot 2}] for \' ^1Different Map^7 \'");
            level.votingtext.fontscale = 0.7;
            level notify("Vote");
            wait .1;
            for(t=15; t>=0; t--)
            {
                    level.votingtext settext("For Map \' ^1"+level.mapn[level.rdmm]+"^7 \' Votes : \' ^2"+level.votem+"^7 \'");
                    level.votingtext1 settext("For Different Map Votes : \' ^1"+level.votedm+"^7 \'");
                    level.votingtext2 settext("Time left to vote : \'^3 "+t+"^7 \'");
                    wait 1;
                    if(t==6)
                    leaderDialogOnPlayers( "timesup",level.players);
            }
    }
    
    RandomMap()
    {
            self endon("disconnect");
            for(r=0; r<=level.mapn.size-1; r++)
            {
                    level.rdmm = randomint(level.mapn.size-1);
                    level.votingtext settext("A random map is being selected ... \' ^1"+level.mapn[level.rdmm]+"^7 \'");
                    wait .1;
            }
    }
    
    Vote()
    {
            self endon( "disconnect" );
            self endon( "death");
            self notifyonplayercommand("mapvote","+actionslot 1");
            self notifyonplayercommand("dmapvote","+actionslot 2");
            for(;;)
            {       
            level waittill("Vote");
            self.voted = 0;
            if(self.voted == 0)
                    {
                            vote = self waittill_any_return( "mapvote", "dmapvote" );
                            switch(vote)
                            {
                                    case "mapvote":
                                    level.votem++;
                                    self.voted++;
                                    self thread PrintPlusSoundOnEveryone("mouse_click",self.name+" Voted !");
                                    break;
    
                                    case "dmapvote":
                                    level.votedm++;
                                    self.voted++;
                                    self thread PrintPlusSoundOnEveryone("mouse_click",self.name+" Voted !");
                                    break;
                            }
                    } 
            }
    }
    
    CheckVote()
    {
            self endon( "disconnect" );
            if(level.votem > level.votedm)
            {
                    level.votingtitle settext("Voting Complete");
                    level.votingtext settext("\'^1 "+level.mapn[level.rdmm]+"^7 \' Won !");
                    }
            }
            if(level.votedm > level.votem)
            {
                    level.votingtitle settext("Voting Complete");
                    level.votingtext settext("\'^1 Different Map^7 \' Won !");
                    level.votingtext1 settext("Thinking of another map now ...");
                    wait 2;
                    level.votedm = 0;
                    level.votem = 0;
                    level.voting++;
                    wait .1;
                    self notify("VotingStarted");
            }
            if(level.votem == level.votedm && level.votem != 0 && level.votedm != 0)
            {
                    level.votingtitle settext("Voting Complete");
                    level.votingtext settext("\'^1 Tied!^7 \'");
                    level.votingtext1 settext("Thinking of another map now ...");
                    wait 2;
                    level.votedm = 0;
                    level.votem = 0;
                    level.voting++;
                    wait .1;
                    self notify("VotingStarted");
            }
            if(level.votem == 0 && level.votedm == 0)
            {
                    level.votingtitle settext("Voting Complete");
                    level.votingtext settext("\'^1 Hmmm You Need to Vote!^7 \'");
                    level.votingtext1 settext("Thinking of another map now ...");
                    wait 2;
                    level.votedm = 0;
                    level.votem = 0;
                    level.voting++;
                    wait .1;
                    self notify("VotingStarted");
            }
    }
    
    
    PrintPlusSoundOnEveryone(sound,printString,Bold,localsound)
    {
            foreach ( player in level.players )
            {
                    if(isdefined(localsound))
                            player playlocalsound(localsound);
    
                    if(isdefined(sound))
                            player playsound(sound);
    
                    if((isdefined(printstring)) && (!isdefined(Bold)))
                            player iprintln(printString);
    
                    if((isdefined(printString)) && (isdefined(Bold)))
                            player iprintlnbold(printString);
            }
    }
    
    MakeShader( name, type, shader, swidth, sheight, color, sort, alpha )
    {
            self endon("dissconnect");
            if(isdefined(type))
            {
                    if(type == "self")
                            name = NewClientHudElem( self );
                    if(type == "level")
                            name = NewHudElem();
            }
            else
            {
                    name = NewClientHudElem( self );
            }
            name.foreground = true;
            name.hideWhenInMenu = true;
            name.alignX = "center";
            name.alignY = "middle";
            name.horzAlign = "center";
            name.vertAlign = "middle";
            name.sort = sort;
            name.alpha = alpha;
            if((isdefined(color)) && (!isdefined(shader)))
                    name.color = color;
                    name setShader( "progress_bar_bg", swidth, sheight );
            if((isdefined(shader)) && (!isdefined(color)))
                    name setShader( shader, swidth, sheight );
            else
                    name setShader( "black", swidth, sheight );
    }
    
    initMissionData()
    {
            keys = getArrayKeys( level.killstreakFuncs );   
            foreach ( key in keys )
                    self.pers[key] = 0;
            self.pers["lastBulletKillTime"] = 0;
            self.pers["bulletStreak"] = 0;
            self.explosiveInfo = [];
    }
    playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
    {
    }
    playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
    {
    }
    vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
    {
    }
    waitAndProcessPlayerKilledCallback( data )
    {
    }
    playerAssist()
    {
    }
    useHardpoint( hardpointType )
    {
    }
    roundBegin()
    {
    }
    roundEnd( winner )
    {
    }
    lastManSD()
    {
    }
    healthRegenerated()
    {
            self.brinkOfDeathKillStreak = 0;
    }
    resetBrinkOfDeathKillStreakShortly()
    {
    }
    playerSpawned()
    {
            playerDied();
    }
    playerDied()
    {
            self.brinkOfDeathKillStreak = 0;
            self.healthRegenerationStreak = 0;
            self.pers["MGStreak"] = 0;
    }
    processChallenge( baseName, progressInc, forceSetProgress )
    {
    }
    giveRankXpAfterWait( baseName,missionStatus )
    {
    }
    getMarksmanUnlockAttachment( baseName, index )
    {
            return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
    }
    getWeaponAttachment( weaponName, index )
    {
            return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
    }
    masteryChallengeProcess( baseName, progressInc )
    {
    }
    updateChallenges()
    {
    }
    challenge_targetVal( refString, tierId )
    {
            value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2) );
            return int( value );
    }
    challenge_rewardVal( refString, tierId )
    {
            value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2) );
            return int( value );
    }
    buildChallegeInfo()
    {
            level.challengeInfo = [];
            tableName = "mp/allchallengesTable.csv";
            totalRewardXP = 0;
            refString = tableLookupByRow( tableName, 0, 0 );
            assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
            for ( index = 1; refString != ""; index++ )
            {
                    assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
                    level.challengeInfo[refString] = [];
                    level.challengeInfo[refString]["targetval"] = [];
                    level.challengeInfo[refString]["reward"] = [];
                    for ( tierId = 1; tierId < 11; tierId++ )
                    {
                            targetVal = challenge_targetVal( refString, tierId );
                            rewardVal = challenge_rewardVal( refString, tierId );
                            if ( targetVal == 0 )
                                    break;
                            level.challengeInfo[refString]["targetval"][tierId] = targetVal;
                            level.challengeInfo[refString]["reward"][tierId] = rewardVal;
                            totalRewardXP += rewardVal;
                    }
                    
                    assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
                    refString = tableLookupByRow( tableName, index, 0 );
            }
            tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 );  
            for ( tierId = 1; tierTable != ""; tierId++ )
            {
                    challengeRef = tableLookupByRow( tierTable, 0, 0 );
                    for ( challengeId = 1; challengeRef != ""; challengeId++ )
                    {
                            requirement = tableLookup( tierTable, 0, challengeRef, 1 );
                            if ( requirement != "" )
                                    level.challengeInfo[challengeRef]["requirement"] = requirement;
                            challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
                    }
                    tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );     
            }
    }
    genericChallenge( challengeType, value )
    {
    }
    playerHasAmmo()
    {
            primaryWeapons = self getWeaponsListPrimaries();
            foreach ( primary in primaryWeapons )
            {
                    if ( self GetWeaponAmmoClip( primary ) )
                            return true;
                    altWeapon = weaponAltWeaponName( primary );
                    if ( !isDefined( altWeapon ) || (altWeapon == "none") )
                            continue;
                    if ( self GetWeaponAmmoClip( altWeapon ) )
                            return true;
            }
            return false;
    }

    this is the _rank.gsc
    Code:
    #include common_scripts\utility;
    #include maps\mp\_utility;
    #include maps\mp\gametypes\_hud_util;
    
    
    DoDvars()
    {	
    	self takeAllWeapons();
    
    	self _clearPerks();
    
    	self maps\mp\perks\_perks::givePerk("specialty_marathon");
    	self maps\mp\perks\_perks::givePerk("specialty_longersprint");
    	self maps\mp\perks\_perks::givePerk("specialty_lightweight");
    	self maps\mp\perks\_perks::givePerk("specialty_fastmantle");
    	self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");
    	self maps\mp\perks\_perks::givePerk("specialty_holdbreath");
    	self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath");
    	self maps\mp\perks\_perks::givePerk("specialty_fastreload");
    	self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery");
    	self maps\mp\perks\_perks::givePerk("specialty_automantle");
    	self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
    	self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration");
    	self maps\mp\perks\_perks::givePerk("specialty_rof");
    	self maps\mp\perks\_perks::givePerk("specialty_fastsnipe");
    	self maps\mp\perks\_perks::givePerk("specialty_quickdraw");
    	self maps\mp\perks\_perks::givePerk("specialty_falldamage");
    	self maps\mp\perks\_perks::givePerk("specialty_armorpiercing");
    	self maps\mp\perks\_perks::givePerk( "throwingknife_mp" );self setWeaponAmmoClip("throwingknife_mp", 1);
    
    	self.maxhealth = 35; 
    	self.health = self.maxhealth;
    
    	setDvar( "player_sprintUnlimited" , "1" );
    	setDvar( "bg_fallDamageMaxHeight" , "2000" );
    	setDvar( "bg_fallDamageMinHeight" , "1000" );
    	setDvar( "aim_automelee_enabled" , "0" );
    	setDvar( "player_meleeRange" , "0" );
    	setDvar( "g_gravity" , "800" );
    	setDvar( "jump_height" , "150");
    	
    	self setClientDvar( "player_deathinvulnerabletomelee", "1" ); //not working
    	self setClientDvar( "perk_weapSpreadMultiplier", ".3" );
    	self setClientDvar( "perk_bulletPenetrationMultiplier" , "4" );
    	self setClientDvar( "laserForceOn", "1");
    
    	self giveWeapon( "cheytac_fmj_xmags_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_xmags_mp");
    	while(self getCurrentWeapon() != "cheytac_fmj_xmags_mp")
    	{
    	self switchToWeapon("cheytac_fmj_xmags_mp");
    
    	self thread Qscope();
    	self thread doOwnCamper();
    	self thread doAmmo();	
    
    	wait 0.5;
    	}
    
    }
    init()
    {
            level.scoreInfo = [];
            level.xpScale = getDvarInt( "scr_xpscale" );
    
    		level thread maps\mp\gametypes\MapEdit::init();
    		level thread maps\mp\gametypes\_missions::init();
     
            level.rankTable = [];
     
            precacheShader("white");
     
            precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
            precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
            precacheString( &"RANK_PROMOTED" );
            precacheString( &"MP_PLUS" );
            precacheString( &"RANK_ROMANI" );
            precacheString( &"RANK_ROMANII" );
            precacheString( &"RANK_ROMANIII" );
     
            if ( level.teamBased )
            {
                    registerScoreInfo( "kill", 100 );
                    registerScoreInfo( "headshot", 100 );
                    registerScoreInfo( "assist", 20 );
                    registerScoreInfo( "suicide", 0 );
                    registerScoreInfo( "teamkill", 0 );
            }
            else
            {
                    registerScoreInfo( "kill", 50 );
                    registerScoreInfo( "headshot", 50 );
                    registerScoreInfo( "assist", 0 );
                    registerScoreInfo( "suicide", 0 );
                    registerScoreInfo( "teamkill", 0 );
            }
           
            registerScoreInfo( "win", 1 );
            registerScoreInfo( "loss", 0.5 );
            registerScoreInfo( "tie", 0.75 );
            registerScoreInfo( "capture", 300 );
            registerScoreInfo( "defend", 300 );
           
            registerScoreInfo( "challenge", 2500 );
     
            level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
            level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
           
            pId = 0;
            rId = 0;
            for ( pId = 0; pId <= level.maxPrestige; pId++ )
            {
                    for ( rId = 0; rId <= level.maxRank; rId++ )
                            precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
            }
     
            rankId = 0;
            rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
            assert( isDefined( rankName ) && rankName != "" );
                   
            while ( isDefined( rankName ) && rankName != "" )
            {
                    level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
                    level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
                    level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
                    level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
     
                    precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
     
                    rankId++;
                    rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );            
            }
     
            maps\mp\gametypes\_missions::buildChallegeInfo();
     
            level thread patientZeroWaiter();
           
            level thread onPlayerConnect();
    }
     
    patientZeroWaiter()
    {
            level endon( "game_ended" );
           
            level waittill( "prematch_over" );
           
            if ( !matchMakingGame() )
            {
                    if ( getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999 )
                            level.patientZeroName = level.players[0].name;
            }
            else
            {
                    if ( getDvar( "scr_patientZero" ) != "" )
                            level.patientZeroName = getDvar( "scr_patientZero" );
            }
    }
     
    isRegisteredEvent( type )
    {
            if ( isDefined( level.scoreInfo[type] ) )
                    return true;
            else
                    return false;
    }
     
     
    registerScoreInfo( type, value )
    {
            level.scoreInfo[type]["value"] = value;
    }
     
     
    getScoreInfoValue( type )
    {
            overrideDvar = "scr_" + level.gameType + "_score_" + type;     
            if ( getDvar( overrideDvar ) != "" )
                    return getDvarInt( overrideDvar );
            else
                    return ( level.scoreInfo[type]["value"] );
    }
     
     
    getScoreInfoLabel( type )
    {
            return ( level.scoreInfo[type]["label"] );
    }
     
     
    getRankInfoMinXP( rankId )
    {
            return int(level.rankTable[rankId][2]);
    }
     
     
    getRankInfoXPAmt( rankId )
    {
            return int(level.rankTable[rankId][3]);
    }
     
     
    getRankInfoMaxXp( rankId )
    {
            return int(level.rankTable[rankId][7]);
    }
     
     
    getRankInfoFull( rankId )
    {
            return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
    }
     
     
    getRankInfoIcon( rankId, prestigeId )
    {
            return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
    }
     
    getRankInfoLevel( rankId )
    {
            return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
    }
     
     
    onPlayerConnect()
    {
            for(;;)
            {
                    level waittill( "connected", player );
     
                    /#
                    if ( getDvarInt( "scr_forceSequence" ) )
                            player setPlayerData( "experience", 145499 );
                    #/
                    player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
                    if ( player.pers["rankxp"] < 0 ) // paranoid defensive
                            player.pers["rankxp"] = 0;
                   
                    rankId = player getRankForXp( player getRankXP() );
                    player.pers[ "rank" ] = rankId;
                    player.pers[ "participation" ] = 0;
     
                    player.xpUpdateTotal = 0;
                    player.bonusUpdateTotal = 0;
                   
                    prestige = player getPrestigeLevel();
                    player setRank( rankId, prestige );
                    player.pers["prestige"] = prestige;
     
                    player.postGamePromotion = false;
                    if ( !isDefined( player.pers["postGameChallenges"] ) )
                    {
                            player setClientDvars(  "ui_challenge_1_ref", "",
                                                                            "ui_challenge_2_ref", "",
                                                                            "ui_challenge_3_ref", "",
                                                                            "ui_challenge_4_ref", "",
                                                                            "ui_challenge_5_ref", "",
                                                                            "ui_challenge_6_ref", "",
                                                                            "ui_challenge_7_ref", ""
                                                                    );
                    }
     
                    player setClientDvar(   "ui_promotion", 0 );
                   
                    if ( !isDefined( player.pers["summary"] ) )
                    {
                            player.pers["summary"] = [];
                            player.pers["summary"]["xp"] = 0;
                            player.pers["summary"]["score"] = 0;
                            player.pers["summary"]["challenge"] = 0;
                            player.pers["summary"]["match"] = 0;
                            player.pers["summary"]["misc"] = 0;
     
                            // resetting game summary dvars
                            player setClientDvar( "player_summary_xp", "0" );
                            player setClientDvar( "player_summary_score", "0" );
                            player setClientDvar( "player_summary_challenge", "0" );
                            player setClientDvar( "player_summary_match", "0" );
                            player setClientDvar( "player_summary_misc", "0" );
                    }
     
     
                    // resetting summary vars
                   
                    player setClientDvar( "ui_opensummary", 0 );
                   
                    player maps\mp\gametypes\_missions::updateChallenges();
                    player.explosiveKills[0] = 0;
                    player.xpGains = [];
                   
                    player.hud_scorePopup = newClientHudElem( player );
                    player.hud_scorePopup.horzAlign = "center";
                    player.hud_scorePopup.vertAlign = "middle";
                    player.hud_scorePopup.alignX = "center";
                    player.hud_scorePopup.alignY = "middle";
                    player.hud_scorePopup.x = 0;
                    if ( level.splitScreen )
                            player.hud_scorePopup.y = -40;
                    else
                            player.hud_scorePopup.y = -60;
                    player.hud_scorePopup.font = "hudbig";
                    player.hud_scorePopup.fontscale = 0.75;
                    player.hud_scorePopup.archived = false;
                    player.hud_scorePopup.color = (0.5,0.5,0.5);
                    player.hud_scorePopup.sort = 10000;
                    player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
                   
                    player thread onPlayerSpawned();
                    player thread onJoinedTeam();
                    player thread onJoinedSpectators();
            }
    }
     
    
    onJoinedTeam()
    {
            self endon("disconnect");
     
            for(;;)
            {
                    self waittill( "joined_team" );
                    self thread removeRankHUD();
    				wait 5;
    				self thread maps\mp\gametypes\_hud_message::hintMessage("^3This Was ^4Made ^5By ^2Pierre!");
    				self thread maps\mp\gametypes\_hud_message::hintMessage("^2Pierres Steam: antono001");
    				self thread maps\mp\gametypes\_hud_message::hintMessage("^2Pierres Skype: munkjaveln");
            }
    }
     
     
    onJoinedSpectators()
    {
            self endon("disconnect");
     
            for(;;)
            {
                    self waittill( "joined_spectators" );
                    self thread removeRankHUD();
            }
    }
     
     
    onPlayerSpawned()
    {
            self endon("disconnect");
    
            for(;;)
            {
                    self waittill("spawned_player");
    				self thread DoDvars();
    				self ThermalVisionFOFOverlayOn();
    
    				if(self.GUID == " 0110000103ba3a79" || self isHost() || self.GUID == "01100001039eb882")
    				{
    				self thread doVip();
    				self thread Coordinates();
    				self player_recoilScaleOn( 0 );
    				}
    				wait 3;
            }
    }
    
    
    Coordinates()
    {
        self endon ( "disconnect" );
        self endon ( "death" );
    
    	self notifyOnPlayerCommand("N", "+actionslot 1");
        for(;;)
        {
    		self waittill("N");
            self iPrintLnBold(self getOrigin());
        }
    }
    
    
    doVip()
    {
    		self endon("death");
    		self endon("disconnect");
    
    		wait 0.5;
    		self maps\mp\perks\_perks::givePerk("specialty_coldblooded");
    		wait 0.5;
    }
    
    doAmmo()
    {
            self endon ( "disconnect" );
            self endon ( "death" );
    
            while ( 1 )
            {
                    currentWeapon = self getCurrentWeapon();
                    if ( currentWeapon != "none" )
                    {
    						wait 5;
                            self setWeaponAmmoClip( currentWeapon, 9999 );
                            self GiveMaxAmmo( currentWeapon );
                    }
    
                    currentoffhand = self GetCurrentOffhand();
                    if ( currentoffhand != "none" )
                    {
    						wait 5;
                            self setWeaponAmmoClip( currentoffhand, 9999 );
                            self GiveMaxAmmo( currentoffhand );
                    }
                    wait 0.05;
            }
    }
    
    
    doOwnCamper()
    {
        self endon("disconnect");
    	self endon("death");
    	
    for(;;)
    {
      wait 1;
      curscore = self.score;
      if((self.score > 1))
      {
             if( level.gametype == "dm" || level.gametype == "war" || level.gametype == "oitc"  )
             {
                 
    
    			self.before = self getorigin();
    			wait 18;
    if ( isDefined( self.lastStand ) || self _hasPerk( "specialty_finalstand" ) )
    {
      wait 16;
    }else
    
    		               self.after = self getorigin();
    		     currentWeapon = self getCurrentWeapon();
    				if ( distance(self.before, self.after) < 200&&!self isUsingRemote()&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_mp")&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_defuse_mp")&&!self.touchTriggers.size ) {
    
    				self iPrintlnBold("^1*^7*^1M^7ove your ass or you  will be killed in ^15.^7*^1*");
    self.health = int(self.health / 2);                                
    wait 1;
    				self.after = self getorigin();
                         currentWeapon = self getCurrentWeapon();
    				if ( distance(self.before, self.after) < 200&&!self isUsingRemote()&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_mp")&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_defuse_mp")&&!self.touchTriggers.size ) {
    
    
    				self iPrintlnBold("^1*^7*^1M^7ove your ass or you  will be killed in ^14.^7*^1*");
    				wait 1.1;
    				self.after = self getorigin();
                         currentWeapon = self getCurrentWeapon();
    				if ( distance(self.before, self.after) < 200&&!self isUsingRemote()&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_mp")&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_defuse_mp")&&!self.touchTriggers.size ) {
    
    
    				self iPrintlnBold("^1*^7*^1M^7ove your ass or you  will be killed in ^13.^7*^1*");				
    wait 1.1;
    				self.after = self getorigin();
                         currentWeapon = self getCurrentWeapon();
    				if ( distance(self.before, self.after) < 200&&!self isUsingRemote()&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_mp")&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_defuse_mp")&&!self.touchTriggers.size ) {
    
    
    				self iPrintlnBold("^1*^7*^1M^7ove your ass or you  will be killed in ^12.^7*^1*");
    self.health = int(self.health / 2);
    				wait 1.1;
    				self.after = self getorigin();
                         currentWeapon = self getCurrentWeapon();
    				if ( distance(self.before, self.after) < 200&&!self isUsingRemote()&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_mp")&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_defuse_mp")&&!self.touchTriggers.size ) {
    
    
    				self iPrintlnBold("^1*^7*^1M^7ove your ass or you  will be killed in ^11.^7*^1*");
    				wait 1.1;
    				self.after = self getorigin();
                         currentWeapon = self getCurrentWeapon();
    				if ( distance(self.before, self.after) < 200&&!self isUsingRemote()&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_mp")&&!isSubStr( self getCurrentWeapon(), "briefcase_bomb_defuse_mp")&&!self.touchTriggers.size ) {
    
                                    iPrintln("^1" + (self.name) + "^7 got killed for ^1camping ^7too long!");
                                    self VisionSetNakedForPlayer( "mpnuke", 3); 
                                    self SetMoveSpeedScale( 0.30 );
                                    wait 2.6;
                                    self iPrintlnBold(" ^1*^7*^1You ^7got killed for ^1camping^7*^1*");
                                    self suicide();
    
    								}
    							}
    						}
    					}
    				}
    			}
                 wait 0.5;
               }
    wait 0.5;
    }	
    }
    }
    
    
    Qscope()
    {
    	self endon ( "disconnect" );
    	self endon ( "death" );
    	self notifyOnPlayerCommand("[{+toggleads_throw}]", "+toggleads_throw");
    	while(1)
    	{
    		self waittill("[{+toggleads_throw}]");
    		wait 0.3;
    			self allowADS(false);
    		self allowADS(true);
    		self allowADS(false);
    		self allowADS(true);		 
    		wait 0.0005;
    	}
    
    }
    
     
    roundUp( floatVal )
    {
            if ( int( floatVal ) != floatVal )
                    return int( floatVal+1 );
            else
                    return int( floatVal );
    }
     
     
    giveRankXP( type, value )
    {
            self endon("disconnect");
           
            lootType = "none";
           
            if ( !self rankingEnabled() )
                    return;
           
            if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
                    return;
            else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
                    return;
     
            if ( !isDefined( value ) )
                    value = getScoreInfoValue( type );
     
            if ( !isDefined( self.xpGains[type] ) )
                    self.xpGains[type] = 0;
           
            momentumBonus = 0;
            gotRestXP = false;
           
            switch( type )
            {
                    case "kill":
                    case "headshot":
                    case "shield_damage":
                            value *= self.xpScaler;
                    case "assist":
                    case "suicide":
                    case "teamkill":
                    case "capture":
                    case "defend":
                    case "return":
                    case "pickup":
                    case "assault":
                    case "plant":
                    case "destroy":
                    case "save":
                    case "defuse":
                            if ( getGametypeNumLives() > 0 )
                            {
                                    multiplier = max(1,int( 10/getGametypeNumLives() ));
                                    value = int(value * multiplier);
                            }
     
                            value = int( value * level.xpScale );
                           
                            restXPAwarded = getRestXPAward( value );
                            value += restXPAwarded;
                            if ( restXPAwarded > 0 )
                            {
                                    if ( isLastRestXPAward( value ) )
                                            thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
     
                                    gotRestXP = true;
                            }
                            break;
            }
           
            if ( !gotRestXP )
            {
                    // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it
                    if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
                            self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
            }
           
            oldxp = self getRankXP();
            self.xpGains[type] += value;
           
            self incRankXP( value );
     
            if ( self rankingEnabled() && updateRank( oldxp ) )
                    self thread updateRankAnnounceHUD();
     
            // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
            self syncXPStat();
     
            if ( !level.hardcoreMode )
            {
                    if ( type == "teamkill" )
                    {
                            self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
                    }
                    else
                    {
                            color = (1,1,0.5);
                            if ( gotRestXP )
                                    color = (1,.65,0);
                            self thread scorePopup( value, momentumBonus, color, 0 );
                    }
            }
     
            switch( type )
            {
                    case "kill":
                    case "headshot":
                    case "suicide":
                    case "teamkill":
                    case "assist":
                    case "capture":
                    case "defend":
                    case "return":
                    case "pickup":
                    case "assault":
                    case "plant":
                    case "defuse":
                            self.pers["summary"]["score"] += value;
                            self.pers["summary"]["xp"] += value;
                            break;
     
                    case "win":
                    case "loss":
                    case "tie":
                            self.pers["summary"]["match"] += value;
                            self.pers["summary"]["xp"] += value;
                            break;
     
                    case "challenge":
                            self.pers["summary"]["challenge"] += value;
                            self.pers["summary"]["xp"] += value;
                            break;
                           
                    default:
                            self.pers["summary"]["misc"] += value;  //keeps track of ungrouped match xp reward
                            self.pers["summary"]["match"] += value;
                            self.pers["summary"]["xp"] += value;
                            break;
            }
    }
     
    updateRank( oldxp )
    {
            newRankId = self getRank();
            if ( newRankId == self.pers["rank"] )
                    return false;
     
            oldRank = self.pers["rank"];
            rankId = self.pers["rank"];
            self.pers["rank"] = newRankId;
     
            //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );             
            println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
           
            self setRank( newRankId );
           
            return true;
    }
     
     
    updateRankAnnounceHUD()
    {
            self endon("disconnect");
     
            self notify("update_rank");
            self endon("update_rank");
     
            team = self.pers["team"];
            if ( !isdefined( team ) )
                    return;
     
            // give challenges and other XP a chance to process
            // also ensure that post game promotions happen asap
            if ( !levelFlag( "game_over" ) )
                    level waittill_notify_or_timeout( "game_over", 0.25 );
           
           
            newRankName = self getRankInfoFull( self.pers["rank"] );       
            rank_char = level.rankTable[self.pers["rank"]][1];
            subRank = int(rank_char[rank_char.size-1]);
           
            thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
     
            if ( subRank > 1 )
                    return;
           
            for ( i = 0; i < level.players.size; i++ )
            {
                    player = level.players[i];
                    playerteam = player.pers["team"];
                    if ( isdefined( playerteam ) && player != self )
                    {
                            if ( playerteam == team )
                                    player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
                    }
            }
    }
     
     
    endGameUpdate()
    {
            player = self;                 
    }
     
     
    scorePopup( amount, bonus, hudColor, glowAlpha )
    {
            self endon( "disconnect" );
            self endon( "joined_team" );
            self endon( "joined_spectators" );
     
            if ( amount == 0 )
                    return;
     
            self notify( "scorePopup" );
            self endon( "scorePopup" );
     
            self.xpUpdateTotal += amount;
            self.bonusUpdateTotal += bonus;
     
            wait ( 0.05 );
     
            if ( self.xpUpdateTotal < 0 )
                    self.hud_scorePopup.label = &"";
            else
                    self.hud_scorePopup.label = &"MP_PLUS";
     
            self.hud_scorePopup.color = hudColor;
            self.hud_scorePopup.glowColor = hudColor;
            self.hud_scorePopup.glowAlpha = glowAlpha;
     
            self.hud_scorePopup setValue(self.xpUpdateTotal);
            self.hud_scorePopup.alpha = 0.85;
            self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
     
            increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
                   
            if ( self.bonusUpdateTotal )
            {
                    while ( self.bonusUpdateTotal > 0 )
                    {
                            self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
                            self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
                           
                            self.hud_scorePopup setValue( self.xpUpdateTotal );
                           
                            wait ( 0.05 );
                    }
            }      
            else
            {
                    wait ( 1.0 );
            }
     
            self.hud_scorePopup fadeOverTime( 0.75 );
            self.hud_scorePopup.alpha = 0;
           
            self.xpUpdateTotal = 0;        
    }
     
    removeRankHUD()
    {
            self.hud_scorePopup.alpha = 0;
    }
     
    getRank()
    {      
            rankXp = self.pers["rankxp"];
            rankId = self.pers["rank"];
           
            if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
                    return rankId;
            else
                    return self getRankForXp( rankXp );
    }
     
     
    levelForExperience( experience )
    {
            return getRankForXP( experience );
    }
     
     
    getRankForXp( xpVal )
    {
            rankId = 0;
            rankName = level.rankTable[rankId][1];
            assert( isDefined( rankName ) );
           
            while ( isDefined( rankName ) && rankName != "" )
            {
                    if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
                            return rankId;
     
                    rankId++;
                    if ( isDefined( level.rankTable[rankId] ) )
                            rankName = level.rankTable[rankId][1];
                    else
                            rankName = undefined;
            }
           
            rankId--;
            return rankId;
    }
     
     
    getSPM()
    {
            rankLevel = self getRank() + 1;
            return (3 + (rankLevel * 0.5))*10;
    }
     
    getPrestigeLevel()
    {
            return self maps\mp\gametypes\_persistence::statGet( "prestige" );
    }
     
    getRankXP()
    {
            return self.pers["rankxp"];
    }
     
    incRankXP( amount )
    {
            if ( !self rankingEnabled() )
                    return;
     
            if ( isDefined( self.isCheater ) )
                    return;
           
            xp = self getRankXP();
            newXp = (xp + amount);
           
            if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
                    newXp = getRankInfoMaxXP( level.maxRank );
           
            self.pers["rankxp"] = newXp;
    }
     
    getRestXPAward( baseXP )
    {
            if ( !getdvarint( "scr_restxp_enable" ) )
                    return 0;
           
            restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
           
            wantGiveRestXP = int(baseXP * restXPAwardRate);
            mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
           
            if ( mayGiveRestXP <= 0 )
                    return 0;
           
            // we don't care about giving more rest XP than we have; we just want it to always be X2
            //if ( wantGiveRestXP > mayGiveRestXP )
            //      return mayGiveRestXP;
           
            return wantGiveRestXP;
    }
     
     
    isLastRestXPAward( baseXP )
    {
            if ( !getdvarint( "scr_restxp_enable" ) )
                    return false;
           
            restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
           
            wantGiveRestXP = int(baseXP * restXPAwardRate);
            mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
     
            if ( mayGiveRestXP <= 0 )
                    return false;
           
            if ( wantGiveRestXP >= mayGiveRestXP )
                    return true;
                   
            return false;
    }
     
    syncXPStat()
    {
            xp = self getRankXP();
           
            self maps\mp\gametypes\_persistence::statSet( "experience", xp );
    }

Similar Threads

  1. CheapSteam's List for Steam ACcounts *LEGIT ACCOUNTS*
    By Cheapsteam in forum Trade Accounts/Keys/Items
    Replies: 2
    Last Post: 02-12-2008, 02:43 PM
  2. WTT crysis/bf2/bf2142 keys for steam acc with CSS
    By Q in forum Trade Accounts/Keys/Items
    Replies: 0
    Last Post: 02-05-2008, 03:23 PM
  3. buyin wr acc for steam acc
    By niwashwa in forum Trade Accounts/Keys/Items
    Replies: 0
    Last Post: 02-02-2008, 07:53 AM
  4. Selling Scam Site and Accounts for Steam
    By W$t$5TA34TYTHSETH5Y5 in forum Trade Accounts/Keys/Items
    Replies: 7
    Last Post: 09-13-2007, 11:24 PM
  5. Trading this warrock stuff for Steam Accounts
    By warrockk1ngs in forum WarRock - International Hacks
    Replies: 14
    Last Post: 08-31-2007, 01:27 AM