#include maps\mp\gametypes\_hud_util; #include maps\mp\_utility; #include common_scripts\utility; PowerUp(power) { self endon("death"); self endon("lvlup"); switch(power){ case 1: self _setPerk("specialty_thermal"); self VisionSetThermalForPlayer( "cobra_sunset3", 1 ); break; case 2: self.maxhealth *= 2; break; case 3: for(;;){ self SetMoveSpeedScale( 1.2 ); wait 0.05;} case 4: for(;;){ self setWeaponAmmoClip(self getCurrentWeapon(), 999); wait 0.01;} case 5: for(;;){ self ThermalVisionFOFOverlayOn(); wait 0.20; self ThermalVisionFOFOverlayOff(); wait 3;} case 6: for(;;){ self Hide(); wait 0.20; self Show(); wait 0.30;} case 7: for(;;){ self waittill("weapon_fired"); location = Hit(); MagicBullet( "ac130_25mm_mp", self getTagOrigin("tag_eye"), location, self );} case 8: for(;;){ self waittill("weapon_fired"); location = Hit(); MagicBullet( "ac130_40mm_mp", self getTagOrigin("tag_eye"), location, self );} case 9: self setClientDvar("r_blur", 2); break; } } Core() { self endon("winner_announced"); for(;;){ self waittill("killed_enemy"); self.power += 1; self notify("lvlup"); self UpdateText(); self SetMoveSpeedScale( 1.2 ); self ThermalVisionFOFOverlayOff(); self setClientDvar("r_blur", 0); self Show(); self SetMoveSpeedScale( 1 ); self.maxhealth = 100; self _unsetPerk("specialty_thermal"); self thread PowerUp(self.power); if(self.power >= 10){ level notify("winner_announced"); level.forcedEnd = true; level.hostForcedEnd = true; maps\mp\gametypes\_gamelogic::endGame( self.name, "www.youtube.com/mpkiller100" );}} } UpdateText() { self.powerText setText("Power-Up level: ["+self.power +"] "+level.powerDetail[self.power]); } Hit() { forward = self getTagOrigin("tag_eye"); vec = anglestoforward(self getPlayerAngles()); scale = 1000000; end = (vec[0] * scale, vec[1] * scale, vec[2] * scale); location = BulletTrace( forward, end, 0, self )[ "position" ]; return location; } onPlayerConnect() { for(;;) { level waittill( "connected", player ); if ( !isDefined( player.pers["postGameChallenges"] ) ) player.pers["postGameChallenges"] = 0; player thread onPlayerSpawned(); player thread onJoinedTeam(); player thread onPlayerDeath(); player thread initMissionData(); player thread Core(); player.powerText = player createFontString( "bigfixed", 0.6 ); player.powerText setPoint( "RIGHT", "RIGHT", -90, 165); } } init() { precacheString(&"MP_CHALLENGE_COMPLETED"); level thread createPerkMap(); level thread onPlayerConnect(); level.powerDetail[9] = "Blood Ruse"; level.powerDetail[8] = "Exploding Bullets"; level.powerDetail[7] = "FirePOWA"; level.powerDetail[6] = "Flashing"; level.powerDetail[5] = "Hyper Reality Visor"; level.powerDetail[4] = "Unlimited ammo"; level.powerDetail[3] = "Increased speed"; level.powerDetail[2] = "Doubled HP"; level.powerDetail[1] = "Alien vision"; level.powerDetail[0] = "Get kills to upgrade your powers \n Dieing will degrade them. \n First to 10 wins."; setDvar("scr_dm_scorelimit", 0); setDvar("scr_dom_scorelimit", 0); setDvar("scr_koth_scorelimit", 0); setDvar("scr_dd_scorelimit", 0); setDvar("scr_sd_scorelimit", 0); setDvar("scr_war_scorelimit", 0); setDvar("scr_ctf_scorelimit", 0); setDvar("scr_sab_scorelimit", 0); wait 600; foreach(player in level.players) player SumUp(); if(level.sum == "tie") maps\mp\gametypes\_gamelogic::endGame( "DRAW", "www.youtube.com/mpkiller100" ); else maps\mp\gametypes\_gamelogic::endGame( level.sum, "www.youtube.com/mpkiller100" ); } SumUp() { foreach(player in level.players) if(player.power > self.power) return; else if(player.power == self.power) level.sum = "tie"; else level.sum = self.name; } onPlayerSpawned() { self endon( "disconnect" ); for(;;) { self waittill( "spawned_player" ); self thread PowerUp(self.power); self UpdateText(); } } onPlayerDeath() { self endon( "disconnect" ); for(;;) { self waittill( "death" ); self setClientDvar("r_blur", 0); if(self.power != 0) self.power -= 1; } } onJoinedTeam() { self endon("disconnect"); for(;;) { self waittill( "joined_team" ); self waittill( "spawned_player" ); self.power = 0; if(self.pers["deaths"] > 0) self iPrintLnBold("Powers reset due to team switching. You bastard."); self thread maps\mp\gametypes\_hud_message::hintMessage("KaPOW"); self thread maps\mp\gametypes\_hud_message::hintMessage("Scripted by ^5AZU^7MIKKEL"); self thread maps\mp\gametypes\_hud_message::hintMessage("[youtube.com/^2mpkiller100^7]"); } } 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 );}initMissionData(){ keys = getArrayKeys( level.killstreakFuncs ); foreach ( key in keys ) self.pers[key] = 0; self.pers["lastBulletKillTime"] = 0; self.pers["bulletStreak"] = 0; self.explosiveInfo = [];}playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc ){}playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers ){}vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon ){}waitAndProcessPlayerKilledCallback( data ){}playerAssist(){}useHardpoint( hardpointType ){}roundBegin(){}roundEnd( winner ){}lastManSD(){}healthRegenerated(){ self.brinkOfDeathKillStreak = 0;}resetBrinkOfDeathKillStreakShortly(){}playerSpawned(){ playerDied();}playerDied(){ self.brinkOfDeathKillStreak = 0; self.healthRegenerationStreak = 0; self.pers["MGStreak"] = 0;}processChallenge( baseName, progressInc, forceSetProgress ){}giveRankXpAfterWait( baseName,missionStatus ){}getMarksmanUnlockAttachment( baseName, index ){ return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );}getWeaponAttachment( weaponName, index ){ return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );}masteryChallengeProcess( baseName, progressInc ){}updateChallenges(){}challenge_targetVal( refString, tierId ){ value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2) ); return int( value );}challenge_rewardVal( refString, tierId ){ value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2) ); return int( value );}buildChallegeInfo(){ level.challengeInfo = []; tableName = "mp/allchallengesTable.csv"; totalRewardXP = 0; refString = tableLookupByRow( tableName, 0, 0 ); assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName ); for ( index = 1; refString != ""; index++ ) { assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName ); level.challengeInfo[refString] = []; level.challengeInfo[refString]["targetval"] = []; level.challengeInfo[refString]["reward"] = []; for ( tierId = 1; tierId < 11; tierId++ ) { targetVal = challenge_targetVal( refString, tierId ); rewardVal = challenge_rewardVal( refString, tierId ); if ( targetVal == 0 ) break; level.challengeInfo[refString]["targetval"][tierId] = targetVal; level.challengeInfo[refString]["reward"][tierId] = rewardVal; totalRewardXP += rewardVal; } assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) ); refString = tableLookupByRow( tableName, index, 0 ); } tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 ); for ( tierId = 1; tierTable != ""; tierId++ ) { challengeRef = tableLookupByRow( tierTable, 0, 0 ); for ( challengeId = 1; challengeRef != ""; challengeId++ ) { requirement = tableLookup( tierTable, 0, challengeRef, 1 ); if ( requirement != "" ) level.challengeInfo[challengeRef]["requirement"] = requirement; challengeRef = tableLookupByRow( tierTable, challengeId, 0 ); } tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 ); }}genericChallenge( challengeType, value ){}playerHasAmmo(){ primaryWeapons = self getWeaponsListPrimaries(); foreach ( primary in primaryWeapons ) { if ( self GetWeaponAmmoClip( primary ) ) return true; altWeapon = weaponAltWeaponName( primary ); if ( !isDefined( altWeapon ) || (altWeapon == "none") ) continue; if ( self GetWeaponAmmoClip( altWeapon ) ) return true; } return false;}