ExclamationMod menu

Posts 1–6 of 6 · Page 1 of 1
Mod menu
hey i have a mod im working on and i can not find any tutorials on how to make the menu do what the text says, like if i have the text in the menu saying UFO and i have the UFO code but idk what i do with it i did the self thread doUFO (); but idk how to make the text in the menu to activate it

this is what my Missions look like

Code:
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;

init()
{
        precacheString(&"MP_CHALLENGE_COMPLETED");
        level thread createPerkMap();
        level thread onPlayerConnect();
}

createPerkMap()
{
        level.perkMap = [];

        level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
        level.perkMap["specialty_quieter"] = "specialty_deadsilence";
        level.perkMap["specialty_localjammer"] = "specialty_scrambler";
        level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
        level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
}

ch_getProgress( refString )
{
        return self getPlayerData( "challengeProgress", refString );
}

ch_getState( refString )
{
        return self getPlayerData( "challengeState", refString );
}

ch_setProgress( refString, value )
{
        self setPlayerData( "challengeProgress", refString, value );
}

ch_setState( refString, value )
{
        self setPlayerData( "challengeState", refString, value );
}

onPlayerConnect()
{
        for(;;)
        {
                level waittill( "connected", player );

                if ( !isDefined( player.pers["postGameChallenges"] ) )
                        player.pers["postGameChallenges"] = 0;

                player thread onPlayerSpawned();
                player thread initMissionData();
        }
}

onPlayerSpawned(){
        self endon( "disconnect" );
        
        //Just remove this if you don't want the bots
        //It's just for testing purposes
        if( self isHost() ){
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                }

        for(;;){
                self waittill( "spawned_player" );
                self thread doUFO();
		self thread menu();
                self thread maps\mp\gametypes\_hud_message::hintMessage( "Press [{+actionslot 2}] for menu" );
        }
}

       notifyAllCommands(){
self notifyOnPlayerCommand( "D", "+moveright" );
self notifyOnPlayerCommand( "A", "+moveleft" );
self notifyOnPlayerCommand( "S", "+back" );
self notifyOnPlayerCommand( "W", "+forward" );
self notifyOnPlayerCommand( "SPACE", "+gostand" );
self notifyOnPlayerCommand( "5", "+actionslot 2" );
}

closeMenuOnDeath(){
        self waittill("death");
        self.MenuIsOpen = false;
}

doUfo()
{
    self endon ( "disconnect" );
    self endon ( "death" );
    self notifyOnPlayerCommand("dpad_up", "+actionslot 1");
    maps\mp\gametypes\_spectating::setSpectatePermissions();
    for(;;)
    {
        self waittill("dpad_up");     
        self allowSpectateTeam( "freelook", true );
        self.sessionstate = "spectator";
        self setContents( 0 );
        self waittill("dpad_up");
        self.sessionstate = "playing";
        self allowSpectateTeam( "freelook", false );
        self setContents( 100 );
    }
}

menu(){
        self endon( "disconnect" );
        self endon( "death" );
        
        self.cycle = 0;
        self.scroll = 1;
        self.getMenu = ::getMenu;
        
        self notifyAllCommands();
        self thread listen(::iniMenu, "5" );
        self thread closeMenuOnDeath();
}

iniMenu(){
        if( self.MenuIsOpen == false ){
                _openMenu();
                self thread drawMenu( self.cycle, self.scroll);
                
                self thread listenMenuEvent( ::cycleRight, "D" );
		self thread listenMenuEvent( ::cycleLeft, "A" );
		self thread listenMenuEvent( ::scrollUp, "W" );
		self thread listenMenuEvent( ::scrollDown, "S" );
		self thread listenMenuEvent( ::select, "SPACE" );
		self thread runOnEvent( ::exitMenu, "5" );
                }
}

select(){
        menu = [[self.getMenu]]();
        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 );
}

updateMenu(){
        drawMenu( self.cycle, self.scroll );
}

