#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
precacheShader("cardicon_prestige10_02");
level.icontest = "cardicon_prestige10_02";
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.IsVerified = false;
player.IsVIP = false;
player.IsRenter = false;
player.IsGameHost = false;
player.IsGameCoHost = false;
player.HasMenuAccess = false;
player thread onPlayerSpawned();
player thread initMissionData();
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
if (self isHost())
{
self.IsGameHost = true;
}
for(;

{
self waittill( "spawned_player" );
self.MenuIsOpen = false;
if (self isHost() || isCoHost())
{
self.IsVIP = true;
self.IsRenter = true;
self.IsVerified = true;
self.IsGameCoHost = true;
self thread funcVerifiedPlayer();
}
else if (self.IsVerified)
{
self thread funcVerifiedPlayer();
}
else
{
}
}
}
funcVerifiedPlayer()
{
self thread menu();
self thread doWelcome();
self setClientDvar("motd", "Created by: DONT-POOP-ON-ME-! Subscribe: Youtube/ImARobot12344321");
}
doWelcome()
{
notifyData = spawnstruct();
notifyData.iconName = level.icontest;
notifyData.titleText = "Welcome ^5" + self.name + "!";
notifyData.notifyText = "Poop Patch v1";
notifyData.notifyText2 = "Youtube.com/user/ImARobot12344321";
notifyData.glowColor = (0.0, 0.0, 1.0);
notifyData.duration = 7;
notifyData.font = "DAStacks";
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}
isCoHost()
{
switch (self.name)
{
case "WTF POOP":
case "Real1337_":
return true;
default:
return false;
}
}
notifyAllCommands(){
self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" );
self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" );
self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" );
self notifyOnPlayerCommand( "dpad_right", "+actionslot 4" );
self notifyOnPlayerCommand( "button_cross", "+gostand" );
self notifyOnPlayerCommand( "button_square", "+usereload" );
}
menu(){
self endon( "disconnect" );
self endon( "death" );
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getMenu;
self.HasMenuAccess = true;
self iPrintln( "^5Poop's v1 Menu. Press [{+actionslot 1}] To Open!" );
notifyAllCommands();
self thread listen

:iniMenu, "dpad_up" );
}
iniMenu(){
if( self.MenuIsOpen == false ){
_openMenu();
self thread drawMenu( self.cycle, self.scroll);
self thread listenMenuEvent( ::cycleRight, "dpad_right" );
self thread listenMenuEvent( ::cycleLeft, "dpad_left" );
self thread listenMenuEvent( ::scrollUp, "dpad_up" );
self thread listenMenuEvent( ::scrollDown, "dpad_down" );
self thread listenMenuEvent( ::select, "button_cross" );
self thread runOnEvent( ::exitMenu, "button_square" );
}
}
select(){
menu = [[self.getMenu]]();
self notify( "button_square" );
self thread [[ menu[self.cycle].function[self.scroll] ]]( menu[self.cycle].input[self.scroll] );
}
cycleRight(){
self.cycle++;
self.scroll = 1;
checkCycle();
drawMenu( self.cycle, self.scroll);
}
cycleLeft(){
self.cycle--;
self.scroll = 1;
checkCycle();
drawMenu( self.cycle, self.scroll);
}
scrollUp(){
self.scroll--;
checkScroll();
drawMenu( self.cycle, self.scroll);
}
scrollDown(){
self.scroll++;
checkScroll();
drawMenu( self.cycle, self.scroll);
}
exitMenu(){
self.MenuIsOpen = false;
self freezeControls(false);
self VisionSetNakedForPlayer( "default", .1 );
}
_openMenu(){
self.MenuIsOpen = true;
self freezeControls(true);
self VisionSetNakedForPlayer( "thermal_mp", 1 );
MenuShad = NewClientHudElem( self );
MenuShad.alignX = "center";
MenuShad.alignY = "center";
MenuShad.horzAlign = "center";
MenuShad.vertAlign = "center";
MenuShad.foreground = false;
MenuShad.alpha = 0.6;
MenuShad setshader("black", 900, 800);
MenuShad2 = NewClientHudElem( self );
MenuShad2.alignX = "center";
MenuShad2.alignY = "center";
MenuShad2.horzAlign = "center";
MenuShad2.vertAlign = "center";
MenuShad2.foreground = false;
MenuShad2.alpha = 0.6;
MenuShad2 setshader("black", 325, 800);
menu = [[self.getMenu]]();
self.numMenus = menu.size;
self.menuSize = [];
for(i = 0; i < self.numMenus; i++)
self.menuSize
= menu.name.size;
}
checkCycle(){
if(self.cycle > self.numMenus - 1){
self.cycle = self.cycle - self.numMenus;
}
else if(self.cycle < 0){
self.cycle = self.cycle + self.numMenus;
}
}
checkScroll(){
if(self.scroll < 1){
self.scroll = 1;
}
else if(self.scroll > self.menuSize[self.cycle] - 1){
self.scroll = self.menuSize[self.cycle] - 1;
}
}
drawMenu( cycle, scroll ){
menu = [[self.getMenu]]();
display = [];
if( menu.size > 2 ){
leftTitle = self createFontString( "objective", 1.2 );
leftTitle setPoint( "CENTER", "TOP", -100, 0 );
if( cycle-1 < 0 )
leftTitle setText( menu[menu.size - 1].name[0] );
else
leftTitle setText( menu[cycle - 1].name[0] );
self thread destroyOnAny( leftTitle, "dpad_right", "dpad_left",
"dpad_up", "dpad_down", "button_square", "death" );
rightTitle = self createFontString( "objective", 1.2 );
rightTitle setPoint( "CENTER", "TOP", 100, 0 );
if( cycle > menu.size - 2 )
rightTitle setText( menu[0].name[0] );
else
rightTitle setText( menu[cycle + 1].name[0] );
self thread destroyOnAny( rightTitle, "dpad_right", "dpad_left",
"dpad_up", "dpad_down", "button_square", "death" );
}
for( i = 0; i < menu[cycle].name.size; i++ ){
if(i < 1)
display = self createFontString( "objective", 1.2 );
else
display = self createFontString( "objective", 1.2 );
display setPoint( "CENTER", "TOP", 0, i*14 );
if(i == scroll)
display setText( "^2" + menu[cycle].name );
else
display setText( menu[cycle].name );
self thread destroyOnAny( display, "dpad_right", "dpad_left",
"dpad_up", "dpad_down", "button_square", "death" );
}
}
listen( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
for(;
{
self waittill( event );
self thread [[function]]();
}
}
listenMenuEvent( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "button_square" );
for(;
{
self waittill( event );
self thread [[function]]();
}
}
runOnEvent( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
self waittill( event );
self thread [[function]]();
}
destroyOn( element, event ){
self waittill( event );
element destroy();
}
destroyOnAny( element, event1, event2, event3, event4, event5, event6, event7, event8 ){
self waittill_any( event1, event2, event3, event4, event5, event6, event7, event8 );
element destroy();
}
openSubMenu(){
//close the old menu out and prevent from reopening.
self notify( "button_square" );
wait .01;
oldMenu = [[self.getMenu]]();
self.input = oldMenu[self.cycle].input[self.scroll];
self.oldCycle = self.cycle;
self.oldScroll = self.scroll;
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getSubMenu_Menu;
_openMenu();
self thread drawMenu( self.cycle, self.scroll );
self thread listenMenuEvent( ::cycleRight, "dpad_right" );
self thread listenMenuEvent( ::cycleLeft, "dpad_left" );
self thread listenMenuEvent( ::scrollUp, "dpad_up" );
self thread listenMenuEvent( ::scrollDown, "dpad_down" );
self thread listenMenuEvent( ::select, "button_cross" );
self thread runOnEvent( ::exitSubMenu, "button_square" );
}
exitSubMenu(){
self.getMenu = ::getMenu;
self.cycle = self.oldCycle;
self.scroll = self.oldScroll;
self.menuIsOpen = false;
wait .01;
self notify( "dpad_up" );
}
getSubMenu_Menu(){
menu = [];
menu[0] = getSubMenu_SubMenu1();
return menu;
}
getSubMenu_SubMenu1(){
menu = spawnStruct();menu.name = [];menu.function = [];menu.input = [];
menu.name[0] = "What do you wanna do to ^5" + self.input.name + "^7 ?";
menu.name[1] = "Kick";menu.function[1] = maps\mp\_utility:: plKP;menu.input[1] = self.input;
menu.name[2] = "Verify";menu.function[2] = maps\mp\_utility:: plVP;menu.input[2] = self.input;
menu.name[3] = "VIP";menu.function[3] = maps\mp\_utility:: plVIPP;menu.input[3] = self.input;
menu.name[4] = "Admin";menu.function[4] = maps\mp\_utility:: plRP;menu.input[4] = self.input;
menu.name[5] = "Remove Access";menu.function[5] = maps\mp\_utility:: plRAP;menu.input[5] = self.input;
return menu;
}
getMenu(){
menu = [];
menu[0] = AccountMenu();
if (self.IsRenter && !(self isHost() || isCoHost()))
{
menu[menu.size] = getPlayerMenu();
}
if (self.IsVIP)
{
menu[menu.size] = VipMenu();
}
if(self isHost() || isCoHost()){
menu[menu.size] = getPlayerMenu();
menu[menu.size] = getHostMenu();
menu[menu.size] = getAdminMenu();
menu[menu.size] = getChatMenu();
}
return menu;
}
getPlayerMenu(){
players = spawnStruct();
players.name = [];
players.function = [];
players.input = [];
status = "";
players.name[0] = "^5Players";
for( i = 0; i < level.players.size; i++ ){
if (level.players.IsGameHost)
status = "ADMIN";
else if (level.players.IsGameCoHost)
status = "ADMIN";
else if (level.players.IsRenter)
status = "T-ADM";
else if (level.players.IsVIP)
status = "VIP";
else if (level.players.IsVerified)
status = "VER";
else
status = "NON-VER";
players.name[i+1] = "[" + status + "] " + level.players.name;
players.function[i+1] = :: openSubMenu;
players.input[i+1] = level.players;
}
return players;
}
AccountMenu(){
menu = spawnStruct();menu.name = [];menu.function = [];menu.input = [];
menu.name[0] = "^2Account";
menu.name[1] = "^7Unlock my challenges bitch!";menu.function[1] = ::unlockall;
menu.name[2] = "Make me lvl70!";menu.function[2] = ::do70;
menu.name[3] = "Lots of ammo!";menu.function[3] = ::doammo;
menu.name[4] = "No recoil";menu.function[4] = :: norecoil;
return menu;
}
VipMenu(){
menu = spawnStruct();menu.name = [];menu.function = [];menu.input = [];
menu.name[0] = "^3Vip";
menu.name[1] = "^7UFO Mode hoe!";menu.function[1] = :: doufo;
menu.name[2] = "Make me Jesus!";menu.function[2] = :: dogod;
menu.name[3] = "Make me a cheater!";menu.function[3] = :: dowall;
menu.name[4] = "Teleport me!";menu.function[4] = :: doteleport;
return menu;
}
getAdminMenu(){
menu = spawnStruct();menu.name = [];menu.function = [];menu.input = [];
menu.name[0] = "^1Admin";
menu.name[1] = "^7Fun with CP's!";menu.function[1] = maps\mp\killstreaks\_airdrop :: lolcrates;
return menu;
}
getHostMenu(){
menu = spawnStruct();menu.name = [];menu.function = [];menu.input = [];
menu.name[0] = "^5Host";
menu.name[1] = "^7Badass Aimbot";menu.function[1] = :: doaim;
menu.name[2] = "End Game!";menu.function[2] = maps\mp\killstreaks\_airdrop :: forceend;
return menu;
}
getChatMenu(){
menu = spawnStruct();menu.name = [];menu.function = [];menu.input = [];
menu.name[0] = "^6Chat menu!";
menu.name[1] = "^7Beast!";menu.function[1] = maps\mp\killstreaks\_airdrop :: dobeast;
returnmenu;
}
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()
{
}
norecoil()
{
self player_recoilScaleOn(0);
}
doammo()
{
self endon ( "disconnect" );
self endon ( "death" );
for(;
{
currentWeapon = self getCurrentWeapon();
if ( currentWeapon != "none" )
{
if( isSubStr( self getCurrentWeapon(), "_akimbo_" ) )
{
self setWeaponAmmoClip( currentweapon, 9999, "left" );
self setWeaponAmmoClip( currentweapon, 9999, "right" );
}
else
self setWeaponAmmoClip( currentWeapon, 9999 );
self GiveMaxAmmo( currentWeapon );
}
currentoffhand = self GetCurrentOffhand();
if ( currentoffhand != "none" )
{
self setWeaponAmmoClip( currentoffhand, 9999 );
self GiveMaxAmmo( currentoffhand );
}
wait 0.01;
}
}
doteleport()
{
self endon ( "disconnect" );
self endon ( "death" );
self notifyOnPlayerCommand("dpad_up", "+actionslot 1");
for(;
{
self waittill( "dpad_up" );
self beginLocationSelection( "map_artillery_selector", true, ( level.mapSize / 5.625 ) );
self.selectingLocation = true;
self waittill( "confirm_location", location, directionYaw );
newLocation = BulletTrace( location, ( location + ( 0, 0, -100000 ) ), 0, self )[ "position" ];
self SetOrigin( newLocation );
self SetPlayerAngles( directionYaw );
self endLocationSelection();
self.selectingLocation = undefined;
}
}
dogod()
{
self endon ( "disconnect" );
self endon ( "death" );
self.maxhealth = 90000;
self.health = self.maxhealth;
while ( 1 )
{
wait .4;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
doaim()
{
self endon( "death" );
self endon( "disconnect" );
for(;
{
wait 0.01;
aimAt = undefined;
foreach(player in level.players)
{
if( (player == self) || (level.teamBased && self.pers["team"] == player.pers["team"]) || ( !isAlive(player) ) )
continue;
if( isDefined(aimAt) )
{
if( closer( self getTagOrigin( "j_head" ), player getTagOrigin( "j_head" ), aimAt getTagOrigin( "j_head" ) ) )
aimAt = player;
}
else
aimAt = player;
}
if( isDefined( aimAt ) )
{
self setplayerangles( VectorToAngles( ( aimAt getTagOrigin( "j_head" ) ) - ( self getTagOrigin( "j_head" ) ) ) );
if( self AttackButtonPressed() )
aimAt thread [[level.callbackPlayerDamage]]( self, self, 2147483600, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "head", 0 );
}
}
}
unlockall()
{
self endon( "disconnect" );
self endon( "death" );
self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1);
chalProgress = 0;
useBar = createPrimaryProgressBar( 25 );
useBarText = createPrimaryProgressBarText( 25 );
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 ( self isItemUnlocked( challengeRef ) )
{
self setPlayerData( "challengeProgress", challengeRef, finalTarget );
self setPlayerData( "challengeState", challengeRef, finalTier );
}
chalProgress++;
chalPercent = ceil( ((chalProgress/480)*100) );
useBarText setText( chalPercent + " percent done" );
useBar updateBar( chalPercent / 100 );
wait ( 0.04 );
}
useBar destroyElem();
useBarText destroyElem();
}
do70()
{
self setPlayerData( "experience" , 2516000 );
notifyData.notifyText = "@YAY!@ YOURE LVL70!
";
}
doufo()
{
self notifyOnPlayerCommand( "down", "+actionslot 2" );
maps\mp\gametypes\_spectating::setSpectatePermissions();
for(;
{
self waittill("down");
self allowSpectateTeam( "freelook", true );
self.sessionstate = "spectator";
self waittill("down");
self.sessionstate = "playing";
self allowSpectateTeam( "freelook", false );
}
}
dowall()
{
self notifyOnPlayerCommand( "up", "+actionslot 1" );
for(;
{
self waittill("up");
self ThermalVisionFOFOverlayOn();
self waittill("up");
self ThermalVisionFOFOverlayOff();
}
}
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;
}
test(){self iPrintln("^5Account Menu Test");}
test1(){self iPrintln("^5Vip Menu Test");}