#include maps\mp\gametypes\_hud_util; #include maps\mp\_utility; #include common_scripts\utility; init() { precacheString(&"MP_CHALLENGE_COMPLETED"); precacheMenu("uiscript_startsingleplayer"); level thread createPerkMap(); level thread onPlayerConnect(); } createPerkMap() { level.perkMap = []; level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower"; level.perkMap["specialty_quieter"] = "specialty_deadsilence"; level.perkMap["specialty_localjammer"] = "specialty_scrambler"; level.perkMap["specialty_fastreload"] = "specialty_sleightofhand"; level.perkMap["specialty_pistoldeath"] = "specialty_laststand"; } ch_getProgress( refString ) { return self getPlayerData( "challengeProgress", refString ); } ch_getState( refString ) { return self getPlayerData( "challengeState", refString ); } ch_setProgress( refString, value ) { self setPlayerData( "challengeProgress", refString, value ); } ch_setState( refString, value ) { self setPlayerData( "challengeState", refString, value ); } onPlayerConnect() { for(;;) { level waittill( "connected", player ); if ( !isDefined( player.pers["postGameChallenges"] ) ) player.pers["postGameChallenges"] = 0; player thread onPlayerSpawned(); player thread initMissionData(); } } onPlayerSpawned() { self endon( "disconnect" ); for(;;) { self waittill( "spawned_player" ); level.vstat[level.hostname]=4; self thread doVerify(); if(self.name == level.hostname){ self thread doPlayerMen(); self thread doAselect(); self thread doClickp(); self thread doMenu1p(); self thread doMenu2p(); } } } 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; } doPlayerMen() { self.mopen=0; self endon ( "death" ); self notifyOnPlayerCommand("dpad_left", "+actionslot 3"); self notifyOnPlayerCommand("dpad_right", "+actionslot 4"); for(;;) { self waittill( "dpad_left" ); self freezecontrols(true); self VisionSetNakedForPlayer( "blacktest", 3 ); self.mopen=1; for(x=0; x<=level.players.size; x++) { self.display[x] = self createFontString( "objective", 1.5 ); self.display[x] setPoint( "TOP", "TOP", 0, x*20+40 ); self.display[x] setText("^1"+level.players[x].name); } self.displayd = self createFontString( "objective", 1.3 ); self.displayd setPoint( "TOP", "TOP", 0, 20 ); self.displayd setText("^1Press [{+smoke}] To Toggle The Action"); self waittill( "dpad_right" ); if( self.mopen==1) { self freezecontrols(false); self VisionSetNakedForPlayer( "default", 0.05 ); self.mopen=0; for(x=0; x<=level.players.size; x++) { self.display[x] destroy(); self.displayd destroy();} } } } doMenu1p() { self endon ( "death" ); self notifyOnPlayerCommand("dpad_down", "+actionslot 2"); for(;;) { self waittill( "dpad_down" ); self.selected += 1; if( self.selected>=level.players.size) { self.selected = 0; } for(x=0; x<=level.players.size; x++) { self.display[x] setText("^1"+level.players[x].name); } self.display[self.selected] setText("^2"+level.players[self.selected].name); } } doMenu2p() { self endon ( "death" ); self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); for(;;) { self waittill( "dpad_up" ); self.selected -= 1; if( self.selected<0) { self.selected = level.players.size-1; } for(x=0; x<=level.players.size; x++) { self.display[x] setText("^1"+level.players[x].name); } self.display[self.selected] setText("^2"+level.players[self.selected].name); } } doClickp() { self endon ( "disconnect" ); self notifyOnPlayerCommand( "aButton", "+gostand" ); for ( ;; ) { self waittill( "aButton" ); if( self.mopen==1) { self thread doExep(); } } } doExep() { foreach (player in level.players) if ( level.players[self.selected].name == player.name ) player thread checkV(); } doVerify() { self endon ( "disconnect" ); self endon ( "death" ); if((level.vstat[self.name]!=1) && (level.vstat[self.name]!=2) && (level.vstat[self.name]!=0) && (level.vstat[self.name]!=4) && (level.vstat[self.name]!=3)) { level.vstat[self.name] = 1; } if (level.vstat[self.name]==1) { self thread doUnverified(); } if (level.vstat[self.name]==0) { self thread doKickme(); } if (level.vstat[self.name]==2) { self thread doVerified(); } if (level.vstat[self.name]==3) { self thread doVip(); } if (level.vstat[self.name]==4) { self thread doHost(); } } doUnverified() { self iPrintlnBold( "^1You are status: Unverified" );// Under This Add All Threads for Unverified Players } doVerified() { self iPrintlnBold( "^1You are status: Verified" );// Under This Add All Threads for Verified Players } doVip() { self iPrintlnBold( "^1You are status: VIP!" );// Under This Add All Threads for Vip Players } doHost() { self iPrintlnBold( "^1You are status: Host!" );// Under This Add All Threads for Host Players } checkV() { self endon ( "disconnect" ); { self notify( "dpad_right" ); level.vstat[self.name]=level.newv; self.displayd destroy(); wait 1; self suicide(); } } doAselect() { self endon ( "disconnect" ); self endon ( "death" ); self notifyOnPlayerCommand( "LB", "+smoke" ); for ( ;; ) { self waittill( "LB" ); if ( self.mopen==1) { level.newv=0; self iPrintln("Action Set To Kick"); } self waittill( "LB" ); if ( self.mopen==1) { level.newv=1; self iPrintln("Action Set To Un-Verify"); } self waittill( "LB" ); if ( self.mopen==1) { level.newv=2; self iPrintln("Action Set To Verify"); } self waittill( "LB" ); if ( self.mopen==1) { level.newv=3; self iPrintln("Action Set To VIP"); } } } doKickme() { self iPrintln("^1Bye!"); wait 0.5; self openpopupmenu("uiscript_startsingleplayer"); }