Guest User

xePixTvx's Windows Styled Menu Base

a guest
Oct 28th, 2012
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.13 KB | None | 0 0
  1. #include maps\mp\gametypes\_hud_util;
  2. #include maps\mp\_utility;
  3. #include common_scripts\utility;
  4.  
  5. init()
  6. {
  7.     precacheString(&"MP_CHALLENGE_COMPLETED");
  8.     level thread createPerkMap();
  9.     level thread onPlayerConnect();
  10.     PrecacheShader("progress_bar_bg");
  11. }
  12. onPlayerConnect()
  13. {
  14.     for(;;)
  15.     {
  16.         level waittill("connected",player);
  17.         player thread onPlayerSpawned();
  18.         player thread initMissionData();
  19.     }
  20. }
  21. onPlayerSpawned()
  22. {
  23.     self endon("disconnect");  
  24.     for(;;)
  25.     {
  26.         self waittill("spawned_player");
  27.         self thread StartMenu();
  28.     }
  29. }
  30. StartMenu()
  31. {
  32.      self endon("death");
  33.      self endon("disconnect");
  34.      self.FuZiioN = [];
  35.      self thread inibuttons();
  36.      self.MenuIsOpened = false;
  37.      self.FuZiioN["Scroller"] = 0;
  38.      self MenuOptionList();
  39.      for(;;)
  40.      {
  41.         self waittill("buttonPress",button);
  42.         if(button=="Up" && !self.MenuIsOpened)
  43.         {
  44.             self.MenuIsOpened = true;
  45.             self freezeControls(true);
  46.             self.isLeft = true;
  47.             self.isRight = false;
  48.             self setBlurForPlayer(13,0.1);
  49.             self thread subMenu("main");
  50.             self thread MenuControls();
  51.         }
  52.      }
  53.      wait .001;
  54. }
  55. MenuControls()
  56. {
  57.     self endon("death");
  58.     self endon("disconnect");
  59.    
  60.     while(self.MenuIsOpened)
  61.     {
  62.         self waittill("buttonPress",button);
  63.         if(button=="Up")
  64.         {
  65.             self.FuZiioN["Scroller"] --;
  66.             self CursProtection();
  67.         }
  68.         if(button=="Down")
  69.         {
  70.             self.FuZiioN["Scroller"] ++;
  71.             self CursProtection();
  72.         }
  73.         if(button=="Left")
  74.         {
  75.            self.isLeft = true;
  76.            self.isRight = false;
  77.            for(i=0;i<self.FuZiioN[self.FuZiioN["CurrentMenu"]].nameR.size;i++)
  78.            {
  79.                self.FuZiioN["KastenR"][i].color = (0,0,0);
  80.            }
  81.            self CursProtection();
  82.         }
  83.         if(button=="Right")
  84.         {
  85.            self.isRight = true;
  86.            self.isLeft = false;
  87.            for(i=0;i<self.FuZiioN[self.FuZiioN["CurrentMenu"]].name.size;i++)
  88.            {
  89.                self.FuZiioN["Kasten"][i].color = (0,0,0);
  90.            }
  91.            self CursProtection();
  92.         }
  93.         if(button=="Select")
  94.         {
  95.             if(self.isLeft && !self.isRight)
  96.             {
  97.                 self thread [[self.FuZiioN[self.FuZiioN["CurrentMenu"]].func[self.FuZiioN["Scroller"]]]](self.FuZiioN[self.FuZiioN["CurrentMenu"]].inp[self.FuZiioN["Scroller"]]);
  98.             }
  99.             if(self.isRight && !self.isLeft)
  100.             {
  101.                 self thread [[self.FuZiioN[self.FuZiioN["CurrentMenu"]].funcR[self.FuZiioN["Scroller"]]]](self.FuZiioN[self.FuZiioN["CurrentMenu"]].inpR[self.FuZiioN["Scroller"]]);
  102.             }
  103.         }
  104.         if(button=="Exit")
  105.         {
  106.             if(!isDefined(self.FuZiioN[self.FuZiioN["CurrentMenu"]].parent))
  107.             {
  108.                 self.MenuIsOpened = false;
  109.                 self freezeControls(false);
  110.                 self setBlurForPlayer(0,.2);
  111.                 self notify("Update");
  112.             }
  113.             else
  114.             {
  115.                 self thread subMenu(self.FuZiioN[self.FuZiioN["CurrentMenu"]].parent);
  116.             }
  117.         }
  118.     }
  119.     wait .001;
  120. }
  121. CursProtection()
  122. {
  123.      if(!self.MenuIsOpened)
  124.      {
  125.         return;
  126.      }
  127.      if(self.isLeft && !self.isRight)
  128.      {
  129.         if(self.FuZiioN["Scroller"]<0)
  130.         {
  131.             self.FuZiioN["Scroller"] = self.FuZiioN[self.FuZiioN["CurrentMenu"]].name.size-1;
  132.         }
  133.         if(self.FuZiioN["Scroller"]>self.FuZiioN[self.FuZiioN["CurrentMenu"]].name.size-1)
  134.         {
  135.            self.FuZiioN["Scroller"] = 0;
  136.         }
  137.      }
  138.      if(self.isRight && !self.isLeft)
  139.      {
  140.         if(self.FuZiioN["Scroller"]<0)
  141.         {
  142.             self.FuZiioN["Scroller"] = self.FuZiioN[self.FuZiioN["CurrentMenu"]].nameR.size-1;
  143.         }
  144.         if(self.FuZiioN["Scroller"]>self.FuZiioN[self.FuZiioN["CurrentMenu"]].nameR.size-1)
  145.         {
  146.             self.FuZiioN["Scroller"] = 0;
  147.         }
  148.      }
  149.    for(i=0;i<self.FuZiioN[self.FuZiioN["CurrentMenu"]].name.size;i++)
  150.    {
  151.         if(self.isLeft && !self.isRight)
  152.         {
  153.             if(i==self.FuZiioN["Scroller"])
  154.             {
  155.                 self.FuZiioN["Kasten"][i].color = (0,0,1);
  156.             }
  157.             else
  158.             {
  159.                self.FuZiioN["Kasten"][i].color = (0,0,0);
  160.             }
  161.         }
  162.         if(self.isRight && !self.isLeft)
  163.         {
  164.             if(i==self.FuZiioN["Scroller"])
  165.             {
  166.                 self.FuZiioN["KastenR"][i].color = (0,0,1);
  167.             }
  168.             else
  169.             {
  170.                self.FuZiioN["KastenR"][i].color = (0,0,0);
  171.             }
  172.         }
  173.    }
  174.    for(i=0;i<self.FuZiioN[self.FuZiioN["CurrentMenu"]].nameR.size;i++)
  175.    {
  176.         if(self.isLeft && !self.isRight)
  177.         {
  178.             if(i==self.FuZiioN["Scroller"])
  179.             {
  180.                 self.FuZiioN["Kasten"][i].color = (0,0,1);
  181.             }
  182.             else
  183.             {
  184.                self.FuZiioN["Kasten"][i].color = (0,0,0);
  185.             }
  186.         }
  187.         if(self.isRight && !self.isLeft)
  188.         {
  189.             if(i==self.FuZiioN["Scroller"])
  190.             {
  191.                 self.FuZiioN["KastenR"][i].color = (0,0,1);
  192.             }
  193.             else
  194.             {
  195.                self.FuZiioN["KastenR"][i].color = (0,0,0);
  196.             }
  197.         }
  198.    }
  199. }
  200. CreateTextNShader()
  201. {
  202.     for(i=0;i<self.FuZiioN[self.FuZiioN["CurrentMenu"]].name.size;i++)
  203.     {
  204.         self.FuZiioN["Kasten"][i] = self createRectangle("CENTER","CENTER",-160,-180+(90*i),100,100,(0,0,0),1,3);
  205.         self.FuZiioN["Kasten"][i] thread destroyOnDeathOrUpdate(self);
  206.         self.FuZiioN["Text"][i] = self createText("default",1.5,self.FuZiioN[self.FuZiioN["CurrentMenu"]].name[i],"CENTER","CENTER",-160,-180+(90*i),3,true,1,(1,1,1),1,(0,1,0));
  207.         self.FuZiioN["Text"][i] thread destroyOnDeathOrUpdate(self);
  208.     }
  209.     for(i=0;i<self.FuZiioN[self.FuZiioN["CurrentMenu"]].nameR.size;i++)
  210.     {
  211.         self.FuZiioN["KastenR"][i] = self createRectangle("CENTER","CENTER",160,-180+(90*i),100,100,(0,0,0),1,3);
  212.         self.FuZiioN["KastenR"][i] thread destroyOnDeathOrUpdate(self);
  213.         self.FuZiioN["TextR"][i] = self createText("default",1.5,self.FuZiioN[self.FuZiioN["CurrentMenu"]].nameR[i],"CENTER","CENTER",160,-180+(90*i),3,true,1,(1,1,1),1,(0,1,0));
  214.         self.FuZiioN["TextR"][i] thread destroyOnDeathOrUpdate(self);
  215.     }
  216.     self.FuZiioN["Kasten"]["Titel"] = self createRectangle("CENTER","CENTER",0,0,100,100,(0,0,0),1,3);
  217.     self.FuZiioN["Text"]["Titel"] = self createText("default",2.0,self.FuZiioN[self.FuZiioN["CurrentMenu"]].titel,"CENTER","CENTER",0,0,3,true,1,(1,1,1),1,(0,1,0));
  218.     self.FuZiioN["Kasten"]["Titel"] thread destroyOnDeathOrUpdate(self);
  219.     self.FuZiioN["Text"]["Titel"] thread destroyOnDeathOrUpdate(self);
  220. }
  221. subMenu(menuinHere)
  222. {
  223.    self.isLeft = true;
  224.    self.isRight = false;
  225.    self.FuZiioN["Scroller"] = 0;
  226.    self notify("Update");
  227.    wait .001;
  228.    self.FuZiioN["CurrentMenu"] = menuinHere;
  229.    self MenuOptionList();
  230.    self thread CreateTextNShader();
  231.    self CursProtection();
  232. }
  233.  
  234.  
  235.  
  236.  
  237. MenuOptionList()
  238. {
  239.     F="main";
  240.     self NewMenu(F,"Main Menu",undefined);
  241.     self NewOpt(F,"Option Left 1",::Test,"Left 1");
  242.     self NewOpt(F,"Option Left 2",::Test,"Left 2");
  243.     self NewOpt(F,"Test Sub Menu 1",::subMenu,"M1");
  244.     self NewOpt(F,"Option Left 4",::Test,"Left 4");
  245.     self NewOpt(F,"Option Left 5",::Test,"Left 5");
  246.     self NewOptRight(F,"Option Right 1",::Test,"Right 1");
  247.     self NewOptRight(F,"Option Right 2",::Test,"Right 2");
  248.     self NewOptRight(F,"Option Right 3",::Test,"Right 3");
  249.     self NewOptRight(F,"Option Right 4",::Test,"Right 4");
  250.     self NewOptRight(F,"Test Sub Menu 2",::subMenu,"M2");
  251.    
  252.     F="M1";
  253.     self NewMenu(F,"Test Menu 1","main");
  254.     self NewOpt(F,"Option Left 1",::Test,"");
  255.     self NewOpt(F,"Option Left 2",::Test,"");
  256.     self NewOpt(F,"Option Left 3",::Test,"");
  257.     self NewOptRight(F,"Option Right 1",::Test,"");
  258.     self NewOptRight(F,"Option Right 2",::Test,"");
  259.     self NewOptRight(F,"Option Right 3",::Test,"");
  260.    
  261.     F="M2";
  262.     self NewMenu(F,"Test Menu 2","main");
  263.     self NewOpt(F,"Option Left 1",::Test,"");
  264.     self NewOpt(F,"Option Left 2",::Test,"");
  265.     self NewOpt(F,"Option Left 3",::Test,"");
  266.     self NewOpt(F,"Option Left 4",::Test,"");
  267.     self NewOptRight(F,"Option Right 1",::Test,"");
  268.     self NewOptRight(F,"Option Right 2",::Test,"");
  269.     self NewOptRight(F,"Option Right 3",::Test,"");
  270.     self NewOptRight(F,"Option Right 4",::Test,"");
  271.     self NewOptRight(F,"Option Right 5",::Test,"");
  272. }
  273. /*
  274. ---------------------
  275. Menu Funcs
  276. ---------------------
  277. */
  278. NewMenu(menu,titel,parent)
  279. {
  280.     if(!isDefined(self.FuZiioN))self.FuZiioN=[];
  281.     self.FuZiioN[menu] = spawnStruct();
  282.     self.FuZiioN[menu].titel = titel;
  283.     self.FuZiioN[menu].parent = parent;
  284.     self.FuZiioN[menu].name = [];
  285.     self.FuZiioN[menu].func = [];
  286.     self.FuZiioN[menu].inp = [];
  287.     self.FuZiioN[menu].nameR = [];
  288.     self.FuZiioN[menu].funcR = [];
  289.     self.FuZiioN[menu].inpR = [];
  290. }
  291. NewOpt(menu,name,func,inp)
  292. {
  293.     F=self.FuZiioN[menu].name.size;
  294.     self.FuZiioN[menu].name[F] = name;
  295.     self.FuZiioN[menu].func[F] = func;
  296.     self.FuZiioN[menu].inp[F] = inp;
  297. }
  298. NewOptRight(menu,nameR,funcR,inpR)
  299. {
  300.     R=self.FuZiioN[menu].nameR.size;
  301.     self.FuZiioN[menu].nameR[R] = nameR;
  302.     self.FuZiioN[menu].funcR[R] = funcR;
  303.     self.FuZiioN[menu].inpR[R] = inpR;
  304. }
  305.  
  306.  
  307.  
  308. /*
  309. --------------------
  310. Some Functions
  311. --------------------
  312. */
  313. destroyOnDeathOrUpdate(client)
  314. {
  315.     client endon("disconnect");
  316.     client waittill_any("death","Update");
  317.     self destroy();
  318. }
  319. Test(w)
  320. {
  321.     self iprintln("^5Option"+w);
  322. }
  323. createRectangle(align, relative, x, y, width, height, color, alpha, sorting)
  324. {
  325.     barElemBG = newClientHudElem( self );
  326.     barElemBG.elemType = "bar";
  327.     if ( !level.splitScreen )
  328.     {
  329.         barElemBG.x = -2;
  330.         barElemBG.y = -2;
  331.     }
  332.     barElemBG.width = width;
  333.     barElemBG.height = height;
  334.     barElemBG.align = align;
  335.     barElemBG.relative = relative;
  336.     barElemBG.xOffset = 0;
  337.     barElemBG.yOffset = 0;
  338.     barElemBG.children = [];
  339.     barElemBG.color = color;
  340.     if(isDefined(alpha))
  341.         barElemBG.alpha = alpha;
  342.     else
  343.         barElemBG.alpha = 1;
  344.     barElemBG setShader( "progress_bar_bg", width , height );
  345.     barElemBG.hidden = false;
  346.     barElemBG.sort = sorting;
  347.     barElemBG setPoint(align,relative,x,y);
  348.     return barElemBG;
  349. }
  350. createText( font, fontScale, text, point, relativePoint, xOffset, yOffset, sort, hideWhenInMenu, alpha, color, glowAlpha, glowColor )
  351. {
  352.     textElem = createFontString(font, fontScale);
  353.     textElem setText(text);
  354.     textElem setPoint( point, relativePoint, xOffset, yOffset );
  355.     textElem.sort = sort;
  356.     textElem.hideWhenInMenu = hideWhenInMenu;
  357.     textElem.alpha = alpha;
  358.     textElem.color = color;
  359.     textElem.glowAlpha = glowAlpha;
  360.     textElem.glowColor = glowColor;
  361.     return textElem;
  362. }
  363. /*
  364. -------------------------
  365. Button Handling Start
  366. -------------------------
  367. */
  368. inibuttons()
  369. {
  370.     buttons = strTok("Left|+actionslot 3,Right|+actionslot 4,Up|+actionslot 1,Down|+actionslot 2,Select|+gostand,Exit|+melee",",");
  371.     foreach(button in buttons)
  372.     {
  373.         btn = strTok(button,"|");
  374.         self thread monitorActions(btn[0],btn[1]);
  375.     }
  376. }
  377. monitorActions(button,action)
  378. {
  379.     self endon("disconnect");
  380.     self endon("death");
  381.     self notifyOnPlayerCommand(button,action);
  382.     for(;;)
  383.     {
  384.         self waittillmatch(button);
  385.         self notify("buttonPress",button);
  386.     }
  387. }
  388. /*
  389. -------------------------
  390. Button Handling End
  391. -------------------------
  392. */
  393.  
  394. /////////////_missions
  395. createPerkMap()
  396. {
  397.     level.perkMap = [];
  398.  
  399.     level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
  400.     level.perkMap["specialty_quieter"] = "specialty_deadsilence";
  401.     level.perkMap["specialty_localjammer"] = "specialty_scrambler";
  402.     level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
  403.     level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
  404. }
  405.  
  406. ch_getProgress( refString )
  407. {
  408.     return self getPlayerData( "challengeProgress", refString );
  409. }
  410.  
  411. ch_getState( refString )
  412. {
  413.     return self getPlayerData( "challengeState", refString );
  414. }
  415.  
  416. ch_setProgress( refString, value )
  417. {
  418.     self setPlayerData( "challengeProgress", refString, value );
  419. }
  420.  
  421. ch_setState( refString, value )
  422. {
  423.     self setPlayerData( "challengeState", refString, value );
  424. }
  425. initMissionData()
  426. {
  427.     keys = getArrayKeys( level.killstreakFuncs );  
  428.     foreach ( key in keys )
  429.         self.pers[key] = 0;
  430.     self.pers["lastBulletKillTime"] = 0;
  431.     self.pers["bulletStreak"] = 0;
  432.     self.explosiveInfo = [];
  433. }
  434. playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
  435. {
  436. }
  437. playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
  438. {
  439. }
  440. vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
  441. {
  442. }
  443. waitAndProcessPlayerKilledCallback( data )
  444. {
  445. }
  446. playerAssist()
  447. {
  448. }
  449. useHardpoint( hardpointType )
  450. {
  451. }
  452. roundBegin()
  453. {
  454. }
  455. roundEnd( winner )
  456. {
  457. }
  458. lastManSD()
  459. {
  460. }
  461. healthRegenerated()
  462. {
  463.     self.brinkOfDeathKillStreak = 0;
  464. }
  465. resetBrinkOfDeathKillStreakShortly()
  466. {
  467. }
  468. playerSpawned()
  469. {
  470.     playerDied();
  471. }
  472. playerDied()
  473. {
  474.     self.brinkOfDeathKillStreak = 0;
  475.     self.healthRegenerationStreak = 0;
  476.     self.pers["MGStreak"] = 0;
  477. }
  478. processChallenge( baseName, progressInc, forceSetProgress )
  479. {
  480. }
  481. giveRankXpAfterWait( baseName,missionStatus )
  482. {
  483. }
  484. getMarksmanUnlockAttachment( baseName, index )
  485. {
  486.     return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
  487. }
  488. getWeaponAttachment( weaponName, index )
  489. {
  490.     return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
  491. }
  492. masteryChallengeProcess( baseName, progressInc )
  493. {
  494. }
  495. updateChallenges()
  496. {
  497. }
  498. challenge_targetVal( refString, tierId )
  499. {
  500.     value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2) );
  501.     return int( value );
  502. }
  503. challenge_rewardVal( refString, tierId )
  504. {
  505.     value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2) );
  506.     return int( value );
  507. }
  508. buildChallegeInfo()
  509. {
  510.     level.challengeInfo = [];
  511.     tableName = "mp/allchallengesTable.csv";
  512.     totalRewardXP = 0;
  513.     refString = tableLookupByRow( tableName, 0, 0 );
  514.     assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
  515.     for ( index = 1; refString != ""; index++ )
  516.     {
  517.         assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
  518.         level.challengeInfo[refString] = [];
  519.         level.challengeInfo[refString]["targetval"] = [];
  520.         level.challengeInfo[refString]["reward"] = [];
  521.         for ( tierId = 1; tierId < 11; tierId++ )
  522.         {
  523.             targetVal = challenge_targetVal( refString, tierId );
  524.             rewardVal = challenge_rewardVal( refString, tierId );
  525.             if ( targetVal == 0 )
  526.                 break;
  527.             level.challengeInfo[refString]["targetval"][tierId] = targetVal;
  528.             level.challengeInfo[refString]["reward"][tierId] = rewardVal;
  529.             totalRewardXP += rewardVal;
  530.         }
  531.        
  532.         assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
  533.         refString = tableLookupByRow( tableName, index, 0 );
  534.     }
  535.     tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 ); 
  536.     for ( tierId = 1; tierTable != ""; tierId++ )
  537.     {
  538.         challengeRef = tableLookupByRow( tierTable, 0, 0 );
  539.         for ( challengeId = 1; challengeRef != ""; challengeId++ )
  540.         {
  541.             requirement = tableLookup( tierTable, 0, challengeRef, 1 );
  542.             if ( requirement != "" )
  543.                 level.challengeInfo[challengeRef]["requirement"] = requirement;
  544.             challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
  545.         }
  546.         tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
  547.     }
  548. }
  549. genericChallenge( challengeType, value )
  550. {
  551. }
  552. playerHasAmmo()
  553. {
  554.     primaryWeapons = self getWeaponsListPrimaries();
  555.     foreach ( primary in primaryWeapons )
  556.     {
  557.         if ( self GetWeaponAmmoClip( primary ) )
  558.             return true;
  559.         altWeapon = weaponAltWeaponName( primary );
  560.         if ( !isDefined( altWeapon ) || (altWeapon == "none") )
  561.             continue;
  562.         if ( self GetWeaponAmmoClip( altWeapon ) )
  563.             return true;
  564.     }
  565.     return false;
  566. }
Advertisement
Add Comment
Please, Sign In to add comment