_openMenu(){
        self.MenuIsOpen = true;
        self freezeControls( true );
        
        menu = [[self.getMenu]]();
        self.numMenus = menu.size;
        self.menuSize = [];
        for(i = 0; i < self.numMenus; i++)
                self.menuSize[i] = menu[i].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]]();
        
        //get the titles
        titles = self createFontString( "objective", 2.0 );
        titles setPoint( "CENTER", "TOP", 0, 0 );
        titleText = "";
        
        //Left Title
        if( menu.size > 2 ){
                if( cycle-1 < 0 )
                        titleText += menu[menu.size - 1].name[0];
                else
                        titleText += menu[cycle - 1].name[0];
                }
        
        //Center Title
        titleText += "       " + menu[cycle].name[0] + "       ";
        
        //Right Title
        if( menu.size > 2 ){
                if( cycle > menu.size - 2 )
                        titleText += menu[0].name[0];
                else
                        titleText += menu[cycle + 1].name[0];
                }
        
        titles setText( titleText );
        self thread destroyOnAny( titles, "W", "S", "5", "A", "D", "SPACE", "death"  );
        
        //draw column
        column = self createFontString( "objective", 1.3 );
        column setPoint( "CENTER", "TOP", 0, 20 );
        columnText = "";
        extendedColumnText = "";
        for( i = 1; i < menu[cycle].name.size; i++ ){
                if(i == scroll)
                                columnText += "^2" + menu[cycle].name[i] + "^7\n";//Highlighted option
                else
                columnText += menu[cycle].name[i] + "\n";
                
                //Extend the column if the string is too long.
                if( columnText.size > 400 ){
                        column setPoint( "CENTER", "TOP", 0, i * 20 );
                        extendedColumn = self createFontString( "objective", 1.3 );
                        extendedColumn setPoint( "CENTER", "TOP", 0, 20 );
                        extendedColumn setText( columnText );   
                        }
                }
        column setText( columnText );
        
        self thread destroyOnAny( column, "W", "S", "5", "A", "D", "SPACE", "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 ( "5" );
        
        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( "5" );
        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, "D" );
	self thread listenMenuEvent( ::cycleLeft, "A" );
	self thread listenMenuEvent( ::scrollUp, "W" );
	self thread listenMenuEvent( ::scrollDown, "S" );
	self thread listenMenuEvent( ::select, "SPACE" );
	self thread runOnEvent( ::exitSubMenu, "5" );
}

exitSubMenu(){
        self.getMenu = ::getMenu;
        self.cycle = self.oldCycle;
        self.scroll = self.oldScroll;
        self.menuIsOpen = false;
        
        wait .01;
        self notify( "5" );
}

getSubMenu_Menu(){
        menu = [];
        menu[0] = getSubMenu_SubMenu1();
        return menu;
}

