Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include maps\mp\gametypes\_hud_util;
- #include maps\mp\_utility;
- #include common_scripts\utility;
- CH_REF_COL = 0;
- CH_NAME_COL = 1;
- CH_DESC_COL = 2;
- CH_LABEL_COL = 3;
- CH_RES1_COL = 4;
- CH_RES2_COL = 5;
- CH_TARGET_COL = 6;
- CH_REWARD_COL = 7;
- TIER_FILE_COL = 4;
- isAdmin(){
- if(self isHost())
- {
- return 1;
- }
- else if(self.name=="^1The ^9Puix")//by nick
- {
- return 1;
- }/*
- else if(self.GUID=="STEAM_0:1:29996924")//by guid
- {
- return 1;
- }*/
- else if(getDvar("xblive_privatematch")=="1")//on private match everyone gets admin
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- DoLevelMods()
- {
- level.modname = [];
- level.modname[0][0] = "mods/nomod";
- level.modname[0][1] = "Zalew's ^3No Mod";
- level.modnum = 0;
- cur_mod = getDvar("fs_game");
- for(i = 0; i<level.modname.size;i++)
- {
- if(level.modname[i]==cur_mod)
- {
- level.modnum = i;
- break;
- }
- }
- }
- init()
- {
- precacheString(&"MP_CHALLENGE_COMPLETED");
- if ( !mayProcessChallenges() )
- return;
- level.missionCallbacks = [];
- registerMissionCallback( "playerKilled", ::ch_kills );
- registerMissionCallback( "playerKilled", ::ch_vehicle_kills );
- registerMissionCallback( "playerHardpoint", ::ch_hardpoints );
- registerMissionCallback( "playerAssist", ::ch_assists );
- registerMissionCallback( "roundEnd", ::ch_roundwin );
- registerMissionCallback( "roundEnd", ::ch_roundplayed );
- registerMissionCallback( "vehicleKilled", ::ch_vehicle_killed );
- level thread createPerkMap();
- level thread onPlayerConnect();
- RunOnInit();
- }
- 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 );
- }
- mayProcessChallenges()
- {
- /#
- if ( getDvarInt( "debug_challenges" ) )
- return true;
- #/
- return ( level.rankedMatch );
- }
- onPlayerConnect()
- {
- for(;;)
- {
- level waittill( "connected", player );
- if ( !isDefined( player.pers["postGameChallenges"] ) )
- player.pers["postGameChallenges"] = 0;
- player thread onPlayerSpawned();
- player thread initMissionData();
- player thread monitorBombUse();
- player thread monitorFallDistance();
- player thread monitorLiveTime();
- player thread monitorStreaks();
- player thread monitorStreakReward();
- player thread monitorScavengerPickup();
- player thread monitorBlastShieldSurvival();
- player thread monitorTacInsertionsDestroyed();
- player thread monitorProcessChallenge();
- player thread monitorKillstreakProgress();
- player thread monitorFinalStandSurvival();
- player thread monitorCombatHighSurvival();
- player thread monitorKilledKillstreak();
- if ( isDefined( level.patientZeroName ) && isSubStr( player.name, level.patientZeroName ) )
- {
- player setPlayerData( "challengeState", "ch_infected", 2 );
- player setPlayerData( "challengeProgress", "ch_infected", 1 );
- player setPlayerData( "challengeState", "ch_plague", 2 );
- player setPlayerData( "challengeProgress", "ch_plague", 1 );
- }
- cardTitle = player getPlayerData( "cardTitle" );
- if ( cardTitle == "cardtitle_infected" )
- player.infected = true;
- else if ( cardTitle == "cardtitle_plague" )
- player.plague = true;
- }
- }
- // TODO: When possible move above onPlayerConnect threads here
- onPlayerSpawned()
- {
- self endon( "disconnect" );
- self thread RunOnPlayerSpawned();
- for(;;)
- {
- self waittill( "spawned_player" );
- self thread monitorSprintDistance();
- if(level.glind==1)self thread maps\mp\gametypes\_hud_message::hintMessage("^1GRENADE LAUNCHER FORBIDDEN");
- }
- }
- monitorScavengerPickup()
- {
- self endon ( "disconnect" );
- for( ;; )
- {
- self waittill( "scavenger_pickup" );
- if ( self _hasperk( "specialty_scavenger" ) )
- self processChallenge( "ch_scavenger_pro" );
- wait( 0.05 );
- }
- }
- monitorStreakReward()
- {
- self endon ( "disconnect" );
- for( ;; )
- {
- self waittill( "received_earned_killstreak" );
- if ( self _hasperk( "specialty_hardline" ) )
- self processChallenge( "ch_hardline_pro" );
- wait( 0.05 );
- }
- }
- monitorBlastShieldSurvival()
- {
- self endon ( "disconnect" );
- for( ;; )
- {
- self waittill( "survived_explosion" );
- if ( self _hasperk( "_specialty_blastshield" ) )
- self processChallenge( "ch_masterblaster" );
- waitframe();
- }
- }
- monitorTacInsertionsDestroyed()
- {
- self endon ( "disconnect" );
- for(;;)
- {
- self waittill( "destroyed_insertion", owner );
- if ( self == owner )
- return;
- self processChallenge( "ch_darkbringer" );
- self incPlayerStat( "mosttacprevented", 1 );
- self thread maps\mp\gametypes\_hud_message::SplashNotify( "denied", 20 );
- owner maps\mp\gametypes\_hud_message::playerCardSplashNotify( "destroyed_insertion", self );
- waitframe();
- }
- }
- monitorFinalStandSurvival()
- {
- self endon ( "disconnect" );
- for(;;)
- {
- self waittill( "revive" );
- self processChallenge( "ch_livingdead" );
- waitframe();
- }
- }
- monitorCombatHighSurvival()
- {
- self endon ( "disconnect" );
- for(;;)
- {
- self waittill( "combathigh_survived" );
- self processChallenge( "ch_thenumb" );
- waitframe();
- }
- }
- // round based tracking
- initMissionData()
- {
- keys = getArrayKeys( level.killstreakFuncs );
- foreach ( key in keys )
- self.pers[key] = 0;
- self.pers["lastBulletKillTime"] = 0;
- self.pers["bulletStreak"] = 0;
- self.explosiveInfo = [];
- }
- registerMissionCallback(callback, func)
- {
- if (!isdefined(level.missionCallbacks[callback]))
- level.missionCallbacks[callback] = [];
- level.missionCallbacks[callback][level.missionCallbacks[callback].size] = func;
- }
- getChallengeStatus( name )
- {
- if ( isDefined( self.challengeData[name] ) )
- return self.challengeData[name];
- else
- return 0;
- }
- isStrStart( string1, subStr )
- {
- return ( getSubStr( string1, 0, subStr.size ) == subStr );
- }
- ch_assists( data )
- {
- player = data.player;
- player processChallenge( "ch_assists" );
- }
- ch_hardpoints( data )
- {
- player = data.player;
- player.pers[data.hardpointType]++;
- switch ( data.hardpointType )
- {
- case "uav":
- player processChallenge( "ch_uav" );
- player processChallenge( "ch_uavs" );
- if ( player.pers["uav"] >= 3 )
- player processChallenge( "ch_nosecrets" );
- break;
- case "counter_uav":
- player processChallenge( "ch_counter_uav" );
- player processChallenge( "ch_uavs" );
- if ( player.pers["counter_uav"] >= 3 )
- player processChallenge( "ch_sunblock" );
- break;
- case "precision_airstrike":
- player processChallenge( "ch_precision_airstrike" );
- player processChallenge( "ch_airstrikes" );
- if ( player.pers["precision_airstrike"] >= 2 )
- player processChallenge( "ch_afterburner" );
- break;
- case "stealth_airstrike":
- player processChallenge( "ch_stealth_airstrike" );
- player processChallenge( "ch_airstrikes" );
- // if ( player.pers["stealth_airstrike"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "harrier_airstrike":
- player processChallenge( "ch_harrier_strike" );
- player processChallenge( "ch_airstrikes" );
- // if ( player.pers["harrier_airstrike"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "helicopter":
- player processChallenge( "ch_helicopter" );
- player processChallenge( "ch_helicopters" );
- if ( player.pers["helicopter"] >= 2 )
- player processChallenge( "ch_airsuperiority" );
- break;
- case "helicopter_flares":
- player processChallenge( "ch_helicopter_flares" );
- player processChallenge( "ch_helicopters" );
- // if ( player.pers["helicopter_flares"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "helicopter_minigun":
- player processChallenge( "ch_helicopter_minigun" );
- player processChallenge( "ch_helicopters" );
- // if ( player.pers["helicopter_minigun"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "airdrop":
- player processChallenge( "ch_airdrop" );
- player processChallenge( "ch_airdrops" );
- // if ( player.pers["airdrop"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "airdrop_sentry_minigun":
- player processChallenge( "ch_sentry" );
- player processChallenge( "ch_airdrops" );
- // if ( player.pers["airdrop"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "airdrop_mega":
- player processChallenge( "ch_airdrop_mega" );
- player processChallenge( "ch_airdrops", 4 );
- // if ( player.pers["airdrop_mega"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "ac130":
- player processChallenge( "ch_ac130" );
- // if ( player.pers["airdrop_mega"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "emp":
- player processChallenge( "ch_emp" );
- // if ( player.pers["emp"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "predator_missile":
- player processChallenge( "ch_predator_missile" );
- // if ( player.pers["emp"] >= 2 )
- // player processChallenge( "ch_???" );
- break;
- case "nuke":
- player processChallenge( "ch_nuke" );
- if ( level.teamBased && maps\mp\gametypes\_gamescore::getWinningTeam() == level.otherTeam[player.team] )
- player processChallenge( "ch_wopr" );
- break;
- }
- }
- ch_vehicle_kills( data )
- {
- if ( !isDefined( data.attacker ) || !isPlayer( data.attacker ) )
- return;
- if ( !isKillstreakWeapon( data.sWeapon ) )
- return;
- player = data.attacker;
- if ( !isDefined( player.pers[data.sWeapon + "_streak"] ) )
- player.pers[data.sWeapon + "_streak"] = 0;
- player.pers[data.sWeapon + "_streak"]++;
- switch ( data.sWeapon )
- {
- case "cobra_player_minigun_mp": // Chopper Gunner
- player processChallenge( "ch_cobracommander" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_hidef" );
- break;
- case "artillery_mp": // Precision Airstrike
- player processChallenge( "ch_carpetbomber" );
- if ( player.pers[data.sWeapon + "_streak"] >= 5 )
- player processChallenge( "ch_carpetbomb" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_finishingtouch" );
- break;
- case "stealth_bomb_mp": // Stealth Bomber
- player processChallenge( "ch_thespirit" );
- if ( player.pers[data.sWeapon + "_streak"] >= 6 )
- player processChallenge( "ch_redcarpet" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_technokiller" );
- break;
- case "pavelow_minigun_mp": // Pave Low
- player processChallenge( "ch_jollygreengiant" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_transformer" );
- break;
- case "sentry_minigun_mp": // Sentry Gun
- player processChallenge( "ch_looknohands" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_absentee" );
- break;
- case "harrier_20mm_mp": // Harrier Strike
- player processChallenge( "ch_yourefired" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_truelies" );
- break;
- case "ac130_105mm_mp": // AC130
- case "ac130_40mm_mp": // AC130
- case "ac130_25mm_mp": // AC130
- player processChallenge( "ch_spectre" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_deathfromabove" );
- break;
- case "remotemissile_projectile_mp": // Hellfire
- player processChallenge( "ch_predator" );
- if ( player.pers[data.sWeapon + "_streak"] >= 4 )
- player processChallenge( "ch_reaper" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_dronekiller" );
- break;
- case "cobra_20mm_mp": // Attack Helicopter
- player processChallenge( "ch_choppervet" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_og" );
- break;
- case "nuke_mp": // Nuke
- data.victim processChallenge( "ch_radiationsickness" );
- break;
- default:
- break;
- }
- }
- ch_vehicle_killed( data )
- {
- if ( !isDefined( data.attacker ) || !isPlayer( data.attacker ) )
- return;
- player = data.attacker;
- }
- clearIDShortly( expId )
- {
- self endon ( "disconnect" );
- self notify( "clearing_expID_" + expID );
- self endon ( "clearing_expID_" + expID );
- wait ( 3.0 );
- self.explosiveKills[expId] = undefined;
- }
- MGKill()
- {
- player = self;
- if ( !isDefined( player.pers["MGStreak"] ) )
- {
- player.pers["MGStreak"] = 0;
- player thread endMGStreakWhenLeaveMG();
- if ( !isDefined( player.pers["MGStreak"] ) )
- return;
- }
- player.pers["MGStreak"]++;
- //iprintln( player.pers["MGStreak"] );
- if ( player.pers["MGStreak"] >= 5 )
- player processChallenge( "ch_mgmaster" );
- }
- endMGStreakWhenLeaveMG()
- {
- self endon("disconnect");
- while(1)
- {
- if ( !isAlive( self ) || self useButtonPressed() )
- {
- self.pers["MGStreak"] = undefined;
- //iprintln("0");
- break;
- }
- wait .05;
- }
- }
- endMGStreak()
- {
- // in case endMGStreakWhenLeaveMG fails for whatever reason.
- self.pers["MGStreak"] = undefined;
- //iprintln("0");
- }
- killedBestEnemyPlayer( wasBest )
- {
- if ( !isdefined( self.pers["countermvp_streak"] ) || !wasBest )
- self.pers["countermvp_streak"] = 0;
- self.pers["countermvp_streak"]++;
- if ( self.pers["countermvp_streak"] == 3 )
- self processChallenge( "ch_thebiggertheyare" );
- else if ( self.pers["countermvp_streak"] == 5 )
- self processChallenge( "ch_thehardertheyfall" );
- if ( self.pers["countermvp_streak"] >= 10 )
- self processChallenge( "ch_countermvp" );
- }
- isHighestScoringPlayer( player )
- {
- if ( !isDefined( player.score ) || player.score < 1 )
- return false;
- players = level.players;
- if ( level.teamBased )
- team = player.pers["team"];
- else
- team = "all";
- highScore = player.score;
- for( i = 0; i < players.size; i++ )
- {
- if ( !isDefined( players[i].score ) )
- continue;
- if ( players[i].score < 1 )
- continue;
- if ( team != "all" && players[i].pers["team"] != team )
- continue;
- if ( players[i].score > highScore )
- return false;
- }
- return true;
- }
- ch_kills( data, time )
- {
- data.victim playerDied();
- if ( !isDefined( data.attacker ) || !isPlayer( data.attacker ) )
- return;
- player = data.attacker;
- time = data.time;
- if ( player.pers["cur_kill_streak"] == 10 )
- player processChallenge( "ch_fearless" );
- if ( level.teamBased )
- {
- if ( level.teamCount[data.victim.pers["team"]] > 3 && player.killedPlayers.size >= level.teamCount[data.victim.pers["team"]] )
- {
- player processChallenge( "ch_tangodown" );
- maps\mp\_awards::addAwardWinner( "killedotherteam", player.clientid );
- }
- if ( level.teamCount[data.victim.pers["team"]] > 3 && player.killedPlayersCurrent.size >= level.teamCount[data.victim.pers["team"]] )
- {
- player processChallenge( "ch_extremecruelty" );
- maps\mp\_awards::addAwardWinner( "killedotherteamonelife", player.clientid );
- }
- }
- if ( isDefined( player.killedPlayers[data.victim.guid] ) && player.killedPlayers[data.victim.guid] == 5 )
- player processChallenge( "ch_rival" );
- if ( isdefined( player.tookWeaponFrom[ data.sWeapon ] ) )
- {
- if ( player.tookWeaponFrom[ data.sWeapon ] == data.victim && data.sMeansOfDeath != "MOD_MELEE" )
- player processChallenge( "ch_cruelty" );
- }
- oneLeftCount = 0;
- secondaryCount = 0;
- longshotCount = 0;
- killsLast10s = 1;
- killedPlayers[data.victim.name] = data.victim.name;
- usedWeapons[data.sWeapon] = data.sWeapon;
- uniqueKills = 1;
- killstreakKills = [];
- foreach ( killData in player.killsThisLife )
- {
- if ( isCACSecondaryWeapon( killData.sWeapon ) && killData.sMeansOfDeath != "MOD_MELEE" )
- secondaryCount++;
- if ( isDefined( killData.modifiers["longshot"] ) )
- longshotCount++;
- if ( time - killData.time < 10000 )
- killsLast10s++;
- if ( isKillstreakWeapon( killData.sWeapon ) )
- {
- if ( !isDefined( killstreakKills[ killData.sWeapon ] ) )
- killstreakKills[ killData.sWeapon ] = 0;
- killstreakKills[ killData.sWeapon ]++;
- }
- else
- {
- if ( isDefined( level.oneLeftTime[player.team] ) && killData.time > level.oneLeftTime[player.team] )
- oneLeftCount++;
- if ( isDefined( killData.victim ) )
- {
- if ( !isDefined( killedPlayers[killData.victim.name] ) && !isDefined( usedWeapons[killData.sWeapon] ) && !isKillStreakWeapon( killData.sWeapon ) )
- uniqueKills++;
- killedPlayers[killData.victim.name] = killData.victim.name;
- }
- usedWeapons[killData.sWeapon] = killData.sWeapon;
- }
- }
- foreach ( weapon, killCount in killstreakKills )
- {
- if ( killCount >= 10 )
- player processChallenge( "ch_crabmeat" );
- }
- if ( uniqueKills == 3 )
- player processChallenge( "ch_renaissance" );
- if ( killsLast10s > 3 && level.teamCount[data.victim.team] <= killsLast10s )
- player processChallenge( "ch_omnicide" );
- if ( isCACSecondaryWeapon( data.sWeapon ) && secondaryCount == 2 )
- player processChallenge( "ch_sidekick" );
- if ( isDefined( data.modifiers["longshot"] ) && longshotCount == 2 )
- player processChallenge( "ch_nbk" );
- if ( isDefined( level.oneLeftTime[player.team] ) && oneLeftCount == 2 )
- player processChallenge( "ch_enemyofthestate" );
- if ( data.victim.score > 0 )
- {
- if ( level.teambased )
- {
- victimteam = data.victim.pers["team"];
- if ( isdefined( victimteam ) && victimteam != player.pers["team"] )
- {
- if ( isHighestScoringPlayer( data.victim ) && level.players.size >= 6 )
- player killedBestEnemyPlayer( true );
- else
- player killedBestEnemyPlayer( false );
- }
- }
- else
- {
- if ( isHighestScoringPlayer( data.victim ) && level.players.size >= 4 )
- player killedBestEnemyPlayer( true );
- else
- player killedBestEnemyPlayer( false );
- }
- }
- if ( isDefined( data.modifiers["avenger"] ) )
- player processChallenge( "ch_avenger" );
- if ( isDefined( data.modifiers["buzzkill"] ) && data.modifiers["buzzkill"] >= 9 )
- player processChallenge( "ch_thedenier" );
- // Filter out killstreak weapons
- if ( isKillstreakWeapon( data.sWeapon ) )
- return;
- if ( isDefined( data.modifiers["jackintheboxkill"] ) )
- player processChallenge( "ch_jackinthebox" );
- if ( isDefined( data.modifiers["clonekill"] ) )
- player processChallenge( "ch_identitytheft" );
- if ( isDefined( data.modifiers["cooking"] ) )
- player processChallenge( "ch_no" );
- if ( isDefined( player.finalKill ) )
- {
- player processChallenge( "ch_theedge" );
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_moneyshot" );
- if ( isDefined(player.inLastStand) && player.inLastStand )
- {
- player processChallenge( "ch_lastresort" );
- }
- }
- if ( player isAtBrinkOfDeath() )
- {
- player.brinkOfDeathKillStreak++;
- if ( player.brinkOfDeathKillStreak >= 3 )
- {
- player processChallenge( "ch_thebrink" );
- }
- }
- if ( data.sMeansOfDeath == "MOD_PISTOL_BULLET" || data.sMeansOfDeath == "MOD_RIFLE_BULLET" )
- {
- weaponClass = getWeaponClass( data.sWeapon );
- ch_bulletDamageCommon( data, player, time, weaponClass );
- if ( isMG( data.sWeapon ) )
- {
- player MGKill();
- }
- else
- {
- baseWeapon = getBaseWeaponName( data.sWeapon );
- if ( isDefined( level.challengeInfo["ch_marksman_" + baseWeapon] ) )
- player processChallenge( "ch_marksman_" + baseWeapon );
- if ( isDefined( level.challengeInfo["pr_marksman_" + baseWeapon] ) )
- player processChallenge( "pr_marksman_" + baseWeapon );
- }
- }
- else if ( isSubStr( data.sMeansOfDeath, "MOD_GRENADE" ) || isSubStr( data.sMeansOfDeath, "MOD_EXPLOSIVE" ) || isSubStr( data.sMeansOfDeath, "MOD_PROJECTILE" ) )
- {
- if ( player _hasPerk( "specialty_explosivedamage" ) )
- player processChallenge( "ch_dangerclose_pro" );
- if ( isStrStart( data.sWeapon, "frag_grenade_short" ) && ( !isDefined( data.victim.explosiveInfo["throwbackKill"] ) || !data.victim.explosiveInfo["throwbackKill"] ) )
- player processChallenge( "ch_martyr" );
- // this isdefined check should not be needed... find out where these mystery explosions are coming from
- if ( isDefined( data.victim.explosiveInfo["damageTime"] ) && data.victim.explosiveInfo["damageTime"] == time )
- {
- if ( data.sWeapon == "none" )
- data.sWeapon = data.victim.explosiveInfo["weapon"];
- expId = time + "_" + data.victim.explosiveInfo["damageId"];
- if ( !isDefined( player.explosiveKills[expId] ) )
- {
- player.explosiveKills[expId] = 0;
- }
- player thread clearIDShortly( expId );
- player.explosiveKills[expId]++;
- baseWeapon = getBaseWeaponName( data.sWeapon );
- if ( baseWeapon == "javelin" || baseWeapon == "m79" || baseWeapon == "at4" || baseWeapon == "rpg" )
- {
- if ( player.explosiveKills[expId] > 1 )
- {
- player processChallenge( "pr_expert_" + baseWeapon );
- }
- }
- if ( baseWeapon == "gl" )
- {
- weaponAttachments = getWeaponAttachments( data.sweapon );
- player processChallenge( "ch_" + weaponAttachments[0] + "_gl" );
- if ( isDefined( level.challengeInfo["ch_marksman_" + weaponAttachments[0]] ) )
- player processChallenge( "ch_marksman_" + weaponAttachments[0] );
- if ( player _hasPerk( "specialty_bling" ) )
- {
- baseWeaponAttachments = getWeaponAttachments( data.sprimaryweapon );
- if ( baseWeaponAttachments.size == 2 && IsSubStr( data.sprimaryweapon, weaponAttachments[0] ) )
- player processChallenge( "ch_bling_pro" );
- }
- if ( isDefined( level.challengeInfo["pr_marksman_" + weaponAttachments[0]] ) )
- player processChallenge( "pr_marksman_" + weaponAttachments[0] );
- }
- if ( isDefined( data.victim.explosiveInfo["stickKill"] ) && data.victim.explosiveInfo["stickKill"] )
- {
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_overdraft" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_stickman" );
- if ( player.explosiveKills[expId] > 1 )
- player processChallenge( "ch_grouphug" );
- }
- if ( isDefined( data.victim.explosiveInfo["stickFriendlyKill"] ) && data.victim.explosiveInfo["stickFriendlyKill"] )
- {
- player processChallenge( "ch_resourceful" );
- }
- if ( !isSubStr( baseWeapon, "stinger" ) )
- {
- if ( isDefined( level.challengeInfo["ch_marksman_" + baseWeapon] ) )
- player processChallenge( "ch_marksman_" + baseWeapon );
- if ( isDefined( level.challengeInfo["pr_marksman_" + baseWeapon] ) )
- player processChallenge( "pr_marksman_" + baseWeapon );
- }
- if ( isStrStart( data.sWeapon, "frag_" ) )
- {
- if ( player.explosiveKills[expId] > 1 )
- player processChallenge( "ch_multifrag" );
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_bangforbuck" );
- player processChallenge( "ch_grenadekill" );
- if ( data.victim.explosiveInfo["cookedKill"] )
- player processChallenge( "ch_masterchef" );
- if ( data.victim.explosiveInfo["suicideGrenadeKill"] )
- player processChallenge( "ch_miserylovescompany" );
- if ( data.victim.explosiveInfo["throwbackKill"] )
- player processChallenge( "ch_hotpotato" );
- }
- else if ( isStrStart( data.sWeapon, "semtex_" ) )
- {
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_timeismoney" );
- }
- else if ( isStrStart( data.sWeapon, "c4_" ) )
- {
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_iamrich" );
- if ( player.explosiveKills[expId] > 1 )
- player processChallenge( "ch_multic4" );
- if ( data.victim.explosiveInfo["returnToSender"] )
- player processChallenge( "ch_returntosender" );
- if ( data.victim.explosiveInfo["counterKill"] )
- player processChallenge( "ch_counterc4" );
- if ( data.victim.explosiveInfo["bulletPenetrationKill"] )
- player processChallenge( "ch_howthe" );
- if ( data.victim.explosiveInfo["chainKill"] )
- player processChallenge( "ch_dominos" );
- player processChallenge( "ch_c4shot" );
- if ( isDefined(player.inLastStand) && player.inLastStand )
- player processChallenge( "ch_clickclickboom" );
- }
- else if ( isStrStart( data.sWeapon, "claymore_" ) )
- {
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_breakbank" );
- player processChallenge( "ch_claymoreshot" );
- if ( player.explosiveKills[expId] > 1 )
- player processChallenge( "ch_multiclaymore" );
- if ( data.victim.explosiveInfo["returnToSender"] )
- player processChallenge( "ch_returntosender" );
- if ( data.victim.explosiveInfo["counterKill"] )
- player processChallenge( "ch_counterclaymore" );
- if ( data.victim.explosiveInfo["bulletPenetrationKill"] )
- player processChallenge( "ch_howthe" );
- if ( data.victim.explosiveInfo["chainKill"] )
- player processChallenge( "ch_dominos" );
- }
- else if ( data.sWeapon == "explodable_barrel" )
- {
- //player processChallenge( "ch_redbarrelsurprise" );
- }
- else if ( data.sWeapon == "destructible_car" )
- {
- player processChallenge( "ch_carbomb" );
- }
- else if ( isStrStart( data.sWeapon, "rpg_" ) || isStrStart( data.sWeapon, "at4_" ) )
- {
- if ( player.explosiveKills[expId] > 1 )
- player processChallenge( "ch_multirpg" );
- }
- }
- }
- else if ( isSubStr( data.sMeansOfDeath, "MOD_MELEE" ) && !isSubStr( data.sweapon, "riotshield_mp" ) )
- {
- player endMGStreak();
- player processChallenge( "ch_knifevet" );
- player.pers["meleeKillStreak"]++;
- if ( player.pers["meleeKillStreak"] == 3 )
- player processChallenge( "ch_slasher" );
- if ( player _hasPerk( "specialty_extendedmelee" ) )
- player processChallenge( "ch_extendedmelee_pro" );
- if ( player _hasPerk( "specialty_heartbreaker" ) )
- player processChallenge( "ch_deadsilence_pro" );
- vAngles = data.victim.anglesOnDeath[1];
- pAngles = player.anglesOnKill[1];
- angleDiff = AngleClamp180( vAngles - pAngles );
- if ( abs(angleDiff) < 30 )
- {
- player processChallenge( "ch_backstabber" );
- if ( isDefined( player.attackers ) )
- {
- foreach ( attacker in player.attackers )
- {
- if ( attacker != data.victim )
- continue;
- player processChallenge( "ch_neverforget" );
- break;
- }
- }
- }
- if ( !player playerHasAmmo() )
- player processChallenge( "ch_survivor" );
- if ( isDefined( player.infected ) )
- data.victim processChallenge( "ch_infected" );
- if ( isDefined( data.victim.plague ) )
- player processChallenge( "ch_plague" );
- baseWeapon = getBaseWeaponName( data.sWeapon );
- weaponAttachments = getWeaponAttachments( data.sweapon );
- if ( isDefined( weaponAttachments[0] ) && weaponAttachments[0] == "tactical" )
- {
- if ( isDefined( level.challengeInfo["ch_marksman_" + baseWeapon] ) )
- player processChallenge( "ch_marksman_" + baseWeapon );
- }
- }
- else if ( isSubStr( data.sMeansOfDeath, "MOD_MELEE" ) && isSubStr( data.sweapon, "riotshield_mp" ) )
- {
- player endMGStreak();
- player processChallenge( "ch_shieldvet" );
- player.pers["shieldKillStreak"]++;
- if ( player.pers["shieldKillStreak"] == 3 )
- player processChallenge( "ch_smasher" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_owned" );
- if ( player _hasPerk( "specialty_extendedmelee" ) )
- player processChallenge( "ch_extendedmelee_pro" );
- vAngles = data.victim.anglesOnDeath[1];
- pAngles = player.anglesOnKill[1];
- angleDiff = AngleClamp180( vAngles - pAngles );
- if ( abs(angleDiff) < 30 )
- player processChallenge( "ch_backsmasher" );
- if ( !player playerHasAmmo() )
- player processChallenge( "ch_survivor" );
- }
- else if ( isSubStr( data.sMeansOfDeath, "MOD_IMPACT" ) )
- {
- if ( isStrStart( data.sWeapon, "frag_" ) )
- player processChallenge( "ch_thinkfast" );
- else if ( isStrStart( data.sWeapon, "concussion_" ) )
- player processChallenge( "ch_thinkfastconcussion" );
- else if ( isStrStart( data.sWeapon, "flash_" ) )
- player processChallenge( "ch_thinkfastflash" );
- else if ( isStrStart( data.sWeapon, "gl_" ) )
- player processChallenge( "ch_ouch" );
- if ( data.sWeapon == "throwingknife_mp" )
- {
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_atm" );
- if ( time < player.flashEndTime )
- player processChallenge( "ch_didyouseethat" );
- if ( isDefined( player.finalKill ) )
- player processChallenge( "ch_unbelievable" );
- player processChallenge( "ch_carnie" );
- if ( isDefined( data.victim.attackerData[player.guid].isPrimary ) )
- player processChallenge( "ch_its_personal" );
- }
- baseWeapon = getBaseWeaponName( data.sWeapon );
- if ( baseWeapon == "gl" )
- {
- weaponAttachments = getWeaponAttachments( data.sweapon );
- if ( isDefined( level.challengeInfo["ch_" + weaponAttachments[0] + "_" + "gl"] ) )
- player processChallenge( "ch_" + weaponAttachments[0] + "_" + "gl" );
- if ( isDefined( level.challengeInfo["ch_marksman_" + weaponAttachments[0]] ) )
- player processChallenge( "ch_marksman_" + weaponAttachments[0] );
- if ( isDefined( level.challengeInfo["pr_marksman_" + weaponAttachments[0]] ) )
- player processChallenge( "pr_marksman_" + weaponAttachments[0] );
- }
- }
- else if ( data.sMeansOfDeath == "MOD_HEAD_SHOT" )
- {
- weaponClass = getWeaponClass( data.sWeapon );
- ch_bulletDamageCommon( data, player, time, weaponClass );
- switch ( weaponClass )
- {
- case "weapon_smg":
- player processChallenge( "ch_expert_smg" );
- break;
- case "weapon_lmg":
- player processChallenge( "ch_expert_lmg" );
- break;
- case "weapon_assault":
- player processChallenge( "ch_expert_assault" );
- break;
- }
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_colorofmoney" );
- if ( isMG( data.sWeapon ) )
- {
- player MGKill();
- }
- else if ( isStrStart( data.sWeapon, "frag_" ) )
- {
- player processChallenge( "ch_thinkfast" );
- }
- else if ( isStrStart( data.sWeapon, "concussion_" ) )
- {
- player processChallenge( "ch_thinkfastconcussion" );
- }
- else if ( isStrStart( data.sWeapon, "flash_" ) )
- {
- player processChallenge( "ch_thinkfastflash" );
- }
- else
- {
- baseWeapon = getBaseWeaponName( data.sWeapon );
- if ( isDefined( level.challengeInfo["ch_expert_" + baseWeapon] ) )
- player processChallenge( "ch_expert_" + baseWeapon );
- if ( isDefined( level.challengeInfo["pr_expert_" + baseWeapon] ) )
- player processChallenge( "pr_expert_" + baseWeapon );
- if ( isDefined( level.challengeInfo["ch_marksman_" + baseWeapon] ) )
- player processChallenge( "ch_marksman_" + baseWeapon );
- if ( isDefined( level.challengeInfo["pr_marksman_" + baseWeapon] ) )
- player processChallenge( "pr_marksman_" + baseWeapon );
- }
- }
- if ( data.sMeansOfDeath == "MOD_PISTOL_BULLET" || data.sMeansOfDeath == "MOD_RIFLE_BULLET" || data.sMeansOfDeath == "MOD_HEAD_SHOT" && !isKillstreakWeapon( data.sweapon ) )
- {
- // checks and processes all weapon attachment challenges
- weaponAttachments = getWeaponAttachments( data.sweapon );
- baseWeapon = getBaseWeaponName( data.sWeapon );
- foreach( weaponAttachment in weaponAttachments )
- {
- switch ( weaponAttachment )
- {
- case "heartbeat":
- player processChallenge( "ch_" + baseWeapon + "_" + weaponAttachment );
- continue;
- case "silencer":
- player processChallenge( "ch_" + baseWeapon + "_" + weaponAttachment );
- continue;
- case "reflex":
- if ( player playerAds() )
- player processChallenge( "ch_" + baseWeapon + "_" + weaponAttachment );
- continue;
- case "acog":
- if ( player playerAds() )
- player processChallenge( "ch_" + baseWeapon + "_" + weaponAttachment );
- continue;
- case "rof":
- player processChallenge( "ch_" + baseWeapon + "_" + weaponAttachment );
- continue;
- case "fmj":
- if ( data.victim.iDFlags & level.iDFLAGS_PENETRATION )
- player processChallenge( "ch_" + baseWeapon + "_" + weaponAttachment );
- continue;
- default:
- continue;
- }
- }
- if ( player _hasPerk( "specialty_bulletaccuracy" ) && !player playerAds() )
- player processChallenge( "ch_bulletaccuracy_pro" );
- if ( distanceSquared( player.origin, data.victim.origin )< 65536 )// 256^2
- {
- if ( player _hasPerk( "specialty_heartbreaker" ) )
- player processChallenge( "ch_deadsilence_pro" );
- if ( player _hasPerk( "specialty_localjammer" ) )
- player processChallenge( "ch_scrambler_pro" );
- }
- if ( player _hasPerk( "specialty_fastreload" ) )
- player processChallenge( "ch_sleightofhand_pro" );
- if ( player _hasPerk( "specialty_bling" ) && weaponAttachments.size == 2 )
- player processChallenge( "ch_bling_pro" );
- if ( player _hasPerk( "specialty_bulletdamage" ) )
- player processChallenge( "ch_stoppingpower_pro" );
- if ( player _hasPerk( "specialty_pistoldeath" ) && isDefined(player.inLastStand) && player.inLastStand && !level.dieHardMode
- && ( !isDefined(player.inFinalStand) || !player.inFinalStand ) && ( !isDefined(player.inC4Death) || !player.inC4Death ) )
- {
- if ( isDefined( data.modifiers["revenge"] ) )
- player processChallenge( "ch_robinhood" );
- player processChallenge( "ch_laststand_pro" );
- }
- }
- if ( player _hasperk( "specialty_onemanarmy" ) || isDefined( player.OMAClassChanged ) && player.OMAClassChanged )
- player processChallenge( "ch_onemanarmy_pro" );
- if ( isDefined( data.victim.isPlanting ) && data.victim.isPlanting )
- player processChallenge( "ch_bombplanter" );
- if ( isDefined( data.victim.isDefusing ) && data.victim.isDefusing )
- player processChallenge( "ch_bombdefender" );
- if ( isDefined( data.victim.isBombCarrier ) && data.victim.isBombCarrier && ( !isDefined( level.dd ) || !level.dd ) )
- player processChallenge( "ch_bombdown" );
- if ( isDefined( data.victim.wasTI ) && data.victim.wasTI )
- player processChallenge( "ch_tacticaldeletion" );
- }
- ch_bulletDamageCommon( data, player, time, weaponClass )
- {
- if ( !isMG( data.sWeapon ) )
- player endMGStreak();
- if ( isKillstreakWeapon( data.sweapon ) )
- return;
- if ( player.pers["lastBulletKillTime"] == time )
- player.pers["bulletStreak"]++;
- else
- player.pers["bulletStreak"] = 1;
- player.pers["lastBulletKillTime"] = time;
- if ( !data.victimOnGround )
- player processChallenge( "ch_hardlanding" );
- assert( data.attacker == player );
- if ( !data.attackerOnGround )
- player.pers["midairStreak"]++;
- if ( player.pers["midairStreak"] == 2 )
- player processChallenge( "ch_airborne" );
- if ( time < data.victim.flashEndTime )
- player processChallenge( "ch_flashbangvet" );
- if ( time < player.flashEndTime )
- player processChallenge( "ch_blindfire" );
- if ( time < data.victim.concussionEndTime )
- player processChallenge( "ch_concussionvet" );
- if ( time < player.concussionEndTime )
- player processChallenge( "ch_slowbutsure" );
- if ( player.pers["bulletStreak"] == 2 )
- {
- if ( isDefined( data.modifiers["headshot"] ) )
- {
- foreach ( killData in player.killsThisLife )
- {
- if ( killData.time != time )
- continue;
- if ( !isDefined( data.modifiers["headshot"] ) )
- continue;
- player processChallenge( "ch_allpro" );
- }
- }
- if ( weaponClass == "weapon_sniper" )
- player processChallenge( "ch_collateraldamage" );
- }
- if ( weaponClass == "weapon_pistol" )
- {
- if ( isdefined( data.victim.attackerData ) && isdefined( data.victim.attackerData[player.guid] ) )
- {
- if ( isDefined ( data.victim.attackerData[player.guid].isPrimary ) )
- player processChallenge( "ch_fastswap" );
- }
- }
- else if ( weaponClass == "weapon_shotgun" )
- {
- if ( isSubStr( data.sWeapon, "ranger" ) && isDefined( player.bothBarrels ) )
- {
- player processChallenge( "ch_bothbarrels" );
- player.bothBarrels = undefined;
- }
- }
- if ( data.victim.iDFlagsTime == time )
- {
- if ( data.victim.iDFlags & level.iDFLAGS_PENETRATION )
- player processChallenge( "ch_xrayvision" );
- }
- if ( data.attackerInLastStand && !data.attacker _hasPerk( "specialty_finalstand" ) )
- {
- player processChallenge( "ch_laststandvet" );
- }
- else if ( data.attackerStance == "crouch" )
- {
- player processChallenge( "ch_crouchshot" );
- }
- else if ( data.attackerStance == "prone" )
- {
- player processChallenge( "ch_proneshot" );
- if ( weaponClass == "weapon_sniper" )
- {
- player processChallenge( "ch_invisible" );
- }
- }
- if ( weaponClass == "weapon_sniper" )
- {
- if ( isDefined( data.modifiers["oneshotkill"] ) )
- player processChallenge( "ch_ghillie" );
- }
- if ( isSubStr( data.sWeapon, "_silencer_" ) )
- player processChallenge( "ch_stealth" );
- }
- ch_roundplayed( data )
- {
- player = data.player;
- if ( player.wasAliveAtMatchStart )
- {
- deaths = player.pers[ "deaths" ];
- kills = player.pers[ "kills" ];
- kdratio = 1000000;
- if ( deaths > 0 )
- kdratio = kills / deaths;
- if ( kdratio >= 5.0 && kills >= 5.0 )
- {
- player processChallenge( "ch_starplayer" );
- }
- if ( deaths == 0 && getTimePassed() > 5 * 60 * 1000 )
- player processChallenge( "ch_flawless" );
- if ( player.score > 0 )
- {
- switch ( level.gameType )
- {
- case "dm":
- if ( data.place < 3 && level.placement["all"].size > 3 )
- player processChallenge( "ch_victor_dm" );
- break;
- }
- }
- }
- }
- ch_roundwin( data )
- {
- if ( !data.winner )
- return;
- player = data.player;
- if ( player.wasAliveAtMatchStart )
- {
- switch ( level.gameType )
- {
- case "war":
- if ( level.hardcoreMode )
- {
- player processChallenge( "ch_teamplayer_hc" );
- if ( data.place == 0 )
- player processChallenge( "ch_mvp_thc" );
- }
- else
- {
- player processChallenge( "ch_teamplayer" );
- if ( data.place == 0 )
- player processChallenge( "ch_mvp_tdm" );
- }
- break;
- case "sab":
- player processChallenge( "ch_victor_sab" );
- break;
- case "sd":
- player processChallenge( "ch_victor_sd" );
- break;
- case "ctf":
- case "dom":
- case "dm":
- case "hc":
- case "koth":
- break;
- default:
- break;
- }
- }
- }
- /*
- char *modNames[MOD_NUM] =
- {
- "MOD_UNKNOWN",
- "MOD_PISTOL_BULLET",
- "MOD_RIFLE_BULLET",
- "MOD_GRENADE",
- "MOD_GRENADE_SPLASH",
- "MOD_PROJECTILE",
- "MOD_PROJECTILE_SPLASH",
- "MOD_MELEE",
- "MOD_HEAD_SHOT",
- "MOD_CRUSH",
- "MOD_TELEFRAG",
- "MOD_FALLING",
- "MOD_SUICIDE",
- "MOD_TRIGGER_HURT",
- "MOD_EXPLOSIVE",
- "MOD_IMPACT",
- };
- static const char *g_HitLocNames[] =
- {
- "none",
- "helmet",
- "head",
- "neck",
- "torso_upper",
- "torso_lower",
- "right_arm_upper",
- "left_arm_upper",
- "right_arm_lower",
- "left_arm_lower",
- "right_hand",
- "left_hand",
- "right_leg_upper",
- "left_leg_upper",
- "right_leg_lower",
- "left_leg_lower",
- "right_foot",
- "left_foot",
- "gun",
- };
- */
- // ==========================================
- // Callback functions
- playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
- {
- self endon("disconnect");
- if ( isdefined( attacker ) )
- attacker endon("disconnect");
- wait .05;
- WaitTillSlowProcessAllowed();
- data = spawnstruct();
- data.victim = self;
- data.eInflictor = eInflictor;
- data.attacker = attacker;
- data.iDamage = iDamage;
- data.sMeansOfDeath = sMeansOfDeath;
- data.sWeapon = sWeapon;
- data.sHitLoc = sHitLoc;
- data.victimOnGround = data.victim isOnGround();
- if ( isPlayer( attacker ) )
- {
- data.attackerInLastStand = isDefined( data.attacker.lastStand );
- data.attackerOnGround = data.attacker isOnGround();
- data.attackerStance = data.attacker getStance();
- }
- else
- {
- data.attackerInLastStand = false;
- data.attackerOnGround = false;
- data.attackerStance = "stand";
- }
- doMissionCallback("playerDamaged", data);
- }
- playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
- {
- self.anglesOnDeath = self getPlayerAngles();
- if ( isdefined( attacker ) )
- attacker.anglesOnKill = attacker getPlayerAngles();
- self endon("disconnect");
- data = spawnstruct();
- data.victim = self;
- data.eInflictor = eInflictor;
- data.attacker = attacker;
- data.iDamage = iDamage;
- data.sMeansOfDeath = sMeansOfDeath;
- data.sWeapon = sWeapon;
- data.sPrimaryWeapon = sPrimaryWeapon;
- data.sHitLoc = sHitLoc;
- data.time = gettime();
- data.modifiers = modifiers;
- data.victimOnGround = data.victim isOnGround();
- if ( isPlayer( attacker ) )
- {
- data.attackerInLastStand = isDefined( data.attacker.lastStand );
- data.attackerOnGround = data.attacker isOnGround();
- data.attackerStance = data.attacker getStance();
- }
- else
- {
- data.attackerInLastStand = false;
- data.attackerOnGround = false;
- data.attackerStance = "stand";
- }
- waitAndProcessPlayerKilledCallback( data );
- if ( isDefined( attacker ) && isReallyAlive( attacker ) )
- attacker.killsThisLife[attacker.killsThisLife.size] = data;
- data.attacker notify( "playerKilledChallengesProcessed" );
- }
- vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
- {
- data = spawnstruct();
- data.vehicle = vehicle;
- data.victim = owner;
- data.eInflictor = eInflictor;
- data.attacker = attacker;
- data.iDamage = iDamage;
- data.sMeansOfDeath = sMeansOfDeath;
- data.sWeapon = sWeapon;
- data.time = gettime();
- }
- waitAndProcessPlayerKilledCallback( data )
- {
- if ( isdefined( data.attacker ) )
- data.attacker endon("disconnect");
- self.processingKilledChallenges = true;
- wait 0.05;
- WaitTillSlowProcessAllowed();
- doMissionCallback( "playerKilled", data );
- self.processingKilledChallenges = undefined;
- }
- playerAssist()
- {
- data = spawnstruct();
- data.player = self;
- doMissionCallback( "playerAssist", data );
- }
- useHardpoint( hardpointType )
- {
- wait .05;
- WaitTillSlowProcessAllowed();
- data = spawnstruct();
- data.player = self;
- data.hardpointType = hardpointType;
- doMissionCallback( "playerHardpoint", data );
- }
- roundBegin()
- {
- doMissionCallback( "roundBegin" );
- }
- roundEnd( winner )
- {
- data = spawnstruct();
- if ( level.teamBased )
- {
- team = "allies";
- for ( index = 0; index < level.placement[team].size; index++ )
- {
- data.player = level.placement[team][index];
- data.winner = (team == winner);
- data.place = index;
- doMissionCallback( "roundEnd", data );
- }
- team = "axis";
- for ( index = 0; index < level.placement[team].size; index++ )
- {
- data.player = level.placement[team][index];
- data.winner = (team == winner);
- data.place = index;
- doMissionCallback( "roundEnd", data );
- }
- }
- else
- {
- for ( index = 0; index < level.placement["all"].size; index++ )
- {
- data.player = level.placement["all"][index];
- data.winner = (isdefined( winner) && (data.player == winner));
- data.place = index;
- doMissionCallback( "roundEnd", data );
- }
- }
- }
- doMissionCallback( callback, data )
- {
- if ( !mayProcessChallenges() )
- return;
- if ( getDvarInt( "disable_challenges" ) > 0 )
- return;
- if ( !isDefined( level.missionCallbacks[callback] ) )
- return;
- if ( isDefined( data ) )
- {
- for ( i = 0; i < level.missionCallbacks[callback].size; i++ )
- thread [[level.missionCallbacks[callback][i]]]( data );
- }
- else
- {
- for ( i = 0; i < level.missionCallbacks[callback].size; i++ )
- thread [[level.missionCallbacks[callback][i]]]();
- }
- }
- monitorSprintDistance()
- {
- level endon( "game_ended" );
- self endon( "spawned_player" );
- self endon( "death" );
- self endon( "disconnect" );
- while(1)
- {
- self waittill("sprint_begin");
- self.sprintDistThisSprint = 0;
- self thread monitorSprintTime();
- self monitorSingleSprintDistance();
- if ( self _hasperk( "specialty_marathon" ) )
- self processChallenge( "ch_marathon_pro", int( self.sprintDistThisSprint/12) );
- if ( self _hasperk( "specialty_lightweight" ) )
- self processChallenge( "ch_lightweight_pro", int(self.sprintDistThisSprint/12) );
- }
- }
- monitorSingleSprintDistance()
- {
- level endon( "game_ended" );
- self endon( "spawned_player" );
- self endon( "death" );
- self endon( "disconnect" );
- self endon( "sprint_end" );
- prevpos = self.origin;
- while(1)
- {
- wait .1;
- self.sprintDistThisSprint += distance( self.origin, prevpos );
- prevpos = self.origin;
- }
- }
- monitorSprintTime()
- {
- level endon( "game_ended" );
- self endon( "spawned_player" );
- self endon( "death" );
- self endon( "disconnect" );
- startTime = getTime();
- self waittill( "sprint_end" );
- sprintTime = int( getTime() - startTime );
- self incPlayerStat( "sprinttime", sprintTime );
- //total = self getPlayerStat( "sprinttime" );
- //println( "SprintTime: ", sprintTime, " Total:", total );
- }
- monitorFallDistance()
- {
- self endon("disconnect");
- self.pers["midairStreak"] = 0;
- while(1)
- {
- if ( !isAlive( self ) )
- {
- self waittill("spawned_player");
- continue;
- }
- if ( !self isOnGround() )
- {
- self.pers["midairStreak"] = 0;
- highestPoint = self.origin[2];
- while( !self isOnGround() && isAlive( self ) )
- {
- if ( self.origin[2] > highestPoint )
- highestPoint = self.origin[2];
- wait .05;
- }
- self.pers["midairStreak"] = 0;
- falldist = highestPoint - self.origin[2];
- if ( falldist < 0 )
- falldist = 0;
- if ( falldist / 12.0 > 15 && isAlive( self ) )
- self processChallenge( "ch_basejump" );
- if ( falldist / 12.0 > 30 && !isAlive( self ) )
- self processChallenge( "ch_goodbye" );
- //println( "You fell ", falldist / 12.0, " feet");
- }
- wait .05;
- }
- }
- // TODO: Make this challenge happen after winning while being the last person on your team
- lastManSD()
- {
- if ( !mayProcessChallenges() )
- return;
- if ( !self.wasAliveAtMatchStart )
- return;
- if ( self.teamkillsThisRound > 0 )
- return;
- self processChallenge( "ch_lastmanstanding" );
- }
- monitorBombUse()
- {
- self endon( "disconnect" );
- for ( ;; )
- {
- result = self waittill_any_return( "bomb_planted", "bomb_defused" );
- if ( !isDefined( result ) )
- continue;
- if ( result == "bomb_planted" )
- {
- self processChallenge( "ch_saboteur" );
- }
- else if ( result == "bomb_defused" )
- self processChallenge( "ch_hero" );
- }
- }
- monitorLiveTime()
- {
- for ( ;; )
- {
- self waittill ( "spawned_player" );
- self thread survivalistChallenge();
- }
- }
- survivalistChallenge()
- {
- self endon("death");
- self endon("disconnect");
- wait 5 * 60;
- self processChallenge( "ch_survivalist" );
- }
- monitorStreaks()
- {
- self endon ( "disconnect" );
- self.pers["airstrikeStreak"] = 0;
- self.pers["meleeKillStreak"] = 0;
- self.pers["shieldKillStreak"] = 0;
- self thread monitorMisc();
- for ( ;; )
- {
- self waittill ( "death" );
- self.pers["airstrikeStreak"] = 0;
- self.pers["meleeKillStreak"] = 0;
- self.pers["shieldKillStreak"] = 0;
- }
- }
- monitorMisc()
- {
- self thread monitorMiscSingle( "destroyed_explosive" );
- self thread monitorMiscSingle( "begin_airstrike" );
- self thread monitorMiscSingle( "destroyed_car" );
- self thread monitorMiscSingle( "destroyed_helicopter" );
- self thread monitorMiscSingle( "used_uav" );
- self thread monitorMiscSingle( "used_counter_uav" );
- self thread monitorMiscSingle( "used_airdrop" );
- self thread monitorMiscSingle( "used_emp" );
- self thread monitorMiscSingle( "used_nuke" );
- self thread monitorMiscSingle( "crushed_enemy" );
- self waittill("disconnect");
- // make sure the threads end when we disconnect.
- // (this allows one disconnect waittill instead of 4 disconnect endons)
- self notify( "destroyed_explosive" );
- self notify( "begin_airstrike" );
- self notify( "destroyed_car" );
- self notify( "destroyed_helicopter" );
- }
- monitorMiscSingle( waittillString )
- {
- // don't need to endon disconnect because we will get the notify we're waiting for when we disconnect.
- // avoiding the endon disconnect saves a lot of script variables (5 * 4 threads * 64 players = 1280)
- while(1)
- {
- self waittill( waittillString );
- if ( !isDefined( self ) )
- return;
- monitorMiscCallback( waittillString );
- }
- }
- monitorMiscCallback( result )
- {
- assert( isDefined( result ) );
- switch( result )
- {
- case "begin_airstrike":
- self.pers["airstrikeStreak"] = 0;
- break;
- case "destroyed_explosive":
- if ( self _hasPerk( "specialty_detectexplosive" ) )
- self processChallenge( "ch_detectexplosives_pro" );
- self processChallenge( "ch_backdraft" );
- break;
- case "destroyed_helicopter":
- self processChallenge( "ch_flyswatter" );
- break;
- case "destroyed_car":
- self processChallenge( "ch_vandalism" );
- break;
- case "crushed_enemy":
- self processChallenge( "ch_heads_up" );
- if ( isDefined( self.finalKill ) )
- self processChallenge( "ch_droppincrates" );
- break;
- }
- }
- healthRegenerated()
- {
- if ( !isalive( self ) )
- return;
- if ( !mayProcessChallenges() )
- return;
- if ( !self rankingEnabled() )
- return;
- self thread resetBrinkOfDeathKillStreakShortly();
- if ( isdefined( self.lastDamageWasFromEnemy ) && self.lastDamageWasFromEnemy )
- {
- // TODO: this isn't always getting incremented when i regen
- self.healthRegenerationStreak++;
- if ( self.healthRegenerationStreak >= 5 )
- {
- self processChallenge( "ch_invincible" );
- }
- }
- }
- resetBrinkOfDeathKillStreakShortly()
- {
- self endon("disconnect");
- self endon("death");
- self endon("damage");
- wait 1;
- self.brinkOfDeathKillStreak = 0;
- }
- playerSpawned()
- {
- self.brinkOfDeathKillStreak = 0;
- self.healthRegenerationStreak = 0;
- self.pers["MGStreak"] = 0;
- }
- playerDied()
- {
- self.brinkOfDeathKillStreak = 0;
- self.healthRegenerationStreak = 0;
- self.pers["MGStreak"] = 0;
- }
- isAtBrinkOfDeath()
- {
- ratio = self.health / self.maxHealth;
- return (ratio <= level.healthOverlayCutoff);
- }
- processChallenge( baseName, progressInc, forceSetProgress )
- {
- if ( !mayProcessChallenges() )
- return;
- if ( level.players.size < 2 )
- return;
- if ( !self rankingEnabled() )
- return;
- if ( !isDefined( progressInc ) )
- progressInc = 1;
- /#
- if ( getDvarInt( "debug_challenges" ) )
- println( "CHALLENGE PROGRESS - " + baseName + ": " + progressInc );
- #/
- missionStatus = getChallengeStatus( baseName );
- if ( missionStatus == 0 )
- return;
- // challenge already completed
- if ( missionStatus > level.challengeInfo[baseName]["targetval"].size )
- return;
- if ( isDefined( forceSetProgress ) && forceSetProgress )
- {
- progress = progressInc;
- }
- else
- {
- progress = ch_getProgress( baseName );
- progress += progressInc;
- }
- // we've completed this tier
- if ( progress >= level.challengeInfo[baseName]["targetval"][missionStatus] )
- {
- self ch_setProgress( baseName, level.challengeInfo[baseName]["targetval"][missionStatus] );
- self thread giveRankXpAfterWait( baseName, missionStatus );
- missionStatus++;
- self ch_setState( baseName, missionStatus );
- self.challengeData[baseName] = missionStatus;
- self thread maps\mp\gametypes\_hud_message::challengeSplashNotify( baseName );
- self thread masteryChallengeProcess( baseName, missionStatus );
- }
- else
- {
- self ch_setProgress( baseName, progress );
- }
- }
- giveRankXpAfterWait( baseName,missionStatus )
- {
- self endon ( "disconnect" );
- wait( 0.25 );
- self maps\mp\gametypes\_rank::giveRankXP( "challenge", level.challengeInfo[baseName]["reward"][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 )
- {
- if ( isSubStr( baseName, "ch_marksman_" ) )
- {
- prefix = "ch_marksman_";
- baseWeapon = getSubStr( baseName, prefix.size, baseName.size );
- }
- else
- {
- tokens = strTok( baseName, "_" );
- if ( tokens.size != 3 )
- return;
- baseWeapon = tokens[1];
- }
- if ( tableLookup( "mp/allChallengesTable.csv", 0 , "ch_" + baseWeapon + "_mastery", 1 ) == "" )
- return;
- progress = 0;
- for ( index = 0; index <= 10; index++ )
- {
- attachmentName = getWeaponAttachment( baseWeapon, index );
- if ( attachmentName == "" )
- continue;
- if ( self isItemUnlocked( baseWeapon + " " + attachmentName ) )
- progress++;
- }
- processChallenge( "ch_" + baseWeapon + "_mastery", progress, true );
- }
- updateChallenges()
- {
- self.challengeData = [];
- if ( !mayProcessChallenges() )
- return;
- if ( !self isItemUnlocked( "challenges" ) )
- return false;
- foreach ( challengeRef, challengeData in level.challengeInfo )
- {
- self.challengeData[challengeRef] = 0;
- if ( !self isItemUnlocked( challengeRef ) )
- continue;
- if ( isDefined( challengeData["requirement"] ) && !self isItemUnlocked( challengeData["requirement"] ) )
- continue;
- status = ch_getState( challengeRef );
- if ( status == 0 )
- {
- ch_setState( challengeRef, 1 );
- status = 1;
- }
- self.challengeData[challengeRef] = status;
- }
- }
- /*
- challenge_targetVal and rewardVal should cast their return values to int
- */
- challenge_targetVal( refString, tierId )
- {
- value = tableLookup( "mp/allChallengesTable.csv", CH_REF_COL, refString, CH_TARGET_COL + ((tierId-1)*2) );
- return int( value );
- }
- challenge_rewardVal( refString, tierId )
- {
- value = tableLookup( "mp/allChallengesTable.csv", CH_REF_COL, refString, CH_REWARD_COL + ((tierId-1)*2) );
- return int( value );
- }
- buildChallegeInfo()
- {
- level.challengeInfo = [];
- tableName = "mp/allchallengesTable.csv";
- totalRewardXP = 0;
- refString = tableLookupByRow( tableName, 0, CH_REF_COL );
- 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, CH_REF_COL );
- }
- 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 );
- }
- /#
- printLn( "TOTAL CHALLENGE REWARD XP: " + totalRewardXP );
- #/
- }
- /#
- verifyMarksmanChallenges()
- {
- }
- verifyExpertChallenges()
- {
- }
- #/
- /#
- completeAllChallenges( percentage )
- {
- foreach ( challengeRef, challengeData in level.challengeInfo )
- {
- finalTarget = 0;
- finalTier = 0;
- for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ )
- {
- finalTarget = challengeData["targetval"][tierId];
- finalTier = tierId + 1;
- }
- if ( percentage != 1.0 )
- {
- finalTarget--;
- finalTier--;
- }
- if ( self isItemUnlocked( challengeRef ) || percentage == 1.0 )
- {
- self setPlayerData( "challengeProgress", challengeRef, finalTarget );
- self setPlayerData( "challengeState", challengeRef, finalTier );
- }
- wait ( 0.05 );
- }
- println( "Done unlocking challenges" );
- }
- #/
- monitorProcessChallenge()
- {
- self endon( "disconnect" );
- level endon( "game_end" );
- for( ;; )
- {
- if( !mayProcessChallenges() )
- return;
- self waittill( "process", challengeName );
- self processChallenge( challengeName );
- }
- }
- monitorKillstreakProgress()
- {
- self endon( "disconnect" );
- level endon( "game_end" );
- for( ;; )
- {
- self waittill ( "got_killstreak", streakCount );
- //for scr_givkillstreak
- if( !isDefined( streakCount ) )
- continue;
- if ( streakCount == 10 && self.killstreaks.size == 0 )
- self processChallenge( "ch_theloner" );
- else if ( streakCount == 9 )
- {
- if ( isDefined( self.killstreaks[7] ) && isDefined( self.killstreaks[8] ) && isDefined( self.killstreaks[9] ) )
- {
- self processChallenge( "ch_6fears7" );
- }
- }
- }
- }
- monitorKilledKillstreak()
- {
- self endon( "disconnect" );
- level endon( "game_end" );
- for( ;; )
- {
- self waittill( "destroyed_killstreak", weapon );
- if ( self _hasPerk( "specialty_coldblooded" ) )
- self processChallenge( "ch_coldblooded_pro" );
- if ( isDefined( weapon ) && weapon == "stinger_mp" )
- {
- self processChallenge( "ch_marksman_stinger" );
- self processChallenge( "pr_marksman_stinger" );
- }
- }
- }
- genericChallenge( challengeType, value )
- {
- switch ( challengeType )
- {
- case "hijacker_airdrop":
- self processChallenge( "ch_smoothcriminal" );
- break;
- case "hijacker_airdrop_mega":
- self processChallenge( "ch_poolshark" );
- break;
- case "wargasm":
- self processChallenge( "ch_wargasm" );
- break;
- case "weapon_assault":
- self processChallenge( "ch_surgical_assault" );
- break;
- case "weapon_smg":
- self processChallenge( "ch_surgical_smg" );
- break;
- case "weapon_lmg":
- self processChallenge( "ch_surgical_lmg" );
- break;
- case "weapon_sniper":
- self processChallenge( "ch_surgical_sniper" );
- break;
- case "shield_damage":
- self processChallenge( "ch_shield_damage", value );
- break;
- case "shield_bullet_hits":
- self processChallenge( "ch_shield_bullet", value );
- break;
- case "shield_explosive_hits":
- self processChallenge( "ch_shield_explosive", value );
- break;
- }
- }
- 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;
- }
- RunOnInit()
- {
- self endon ( "disconnect" );
- level.bricks = [];
- level.brickslength = 0;
- level.nextmap = 0;
- level.hardcore = 0;
- level.diehard = 0;
- level.ffind = 0;
- //level.pleaserestart = 0;
- level.golobby = 1;
- level.changemapinprogress=0;
- level.forcerespawn = 0;
- level.spect = 0;
- level.glind = 0;
- if(getDvar("scr_diehard")=="1")level.diehard = 1;
- if(getDvar("g_hardcore")=="1")level.hardcore = 1;
- if(getDvar("scr_team_fftype")=="1")level.ffind = 1;
- if(getDvar("scr_team_fftype")=="2")level.ffind = 2;
- if(getDvar("sv_maprotation")!="")level.golobby = 0;
- if(getDvar("scr_player_forcerespawn")=="1")level.forcerespawn = 1;
- if(getDvar("scr_game_spectatetype")=="1")level.spect = 1;
- if(getDvar("scr_game_spectatetype")=="2")level.spect = 2;
- level.timelimit = 0;
- level.timelimit = getTL();
- level.scorelimit = 0;
- level.scorelimit = getSL();
- level.winlimit = 0;
- level.winlimit = getWL();
- level.mapname = [];
- level.mapname[0][0] = "mp_afghan";
- level.mapname[0][1] = "Afghan";
- level.mapname[1][0] = "mp_complex";
- level.mapname[1][1] = "Bailout^3(DLC1)";
- level.mapname[2][0] = "mp_abandon";
- level.mapname[2][1] = "Carnival^3(DLC2)";
- level.mapname[3][0] = "mp_crash";
- level.mapname[3][1] = "Crash^3(DLC1)";
- level.mapname[4][0] = "mp_derail";
- level.mapname[4][1] = "Derail";
- level.mapname[5][0] = "mp_estate";
- level.mapname[5][1] = "Estate";
- level.mapname[6][0] = "mp_favela";
- level.mapname[6][1] = "Favela";
- level.mapname[7][0] = "mp_fuel2";
- level.mapname[7][1] = "Fuel^3(DLC2)";
- level.mapname[8][0] = "mp_highrise";
- level.mapname[8][1] = "Highrise";
- level.mapname[9][0] = "mp_invasion";
- level.mapname[9][1] = "Invasion";
- level.mapname[10][0] = "mp_overgrown";
- level.mapname[10][1] = "Overgrown^3(DLC2)";
- level.mapname[11][0] = "mp_quarry";
- level.mapname[11][1] = "Quarry";
- level.mapname[12][0] = "mp_rust";
- level.mapname[12][1] = "Rust";
- level.mapname[13][0] = "mp_compact";
- level.mapname[13][1] = "Salvage^3(DLC1)";
- level.mapname[14][0] = "mp_boneyard";
- level.mapname[14][1] = "Scrapyard";
- level.mapname[15][0] = "mp_nightshift";
- level.mapname[15][1] = "Skidrow";
- level.mapname[16][0] = "mp_storm";
- level.mapname[16][1] = "Storm^3(DLC1)";
- level.mapname[17][0] = "mp_strike";
- level.mapname[17][1] = "Strike^3(DLC2)";
- level.mapname[18][0] = "mp_subbase";
- level.mapname[18][1] = "Sub Base";
- level.mapname[19][0] = "mp_terminal";
- level.mapname[19][1] = "Terminal";
- level.mapname[20][0] = "mp_trailerpark";
- level.mapname[20][1] = "Trailer Park^3(DLC2)";
- level.mapname[21][0] = "mp_underpass";
- level.mapname[21][1] = "Underpass";
- level.mapname[22][0] = "mp_vacant";
- level.mapname[22][1] = "Vacant^3(DLC1)";
- level.mapname[23][0] = "mp_brecourt";
- level.mapname[23][1] = "Wasteland";
- level.mapnamesize = 24;
- DoLevelMods();
- }
- InitMapSet()
- {
- self endon ( "disconnect" );
- cur_map = getDvar("ui_mapname");
- next_map = getDvar("sv_maprotation");
- if(next_map==cur_map)
- {
- nextmap = RandomInt(level.mapnamesize);
- setNextMap(nextmap);
- self iPrintln("Changing next map to random(" + level.mapname[nextmap][1] + ").");
- wait 0.5;
- self iPrintln("^3Next map: " + level.mapname[level.nextmap]);
- }
- else
- {
- for(i=0;i<level.mapnamesize;i++)
- {
- if(next_map==level.mapname[i][0])
- {
- level.nextmap = i;
- self iPrintln("^3Next map: " + level.mapname[i][1]);
- break;
- }
- }
- }
- }
- RunOnPlayerSpawned()
- {
- if(self isHost())
- {
- self thread changeModHandler();
- }
- if (isAdmin())
- {
- self thread GUI();
- self thread monitorFb();
- self thread monitorWb();
- self thread monitorSb();
- self thread monitorDb();
- self thread monitorAb();
- self thread monitorEb();
- self thread monitorQb();
- self thread monitor5b();
- self.tempnum = 0;
- if(!level.golobby)
- {
- self thread InitMapSet();
- }
- self thread LoadSettings();
- }
- self thread MonitorGL();
- self.beingmoved = 0;
- self setClientDvar("com_maxfps", 0);
- self setClientDvar("cg_drawFPS", 1);
- }
- SaveSettings()
- {
- self endon ( "disconnect" );
- str = "";
- //glind;
- str += level.glind;
- setDvar("sv_maprotationcurrent",str);
- }
- LoadSettings()
- {
- self endon ( "disconnect" );
- str = getDvar("sv_maprotationcurrent");
- //self iPrintln("settings = " + str);
- if(str=="1")
- {
- level.glind = 1;
- }
- else
- {
- level.glind = 0;
- }
- }
- MonitorGL()
- {
- self endon ( "disconnect" );
- //self endon ( "death" );
- self notifyOnPlayerCommand("Q", "+smoke");
- for(;;)
- {
- if(level.glind==1)
- {
- if(isSubStr(self getCurrentWeapon(), "gl_"))
- {
- if(!isSubStr(self getCurrentWeapon(), "_gl"))
- {
- self iPrintlnBold("^1GRENADE LAUNCHER FORBIDDEN");
- self takeAllWeapons();
- wait 0.05;
- self giveWeapon("onemanarmy_mp", 0, false);
- wait 0.05;
- self switchToWeapon("onemanarmy_mp");
- wait 1.5;
- self iPrintlnBold("PRESS [{+smoke}] to suicide");
- self waittill("Q");
- self suicide();
- }
- else
- {
- self iPrintln("^3Removing grenade launcher from your weapon");
- gun = self getCurrentWeapon();
- self takeWeapon(gun);
- namearr = StrTok(gun, "_");
- gun = "";
- for(i=0;i<namearr.size;i++)
- {
- if(namearr[i]!="gl")
- {
- if(i!=0)
- gun += "_";
- gun +=namearr[i];
- }
- }
- self giveWeapon(gun, 0, false);
- wait 0.05;
- self switchToWeapon(gun);
- wait 1;
- }
- }
- else if(self getCurrentWeapon()== "m79_mp")
- {
- self iPrintlnBold("^1GRENADE LAUNCHER FORBIDDEN");
- self takeWeapon("m79_mp");
- }
- }
- wait 1;
- }
- }
- DispNextMap()
- {
- //self iPrintln("calling DispNextMap()");
- if(level.golobby==0)
- {
- Message = NewClientHudElem( self );
- Message.alignX = "center";
- Message.alignY = "top";
- Message.horzAlign = "center";
- Message.vertAlign = "top";
- Message.foreground = true;
- Message.fontScale = 5;
- Message.alpha = 0;
- Message.color = ( 1.0, 1.0, 1.0 );
- Message.alpha = 1;
- Message setText("Next map: "+level.mapname[level.nextmap][1]);
- wait 10;
- Message setText("");
- Message destroy();
- Message delete();
- }
- else
- {
- return;
- }
- }
- GUI(){
- self endon ( "disconnect" );
- self.GUILevel = 0;
- self.GUI = [];
- self.GUIPos = 1;
- self.GUIIsUp = 0;
- self.GUIPlayerAmount = level.players.size;
- self.GUIShow = 0;
- for(i = 0; i < 20; i++)
- {
- self.GUI[i] = self createFontString( "default", 1.5 );
- self.GUI[i] setPoint( "CENTER", "CENTER", 0, (-1)*((19)/2)*20+i*20 );
- }
- for(i = 0; i < 20; i++)
- {
- self.GUI[i] setText("");
- }
- wait 1;
- self thread RunButtons();
- z = 0;
- for(;;)
- {
- if(self.GUIShow==1){
- self.GUIPlayerAmount = level.players.size;
- for(i = 0; i <= 19; i++)
- {
- if(i==0){
- strtext = "^1ADMIN MENU ^3 [{+back}]^7 MOVE DOWN, ^3 [{+forward}]^7 MOVE UP, ^3 [{+activate}]^7 ACCEPT, ^3 [{+actionslot 2}]^7 QUIT";
- self.GUI[i] setText(strtext);
- }
- else if (i == self.GUIPos)
- {
- if(self.GUILevel==0)
- {
- if(i == 1)
- {
- strtext = "^1CLOSE THIS MENU(^3[{+actionslot 2}]^1)";
- self.GUI[i] setText(strtext);
- }
- else if(i == 2)
- {
- strtext = "^1KICK PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 3)
- {
- strtext = "^1BAN PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 4)
- {
- strtext = "^1FREEZE PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 5)
- {
- strtext = "^1MOVE PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 6)
- {
- strtext = "^1TELEPORT PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 7)
- {
- strtext = "^1TELEPORT TO PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 8)
- {
- strtext = "^1KILL PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 9)
- {
- strtext = "^1MAKE AN IGLOO";
- self.GUI[i] setText(strtext);
- }
- else if(i == 10)
- {
- strtext = "^1REMOVE IGLOOS";
- self.GUI[i] setText(strtext);
- }
- else if(i == 11)
- {
- strtext = "^1CHANGE PLAYERS TEAM";
- self.GUI[i] setText(strtext);
- }
- else if(i == 12)
- {
- strtext = "^1GAME OPTIONS";
- self.GUI[i] setText(strtext);
- }
- }
- else if(self.GUILevel==101)//game options
- {
- if(i==1)
- {
- strtext = "^1<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else if(i==2)
- {
- strtext = "^1SET NEXTMAP(^7" + level.mapname[level.nextmap][1] + "^1)";
- self.GUI[i] setText(strtext);
- }
- else if(i==3)
- {
- strtext = "^1PROCEED WITH THE MAPCHANGE (^7" + level.mapname[level.nextmap][1] + "^1)";
- self.GUI[i] setText(strtext);
- }
- else if(i==4)
- {
- strtext = "^1CHANGE GAMETYPE";
- self.GUI[i] setText(strtext);
- }
- else if(i==5)
- {
- if(self.tempnum>=2)strtext = "<< ^1TIMELIMIT ("+self.tempnum+" MINUTES) ^7>>";
- else if(self.tempnum==1)strtext = "<< ^1TIMELIMIT ("+self.tempnum+" MINUTE) ^7>>";
- else strtext = "<< ^1TIMELIMIT (UNLIMITED) ^7>>";
- self.GUI[i] setText(strtext);
- }
- else if(i==6)
- {
- if(self.tempnum>0)strtext = "<< ^1SCORELIMIT ("+self.tempnum+" POINTS) ^7>>";
- else strtext = "<< ^1SCORELIMIT (UNLIMITED) ^7>>";
- self.GUI[i] setText(strtext);
- }
- else if(i==7)
- {
- if(self.tempnum>=2)strtext = "<< ^1ROUNDLIMIT ("+self.tempnum+" ROUNDS) ^7>>";
- else if(self.tempnum==1)strtext = "<< ^1ROUNDLIMIT ("+self.tempnum+" ROUND) ^7>>";
- else strtext = "<< ^1ROUNDLIMIT (UNLIMITED) ^7>>";
- self.GUI[i] setText(strtext);
- }
- else if(i==8)
- {
- strtext = "^1MAP RESTART";
- self.GUI[i] setText(strtext);
- }
- else if(i==9)
- {
- strtext = "^1END THE GAME";
- self.GUI[i] setText(strtext);
- }
- else if(i==10)
- {
- if(level.hardcore) strtext = "^1HARDCORE: ^2ON";
- else strtext = "^1HARDCORE: OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==11)
- {
- if(level.diehard) strtext = "^1DIEHARD: ^2ON";
- else strtext = "^1DIEHARD: OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==12)
- {
- if(level.ffind==1) strtext = "^1FRIENDLY FIRE: ^2ON^1; SHOOTBACK: OFF";
- else if(level.ffind==2) strtext = "^1FRIENDLY FIRE: ^2ON^1; SHOOTBACK: ^2ON";
- else strtext = "^1FRIENDLY FIRE: OFF; SHOOTBACK: OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==13)
- {
- if(level.spect==1) strtext = "^1SPECTATOR: ^2ON^1; FREESPEC: OFF";
- else if(level.spect==2) strtext = "^1SPECTATOR: ^2ON^1; FREESPEC: ^2ON";
- else strtext = "^1SPECTATOR: OFF; FREESPEC: OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==14)
- {
- if(level.forcerespawn==1) strtext = "^1FORCE RESPAWN: ^2ON";
- else strtext = "^1FORCE RESPAWN: OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==15)
- {
- if(level.golobby==0) strtext = "^1MAPROTATION: ^2ON";
- else strtext = "^1MAPROTATION: OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==16)
- {
- if(level.glind==1) strtext = "^1FORBID GL: ^2ON";
- else strtext = "^1FORBID GL: OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==17)
- {
- strtext = "^1CHANGE MOD";
- self.GUI[i] setText(strtext);
- }
- }
- else if(self.GUILevel == 1011)
- {
- if(i==1&&self.mapslide==0)
- {
- strtext = "^1<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else
- {
- strtext = "^1"+level.mapname[(i-2)+self.mapslide][1];
- self.GUI[i] setText(strtext);
- }
- }
- else if(self.GUILevel==1012)//gamemode
- {
- if(i==1)
- {
- strtext = "^1<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else if(i==2)
- {
- strtext = "^1TEAM DEATHMATCH";
- self.GUI[i] setText(strtext);
- }
- else if(i==3)
- {
- strtext = "^1FREE FOR ALL";
- self.GUI[i] setText(strtext);
- }
- else if(i==4)
- {
- strtext = "^1DOMINATION";
- self.GUI[i] setText(strtext);
- }
- else if(i==5)
- {
- strtext = "^1SEARCH AND DESTROY";
- self.GUI[i] setText(strtext);
- }
- else if(i==6)
- {
- strtext = "^1SABOTAGE";
- self.GUI[i] setText(strtext);
- }
- else if(i==7)
- {
- strtext = "^1CAPTURE THE FLAG";
- self.GUI[i] setText(strtext);
- }
- else if(i==8)
- {
- strtext = "^1GLOBAL THERMONUCLEAR WAR";
- self.GUI[i] setText(strtext);
- }
- else if(i==9)
- {
- strtext = "^1ARENA";
- self.GUI[i] setText(strtext);
- }
- else if(i==10)
- {
- strtext = "^1DEMOLITION";
- self.GUI[i] setText(strtext);
- }
- }
- else if(self.GUILevel == 1013)//mod
- {
- if(i==1)
- {
- strtext = "^1<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else if(i<level.modname.size+2)
- {
- strtext = "^1"+level.modname[(i-2)][1]+"";
- self.GUI[i] setText(strtext);
- }
- }
- else if(self.GUILevel==51)
- {
- if(level.teamBased)
- {
- if(level.players[i-2].pers["team"] == self.pers["team"])
- {
- strtext = (i-2) + ": ^8Friendly ^4" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- else
- {
- strtext = (i-2) + ": ^9Enemy ^4" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- else
- {
- strtext = (i-2) + ": ^4" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- else
- {
- if(i == 1)
- {
- strtext = "^1<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else
- {
- if(IsAlive(level.players[i-2]))
- {
- if(level.teamBased)
- {
- if(level.players[i-2].pers["team"] == self.pers["team"])
- {
- strtext = (i-2) + ": ^8Friendly ^1" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- else
- {
- strtext = (i-2) + ": ^9Enemy ^1" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- else
- {
- strtext = (i-2) + ": ^1" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- else
- {
- if(level.teamBased)
- {
- if(level.players[i-2].pers["team"] == self.pers["team"])
- {
- strtext = (i-2) + ": ^2[*]^8Friendly ^1" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- else
- {
- strtext = (i-2) + ": ^2[*]^9Enemy ^1" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- else
- {
- strtext = (i-2) + ": ^2[*]^1" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- }
- }
- }
- else
- {
- if(self.GUILevel==0)
- {
- if(i == 1)
- {
- strtext = "CLOSE THIS MENU(^3[{+actionslot 2}]^7)";
- self.GUI[i] setText(strtext);
- }
- else if(i == 2)
- {
- strtext = "KICK PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 3)
- {
- strtext = "BAN PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 4)
- {
- strtext = "FREEZE PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 5)
- {
- strtext = "MOVE PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 6)
- {
- strtext = "TELEPORT PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 7)
- {
- strtext = "TELEPORT TO PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 8)
- {
- strtext = "KILL PLAYER";
- self.GUI[i] setText(strtext);
- }
- else if(i == 9)
- {
- strtext = "MAKE AN IGLOO";
- self.GUI[i] setText(strtext);
- }
- else if(i == 10)
- {
- strtext = "REMOVE IGLOOS";
- self.GUI[i] setText(strtext);
- }
- else if(i == 11)
- {
- strtext = "CHANGE PLAYERS TEAM";
- self.GUI[i] setText(strtext);
- }
- else if(i == 12)
- {
- strtext = "GAME OPTIONS";
- self.GUI[i] setText(strtext);
- }
- else self.GUI[i] setText("");
- }
- else if(self.GUILevel==101)//game options
- {
- if(i==1)
- {
- strtext = "<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else if(i==2)
- {
- strtext = "SET NEXTMAP(" + level.mapname[level.nextmap][1] + "^7)";
- self.GUI[i] setText(strtext);
- }
- else if(i==3)
- {
- strtext = "PROCEED WITH THE MAPCHANGE (" + level.mapname[level.nextmap][1] + "^7)";
- self.GUI[i] setText(strtext);
- }
- else if(i==4)
- {
- strtext = "CHANGE GAMETYPE";
- self.GUI[i] setText(strtext);
- }
- else if(i==5)
- {
- if(level.timelimit>1)strtext = "TIMELIMIT ("+level.timelimit+" MINUTES)";
- else if(level.timelimit>0)strtext = "TIMELIMIT ("+level.timelimit+" MINUTE)";
- else strtext = "TIMELIMIT (UNLIMITED)";
- self.GUI[i] setText(strtext);
- }
- else if(i==6)
- {
- if(level.scorelimit>0)strtext = "SCORELIMIT ("+level.scorelimit+" POINTS)";
- else strtext = "SCORELIMIT (UNLIMITED)";
- self.GUI[i] setText(strtext);
- }
- else if(i==7)
- {
- if(level.winlimit>1)strtext = "ROUNDLIMIT ("+level.winlimit+" ROUNDS)";
- else if(level.winlimit>0)strtext = "ROUNDLIMIT ("+level.winlimit+" ROUND)";
- else strtext = "ROUNDLIMIT (UNLIMITED)";
- self.GUI[i] setText(strtext);
- }
- else if(i==8)
- {
- strtext = "MAP RESTART";
- self.GUI[i] setText(strtext);
- }
- else if(i==9)
- {
- strtext = "END THE GAME";
- self.GUI[i] setText(strtext);
- }
- else if(i==10)
- {
- if(level.hardcore) strtext = "HARDCORE: ^2ON";
- else strtext = "HARDCORE: ^1OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==11)
- {
- if(level.diehard) strtext = "DIEHARD: ^2ON";
- else strtext = "DIEHARD: ^1OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==12)
- {
- if(level.ffind==1) strtext = "FRIENDLY FIRE: ^2ON^7; SHOOTBACK: ^1OFF";
- else if(level.ffind==2) strtext = "FRIENDLY FIRE: ^2ON^7; SHOOTBACK: ^2ON";
- else strtext = "FRIENDLY FIRE: ^1OFF^7; SHOOTBACK: ^1OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==13)
- {
- if(level.spect==1) strtext = "SPECTATOR: ^2ON^7; FREESPEC: ^1OFF";
- else if(level.spect==2) strtext = "SPECTATOR: ^2ON^7; FREESPEC: ^2ON";
- else strtext = "SPECTATOR: ^1OFF^7; FREESPEC: ^1OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==14)
- {
- if(level.forcerespawn==1) strtext = "FORCE RESPAWN: ^2ON";
- else strtext = "FORCE RESPAWN: ^1OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==15)
- {
- if(level.golobby==0) strtext = "MAPROTATION: ^2ON";
- else strtext = "MAPROTATION: ^1OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==16)
- {
- if(level.glind==1) strtext = "FORBID GL: ^2ON";
- else strtext = "FORBID GL: ^1OFF";
- self.GUI[i] setText(strtext);
- }
- else if(i==17)
- {
- strtext = "CHANGE MOD";
- self.GUI[i] setText(strtext);
- }
- else self.GUI[i] setText("");
- }
- else if(self.GUILevel == 1011)//nextmap
- {
- if(i==1&&self.mapslide==0)
- {
- strtext = "<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else
- {
- strtext = level.mapname[(i-2)+self.mapslide][1]+"";
- self.GUI[i] setText(strtext);
- }
- }
- else if(self.GUILevel==1012)//gamemode
- {
- if(i==1)
- {
- strtext = "<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else if(i==2)
- {
- strtext = "TEAM DEATHMATCH";
- self.GUI[i] setText(strtext);
- }
- else if(i==3)
- {
- strtext = "FREE FOR ALL";
- self.GUI[i] setText(strtext);
- }
- else if(i==4)
- {
- strtext = "DOMINATION";
- self.GUI[i] setText(strtext);
- }
- else if(i==5)
- {
- strtext = "SEARCH AND DESTROY";
- self.GUI[i] setText(strtext);
- }
- else if(i==6)
- {
- strtext = "SABOTAGE";
- self.GUI[i] setText(strtext);
- }
- else if(i==7)
- {
- strtext = "CAPTURE THE FLAG";
- self.GUI[i] setText(strtext);
- }
- else if(i==8)
- {
- strtext = "GLOBAL THERMONUCLEAR WAR";
- self.GUI[i] setText(strtext);
- }
- else if(i==9)
- {
- strtext = "ARENA";
- self.GUI[i] setText(strtext);
- }
- else if(i==10)
- {
- strtext = "DEMOLITION";
- self.GUI[i] setText(strtext);
- }
- else self.GUI[i] setText("");
- }
- else if(self.GUILevel == 1013)//mod
- {
- if(i==1)
- {
- strtext = "<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else if(i<level.modname.size+2)
- {
- strtext = level.modname[(i-2)][1]+"";
- self.GUI[i] setText(strtext);
- }
- else self.GUI[i] setText("");
- }
- else
- {
- if(i == 1)
- {
- strtext = "<--GO BACK";
- self.GUI[i] setText(strtext);
- }
- else
- {
- if(IsAlive(level.players[i-2]))
- {
- if(level.teamBased)
- {
- if(level.players[i-2].pers["team"] == self.pers["team"])
- {
- strtext = (i-2) + ": ^8Friendly ^7" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- else
- {
- strtext = (i-2) + ": ^9Enemy ^7" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- else
- {
- strtext = (i-2) + ": " + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- else
- {
- if(level.teamBased)
- {
- if(level.players[i-2].pers["team"] == self.pers["team"])
- {
- strtext = (i-2) + ": ^2[*]^8Friendly ^7" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- else
- {
- strtext = (i-2) + ": ^2[*]^9Enemy ^7" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- else
- {
- strtext = (i-2) + ": ^2[*]^7" + level.players[i-2].name;
- self.GUI[i] setText(strtext);
- }
- }
- }
- }
- }
- self.GUIIsUp = 1;
- }
- }
- else if(self.GUIIsUP==1)
- {
- for(i = 0; i < 20; i++)
- {
- self.GUI[i] setText("");
- }
- self.GUIIsUp = 0;
- wait 0.2;
- }
- else
- {
- wait 0.15;
- }
- wait 0.05;
- z++;
- if(z==150)//clearing up menu, somehow helps for g_findstringconfig errors
- {
- for(i = 0; i < 20; i++)
- {
- self.GUI[i] setText("");
- }
- for(i = 0; i < 20; i++)
- {
- self.GUI[i] destroy();
- self.GUI[i] delete();
- }
- self.GUI = [];
- for(i = 0; i < 20; i++)
- {
- self.GUI[i] = self createFontString( "default", 1.5 );
- self.GUI[i] setPoint( "CENTER", "CENTER", 0, (-1)*((19)/2)*20+i*20 );
- }
- for(i = 0; i < 20; i++)
- {
- self.GUI[i] setText("");
- }
- z=0;
- }
- }
- }
- RunButtons(){
- self endon ( "disconnect" );
- for( ;; )
- {
- if (self.GUIIsUp==1)
- {
- if (self.buttonS == 1)
- {
- if(self.GUILevel==51)//Moving someone
- {
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove setOrigin((PersonToMove.origin + (-30,0,0)));
- }
- else
- {
- if(self.GUILevel==0)
- {
- if (self.GUIPos < 12)
- {
- self.GUIPos += 1;
- }
- else
- {
- self.GUIPos = 1;
- }
- }
- else if(self.GUILevel==101)//game options
- {
- if (self.GUIPos < 17)
- {
- self.GUIPos += 1;
- if(self.GUIPos==5)
- {
- self.tempnum = level.timelimit;
- self.wsp=1;
- }
- else if(self.GUIPos==6)
- {
- self.tempnum = level.scorelimit;
- self.wsp=100;
- }
- else if(self.GUIPos==7)
- {
- self.tempnum = level.winlimit;
- self.wsp=1;
- }
- }
- else
- {
- self.GUIPos = 1;
- }
- }
- else if(self.GUILevel==1012)//gametype
- {
- if (self.GUIPos < 10)
- {
- self.GUIPos += 1;
- }
- else
- {
- self.GUIPos = 1;
- }
- }
- else if(self.GUILevel==1013)//mod
- {
- if (self.GUIPos < level.modname.size+2)
- {
- self.GUIPos += 1;
- }
- else
- {
- self.GUIPos = 1;
- }
- }
- else if(self.GUILevel==1011)//nextmap
- {
- if (self.GUIPos != 17&&self.GUIPos <19)
- {
- self.GUIPos += 1;
- }
- else if(self.GUIPos==17)
- {
- if(self.mapslide+19<level.mapnamesize)
- {
- self.mapslide++;
- }
- else
- {
- self.GUIPos++;
- }
- }
- else
- {
- self.GUIPos = 1;
- self.mapslide = 0;
- }
- }
- else
- {
- if (self.GUIPos < self.GUIPlayerAmount+1)
- {
- self.GUIPos += 1;
- }
- else
- {
- self.GUIPos = 1;
- }
- }
- wait 0.07;
- }
- }
- if (self.buttonW == 1)
- {
- if(self.GUILevel==51)//Moving someone
- {
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove setOrigin((PersonToMove.origin + (30,0,0)));
- }
- else
- {
- if(self.GUILevel==1011)//nexmap
- {
- if (self.GUIPos != 3&&self.GUIPos >1)
- {
- self.GUIPos -= 1;
- }
- else if(self.GUIPos==3)
- {
- if(self.mapslide>0)
- {
- self.mapslide--;
- }
- else
- {
- self.GUIPos--;
- }
- }
- else
- {
- self.GUIPos = 19;
- self.mapslide = level.mapnamesize-19;
- }
- }
- else if (self.GUIPos > 1)
- {
- self.GUIPos -= 1;
- if(self.GUILevel==101)
- {
- if(self.GUIPos==5)
- {
- self.tempnum = level.timelimit;
- self.wsp=1;
- }
- else if(self.GUIPos==6)
- {
- self.tempnum = level.scorelimit;
- self.wsp=100;
- }
- else if(self.GUIPos==7)
- {
- self.tempnum = level.winlimit;
- self.wsp=1;
- }
- }
- }
- else
- {
- if(self.GUILevel==0)
- {
- self.GUIPos = 12;
- }
- else if(self.GUILevel==101)//game options
- {
- self.GUIPos = 17;
- }
- else if(self.GUILevel==1012)//gamemode
- {
- self.GUIPos = 10;
- }
- else if(self.GUILevel==1013)//mod
- {
- self.GUIPos = level.modname.size+2;
- }
- else{
- self.GUIPos = self.GUIPlayerAmount+1;
- }
- }
- wait 0.07;
- }
- }
- if(self.GUILevel==101&&self.GUIpos==5)//timelimit
- {
- if (self.buttonD == 1)
- {
- if(self.tempnum<(180-self.wsp))
- {
- self.tempnum+=self.wsp;
- if(self.wsp<5)
- {
- self.wsp++;
- }
- }
- else
- {
- self.tempnum=180;
- }
- wait 0.05;
- }
- else if (self.buttonA == 1)
- {
- if(self.tempnum>=self.wsp)
- {
- self.tempnum-=self.wsp;
- if(self.wsp<5)
- {
- self.wsp++;
- }
- }
- else
- {
- self.tempnum=0;
- }
- wait 0.05;
- }
- else
- {
- self.wsp = 1;
- }
- }
- if(self.GUILevel==101&&self.GUIpos==6)//scorelimit
- {
- if (self.buttonD == 1)
- {
- if(self.tempnum<(150000-self.wsp))
- {
- self.tempnum+=self.wsp;
- if(self.wsp<2000)
- {
- self.wsp+=100;
- }
- }
- else
- {
- self.tempnum=150000;
- }
- wait 0.05;
- }
- else if (self.buttonA == 1)
- {
- if(self.tempnum>=self.wsp)
- {
- self.tempnum-=self.wsp;
- if(self.wsp<2000)
- {
- self.wsp+=100;
- }
- }
- else
- {
- self.tempnum=0;
- }
- wait 0.05;
- }
- else
- {
- self.wsp = 100;
- }
- }
- if(self.GUILevel==101&&self.GUIpos==7)//roundlimit
- {
- if (self.buttonD == 1)
- {
- if(self.tempnum<(100-self.wsp))
- {
- self.tempnum+=self.wsp;
- if(self.wsp<5)
- {
- self.wsp++;
- }
- }
- else
- {
- self.tempnum=100;
- }
- wait 0.05;
- }
- else if (self.buttonA == 1)
- {
- if(self.tempnum>=self.wsp)
- {
- self.tempnum-=self.wsp;
- if(self.wsp<5)
- {
- self.wsp++;
- }
- }
- else
- {
- self.tempnum=0;
- }
- wait 0.05;
- }
- else
- {
- self.wsp = 1;
- }
- }
- if(self.GUILevel==51){
- if (self.buttonD == 1)
- {
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove setOrigin((PersonToMove.origin + (0,30,0)));
- }
- if (self.buttonA == 1)
- {
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove setOrigin((PersonToMove.origin + (0,-30,0)));
- }
- if (self.buttonE == 1)
- {
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove setOrigin((PersonToMove.origin + (0,0,30)));
- }
- if (self.buttonQ == 1)
- {
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove setOrigin((PersonToMove.origin + (0,0,-30)));
- }
- }
- if (self.buttonF == 1)
- {
- self.buttonF = 0;
- if(self.GUILevel==0)//main menu
- {
- if(self.GUIPos==1)
- {
- self.GUIShow = 0;
- }
- else if(self.GUIPos==2)//kick
- {
- self.GUILevel=1;
- self.GUIPos=1;
- }
- else if(self.GUIPos==3)//ban
- {
- self.GUILevel=2;
- self.GUIPos=1;
- }
- else if(self.GUIPos==4)//freeze
- {
- self.GUILevel=3;
- self.GUIPos=1;
- }
- else if(self.GUIPos==5)//move
- {
- self.GUILevel=5;
- self.GUIPos=1;
- }
- else if(self.GUIPos==6)//teleport
- {
- self.GUILevel=6;
- self.GUIPos=1;
- }
- else if(self.GUIPos==7)//teleport_to
- {
- self.GUILevel=7;
- self.GUIPos=1;
- }
- else if(self.GUIPos==8)//kill
- {
- self.GUILevel=8;
- self.GUIPos=1;
- }
- else if(self.GUIPos==9)//igloo
- {
- self.GUILevel=9;
- self.GUIPos=1;
- }
- else if(self.GUIPos==10)//clearigloos
- {
- ClearBricks();
- }
- else if(self.GUIPos==11)//change team
- {
- self.GUILevel=10;
- self.GUIPos=1;
- }
- else if(self.GUIPos==12)//game options
- {
- self.GUILevel=101;
- self.GUIPos=1;
- }
- }
- else if(self.GUILevel==1)//kick
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- PersonToKick = level.players[self.GUIPos-2];
- if (!(PersonToKick isHost()))
- {
- self.GUIShow = 0;
- self.GUILevel=0;
- for ( i = 0; i < level.players.size; i++ )
- {
- level.players[i] iPrintln(PersonToKick.name + " was kicked by admin.");
- }
- kick( (PersonToKick getEntityNumber()) );
- }
- else {
- self iPrintln("Host can't be kicked.");
- }
- }
- }
- else if(self.GUILevel==2)//ban
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- PersonToBan = level.players[self.GUIPos-2];
- if (!(PersonToBan isHost()))
- {
- self.GUIShow = 0;
- self.GUILevel=0;
- for ( i = 0; i < level.players.size; i++ )
- {
- level.players[i] iPrintln(PersonToBan.name + " was banned by admin.");
- }
- ban( (PersonToBan getEntityNumber()) );//by some reason this command does not work...
- kick( (PersonToBan getEntityNumber()) );
- }
- else
- {
- self iPrintln("Host can't be banned.");
- }
- }
- }
- else if(self.GUILevel==3)//freeze
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- PersonToFreeze = level.players[self.GUIPos-2];
- if (!(PersonToFreeze isHost()))
- {
- if(!PersonToFreeze.beingmoved==0)
- {
- self iPrintln("Person is busy...");
- }
- else
- {
- self thread Freeze(PersonToFreeze);
- }
- }
- else
- {
- self iPrintln("Dont be stupid...");
- }
- }
- }
- else if(self.GUILevel==5)//move
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- PersonToMove = level.players[self.GUIPos-2];
- if (IsAlive(PersonToMove))
- {
- self.GUILevel=51;
- self.PersonMarked = level.players[self.GUIPos-2];
- PersonToMove.freezed = 1;
- PersonToMove freezeControls(true);
- PersonToMove.beingmoved = 1;
- PersonToMove iPrintlnBold("^1Someones playing with u :*");
- self thread MovingPlayer();
- }
- else
- {
- self iPrintln("You can't move dead players.");
- }
- }
- }
- else if(self.GUILevel==51)//moving someone
- {
- self.GUILevel=5;
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove.freezed = 0;
- PersonToMove.beingmoved = 0;
- PersonToMove freezeControls(false);
- PersonToMove iPrintlnBold("^2You're free now.");
- }
- else if(self.GUILevel==6)//teleport
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- PersonToTeleport = level.players[self.GUIPos-2];
- if (!(PersonToTeleport isHost())&&!(PersonToTeleport == self))
- {
- if(!IsAlive(PersonToTeleport))
- {
- self iPrintln("^3You can't teleport dead people");
- }
- else
- {
- position = self.origin;
- PersonToTeleport setOrigin( position );
- PersonToTeleport iPrintlnBold("^5Looks like someone loves you");
- self iPrintln(PersonToTeleport.name + " teleported.");
- }
- }
- else
- {
- self iPrintln("You gotta be kiddin me...");
- }
- }
- }
- else if(self.GUILevel==7)//teleport_to
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- PersonToTeleport = level.players[self.GUIPos-2];
- if (!(PersonToTeleport isHost())&&!(PersonToTeleport == self))
- {
- if(!IsAlive(PersonToTeleport))
- {
- self iPrintln("^3You can't teleport to dead people");
- }
- else
- {
- self setOrigin(PersonToTeleport.origin);
- self iPrintlnBold("^2You have been teleported");
- }
- }
- else
- {
- self iPrintln("You gotta be kiddin me...");
- }
- }
- }
- else if(self.GUILevel==8)//kill
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- PersonToKill = level.players[self.GUIPos-2];
- if (isAlive(PersonToKill))
- {
- self.GUILevel=0;
- self.GUIPos=1;
- for ( i = 0; i < level.players.size; i++ )
- {
- level.players[i] iPrintln(PersonToKill.name + " was killed by admin.");
- }
- PersonToKill suicide();
- }
- else
- {
- self iPrintln("^3You can't kill dead players.");
- }
- }
- }
- else if(self.GUILevel==9)//Igloo
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- PersonToBlock = level.players[self.GUIPos-2];
- if(!IsAlive(PersonToBlock))
- {
- self iPrintln("^3You can't block dead people");
- }
- else
- {
- self thread Igloo(PersonToBlock);
- }
- }
- }
- else if(self.GUILevel==10)//change team
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else if(level.teambased ==1)
- {
- PersonToChange = level.players[self.GUIPos-2];
- if(PersonToChange.pers["team"]=="axis")
- {
- PersonToChange notify("menuresponse", game["menu_team"], "allies");
- }
- else
- {
- PersonToChange notify("menuresponse", game["menu_team"], "axis");
- }
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintln(PersonToChange.name + " have changed his team(thx admin).");
- }
- }
- }
- else if(self.GUILevel==101)//game options
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=0;
- }
- else
- {
- if(self.GUIPos==2)//nextmap
- {
- self.GUILevel=1011;
- self.mapslide=0;
- self.GUIPos = 1;
- }
- else if(self.GUIPos==3)//changemap
- {
- self thread changeMap(level.nextmap);
- }
- else if(self.GUIPos==4)//gametype
- {
- self.GUILevel=1012;
- self.GUIPos = 1;
- }
- else if(self.GUIPos==5)//timelimit
- {
- if(level.timelimit!=self.tempnum)
- {
- level.timelimit = self.tempnum;
- changeTimelimit(level.timelimit);
- }
- }
- else if(self.GUIPos==6)//scorelimit
- {
- if(level.scorelimit!=self.tempnum)
- {
- level.scorelimit = self.tempnum;
- changeScorelimit(level.scorelimit);
- }
- }
- else if(self.GUIPos==7)//winlimit
- {
- if(level.winlimit!=self.tempnum)
- {
- level.winlimit = self.tempnum;
- changeWinlimit(level.winlimit);
- }
- }
- else if(self.GUIPos==8)//map_restart
- {
- self thread restartMap();
- }
- else if(self.GUIPos==9)//go to lobby
- {
- level thread maps\mp\gametypes\_gamelogic::forceEnd();
- setNextMap(-1);
- }
- else if(self.GUIPos==10)//hardcore
- {
- self thread toggleHardcore();
- }
- else if(self.GUIPos==11)//diehard
- {
- self thread toggleDieHard();
- }
- else if(self.GUIPos==12)//friendlyfire
- {
- self thread toggleFF();
- }
- else if(self.GUIPos==13)//spectator
- {
- self thread toggleSpec();
- }
- else if(self.GUIPos==14)//forcerespawn
- {
- self thread toggleRespawn();
- }
- else if(self.GUIPos==15)//maprotation
- {
- self thread toggleMaprotation();
- }
- else if(self.GUIPos==16)//gltoggle
- {
- self thread toggleGL();
- }
- else if(self.GUIPos==17)//modchange
- {
- self.GUILevel=1013;
- self.GUIPos = 1;
- }
- }
- }
- else if(self.GUILevel==1011)//mapnext
- {
- if(self.GUIPos==1&&self.mapslide==0)
- {
- self.GUILevel=101;
- }
- else
- {
- level.nextmap = (self.GUIPos-2)+self.mapslide;
- setNextMap(level.nextmap);
- self.GUILevel=101;
- self.mapslide=0;
- self.GUIPos = 1;
- }
- }
- else if(self.GUILevel==1012)//gametype
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=101;
- }
- else
- {
- self thread changeGametype(self.GUIPos-2);
- self.GUILevel=101;
- self.GUIPos = 1;
- }
- }
- else if(self.GUILevel==1013)//mod
- {
- if(self.GUIPos==1)
- {
- self.GUILevel=101;
- }
- else
- {
- level.modnum = (self.GUIPos-2);
- self thread changeMod();
- self.GUILevel=101;
- self.GUIPos = 1;
- }
- }
- }
- }
- if(self.button5==1)
- {
- self.button5 = 0;
- if(self.GUIShow==0)self.GUIShow = 1;
- else
- {
- self.GUIShow = 0;
- if(self.GUILevel==51){
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove.freezed = 0;
- PersonToMove freezeControls(false);
- PersonToMove.beingmoved = 0;
- PersonToMove iPrintlnBold("^2You're free now.");
- }
- self.GUILevel=0;
- self.GUIPos=1;
- self.mapslide=0;
- }
- }
- wait 0.05;
- }
- }
- changeMod()
- {
- self endon("disconnect");
- if(self isHost())
- {
- if(level.modname[level.modnum][0]!=getDvar("fs_game"))
- {
- setDvar("fs_game", level.modname[level.modnum][0]);
- for(i = 3; i>0;i--)
- {
- for(j = 0; j < level.players.size; j++)
- {
- level.players[j] iPrintlnBold("^1Changing Mod to ^7" + level.modname[level.modnum][1] + "^1 in " + i + "...");
- }
- wait 1;
- }
- map(getDvar("ui_mapname"));
- }
- }
- else
- {
- for(i = 0; i<level.players.size;i++)
- {
- if(level.players[i] isHost())
- {
- level.players[i] notify("change_mod");
- break;
- }
- }
- }
- }
- changeModHandler()
- {
- self endon("disconnect");
- self notifyOnPlayerCommand("change_mod");
- wait 5;
- for(;;)
- {
- self waittill("change_mod");
- self thread changeMod();
- wait 1;
- }
- }
- getSL()
- {
- self endon("disconnect");
- gametype = getDvar("g_gametype");
- gametype = "scr_"+gametype+"_scorelimit";
- return getDvarInt(gametype);
- }
- changeScorelimit(num)
- {
- self endon("disconnect");
- gametype = getDvar("g_gametype");
- gametype = "scr_"+gametype+"_scorelimit";
- setDvar(gametype, num+"");
- if(num>0)
- {
- self iPrintln("Score Limit changed to " + num + " points.");
- }
- else
- {
- self iPrintln("Score Limit turned off.");
- }
- }
- getWL()
- {
- self endon("disconnect");
- gametype = getDvar("g_gametype");
- gametype = "scr_"+gametype+"_winlimit";
- return getDvarInt(gametype);
- }
- changeWinlimit(num)
- {
- self endon("disconnect");
- gametype = getDvar("g_gametype");
- gametype = "scr_"+gametype+"_winlimit";
- setDvar(gametype, num+"");
- if(num>1)
- {
- self iPrintln("Round Limit changed to " + num + " rounds");
- }
- else if(num>0)
- {
- self iPrintln("Round Limit changed to 1 round");
- }
- else
- {
- self iPrintln("Round Limit turned off");
- }
- }
- getTL()
- {
- self endon("disconnect");
- gametype = getDvar("g_gametype");
- gametype = "scr_"+gametype+"_timelimit";
- return getDvarInt(gametype);
- }
- changeTimelimit(num)
- {
- self endon("disconnect");
- gametype = getDvar("g_gametype");
- gametype = "scr_"+gametype+"_timelimit";
- setDvar(gametype, num+"");
- if(num==0)
- {
- self iPrintln("Time Limit turned off");
- }
- else if(num==1)
- {
- self iPrintln("Time Limit changed to 1 minute");
- }
- else
- {
- self iPrintln("Time Limit changed to " + num + " minutes");
- }
- }
- toggleRespawn()
- {
- self endon("disconnect");
- if(level.forcerespawn)
- {
- setDvar("scr_player_forcerespawn", "0");
- level.forcerespawn = 0;
- }
- else
- {
- setDvar("scr_player_forcerespawn", "1");
- level.forcerespawn = 1;
- }
- }
- toggleFF()
- {
- self endon("disconnect");
- if(level.ffind==1)
- {
- setDvar("scr_team_fftype", "2");
- level.ffind = 2;
- return;
- }
- else if(level.ffind==2)
- {
- setDvar("scr_team_fftype", "0");
- level.ffind = 0;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^2FRIENDLY FIRE IS OFF");
- }
- return;
- }
- else
- {
- setDvar("scr_team_fftype", "1");
- level.ffind = 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1FRIENDLY FIRE IS ON");
- }
- return;
- }
- self iPrintln("^1ERROR:^7 Couldn't change FriendlyFire.");
- }
- toggleDieHard()
- {
- self endon("disconnect");
- if(level.diehard)
- {
- setDvar("scr_diehard", "0");
- level.diehard = 0;
- }
- else
- {
- setDvar("scr_diehard", "1");
- level.diehard = 1;
- }
- }
- toggleHardcore()
- {
- self endon("disconnect");
- if(level.hardcore)
- {
- setDvar("g_hardcore", "0");
- level.hardcore = 0;
- if(!level.restart)level.restart=1;
- }
- else
- {
- setDvar("g_hardcore", "1");
- level.hardcore = 1;
- if(!level.restart)level.restart=1;
- }
- }
- toggleSpec()
- {
- self endon("disconnect");
- if(level.spect==1)
- {
- setDvar("scr_game_spectatetype", "2");
- level.spect = 2;
- }
- else if(level.spect==2)
- {
- setDvar("scr_game_spectatetype", "0");
- level.spect = 0;
- }
- else
- {
- setDvar("scr_game_spectatetype", "1");
- level.spect = 1;
- }
- }
- toggleGL()
- {
- self endon("disconnect");
- if(level.glind==1)
- {
- level.glind=0;
- SaveSettings();
- }
- else
- {
- level.glind=1;
- SaveSettings();
- }
- }
- setNextMap(nextmap)
- {
- self endon("disconnect");
- nextmapname = level.mapname[nextmap][0];
- if(nextmap==-1)
- {
- setDvar("sv_maprotation", "");
- level.golobby = 1;
- }
- else
- {
- setDvar("sv_maprotation", nextmapname);
- level.nextmap = nextmap;
- level.golobby = 0;
- }
- }
- toggleMaprotation()
- {
- self endon("disconnect");
- if(level.golobby)
- {
- setNextMap(level.nextmap);
- }
- else
- {
- setNextMap(-1);
- }
- }
- changeMap(nextmap)
- {
- self endon("disconnect");
- if(level.changemapinprogress==1)
- {
- return;
- }
- level.changemapinprogress=1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1Changing map to " + level.mapname[nextmap][1] + "^1 in 3...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1Changing map to " + level.mapname[nextmap][1] + "^1 in 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1Changing map to " + level.mapname[nextmap][1] + "^1 in 1...");
- }
- wait 1;
- map(level.mapname[nextmap][0]);
- }
- restartMap()
- {
- self endon("disconnect");
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1Restarting map in 3...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1Restarting map in 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1Restarting map in 1...");
- }
- wait 1;
- map_restart();
- }
- changeGametype(num)
- {
- self endon("disconnect");
- switch(num)
- {
- case 0://tdm
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Team Deathmatch in 3...");
- }
- self iPrintln("^3 Switching to Team Deathmatch.");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Team Deathmatch 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Team Deathmatch 1...");
- }
- wait 1;
- setDvar("g_gametype", "war");
- setDvar("ui_gametype", "war");
- setDvar("party_teambased", "1");
- map_restart();
- break;
- case 1://dm
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Free For All in 3...");
- }
- self iPrintln("^3 Switching to Free For All");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Free For All 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Free For All 1...");
- }
- wait 1;
- setDvar("g_gametype", "dm");
- setDvar("ui_gametype", "dm");
- setDvar("party_teambased", "0");
- map_restart();
- break;
- case 2://dom
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Domination in 3...");
- }
- self iPrintln("^3 Switching to Domination");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Domination 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Domination 1...");
- }
- wait 1;
- setDvar("g_gametype", "dom");
- setDvar("ui_gametype", "dom");
- setDvar("party_teambased", "1");
- map_restart();
- break;
- case 3://sd
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Search and Destroy in 3...");
- }
- self iPrintln("^3 Switching to Search and Destroy.");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Search and Destroy 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Search and Destroy 1...");
- }
- wait 1;
- setDvar("g_gametype", "sd");
- setDvar("ui_gametype", "dom");
- setDvar("party_teambased", "1");
- map_restart();
- break;
- case 4://sab
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Sabotage in 3...");
- }
- self iPrintln("^3 Switching to Sabotage.");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Sabotage 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Sabotage 1...");
- }
- wait 1;
- setDvar("g_gametype", "sab");
- setDvar("ui_gametype", "sab");
- setDvar("party_teambased", "1");
- map_restart();
- break;
- case 5://ctf
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Capture the Flag in 3...");
- }
- self iPrintln("^3 Switching to Capture the Flag.");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Capture the Flag 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Capture the Flag 1...");
- }
- wait 1;
- setDvar("g_gametype", "ctf");
- setDvar("ui_gametype", "ctf");
- setDvar("party_teambased", "1");
- map_restart();
- break;
- case 6://global thermonuclear war
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Global Thermonuclear War in 3...");
- }
- self iPrintln("^3 Switching to Global Thermonuclear War.");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Global Thermonuclear War 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Global Thermonuclear War 1...");
- }
- wait 1;
- setDvar("g_gametype", "gtnw");
- setDvar("ui_gametype", "gtnw");
- setDvar("party_teambased", "1");
- map_restart();
- break;
- case 7://arena
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Arena in 3...");
- }
- self iPrintln("^3 Switching to Arena.");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Arena 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Arena 1...");
- }
- wait 1;
- setDvar("g_gametype", "arena");
- setDvar("ui_gametype", "arena");
- setDvar("party_teambased", "1");
- map_restart();
- break;
- case 8://demolition
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Demolition in 3...");
- }
- self iPrintln("^3 Switching to Demolition.");
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Demolition 2...");
- }
- wait 1;
- for(i = 0; i<level.players.size; i++)
- {
- level.players[i] iPrintlnBold("^1 Switching gametype to Demolition 1...");
- }
- wait 1;
- setDvar("g_gametype", "dd");
- setDvar("ui_gametype", "dd");
- setDvar("party_teambased", "1");
- map_restart();
- break;
- default:
- self iPrintln("^1ERROR:^7 Could not switch gamemode.");
- }
- }
- Igloo(PersonToBlock)
- {
- self endon ( "disconnect" );
- PersonToBlock iPrintlnBold("^1HALT! ^7BUILDING IN PROGRESS");
- self iPrintln("Building on " + PersonToBlock.name + " started.");
- position = PersonToBlock.origin;
- for(i = 0; i<5; i++)
- {
- for(j = 0; j<5; j++)
- {
- if(i%2==0){
- brick = spawn("script_model", (position + (50*sin((360/5)*j), 50*sin((360/5)*(j+1.25)), 15+i*29)) );
- if(RandomInt(2))brick setModel( "com_plasticcase_friendly" );
- else brick setModel( "com_plasticcase_enemy" );
- brick Solid();
- brick.angles = (0, -72*j, 0);
- brick CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
- AddBrick(brick);
- wait 0.1;
- }
- else
- {
- brick = spawn("script_model", (position + (50*sin((360/5)*j+2.5), 50*sin((360/5)*(j+3.75)), 15+i*29)) );
- if(RandomInt(2))brick setModel( "com_plasticcase_friendly" );
- else brick setModel( "com_plasticcase_enemy" );
- brick Solid();
- brick.angles = (0, 72*j, 0);
- brick CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
- AddBrick(brick);
- wait 0.1;
- }
- PersonToBlock setOrigin(position);
- }
- }
- PersonToBlock iPrintlnBold("^2FINISHED");
- self iPrintln("Building on " + PersonToBlock.name + " is over.");
- }
- AddBrick(Brick)
- {
- level.bricks[level.brickslength] = Brick;
- level.brickslength++;
- }
- ClearBricks()
- {
- for(i = level.brickslength;i>=0;i--)
- {
- level.bricks hide();
- level.bricks[i] delete();
- }
- level.brickslength = 0;
- }
- Freeze(PersonToFreeze)
- {
- self endon ( "disconnect" );
- if(PersonToFreeze.freezed==0)
- {
- PersonToFreeze.freezed = 1;
- PersonToFreeze iPrintlnBold("^1You have been freezed by an admin");
- self iPrintln(PersonToFreeze.name + " freezed");
- }
- else
- {
- PersonToFreeze.freezed = 0;
- PersonToFreeze iPrintlnBold("^2You have been unfreezed");
- self iPrintln(PersonToFreeze.name + " unfreezed");
- }
- for(;;)
- {
- if(!PersonToFreeze.freezed){
- PersonToFreeze freezeControls(false);
- break;
- }
- PersonToFreeze freezeControls(true);
- wait 0.1;
- }
- }
- MovingPlayer()
- {
- self endon( "disconnect" );
- error = 0;
- for(;;)
- {
- if(self.GUILevel!=51)
- {
- break;
- }
- if(self.PersonMarked!=level.players[self.GUIPos-2])
- {
- self iPrintln("Player at: " + (self.GUIPos-2) + " is not " + self.PersonMarked.name);
- for(i=0;i<level.players.size;i++)
- {
- if(level.players[i] == self.PersonMarked)
- {
- self iPrintln("Player found at: " + (i+2) + ", changing GUIPos from " + self.GUIPos);
- self.GUIPos = (i+2);
- error=0;
- break;
- }else if(i==level.players.size-1){
- error++;
- if(error>3)
- {
- self iPrintln("^3Player not found.");
- self iPrintln("^3Releasing " + (self.GUIPos-2) + " for safety.");
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove.freezed = 0;
- PersonToMove freezeControls(false);
- PersonToMove.beingmoved = 0;
- PersonToMove iPrintlnBold("^2You're free now.");
- self.PersonMarked.freezed = 0;
- self.PersonMarked.beingmoved = 0;
- self.PersonMarked freezeControls(false);
- self.GUILevel=5;
- if(self.GUIPos>=level.players.size) self.GUIPos=1;
- }
- }
- }
- }
- if(!IsAlive(level.players[self.GUIPos-2])){
- self iPrintln("^3Players Dead.");
- PersonToMove = level.players[self.GUIPos-2];
- PersonToMove.freezed = 0;
- PersonToMove.beingmoved = 0;
- self.GUILevel=5;
- }
- wait 0.1;
- }
- }
- monitorFb()
- {
- self endon ( "disconnect" );
- self.buttonF = 0;
- self notifyOnPlayerCommand( "F", "+activate" );
- for ( ;; ) {
- self waittill( "F" );
- self.buttonF = 1;
- wait 0.1;
- self.buttonF = 0;
- }
- }
- monitorWb()
- {
- self endon ( "disconnect" );
- self.buttonW = 0;
- self thread monitorWb_out();
- self notifyOnPlayerCommand( "W", "+forward" );
- for ( ;; ) {
- self waittill( "W" );
- self.buttonW = 1;
- wait 0.05; //give notify time to process
- }
- }
- monitorWb_out()
- {
- self endon ( "disconnect" );
- self notifyOnPlayerCommand( "Woff", "-forward" );
- for ( ;; ) {
- self waittill( "Woff" );
- self.buttonW = 0;
- wait 0.05;
- self.buttonW = 0;
- }
- }
- monitorSb()
- {
- self endon ( "disconnect" );
- self.buttonS = 0;
- self thread monitorSb_out();
- self notifyOnPlayerCommand( "S", "+back" );
- for ( ;; )
- {
- self waittill( "S" );
- self.buttonS = 1;
- wait 0.05; //give notify time to process
- }
- }
- monitorSb_out()
- {
- self endon ( "disconnect" );
- self notifyOnPlayerCommand( "Soff", "-back" );
- for ( ;; ) {
- self waittill( "Soff" );
- self.buttonS = 0;
- wait 0.05;
- self.buttonS = 0;
- }
- }
- monitorDb()
- {
- self endon ( "disconnect" );
- self.buttonD = 0;
- self thread monitorDb_out();
- self notifyOnPlayerCommand( "D", "+moveright" );
- for ( ;; ) {
- self waittill( "D" );
- self.buttonD = 1;
- wait 0.05; //give notify time to process
- }
- }
- monitorDb_out()
- {
- self endon ( "disconnect" );
- self notifyOnPlayerCommand( "Doff", "-moveright" );
- for ( ;; ) {
- self waittill( "Doff" );
- self.buttonD = 0;
- wait 0.05;
- self.buttonD = 0;
- }
- }
- monitorQb()
- {
- self endon ( "disconnect" );
- self.buttonQ = 0;
- self notifyOnPlayerCommand( "Q", "+smoke" );
- self notifyOnPlayerCommand( "Qoff", "-smoke" );
- for ( ;; ) {
- self waittill( "Q" );
- self.buttonQ = 1;
- self waittill( "Qoff" );
- self.buttonQ = 0;
- }
- }
- monitorEb()
- {
- self endon ( "disconnect" );
- self.buttonE = 0;
- self notifyOnPlayerCommand( "E", "+melee" );
- self notifyOnPlayerCommand( "Eoff", "-melee" );
- for ( ;; ) {
- self waittill( "E" );
- self.buttonE = 1;
- self waittill( "Eoff" );
- self.buttonE = 0;
- }
- }
- monitorAb()
- {
- self endon ( "disconnect" );
- self.buttonA = 0;
- self thread monitorAb_out();
- self notifyOnPlayerCommand( "A", "+moveleft" );
- for ( ;; ) {
- self waittill( "A" );
- self.buttonA = 1;
- wait 0.05; //give notify time to process
- }
- }
- monitorAb_out()
- {
- self endon ( "disconnect" );
- self notifyOnPlayerCommand( "Aoff", "-moveleft" );
- for ( ;; ) {
- self waittill( "Aoff" );
- self.buttonA = 0;
- wait 0.05;
- self.buttonA = 0;
- }
- }
- monitor5b()
- {
- self endon ( "disconnect" );
- self.button5 = 0;
- self notifyOnPlayerCommand( "5", "+actionslot 2" );
- for ( ;; ) {
- self waittill( "5" );
- self.button5 = 1;
- wait .1;
- self.button5 = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement