HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* AMX Mod script.
  2. *
  3. * Fegyver Menu
  4. * by Mattcook & xeroblood
  5. *
  6. * Magyarosította AlleY
  7. *
  8. * Leírás: Menün keresztül tudsz fegyvereket adni a játékosoknak. (Csak adminok használhatják)
  9. *
  10. * Parancsok:
  11. * amx_weaponmenu
  12. * vagy
  13. * weaponmenu
  14. *
  15. * Példa:
  16. * bind "f" "amx_weaponmenu"
  17. *
  18. * Info: Ezt a plugin azért lett létrehozva, hogy az adminok ingyen tudjanak fegyvereket
  19. * adni a játékosoknak vagy maguknak.
  20. * A fplugin segítségével egy menün keresztül lehet fegyvereket adni.nem kell külön megvenni.
  21. *
  22. * Jóváírás:
  23. * xeroblood (Köszönöm, hogy sok segítséget nyújtottál nekem a pluginban.)
  24. * F1del1ty (Köszönöm a nagyszerû ötleteket ehez a pluginhoz.)
  25. *
  26. */
  27.  
  28. #include <amxmodx>
  29. #include <amxmisc>
  30.  
  31. // Ez csak akkor szükséges, ha az AMX MOD X v1.0 van feltelepítve.
  32. // Megjegyzés vagy töröld az AMX 0.9.9-es verzióját.
  33. #include <fun>
  34.  
  35.  
  36. // Max értékek felépítése a menüben.
  37. #define MAX_PLAYERS 32
  38. #define MAX_WEAPONS 24
  39. #define MAX_AMMO 11
  40. #define MAX_ITEMS 8
  41. #define MAX_DISPLAY 8
  42.  
  43. // Menu típusú indexek.
  44. #define MT_PISTOL 0
  45. #define MT_SHOTGUN 1
  46. #define MT_SMG 2
  47. #define MT_RIFLE 3
  48. #define MT_MACHINE 4
  49. #define MT_PAMMO 5
  50. #define MT_SAMMO 6
  51. #define MT_EQUIP 7
  52. #define MT_EXTRA 8
  53.  
  54. // Fegyver típusú indexek.
  55. #define OFFSET_SHOTGUN 6
  56. #define OFFSET_SMG 8
  57. #define OFFSET_RIFLE 13
  58. #define OFFSET_MACHINE 23
  59.  
  60. // Max menü beállítása az összes menüben.
  61. // (Machine Gun menüben csak 1 lehetõség van ezért nincs szükség tömbökre.)
  62. #define MO_MAX_MAIN 9
  63. #define MO_MAX_PISTOL 6
  64. #define MO_MAX_SHOTGUN 2
  65. #define MO_MAX_SMG 5
  66. #define MO_MAX_RIFLE 10
  67. #define MO_MAX_EQUIP 8
  68. #define MO_MAX_EXTRA 14
  69.  
  70.  
  71. // Fõmenü szöveg
  72. new g_szMainMenuTxt[MO_MAX_MAIN][] = {
  73. "Pisztolyok",
  74. "Shotgunok",
  75. "SMG-k",
  76. "Puskák",
  77. "Machine Guns",
  78. "Elsodleges toltenycsomag",
  79. "Masodlagos toltenycsomag",
  80. "Egyeb felszerelesek",
  81. "Extra menu"
  82. }
  83.  
  84. // Pisztoly menü szövegek
  85. new g_szPistolMenuTxt[MO_MAX_PISTOL][] = {
  86. "USP",
  87. "Glock",
  88. "Deagle",
  89. "228 Compact",
  90. "Dual Elites",
  91. "Five-Seven"
  92. }
  93.  
  94. //Shotguns Sekció
  95. new g_szShotgunMenuTxt[MO_MAX_SHOTGUN][] = {
  96. "Pumpalos Shotgun",
  97. "Auto Shotgun"
  98. }
  99.  
  100. //SMG Sekció
  101. new g_szSmgMenuTxt[MO_MAX_SMG][] = {
  102. "MP5",
  103. "TMP",
  104. "C90",
  105. "Mac10",
  106. "UMP"
  107. }
  108.  
  109. //Puska Sekció
  110. new g_szRifleMenuTxt[MO_MAX_RIFLE][] = {
  111. "Famas",
  112. "Krieg SG552",
  113. "AK47",
  114. "M4A1",
  115. "Bullpup",
  116. "Scout",
  117. "AWP",
  118. "CT Magozo",
  119. "T Magozo",
  120. "Galil"
  121. }
  122.  
  123. //Machine Guns Sekció
  124. new g_szMachineMenuTxt[] = "M249 (Para)"
  125.  
  126. //Egyéb Sekció
  127. new g_szEquipMenuTxt[MO_MAX_EQUIP][] = {
  128. "Kevlar",
  129. "Kevlar + Helmet",
  130. "Feny granat",
  131. "He granat",
  132. "Fust granat",
  133. "Hatastalanito",
  134. "Ejjellato szemuveg",
  135. "Pajzs"
  136. }
  137.  
  138. //Extra Sekció
  139. new g_szExtraMenuTxt[MO_MAX_EXTRA][] = {
  140. "Osszes fegyver",
  141. "M3 keszlet",
  142. "MP5 Navy keszlet",
  143. "Famas keszlet",
  144. "Galil keszlet",
  145. "M4A1 keszlet",
  146. "AK47 keszlet",
  147. "Krieg SG552 keszlet",
  148. "Bullpup keszlet",
  149. "M249 keszlet",
  150. "Scout keszlet",
  151. "Magozo Keszlet",
  152. "AWP Keszlet",
  153. "Granat Keszlet"
  154. }
  155.  
  156. // Fegyverek neve a give_item() parancssorral.
  157. new g_szWeaponList[MAX_WEAPONS][] = {
  158. "weapon_usp", "weapon_glock18", "weapon_deagle", "weapon_p228", "weapon_elite",
  159. "weapon_fiveseven", "weapon_m3", "weapon_xm1014", "weapon_mp5navy", "weapon_tmp",
  160. "weapon_p90", "weapon_mac10", "weapon_ump45", "weapon_famas", "weapon_sg552",
  161. "weapon_ak47", "weapon_m4a1", "weapon_aug", "weapon_scout", "weapon_awp",
  162. "weapon_g3sg1", "weapon_sg550", "weapon_galil", "weapon_m249"
  163. }
  164.  
  165. // Egyeb nevek a give_item() parancssorral.
  166. new g_szItemsList[MAX_ITEMS][] = {
  167. "item_kevlar", "item_assaultsuit", "weapon_flashbang", "weapon_hegrenade",
  168. "weapon_smokegrenade", "item_thighpack", "item_nvgs", "weapon_shield"
  169. }
  170.  
  171. // Toltenycsomag nevek a give_item() parancssorral.
  172. new g_szAmmoList[MAX_AMMO][] = {
  173. "ammo_45acp", "ammo_9mm", "ammo_50ae", "ammo_357sig",
  174. "ammo_57mm", "ammo_buckshot", "ammo_556nato", "ammo_762nato",
  175. "ammo_338magnum", "ammo_308", "ammo_556natobox"
  176. }
  177.  
  178. new g_nWeaponData[MAX_WEAPONS][2] = {
  179. { 0, 8 }, { 1, 8 }, { 2, 5 }, { 3, 6 }, { 1, 4 },
  180. { 4, 4 }, { 5, 4 }, { 5, 4 }, { 1, 4 }, { 1, 4 },
  181. { 4, 4 }, { 0, 6 }, { 0, 6 }, { 6, 3 }, { 6, 3 },
  182. { 7, 3 }, { 6, 3 }, { 6, 3 }, { 7, 3 }, { 8, 3 },
  183. { 7, 3 }, { 6, 3 }, { 9, 3 }, { 10, 7 }
  184. }
  185.  
  186. // Szamok amik az oldal menuben vagy a Multi-Page menüben vannak. (Mint puskák és a játékosmenü)
  187. // Több játékos is megnyithattya a menüt egyszerre úgy, hogy nem muszály ugyanazon a tömbön lenni. MAX_PLAYERS (32)
  188. // A pálya minden egyes oldalán használható a menü.
  189. // A játékos nevek benne vannak a menüben így lehet nekik fegyvert adni (1-32 játékosig). De 1 játékosnak minimum fent kell lennie,hogy a menüt használni tudják.
  190. // Amikor ebben a tömbben vagy Példa: g_nMenuPosition[ id - 1 ]
  191. new g_nMenuPosition[MAX_PLAYERS]
  192.  
  193. // A kijelzõ meletti. Különbözõ menü típusok: Menu, Pisztolyok, Shotgunok, SMGk, Puskák, stb..
  194. new g_nMenuType[MAX_PLAYERS]
  195.  
  196. // Számok amik a menüpontokat jelölik.
  197. new g_nMenuOption[MAX_PLAYERS]
  198.  
  199.  
  200. // A következõt használják a játékosok. Menü követése, Játékos mit választott.
  201. new g_nMenuPlayers[MAX_PLAYERS][MAX_PLAYERS]
  202. new g_nMenuPlayersNum[MAX_PLAYERS]
  203.  
  204.  
  205. public plugin_init()
  206. {
  207. register_plugin( "Fegyver Menu", "1.0", "Mattcook & xeroblood" )
  208.  
  209. register_clcmd( "amx_weaponmenu", "ShowWeaponMenu", ADMIN_MENU, "Shows The Weapon Menu" )
  210. register_clcmd( "weaponmenu", "ShowWeaponMenu", ADMIN_MENU, "Shows The Weapon Menu" )
  211.  
  212. register_cvar( "sv_weaponmenu_smoke", "1" ) // Legyen füst gránát? (1 = Igen, 0 = Nem)
  213. register_cvar( "sv_weaponmenu_state", "1" ) // Fegyver menü visszaállítása
  214. // 0 = Kilépés a give_items menübõl
  215. // 1 = Vissza a játékos menühöz
  216. // 2 = Vissza a fegyvermenühöz
  217.  
  218. register_menucmd( register_menuid("Fegyver Menu:"), 1023, "MainMenuCmd" )
  219. register_menucmd( register_menuid("Pisztoly Menu:"), 1023, "RegularMenuCmd" )
  220. register_menucmd( register_menuid("Shotgun Menu:"), 1023, "RegularMenuCmd" )
  221. register_menucmd( register_menuid("SMG Menu:"), 1023, "RegularMenuCmd" )
  222. register_menucmd( register_menuid("Puska Menu:"), 1023, "RifleMenuCmd" )
  223. register_menucmd( register_menuid("Machine Gun Menu:"), 1023, "RegularMenuCmd" )
  224. register_menucmd( register_menuid("Egyeb Menu:"), 1023, "RegularMenuCmd" )
  225. register_menucmd( register_menuid("Extra Menu:"), 1023, "ExtraMenuCmd" )
  226. register_menucmd( register_menuid("Jatekos Menu:"), 1023, "PlayerMenuCmd" )
  227.  
  228. return PLUGIN_CONTINUE
  229. }
  230.  
  231. public ShowWeaponMenu( id, lvl, cid )
  232. {
  233. if( cmd_access( id, lvl, cid, 0 ) )
  234. {
  235. g_nMenuPosition[id-1] = 0
  236. ShowMainMenu( id )
  237. }
  238. return PLUGIN_HANDLED
  239. }
  240.  
  241. ///////////////////////////////////////////////////////////////////////////////////////////
  242. //
  243. // Menu kezelése kódókkal
  244. //
  245. ///////////////////////////////////////////////////////////////////////////////////////////
  246.  
  247. ///////////////////////////////////////////////////////////////////////////////////////////
  248. // Kezeli a menut
  249. public MainMenuCmd( id, key )
  250. {
  251. // Számok, amivel a menû tipusa lett kiválasztva.
  252. g_nMenuType[id-1] = key
  253.  
  254. switch( key )
  255. {
  256. case 0: ShowPistolMenu( id )
  257. case 1: ShowShotgunMenu( id )
  258. case 2: ShowSmgMenu( id )
  259. case 3: ShowRifleMenu( id, g_nMenuPosition[id-1] = 0 )
  260. case 4: ShowMachineMenu( id )
  261. case 5: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
  262. case 6: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
  263. case 7: ShowEquipMenu( id )
  264. case 8: ShowExtraMenu( id, g_nMenuPosition[id-1] = 0 )
  265. default: { /* Do Nothing Here (Exit Option) */ }
  266. }
  267. return PLUGIN_HANDLED
  268. }
  269. //
  270. ///////////////////////////////////////////////////////////////////////////////////////////
  271.  
  272. ///////////////////////////////////////////////////////////////////////////////////////////
  273. // Kezeli az összes fegyver menüt, kivéve a Multi-Page menüt mint például a puska menü.
  274. public RegularMenuCmd( id, key )
  275. {
  276. // Számok amelyek a beállításban lettek kiválasztva.
  277. g_nMenuOption[id-1] = key
  278.  
  279. switch( key )
  280. {
  281. case 9:
  282. {
  283. // A felhasználó úgy döntött, hogy visszamegy az elõzõ menübe.
  284. ShowMainMenu( id )
  285. }
  286. default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
  287. }
  288. return PLUGIN_HANDLED
  289. }
  290. //
  291. ///////////////////////////////////////////////////////////////////////////////////////////
  292.  
  293. ///////////////////////////////////////////////////////////////////////////////////////////
  294. // Kezeli a Multi-Page és a Puskák menüt
  295. public RifleMenuCmd( id, key )
  296. {
  297. // Számok amelyek a beállításban lettek kiválasztva.
  298. g_nMenuOption[id-1] = g_nMenuPosition[id-1] * MAX_DISPLAY + key
  299.  
  300. switch( key )
  301. {
  302. case 8:
  303. {
  304. // Felhasználó által kiválasztott "Tovább..." opció
  305. ShowRifleMenu( id, ++g_nMenuPosition[id-1] )
  306. }
  307. case 9:
  308. {
  309. // A felhasználó úgy döntött, hogy visszamegy az elõzõ menübe.
  310. if( g_nMenuPosition[id-1] )
  311. {
  312. ShowRifleMenu( id, --g_nMenuPosition[id-1] )
  313. }else
  314. {
  315. ShowMainMenu( id )
  316. }
  317. }
  318. default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
  319. }
  320. return PLUGIN_HANDLED
  321. }
  322. //
  323. ///////////////////////////////////////////////////////////////////////////////////////////
  324.  
  325. ///////////////////////////////////////////////////////////////////////////////////////////
  326. // Kezeli a Multi-Page és a játékos menüt
  327. public PlayerMenuCmd( id, key )
  328. {
  329. switch( key )
  330. {
  331. case 8:
  332. {
  333. // Felhasználó által kiválasztott "Tovább..." opció
  334. ShowPlayerMenu( id, ++g_nMenuPosition[id-1] )
  335. }
  336. case 9:
  337. {
  338. // A felhasználó úgy döntött, hogy visszamegy az elõzõ menübe.
  339. if( g_nMenuPosition[id-1] )
  340. {
  341. ShowPlayerMenu( id, --g_nMenuPosition[id-1] )
  342. }else
  343. {
  344. ShowMainMenu( id )
  345. }
  346. }
  347. default:
  348. {
  349. // Megkeresés, hogy melyik játékost válasszák
  350. new nPlayerID = g_nMenuPlayers[id-1][g_nMenuPosition[id-1] * MAX_DISPLAY + key]
  351.  
  352. // Adja hozzá a játékoshoz a kiválasztott elemet
  353. GiveMenuItem( id, nPlayerID )
  354.  
  355. // Ellenõrizze, hogy melyik menü a Re-Open (ha van ilyen)
  356. switch( clamp(get_cvar_num("sv_weaponmenu_state"), 0, 2) )
  357. {
  358. case 1: ShowPlayerMenu( id, g_nMenuPosition[id-1] ) // Játékos Menu (Régi pozíció)
  359. case 2: ShowMainMenu( id ) // Fegyver Menu
  360. }
  361. }
  362. }
  363. return PLUGIN_HANDLED
  364. }
  365. //
  366. ///////////////////////////////////////////////////////////////////////////////////////////
  367.  
  368. ///////////////////////////////////////////////////////////////////////////////////////////
  369. // Kezeli a Multi-Page és az Extra menüt
  370. public ExtraMenuCmd( id, key )
  371. {
  372. // Számok amelyek a beállításban lettek kiválasztva.
  373. g_nMenuOption[id-1] = g_nMenuPosition[id-1] * MAX_DISPLAY + key
  374.  
  375. switch( key )
  376. {
  377. case 8:
  378. {
  379. // Felhasználó által kiválasztott "Tovább..." opció
  380. ShowExtraMenu( id, ++g_nMenuPosition[id-1] )
  381. }
  382. case 9:
  383. {
  384. // A felhasználó úgy döntött, hogy visszamegy az elõzõ menübe.
  385. if( g_nMenuPosition[id-1] )
  386. {
  387. ShowExtraMenu( id, --g_nMenuPosition[id-1] )
  388. }else
  389. {
  390. ShowMainMenu( id )
  391. }
  392. }
  393. default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
  394. }
  395. return PLUGIN_HANDLED
  396. }
  397. //
  398. ///////////////////////////////////////////////////////////////////////////////////////////
  399.  
  400.  
  401. ///////////////////////////////////////////////////////////////////////////////////////////
  402. //
  403. // Menü felépítése kódokból
  404. //
  405. ///////////////////////////////////////////////////////////////////////////////////////////
  406.  
  407.  
  408. ///////////////////////////////////////////////////////////////////////////////////////////
  409. // A Menü felépítési szakaszai
  410. public ShowMainMenu( id )
  411. {
  412. new i, nLen, nKeys = (1<<9)
  413. new szMenuBody[256]
  414.  
  415. nLen = format( szMenuBody, 255, "\yFegyver Menu:\w^n" )
  416. for( i = 0; i < MO_MAX_MAIN; i++ )
  417. {
  418. nKeys |= (1<<i)
  419. nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szMainMenuTxt[i] )
  420. }
  421. format( szMenuBody[nLen], (255-nLen), "^n0. Kilepes" )
  422.  
  423. show_menu( id, nKeys, szMenuBody, -1 )
  424. return
  425. }
  426. //
  427. ///////////////////////////////////////////////////////////////////////////////////////////
  428.  
  429. ///////////////////////////////////////////////////////////////////////////////////////////
  430. // A pisztoly menü felépítési szakaszai
  431. public ShowPistolMenu( id )
  432. {
  433. new i, nLen, nKeys = (1<<9)
  434. new szMenuBody[256]
  435.  
  436. nLen = format( szMenuBody, 255, "\yPisztoly Menu:\w^n" )
  437. for( i = 0; i < MO_MAX_PISTOL; i++ )
  438. {
  439. nKeys |= (1<<i)
  440. nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szPistolMenuTxt[i] )
  441. }
  442. format( szMenuBody[nLen], (255-nLen), "^n0. Vissza" )
  443.  
  444. show_menu( id, nKeys, szMenuBody, -1 )
  445. return
  446. }
  447. //
  448. ///////////////////////////////////////////////////////////////////////////////////////////
  449.  
  450. ///////////////////////////////////////////////////////////////////////////////////////////
  451. // A shotgun menü felépítési szakaszai
  452. public ShowShotgunMenu( id )
  453. {
  454. new i, nLen, nKeys = (1<<9)
  455. new szMenuBody[256]
  456.  
  457. nLen = format( szMenuBody, 255, "\yShotgun Menu:\w^n" )
  458. for( i = 0; i < MO_MAX_SHOTGUN; i++ )
  459. {
  460. nKeys |= (1<<i)
  461. nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szShotgunMenuTxt[i] )
  462. }
  463. format( szMenuBody[nLen], (255-nLen), "^n0. Vissza" )
  464.  
  465. show_menu( id, nKeys, szMenuBody, -1 )
  466. return
  467. }
  468. //
  469. ///////////////////////////////////////////////////////////////////////////////////////////
  470.  
  471. ///////////////////////////////////////////////////////////////////////////////////////////
  472. // Az SMG menü felépítési szakaszai
  473. public ShowSmgMenu( id )
  474. {
  475. new i, nLen, nKeys = (1<<9)
  476. new szMenuBody[2256]
  477.  
  478. nLen = format( szMenuBody, 255, "\ySMG Menu:\w^n" )
  479. for( i = 0; i < MO_MAX_SMG; i++ )
  480. {
  481. nKeys |= (1<<i)
  482. nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szSmgMenuTxt[i] )
  483. }
  484. format( szMenuBody[nLen], (255-nLen), "^n0. Vissza" )
  485.  
  486. show_menu( id, nKeys, szMenuBody, -1 )
  487. return
  488. }
  489. //
  490. ///////////////////////////////////////////////////////////////////////////////////////////
  491.  
  492. ///////////////////////////////////////////////////////////////////////////////////////////
  493. // A Puska menü felépítési szakaszai
  494. public ShowRifleMenu( id, pos )
  495. {
  496. if( pos < 0 ) return
  497.  
  498. new i, j = 0, nStart, nEnd, nLen, nKeys = (1<<9)
  499. new szMenuBody[512]
  500.  
  501. nStart = pos * MAX_DISPLAY
  502.  
  503. if( nStart >= MO_MAX_RIFLE )
  504. nStart = pos = g_nMenuPosition[id-1] = 0
  505.  
  506. nLen = format( szMenuBody, 511, "\yPuska Menu:\R%d/2^n\w^n", pos + 1 )
  507.  
  508. nEnd = nStart + MAX_DISPLAY
  509. if( nEnd > MO_MAX_RIFLE ) nEnd = MO_MAX_RIFLE
  510.  
  511. for( i = nStart; i < nEnd; i++ )
  512. {
  513. nKeys |= (1<<j++)
  514. nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, g_szRifleMenuTxt[i] )
  515. }
  516.  
  517. if( nEnd != MO_MAX_RIFLE )
  518. {
  519. format( szMenuBody[nLen], (511-nLen), "^n9. Tovabb...^n0. Vissza" )
  520. nKeys |= (1<<8)
  521. }
  522. else format( szMenuBody[nLen], (511-nLen), "^n0. Back" )
  523.  
  524. show_menu( id, nKeys, szMenuBody, -1 )
  525. return
  526. }
  527. //
  528. ///////////////////////////////////////////////////////////////////////////////////////////
  529.  
  530. ///////////////////////////////////////////////////////////////////////////////////////////
  531. // A Machine Gun menü felépítési szakaszai
  532. public ShowMachineMenu( id )
  533. {
  534. new nLen, nKeys = (1<<0|1<<9)
  535. new szMenuBody[256]
  536.  
  537. nLen = format( szMenuBody, 255, "\yMachine Gun Menu:\w^n" )
  538. nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", 1, g_szMachineMenuTxt )
  539. format( szMenuBody[nLen], (255-nLen), "^n0. Vissza" )
  540.  
  541. show_menu( id, nKeys, szMenuBody, -1 )
  542. return
  543. }
  544. //
  545. ///////////////////////////////////////////////////////////////////////////////////////////
  546.  
  547. ///////////////////////////////////////////////////////////////////////////////////////////
  548. // Az Egyéb menü felépítési szakaszai
  549. public ShowEquipMenu( id )
  550. {
  551. new i, nLen, nKeys = (1<<9)
  552. new szMenuBody[256]
  553.  
  554. nLen = format( szMenuBody, 255, "\yEgyeb Menu:\w^n" )
  555. for( i = 0; i < MO_MAX_EQUIP; i++ )
  556. {
  557. nKeys |= (1<<i)
  558. nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szEquipMenuTxt[i] )
  559. }
  560. format( szMenuBody[nLen], (255-nLen), "^n0. Vissza" )
  561.  
  562. show_menu( id, nKeys, szMenuBody, -1 )
  563. return
  564. }
  565. //
  566. ///////////////////////////////////////////////////////////////////////////////////////////
  567.  
  568. ///////////////////////////////////////////////////////////////////////////////////////////
  569. // Az Extra menü felépítési szakaszai
  570. /*
  571. public ShowExtraMenu( id )
  572. {
  573.   new i, nLen, nKeys = (1<<9)
  574.   new szMenuBody[256]
  575.  
  576.   nLen = format( szMenuBody, 255, "\yExtra Menu:\w^n" )
  577.   for( i = 0; i < MO_MAX_EXTRA; i++ )
  578.   {
  579.   nKeys |= (1<<i)
  580.   nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szExtraMenuTxt[i] )
  581.   }
  582.   format( szMenuBody[nLen], (255-nLen), "^n0. Vissza" )
  583.  
  584.   show_menu( id, nKeys, szMenuBody, -1 )
  585.   return
  586. }*/
  587.  
  588. public ShowExtraMenu( id, pos )
  589. {
  590. if( pos < 0 ) return
  591.  
  592. new i, j = 0, nStart, nEnd, nLen, nKeys = (1<<9)
  593. new szMenuBody[512]
  594.  
  595. nStart = pos * MAX_DISPLAY
  596.  
  597. if( nStart >= MO_MAX_EXTRA )
  598. nStart = pos = g_nMenuPosition[id-1] = 0
  599.  
  600. nLen = format( szMenuBody, 511, "\yExtra Menu:\R%d/2^n\w^n", pos + 1 )
  601.  
  602. nEnd = nStart + MAX_DISPLAY
  603. if( nEnd > MO_MAX_EXTRA ) nEnd = MO_MAX_EXTRA
  604.  
  605. for( i = nStart; i < nEnd; i++ )
  606. {
  607. nKeys |= (1<<j++)
  608. nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, g_szExtraMenuTxt[i] )
  609. }
  610.  
  611. if( nEnd != MO_MAX_EXTRA )
  612. {
  613. format( szMenuBody[nLen], (511-nLen), "^n9. Tovabb...^n0. Vissza" )
  614. nKeys |= (1<<8)
  615. }
  616. else format( szMenuBody[nLen], (511-nLen), "^n0. Vissza" )
  617.  
  618. show_menu( id, nKeys, szMenuBody, -1 )
  619. return
  620. }
  621.  
  622. //
  623. ///////////////////////////////////////////////////////////////////////////////////////////
  624.  
  625. ///////////////////////////////////////////////////////////////////////////////////////////
  626. // A Jatekos menü felépítési szakaszai
  627. public ShowPlayerMenu( id, pos )
  628. {
  629. if( pos < 0 ) return
  630.  
  631. get_players( g_nMenuPlayers[id-1], g_nMenuPlayersNum[id-1] )
  632.  
  633. new i, j = 0, idx
  634. new szUserName[32], szMenuBody[512]
  635. new nStart = pos * MAX_DISPLAY
  636.  
  637. if( nStart >= g_nMenuPlayersNum[id-1] )
  638. nStart = pos = g_nMenuPosition[id-1] = 0
  639.  
  640. new nLen = format( szMenuBody, 511, "\yJatekos Menu:\R%d/%d^n\w^n", (pos+1), (g_nMenuPlayersNum[id-1] / MAX_DISPLAY + ((g_nMenuPlayersNum[id-1] % MAX_DISPLAY) ? 1 : 0 )) )
  641. new nEnd = nStart + MAX_DISPLAY
  642. new nKeys = (1<<9)
  643.  
  644. if( nEnd > g_nMenuPlayersNum[id-1] )
  645. nEnd = g_nMenuPlayersNum[id-1]
  646.  
  647. for( i = nStart; i < nEnd; i++ )
  648. {
  649. idx = g_nMenuPlayers[id-1][i]
  650. get_user_name( idx, szUserName, 31 )
  651.  
  652. nKeys |= (1<<j++)
  653. nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, szUserName )
  654. }
  655.  
  656. if( nEnd != g_nMenuPlayersNum[id-1] )
  657. {
  658. nKeys |= (1<<8)
  659. format( szMenuBody[nLen], (511-nLen), "^n9. Tovabb...^n0. Vissza" )
  660. }
  661. else format( szMenuBody[nLen], (511-nLen), "^n0. Vissza" )
  662.  
  663. show_menu( id, nKeys, szMenuBody )
  664. return
  665. }
  666. //
  667. ///////////////////////////////////////////////////////////////////////////////////////////
  668.  
  669.  
  670. ///////////////////////////////////////////////////////////////////////////////////////////
  671. //
  672. // Fegyver adása kódokbol.
  673. //
  674. ///////////////////////////////////////////////////////////////////////////////////////////
  675.  
  676.  
  677. ///////////////////////////////////////////////////////////////////////////////////////////
  678. // A következõ funkció igazábol az adás.
  679. //
  680. stock GiveMenuItem( id, p_nPlayerID )
  681. {
  682. new szUserName[32]
  683. get_user_name( p_nPlayerID, szUserName, 31 )
  684.  
  685. switch( g_nMenuType[id-1] )
  686. {
  687. case MT_PISTOL: GivePlayerWeapon( p_nPlayerID, g_nMenuOption[id-1] )
  688. case MT_SHOTGUN: GivePlayerWeapon( p_nPlayerID, (OFFSET_SHOTGUN + g_nMenuOption[id-1]) )
  689. case MT_SMG: GivePlayerWeapon( p_nPlayerID, (OFFSET_SMG + g_nMenuOption[id-1]) )
  690. case MT_RIFLE: GivePlayerWeapon( p_nPlayerID, (OFFSET_RIFLE + g_nMenuOption[id-1]) )
  691. case MT_MACHINE: GivePlayerWeapon( p_nPlayerID, (OFFSET_MACHINE + g_nMenuOption[id-1]) )
  692. case MT_PAMMO: GivePrimaryAmmo( p_nPlayerID )
  693. case MT_SAMMO: GiveSecondaryAmmo( p_nPlayerID )
  694. case MT_EQUIP: GivePlayerItem( p_nPlayerID, g_nMenuOption[id-1] )
  695. case MT_EXTRA: GivePlayerExtra( p_nPlayerID, g_nMenuOption[id-1] )
  696. }
  697. return
  698. }
  699.  
  700.  
  701. stock GivePlayerWeapon( id, nWeaponIdx )
  702. {
  703. if( !is_user_alive(id) || (nWeaponIdx < 0) || (nWeaponIdx >= MAX_WEAPONS) )
  704. return // Hibas nev vagy fegyver
  705.  
  706. give_item( id, g_szWeaponList[nWeaponIdx] )
  707. for( new i = 0; i < g_nWeaponData[nWeaponIdx][1]; i++ )
  708. give_item( id, g_szAmmoList[g_nWeaponData[nWeaponIdx][0]] )
  709.  
  710. return
  711. }
  712.  
  713. stock GivePlayerExtra( id, nExtraIdx )
  714. {
  715. if( !is_user_alive(id) || (nExtraIdx < 0) || (nExtraIdx >= MO_MAX_EXTRA) )
  716. return
  717.  
  718. new i, j
  719. switch( nExtraIdx )
  720. {
  721. case 0: // Osszes fegyver adasa a jatekosnak (+tolteny)
  722. {
  723. for( i = 0; i < MAX_WEAPONS; i++ )
  724. {
  725. give_item( id, g_szWeaponList[i] )
  726. for( j = 0; j < g_nWeaponData[i][1]; j++ )
  727. give_item( id, g_szAmmoList[g_nWeaponData[i][0]] )
  728. }
  729. }
  730. case 1: // M3 készlet adása a játékosnak
  731. {
  732. GivePlayerWeapon( id, 6 ) // [6] = M3
  733. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  734. for( i = 1; i < 6; i++ )
  735. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  736. }
  737. case 2: // MP5 navy készlet adása a játékosnak
  738. {
  739. GivePlayerWeapon( id, 8 ) // [8] = MP5 Navy
  740. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  741. for( i = 1; i < 6; i++ )
  742. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  743. }
  744. case 3: // Famas készlet adása a játékosnak
  745. {
  746. GivePlayerWeapon( id, 13 ) // [13] = Clarion (Famas)
  747. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  748. for( i = 1; i < 6; i++ )
  749. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  750. }
  751. case 4: // Galil készlet adása a játékosnak
  752. {
  753. GivePlayerWeapon( id, 22 ) // [22] = Galil
  754. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  755. for( i = 1; i < 6; i++ )
  756. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  757. }
  758. case 5: // M4A1 készlet adása a játékosnak
  759. {
  760. GivePlayerWeapon( id, 16 ) // [16] = M4A1
  761. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  762. for( i = 1; i < 6; i++ )
  763. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  764. }
  765. case 6: // AK47 készlet adása a játékosnak
  766. {
  767. GivePlayerWeapon( id, 15 ) // [15] = AK47
  768. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  769. for( i = 1; i < 6; i++ )
  770. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  771. }
  772. case 7: // SG552 készlet adása a játékosnak
  773. {
  774. GivePlayerWeapon( id, 14 ) // [14] = Krieg SG552
  775. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  776. for( i = 1; i < 6; i++ )
  777. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  778. }
  779. case 8: // Bulpup készlet adása a játékosnak
  780. {
  781. GivePlayerWeapon( id, 17 ) // [17] = Bullpup
  782. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  783. for( i = 1; i < 6; i++ )
  784. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  785. }
  786. case 9: // M249 készlet adása a játékosnak
  787. {
  788. GivePlayerWeapon( id, 23 ) // [23] = M249
  789. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  790. for( i = 1; i < 6; i++ )
  791. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  792. }
  793. case 10: // Scout készlet adása a játékosnak
  794. {
  795. GivePlayerWeapon( id, 16 ) // [18] = Scout
  796. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  797. for( i = 1; i < 6; i++ )
  798. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  799. }
  800. case 11: // Magozo készlet adása a játékosnak
  801. {
  802. GivePlayerWeapon( id, 20 ) // [20] = CT AutoSniper (G3SG1)
  803. //GivePlayerWeapon( id, 21 ) // [21] = T AutoSniper (SG550)
  804. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  805. for( i = 1; i < 6; i++ )
  806. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  807. }
  808. case 12: // AWP készlet adása a játékosnak
  809. {
  810. GivePlayerWeapon( id, 19 ) // [19] = AWP
  811. GivePlayerWeapon( id, 2 ) // [2] = Deagle
  812. for( i = 1; i < 6; i++ )
  813. GivePlayerItem( id, i ) // Kevlar, Fény/HE/Füst gránát, Hatástalanító
  814. }
  815. case 13: // Granat készlet adása a játékosnak
  816. {
  817. for( i = 2; i < 5; i++ )
  818. GivePlayerItem( id, i ) // Fény/HE/Füst gránát
  819. }
  820. }
  821. return
  822. }
  823.  
  824. stock GivePlayerItem( id, nItemIdx )
  825. {
  826. if( !is_user_alive(id) || (nItemIdx < 0) || (nItemIdx >= MAX_ITEMS) )
  827. return // Érvénytelen felhasználó vagy pont
  828.  
  829. if( (nItemIdx == 4) && (get_cvar_num("sv_weaponmenu_smoke") < 1) )
  830. return // Füst gránát korlátozott
  831.  
  832. if( nItemIdx == 2 ) // 2 feny granat adható
  833. give_item( id, g_szItemsList[nItemIdx] )
  834. give_item( id, g_szItemsList[nItemIdx] )
  835.  
  836. return
  837. }
  838.  
  839. stock GivePrimaryAmmo( id )
  840. {
  841. new nWeapons[32], nNum, i, j, k
  842. new szWeaponName[32]
  843.  
  844. // Csak elsodleges loszer adható a fegyverekhez
  845. get_user_weapons( id, nWeapons, nNum )
  846. for( i = 0; i < nNum; i++ )
  847. {
  848. get_weaponname( nWeapons[i], szWeaponName, 31 )
  849. for( j = OFFSET_SHOTGUN; j < MAX_WEAPONS; j++ )
  850. {
  851. if( equali( szWeaponName, g_szWeaponList[j] ) )
  852. {
  853. for( k = 0; k < g_nWeaponData[j][1]; k++ )
  854. give_item( id, g_szAmmoList[g_nWeaponData[j][0]] )
  855. }
  856. }
  857. }
  858. return
  859. }
  860.  
  861. stock GiveSecondaryAmmo( id )
  862. {
  863. new nWeapons[32], nNum, i, j, k
  864. new szWeaponName[32]
  865.  
  866. // Csak másodlagos loszer adható a pisztolyokhoz
  867. get_user_weapons( id, nWeapons, nNum )
  868. for( i = 0; i < nNum; i++ )
  869. {
  870. get_weaponname( nWeapons[i], szWeaponName, 31 )
  871. for( j = 0; j < OFFSET_SHOTGUN; j++ )
  872. {
  873. if( equali( szWeaponName, g_szWeaponList[j] ) )
  874. {
  875. for( k = 0; k < g_nWeaponData[j][1]; k++ )
  876. give_item( id, g_szAmmoList[g_nWeaponData[j][0]] )
  877. }
  878. }
  879. }
  880. return
  881. }
  882. //
  883. //
  884. ///////////////////////////////////////////////////////////////////////////////////////////