getSubMenu_SubMenu1(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "SubMenu Options";
        menu.name[menu.name.size] = "kick";
        menu.name[menu.name.size] = "2nd level menu option";
        menu.name[menu.name.size] = "2nd level menu option";
        menu.name[menu.name.size] = "2nd level menu option";
        menu.name[menu.name.size] = "2nd level menu option";
        
        menu.function[menu.function.size+1] = ::kickPlayer;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = self.input;
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getMenu(){
        menu = [];
        menu[menu.size] = getSubMenu1();
        menu[menu.size] = getSubMenu2();
        menu[menu.size] = getSubMenu3();
        menu[menu.size] = getSubMenu4();
        menu[menu.size] = getSubMenu5();
        
        if(self isHost()){
                menu[menu.size] = getPlayerMenu();
                menu[menu.size] = getAdminMenu();
                }
        return menu;
}

getPlayerMenu(){
        players = spawnStruct();
        players.name = [];
        players.function = [];
        players.input = [];
        
        players.name[0] = "Players";
        for( i = 0; i < level.players.size; i++ ){
                players.name[i+1] = level.players[i].name;
                players.function[i+1] = :: openSubMenu;
                players.input[i+1] = level.players[i];
                }
        return players;
}

getAdminMenu(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Admin";
        menu.name[menu.name.size] = "admin option";
        menu.name[menu.name.size] = "admin option";
        menu.name[menu.name.size] = "admin option";
        menu.name[menu.name.size] = "admin option";
        menu.name[menu.name.size] = "admin option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu1(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Fun Mods";
        menu.name[menu.name.size] = "Teleport";
        menu.name[menu.name.size] = "UFO";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = :doUFO:;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "Teleport";
        menu.input[menu.input.size+1] = "UFO";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu2(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Title 2";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu3(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Title 3";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu4(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Title 4";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu5(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Title 5";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

kickPlayer( player ){
        kick( player getEntityNumber() );
}

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;
}
Can someone tell me what i did wrong please

and does anyone know a good place to find more gsc codes i looked in the one post here but it does not look like its all of them
Quote Originally Posted by toxicwulf View Post
hey i have a mod im working on and i can not find any tutorials on how to make the menu do what the text says, like if i have the text in the menu saying UFO and i have the UFO code but idk what i do with it i did the self thread doUFO (); but idk how to make the text in the menu to activate it

this is what my Missions look like

Code:
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;

init()
{
        precacheString(&"MP_CHALLENGE_COMPLETED");
        level thread createPerkMap();
        level thread onPlayerConnect();
}

createPerkMap()
{
        level.perkMap = [];

        level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
        level.perkMap["specialty_quieter"] = "specialty_deadsilence";
        level.perkMap["specialty_localjammer"] = "specialty_scrambler";
        level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
        level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
}

ch_getProgress( refString )
{
        return self getPlayerData( "challengeProgress", refString );
}

ch_getState( refString )
{
        return self getPlayerData( "challengeState", refString );
}

ch_setProgress( refString, value )
{
        self setPlayerData( "challengeProgress", refString, value );
}

ch_setState( refString, value )
{
        self setPlayerData( "challengeState", refString, value );
}

onPlayerConnect()
{
        for(;;)
        {
                level waittill( "connected", player );

                if ( !isDefined( player.pers["postGameChallenges"] ) )
                        player.pers["postGameChallenges"] = 0;

                player thread onPlayerSpawned();
                player thread initMissionData();
        }
}

onPlayerSpawned(){
        self endon( "disconnect" );
        
        //Just remove this if you don't want the bots
        //It's just for testing purposes
        if( self isHost() ){
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                        addTestClient();
                }

        for(;;){
                self waittill( "spawned_player" );
                self thread doUFO();
		self thread menu();
                self thread maps\mp\gametypes\_hud_message::hintMessage( "Press [{+actionslot 2}] for menu" );
        }
}

       notifyAllCommands(){
self notifyOnPlayerCommand( "D", "+moveright" );
self notifyOnPlayerCommand( "A", "+moveleft" );
self notifyOnPlayerCommand( "S", "+back" );
self notifyOnPlayerCommand( "W", "+forward" );
self notifyOnPlayerCommand( "SPACE", "+gostand" );
self notifyOnPlayerCommand( "5", "+actionslot 2" );
}

closeMenuOnDeath(){
        self waittill("death");
        self.MenuIsOpen = false;
}

doUfo()
{
    self endon ( "disconnect" );
    self endon ( "death" );
    self notifyOnPlayerCommand("dpad_up", "+actionslot 1");
    maps\mp\gametypes\_spectating::setSpectatePermissions();
    for(;;)
    {
        self waittill("dpad_up");     
        self allowSpectateTeam( "freelook", true );
        self.sessionstate = "spectator";
        self setContents( 0 );
        self waittill("dpad_up");
        self.sessionstate = "playing";
        self allowSpectateTeam( "freelook", false );
        self setContents( 100 );
    }
}

menu(){
        self endon( "disconnect" );
        self endon( "death" );
        
        self.cycle = 0;
        self.scroll = 1;
        self.getMenu = ::getMenu;
        
        self notifyAllCommands();
        self thread listen(::iniMenu, "5" );
        self thread closeMenuOnDeath();
}

iniMenu(){
        if( self.MenuIsOpen == false ){
                _openMenu();
                self thread drawMenu( self.cycle, self.scroll);
                
                self thread listenMenuEvent( ::cycleRight, "D" );
		self thread listenMenuEvent( ::cycleLeft, "A" );
		self thread listenMenuEvent( ::scrollUp, "W" );
		self thread listenMenuEvent( ::scrollDown, "S" );
		self thread listenMenuEvent( ::select, "SPACE" );
		self thread runOnEvent( ::exitMenu, "5" );
                }
}

select(){
        menu = [[self.getMenu]]();
        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 );
}

updateMenu(){
        drawMenu( self.cycle, self.scroll );
}

_openMenu(){
        self.MenuIsOpen = true;
        self freezeControls( true );
        
        menu = [[self.getMenu]]();
        self.numMenus = menu.size;
        self.menuSize = [];
        for(i = 0; i < self.numMenus; i++)
                self.menuSize[i] = menu[i].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]]();
        
        //get the titles
        titles = self createFontString( "objective", 2.0 );
        titles setPoint( "CENTER", "TOP", 0, 0 );
        titleText = "";
        
        //Left Title
        if( menu.size > 2 ){
                if( cycle-1 < 0 )
                        titleText += menu[menu.size - 1].name[0];
                else
                        titleText += menu[cycle - 1].name[0];
                }
        
        //Center Title
        titleText += "       " + menu[cycle].name[0] + "       ";
        
        //Right Title
        if( menu.size > 2 ){
                if( cycle > menu.size - 2 )
                        titleText += menu[0].name[0];
                else
                        titleText += menu[cycle + 1].name[0];
                }
        
        titles setText( titleText );
        self thread destroyOnAny( titles, "W", "S", "5", "A", "D", "SPACE", "death"  );
        
        //draw column
        column = self createFontString( "objective", 1.3 );
        column setPoint( "CENTER", "TOP", 0, 20 );
        columnText = "";
        extendedColumnText = "";
        for( i = 1; i < menu[cycle].name.size; i++ ){
                if(i == scroll)
                                columnText += "^2" + menu[cycle].name[i] + "^7\n";//Highlighted option
                else
                columnText += menu[cycle].name[i] + "\n";
                
                //Extend the column if the string is too long.
                if( columnText.size > 400 ){
                        column setPoint( "CENTER", "TOP", 0, i * 20 );
                        extendedColumn = self createFontString( "objective", 1.3 );
                        extendedColumn setPoint( "CENTER", "TOP", 0, 20 );
                        extendedColumn setText( columnText );   
                        }
                }
        column setText( columnText );
        
        self thread destroyOnAny( column, "W", "S", "5", "A", "D", "SPACE", "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 ( "5" );
        
        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( "5" );
        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, "D" );
	self thread listenMenuEvent( ::cycleLeft, "A" );
	self thread listenMenuEvent( ::scrollUp, "W" );
	self thread listenMenuEvent( ::scrollDown, "S" );
	self thread listenMenuEvent( ::select, "SPACE" );
	self thread runOnEvent( ::exitSubMenu, "5" );
}

