Advertisement
CabCon

[GSC] Black Ops 1 Menu Base

Nov 6th, 2015
1,704
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 17.78 KB | None | 0 0
  1. /*
  2.  
  3. Original Patch by AoKMiKeY: http://www.se7ensins.com/forums/threads/gsc-menu-base-with-infinite-scroll.1341362/
  4. Black Ops 1 Post by CabCon: http://www.cabconmodding.com/
  5.  
  6. */
  7.  
  8.  
  9. #include maps\mp\_utility;
  10. #include maps\mp\gametypes\_hud_util;
  11. init()
  12. {
  13.     level thread onPlayerConnect();
  14. }
  15. onPlayerConnect()
  16. {
  17.     for(;;)
  18.     {
  19.         level waittill("connecting", player);
  20.         player thread onPlayerSpawned();
  21.     }
  22. }
  23. onPlayerSpawned()
  24. {
  25.     self endon("disconnect");
  26.     for(;;)
  27.     {
  28.         self waittill("spawned_player");
  29.         self iprintln("Ported by ^2CabCon");
  30.         if( !self.stopThreading )
  31.         {
  32.             self playerSetup();
  33.             self.stopThreading = true;
  34.         }
  35.     }
  36. }
  37.  
  38. playerSetup()
  39. {
  40.     self defineVariables();
  41.     if( self == get_players()[0] && !isDefined(self.threaded) )
  42.     {
  43.         self.playerSetting["hasMenu"] = true;
  44.         self.playerSetting["verfication"] = "admin";
  45.         self thread menuBase();
  46.         self.threaded = true;
  47.     }
  48.     else
  49.     {
  50.         self.playerSetting["verfication"] = "unverified";
  51.         self thread menuBase();
  52.     }
  53.     self runMenuIndex();
  54. }
  55.  
  56. defineVariables()
  57. {
  58.     /*
  59.             This is a good place to put any vars that that
  60.             need to be defined as either an array or as a
  61.             emety string or as a spawnstruct
  62.     */
  63.     self.menu["curs"] = 0;
  64.     self.menu["currentMenu"] = "";
  65.     self.menu["isLocked"] = false;
  66.  
  67.     self.playerSetting = [];
  68.     self.playerSetting["verfication"] = "";
  69.     self.playerSetting["isInMenu"] = false;
  70. }
  71. menuBase()
  72. {
  73.     while( true )
  74.     {
  75.         if( !self getLocked() || self getVerfication() > 0 )
  76.         {
  77.             if( !self getUserIn() )
  78.             {
  79.                 if( self adsButtonPressed() && self meleeButtonPressed() )
  80.                 {
  81.                     self controlMenu("open", "main");
  82.                     wait 0.2;
  83.                 }
  84.             }
  85.             else
  86.             {
  87.                 if( self attackButtonPressed() || self adsButtonPressed() )
  88.                 {
  89.                     self.menu["curs"] += self attackButtonPressed();
  90.                     self.menu["curs"] -= self adsButtonPressed();
  91.  
  92.                     if( self.menu["curs"] > self.menu["items"][self getCurrent()].name.size-1 )
  93.                         self.menu["curs"] = 0;
  94.                     if( self.menu["curs"] < 0 )
  95.                         self.menu["curs"] = self.menu["items"][self getCurrent()].name.size-1;
  96.  
  97.                     self thread scrollMenu();
  98.                     wait 0.2;
  99.                 }
  100.  
  101.                 if( self useButtonPressed() )
  102.                 {
  103.                     self thread [[self.menu["items"][self getCurrent()].func[self getCursor()]]] (
  104.                         self.menu["items"][self getCurrent()].input1[self getCursor()],
  105.                         self.menu["items"][self getCurrent()].input2[self getCursor()],
  106.                         self.menu["items"][self getCurrent()].input3[self getCursor()]
  107.                     );
  108.  
  109.                     wait 0.2;
  110.                 }
  111.  
  112.                 if( self meleeButtonPressed() )
  113.                 {
  114.                     if( isDefined(self.menu["items"][self getCurrent()].parent) )
  115.                         self controlMenu("newMenu", self.menu["items"][self getCurrent()].parent);
  116.                     else
  117.                         self controlMenu("close");
  118.                     wait 0.2;
  119.                 }
  120.             }
  121.         }
  122.         wait .05; //frame
  123.     }
  124. }
  125.  
  126. //Thanks to mikeeeyy for the original code.
  127. //Thanks to me for changing the code to work with more things :)
  128. scrollMenu()
  129. {
  130.     if(!isDefined(self.menu["items"][self getCurrent()].name[self getCursor()-3]) || self.menu["items"][self getCurrent()].name.size <= 7)
  131.     {
  132.         for(m = 0; m < 7; m++)
  133.                 self.menu["ui"]["text"][m] setText(self.menu["items"][self getCurrent()].name[m]);
  134.         self.menu["ui"]["scroller"] affectElement("y", 0.18, self.menu["ui"]["text"][self getCursor()].y);
  135.  
  136.        for( a = 0; a < 7; a ++ )
  137.         {
  138.             if( a != self getCursor() )
  139.                 self.menu["ui"]["text"][a] affectElement("alpha", 0.18, .3);
  140.         }
  141.         self.menu["ui"]["text"][self getCursor()] affectElement("alpha", 0.18, 1);
  142.         self iPrintLn("hud move");
  143.     }
  144.     else
  145.     {
  146.         if(isDefined(self.menu["items"][self getCurrent()].name[self getCursor()+3]))
  147.         {
  148.             optNum = 0;
  149.             for(m = self getCursor()-3; m < self getCursor()+4; m++)
  150.             {
  151.                 if(!isDefined(self.menu["items"][self getCurrent()].name[m]))
  152.                     self.menu["ui"]["text"][optNum] setText("");
  153.                 else
  154.                     self.menu["ui"]["text"][optNum] setText(self.menu["items"][self getCurrent()].name[m]);
  155.                 optNum++;
  156.             }
  157.             if( self.menu["ui"]["scroller"].y != self.menu["ui"]["text"][3].y )
  158.                 self.menu["ui"]["scroller"] affectElement("y", 0.18, self.menu["ui"]["text"][3].y);
  159.             if( self.menu["ui"]["text"][3].alpha != 1 )
  160.             {
  161.                 for( a = 0; a < 7; a ++ )
  162.                     self.menu["ui"]["text"][a] affectElement("alpha", 0.18, .3);
  163.                 self.menu["ui"]["text"][3] affectElement("alpha", 0.18, 1);    
  164.             }
  165.         }
  166.         else
  167.         {
  168.             for(m = 0; m < 7; m++)
  169.                 self.menu["ui"]["text"][m] setText(self.menu["items"][self getCurrent()].name[self.menu["items"][self getCurrent()].name.size+(m-7)]);
  170.             self.menu["ui"]["scroller"] affectElement("y", 0.18, self.menu["ui"]["text"][((self getCursor()-self.menu["items"][self getCurrent()].name.size)+7)].y);
  171.             for( a = 0; a < 7; a ++ )
  172.             {
  173.                 if( a != ((self getCursor()-self.menu["items"][self getCurrent()].name.size)+7) )
  174.                     self.menu["ui"]["text"][a] affectElement("alpha", 0.18, .3);
  175.             }
  176.             self.menu["ui"]["text"][((self getCursor()-self.menu["items"][self getCurrent()].name.size)+7)] affectElement("alpha", 0.18, 1);
  177.         }
  178.     }
  179. }
  180.  
  181. controlMenu( type, par1 )
  182. {
  183.     if( type == "open" )
  184.     {
  185.         self.menu["curs"] = 0;
  186.         self.menu["ui"]["background"] = self createRectangle("CENTER", "CENTER", 0, 0, 210, 200, (0, 0, 0), 1, 0, "white");
  187.         self.menu["ui"]["scroller"] = self createRectangle("CENTER", "CENTER", 0, -40, 210, 20, (0, 0, .5), 2, 0, "white");
  188.         self.menu["ui"]["barTop"] = self createRectangle("CENTER", "CENTER", 0, -75, 0, 35, (0, 0, .5), 3, 0, "white");
  189.         self.menu["ui"]["background"] affectElement("alpha", .2, .5);
  190.         self.menu["ui"]["scroller"] affectElement("alpha", .2, .9);
  191.         self.menu["ui"]["barTop"] affectElement("alpha", .1, .9);
  192.         self.menu["ui"]["barTop"] scaleOverTime(.3, 210, 35);
  193.         wait .2;
  194.         self buildTextOptions(par1);
  195.  
  196.         self.playerSetting["isInMenu"] = true;
  197.     }
  198.     if( type == "close" )
  199.     {
  200.         self.menu["isLocked"] = true;
  201.         self controlMenu("close_animation");
  202.         self.menu["ui"]["background"] scaleOverTime(.3, 210, 0);
  203.         self.menu["ui"]["scroller"] scaleOverTime(.3, 0, 20);
  204.         self.menu["ui"]["barTop"] scaleOverTime(.3, 0, 35);
  205.         wait .2;
  206.         self.menu["ui"]["background"] affectElement("alpha", .2, .1);
  207.         self.menu["ui"]["scroller"] affectElement("alpha", .2, .1);
  208.         self.menu["ui"]["barTop"] affectElement("alpha", .2, .1);
  209.         wait .2;
  210.         self.menu["ui"]["background"] destroy();
  211.         self.menu["ui"]["scroller"] destroy();
  212.         self.menu["ui"]["barTop"] destroy();
  213.         self.menu["curs"] = 0;
  214.         self.menu["isLocked"] = false;
  215.         self.playerSetting["isInMenu"] = false;
  216.     }
  217.     if( type == "newMenu")
  218.     {
  219.         self.menu["isLocked"] = true;
  220.         self controlMenu("close_animation");
  221.         self.menu["curs"] = 0;
  222.         self buildTextOptions(par1);
  223.         self.menu["ui"]["scroller"] affectElement("y", 0.18, self.menu["ui"]["text"][self getCursor()].y);
  224.         self.menu["isLocked"] = false;
  225.     }
  226.     if( type == "lock" )
  227.     {
  228.         self controlMenu("close");
  229.         self.menu["isLocked"] = true;
  230.     }
  231.     if( type == "unlock" )
  232.     {
  233.         self controlMenu("open");
  234.     }
  235.  
  236.     if( type == "close_animation" )
  237.     {
  238.         self.menu["ui"]["title"] affectElement("alpha", .2, 0);
  239.         for( a = 7; a >= 0; a-- )
  240.         {
  241.             self.menu["ui"]["text"][a] affectElement("alpha", .2, 0);
  242.             wait .05;      
  243.         }
  244.         for( a = 7; a >= 0; a-- )
  245.             self.menu["ui"]["text"][a] destroy();
  246.         self.menu["ui"]["title"] destroy();
  247.     }
  248. }
  249.  
  250. buildTextOptions(menu)
  251. {
  252.     self.menu["currentMenu"] = menu;
  253.     self.menu["ui"]["title"] = self createText(1.5, 5, self.menu["items"][menu].title, "CENTER", "CENTER", 0, -75, 0);
  254.     self.menu["ui"]["title"] affectElement("alpha", .2, 1);
  255.     for( a = 0; a < 7; a ++ )
  256.     {
  257.         self.menu["ui"]["text"][a] = self createText(1.2, 5, self.menu["items"][menu].name[a], "CENTER", "CENTER", 0, -40+(a*20), 0);
  258.         self.menu["ui"]["text"][a] affectElement("alpha", .2, .3);
  259.         wait .05;
  260.     }
  261.     self.menu["ui"]["text"][0] affectElement("alpha", .2, 1);
  262. }
  263.  
  264. //Menu utilities
  265. addMenu(menu, title, parent)
  266. {
  267.     if( !isDefined(self.menu["items"][menu]) )
  268.     {
  269.         self.menu["items"][menu] = spawnstruct();
  270.         self.menu["items"][menu].name = [];
  271.         self.menu["items"][menu].func = [];
  272.         self.menu["items"][menu].input1 = [];
  273.         self.menu["items"][menu].input2 = [];
  274.         self.menu["items"][menu].input3 = [];
  275.  
  276.         self.menu["items"][menu].title = title;
  277.  
  278.         if( isDefined( parent ) )
  279.             self.menu["items"][menu].parent = parent;
  280.         else
  281.             self.menu["items"][menu].parent = undefined;
  282.     }
  283.  
  284.     self.temp["memory"]["menu"]["currentmenu"] = menu; //this is a memory system feel free to use it
  285. }
  286.  
  287. /* Memory System
  288.  
  289.         something i am making up on the spot but seems usefull
  290.  
  291.         self.temp defines that it is a temp varable but needs to be on
  292.         global scope
  293.  
  294.         self.temp["memory"] tells you that it is a memory varable to
  295.         add it to a temp memory idea.
  296.  
  297.         self.temp["memory"]["menu"] means that it is for the menu
  298.  
  299.         self.temp["memory"]["menu"]["currentmenu"] means that it is
  300.         for the menus >> current memory.
  301.  
  302.         so the use of this is
  303.         self.temp[use][type][type for]
  304.  
  305.         enjoy :)
  306.  
  307. */
  308.  
  309. //Par = paramatars < but i can not spell that so fuck it
  310. addMenuPar(name, func, input1, input2, input3)
  311. {
  312.     menu = self.temp["memory"]["menu"]["currentmenu"];
  313.     count = self.menu["items"][menu].name.size;
  314.     self.menu["items"][menu].name[count] = name;
  315.     self.menu["items"][menu].func[count] = func;
  316.     if( isDefined(input1) )
  317.         self.menu["items"][menu].input1[count] = input1;
  318.     if( isDefined(input1) )
  319.         self.menu["items"][menu].input2[count] = input2;
  320.     if( isDefined(input1) )
  321.         self.menu["items"][menu].input3[count] = input3;
  322. }
  323.  
  324. /*
  325.         This function should only ever be used when you
  326.         are using addmenu out side of a loop and inside
  327.         that loop you are using addmenu. You will see this
  328.         in the verification.
  329. */
  330. addAbnormalMenu(menu, title, parent, name, func, input1, input2, input3)
  331. {
  332.     if( !isDefined(self.menu["items"][menu]) )
  333.             self addMenu(menu, title, parent); //title will never be changed after first menu is added.
  334.    
  335.     count = self.menu["items"][menu].name.size;
  336.     self.menu["items"][menu].name[count] = name;
  337.     self.menu["items"][menu].func[count] = func;
  338.     if( isDefined(input1) )
  339.         self.menu["items"][menu].input1[count] = input1;
  340.     if( isDefined(input1) )
  341.         self.menu["items"][menu].input2[count] = input2;
  342.     if( isDefined(input1) )
  343.         self.menu["items"][menu].input3[count] = input3;
  344. }
  345.  
  346. verificationOptions(par1, par2, par3)
  347. {
  348.     player = get_players()[par1];
  349.     if( par2 == "changeVerification" )
  350.     {
  351.         if( par1 == 0 )
  352.              return self iprintln( "You can not modify the host");
  353.         player setVerification(par3);
  354.         self iPrintLn(getNameNotClan( player )+"'s verification has been changed to "+par3);
  355.         player iPrintLn("Your verification has been changed to "+par3);
  356.     }
  357. }
  358.  
  359. setVerification( type )
  360. {
  361.     self.playerSetting["verfication"] = type;
  362.     self controlMenu("close");
  363.     self undefineMenu("main");
  364.     wait 0.2;
  365.     self runMenuIndex( true ); //this will only redefine the main menu
  366.     wait 0.2;
  367.     if( type != "unverified" )
  368.             self controlMenu("open", "main");
  369. }
  370.  
  371. getVerfication()
  372. {
  373.     if( self.playerSetting["verfication"] == "admin" )
  374.         return 3;
  375.     if( self.playerSetting["verfication"] == "co-host" )
  376.         return 2;
  377.     if( self.playerSetting["verfication"] == "verified" )
  378.         return 1;
  379.     if( self.playerSetting["verfication"] == "unverified" )
  380.         return 0;
  381. }
  382.  
  383. undefineMenu(menu)
  384. {
  385.     size = self.menu["items"][menu].name.size;
  386.     for( a = 0; a < size; a++ )
  387.     {
  388.         self.menu["items"][menu].name[a] = undefined;
  389.         self.menu["items"][menu].func[a] = undefined;
  390.         self.menu["items"][menu].input1[a] = undefined;
  391.         self.menu["items"][menu].input2[a] = undefined;
  392.         self.menu["items"][menu].input3[a] = undefined;        
  393.     }
  394. }
  395.  
  396. getCurrent()
  397. {
  398.     return self.menu["currentMenu"];
  399. }
  400.  
  401. getLocked()
  402. {
  403.     return self.menu["isLocked"];
  404. }
  405.  
  406. getUserIn()
  407. {
  408.     return self.playerSetting["isInMenu"];
  409. }
  410.  
  411. getCursor()
  412. {
  413.     return self.menu["curs"];
  414. }
  415.  
  416.  
  417. //UI utilities
  418. createText(fontSize, sorts, text, align, relative, x, y, alpha, color)
  419. {
  420.     uiElement = self createfontstring("default", fontSize);
  421.     uiElement setPoint(align, relative, x, y);
  422.     uiElement settext(text);
  423.     uiElement.sort = sorts;
  424.     if( isDefined(alpha) )
  425.         uiElement.alpha = alpha;
  426.     if( isDefined(color) )
  427.         uiElement.color = color;
  428.     return uiElement;
  429. }
  430.  
  431. createRectangle(align, relative, x, y, width, height, color, sort, alpha, shader)
  432. {
  433.     uiElement = newClientHudElem( self );
  434.     uiElement.elemType = "bar";
  435.     uiElement.width = width;
  436.     uiElement.height = height;
  437.     uiElement.align = align;
  438.     uiElement.relative = relative;
  439.     uiElement.xOffset = 0;
  440.     uiElement.yOffset = 0;
  441.     uiElement.children = [];
  442.     uiElement.sort = sort;
  443.     uiElement.color = color;
  444.     uiElement.alpha = alpha;
  445.     uiElement setParent( level.uiParent );
  446.     uiElement setShader( shader, width , height );
  447.     uiElement.hidden = false;
  448.     uiElement setPoint(align,relative,x,y);
  449.     return uiElement;
  450. }
  451.  
  452. affectElement(type, time, value)
  453. {
  454.     if( type == "x" || type == "y" )
  455.         self moveOverTime( time );
  456.     else
  457.         self fadeOverTime( time );
  458.  
  459.     if( type == "x" )
  460.         self.x = value;
  461.     if( type == "y" )
  462.         self.y = value;
  463.     if( type == "alpha" )
  464.         self.alpha = value;
  465.     if( type == "color" )
  466.         self.color = value;
  467. }
  468.  
  469. runMenuIndex( menu )
  470. {
  471.     self addmenu("main", "Main Menu");
  472.     //if verified
  473.     if( self getVerfication() > 0 )
  474.     {
  475.         self addMenuPar("main menu 1", ::controlMenu, "newMenu", "second");
  476.         self addMenuPar("main menu 2");
  477.         self addMenuPar("main menu 3");
  478.     }
  479.     //if cohost
  480.     if( self getVerfication() > 1 )
  481.     {
  482.         self addMenuPar("main menu 4");
  483.         self addMenuPar("main menu 5");
  484.         self addMenuPar("main menu 6");
  485.     }
  486.     //if host
  487.     if( self getVerfication() > 2 )
  488.     {
  489.         self addMenuPar("main menu 7");
  490.         self addMenuPar("main menu 8");
  491.         self addMenuPar("player Menu", ::controlMenu, "newMenu", "playerMenu");
  492.     }
  493.  
  494.     //any menus that work off of a verification change.
  495.     //should go before the if statment. If you dont then
  496.     //it shall not change when verification is changed.
  497.  
  498.     if( isDefined(menu) )
  499.             return;
  500.  
  501.     self addmenu("second", "second Menu", "main");
  502.     self addMenuPar("second menu 1");
  503.     self addMenuPar("second menu 2");
  504.     self addMenuPar("second menu 3");
  505.     self addMenuPar("second menu 4");
  506.     self addMenuPar("second menu 5");
  507.     self addMenuPar("second menu 6");
  508.     self addMenuPar("second menu 7");
  509.     self addMenuPar("second menu 8");
  510.     self addMenuPar("second menu 9");
  511.     self addMenuPar("second menu 10");
  512.     self addMenuPar("second menu 11");
  513.     self addMenuPar("second menu 7");
  514.     self addMenuPar("second menu 13");
  515.     self addMenuPar("second menu 14");
  516.     self addMenuPar("second menu 15");
  517.     self addMenuPar("second menu 16");
  518.     self addMenuPar("second menu 17");
  519.     self addMenuPar("second menu 18");
  520.     self addMenuPar("second menu 19");
  521.    
  522.     for( a = 0; a < get_players().size; a++ )
  523.     {
  524.         player = get_players()[a];
  525.         self addAbnormalMenu("playerMenu", "Player Menu", "main", getNameNotClan( player )+" Options", ::controlMenu, "newMenu", getNameNotClan( player )+"options");
  526.  
  527.         self addAbnormalMenu(getNameNotClan( player )+"options", getNameNotClan( player )+" Options", "playerMenu", "unverified", ::verificationOptions, a, "changeVerification", "unverified");
  528.         self addAbnormalMenu(getNameNotClan( player )+"options", "", "", "verified", ::verificationOptions, a, "changeVerification", "verified");
  529.         self addAbnormalMenu(getNameNotClan( player )+"options", "", "", "co-host", ::verificationOptions, a, "changeVerification", "co-host");
  530.         self addAbnormalMenu(getNameNotClan( player )+"options", "", "", "admin", ::verificationOptions, a, "changeVerification", "admin");
  531.     }
  532. }
  533.  
  534. getNameNotClan( player )
  535. {
  536.     for( a = 0; a < player.name.size; a++ )
  537.     {
  538.         if( player.name[a] == "[" )
  539.             return getSubStr(player.name , 6, player.name.size);
  540.         else
  541.             return player.name;
  542.     }
  543. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement