Advertisement
Guest User

MX_Master

a guest
May 31st, 2009
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 27.80 KB | None | 0 0
  1. /*
  2.     Dynamic Menus (dynMenus)
  3.     by MX_Master
  4.  
  5.     it's include file for "GTA San Andreas Multiplayer" scripts
  6.  
  7.     (!) a_samp.inc (<a_samp>) file must be included before this file
  8.     (!) place onPlayerExitedMenu(playerid); into OnPlayerExitedMenu callback
  9.     (!) place onPlayerSelectedMenuRow(playerid,row); into OnPlayerSelectedMenuRow callback
  10.  
  11.     (?) use showMenuForPlayer and hideMenuForPlayer functions wherever you want
  12. */
  13.  
  14.  
  15.  
  16.  
  17. //
  18. //  current menu data for each player ..........
  19. //
  20. enum playerMenuParams
  21. {
  22.     menuClass,
  23.     menuID,
  24.  
  25.     Menu:menu
  26. }
  27.  
  28. stock playerMenu[MAX_PLAYERS][playerMenuParams]; // current menu data for each player
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. //
  41. //  your menu options ..........
  42. //
  43. #define NO_MENU                 0 // no menu ID or class ID
  44. #define FREEZE_PLAYER_IN_MENU   1 // freeze or not freeze player until he browsing any menu
  45.  
  46. // eat menu position and width (example)
  47. #define EAT_MENU_COLS           1 // for buy menu (food,cost) uses 2 and this value will be ignored
  48. #define EAT_MENU_POSX           30.0
  49. #define EAT_MENU_POSY           140.0
  50. #define EAT_MENU_COL1_WIDTH     120.0
  51. #define EAT_MENU_COL2_WIDTH     50.0
  52.  
  53. // ammu menu position and width (example)
  54. #define AMMU_MENU_COLS          1 // for buy menu (weapon,cost) uses 2 and this value will be ignored
  55. #define AMMU_MENU_POSX          30.0
  56. #define AMMU_MENU_POSY          140.0
  57. #define AMMU_MENU_COL1_WIDTH    120.0
  58. #define AMMU_MENU_COL2_WIDTH    50.0
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. //
  71. //  your menu classes ..........
  72. //
  73. enum // menu classes
  74. {
  75.     menuClassNo, // no menu
  76.     menuClassEat, // eat menu class (example)
  77.     menuClassAmmu // ammu menu class (example)
  78.     // ... insert here your own menu classes
  79. }
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91. //
  92. //  your menus IDs ..........
  93. //
  94.  
  95. // eat menu IDs (example)
  96. enum
  97. {
  98.     menuEatNo, // no menu
  99.  
  100.     menuEatMain, // main eat menu
  101.  
  102.     menuEatPizza, // pizza buy menu
  103.     menuEatChicken, // chicken buy menu
  104.     menuEatSalad // salad buy menu
  105. }
  106.  
  107.  
  108.  
  109.  
  110. // ammu menu IDs (example)
  111. enum
  112. {
  113.     menuAmmuNo, // no menu
  114.  
  115.     // main
  116.     menuAmmuMain, // main ammu menu
  117.  
  118.     // lists
  119.     menuAmmuMelee, // ammu menu with melee weapons list
  120.     menuAmmuSpecial, // ammu menu with special weapons list
  121.     menuAmmuPistols, // ammu menu with pistols list
  122.     menuAmmuShotguns, // ammu menu with shotguns list
  123.     menuAmmuRifles, // ammu menu with .. list
  124.     menuAmmuAssault, // ..
  125.     menuAmmuMicroSMGs,
  126.     menuAmmuArmors,
  127.     menuAmmuThrown,
  128.     menuAmmuHeavy,
  129.  
  130.     // melee buy menus
  131.     menuAmmuNiteStick, // ammu buy menu for NiteStick only
  132.     menuAmmuBat, // ammu buy menu for Bat only
  133.     menuAmmuCane, // ammu buy menu for .. only
  134.     menuAmmuFlower, // ..
  135.     menuAmmuDildo,
  136.     menuAmmuBrassknuckle,
  137.     menuAmmuKnife,
  138.     menuAmmuGolfClub,
  139.     menuAmmuPoolStick,
  140.     menuAmmuShovel,
  141.     menuAmmuKatana,
  142.     menuAmmuChainSaw,
  143.  
  144.     // special weapons buy menus
  145.     menuAmmuCamera,
  146.     menuAmmuSpraycan,
  147.     menuAmmuFireExtinguisher,
  148.     menuAmmuParachute,
  149.  
  150.     // pistols buy menus
  151.     menuAmmuColt45,
  152.     menuAmmuSilenced,
  153.     menuAmmuDeagle,
  154.  
  155.     // .. buy menus
  156.     menuAmmuShotgun,
  157.     menuAmmuSawnoff,
  158.     menuAmmuCombatShotgun,
  159.  
  160.     // ..
  161.     menuAmmuTec9,
  162.     menuAmmuUzi,
  163.  
  164.     menuAmmuRifle,
  165.     menuAmmuSniper,
  166.  
  167.     menuAmmuMP5,
  168.     menuAmmuAK47,
  169.     menuAmmuM4,
  170.  
  171.     menuAmmuArmor,
  172.  
  173.     menuAmmuGrenade,
  174.     menuAmmuTearGas,
  175.     menuAmmuMolotov,
  176.  
  177.     menuAmmuFlameThrower,
  178.     menuAmmuRocketLauncher,
  179.     menuAmmuHeatSeeker,
  180.     menuAmmuMinigun
  181. }
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203. //
  204. //  4 menu tools ..........
  205. //
  206.  
  207. #define plMenu playerMenu[playerid][menu] // (!) short code optimization ;)
  208.  
  209.  
  210.  
  211.  
  212. //
  213. //  use this function if you want to hide any menu for player
  214. //
  215. stock hideMenuForPlayer ( playerid )
  216. {
  217.     if ( playerMenu[playerid][menuClass] == NO_MENU ) return;
  218.  
  219.     HideMenuForPlayer( plMenu, playerid );
  220.     DestroyMenu( plMenu );
  221.  
  222.     playerMenu[playerid][menuClass] = NO_MENU;
  223.     playerMenu[playerid][menuID] = NO_MENU;
  224. }
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236. //
  237. //  use this function if you want to show any menu for player
  238. //
  239. //  (!) playerMenuClass must be correct! See ^ "your menu classes"
  240. //  (!) playerMenuID must be correct! See ^ "your menu IDs"
  241. //
  242. stock showMenuForPlayer ( playerid, playerMenuClass, playerMenuID )
  243. {
  244.     hideMenuForPlayer(playerid); // hide any menu for player
  245.  
  246.  
  247.  
  248.  
  249.     // freeze player
  250.     #if FREEZE_PLAYER_IN_MENU == 1
  251.         TogglePlayerControllable( playerid, 0 );
  252.     #endif
  253.  
  254.  
  255.  
  256.  
  257.     // choosing player menu class
  258.     switch ( playerMenuClass )
  259.     {
  260.         case menuClassAmmu : // it's one of ammu menus
  261.         {
  262.             // create menu for player
  263.             switch ( playerMenuID )
  264.             {
  265.                 // if it's buy menu we must use 2 columns instead of 1
  266.                 // also we can add culumn headers
  267.                 case menuAmmuNiteStick..menuAmmuMinigun :
  268.                 {
  269.                     plMenu = CreateMenu( "Ammu", 2, AMMU_MENU_POSX, AMMU_MENU_POSY, AMMU_MENU_COL1_WIDTH, AMMU_MENU_COL2_WIDTH );
  270.  
  271.                     SetMenuColumnHeader( plMenu, 0, "weapon" );
  272.                     SetMenuColumnHeader( plMenu, 1, "cost" );
  273.                 }
  274.  
  275.                 // if it's just list of items, we must use 1 column
  276.                 default :
  277.                     plMenu = CreateMenu( "Ammu", AMMU_MENU_COLS, AMMU_MENU_POSX, AMMU_MENU_POSY, AMMU_MENU_COL1_WIDTH, AMMU_MENU_COL2_WIDTH );
  278.             }
  279.  
  280.  
  281.  
  282.  
  283.             // add some rows to created menu
  284.             switch ( playerMenuID )
  285.             {
  286.                 // main ammu menu
  287.  
  288.                 case menuAmmuMain : // ammu menu with weapon groups
  289.                 {
  290.                     AddMenuItem( plMenu, 0, "Melee" );
  291.                     AddMenuItem( plMenu, 0, "Special" );
  292.                     AddMenuItem( plMenu, 0, "Pistols" );
  293.                     AddMenuItem( plMenu, 0, "Shotguns" );
  294.                     AddMenuItem( plMenu, 0, "Rifles" );
  295.                     AddMenuItem( plMenu, 0, "Assault" );
  296.                     AddMenuItem( plMenu, 0, "Micro SMGs" );
  297.                     AddMenuItem( plMenu, 0, "Armours" );
  298.                     AddMenuItem( plMenu, 0, "Thrown" );
  299.                     AddMenuItem( plMenu, 0, "Heavy" );
  300.  
  301.                     // dynamic menu rows EXAMPLES
  302.  
  303.                     // disable armours if player have less than 5 score points
  304.                     if ( GetPlayerScore(playerid) < 5 ) DisableMenuRow( plMenu, 7 );
  305.  
  306.                     // disable thrown weapons if player have less than 10 score points
  307.                     if ( GetPlayerScore(playerid) < 10 ) DisableMenuRow( plMenu, 8 );
  308.  
  309.                     // disable heavy weapons if player have less than 20 score points
  310.                     if ( GetPlayerScore(playerid) < 20 ) DisableMenuRow( plMenu, 9 );
  311.                 }
  312.  
  313.                 // ammu menus with weapons lists
  314.  
  315.                 case menuAmmuMelee : // ammu menu with melee weapons list
  316.                 {
  317.                     AddMenuItem( plMenu, 0, "Nite Stick" );
  318.                     AddMenuItem( plMenu, 0, "Bat" );
  319.                     AddMenuItem( plMenu, 0, "Cane" );
  320.                     AddMenuItem( plMenu, 0, "Flower" );
  321.                     AddMenuItem( plMenu, 0, "Dildo" );
  322.                     AddMenuItem( plMenu, 0, "Brassknuckle" );
  323.                     AddMenuItem( plMenu, 0, "Knife" );
  324.                     AddMenuItem( plMenu, 0, "Golf Club" );
  325.                     AddMenuItem( plMenu, 0, "Pool Stick" );
  326.                     AddMenuItem( plMenu, 0, "Shovel" );
  327.                     AddMenuItem( plMenu, 0, "Katana" );
  328.                     AddMenuItem( plMenu, 0, "Chain Saw" );
  329.                 }
  330.                 case menuAmmuSpecial : // ammu menu with special weapons list
  331.                 {
  332.                     AddMenuItem( plMenu, 0, "Camera" );
  333.                     AddMenuItem( plMenu, 0, "Spraycan" );
  334.                     AddMenuItem( plMenu, 0, "Fire Extinguisher" );
  335.                     AddMenuItem( plMenu, 0, "Parachute" );
  336.                 }
  337.                 case menuAmmuPistols : // ammu menu with pistols list
  338.                 {
  339.                     AddMenuItem( plMenu, 0, "Colt 45" );
  340.                     AddMenuItem( plMenu, 0, "Silenced Colt" );
  341.                     AddMenuItem( plMenu, 0, "Deagle" );
  342.                 }
  343.                 case menuAmmuShotguns : // ammu menu with shotguns list
  344.                 {
  345.                     AddMenuItem( plMenu, 0, "Shotgun" );
  346.                     AddMenuItem( plMenu, 0, "Sawnoff" );
  347.                     AddMenuItem( plMenu, 0, "Combat Shotgun" );
  348.                 }
  349.                 case menuAmmuRifles : // ammu menu with rifles list
  350.                 {
  351.                     AddMenuItem( plMenu, 0, "Rifle" );
  352.                     AddMenuItem( plMenu, 0, "Sniper" );
  353.                 }
  354.                 case menuAmmuAssault : // ammu menu with assault weapons list
  355.                 {
  356.                     AddMenuItem( plMenu, 0, "MP5" );
  357.                     AddMenuItem( plMenu, 0, "AK47" );
  358.                     AddMenuItem( plMenu, 0, "M4" );
  359.                 }
  360.                 case menuAmmuMicroSMGs : // ammu menu with micro smgs list
  361.                 {
  362.                     AddMenuItem( plMenu, 0, "Tec9" );
  363.                     AddMenuItem( plMenu, 0, "Uzi" );
  364.                 }
  365.                 case menuAmmuArmors : // ammu menu with armours list
  366.                 {
  367.                     AddMenuItem( plMenu, 0, "Body Armour" );
  368.                 }
  369.                 case menuAmmuThrown : // ammu menu with thrown weapons list
  370.                 {
  371.                     AddMenuItem( plMenu, 0, "Grenade" );
  372.                     AddMenuItem( plMenu, 0, "Tear Gas" );
  373.                     AddMenuItem( plMenu, 0, "Molotov" );
  374.                 }
  375.                 case menuAmmuHeavy : // ammu menu with heavy weapons list
  376.                 {
  377.                     AddMenuItem( plMenu, 0, "Flame Thrower" );
  378.                     AddMenuItem( plMenu, 0, "Rocket Launcher" );
  379.                     AddMenuItem( plMenu, 0, "Heat Seeker" );
  380.  
  381.                     // dynamic menu row EXAMPLE
  382.  
  383.                     // add minigun row only if player is admin
  384.                     if ( IsPlayerAdmin(playerid) ) AddMenuItem( plMenu, 0, "Minigun" );
  385.                 }
  386.  
  387.                 // ammu buy menus
  388.  
  389.                 case menuAmmuBrassknuckle : // ammu brassknuckles buy menu
  390.                 {
  391.                     AddMenuItem( plMenu, 0, "Brassknuckle" );
  392.                     AddMenuItem( plMenu, 1, "$50" );
  393.                 }
  394.                 case menuAmmuGolfClub : // ammu golf club buy menu
  395.                 {
  396.                     AddMenuItem( plMenu, 0, "GolfClub" );
  397.                     AddMenuItem( plMenu, 1, "$100" );
  398.                 }
  399.                 case menuAmmuNiteStick : // ammu .. buy menu
  400.                 {
  401.                     AddMenuItem( plMenu, 0, "Nite Stick" );
  402.                     AddMenuItem( plMenu, 1, "$100" );
  403.                 }
  404.                 case menuAmmuKnife :  // ..
  405.                 {
  406.                     AddMenuItem( plMenu, 0, "Knife" );
  407.                     AddMenuItem( plMenu, 1, "$50" );
  408.                 }
  409.                 case menuAmmuBat :
  410.                 {
  411.                     AddMenuItem( plMenu, 0, "Bat" );
  412.                     AddMenuItem( plMenu, 1, "$100" );
  413.                 }
  414.                 case menuAmmuShovel :
  415.                 {
  416.                     AddMenuItem( plMenu, 0, "Shovel" );
  417.                     AddMenuItem( plMenu, 1, "$100" );
  418.                 }
  419.                 case menuAmmuPoolStick :
  420.                 {
  421.                     AddMenuItem( plMenu, 0, "Pool Stick" );
  422.                     AddMenuItem( plMenu, 1, "$100" );
  423.                 }
  424.                 case menuAmmuKatana :
  425.                 {
  426.                     AddMenuItem( plMenu, 0, "Katana" );
  427.                     AddMenuItem( plMenu, 1, "$200" );
  428.                 }
  429.                 case menuAmmuChainSaw :
  430.                 {
  431.                     AddMenuItem( plMenu, 0, "Chain Saw" );
  432.                     AddMenuItem( plMenu, 1, "$250" );
  433.                 }
  434.                 case menuAmmuDildo :
  435.                 {
  436.                     AddMenuItem( plMenu, 0, "Dildo" );
  437.                     AddMenuItem( plMenu, 1, "$50" );
  438.                 }
  439.                 case menuAmmuFlower :
  440.                 {
  441.                     AddMenuItem( plMenu, 0, "Flower" );
  442.                     AddMenuItem( plMenu, 1, "$50" );
  443.                 }
  444.                 case menuAmmuCane :
  445.                 {
  446.                     AddMenuItem( plMenu, 0, "Cane" );
  447.                     AddMenuItem( plMenu, 1, "$50" );
  448.                 }
  449.  
  450.                 case menuAmmuGrenade :
  451.                 {
  452.                     AddMenuItem( plMenu, 0, "Grenade" );
  453.                     AddMenuItem( plMenu, 1, "$300" );
  454.                 }
  455.                 case menuAmmuTearGas :
  456.                 {
  457.                     AddMenuItem( plMenu, 0, "TearGas" );
  458.                     AddMenuItem( plMenu, 1, "$250" );
  459.                 }
  460.                 case menuAmmuMolotov :
  461.                 {
  462.                     AddMenuItem( plMenu, 0, "Molotov" );
  463.                     AddMenuItem( plMenu, 1, "$200" );
  464.                 }
  465.  
  466.                 case menuAmmuColt45 :
  467.                 {
  468.                     AddMenuItem( plMenu, 0, "Colt 45" );
  469.                     AddMenuItem( plMenu, 1, "$500" );
  470.                 }
  471.                 case menuAmmuSilenced :
  472.                 {
  473.                     AddMenuItem( plMenu, 0, "Silenced Colt" );
  474.                     AddMenuItem( plMenu, 1, "$600" );
  475.                 }
  476.                 case menuAmmuDeagle :
  477.                 {
  478.                     AddMenuItem( plMenu, 0, "Deagle" );
  479.                     AddMenuItem( plMenu, 1, "$800" );
  480.                 }
  481.  
  482.                 case menuAmmuShotgun :
  483.                 {
  484.                     AddMenuItem( plMenu, 0, "Shotgun" );
  485.                     AddMenuItem( plMenu, 1, "$1000" );
  486.                 }
  487.                 case menuAmmuSawnoff :
  488.                 {
  489.                     AddMenuItem( plMenu, 0, "Sawnoff" );
  490.                     AddMenuItem( plMenu, 1, "$1200" );
  491.                 }
  492.                 case menuAmmuCombatShotgun :
  493.                 {
  494.                     AddMenuItem( plMenu, 0, "Combat Shotgun" );
  495.                     AddMenuItem( plMenu, 1, "$1500" );
  496.                 }
  497.  
  498.                 case menuAmmuTec9 :
  499.                 {
  500.                     AddMenuItem( plMenu, 0, "Tec9" );
  501.                     AddMenuItem( plMenu, 1, "$600" );
  502.                 }
  503.                 case menuAmmuUzi :
  504.                 {
  505.                     AddMenuItem( plMenu, 0, "Uzi" );
  506.                     AddMenuItem( plMenu, 1, "$700" );
  507.                 }
  508.                 case menuAmmuMP5 :
  509.                 {
  510.                     AddMenuItem( plMenu, 0, "MP5" );
  511.                     AddMenuItem( plMenu, 1, "$900" );
  512.                 }
  513.  
  514.                 case menuAmmuAK47 :
  515.                 {
  516.                     AddMenuItem( plMenu, 0, "AK47" );
  517.                     AddMenuItem( plMenu, 1, "$2500" );
  518.                 }
  519.                 case menuAmmuM4 :
  520.                 {
  521.                     AddMenuItem( plMenu, 0, "M4" );
  522.                     AddMenuItem( plMenu, 1, "$3000" );
  523.                 }
  524.  
  525.                 case menuAmmuRifle :
  526.                 {
  527.                     AddMenuItem( plMenu, 0, "Rifle" );
  528.                     AddMenuItem( plMenu, 1, "$2000" );
  529.                 }
  530.                 case menuAmmuSniper :
  531.                 {
  532.                     AddMenuItem( plMenu, 0, "Sniper" );
  533.                     AddMenuItem( plMenu, 1, "$4000" );
  534.                 }
  535.  
  536.                 case menuAmmuRocketLauncher :
  537.                 {
  538.                     AddMenuItem( plMenu, 0, "Rocket Launcher" );
  539.                     AddMenuItem( plMenu, 1, "$10000" );
  540.                 }
  541.                 case menuAmmuHeatSeeker :
  542.                 {
  543.                     AddMenuItem( plMenu, 0, "Heat Seeker" );
  544.                     AddMenuItem( plMenu, 1, "$15000" );
  545.                 }
  546.                 case menuAmmuFlameThrower :
  547.                 {
  548.                     AddMenuItem( plMenu, 0, "Flame Thrower" );
  549.                     AddMenuItem( plMenu, 1, "$5000" );
  550.                 }
  551.                 case menuAmmuMinigun :
  552.                 {
  553.                     AddMenuItem( plMenu, 0, "Minigun" );
  554.                     AddMenuItem( plMenu, 1, "$25000" );
  555.                 }
  556.  
  557.                 case menuAmmuSpraycan :
  558.                 {
  559.                     AddMenuItem( plMenu, 0, "Spraycan" );
  560.                     AddMenuItem( plMenu, 1, "$50" );
  561.                 }
  562.                 case menuAmmuFireExtinguisher :
  563.                 {
  564.                     AddMenuItem( plMenu, 0, "Fire Extinguisher" );
  565.                     AddMenuItem( plMenu, 1, "$100" );
  566.                 }
  567.                 case menuAmmuCamera :
  568.                 {
  569.                     AddMenuItem( plMenu, 0, "Camera" );
  570.                     AddMenuItem( plMenu, 1, "$50" );
  571.                 }
  572.                 case menuAmmuParachute :
  573.                 {
  574.                     AddMenuItem( plMenu, 0, "Parachute" );
  575.                     AddMenuItem( plMenu, 1, "$150" );
  576.                 }
  577.  
  578.                 case menuAmmuArmor :
  579.                 {
  580.                     AddMenuItem( plMenu, 0, "Body Armour" );
  581.                     AddMenuItem( plMenu, 1, "$250" );
  582.                 }
  583.             }
  584.         }
  585.  
  586.  
  587.  
  588.  
  589.         case menuClassEat : // it's one of eat menus
  590.         {
  591.             // create menu for player
  592.             switch ( playerMenuID )
  593.             {
  594.                 // if it's buy menu we must use 2 columns instead of 1
  595.                 // also we can add culumn headers
  596.                 case menuEatPizza..menuEatSalad :
  597.                 {
  598.                     plMenu = CreateMenu( "Food", 2, EAT_MENU_POSX, EAT_MENU_POSY, EAT_MENU_COL1_WIDTH, EAT_MENU_COL2_WIDTH );
  599.  
  600.                     SetMenuColumnHeader( plMenu, 0, "food" );
  601.                     SetMenuColumnHeader( plMenu, 1, "cost" );
  602.                 }
  603.  
  604.                 // if it's just list of items, we must use 1 column
  605.                 default :
  606.                     plMenu = CreateMenu( "Food", EAT_MENU_COLS, EAT_MENU_POSX, EAT_MENU_POSY, EAT_MENU_COL1_WIDTH, EAT_MENU_COL2_WIDTH );
  607.             }
  608.  
  609.  
  610.  
  611.  
  612.             // add some rows to created menu
  613.             switch ( playerMenuID )
  614.             {
  615.                 // main eat menu
  616.                 case menuEatMain :
  617.                 {
  618.                     AddMenuItem( plMenu, 0, "Pizza" );
  619.                     AddMenuItem( plMenu, 0, "Chicken" );
  620.                     AddMenuItem( plMenu, 0, "Salad" );
  621.                 }
  622.  
  623.                 // eat buy menus
  624.                 case menuEatPizza :
  625.                 {
  626.                     AddMenuItem( plMenu, 0, "Pizza" );
  627.                     AddMenuItem( plMenu, 1, "$10" );
  628.                 }
  629.                 case menuEatChicken :
  630.                 {
  631.                     AddMenuItem( plMenu, 0, "Chicken" );
  632.                     AddMenuItem( plMenu, 1, "$20" );
  633.                 }
  634.                 case menuEatSalad :
  635.                 {
  636.                     AddMenuItem( plMenu, 0, "Salad" );
  637.                     AddMenuItem( plMenu, 1, "$40" );
  638.                 }
  639.             }
  640.         }
  641.     }
  642.  
  643.  
  644.  
  645.  
  646.     ShowMenuForPlayer( plMenu, playerid ); // show created menu for player
  647.  
  648.     playerMenu[playerid][menuClass] = playerMenuClass;
  649.     playerMenu[playerid][menuID] = playerMenuID;
  650. }
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662. //
  663. //  (!) place this function into OnPlayerExitedMenu callback
  664. //
  665. stock onPlayerExitedMenu ( playerid )
  666. {
  667.     // selecting current player's menu class
  668.     switch ( playerMenu[playerid][menuClass] )
  669.     {
  670.         // player exited one of ammu menu
  671.         case menuClassAmmu :
  672.         {
  673.             // selecting current player's menu ID
  674.             switch ( playerMenu[playerid][menuID] )
  675.             {
  676.                 // player exited main ammu menu
  677.                 case menuAmmuMain :
  678.                 {
  679.                     hideMenuForPlayer(playerid); // hide any menu for player
  680.  
  681.                     // unfreeze player
  682.                     #if FREEZE_PLAYER_IN_MENU == 1
  683.                         TogglePlayerControllable( playerid, 1 );
  684.                     #endif
  685.                 }
  686.  
  687.                 // player exited from any weapons group menu to main menu
  688.                 case menuAmmuMelee..menuAmmuHeavy :             showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMain );
  689.  
  690.                 // player exited from one of buy menu to group weapons list menu
  691.                 case menuAmmuNiteStick..menuAmmuChainSaw :      showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMelee );
  692.                 case menuAmmuCamera..menuAmmuParachute :        showMenuForPlayer( playerid, menuClassAmmu, menuAmmuSpecial );
  693.                 case menuAmmuColt45..menuAmmuDeagle :           showMenuForPlayer( playerid, menuClassAmmu, menuAmmuPistols );
  694.                 case menuAmmuShotgun..menuAmmuCombatShotgun :   showMenuForPlayer( playerid, menuClassAmmu, menuAmmuShotguns );
  695.                 case menuAmmuTec9, menuAmmuUzi :                showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMicroSMGs );
  696.                 case menuAmmuRifle, menuAmmuSniper :            showMenuForPlayer( playerid, menuClassAmmu, menuAmmuRifles );
  697.                 case menuAmmuMP5..menuAmmuM4 :                  showMenuForPlayer( playerid, menuClassAmmu, menuAmmuAssault );
  698.                 case menuAmmuArmor :                            showMenuForPlayer( playerid, menuClassAmmu, menuAmmuArmors );
  699.                 case menuAmmuGrenade..menuAmmuMolotov :         showMenuForPlayer( playerid, menuClassAmmu, menuAmmuThrown );
  700.                 case menuAmmuFlameThrower..menuAmmuMinigun :    showMenuForPlayer( playerid, menuClassAmmu, menuAmmuHeavy );
  701.             }
  702.         }
  703.  
  704.  
  705.  
  706.  
  707.         // player exited one of eat menu
  708.         case menuClassEat :
  709.         {
  710.             switch ( playerMenu[playerid][menuID] )
  711.             {
  712.                 // player exited main ammu menu
  713.                 case menuEatMain :
  714.                 {
  715.                     hideMenuForPlayer(playerid); // hide any menu for player
  716.  
  717.                     // unfreeze player
  718.                     #if FREEZE_PLAYER_IN_MENU == 1
  719.                         TogglePlayerControllable( playerid, 1 );
  720.                     #endif
  721.                 }
  722.  
  723.                 // player exited from any eat buy menu to main menu
  724.                 case menuEatPizza..menuEatSalad : showMenuForPlayer( playerid, menuClassEat, menuEatMain );
  725.             }
  726.         }
  727.     }
  728. }
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.  
  738.  
  739.  
  740. //
  741. //  (!) place this function into OnPlayerSelectedMenuRow callback
  742. //
  743. stock onPlayerSelectedMenuRow ( playerid, row )
  744. {
  745.     // selecting current player's menu class
  746.     switch ( playerMenu[playerid][menuClass] )
  747.     {
  748.         // it's one of ammu menus
  749.         case menuClassAmmu :
  750.         {
  751.             // selecting current player's menu ID
  752.             switch ( playerMenu[playerid][menuID] )
  753.             {
  754.                 // selected one of the main menu rows
  755.  
  756.                 case menuAmmuMain :
  757.                 {
  758.                     switch ( row )
  759.                     {
  760.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMelee );
  761.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuSpecial );
  762.                         case 2 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuPistols );
  763.                         case 3 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuShotguns );
  764.                         case 4 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuRifles );
  765.                         case 5 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuAssault );
  766.                         case 6 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMicroSMGs );
  767.                         case 7 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuArmors );
  768.                         case 8 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuThrown );
  769.                         case 9 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuHeavy );
  770.                     }
  771.                 }
  772.  
  773.                 // selected one of the weapons group menu rows
  774.  
  775.                 case menuAmmuMelee :
  776.                 {
  777.                     switch ( row )
  778.                     {
  779.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuNiteStick );
  780.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuBat );
  781.                         case 2 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuCane );
  782.                         case 3 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuFlower );
  783.                         case 4 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuDildo );
  784.                         case 5 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuBrassknuckle );
  785.                         case 6 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuKnife );
  786.                         case 7 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuGolfClub );
  787.                         case 8 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuPoolStick );
  788.                         case 9 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuShovel );
  789.                         case 10 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuKatana );
  790.                         case 11 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuChainSaw );
  791.                     }
  792.                 }
  793.                 case menuAmmuSpecial :
  794.                 {
  795.                     switch ( row )
  796.                     {
  797.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuCamera );
  798.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuSpraycan );
  799.                         case 2 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuFireExtinguisher );
  800.                         case 3 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuParachute );
  801.                     }
  802.                 }
  803.                 case menuAmmuPistols :
  804.                 {
  805.                     switch ( row )
  806.                     {
  807.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuColt45 );
  808.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuSilenced );
  809.                         case 2 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuDeagle );
  810.                     }
  811.                 }
  812.                 case menuAmmuShotguns :
  813.                 {
  814.                     switch ( row )
  815.                     {
  816.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuShotgun );
  817.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuSawnoff );
  818.                         case 2 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuCombatShotgun );
  819.                     }
  820.                 }
  821.                 case menuAmmuRifles :
  822.                 {
  823.                     switch ( row )
  824.                     {
  825.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuRifle );
  826.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuSniper );
  827.                     }
  828.                 }
  829.                 case menuAmmuAssault :
  830.                 {
  831.                     switch ( row )
  832.                     {
  833.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMP5 );
  834.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuAK47 );
  835.                         case 2 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuM4 );
  836.                     }
  837.                 }
  838.                 case menuAmmuMicroSMGs :
  839.                 {
  840.                     switch ( row )
  841.                     {
  842.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuTec9 );
  843.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuUzi );
  844.                     }
  845.                 }
  846.                 case menuAmmuArmors :
  847.                 {
  848.                     showMenuForPlayer( playerid, menuClassAmmu, menuAmmuArmor );
  849.                 }
  850.                 case menuAmmuThrown :
  851.                 {
  852.                     switch ( row )
  853.                     {
  854.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuGrenade );
  855.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuTearGas );
  856.                         case 2 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMolotov );
  857.                     }
  858.                 }
  859.                 case menuAmmuHeavy :
  860.                 {
  861.                     switch ( row )
  862.                     {
  863.                         case 0 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuFlameThrower );
  864.                         case 1 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuRocketLauncher );
  865.                         case 2 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuHeatSeeker );
  866.                         case 3 : showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMinigun );
  867.                     }
  868.                 }
  869.  
  870.                 // selected one of the buy menu rows
  871.  
  872.                 case menuAmmuNiteStick..menuAmmuMinigun :
  873.                 {
  874.                     new wID, wAmmo, wCost;
  875.  
  876.                     switch ( playerMenu[playerid][menuID] )
  877.                     {
  878.                         case menuAmmuBrassknuckle : { wID = WEAPON_BRASSKNUCKLE; wAmmo = 1; wCost = 50; }
  879.                         case menuAmmuGolfClub : { wID = WEAPON_GOLFCLUB; wAmmo = 1; wCost = 100; }
  880.                         case menuAmmuNiteStick : { wID = WEAPON_NITESTICK; wAmmo = 1; wCost = 100; }
  881.                         case menuAmmuKnife : { wID = WEAPON_KNIFE; wAmmo = 1; wCost = 50; }
  882.                         case menuAmmuBat : { wID = WEAPON_BAT; wAmmo = 1; wCost = 100; }
  883.                         case menuAmmuShovel : { wID = WEAPON_SHOVEL; wAmmo = 1; wCost = 100; }
  884.                         case menuAmmuPoolStick : { wID = WEAPON_POOLSTICK; wAmmo = 1; wCost = 100; }
  885.                         case menuAmmuKatana : { wID = WEAPON_KATANA; wAmmo = 1; wCost = 200; }
  886.                         case menuAmmuChainSaw : { wID = WEAPON_CHAINSAW; wAmmo = 1; wCost = 250; }
  887.                         case menuAmmuDildo : { wID = WEAPON_DILDO; wAmmo = 1; wCost = 50; }
  888.                         case menuAmmuFlower : { wID = WEAPON_FLOWER; wAmmo = 1; wCost = 50; }
  889.                         case menuAmmuCane : { wID = WEAPON_CANE; wAmmo = 1; wCost = 50; }
  890.                         case menuAmmuGrenade : { wID = WEAPON_GRENADE; wAmmo = 1; wCost = 300; }
  891.                         case menuAmmuTearGas : { wID = WEAPON_TEARGAS; wAmmo = 1; wCost = 250; }
  892.                         case menuAmmuMolotov : { wID = WEAPON_MOLTOV; wAmmo = 1; wCost = 200; }
  893.                         case menuAmmuColt45 : { wID = WEAPON_COLT45; wAmmo = 30; wCost = 500; }
  894.                         case menuAmmuSilenced : { wID = WEAPON_SILENCED; wAmmo = 30; wCost = 600; }
  895.                         case menuAmmuDeagle : { wID = WEAPON_DEAGLE; wAmmo = 30; wCost = 800; }
  896.                         case menuAmmuShotgun : { wID = WEAPON_SHOTGUN; wAmmo = 20; wCost = 1000; }
  897.                         case menuAmmuSawnoff : { wID = WEAPON_SAWEDOFF; wAmmo = 20; wCost = 1200; }
  898.                         case menuAmmuCombatShotgun : { wID = WEAPON_SHOTGSPA; wAmmo = 20; wCost = 1500; }
  899.                         case menuAmmuUzi : { wID = WEAPON_UZI; wAmmo = 50; wCost = 700; }
  900.                         case menuAmmuMP5 : { wID = WEAPON_MP5; wAmmo = 50; wCost = 900; }
  901.                         case menuAmmuAK47 : { wID = WEAPON_AK47; wAmmo = 50; wCost = 2500; }
  902.                         case menuAmmuM4 : { wID = WEAPON_M4; wAmmo = 50; wCost = 3000; }
  903.                         case menuAmmuTec9 : { wID = WEAPON_TEC9; wAmmo = 50; wCost = 600; }
  904.                         case menuAmmuRifle : { wID = WEAPON_RIFLE; wAmmo = 20; wCost = 2000; }
  905.                         case menuAmmuRocketLauncher : { wID = WEAPON_ROCKETLAUNCHER; wAmmo = 1; wCost = 10000; }
  906.                         case menuAmmuSniper : { wID = WEAPON_SNIPER; wAmmo = 20; wCost = 4000; }
  907.                         case menuAmmuHeatSeeker : { wID = WEAPON_HEATSEEKER; wAmmo = 1; wCost = 15000; }
  908.                         case menuAmmuFlameThrower : { wID = WEAPON_FLAMETHROWER; wAmmo = 100; wCost = 5000; }
  909.                         case menuAmmuMinigun : { wID = WEAPON_MINIGUN; wAmmo = 100; wCost = 25000; }
  910.                         case menuAmmuSpraycan : { wID = WEAPON_SPRAYCAN; wAmmo = 50; wCost = 50; }
  911.                         case menuAmmuFireExtinguisher : { wID = WEAPON_FIREEXTINGUISHER; wAmmo = 50; wCost = 100; }
  912.                         case menuAmmuCamera : { wID = WEAPON_CAMERA; wAmmo = 20; wCost = 50; }
  913.                         case menuAmmuParachute : { wID = WEAPON_PARACHUTE; wAmmo = 1; wCost = 150; }
  914.                         case menuAmmuArmor : // if player want to buy armour
  915.                         {
  916.                             new Float:pArmour;
  917.                             GetPlayerArmour( playerid, pArmour );
  918.  
  919.                             if
  920.                             (
  921.                                 GetPlayerMoney(playerid) < 250 || // if player have no money
  922.                                 pArmour >= 100.0 // or player already have enough armour
  923.                             )
  924.                             {
  925.                                 showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMain ); // show player main ammu menu
  926.                             }
  927.                             else
  928.                             {
  929.                                 showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMain ); // show player main ammu menu
  930.                                 SetPlayerArmour( playerid, 100.0 ); // set player armour
  931.                                 GivePlayerMoney( playerid, - 250 ); // take player's money
  932.                             }
  933.  
  934.                             return;
  935.                         }
  936.                     }
  937.  
  938.                     if ( GetPlayerMoney(playerid) < wCost ) // if player have no money
  939.                     {
  940.                         showMenuForPlayer( playerid, menuClassAmmu, menuAmmuMain ); // sho to player main ammu menu
  941.                     }
  942.                     else
  943.                     {
  944.                         ShowMenuForPlayer( plMenu, playerid ); // show player his current menu
  945.                         GivePlayerMoney( playerid, - wCost ); // take player's money
  946.                         GivePlayerWeapon( playerid, wID, wAmmo ); // give player selected weapon
  947.                     }
  948.                 }
  949.             }
  950.         }
  951.  
  952.  
  953.  
  954.  
  955.         // it's one of ammu menus
  956.         case menuClassEat :
  957.         {
  958.             // selecting current player's menu ID
  959.             switch ( playerMenu[playerid][menuID] )
  960.             {
  961.                 // selected one of the main menu rows
  962.                 case menuEatMain :
  963.                 {
  964.                     switch ( row )
  965.                     {
  966.                         case 0 : showMenuForPlayer( playerid, menuClassEat, menuEatPizza );
  967.                         case 1 : showMenuForPlayer( playerid, menuClassEat, menuEatChicken );
  968.                         case 2 : showMenuForPlayer( playerid, menuClassEat, menuEatSalad );
  969.                     }
  970.                 }
  971.  
  972.                 // selected one of the buy menu rows
  973.                 case menuEatPizza..menuEatSalad :
  974.                 {
  975.                     new Float:pHealth, Float:eatHealth, eatCost;
  976.                     GetPlayerHealth( playerid, pHealth );
  977.  
  978.                     switch ( playerMenu[playerid][menuID] )
  979.                     {
  980.                         case menuEatPizza : { eatHealth = 10.0; eatCost = 10; }
  981.                         case menuEatChicken : { eatHealth = 20.0; eatCost = 20; }
  982.                         case menuEatSalad : { eatHealth = 40.0; eatCost = 40; }
  983.                     }
  984.  
  985.                     if
  986.                     (
  987.                         GetPlayerMoney(playerid) < eatCost || // if player have no money
  988.                         pHealth >= 100.0 // or player already have enough health
  989.                     )
  990.                     {
  991.                         showMenuForPlayer( playerid, menuClassEat, menuEatMain ); // show player main eat menu
  992.                     }
  993.                     else
  994.                     {
  995.                         ShowMenuForPlayer( plMenu, playerid ); // show player his current menu
  996.                         GivePlayerMoney( playerid, - eatCost ); // take player's money
  997.  
  998.                         if ( ( pHealth + eatHealth ) > 100.0 ) eatHealth = 100.0 - pHealth;
  999.                         SetPlayerHealth( playerid, pHealth + eatHealth ); // set player health
  1000.                     }
  1001.                 }
  1002.             }
  1003.         }
  1004.     }
  1005. }
  1006.  
  1007.  
  1008.  
  1009.  
  1010. #undef plMenu
  1011.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement