HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1.  
  2. /*
  3. Jailbreak Gang System
  4. H3avY Ra1n
  5.  
  6. Description
  7. -----------
  8. This plugin allows prisoners to create gangs and upgrade specific skills that apply to everybody in the gang.
  9.  
  10.  
  11. Gang Menu
  12. ---------
  13. Create a Gang - Allows a user to create a gang by paying money.
  14. Invite to Gang - Only the leader of the gang can invite people to the gang.
  15. Skills - Opens the skills menu, where any member of the gang can pay money to upgrade their skills.
  16. Top-10 - Shows a MOTD with the top10 gangs, SORTED BY KILLS. (If you have a good way to sort it, please post it below)
  17. Leave Gang - Allows a player to leave the gang. The leader cannot leave the gang until he transfers leadership to somebody else (explained later).
  18. Gang Leader Menu - Shows a menu with options to disband the gang, kick a player from the gang, or transfer leadership to somebody else in the gang.
  19. Online Members - Shows a list of gang members that are currently in the server.
  20.  
  21.  
  22. Skills
  23. ------
  24. HP - Increased health
  25. Stealing - Increased money earnings.
  26. Gravity - Lower Gravity
  27. Damage - Increased damage
  28. Stamina - Gives higher speed to players.
  29. Weapon Drop - Chance of making the guard drop the weapon when you knife them. (%1 chance increase per level)
  30.  
  31.  
  32. CVARS
  33. -----
  34. jb_gang_cost - The cost to create a gang.
  35. jb_health_cost - The cost to upgrade gang health.
  36. jb_stealing_cost - The cost to upgrade gang money earning.
  37. jb_gravity_cost - The cost to upgrade gang gravity.
  38. jb_damage_cost - The cost to upgrade gang damage.
  39. jb_stamina_cost - The cost to upgrade gang stamina (speed).
  40. jb_weapondrop_cost - The cost to upgrade gang weapon drop percentage.
  41.  
  42. Additionally there are CVars for the max level for each type of upgrade, so replace _cost above with _max.
  43. Also there are CVars for the amount per level, so replace _cost above with _per.
  44.  
  45. jb_points_per_kill - The amount of points you get for a kill
  46. jb_headshot_bonus - The amount of points you get for a headshot
  47.  
  48. jb_max_members - The max amount of members a gang can hold
  49. jb_admin_create - Whether or not an admin can create gangs without using points
  50.  
  51. Credits
  52. -------
  53. F0RCE - Original Plugin Idea
  54. Exolent - SQLVault Include
  55. Drekes - Freezetime Fix (I was too lazy) :)
  56.  
  57.  
  58. Changelog
  59. ---------
  60. September 26, 2011 - v1.0 - Initial Release
  61. September 27, 2011 - v1.01 - Added more cvars, fixed a few bugs.
  62. September 28, 2011 - v1.1 - Added gang admins, jb points instead of money, and a few other things I can't remember :)
  63. January 21, 2011 - v1.1.1 - Added a cvar for whether an admin can create a gang without using points.
  64. January 23, 2011 - v1.1.2 - Fixed freezetime problem
  65.  
  66.  
  67. http://forums.alliedmods.net/showthread.php?p=1563919
  68. */
  69.  
  70. /* Includes */
  71.  
  72. #include < amxmodx >
  73. #include < amxmisc >
  74. #include < sqlvault_ex >
  75. #include < cstrike >
  76. #include < colorchat >
  77. #include < hamsandwich >
  78. #include < fun >
  79.  
  80. /* Defines */
  81.  
  82. #define ADMIN_CREATE ADMIN_LEVEL_B
  83.  
  84. /* Constants */
  85.  
  86. new const g_szVersion[ ] = "1.1.2";
  87.  
  88. enum _:GangInfo
  89. {
  90. Trie:GangMembers,
  91. GangName[ 64 ],
  92. GangHP,
  93. GangStealing,
  94. GangGravity,
  95. GangDamage,
  96. GangStamina,
  97. GangWeaponDrop,
  98. GangKills,
  99. NumMembers
  100. };
  101.  
  102. enum
  103. {
  104. VALUE_HP,
  105. VALUE_STEALING,
  106. VALUE_GRAVITY,
  107. VALUE_DAMAGE,
  108. VALUE_STAMINA,
  109. VALUE_WEAPONDROP,
  110. VALUE_KILLS
  111. }
  112.  
  113. enum
  114. {
  115. STATUS_NONE,
  116. STATUS_MEMBER,
  117. STATUS_ADMIN,
  118. STATUS_LEADER
  119. };
  120.  
  121. new const g_szGangValues[ ][ ] =
  122. {
  123. "HP",
  124. "Lopás",
  125. "Gravitáció",
  126. "Sebzés",
  127. "Kitartás",
  128. "FegyverDobás",
  129. "Ölések"
  130. };
  131.  
  132. new const g_szPrefix[ ] = "^04[Banda Rendszer]^01";
  133.  
  134. /* Tries */
  135.  
  136. new Trie:g_tGangNames;
  137. new Trie:g_tGangValues;
  138.  
  139. /* Vault */
  140.  
  141. new SQLVault:g_hVault;
  142. new SQLVault:g_hPointsVault;
  143.  
  144. /* Arrays */
  145.  
  146. new Array:g_aGangs;
  147.  
  148. /* Pcvars */
  149.  
  150. new g_pCreateCost;
  151.  
  152. new g_pHealthCost;
  153. new g_pStealingCost;
  154. new g_pGravityCost;
  155. new g_pDamageCost;
  156. new g_pStaminaCost;
  157. new g_pWeaponDropCost;
  158.  
  159. new g_pHealthMax;
  160. new g_pStealingMax;
  161. new g_pGravityMax;
  162. new g_pDamageMax;
  163. new g_pStaminaMax;
  164. new g_pWeaponDropMax;
  165.  
  166. new g_pHealthPerLevel;
  167. new g_pStealingPerLevel;
  168. new g_pGravityPerLevel;
  169. new g_pDamagePerLevel;
  170. new g_pStaminaPerLevel;
  171. new g_pWeaponDropPerLevel;
  172.  
  173. new g_pPointsPerKill;
  174. new g_pHeadshotBonus;
  175.  
  176. new g_pMaxMembers;
  177. new g_pAdminCreate;
  178.  
  179. /* Integers */
  180.  
  181. new g_iGang[ 33 ];
  182. new g_iPoints[ 33 ];
  183.  
  184.  
  185. public plugin_init()
  186. {
  187. register_plugin( "Jailbreak Gang System", g_szVersion, "H3avY Ra1n" );
  188.  
  189. g_aGangs = ArrayCreate( GangInfo );
  190.  
  191. g_tGangValues = TrieCreate();
  192. g_tGangNames = TrieCreate();
  193.  
  194. g_hVault = sqlv_open_local( "jb_gangs", false );
  195. sqlv_init_ex( g_hVault );
  196.  
  197. g_hPointsVault = sqlv_open_local( "jb_points", true );
  198.  
  199. g_pCreateCost = register_cvar( "jb_gang_cost", "50" );
  200. g_pHealthCost = register_cvar( "jb_health_cost", "20" );
  201. g_pStealingCost = register_cvar( "jb_stealing_cost", "20" );
  202. g_pGravityCost = register_cvar( "jb_gravity_cost", "20" );
  203. g_pDamageCost = register_cvar( "jb_damage_cost", "20" );
  204. g_pStaminaCost = register_cvar( "jb_stamina_cost", "20" );
  205. g_pWeaponDropCost = register_cvar( "jb_weapondrop_cost", "20" );
  206.  
  207. g_pHealthMax = register_cvar( "jb_health_max", "10" );
  208. g_pStealingMax = register_cvar( "jb_stealing_max", "10" );
  209. g_pGravityMax = register_cvar( "jb_gravity_max", "10" ); // Max * Gravity Per Level must be LESS than 800
  210. g_pDamageMax = register_cvar( "jb_damage_max", "10" );
  211. g_pStaminaMax = register_cvar( "jb_stamina_max", "10" );
  212. g_pWeaponDropMax = register_cvar( "jb_weapondrop_max", "10" );
  213.  
  214. g_pHealthPerLevel = register_cvar( "jb_health_per", "10" );
  215. g_pStealingPerLevel = register_cvar( "jb_stealing_per", "0.05" );
  216. g_pGravityPerLevel = register_cvar( "jb_gravity_per", "50" );
  217. g_pDamagePerLevel = register_cvar( "jb_damage_per", "3" );
  218. g_pStaminaPerLevel = register_cvar( "jb_stamina_per", "3" );
  219. g_pWeaponDropPerLevel = register_cvar( "jb_weapondrop_per", "1" );
  220.  
  221. g_pPointsPerKill = register_cvar( "jb_points_per_kill", "3" );
  222. g_pHeadshotBonus = register_cvar( "jb_headshot_bonus", "2" );
  223.  
  224. g_pMaxMembers = register_cvar( "jb_max_members", "10" );
  225. g_pAdminCreate = register_cvar( "jb_admin_create", "0" ); // Admins can create gangs without points
  226.  
  227. register_cvar( "jb_gang_version", g_szVersion, FCVAR_SPONLY | FCVAR_SERVER );
  228.  
  229. register_menu( "Gang Menu", 1023, "GangMenu_Handler" );
  230. register_menu( "Skills Menu", 1023, "SkillsMenu_Handler" );
  231.  
  232. for( new i = 0; i < sizeof g_szGangValues; i++ )
  233. {
  234. TrieSetCell( g_tGangValues, g_szGangValues[ i ], i );
  235. }
  236.  
  237. RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1 );
  238. RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamage_Pre", 0 );
  239. RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamage_Post", 1 );
  240. RegisterHam( Ham_Item_PreFrame, "player", "Ham_PlayerResetSpeedPost", 1);
  241.  
  242. register_event( "DeathMsg", "Event_DeathMsg", "a" );
  243.  
  244. register_clcmd( "say /gang", "Cmd_Gang" );
  245. register_clcmd( "gang_name", "Cmd_CreateGang" );
  246.  
  247. LoadGangs();
  248. }
  249.  
  250. public client_disconnect( id )
  251. {
  252. g_iGang[ id ] = -1;
  253.  
  254. new szAuthID[ 35 ];
  255. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  256.  
  257. sqlv_set_num( g_hPointsVault, szAuthID, g_iPoints[ id ] );
  258. }
  259.  
  260. public client_putinserver( id )
  261. {
  262. g_iGang[ id ] = get_user_gang( id );
  263. new szAuthID[ 35 ];
  264. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  265.  
  266. g_iPoints[ id ] = sqlv_get_num( g_hPointsVault, szAuthID );
  267. }
  268.  
  269. public plugin_end()
  270. {
  271. SaveGangs();
  272. sqlv_close( g_hVault );
  273. }
  274.  
  275. public Ham_PlayerSpawn_Post( id )
  276. {
  277. if( !is_user_alive( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  278. return HAM_IGNORED;
  279.  
  280. if( g_iGang[ id ] == -1 )
  281. {
  282. return HAM_IGNORED;
  283. }
  284.  
  285. new aData[ GangInfo ];
  286. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  287.  
  288. new iHealth = 100 + aData[ GangHP ] * get_pcvar_num( g_pHealthPerLevel );
  289. set_user_health( id, iHealth );
  290.  
  291. new iGravity = 800 - ( get_pcvar_num( g_pGravityPerLevel ) * aData[ GangGravity ] );
  292. set_user_gravity( id, float( iGravity ) / 800.0 );
  293.  
  294. return HAM_IGNORED;
  295. }
  296.  
  297. public Ham_TakeDamage_Pre( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
  298. {
  299. if( !is_user_alive( iAttacker ) || cs_get_user_team( iAttacker ) != CS_TEAM_T )
  300. return HAM_IGNORED;
  301.  
  302. if( g_iGang[ iAttacker ] == -1 )
  303. return HAM_IGNORED;
  304.  
  305. new aData[ GangInfo ];
  306. ArrayGetArray( g_aGangs, g_iGang[ iAttacker ], aData );
  307.  
  308. SetHamParamFloat( 4, flDamage + ( get_pcvar_num( g_pDamagePerLevel ) * ( aData[ GangDamage ] ) ) );
  309.  
  310. return HAM_IGNORED;
  311. }
  312.  
  313. public Ham_TakeDamage_Post( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
  314. {
  315. if( !is_user_alive( iAttacker ) || g_iGang[ iAttacker ] == -1 || get_user_weapon( iAttacker ) != CSW_KNIFE || cs_get_user_team( iAttacker ) != CS_TEAM_T )
  316. {
  317. return HAM_IGNORED;
  318. }
  319.  
  320. new aData[ GangInfo ];
  321. ArrayGetArray( g_aGangs, g_iGang[ iAttacker ], aData );
  322.  
  323. new iChance = aData[ GangWeaponDrop ] * get_pcvar_num( g_pWeaponDropPerLevel );
  324.  
  325. if( iChance == 0 )
  326. return HAM_IGNORED;
  327.  
  328. new bool:bDrop = ( random_num( 1, 100 ) <= iChance );
  329.  
  330. if( bDrop )
  331. client_cmd( iVictim, "drop" );
  332.  
  333. return HAM_IGNORED;
  334. }
  335.  
  336. public Ham_PlayerResetSpeedPost( id )
  337. {
  338. if( g_iGang[ id ] == -1 || !is_user_alive( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  339. {
  340. return HAM_IGNORED;
  341. }
  342.  
  343. new aData[ GangInfo ];
  344. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  345.  
  346. if( aData[ GangStamina ] > 0 && get_user_maxspeed( id ) > 1.0 )
  347. set_user_maxspeed( id, 250.0 + ( aData[ GangStamina ] * get_pcvar_num( g_pStaminaPerLevel ) ) );
  348.  
  349. return HAM_IGNORED;
  350. }
  351.  
  352. public Event_DeathMsg()
  353. {
  354. new iKiller = read_data( 1 );
  355. new iVictim = read_data( 2 );
  356.  
  357. if( !is_user_alive( iKiller ) || cs_get_user_team( iVictim ) != CS_TEAM_CT || cs_get_user_team( iKiller ) != CS_TEAM_T )
  358. return PLUGIN_CONTINUE;
  359.  
  360. new iTotal = get_pcvar_num( g_pPointsPerKill ) + ( bool:read_data( 3 ) ? get_pcvar_num( g_pHeadshotBonus ) : 0 );
  361.  
  362. if( g_iGang[ iKiller ] > -1 )
  363. {
  364. new aData[ GangInfo ];
  365. ArrayGetArray( g_aGangs, g_iGang[ iKiller ], aData );
  366. aData[ GangKills ]++;
  367. ArraySetArray( g_aGangs, g_iGang[ iKiller ], aData );
  368.  
  369. iTotal += iTotal * ( aData[ GangStealing ] * get_pcvar_num( g_pStealingPerLevel ) );
  370. }
  371.  
  372. g_iPoints[ iKiller ] += iTotal;
  373.  
  374. return PLUGIN_CONTINUE;
  375. }
  376.  
  377. public Cmd_Gang( id )
  378. {
  379. if( !is_user_connected( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  380. {
  381. ColorChat( id, NORMAL, "%s Csak ^03elítéltek ^01érhetik el ezt a menüt.", g_szPrefix );
  382. return PLUGIN_HANDLED;
  383. }
  384.  
  385. static szMenu[ 512 ], iLen, aData[ GangInfo ], iKeys, iStatus;
  386.  
  387. iKeys = MENU_KEY_0 | MENU_KEY_4;
  388.  
  389. iStatus = getStatus( id, g_iGang[ id ] );
  390.  
  391. if( g_iGang[ id ] > -1 )
  392. {
  393. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  394. iLen = formatex( szMenu, charsmax( szMenu ), "\yBanda Menü^n\wJelenlegi Banda:\y %s^n", aData[ GangName ] );
  395. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\yJB Pontok: \w%i^n^n", g_iPoints[ id ] );
  396. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r1. \dBanda Alapítás [%i Pont]^n", get_pcvar_num( g_pCreateCost ) );
  397. }
  398.  
  399. else
  400. {
  401. iLen = formatex( szMenu, charsmax( szMenu ), "\yBanda Menü^n\wJelenlegi Banda:\r Nincs^n" );
  402. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\yJB Pontok: \w%i^n^n", g_iPoints[ id ] );
  403. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r1. \wBanda Alapítás [%i Pont]^n", get_pcvar_num( g_pCreateCost ) );
  404.  
  405. iKeys |= MENU_KEY_1;
  406. }
  407.  
  408.  
  409. if( iStatus > STATUS_MEMBER && g_iGang[ id ] > -1 && get_pcvar_num( g_pMaxMembers ) > aData[ NumMembers ] )
  410. {
  411. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r2. \wJátékos meghívása^n" );
  412. iKeys |= MENU_KEY_2;
  413. }
  414. else
  415. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r2. \dJátékos meghívása^n" );
  416.  
  417. if( g_iGang[ id ] > -1 )
  418. {
  419. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r3. \wKépességek^n" );
  420. iKeys |= MENU_KEY_3;
  421. }
  422.  
  423. else
  424. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r3. \dKépességek^n" );
  425.  
  426. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r4. \wTop-10^n" );
  427.  
  428. if( g_iGang[ id ] > -1 )
  429. {
  430. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r5. \wBanda elhagyása^n" );
  431. iKeys |= MENU_KEY_5;
  432. }
  433.  
  434. else
  435. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r5. \dBanda elhagyása^n" );
  436.  
  437.  
  438. if( iStatus > STATUS_MEMBER )
  439. {
  440. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r6. \wBanda Admin Menü^n" );
  441. iKeys |= MENU_KEY_6;
  442. }
  443.  
  444. else
  445. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r6. \dBanda Admin Menü^n" );
  446.  
  447. if( g_iGang[ id ] > -1 )
  448. {
  449. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r7. \wOnline tagok^n" );
  450. iKeys |= MENU_KEY_7;
  451. }
  452.  
  453. else
  454. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r7. \dOnline tagok^n" );
  455.  
  456. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "^n\r0. \wExit" );
  457.  
  458. show_menu( id, iKeys, szMenu, -1, "Banda Menü" );
  459.  
  460. return PLUGIN_CONTINUE;
  461. }
  462.  
  463. public GangMenu_Handler( id, iKey )
  464. {
  465. switch( ( iKey + 1 ) % 10 )
  466. {
  467. case 0: return PLUGIN_HANDLED;
  468.  
  469. case 1:
  470. {
  471. if( get_pcvar_num( g_pAdminCreate ) && get_user_flags( id ) & ADMIN_CREATE )
  472. {
  473. client_cmd( id, "messagemode gang_name" );
  474. }
  475.  
  476. else if( g_iPoints[ id ] < get_pcvar_num( g_pCreateCost ) )
  477. {
  478. ColorChat( id, NORMAL, "%s Nincs elég pontod, hogy bandát alapíts!", g_szPrefix );
  479. return PLUGIN_HANDLED;
  480. }
  481.  
  482. else
  483. client_cmd( id, "messagemode gang_name" );
  484. }
  485.  
  486. case 2:
  487. {
  488. ShowInviteMenu( id );
  489. }
  490.  
  491. case 3:
  492. {
  493. ShowSkillsMenu( id );
  494. }
  495.  
  496. case 4:
  497. {
  498. Cmd_Top10( id );
  499. }
  500.  
  501. case 5:
  502. {
  503. ShowLeaveConfirmMenu( id );
  504. }
  505.  
  506. case 6:
  507. {
  508. ShowLeaderMenu( id );
  509. }
  510.  
  511. case 7:
  512. {
  513. ShowMembersMenu( id );
  514. }
  515. }
  516.  
  517. return PLUGIN_HANDLED;
  518. }
  519.  
  520. public Cmd_CreateGang( id )
  521. {
  522. new bool:bAdmin = false;
  523.  
  524. if( get_pcvar_num( g_pAdminCreate ) && get_user_flags( id ) & ADMIN_CREATE )
  525. {
  526. bAdmin = true;
  527. }
  528.  
  529. else if( g_iPoints[ id ] < get_pcvar_num( g_pCreateCost ) )
  530. {
  531. ColorChat( id, NORMAL, "%s Nincs elég pontod, hogy bandát alapíts!", g_szPrefix );
  532. return PLUGIN_HANDLED;
  533. }
  534.  
  535. else if( g_iGang[ id ] > -1 )
  536. {
  537. ColorChat( id, NORMAL, "%s Nem alapíthatsz bandát, ha már tagja vagy egynek!", g_szPrefix );
  538. return PLUGIN_HANDLED;
  539. }
  540.  
  541. else if( cs_get_user_team( id ) != CS_TEAM_T )
  542. {
  543. ColorChat( id, NORMAL, "%s Csak ^03elítéltek ^01alapíthatnak bandát!", g_szPrefix );
  544. return PLUGIN_HANDLED;
  545. }
  546.  
  547. new szArgs[ 60 ];
  548. read_args( szArgs, charsmax( szArgs ) );
  549.  
  550. remove_quotes( szArgs );
  551.  
  552. if( TrieKeyExists( g_tGangNames, szArgs ) )
  553. {
  554. ColorChat( id, NORMAL, "%s Ez a bandanév már foglalt.", g_szPrefix );
  555. Cmd_Gang( id );
  556. return PLUGIN_HANDLED;
  557. }
  558.  
  559. new aData[ GangInfo ];
  560.  
  561. aData[ GangName ] = szArgs;
  562. aData[ GangHP ] = 0;
  563. aData[ GangStealing ] = 0;
  564. aData[ GangGravity ] = 0;
  565. aData[ GangStamina ] = 0;
  566. aData[ GangWeaponDrop ] = 0;
  567. aData[ GangDamage ] = 0;
  568. aData[ NumMembers ] = 0;
  569. aData[ GangMembers ] = _:TrieCreate();
  570.  
  571. ArrayPushArray( g_aGangs, aData );
  572.  
  573. if( !bAdmin )
  574. g_iPoints[ id ] -= get_pcvar_num( g_pCreateCost );
  575.  
  576. set_user_gang( id, ArraySize( g_aGangs ) - 1, STATUS_LEADER );
  577.  
  578. ColorChat( id, NORMAL, "%s Sikeresen megalapítottad a bandád '^03%s^01'.", g_szPrefix, szArgs );
  579.  
  580. return PLUGIN_HANDLED;
  581. }
  582.  
  583. public ShowInviteMenu( id )
  584. {
  585. new iPlayers[ 32 ], iNum;
  586. get_players( iPlayers, iNum );
  587.  
  588. new szInfo[ 6 ], hMenu;
  589. hMenu = menu_create( "Válaszd ki a meghívandó játékost:", "InviteMenu_Handler" );
  590. new szName[ 32 ];
  591.  
  592. for( new i = 0, iPlayer; i < iNum; i++ )
  593. {
  594. iPlayer = iPlayers[ i ];
  595.  
  596.  
  597. if( iPlayer == id || g_iGang[ iPlayer ] == g_iGang[ id ] || cs_get_user_team( iPlayer ) != CS_TEAM_T )
  598. continue;
  599.  
  600. get_user_name( iPlayer, szName, charsmax( szName ) );
  601.  
  602. num_to_str( iPlayer, szInfo, charsmax( szInfo ) );
  603.  
  604. menu_additem( hMenu, szName, szInfo );
  605. }
  606.  
  607. menu_display( id, hMenu, 0 );
  608. }
  609.  
  610. public InviteMenu_Handler( id, hMenu, iItem )
  611. {
  612. if( iItem == MENU_EXIT )
  613. {
  614. Cmd_Gang( id );
  615. return PLUGIN_HANDLED;
  616. }
  617.  
  618. new szData[ 6 ], iAccess, hCallback, szName[ 32 ];
  619. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, 31, hCallback );
  620.  
  621. new iPlayer = str_to_num( szData );
  622.  
  623. if( !is_user_connected( iPlayer ) )
  624. return PLUGIN_HANDLED;
  625.  
  626. ShowInviteConfirmMenu( id, iPlayer );
  627.  
  628. ColorChat( id, NORMAL, "%s Sikeresen meghívtad %s -t.", g_szPrefix, szName );
  629.  
  630. Cmd_Gang( id );
  631. return PLUGIN_HANDLED;
  632. }
  633.  
  634. public ShowInviteConfirmMenu( id, iPlayer )
  635. {
  636. new szName[ 32 ];
  637. get_user_name( id, szName, charsmax( szName ) );
  638.  
  639. new aData[ GangInfo ];
  640. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  641.  
  642. new szMenuTitle[ 128 ];
  643. formatex( szMenuTitle, charsmax( szMenuTitle ), "%s Megkért, hogy csatlakozz %s", szName, aData[ GangName ] );
  644. new hMenu = menu_create( szMenuTitle, "InviteConfirmMenu_Handler" );
  645.  
  646. new szInfo[ 6 ];
  647. num_to_str( g_iGang[ id ], szInfo, 5 );
  648.  
  649. menu_additem( hMenu, "Elfogad", szInfo );
  650. menu_additem( hMenu, "Elutasít", "-1" );
  651.  
  652. menu_display( iPlayer, hMenu, 0 );
  653. }
  654.  
  655. public InviteConfirmMenu_Handler( id, hMenu, iItem )
  656. {
  657. if( iItem == MENU_EXIT )
  658. return PLUGIN_HANDLED;
  659.  
  660. new szData[ 6 ], iAccess, hCallback;
  661. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  662.  
  663. new iGang = str_to_num( szData );
  664.  
  665. if( iGang == -1 )
  666. return PLUGIN_HANDLED;
  667.  
  668. if( getStatus( id, g_iGang[ id ] ) == STATUS_LEADER )
  669. {
  670. ColorChat( id, NORMAL, "%s Nem hagyhatod el a bandát, ha te vagy a vezetõ.", g_szPrefix );
  671. return PLUGIN_HANDLED;
  672. }
  673.  
  674. set_user_gang( id, iGang );
  675.  
  676. new aData[ GangInfo ];
  677. ArrayGetArray( g_aGangs, iGang, aData );
  678.  
  679. ColorChat( id, NORMAL, "%s Sikeresen csatlakoztál a bandába ^03%s^01.", g_szPrefix, aData[ GangName ] );
  680.  
  681. return PLUGIN_HANDLED;
  682. }
  683.  
  684.  
  685. public ShowSkillsMenu( id )
  686. {
  687. static szMenu[ 512 ], iLen, iKeys, aData[ GangInfo ];
  688.  
  689. if( !iKeys )
  690. {
  691. iKeys = MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_5 | MENU_KEY_6 | MENU_KEY_0;
  692. }
  693.  
  694. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  695.  
  696. iLen = formatex( szMenu, charsmax( szMenu ), "\ySkills Menu^n^n" );
  697. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r1. \wHP növelése [\rÁr: \y%i Pont\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pHealthCost ), aData[ GangHP ], get_pcvar_num( g_pHealthMax ) );
  698. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r2. \wLopás fejlesztése [\rÁr: \y%i Pont\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pStealingCost ), aData[ GangStealing ], get_pcvar_num( g_pStealingMax ) );
  699. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r3. \wGravitáció csökkentése [\rÁr: \y%i Pont\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pGravityCost ), aData[ GangGravity ], get_pcvar_num( g_pGravityMax ) );
  700. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r4. \wSebzés fejlesztése [\rÁr: \y%i Pont\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pDamageCost ), aData[ GangDamage ], get_pcvar_num( g_pDamageMax ) );
  701. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r5. \wFegyver Dobás fejlesztése [\rÁr: \y%i Pont\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pWeaponDropCost ), aData[ GangWeaponDrop ], get_pcvar_num( g_pWeaponDropMax ) );
  702. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r6. \wSebesség növelése [\rÁr: \y%i Pont\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pStaminaCost ), aData[ GangStamina ], get_pcvar_num( g_pStaminaMax ) );
  703.  
  704. iLen += formatex( szMenu[ iLen ], 511 - iLen, "^n\r0. \wExit" );
  705.  
  706. show_menu( id, iKeys, szMenu, -1, "Képesség Menü" );
  707. }
  708.  
  709. public SkillsMenu_Handler( id, iKey )
  710. {
  711. new aData[ GangInfo ];
  712. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  713.  
  714. switch( ( iKey + 1 ) % 10 )
  715. {
  716. case 0:
  717. {
  718. Cmd_Gang( id );
  719. return PLUGIN_HANDLED;
  720. }
  721.  
  722. case 1:
  723. {
  724. if( aData[ GangHP ] == get_pcvar_num( g_pHealthMax ) )
  725. {
  726. ColorChat( id, NORMAL, "%s A bandád már tökélyre fejlesztette ezt a képességet.", g_szPrefix );
  727. ShowSkillsMenu( id );
  728. return PLUGIN_HANDLED;
  729. }
  730.  
  731. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pHealthCost );
  732.  
  733. if( iRemaining < 0 )
  734. {
  735. ColorChat( id, NORMAL, "%s Nincs elég pontod.", g_szPrefix );
  736. ShowSkillsMenu( id );
  737. return PLUGIN_HANDLED;
  738. }
  739.  
  740. aData[ GangHP ]++;
  741.  
  742. g_iPoints[ id ] = iRemaining;
  743. }
  744.  
  745. case 2:
  746. {
  747. if( aData[ GangStealing ] == get_pcvar_num( g_pStealingMax ) )
  748. {
  749. ColorChat( id, NORMAL, "%s A bándád már tökélyre fejlesztette ezt a képességet.", g_szPrefix );
  750. ShowSkillsMenu( id );
  751. return PLUGIN_HANDLED;
  752. }
  753.  
  754. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pStealingCost );
  755.  
  756. if( iRemaining < 0 )
  757. {
  758. ColorChat( id, NORMAL, "%s Nincs elég pontod.", g_szPrefix );
  759. ShowSkillsMenu( id );
  760. return PLUGIN_HANDLED;
  761. }
  762.  
  763. aData[ GangStealing ]++;
  764.  
  765. g_iPoints[ id ] = iRemaining;
  766. }
  767.  
  768. case 3:
  769. {
  770. if( aData[ GangGravity ] == get_pcvar_num( g_pGravityMax ) )
  771. {
  772. ColorChat( id, NORMAL, "%s A bandád már tökélyre fejlesztette ezt a képességet.", g_szPrefix );
  773. ShowSkillsMenu( id );
  774. return PLUGIN_HANDLED;
  775. }
  776.  
  777. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pGravityCost );
  778.  
  779. if( iRemaining < 0 )
  780. {
  781. ColorChat( id, NORMAL, "%s Nincs elég pontod.", g_szPrefix );
  782. ShowSkillsMenu( id );
  783. return PLUGIN_HANDLED;
  784. }
  785.  
  786. aData[ GangGravity ]++;
  787.  
  788. g_iPoints[ id ] = iRemaining;
  789. }
  790.  
  791. case 4:
  792. {
  793. if( aData[ GangDamage ] == get_pcvar_num( g_pDamageMax ) )
  794. {
  795. ColorChat( id, NORMAL, "%s A bandád már tökélyre fejlesztette ezt a képességet.", g_szPrefix );
  796. ShowSkillsMenu( id );
  797. return PLUGIN_HANDLED;
  798. }
  799.  
  800. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pDamageCost );
  801.  
  802. if( iRemaining < 0 )
  803. {
  804. ColorChat( id, NORMAL, "%s Nincs elég pontod.", g_szPrefix );
  805. ShowSkillsMenu( id );
  806. return PLUGIN_HANDLED;
  807. }
  808.  
  809. aData[ GangDamage ]++;
  810.  
  811. g_iPoints[ id ] = iRemaining;
  812. }
  813.  
  814. case 5:
  815. {
  816. if( aData[ GangWeaponDrop ] == get_pcvar_num( g_pWeaponDropMax ) )
  817. {
  818. ColorChat( id, NORMAL, "%s A bandád már tökélyre fejlesztette ezt a képességet.", g_szPrefix );
  819. ShowSkillsMenu( id );
  820. return PLUGIN_HANDLED;
  821. }
  822.  
  823. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pWeaponDropCost );
  824.  
  825. if( iRemaining < 0 )
  826. {
  827. ColorChat( id, NORMAL, "%s Nincs elég pontod.", g_szPrefix );
  828. ShowSkillsMenu( id );
  829. return PLUGIN_HANDLED;
  830. }
  831.  
  832. aData[ GangWeaponDrop ]++;
  833.  
  834. g_iPoints[ id ] = iRemaining;
  835. }
  836.  
  837. case 6:
  838. {
  839. if( aData[ GangStamina ] == get_pcvar_num( g_pStaminaMax ) )
  840. {
  841. ColorChat( id, NORMAL, "%s A bandád már tökélyre fejlesztette ezt a képességet.", g_szPrefix );
  842. ShowSkillsMenu( id );
  843. return PLUGIN_HANDLED;
  844. }
  845.  
  846. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pStaminaCost );
  847.  
  848. if( iRemaining < 0 )
  849. {
  850. ColorChat( id, NORMAL, "%s Nincs elég pontod.", g_szPrefix );
  851. ShowSkillsMenu( id );
  852. return PLUGIN_HANDLED;
  853. }
  854.  
  855. aData[ GangStamina ]++;
  856.  
  857. g_iPoints[ id ] = iRemaining;
  858. }
  859. }
  860.  
  861. ArraySetArray( g_aGangs, g_iGang[ id ], aData );
  862.  
  863. new iPlayers[ 32 ], iNum, iPlayer;
  864. new szName[ 32 ];
  865. get_players( iPlayers, iNum );
  866.  
  867. for( new i = 0; i < iNum; i++ )
  868. {
  869. iPlayer = iPlayers[ i ];
  870.  
  871. if( iPlayer == id || g_iGang[ iPlayer ] != g_iGang[ id ] )
  872. continue;
  873.  
  874. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01épp most fejlesztette a banda egyik képességét.", g_szPrefix, szName );
  875. }
  876.  
  877. ColorChat( id, NORMAL, "%s Sikeresen fejlesztetted a bandád képességét.", g_szPrefix );
  878.  
  879. ShowSkillsMenu( id );
  880.  
  881. return PLUGIN_HANDLED;
  882. }
  883.  
  884.  
  885. public Cmd_Top10( id )
  886. {
  887. new iSize = ArraySize( g_aGangs );
  888.  
  889. new iOrder[ 100 ][ 2 ];
  890.  
  891. new aData[ GangInfo ];
  892.  
  893. for( new i = 0; i < iSize; i++ )
  894. {
  895. ArrayGetArray( g_aGangs, i, aData );
  896.  
  897. iOrder[ i ][ 0 ] = i;
  898. iOrder[ i ][ 1 ] = aData[ GangKills ];
  899. }
  900.  
  901. SortCustom2D( iOrder, iSize, "Top10_Sort" );
  902.  
  903. new szMessage[ 2048 ];
  904. formatex( szMessage, charsmax( szMessage ), "<body bgcolor=#000000><font color=#FFB000><pre>" );
  905. format( szMessage, charsmax( szMessage ), "%s%2s %-22.22s %7s %4s %10s %9s %9s %11s %8s^n", szMessage, "#", "Name", "Kills", "HP", "Stealing",
  906. "Gravitáció", "Kitartás", "FegyverDobás", "Sebzés" );
  907.  
  908. for( new i = 0; i < min( 10, iSize ); i++ )
  909. {
  910. ArrayGetArray( g_aGangs, iOrder[ i ][ 0 ], aData );
  911.  
  912. format( szMessage, charsmax( szMessage ), "%s%-2d %22.22s %7d %4d %10d %9d %9d %11d %8d^n", szMessage, i + 1, aData[ GangName ],
  913. aData[ GangKills ], aData[ GangHP ], aData[ GangStealing ], aData[ GangGravity ], aData[ GangStamina], aData[ GangWeaponDrop ], aData[ GangDamage ] );
  914. }
  915.  
  916. show_motd( id, szMessage, "Banda Top 10" );
  917. }
  918.  
  919. public Top10_Sort( const iElement1[ ], const iElement2[ ], const iArray[ ], szData[], iSize )
  920. {
  921. if( iElement1[ 1 ] > iElement2[ 1 ] )
  922. return -1;
  923.  
  924. else if( iElement1[ 1 ] < iElement2[ 1 ] )
  925. return 1;
  926.  
  927. return 0;
  928. }
  929.  
  930. public ShowLeaveConfirmMenu( id )
  931. {
  932. new hMenu = menu_create( "Biztos, hogy ki akarsz lépni?", "LeaveConfirmMenu_Handler" );
  933. menu_additem( hMenu, "Igen, kilépek.", "0" );
  934. menu_additem( hMenu, "Nem, inkább maradok.", "1" );
  935.  
  936. menu_display( id, hMenu, 0 );
  937. }
  938.  
  939. public LeaveConfirmMenu_Handler( id, hMenu, iItem )
  940. {
  941. if( iItem == MENU_EXIT )
  942. return PLUGIN_HANDLED;
  943.  
  944. new szData[ 6 ], iAccess, hCallback;
  945. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  946.  
  947. switch( str_to_num( szData ) )
  948. {
  949. case 0:
  950. {
  951. if( getStatus( id, g_iGang[ id ] ) == STATUS_LEADER )
  952. {
  953. ColorChat( id, NORMAL, "%s Át kell adnod a vezetõséget, mielõtt kilépsz.", g_szPrefix );
  954. Cmd_Gang( id );
  955.  
  956. return PLUGIN_HANDLED;
  957. }
  958.  
  959. ColorChat( id, NORMAL, "%s Sikeresen elhagytad a bandád.", g_szPrefix );
  960. set_user_gang( id, -1 );
  961. Cmd_Gang( id );
  962. }
  963.  
  964. case 1: Cmd_Gang( id );
  965. }
  966.  
  967. return PLUGIN_HANDLED;
  968. }
  969.  
  970. public ShowLeaderMenu( id )
  971. {
  972. new hMenu = menu_create( "Bandavezér Menü", "LeaderMenu_Handler" );
  973.  
  974. new iStatus = getStatus( id, g_iGang[ id ] );
  975.  
  976. if( iStatus == STATUS_LEADER )
  977. {
  978. menu_additem( hMenu, "Banda feloszlatása", "0" );
  979. menu_additem( hMenu, "Vezetõség átadása", "1" );
  980. menu_additem( hMenu, "Admin felvétele", "4" );
  981. menu_additem( hMenu, "Admin elbocsátása", "5" );
  982. }
  983.  
  984. menu_additem( hMenu, "Kirúgás a bandából", "2" );
  985. menu_additem( hMenu, "Banda nevének megváltoztatása", "3" );
  986.  
  987.  
  988. menu_display( id, hMenu, 0 );
  989. }
  990.  
  991. public LeaderMenu_Handler( id, hMenu, iItem )
  992. {
  993. if( iItem == MENU_EXIT )
  994. {
  995. Cmd_Gang( id );
  996. return PLUGIN_HANDLED;
  997. }
  998.  
  999. new iAccess, hCallback, szData[ 6 ];
  1000. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  1001.  
  1002. switch( str_to_num( szData ) )
  1003. {
  1004. case 0:
  1005. {
  1006. ShowDisbandConfirmMenu( id );
  1007. }
  1008.  
  1009. case 1:
  1010. {
  1011. ShowTransferMenu( id );
  1012. }
  1013.  
  1014. case 2:
  1015. {
  1016. ShowKickMenu( id );
  1017. }
  1018.  
  1019. case 3:
  1020. {
  1021. client_cmd( id, "messagemode New_Name" );
  1022. }
  1023.  
  1024. case 4:
  1025. {
  1026. ShowAddAdminMenu( id );
  1027. }
  1028.  
  1029. case 5:
  1030. {
  1031. ShowRemoveAdminMenu( id );
  1032. }
  1033. }
  1034.  
  1035. return PLUGIN_HANDLED;
  1036. }
  1037.  
  1038. public ShowDisbandConfirmMenu( id )
  1039. {
  1040. new hMenu = menu_create( "Biztos, hogy fel akarod oszlatni a bandát?", "DisbandConfirmMenu_Handler" );
  1041. menu_additem( hMenu, "Igen, feloszlatom", "0" );
  1042. menu_additem( hMenu, "Nem, együtt maradunk", "1" );
  1043.  
  1044. menu_display( id, hMenu, 0 );
  1045. }
  1046.  
  1047. public DisbandConfirmMenu_Handler( id, hMenu, iItem )
  1048. {
  1049. if( iItem == MENU_EXIT )
  1050. return PLUGIN_HANDLED;
  1051.  
  1052. new szData[ 6 ], iAccess, hCallback;
  1053. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  1054.  
  1055. switch( str_to_num( szData ) )
  1056. {
  1057. case 0:
  1058. {
  1059.  
  1060. ColorChat( id, NORMAL, "%s Sikeresen feloszlattad a bandád.", g_szPrefix );
  1061.  
  1062. new iPlayers[ 32 ], iNum;
  1063.  
  1064. get_players( iPlayers, iNum );
  1065.  
  1066. new iPlayer;
  1067.  
  1068. for( new i = 0; i < iNum; i++ )
  1069. {
  1070. iPlayer = iPlayers[ i ];
  1071.  
  1072. if( iPlayer == id )
  1073. continue;
  1074.  
  1075. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  1076. continue;
  1077.  
  1078. ColorChat( iPlayer, NORMAL, "%s A bandád feloszlatta a vezetõ.", g_szPrefix );
  1079. set_user_gang( iPlayer, -1 );
  1080. }
  1081.  
  1082. new iGang = g_iGang[ id ];
  1083.  
  1084. set_user_gang( id, -1 );
  1085.  
  1086. ArrayDeleteItem( g_aGangs, iGang );
  1087.  
  1088. Cmd_Gang( id );
  1089. }
  1090.  
  1091. case 1: Cmd_Gang( id );
  1092. }
  1093.  
  1094. return PLUGIN_HANDLED;
  1095. }
  1096.  
  1097. public ShowTransferMenu( id )
  1098. {
  1099. new iPlayers[ 32 ], iNum;
  1100. get_players( iPlayers, iNum, "e", "TERRORIST" );
  1101.  
  1102. new hMenu = menu_create( "Vezetõség átadása:", "TransferMenu_Handler" );
  1103. new szName[ 32 ], szData[ 6 ];
  1104.  
  1105. for( new i = 0, iPlayer; i < iNum; i++ )
  1106. {
  1107. iPlayer = iPlayers[ i ];
  1108.  
  1109. if( g_iGang[ iPlayer ] != g_iGang[ id ] || id == iPlayer )
  1110. continue;
  1111.  
  1112. get_user_name( iPlayer, szName, charsmax( szName ) );
  1113. num_to_str( iPlayer, szData, charsmax( szData ) );
  1114.  
  1115. menu_additem( hMenu, szName, szData );
  1116. }
  1117.  
  1118. menu_display( id, hMenu, 0 );
  1119. }
  1120.  
  1121. public TransferMenu_Handler( id, hMenu, iItem )
  1122. {
  1123. if( iItem == MENU_EXIT )
  1124. {
  1125. ShowLeaderMenu( id );
  1126. return PLUGIN_HANDLED;
  1127. }
  1128.  
  1129. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  1130.  
  1131. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, charsmax( szName ), hCallback );
  1132.  
  1133. new iPlayer = str_to_num( szData );
  1134.  
  1135. if( !is_user_connected( iPlayer ) )
  1136. {
  1137. ColorChat( id, NORMAL, "%s Ez a játékos nincs csatlakozva.", g_szPrefix );
  1138. ShowTransferMenu( id );
  1139. return PLUGIN_HANDLED;
  1140. }
  1141.  
  1142. set_user_gang( iPlayer, g_iGang[ id ], STATUS_LEADER );
  1143. set_user_gang( id, g_iGang[ id ], STATUS_ADMIN );
  1144.  
  1145. Cmd_Gang( id );
  1146.  
  1147. new iPlayers[ 32 ], iNum, iTemp;
  1148. get_players( iPlayers, iNum );
  1149.  
  1150. for( new i = 0; i < iNum; i++ )
  1151. {
  1152. iTemp = iPlayers[ i ];
  1153.  
  1154. if( iTemp == iPlayer )
  1155. {
  1156. ColorChat( iTemp, NORMAL, "%s Te vagy a banda új vezetõje.", g_szPrefix );
  1157. continue;
  1158. }
  1159.  
  1160. else if( g_iGang[ iTemp ] != g_iGang[ id ] )
  1161. continue;
  1162.  
  1163. ColorChat( iTemp, NORMAL, "%s ^03%s^01 a banda új vezetõje.", g_szPrefix, szName );
  1164. }
  1165.  
  1166. return PLUGIN_HANDLED;
  1167. }
  1168.  
  1169.  
  1170. public ShowKickMenu( id )
  1171. {
  1172. new iPlayers[ 32 ], iNum;
  1173. get_players( iPlayers, iNum );
  1174.  
  1175. new hMenu = menu_create( "Játékos kirúgása a bandából:", "KickMenu_Handler" );
  1176. new szName[ 32 ], szData[ 6 ];
  1177.  
  1178.  
  1179. for( new i = 0, iPlayer; i < iNum; i++ )
  1180. {
  1181. iPlayer = iPlayers[ i ];
  1182.  
  1183. if( g_iGang[ iPlayer ] != g_iGang[ id ] || id == iPlayer )
  1184. continue;
  1185.  
  1186. get_user_name( iPlayer, szName, charsmax( szName ) );
  1187. num_to_str( iPlayer, szData, charsmax( szData ) );
  1188.  
  1189. menu_additem( hMenu, szName, szData );
  1190. }
  1191.  
  1192. menu_display( id, hMenu, 0 );
  1193. }
  1194.  
  1195. public KickMenu_Handler( id, hMenu, iItem )
  1196. {
  1197. if( iItem == MENU_EXIT )
  1198. {
  1199. ShowLeaderMenu( id );
  1200. return PLUGIN_HANDLED;
  1201. }
  1202.  
  1203. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  1204.  
  1205. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, charsmax( szName ), hCallback );
  1206.  
  1207. new iPlayer = str_to_num( szData );
  1208.  
  1209. if( !is_user_connected( iPlayer ) )
  1210. {
  1211. ColorChat( id, NORMAL, "%s Ez a játékos nincs csatlakozva.", g_szPrefix );
  1212. ShowTransferMenu( id );
  1213. return PLUGIN_HANDLED;
  1214. }
  1215.  
  1216. set_user_gang( iPlayer, -1 );
  1217.  
  1218. Cmd_Gang( id );
  1219.  
  1220. new iPlayers[ 32 ], iNum, iTemp;
  1221. get_players( iPlayers, iNum );
  1222.  
  1223. for( new i = 0; i < iNum; i++ )
  1224. {
  1225. iTemp = iPlayers[ i ];
  1226.  
  1227. if( iTemp == iPlayer || g_iGang[ iTemp ] != g_iGang[ id ] )
  1228. continue;
  1229.  
  1230. ColorChat( iTemp, NORMAL, "%s ^03%s^01 -t kirúgták a bandából.", g_szPrefix, szName );
  1231. }
  1232.  
  1233. ColorChat( iPlayer, NORMAL, "%s Kirúgtak a bandából.", g_szPrefix, szName );
  1234.  
  1235. return PLUGIN_HANDLED;
  1236. }
  1237.  
  1238. public ChangeName_Handler( id )
  1239. {
  1240. if( g_iGang[ id ] == -1 || getStatus( id, g_iGang[ id ] ) == STATUS_MEMBER )
  1241. {
  1242. return;
  1243. }
  1244.  
  1245. new iGang = g_iGang[ id ];
  1246.  
  1247. new szArgs[ 64 ];
  1248. read_args( szArgs, charsmax( szArgs ) );
  1249.  
  1250. new iPlayers[ 32 ], iNum;
  1251. get_players( iPlayers, iNum );
  1252.  
  1253. new bool:bInGang[ 33 ];
  1254. new iStatus[ 33 ];
  1255.  
  1256. for( new i = 0, iPlayer; i < iNum; i++ )
  1257. {
  1258. iPlayer = iPlayers[ i ];
  1259.  
  1260. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  1261. continue;
  1262.  
  1263. bInGang[ iPlayer ] = true;
  1264. iStatus[ iPlayer ] = getStatus( id, iGang );
  1265.  
  1266. set_user_gang( iPlayer, -1 );
  1267. }
  1268.  
  1269. new aData[ GangInfo ];
  1270. ArrayGetArray( g_aGangs, iGang, aData );
  1271.  
  1272. aData[ GangName ] = szArgs;
  1273.  
  1274. ArraySetArray( g_aGangs, iGang, aData );
  1275.  
  1276. for( new i = 0, iPlayer; i < iNum; i++ )
  1277. {
  1278. iPlayer = iPlayers[ i ];
  1279.  
  1280. if( !bInGang[ iPlayer ] )
  1281. continue;
  1282.  
  1283. set_user_gang( iPlayer, iGang, iStatus[ id ] );
  1284. }
  1285. }
  1286.  
  1287. public ShowAddAdminMenu( id )
  1288. {
  1289. new iPlayers[ 32 ], iNum;
  1290. new szName[ 32 ], szData[ 6 ];
  1291. new hMenu = menu_create( "Válaszd ki az elõléptetendõ személyt:", "AddAdminMenu_Handler" );
  1292.  
  1293. get_players( iPlayers, iNum );
  1294.  
  1295. for( new i = 0, iPlayer; i < iNum; i++ )
  1296. {
  1297. iPlayer = iPlayers[ i ];
  1298.  
  1299. if( g_iGang[ id ] != g_iGang[ iPlayer ] || getStatus( iPlayer, g_iGang[ iPlayer ] ) > STATUS_MEMBER )
  1300. continue;
  1301.  
  1302. get_user_name( iPlayer, szName, charsmax( szName ) );
  1303.  
  1304. num_to_str( iPlayer, szData, charsmax( szData ) );
  1305.  
  1306. menu_additem( hMenu, szName, szData );
  1307. }
  1308.  
  1309. menu_display( id, hMenu, 0 );
  1310. }
  1311.  
  1312. public AddAdminMenu_Handler( id, hMenu, iItem )
  1313. {
  1314. if( iItem == MENU_EXIT )
  1315. {
  1316. menu_destroy( hMenu );
  1317. ShowLeaderMenu( id );
  1318. return PLUGIN_HANDLED;
  1319. }
  1320.  
  1321. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  1322.  
  1323. menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), hCallback );
  1324.  
  1325. new iChosen = str_to_num( szData );
  1326.  
  1327. if( !is_user_connected( iChosen ) )
  1328. {
  1329. menu_destroy( hMenu );
  1330. ShowLeaderMenu( id );
  1331. return PLUGIN_HANDLED;
  1332. }
  1333.  
  1334. set_user_gang( iChosen, g_iGang[ id ], STATUS_LEADER );
  1335.  
  1336. new iPlayers[ 32 ], iNum;
  1337. get_players( iPlayers, iNum );
  1338.  
  1339. for( new i = 0, iPlayer; i < iNum; i++ )
  1340. {
  1341. iPlayer = iPlayers[ i ];
  1342.  
  1343. if( g_iGang[ iPlayer ] != g_iGang[ id ] || iPlayer == iChosen )
  1344. continue;
  1345.  
  1346. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01-t elõléptették banda adminná.", g_szPrefix, szName );
  1347. }
  1348.  
  1349. ColorChat( iChosen, NORMAL, "%s ^01Elõléptettek banda adminná.", g_szPrefix );
  1350.  
  1351. menu_destroy( hMenu );
  1352. return PLUGIN_HANDLED;
  1353. }
  1354.  
  1355. public ShowRemoveAdminMenu( id )
  1356. {
  1357. new iPlayers[ 32 ], iNum;
  1358. new szName[ 32 ], szData[ 6 ];
  1359. new hMenu = menu_create( "Válaszd ki a lefokozandó személyt:", "RemoveAdminMenu_Handler" );
  1360.  
  1361. get_players( iPlayers, iNum );
  1362.  
  1363. for( new i = 0, iPlayer; i < iNum; i++ )
  1364. {
  1365. iPlayer = iPlayers[ i ];
  1366.  
  1367. if( g_iGang[ id ] != g_iGang[ iPlayer ] || getStatus( iPlayer, g_iGang[ iPlayer ] ) != STATUS_ADMIN )
  1368. continue;
  1369.  
  1370. get_user_name( iPlayer, szName, charsmax( szName ) );
  1371.  
  1372. num_to_str( iPlayer, szData, charsmax( szData ) );
  1373.  
  1374. menu_additem( hMenu, szName, szData );
  1375. }
  1376.  
  1377. menu_display( id, hMenu, 0 );
  1378. }
  1379.  
  1380. public RemoveAdminMenu_Handler( id, hMenu, iItem )
  1381. {
  1382. if( iItem == MENU_EXIT )
  1383. {
  1384. menu_destroy( hMenu );
  1385. ShowLeaderMenu( id );
  1386. return PLUGIN_HANDLED;
  1387. }
  1388.  
  1389. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  1390.  
  1391. menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), hCallback );
  1392.  
  1393. new iChosen = str_to_num( szData );
  1394.  
  1395. if( !is_user_connected( iChosen ) )
  1396. {
  1397. menu_destroy( hMenu );
  1398. ShowLeaderMenu( id );
  1399. return PLUGIN_HANDLED;
  1400. }
  1401.  
  1402. set_user_gang( iChosen, g_iGang[ id ], STATUS_MEMBER );
  1403.  
  1404. new iPlayers[ 32 ], iNum;
  1405. get_players( iPlayers, iNum );
  1406.  
  1407. for( new i = 0, iPlayer; i < iNum; i++ )
  1408. {
  1409. iPlayer = iPlayers[ i ];
  1410.  
  1411. if( g_iGang[ iPlayer ] != g_iGang[ id ] || iPlayer == iChosen )
  1412. continue;
  1413.  
  1414. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01-t lefokozták, többé már nem banda admin.", g_szPrefix, szName );
  1415. }
  1416.  
  1417. ColorChat( iChosen, NORMAL, "%s ^01Lefokoztak, nem vagy többé banda admin.", g_szPrefix );
  1418.  
  1419. menu_destroy( hMenu );
  1420. return PLUGIN_HANDLED;
  1421. }
  1422.  
  1423. public ShowMembersMenu( id )
  1424. {
  1425. new szName[ 64 ], iPlayers[ 32 ], iNum;
  1426. get_players( iPlayers, iNum );
  1427.  
  1428. new hMenu = menu_create( "Online Members:", "MemberMenu_Handler" );
  1429.  
  1430. for( new i = 0, iPlayer; i < iNum; i++ )
  1431. {
  1432. iPlayer = iPlayers[ i ];
  1433.  
  1434. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  1435. continue;
  1436.  
  1437. get_user_name( iPlayer, szName, charsmax( szName ) );
  1438.  
  1439. switch( getStatus( iPlayer, g_iGang[ id ] ) )
  1440. {
  1441. case STATUS_MEMBER:
  1442. {
  1443. add( szName, charsmax( szName ), " \r[Tag]" );
  1444. }
  1445.  
  1446. case STATUS_ADMIN:
  1447. {
  1448. add( szName, charsmax( szName ), " \r[Admin]" );
  1449. }
  1450.  
  1451. case STATUS_LEADER:
  1452. {
  1453. add( szName, charsmax( szName ), " \r[Vezetõ]" );
  1454. }
  1455. }
  1456.  
  1457. menu_additem( hMenu, szName );
  1458. }
  1459.  
  1460. menu_display( id, hMenu, 0 );
  1461. }
  1462.  
  1463. public MemberMenu_Handler( id, hMenu, iItem )
  1464. {
  1465. if( iItem == MENU_EXIT )
  1466. {
  1467. menu_destroy( hMenu );
  1468. Cmd_Gang( id );
  1469. return PLUGIN_HANDLED;
  1470. }
  1471.  
  1472. menu_destroy( hMenu );
  1473.  
  1474. ShowMembersMenu( id )
  1475. return PLUGIN_HANDLED;
  1476. }
  1477.  
  1478. // Credits to Tirant from zombie mod and xOR from xRedirect
  1479. public LoadGangs()
  1480. {
  1481. new szConfigsDir[ 60 ];
  1482. get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
  1483. add( szConfigsDir, charsmax( szConfigsDir ), "/jb_gangs.ini" );
  1484.  
  1485. new iFile = fopen( szConfigsDir, "rt" );
  1486.  
  1487. new aData[ GangInfo ];
  1488.  
  1489. new szBuffer[ 512 ], szData[ 6 ], szValue[ 6 ], i, iCurGang;
  1490.  
  1491. while( !feof( iFile ) )
  1492. {
  1493. fgets( iFile, szBuffer, charsmax( szBuffer ) );
  1494.  
  1495. trim( szBuffer );
  1496. remove_quotes( szBuffer );
  1497.  
  1498. if( !szBuffer[ 0 ] || szBuffer[ 0 ] == ';' )
  1499. {
  1500. continue;
  1501. }
  1502.  
  1503. if( szBuffer[ 0 ] == '[' && szBuffer[ strlen( szBuffer ) - 1 ] == ']' )
  1504. {
  1505. copy( aData[ GangName ], strlen( szBuffer ) - 2, szBuffer[ 1 ] );
  1506. aData[ GangHP ] = 0;
  1507. aData[ GangStealing ] = 0;
  1508. aData[ GangGravity ] = 0;
  1509. aData[ GangStamina ] = 0;
  1510. aData[ GangWeaponDrop ] = 0;
  1511. aData[ GangDamage ] = 0;
  1512. aData[ GangKills ] = 0;
  1513. aData[ NumMembers ] = 0;
  1514. aData[ GangMembers ] = _:TrieCreate();
  1515.  
  1516. if( TrieKeyExists( g_tGangNames, aData[ GangName ] ) )
  1517. {
  1518. new szError[ 256 ];
  1519. formatex( szError, charsmax( szError ), "[JB Bandák] A banda már létezik: %s", aData[ GangName ] );
  1520. set_fail_state( szError );
  1521. }
  1522.  
  1523. ArrayPushArray( g_aGangs, aData );
  1524.  
  1525. TrieSetCell( g_tGangNames, aData[ GangName ], iCurGang );
  1526.  
  1527. log_amx( "Banda Megalapítva: %s", aData[ GangName ] );
  1528.  
  1529. iCurGang++;
  1530.  
  1531. continue;
  1532. }
  1533.  
  1534. strtok( szBuffer, szData, 31, szValue, 511, '=' );
  1535. trim( szData );
  1536. trim( szValue );
  1537.  
  1538. if( TrieGetCell( g_tGangValues, szData, i ) )
  1539. {
  1540. ArrayGetArray( g_aGangs, iCurGang - 1, aData );
  1541.  
  1542. switch( i )
  1543. {
  1544. case VALUE_HP:
  1545. aData[ GangHP ] = str_to_num( szValue );
  1546.  
  1547. case VALUE_STEALING:
  1548. aData[ GangStealing ] = str_to_num( szValue );
  1549.  
  1550. case VALUE_GRAVITY:
  1551. aData[ GangGravity ] = str_to_num( szValue );
  1552.  
  1553. case VALUE_STAMINA:
  1554. aData[ GangStamina ] = str_to_num( szValue );
  1555.  
  1556. case VALUE_WEAPONDROP:
  1557. aData[ GangWeaponDrop ] = str_to_num( szValue );
  1558.  
  1559. case VALUE_DAMAGE:
  1560. aData[ GangDamage ] = str_to_num( szValue );
  1561.  
  1562. case VALUE_KILLS:
  1563. aData[ GangKills ] = str_to_num( szValue );
  1564. }
  1565.  
  1566. ArraySetArray( g_aGangs, iCurGang - 1, aData );
  1567. }
  1568. }
  1569.  
  1570. new Array:aSQL;
  1571. sqlv_read_all_ex( g_hVault, aSQL );
  1572.  
  1573. new aVaultData[ SQLVaultEntryEx ];
  1574.  
  1575. new iGang;
  1576.  
  1577. for( i = 0; i < ArraySize( aSQL ); i++ )
  1578. {
  1579. ArrayGetArray( aSQL, i, aVaultData );
  1580.  
  1581. if( TrieGetCell( g_tGangNames, aVaultData[ SQLVEx_Key2 ], iGang ) )
  1582. {
  1583. ArrayGetArray( g_aGangs, iGang, aData );
  1584.  
  1585. TrieSetCell( aData[ GangMembers ], aVaultData[ SQLVEx_Key1 ], str_to_num( aVaultData[ SQLVEx_Data ] ) );
  1586.  
  1587. aData[ NumMembers ]++;
  1588.  
  1589. ArraySetArray( g_aGangs, iGang, aData );
  1590. }
  1591. }
  1592.  
  1593. fclose( iFile );
  1594. }
  1595.  
  1596. public SaveGangs()
  1597. {
  1598. new szConfigsDir[ 64 ];
  1599. get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
  1600.  
  1601. add( szConfigsDir, charsmax( szConfigsDir ), "/jb_gangs.ini" );
  1602.  
  1603. if( file_exists( szConfigsDir ) )
  1604. delete_file( szConfigsDir );
  1605.  
  1606. new iFile = fopen( szConfigsDir, "wt" );
  1607.  
  1608. new aData[ GangInfo ];
  1609.  
  1610. new szBuffer[ 256 ];
  1611.  
  1612. for( new i = 0; i < ArraySize( g_aGangs ); i++ )
  1613. {
  1614. ArrayGetArray( g_aGangs, i, aData );
  1615.  
  1616. formatex( szBuffer, charsmax( szBuffer ), "[%s]^n", aData[ GangName ] );
  1617. fputs( iFile, szBuffer );
  1618.  
  1619. formatex( szBuffer, charsmax( szBuffer ), "HP=%i^n", aData[ GangHP ] );
  1620. fputs( iFile, szBuffer );
  1621.  
  1622. formatex( szBuffer, charsmax( szBuffer ), "Lopás=%i^n", aData[ GangStealing ] );
  1623. fputs( iFile, szBuffer );
  1624.  
  1625. formatex( szBuffer, charsmax( szBuffer ), "Gravitáció=%i^n", aData[ GangGravity ] );
  1626. fputs( iFile, szBuffer );
  1627.  
  1628. formatex( szBuffer, charsmax( szBuffer ), "Kitartás=%i^n", aData[ GangStamina ] );
  1629. fputs( iFile, szBuffer );
  1630.  
  1631. formatex( szBuffer, charsmax( szBuffer ), "FegyverDobás=%i^n", aData[ GangWeaponDrop ] );
  1632. fputs( iFile, szBuffer );
  1633.  
  1634. formatex( szBuffer, charsmax( szBuffer ), "Sebzés=%i^n", aData[ GangDamage ] );
  1635. fputs( iFile, szBuffer );
  1636.  
  1637. formatex( szBuffer, charsmax( szBuffer ), "Ölések=%i^n^n", aData[ GangKills ] );
  1638. fputs( iFile, szBuffer );
  1639. }
  1640.  
  1641. fclose( iFile );
  1642. }
  1643.  
  1644.  
  1645.  
  1646. set_user_gang( id, iGang, iStatus=STATUS_MEMBER )
  1647. {
  1648. new szAuthID[ 35 ];
  1649. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  1650.  
  1651. new aData[ GangInfo ];
  1652.  
  1653. if( g_iGang[ id ] > -1 )
  1654. {
  1655. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  1656. TrieDeleteKey( aData[ GangMembers ], szAuthID );
  1657. aData[ NumMembers ]--;
  1658. ArraySetArray( g_aGangs, g_iGang[ id ], aData );
  1659.  
  1660. sqlv_remove_ex( g_hVault, szAuthID, aData[ GangName ] );
  1661. }
  1662.  
  1663. if( iGang > -1 )
  1664. {
  1665. ArrayGetArray( g_aGangs, iGang, aData );
  1666. TrieSetCell( aData[ GangMembers ], szAuthID, iStatus );
  1667. aData[ NumMembers ]++;
  1668. ArraySetArray( g_aGangs, iGang, aData );
  1669.  
  1670. sqlv_set_num_ex( g_hVault, szAuthID, aData[ GangName ], iStatus );
  1671. }
  1672.  
  1673. g_iGang[ id ] = iGang;
  1674.  
  1675. return 1;
  1676. }
  1677.  
  1678. get_user_gang( id )
  1679. {
  1680. new szAuthID[ 35 ];
  1681. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  1682.  
  1683. new aData[ GangInfo ];
  1684.  
  1685. for( new i = 0; i < ArraySize( g_aGangs ); i++ )
  1686. {
  1687. ArrayGetArray( g_aGangs, i, aData );
  1688.  
  1689. if( TrieKeyExists( aData[ GangMembers ], szAuthID ) )
  1690. return i;
  1691. }
  1692.  
  1693. return -1;
  1694. }
  1695.  
  1696. getStatus( id, iGang )
  1697. {
  1698. if( !is_user_connected( id ) || iGang == -1 )
  1699. return STATUS_NONE;
  1700.  
  1701. new aData[ GangInfo ];
  1702. ArrayGetArray( g_aGangs, iGang, aData );
  1703.  
  1704. new szAuthID[ 35 ];
  1705. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  1706.  
  1707. new iStatus;
  1708. TrieGetCell( aData[ GangMembers ], szAuthID, iStatus );
  1709.  
  1710. return iStatus;
  1711. }
  1712. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  1713. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1038\\ f0\\ fs16 \n\\ par }
  1714. */
  1715.