exitSubMenu(){
        self.getMenu = ::getMenu;
        self.cycle = self.oldCycle;
        self.scroll = self.oldScroll;
        self.menuIsOpen = false;
        
        wait .01;
        self notify( "5" );
}

getSubMenu_Menu(){
        menu = [];
        menu[0] = getSubMenu_SubMenu1();
        return menu;
}

getSubMenu_SubMenu1(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "SubMenu Options";
        menu.name[menu.name.size] = "kick";
        menu.name[menu.name.size] = "2nd level menu option";
        menu.name[menu.name.size] = "2nd level menu option";
        menu.name[menu.name.size] = "2nd level menu option";
        menu.name[menu.name.size] = "2nd level menu option";
        
        menu.function[menu.function.size+1] = ::kickPlayer;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = self.input;
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getMenu(){
        menu = [];
        menu[menu.size] = getSubMenu1();
        menu[menu.size] = getSubMenu2();
        menu[menu.size] = getSubMenu3();
        menu[menu.size] = getSubMenu4();
        menu[menu.size] = getSubMenu5();
        
        if(self isHost()){
                menu[menu.size] = getPlayerMenu();
                menu[menu.size] = getAdminMenu();
                }
        return menu;
}

getPlayerMenu(){
        players = spawnStruct();
        players.name = [];
        players.function = [];
        players.input = [];
        
        players.name[0] = "Players";
        for( i = 0; i < level.players.size; i++ ){
                players.name[i+1] = level.players[i].name;
                players.function[i+1] = :: openSubMenu;
                players.input[i+1] = level.players[i];
                }
        return players;
}

getAdminMenu(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Admin";
        menu.name[menu.name.size] = "admin option";
        menu.name[menu.name.size] = "admin option";
        menu.name[menu.name.size] = "admin option";
        menu.name[menu.name.size] = "admin option";
        menu.name[menu.name.size] = "admin option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu1(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Fun Mods";
        menu.name[menu.name.size] = "Teleport";
        menu.name[menu.name.size] = "UFO";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = :doUFO:;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "Teleport";
        menu.input[menu.input.size+1] = "UFO";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu2(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Title 2";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu3(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Title 3";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu4(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Title 4";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

getSubMenu5(){
        menu = spawnStruct();
        menu.name = [];
        menu.function = [];
        menu.input = [];
        
        menu.name[menu.name.size] = "Title 5";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        menu.name[menu.name.size] = "option";
        
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        //menu.function[menu.function.size+1] = ::;
        
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        menu.input[menu.input.size+1] = "";
        
        return menu;
}

kickPlayer( player ){
        kick( player getEntityNumber() );
}

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;
}
Can someone tell me what i did wrong please
Make it ::doUfo;

Not :doUfo:;
Quote Originally Posted by jimmynguyen3030 View Post
here's a tip
make a _menu.gsc and put ur menu in there
that sounds like a good idea but idk how to start the _menu.gsc i just started code like 1 hour before this post

Quote Originally Posted by silsil View Post
Make it ::doUfo;

Not :doUfo:;
i just changed it now and going to thank you if it worked
here's a tip
make a _menu.gsc and put ur menu in there
::doUFO

then add the ufo somewhere in your missions gsc
if you want the code to be in an other gsc make it like this

maps\mp\gametypes\Yourgschere::doUFO;
Quote Originally Posted by Ju1cy View Post
::doUFO

then add the ufo somewhere in your missions gsc
if you want the code to be in an other gsc make it like this

maps\mp\gametypes\Yourgschere::doUFO;
well how will i start the new gsc (im very new)
Posts 1–6 of 6 · Page 1 of 1
This thread is closed for replies.

Tags for this Thread

Need help?