hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.06. 09:19



Jelenlévő felhasználók

Jelenleg 493 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 492 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 3 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Jailbreak banda magyarosítás
HozzászólásElküldve: 2014.10.02. 19:56 
Offline
Beavatott
Avatar

Csatlakozott: 2014.07.03. 12:19
Hozzászólások: 81
Megköszönt másnak: 2 alkalommal
Megköszönték neki: 7 alkalommal
Valaki tudna nekem linkelni egy magyar JailBreak Banda (gang) plugint? Vagy esetleg lemagyarítani?

SMA Forráskód: [ Mindet kijelol ]
  1.  
  2.  
  3. /*
  4.  
  5. Jailbreak Gang System
  6.  
  7. H3avY Ra1n
  8.  
  9.  
  10.  
  11. Description
  12.  
  13. -----------
  14.  
  15. This plugin allows prisoners to create gangs and upgrade specific skills that apply to everybody in the gang.
  16.  
  17.  
  18.  
  19.  
  20.  
  21. Gang Menu
  22.  
  23. ---------
  24.  
  25. Banda keszitese - Allows a user to create a gang by paying money.
  26.  
  27. Invite to Gang - Only the leader of the gang can invite people to the gang.
  28.  
  29. Skills - Opens the skills menu, where any member of the gang can pay money to upgrade their skills.
  30.  
  31. 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)
  32.  
  33. Leave Gang - Allows a player to leave the gang. The leader cannot leave the gang until he transfers leadership to somebody else (explained later).
  34.  
  35. Gang 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.
  36.  
  37. Online Jatekosok - Shows a list of gang members that are currently in the server.
  38.  
  39.  
  40.  
  41.  
  42.  
  43. Skills
  44.  
  45. ------
  46.  
  47. HP - Increased health
  48.  
  49. Stealing - Increased money earnings.
  50.  
  51. Gravity - Lower Gravity
  52.  
  53. Damage - Increased damage
  54.  
  55. Stamina - Gives higher speed to players.
  56.  
  57. Weapon Drop - Chance of making the guard drop the weapon when you knife them. (%1 chance increase per level)
  58.  
  59.  
  60.  
  61.  
  62.  
  63. CVARS
  64.  
  65. -----
  66.  
  67. jb_gang_cost - The cost to create a gang.
  68.  
  69. jb_health_cost - The cost to upgrade gang health.
  70.  
  71. jb_stealing_cost - The cost to upgrade gang money earning.
  72.  
  73. jb_gravity_cost - The cost to upgrade gang gravity.
  74.  
  75. jb_damage_cost - The cost to upgrade gang damage.
  76.  
  77. jb_stamina_cost - The cost to upgrade gang stamina (speed).
  78.  
  79. jb_weapondrop_cost - The cost to upgrade gang weapon drop percentage.
  80.  
  81.  
  82.  
  83. Additionally there are CVars for the max level for each type of upgrade, so replace _cost above with _max.
  84.  
  85. Also there are CVars for the amount per level, so replace _cost above with _per.
  86.  
  87.  
  88.  
  89. jb_points_per_kill - The amount of points you get for a kill
  90.  
  91. jb_headshot_bonus - The amount of points you get for a headshot
  92.  
  93.  
  94.  
  95. jb_max_members - The max amount of members a gang can hold
  96.  
  97. jb_admin_create - Whether or not an admin can create gangs without using points
  98.  
  99.  
  100.  
  101. Credits
  102.  
  103. -------
  104.  
  105. F0RCE - Original Plugin Idea
  106.  
  107. Exolent - SQLVault Include
  108.  
  109. Drekes - Freezetime Fix (I was too lazy) <!-- s:) --><img src=\"{SMILIES_PATH}/icon_e_smile.gif\" alt=\":)\" title=\"mosoly\" /><!-- s:) -->
  110.  
  111.  
  112.  
  113.  
  114.  
  115. Changelog
  116.  
  117. ---------
  118.  
  119. September 26, 2011 - v1.0 - Initial Release
  120.  
  121. September 27, 2011 - v1.01 - Added more cvars, fixed a few bugs.
  122.  
  123. September 28, 2011 - v1.1 - Added gang admins, jb points instead of money, and a few other things I can't remember <!-- s:) --><img src=\"{SMILIES_PATH}/icon_e_smile.gif\" alt=\":)\" title=\"mosoly\" /><!-- s:) -->
  124.  
  125. January 21, 2011 - v1.1.1 - Added a cvar for whether an admin can create a gang without using points.
  126.  
  127. January 23, 2011 - v1.1.2 - Fixed freezetime problem
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134. */
  135.  
  136.  
  137.  
  138. /* Includes */
  139.  
  140.  
  141.  
  142. #include < amxmodx >
  143.  
  144. #include < amxmisc >
  145.  
  146. #include < sqlvault_ex >
  147.  
  148. #include < cstrike >
  149.  
  150. #include < colorchat >
  151.  
  152. #include < hamsandwich >
  153.  
  154. #include < fun >
  155.  
  156.  
  157.  
  158. /* Defines */
  159.  
  160.  
  161.  
  162. #define ADMIN_CREATE ADMIN_LEVEL_B
  163.  
  164.  
  165.  
  166. /* Constants */
  167.  
  168.  
  169.  
  170. new const g_szVersion[ ] = "1.1.2";
  171.  
  172.  
  173.  
  174. enum _:GangInfo
  175.  
  176. {
  177.  
  178. Trie:GangMembers,
  179.  
  180. GangName[ 64 ],
  181.  
  182. GangHP,
  183.  
  184. GangStealing,
  185.  
  186. GangGravity,
  187.  
  188. GangDamage,
  189.  
  190. GangStamina,
  191.  
  192. GangWeaponDrop,
  193.  
  194. GangKills,
  195.  
  196. NumMembers
  197.  
  198. };
  199.  
  200.  
  201.  
  202. enum
  203.  
  204. {
  205.  
  206. VALUE_HP,
  207.  
  208. VALUE_STEALING,
  209.  
  210. VALUE_GRAVITY,
  211.  
  212. VALUE_DAMAGE,
  213.  
  214. VALUE_STAMINA,
  215.  
  216. VALUE_WEAPONDROP,
  217.  
  218. VALUE_KILLS
  219.  
  220. }
  221.  
  222.  
  223.  
  224. enum
  225.  
  226. {
  227.  
  228. STATUS_NONE,
  229.  
  230. STATUS_MEMBER,
  231.  
  232. STATUS_ADMIN,
  233.  
  234. STATUS_LEADER
  235.  
  236. };
  237.  
  238.  
  239.  
  240. new const g_szGangValues[ ][ ] =
  241.  
  242. {
  243.  
  244. "HP",
  245.  
  246. "Stealing",
  247.  
  248. "Gravity",
  249.  
  250. "Damage",
  251.  
  252. "Stamina",
  253.  
  254. "WeaponDrop",
  255.  
  256. "Kills"
  257.  
  258. };
  259.  
  260.  
  261.  
  262. new const g_szPrefix[ ] = "^04[Gang System]^01";
  263.  
  264.  
  265.  
  266. /* Tries */
  267.  
  268.  
  269.  
  270. new Trie:g_tGangNames;
  271.  
  272. new Trie:g_tGangValues;
  273.  
  274.  
  275.  
  276. /* Vault */
  277.  
  278.  
  279.  
  280. new SQLVault:g_hVault;
  281.  
  282. new SQLVault:g_hPointsVault;
  283.  
  284.  
  285.  
  286. /* Arrays */
  287.  
  288.  
  289.  
  290. new Array:g_aGangs;
  291.  
  292.  
  293.  
  294. /* Pcvars */
  295.  
  296.  
  297.  
  298. new g_pCreateCost;
  299.  
  300.  
  301.  
  302. new g_pHealthCost;
  303.  
  304. new g_pStealingCost;
  305.  
  306. new g_pGravityCost;
  307.  
  308. new g_pDamageCost;
  309.  
  310. new g_pStaminaCost;
  311.  
  312. new g_pWeaponDropCost;
  313.  
  314.  
  315.  
  316. new g_pHealthMax;
  317.  
  318. new g_pStealingMax;
  319.  
  320. new g_pGravityMax;
  321.  
  322. new g_pDamageMax;
  323.  
  324. new g_pStaminaMax;
  325.  
  326. new g_pWeaponDropMax;
  327.  
  328.  
  329.  
  330. new g_pHealthPerLevel;
  331.  
  332. new g_pStealingPerLevel;
  333.  
  334. new g_pGravityPerLevel;
  335.  
  336. new g_pDamagePerLevel;
  337.  
  338. new g_pStaminaPerLevel;
  339.  
  340. new g_pWeaponDropPerLevel;
  341.  
  342.  
  343.  
  344. new g_pPointsPerKill;
  345.  
  346. new g_pHeadshotBonus;
  347.  
  348.  
  349.  
  350. new g_pMaxMembers;
  351.  
  352. new g_pAdminCreate;
  353.  
  354.  
  355.  
  356. /* Integers */
  357.  
  358.  
  359.  
  360. new g_iGang[ 33 ];
  361.  
  362. new g_iPoints[ 33 ];
  363.  
  364.  
  365.  
  366.  
  367.  
  368. public plugin_init()
  369.  
  370. {
  371.  
  372. register_plugin( "Jailbreak Gang System", g_szVersion, "H3avY Ra1n" );
  373.  
  374.  
  375.  
  376. g_aGangs = ArrayCreate( GangInfo );
  377.  
  378.  
  379.  
  380. g_tGangValues = TrieCreate();
  381.  
  382. g_tGangNames = TrieCreate();
  383.  
  384.  
  385.  
  386. g_hVault = sqlv_open_local( "jb_gangs", false );
  387.  
  388. sqlv_init_ex( g_hVault );
  389.  
  390.  
  391.  
  392. g_hPointsVault = sqlv_open_local( "jb_points", true );
  393.  
  394.  
  395.  
  396. g_pCreateCost = register_cvar( "jb_gang_cost", "50" );
  397.  
  398. g_pHealthCost = register_cvar( "jb_health_cost", "20" );
  399.  
  400. g_pStealingCost = register_cvar( "jb_stealing_cost", "20" );
  401.  
  402. g_pGravityCost = register_cvar( "jb_gravity_cost", "20" );
  403.  
  404. g_pDamageCost = register_cvar( "jb_damage_cost", "20" );
  405.  
  406. g_pStaminaCost = register_cvar( "jb_stamina_cost", "20" );
  407.  
  408. g_pWeaponDropCost = register_cvar( "jb_weapondrop_cost", "20" );
  409.  
  410.  
  411.  
  412. g_pHealthMax = register_cvar( "jb_health_max", "10" );
  413.  
  414. g_pStealingMax = register_cvar( "jb_stealing_max", "10" );
  415.  
  416. g_pGravityMax = register_cvar( "jb_gravity_max", "10" ); // Max * Gravity Per Level must be LESS than 800
  417.  
  418. g_pDamageMax = register_cvar( "jb_damage_max", "10" );
  419.  
  420. g_pStaminaMax = register_cvar( "jb_stamina_max", "10" );
  421.  
  422. g_pWeaponDropMax = register_cvar( "jb_weapondrop_max", "10" );
  423.  
  424.  
  425.  
  426. g_pHealthPerLevel = register_cvar( "jb_health_per", "10" );
  427.  
  428. g_pStealingPerLevel = register_cvar( "jb_stealing_per", "0.05" );
  429.  
  430. g_pGravityPerLevel = register_cvar( "jb_gravity_per", "50" );
  431.  
  432. g_pDamagePerLevel = register_cvar( "jb_damage_per", "3" );
  433.  
  434. g_pStaminaPerLevel = register_cvar( "jb_stamina_per", "3" );
  435.  
  436. g_pWeaponDropPerLevel = register_cvar( "jb_weapondrop_per", "1" );
  437.  
  438.  
  439.  
  440. g_pPointsPerKill = register_cvar( "jb_points_per_kill", "3" );
  441.  
  442. g_pHeadshotBonus = register_cvar( "jb_headshot_bonus", "2" );
  443.  
  444.  
  445.  
  446. g_pMaxMembers = register_cvar( "jb_max_members", "10" );
  447.  
  448. g_pAdminCreate = register_cvar( "jb_admin_create", "0" ); // Admins can create gangs without points
  449.  
  450.  
  451.  
  452. register_cvar( "jb_gang_version", g_szVersion, FCVAR_SPONLY | FCVAR_SERVER );
  453.  
  454.  
  455.  
  456. register_menu( "Gang Menu", 1023, "GangMenu_Handler" );
  457.  
  458. register_menu( "Skills Menu", 1023, "SkillsMenu_Handler" );
  459.  
  460.  
  461.  
  462. for( new i = 0; i < sizeof g_szGangValues; i++ )
  463.  
  464. {
  465.  
  466. TrieSetCell( g_tGangValues, g_szGangValues[ i ], i );
  467.  
  468. }
  469.  
  470.  
  471.  
  472. RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1 );
  473.  
  474. RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamage_Pre", 0 );
  475.  
  476. RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamage_Post", 1 );
  477.  
  478. RegisterHam( Ham_Item_PreFrame, "player", "Ham_PlayerResetSpeedPost", 1);
  479.  
  480.  
  481.  
  482. register_event( "DeathMsg", "Event_DeathMsg", "a" );
  483.  
  484.  
  485.  
  486. register_clcmd( "say /gang", "Cmd_Gang" );
  487.  
  488. register_clcmd( "gang_name", "Cmd_CreateGang" );
  489.  
  490.  
  491.  
  492. LoadGangs();
  493.  
  494. }
  495.  
  496.  
  497.  
  498. public client_disconnect( id )
  499.  
  500. {
  501.  
  502. g_iGang[ id ] = -1;
  503.  
  504.  
  505.  
  506. new szAuthID[ 35 ];
  507.  
  508. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  509.  
  510.  
  511.  
  512. sqlv_set_num( g_hPointsVault, szAuthID, g_iPoints[ id ] );
  513.  
  514. }
  515.  
  516.  
  517.  
  518. public client_putinserver( id )
  519.  
  520. {
  521.  
  522. g_iGang[ id ] = get_user_gang( id );
  523.  
  524. new szAuthID[ 35 ];
  525.  
  526. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  527.  
  528.  
  529.  
  530. g_iPoints[ id ] = sqlv_get_num( g_hPointsVault, szAuthID );
  531.  
  532. }
  533.  
  534.  
  535.  
  536. public plugin_end()
  537.  
  538. {
  539.  
  540. SaveGangs();
  541.  
  542. sqlv_close( g_hVault );
  543.  
  544. }
  545.  
  546.  
  547.  
  548. public Ham_PlayerSpawn_Post( id )
  549.  
  550. {
  551.  
  552. if( !is_user_alive( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  553.  
  554. return HAM_IGNORED;
  555.  
  556.  
  557.  
  558. if( g_iGang[ id ] == -1 )
  559.  
  560. {
  561.  
  562. return HAM_IGNORED;
  563.  
  564. }
  565.  
  566.  
  567.  
  568. new aData[ GangInfo ];
  569.  
  570. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  571.  
  572.  
  573.  
  574. new iHealth = 100 + aData[ GangHP ] * get_pcvar_num( g_pHealthPerLevel );
  575.  
  576. set_user_health( id, iHealth );
  577.  
  578.  
  579.  
  580. new iGravity = 800 - ( get_pcvar_num( g_pGravityPerLevel ) * aData[ GangGravity ] );
  581.  
  582. set_user_gravity( id, float( iGravity ) / 800.0 );
  583.  
  584.  
  585.  
  586. return HAM_IGNORED;
  587.  
  588. }
  589.  
  590.  
  591.  
  592. public Ham_TakeDamage_Pre( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
  593.  
  594. {
  595.  
  596. if( !is_user_alive( iAttacker ) || cs_get_user_team( iAttacker ) != CS_TEAM_T )
  597.  
  598. return HAM_IGNORED;
  599.  
  600.  
  601.  
  602. if( g_iGang[ iAttacker ] == -1 )
  603.  
  604. return HAM_IGNORED;
  605.  
  606.  
  607.  
  608. new aData[ GangInfo ];
  609.  
  610. ArrayGetArray( g_aGangs, g_iGang[ iAttacker ], aData );
  611.  
  612.  
  613.  
  614. SetHamParamFloat( 4, flDamage + ( get_pcvar_num( g_pDamagePerLevel ) * ( aData[ GangDamage ] ) ) );
  615.  
  616.  
  617.  
  618. return HAM_IGNORED;
  619.  
  620. }
  621.  
  622.  
  623.  
  624. public Ham_TakeDamage_Post( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
  625.  
  626. {
  627.  
  628. if( !is_user_alive( iAttacker ) || g_iGang[ iAttacker ] == -1 || get_user_weapon( iAttacker ) != CSW_KNIFE || cs_get_user_team( iAttacker ) != CS_TEAM_T )
  629.  
  630. {
  631.  
  632. return HAM_IGNORED;
  633.  
  634. }
  635.  
  636.  
  637.  
  638. new aData[ GangInfo ];
  639.  
  640. ArrayGetArray( g_aGangs, g_iGang[ iAttacker ], aData );
  641.  
  642.  
  643.  
  644. new iChance = aData[ GangWeaponDrop ] * get_pcvar_num( g_pWeaponDropPerLevel );
  645.  
  646.  
  647.  
  648. if( iChance == 0 )
  649.  
  650. return HAM_IGNORED;
  651.  
  652.  
  653.  
  654. new bool:bDrop = ( random_num( 1, 100 ) <= iChance );
  655.  
  656.  
  657.  
  658. if( bDrop )
  659.  
  660. client_cmd( iVictim, "drop" );
  661.  
  662.  
  663.  
  664. return HAM_IGNORED;
  665.  
  666. }
  667.  
  668.  
  669.  
  670. public Ham_PlayerResetSpeedPost( id )
  671.  
  672. {
  673.  
  674. if( g_iGang[ id ] == -1 || !is_user_alive( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  675.  
  676. {
  677.  
  678. return HAM_IGNORED;
  679.  
  680. }
  681.  
  682.  
  683.  
  684. new aData[ GangInfo ];
  685.  
  686. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  687.  
  688.  
  689.  
  690. if( aData[ GangStamina ] > 0 && get_user_maxspeed( id ) > 1.0 )
  691.  
  692. set_user_maxspeed( id, 250.0 + ( aData[ GangStamina ] * get_pcvar_num( g_pStaminaPerLevel ) ) );
  693.  
  694.  
  695.  
  696. return HAM_IGNORED;
  697.  
  698. }
  699.  
  700.  
  701.  
  702. public Event_DeathMsg()
  703.  
  704. {
  705.  
  706. new iKiller = read_data( 1 );
  707.  
  708. new iVictim = read_data( 2 );
  709.  
  710.  
  711.  
  712. if( !is_user_alive( iKiller ) || cs_get_user_team( iVictim ) != CS_TEAM_CT || cs_get_user_team( iKiller ) != CS_TEAM_T )
  713.  
  714. return PLUGIN_CONTINUE;
  715.  
  716.  
  717.  
  718. new iTotal = get_pcvar_num( g_pPointsPerKill ) + ( bool:read_data( 3 ) ? get_pcvar_num( g_pHeadshotBonus ) : 0 );
  719.  
  720.  
  721.  
  722. if( g_iGang[ iKiller ] > -1 )
  723.  
  724. {
  725.  
  726. new aData[ GangInfo ];
  727.  
  728. ArrayGetArray( g_aGangs, g_iGang[ iKiller ], aData );
  729.  
  730. aData[ GangKills ]++;
  731.  
  732. ArraySetArray( g_aGangs, g_iGang[ iKiller ], aData );
  733.  
  734.  
  735.  
  736. iTotal += iTotal * ( aData[ GangStealing ] * get_pcvar_num( g_pStealingPerLevel ) );
  737.  
  738. }
  739.  
  740.  
  741.  
  742. g_iPoints[ iKiller ] += iTotal;
  743.  
  744.  
  745.  
  746. return PLUGIN_CONTINUE;
  747.  
  748. }
  749.  
  750.  
  751.  
  752. public Cmd_Gang( id )
  753.  
  754. {
  755.  
  756. if( !is_user_connected( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  757.  
  758. {
  759.  
  760. ColorChat( id, NORMAL, "%s Only ^03prisoners ^01can access this menu.", g_szPrefix );
  761.  
  762. return PLUGIN_HANDLED;
  763.  
  764. }
  765.  
  766.  
  767.  
  768. static szMenu[ 512 ], iLen, aData[ GangInfo ], iKeys, iStatus;
  769.  
  770.  
  771.  
  772. iKeys = MENU_KEY_0 | MENU_KEY_4;
  773.  
  774.  
  775.  
  776. iStatus = getStatus( id, g_iGang[ id ] );
  777.  
  778.  
  779.  
  780. if( g_iGang[ id ] > -1 )
  781.  
  782. {
  783.  
  784. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  785.  
  786. iLen = formatex( szMenu, charsmax( szMenu ), "\yGang Menu^n\wCurrent Gang:\y %s^n", aData[ GangName ] );
  787.  
  788. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\yJB Points: \w%i^n^n", g_iPoints[ id ] );
  789.  
  790. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r1. \dCreate a Gang [%i Points]^n", get_pcvar_num( g_pCreateCost ) );
  791.  
  792. }
  793.  
  794.  
  795.  
  796. else
  797.  
  798. {
  799.  
  800. iLen = formatex( szMenu, charsmax( szMenu ), "\yGang Menu^n\wCurrent Gang:\r None^n" );
  801.  
  802. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\yJB Points: \w%i^n^n", g_iPoints[ id ] );
  803.  
  804. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r1. \wCreate a Gang [%i Points]^n", get_pcvar_num( g_pCreateCost ) );
  805.  
  806.  
  807.  
  808. iKeys |= MENU_KEY_1;
  809.  
  810. }
  811.  
  812.  
  813.  
  814.  
  815.  
  816. if( iStatus > STATUS_MEMBER && g_iGang[ id ] > -1 && get_pcvar_num( g_pMaxMembers ) > aData[ NumMembers ] )
  817.  
  818. {
  819.  
  820. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r2. \wInvite Player to Gang^n" );
  821.  
  822. iKeys |= MENU_KEY_2;
  823.  
  824. }
  825.  
  826. else
  827.  
  828. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r2. \dInvite Player to Gang^n" );
  829.  
  830.  
  831.  
  832. if( g_iGang[ id ] > -1 )
  833.  
  834. {
  835.  
  836. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r3. \wSkills^n" );
  837.  
  838. iKeys |= MENU_KEY_3;
  839.  
  840. }
  841.  
  842.  
  843.  
  844. else
  845.  
  846. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r3. \dSkills^n" );
  847.  
  848.  
  849.  
  850. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r4. \wTop-10^n" );
  851.  
  852.  
  853.  
  854. if( g_iGang[ id ] > -1 )
  855.  
  856. {
  857.  
  858. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r5. \wLeave Gang^n" );
  859.  
  860. iKeys |= MENU_KEY_5;
  861.  
  862. }
  863.  
  864.  
  865.  
  866. else
  867.  
  868. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r5. \dLeave Gang^n" );
  869.  
  870.  
  871.  
  872.  
  873.  
  874. if( iStatus > STATUS_MEMBER )
  875.  
  876. {
  877.  
  878. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r6. \wGang Admin Menu^n" );
  879.  
  880. iKeys |= MENU_KEY_6;
  881.  
  882. }
  883.  
  884.  
  885.  
  886. else
  887.  
  888. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r6. \dGang Admin Menu^n" );
  889.  
  890.  
  891.  
  892. if( g_iGang[ id ] > -1 )
  893.  
  894. {
  895.  
  896. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r7. \wOnline Members^n" );
  897.  
  898. iKeys |= MENU_KEY_7;
  899.  
  900. }
  901.  
  902.  
  903.  
  904. else
  905.  
  906. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r7. \dOnline Members^n" );
  907.  
  908.  
  909.  
  910. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "^n\r0. \wExit" );
  911.  
  912.  
  913.  
  914. show_menu( id, iKeys, szMenu, -1, "Gang Menu" );
  915.  
  916.  
  917.  
  918. return PLUGIN_CONTINUE;
  919.  
  920. }
  921.  
  922.  
  923.  
  924. public GangMenu_Handler( id, iKey )
  925.  
  926. {
  927.  
  928. switch( ( iKey + 1 ) % 10 )
  929.  
  930. {
  931.  
  932. case 0: return PLUGIN_HANDLED;
  933.  
  934.  
  935.  
  936. case 1:
  937.  
  938. {
  939.  
  940. if( get_pcvar_num( g_pAdminCreate ) && get_user_flags( id ) & ADMIN_CREATE )
  941.  
  942. {
  943.  
  944. client_cmd( id, "messagemode gang_name" );
  945.  
  946. }
  947.  
  948.  
  949.  
  950. else if( g_iPoints[ id ] < get_pcvar_num( g_pCreateCost ) )
  951.  
  952. {
  953.  
  954. ColorChat( id, NORMAL, "%s You do not have enough points to create a gang!", g_szPrefix );
  955.  
  956. return PLUGIN_HANDLED;
  957.  
  958. }
  959.  
  960.  
  961.  
  962. else
  963.  
  964. client_cmd( id, "messagemode gang_name" );
  965.  
  966. }
  967.  
  968.  
  969.  
  970. case 2:
  971.  
  972. {
  973.  
  974. ShowInviteMenu( id );
  975.  
  976. }
  977.  
  978.  
  979.  
  980. case 3:
  981.  
  982. {
  983.  
  984. ShowSkillsMenu( id );
  985.  
  986. }
  987.  
  988.  
  989.  
  990. case 4:
  991.  
  992. {
  993.  
  994. Cmd_Top10( id );
  995.  
  996. }
  997.  
  998.  
  999.  
  1000. case 5:
  1001.  
  1002. {
  1003.  
  1004. ShowLeaveConfirmMenu( id );
  1005.  
  1006. }
  1007.  
  1008.  
  1009.  
  1010. case 6:
  1011.  
  1012. {
  1013.  
  1014. ShowLeaderMenu( id );
  1015.  
  1016. }
  1017.  
  1018.  
  1019.  
  1020. case 7:
  1021.  
  1022. {
  1023.  
  1024. ShowMembersMenu( id );
  1025.  
  1026. }
  1027.  
  1028. }
  1029.  
  1030.  
  1031.  
  1032. return PLUGIN_HANDLED;
  1033.  
  1034. }
  1035.  
  1036.  
  1037.  
  1038. public Cmd_CreateGang( id )
  1039.  
  1040. {
  1041.  
  1042. new bool:bAdmin = false;
  1043.  
  1044.  
  1045.  
  1046. if( get_pcvar_num( g_pAdminCreate ) && get_user_flags( id ) & ADMIN_CREATE )
  1047.  
  1048. {
  1049.  
  1050. bAdmin = true;
  1051.  
  1052. }
  1053.  
  1054.  
  1055.  
  1056. else if( g_iPoints[ id ] < get_pcvar_num( g_pCreateCost ) )
  1057.  
  1058. {
  1059.  
  1060. ColorChat( id, NORMAL, "%s You do not have enough points to create a gang.", g_szPrefix );
  1061.  
  1062. return PLUGIN_HANDLED;
  1063.  
  1064. }
  1065.  
  1066.  
  1067.  
  1068. else if( g_iGang[ id ] > -1 )
  1069.  
  1070. {
  1071.  
  1072. ColorChat( id, NORMAL, "%s You cannot create a gang if you are already in one!", g_szPrefix );
  1073.  
  1074. return PLUGIN_HANDLED;
  1075.  
  1076. }
  1077.  
  1078.  
  1079.  
  1080. else if( cs_get_user_team( id ) != CS_TEAM_T )
  1081.  
  1082. {
  1083.  
  1084. ColorChat( id, NORMAL, "%s Only ^03prisoners ^01can create gangs!", g_szPrefix );
  1085.  
  1086. return PLUGIN_HANDLED;
  1087.  
  1088. }
  1089.  
  1090.  
  1091.  
  1092. new szArgs[ 60 ];
  1093.  
  1094. read_args( szArgs, charsmax( szArgs ) );
  1095.  
  1096.  
  1097.  
  1098. remove_quotes( szArgs );
  1099.  
  1100.  
  1101.  
  1102. if( TrieKeyExists( g_tGangNames, szArgs ) )
  1103.  
  1104. {
  1105.  
  1106. ColorChat( id, NORMAL, "%s That gang with that name already exists.", g_szPrefix );
  1107.  
  1108. Cmd_Gang( id );
  1109.  
  1110. return PLUGIN_HANDLED;
  1111.  
  1112. }
  1113.  
  1114.  
  1115.  
  1116. new aData[ GangInfo ];
  1117.  
  1118.  
  1119.  
  1120. aData[ GangName ] = szArgs;
  1121.  
  1122. aData[ GangHP ] = 0;
  1123.  
  1124. aData[ GangStealing ] = 0;
  1125.  
  1126. aData[ GangGravity ] = 0;
  1127.  
  1128. aData[ GangStamina ] = 0;
  1129.  
  1130. aData[ GangWeaponDrop ] = 0;
  1131.  
  1132. aData[ GangDamage ] = 0;
  1133.  
  1134. aData[ NumMembers ] = 0;
  1135.  
  1136. aData[ GangMembers ] = _:TrieCreate();
  1137.  
  1138.  
  1139.  
  1140. ArrayPushArray( g_aGangs, aData );
  1141.  
  1142.  
  1143.  
  1144. if( !bAdmin )
  1145.  
  1146. g_iPoints[ id ] -= get_pcvar_num( g_pCreateCost );
  1147.  
  1148.  
  1149.  
  1150. set_user_gang( id, ArraySize( g_aGangs ) - 1, STATUS_LEADER );
  1151.  
  1152.  
  1153.  
  1154. ColorChat( id, NORMAL, "%s You have successfully created gang '^03%s^01'.", g_szPrefix, szArgs );
  1155.  
  1156.  
  1157.  
  1158. return PLUGIN_HANDLED;
  1159.  
  1160. }
  1161.  
  1162.  
  1163.  
  1164. public ShowInviteMenu( id )
  1165.  
  1166. {
  1167.  
  1168. new iPlayers[ 32 ], iNum;
  1169.  
  1170. get_players( iPlayers, iNum );
  1171.  
  1172.  
  1173.  
  1174. new szInfo[ 6 ], hMenu;
  1175.  
  1176. hMenu = menu_create( "Choose a Player to Invite:", "InviteMenu_Handler" );
  1177.  
  1178. new szName[ 32 ];
  1179.  
  1180.  
  1181.  
  1182. for( new i = 0, iPlayer; i < iNum; i++ )
  1183.  
  1184. {
  1185.  
  1186. iPlayer = iPlayers[ i ];
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192. if( iPlayer == id || g_iGang[ iPlayer ] == g_iGang[ id ] || cs_get_user_team( iPlayer ) != CS_TEAM_T )
  1193.  
  1194. continue;
  1195.  
  1196.  
  1197.  
  1198. get_user_name( iPlayer, szName, charsmax( szName ) );
  1199.  
  1200.  
  1201.  
  1202. num_to_str( iPlayer, szInfo, charsmax( szInfo ) );
  1203.  
  1204.  
  1205.  
  1206. menu_additem( hMenu, szName, szInfo );
  1207.  
  1208. }
  1209.  
  1210.  
  1211.  
  1212. menu_display( id, hMenu, 0 );
  1213.  
  1214. }
  1215.  
  1216.  
  1217.  
  1218. public InviteMenu_Handler( id, hMenu, iItem )
  1219.  
  1220. {
  1221.  
  1222. if( iItem == MENU_EXIT )
  1223.  
  1224. {
  1225.  
  1226. Cmd_Gang( id );
  1227.  
  1228. return PLUGIN_HANDLED;
  1229.  
  1230. }
  1231.  
  1232.  
  1233.  
  1234. new szData[ 6 ], iAccess, hCallback, szName[ 32 ];
  1235.  
  1236. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, 31, hCallback );
  1237.  
  1238.  
  1239.  
  1240. new iPlayer = str_to_num( szData );
  1241.  
  1242.  
  1243.  
  1244. if( !is_user_connected( iPlayer ) )
  1245.  
  1246. return PLUGIN_HANDLED;
  1247.  
  1248.  
  1249.  
  1250. ShowInviteConfirmMenu( id, iPlayer );
  1251.  
  1252.  
  1253.  
  1254. ColorChat( id, NORMAL, "%s You have successfully invited %s to join your gang.", g_szPrefix, szName );
  1255.  
  1256.  
  1257.  
  1258. Cmd_Gang( id );
  1259.  
  1260. return PLUGIN_HANDLED;
  1261.  
  1262. }
  1263.  
  1264.  
  1265.  
  1266. public ShowInviteConfirmMenu( id, iPlayer )
  1267.  
  1268. {
  1269.  
  1270. new szName[ 32 ];
  1271.  
  1272. get_user_name( id, szName, charsmax( szName ) );
  1273.  
  1274.  
  1275.  
  1276. new aData[ GangInfo ];
  1277.  
  1278. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  1279.  
  1280.  
  1281.  
  1282. new szMenuTitle[ 128 ];
  1283.  
  1284. formatex( szMenuTitle, charsmax( szMenuTitle ), "%s Invited You to Join %s", szName, aData[ GangName ] );
  1285.  
  1286. new hMenu = menu_create( szMenuTitle, "InviteConfirmMenu_Handler" );
  1287.  
  1288.  
  1289.  
  1290. new szInfo[ 6 ];
  1291.  
  1292. num_to_str( g_iGang[ id ], szInfo, 5 );
  1293.  
  1294.  
  1295.  
  1296. menu_additem( hMenu, "Accept Invitation", szInfo );
  1297.  
  1298. menu_additem( hMenu, "Decline Invitation", "-1" );
  1299.  
  1300.  
  1301.  
  1302. menu_display( iPlayer, hMenu, 0 );
  1303.  
  1304. }
  1305.  
  1306.  
  1307.  
  1308. public InviteConfirmMenu_Handler( id, hMenu, iItem )
  1309.  
  1310. {
  1311.  
  1312. if( iItem == MENU_EXIT )
  1313.  
  1314. return PLUGIN_HANDLED;
  1315.  
  1316.  
  1317.  
  1318. new szData[ 6 ], iAccess, hCallback;
  1319.  
  1320. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  1321.  
  1322.  
  1323.  
  1324. new iGang = str_to_num( szData );
  1325.  
  1326.  
  1327.  
  1328. if( iGang == -1 )
  1329.  
  1330. return PLUGIN_HANDLED;
  1331.  
  1332.  
  1333.  
  1334. if( getStatus( id, g_iGang[ id ] ) == STATUS_LEADER )
  1335.  
  1336. {
  1337.  
  1338. ColorChat( id, NORMAL, "%s You cannot leave your gang while you are the leader.", g_szPrefix );
  1339.  
  1340. return PLUGIN_HANDLED;
  1341.  
  1342. }
  1343.  
  1344.  
  1345.  
  1346. set_user_gang( id, iGang );
  1347.  
  1348.  
  1349.  
  1350. new aData[ GangInfo ];
  1351.  
  1352. ArrayGetArray( g_aGangs, iGang, aData );
  1353.  
  1354.  
  1355.  
  1356. ColorChat( id, NORMAL, "%s You have successfully joined the gang ^03%s^01.", g_szPrefix, aData[ GangName ] );
  1357.  
  1358.  
  1359.  
  1360. return PLUGIN_HANDLED;
  1361.  
  1362. }
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368. public ShowSkillsMenu( id )
  1369.  
  1370. {
  1371.  
  1372. static szMenu[ 512 ], iLen, iKeys, aData[ GangInfo ];
  1373.  
  1374.  
  1375.  
  1376. if( !iKeys )
  1377.  
  1378. {
  1379.  
  1380. iKeys = MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_5 | MENU_KEY_6 | MENU_KEY_0;
  1381.  
  1382. }
  1383.  
  1384.  
  1385.  
  1386. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  1387.  
  1388.  
  1389.  
  1390. iLen = formatex( szMenu, charsmax( szMenu ), "\ySkills Menu^n^n" );
  1391.  
  1392. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r1. \wHealth Upgrade [\rCost: \y%i Points\w] \y[Level:%i/%i]^n", get_pcvar_num( g_pHealthCost ), aData[ GangHP ], get_pcvar_num( g_pHealthMax ) );
  1393.  
  1394. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r2. \wStealing Upgrade [\rCost: \y%i Points\w] \y[Level:%i/%i]^n", get_pcvar_num( g_pStealingCost ), aData[ GangStealing ], get_pcvar_num( g_pStealingMax ) );
  1395.  
  1396. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r3. \wGravity Upgrade [\rCost: \y%i Points\w] \y[Level:%i/%i]^n", get_pcvar_num( g_pGravityCost ), aData[ GangGravity ], get_pcvar_num( g_pGravityMax ) );
  1397.  
  1398. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r4. \wDamage Upgrade [\rCost: \y%i Points\w] \y[Level:%i/%i]^n", get_pcvar_num( g_pDamageCost ), aData[ GangDamage ], get_pcvar_num( g_pDamageMax ) );
  1399.  
  1400. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r5. \wWeapon Drop Upgrade [\rCost: \y%i Points\w] \y[Level:%i/%i]^n", get_pcvar_num( g_pWeaponDropCost ), aData[ GangWeaponDrop ], get_pcvar_num( g_pWeaponDropMax ) );
  1401.  
  1402. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r6. \wSpeed Upgrade [\rCost: \y%i Points\w] \y[Level:%i/%i]^n", get_pcvar_num( g_pStaminaCost ), aData[ GangStamina ], get_pcvar_num( g_pStaminaMax ) );
  1403.  
  1404.  
  1405.  
  1406. iLen += formatex( szMenu[ iLen ], 511 - iLen, "^n\r0. \wExit" );
  1407.  
  1408.  
  1409.  
  1410. show_menu( id, iKeys, szMenu, -1, "Skills Menu" );
  1411.  
  1412. }
  1413.  
  1414.  
  1415.  
  1416. public SkillsMenu_Handler( id, iKey )
  1417.  
  1418. {
  1419.  
  1420. new aData[ GangInfo ];
  1421.  
  1422. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  1423.  
  1424.  
  1425.  
  1426. switch( ( iKey + 1 ) % 10 )
  1427.  
  1428. {
  1429.  
  1430. case 0:
  1431.  
  1432. {
  1433.  
  1434. Cmd_Gang( id );
  1435.  
  1436. return PLUGIN_HANDLED;
  1437.  
  1438. }
  1439.  
  1440.  
  1441.  
  1442. case 1:
  1443.  
  1444. {
  1445.  
  1446. if( aData[ GangHP ] == get_pcvar_num( g_pHealthMax ) )
  1447.  
  1448. {
  1449.  
  1450. ColorChat( id, NORMAL, "%s Your gang is already at the max level for that skill.", g_szPrefix );
  1451.  
  1452. ShowSkillsMenu( id );
  1453.  
  1454. return PLUGIN_HANDLED;
  1455.  
  1456. }
  1457.  
  1458.  
  1459.  
  1460. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pHealthCost );
  1461.  
  1462.  
  1463.  
  1464. if( iRemaining < 0 )
  1465.  
  1466. {
  1467.  
  1468. ColorChat( id, NORMAL, "%s You don't have enough points for that.", g_szPrefix );
  1469.  
  1470. ShowSkillsMenu( id );
  1471.  
  1472. return PLUGIN_HANDLED;
  1473.  
  1474. }
  1475.  
  1476.  
  1477.  
  1478. aData[ GangHP ]++;
  1479.  
  1480.  
  1481.  
  1482. g_iPoints[ id ] = iRemaining;
  1483.  
  1484. }
  1485.  
  1486.  
  1487.  
  1488. case 2:
  1489.  
  1490. {
  1491.  
  1492. if( aData[ GangStealing ] == get_pcvar_num( g_pStealingMax ) )
  1493.  
  1494. {
  1495.  
  1496. ColorChat( id, NORMAL, "%s Your gang is already at the max level for that skill.", g_szPrefix );
  1497.  
  1498. ShowSkillsMenu( id );
  1499.  
  1500. return PLUGIN_HANDLED;
  1501.  
  1502. }
  1503.  
  1504.  
  1505.  
  1506. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pStealingCost );
  1507.  
  1508.  
  1509.  
  1510. if( iRemaining < 0 )
  1511.  
  1512. {
  1513.  
  1514. ColorChat( id, NORMAL, "%s You don't have enough points for that.", g_szPrefix );
  1515.  
  1516. ShowSkillsMenu( id );
  1517.  
  1518. return PLUGIN_HANDLED;
  1519.  
  1520. }
  1521.  
  1522.  
  1523.  
  1524. aData[ GangStealing ]++;
  1525.  
  1526.  
  1527.  
  1528. g_iPoints[ id ] = iRemaining;
  1529.  
  1530. }
  1531.  
  1532.  
  1533.  
  1534. case 3:
  1535.  
  1536. {
  1537.  
  1538. if( aData[ GangGravity ] == get_pcvar_num( g_pGravityMax ) )
  1539.  
  1540. {
  1541.  
  1542. ColorChat( id, NORMAL, "%s Your gang is already at the max level for that skill.", g_szPrefix );
  1543.  
  1544. ShowSkillsMenu( id );
  1545.  
  1546. return PLUGIN_HANDLED;
  1547.  
  1548. }
  1549.  
  1550.  
  1551.  
  1552. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pGravityCost );
  1553.  
  1554.  
  1555.  
  1556. if( iRemaining < 0 )
  1557.  
  1558. {
  1559.  
  1560. ColorChat( id, NORMAL, "%s You don't have enough points for that.", g_szPrefix );
  1561.  
  1562. ShowSkillsMenu( id );
  1563.  
  1564. return PLUGIN_HANDLED;
  1565.  
  1566. }
  1567.  
  1568.  
  1569.  
  1570. aData[ GangGravity ]++;
  1571.  
  1572.  
  1573.  
  1574. g_iPoints[ id ] = iRemaining;
  1575.  
  1576. }
  1577.  
  1578.  
  1579.  
  1580. case 4:
  1581.  
  1582. {
  1583.  
  1584. if( aData[ GangDamage ] == get_pcvar_num( g_pDamageMax ) )
  1585.  
  1586. {
  1587.  
  1588. ColorChat( id, NORMAL, "%s Your gang is already at the max level for that skill.", g_szPrefix );
  1589.  
  1590. ShowSkillsMenu( id );
  1591.  
  1592. return PLUGIN_HANDLED;
  1593.  
  1594. }
  1595.  
  1596.  
  1597.  
  1598. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pDamageCost );
  1599.  
  1600.  
  1601.  
  1602. if( iRemaining < 0 )
  1603.  
  1604. {
  1605.  
  1606. ColorChat( id, NORMAL, "%s You don't have enough points for that.", g_szPrefix );
  1607.  
  1608. ShowSkillsMenu( id );
  1609.  
  1610. return PLUGIN_HANDLED;
  1611.  
  1612. }
  1613.  
  1614.  
  1615.  
  1616. aData[ GangDamage ]++;
  1617.  
  1618.  
  1619.  
  1620. g_iPoints[ id ] = iRemaining;
  1621.  
  1622. }
  1623.  
  1624.  
  1625.  
  1626. case 5:
  1627.  
  1628. {
  1629.  
  1630. if( aData[ GangWeaponDrop ] == get_pcvar_num( g_pWeaponDropMax ) )
  1631.  
  1632. {
  1633.  
  1634. ColorChat( id, NORMAL, "%s Your gang is already at the max level for that skill.", g_szPrefix );
  1635.  
  1636. ShowSkillsMenu( id );
  1637.  
  1638. return PLUGIN_HANDLED;
  1639.  
  1640. }
  1641.  
  1642.  
  1643.  
  1644. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pWeaponDropCost );
  1645.  
  1646.  
  1647.  
  1648. if( iRemaining < 0 )
  1649.  
  1650. {
  1651.  
  1652. ColorChat( id, NORMAL, "%s You don't have enough points for that.", g_szPrefix );
  1653.  
  1654. ShowSkillsMenu( id );
  1655.  
  1656. return PLUGIN_HANDLED;
  1657.  
  1658. }
  1659.  
  1660.  
  1661.  
  1662. aData[ GangWeaponDrop ]++;
  1663.  
  1664.  
  1665.  
  1666. g_iPoints[ id ] = iRemaining;
  1667.  
  1668. }
  1669.  
  1670.  
  1671.  
  1672. case 6:
  1673.  
  1674. {
  1675.  
  1676. if( aData[ GangStamina ] == get_pcvar_num( g_pStaminaMax ) )
  1677.  
  1678. {
  1679.  
  1680. ColorChat( id, NORMAL, "%s Your gang is already at the max level for that skill.", g_szPrefix );
  1681.  
  1682. ShowSkillsMenu( id );
  1683.  
  1684. return PLUGIN_HANDLED;
  1685.  
  1686. }
  1687.  
  1688.  
  1689.  
  1690. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pStaminaCost );
  1691.  
  1692.  
  1693.  
  1694. if( iRemaining < 0 )
  1695.  
  1696. {
  1697.  
  1698. ColorChat( id, NORMAL, "%s You don't have enough points for that.", g_szPrefix );
  1699.  
  1700. ShowSkillsMenu( id );
  1701.  
  1702. return PLUGIN_HANDLED;
  1703.  
  1704. }
  1705.  
  1706.  
  1707.  
  1708. aData[ GangStamina ]++;
  1709.  
  1710.  
  1711.  
  1712. g_iPoints[ id ] = iRemaining;
  1713.  
  1714. }
  1715.  
  1716. }
  1717.  
  1718.  
  1719.  
  1720. ArraySetArray( g_aGangs, g_iGang[ id ], aData );
  1721.  
  1722.  
  1723.  
  1724. new iPlayers[ 32 ], iNum, iPlayer;
  1725.  
  1726. new szName[ 32 ];
  1727.  
  1728. get_players( iPlayers, iNum );
  1729.  
  1730.  
  1731.  
  1732. for( new i = 0; i < iNum; i++ )
  1733.  
  1734. {
  1735.  
  1736. iPlayer = iPlayers[ i ];
  1737.  
  1738.  
  1739.  
  1740. if( iPlayer == id || g_iGang[ iPlayer ] != g_iGang[ id ] )
  1741.  
  1742. continue;
  1743.  
  1744.  
  1745.  
  1746. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01has just upgraded one of your gang's skills.", g_szPrefix, szName );
  1747.  
  1748. }
  1749.  
  1750.  
  1751.  
  1752. ColorChat( id, NORMAL, "%s You have successfully upgraded your gang.", g_szPrefix );
  1753.  
  1754.  
  1755.  
  1756. ShowSkillsMenu( id );
  1757.  
  1758.  
  1759.  
  1760. return PLUGIN_HANDLED;
  1761.  
  1762. }
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768. public Cmd_Top10( id )
  1769.  
  1770. {
  1771.  
  1772. new iSize = ArraySize( g_aGangs );
  1773.  
  1774.  
  1775.  
  1776. new iOrder[ 100 ][ 2 ];
  1777.  
  1778.  
  1779.  
  1780. new aData[ GangInfo ];
  1781.  
  1782.  
  1783.  
  1784. for( new i = 0; i < iSize; i++ )
  1785.  
  1786. {
  1787.  
  1788. ArrayGetArray( g_aGangs, i, aData );
  1789.  
  1790.  
  1791.  
  1792. iOrder[ i ][ 0 ] = i;
  1793.  
  1794. iOrder[ i ][ 1 ] = aData[ GangKills ];
  1795.  
  1796. }
  1797.  
  1798.  
  1799.  
  1800. SortCustom2D( iOrder, iSize, "Top10_Sort" );
  1801.  
  1802.  
  1803.  
  1804. new szMessage[ 2048 ];
  1805.  
  1806. formatex( szMessage, charsmax( szMessage ), "<body bgcolor=#000000><font color=#FFB000><pre>" );
  1807.  
  1808. format( szMessage, charsmax( szMessage ), "%s%2s %-22.22s %7s %4s %10s %9s %9s %11s %8s^n", szMessage, "#", "Name", "Kills", "HP", "Stealing",
  1809.  
  1810. "Gravity", "Stamina", "WeaponDrop", "Damage" );
  1811.  
  1812.  
  1813.  
  1814. for( new i = 0; i < min( 10, iSize ); i++ )
  1815.  
  1816. {
  1817.  
  1818. ArrayGetArray( g_aGangs, iOrder[ i ][ 0 ], aData );
  1819.  
  1820.  
  1821.  
  1822. format( szMessage, charsmax( szMessage ), "%s%-2d %22.22s %7d %4d %10d %9d %9d %11d %8d^n", szMessage, i + 1, aData[ GangName ],
  1823.  
  1824. aData[ GangKills ], aData[ GangHP ], aData[ GangStealing ], aData[ GangGravity ], aData[ GangStamina], aData[ GangWeaponDrop ], aData[ GangDamage ] );
  1825.  
  1826. }
  1827.  
  1828.  
  1829.  
  1830. show_motd( id, szMessage, "Gang Top 10" );
  1831.  
  1832. }
  1833.  
  1834.  
  1835.  
  1836. public Top10_Sort( const iElement1[ ], const iElement2[ ], const iArray[ ], szData[], iSize )
  1837.  
  1838. {
  1839.  
  1840. if( iElement1[ 1 ] > iElement2[ 1 ] )
  1841.  
  1842. return -1;
  1843.  
  1844.  
  1845.  
  1846. else if( iElement1[ 1 ] < iElement2[ 1 ] )
  1847.  
  1848. return 1;
  1849.  
  1850.  
  1851.  
  1852. return 0;
  1853.  
  1854. }
  1855.  
  1856.  
  1857.  
  1858. public ShowLeaveConfirmMenu( id )
  1859.  
  1860. {
  1861.  
  1862. new hMenu = menu_create( "Are you sure you want to leave?", "LeaveConfirmMenu_Handler" );
  1863.  
  1864. menu_additem( hMenu, "Yes, Leave Now", "0" );
  1865.  
  1866. menu_additem( hMenu, "No, Don't Leave", "1" );
  1867.  
  1868.  
  1869.  
  1870. menu_display( id, hMenu, 0 );
  1871.  
  1872. }
  1873.  
  1874.  
  1875.  
  1876. public LeaveConfirmMenu_Handler( id, hMenu, iItem )
  1877.  
  1878. {
  1879.  
  1880. if( iItem == MENU_EXIT )
  1881.  
  1882. return PLUGIN_HANDLED;
  1883.  
  1884.  
  1885.  
  1886. new szData[ 6 ], iAccess, hCallback;
  1887.  
  1888. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  1889.  
  1890.  
  1891.  
  1892. switch( str_to_num( szData ) )
  1893.  
  1894. {
  1895.  
  1896. case 0:
  1897.  
  1898. {
  1899.  
  1900. if( getStatus( id, g_iGang[ id ] ) == STATUS_LEADER )
  1901.  
  1902. {
  1903.  
  1904. ColorChat( id, NORMAL, "%s You must transfer leadership before leaving this gang.", g_szPrefix );
  1905.  
  1906. Cmd_Gang( id );
  1907.  
  1908.  
  1909.  
  1910. return PLUGIN_HANDLED;
  1911.  
  1912. }
  1913.  
  1914.  
  1915.  
  1916. ColorChat( id, NORMAL, "%s You have successfully left your gang.", g_szPrefix );
  1917.  
  1918. set_user_gang( id, -1 );
  1919.  
  1920. Cmd_Gang( id );
  1921.  
  1922. }
  1923.  
  1924.  
  1925.  
  1926. case 1: Cmd_Gang( id );
  1927.  
  1928. }
  1929.  
  1930.  
  1931.  
  1932. return PLUGIN_HANDLED;
  1933.  
  1934. }
  1935.  
  1936.  
  1937.  
  1938. public ShowLeaderMenu( id )
  1939.  
  1940. {
  1941.  
  1942. new hMenu = menu_create( "Gang Leader Menu", "LeaderMenu_Handler" );
  1943.  
  1944.  
  1945.  
  1946. new iStatus = getStatus( id, g_iGang[ id ] );
  1947.  
  1948.  
  1949.  
  1950. if( iStatus == STATUS_LEADER )
  1951.  
  1952. {
  1953.  
  1954. menu_additem( hMenu, "Disband Gang", "0" );
  1955.  
  1956. menu_additem( hMenu, "Transfer Leadership", "1" );
  1957.  
  1958. menu_additem( hMenu, "Add An Admin", "4" );
  1959.  
  1960. menu_additem( hMenu, "Remove An Admin", "5" );
  1961.  
  1962. }
  1963.  
  1964.  
  1965.  
  1966. menu_additem( hMenu, "Kick From Gang", "2" );
  1967.  
  1968. menu_additem( hMenu, "Change Gang Name", "3" );
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974. menu_display( id, hMenu, 0 );
  1975.  
  1976. }
  1977.  
  1978.  
  1979.  
  1980. public LeaderMenu_Handler( id, hMenu, iItem )
  1981.  
  1982. {
  1983.  
  1984. if( iItem == MENU_EXIT )
  1985.  
  1986. {
  1987.  
  1988. Cmd_Gang( id );
  1989.  
  1990. return PLUGIN_HANDLED;
  1991.  
  1992. }
  1993.  
  1994.  
  1995.  
  1996. new iAccess, hCallback, szData[ 6 ];
  1997.  
  1998. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  1999.  
  2000.  
  2001.  
  2002. switch( str_to_num( szData ) )
  2003.  
  2004. {
  2005.  
  2006. case 0:
  2007.  
  2008. {
  2009.  
  2010. ShowDisbandConfirmMenu( id );
  2011.  
  2012. }
  2013.  
  2014.  
  2015.  
  2016. case 1:
  2017.  
  2018. {
  2019.  
  2020. ShowTransferMenu( id );
  2021.  
  2022. }
  2023.  
  2024.  
  2025.  
  2026. case 2:
  2027.  
  2028. {
  2029.  
  2030. ShowKickMenu( id );
  2031.  
  2032. }
  2033.  
  2034.  
  2035.  
  2036. case 3:
  2037.  
  2038. {
  2039.  
  2040. client_cmd( id, "messagemode New_Name" );
  2041.  
  2042. }
  2043.  
  2044.  
  2045.  
  2046. case 4:
  2047.  
  2048. {
  2049.  
  2050. ShowAddAdminMenu( id );
  2051.  
  2052. }
  2053.  
  2054.  
  2055.  
  2056. case 5:
  2057.  
  2058. {
  2059.  
  2060. ShowRemoveAdminMenu( id );
  2061.  
  2062. }
  2063.  
  2064. }
  2065.  
  2066.  
  2067.  
  2068. return PLUGIN_HANDLED;
  2069.  
  2070. }
  2071.  
  2072.  
  2073.  
  2074. public ShowDisbandConfirmMenu( id )
  2075.  
  2076. {
  2077.  
  2078. new hMenu = menu_create( "Are you sure you want to disband the gang?", "DisbandConfirmMenu_Handler" );
  2079.  
  2080. menu_additem( hMenu, "Yes, Disband Now", "0" );
  2081.  
  2082. menu_additem( hMenu, "No, Don't Disband", "1" );
  2083.  
  2084.  
  2085.  
  2086. menu_display( id, hMenu, 0 );
  2087.  
  2088. }
  2089.  
  2090.  
  2091.  
  2092. public DisbandConfirmMenu_Handler( id, hMenu, iItem )
  2093.  
  2094. {
  2095.  
  2096. if( iItem == MENU_EXIT )
  2097.  
  2098. return PLUGIN_HANDLED;
  2099.  
  2100.  
  2101.  
  2102. new szData[ 6 ], iAccess, hCallback;
  2103.  
  2104. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  2105.  
  2106.  
  2107.  
  2108. switch( str_to_num( szData ) )
  2109.  
  2110. {
  2111.  
  2112. case 0:
  2113.  
  2114. {
  2115.  
  2116.  
  2117.  
  2118. ColorChat( id, NORMAL, "%s You have successfully disbanded your gang.", g_szPrefix );
  2119.  
  2120.  
  2121.  
  2122. new iPlayers[ 32 ], iNum;
  2123.  
  2124.  
  2125.  
  2126. get_players( iPlayers, iNum );
  2127.  
  2128.  
  2129.  
  2130. new iPlayer;
  2131.  
  2132.  
  2133.  
  2134. for( new i = 0; i < iNum; i++ )
  2135.  
  2136. {
  2137.  
  2138. iPlayer = iPlayers[ i ];
  2139.  
  2140.  
  2141.  
  2142. if( iPlayer == id )
  2143.  
  2144. continue;
  2145.  
  2146.  
  2147.  
  2148. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  2149.  
  2150. continue;
  2151.  
  2152.  
  2153.  
  2154. ColorChat( iPlayer, NORMAL, "%s Your gang has been disband by its leader.", g_szPrefix );
  2155.  
  2156. set_user_gang( iPlayer, -1 );
  2157.  
  2158. }
  2159.  
  2160.  
  2161.  
  2162. new iGang = g_iGang[ id ];
  2163.  
  2164.  
  2165.  
  2166. set_user_gang( id, -1 );
  2167.  
  2168.  
  2169.  
  2170. ArrayDeleteItem( g_aGangs, iGang );
  2171.  
  2172.  
  2173.  
  2174. Cmd_Gang( id );
  2175.  
  2176. }
  2177.  
  2178.  
  2179.  
  2180. case 1: Cmd_Gang( id );
  2181.  
  2182. }
  2183.  
  2184.  
  2185.  
  2186. return PLUGIN_HANDLED;
  2187.  
  2188. }
  2189.  
  2190.  
  2191.  
  2192. public ShowTransferMenu( id )
  2193.  
  2194. {
  2195.  
  2196. new iPlayers[ 32 ], iNum;
  2197.  
  2198. get_players( iPlayers, iNum, "e", "TERRORIST" );
  2199.  
  2200.  
  2201.  
  2202. new hMenu = menu_create( "Transfer Leadership to:", "TransferMenu_Handler" );
  2203.  
  2204. new szName[ 32 ], szData[ 6 ];
  2205.  
  2206.  
  2207.  
  2208. for( new i = 0, iPlayer; i < iNum; i++ )
  2209.  
  2210. {
  2211.  
  2212. iPlayer = iPlayers[ i ];
  2213.  
  2214.  
  2215.  
  2216. if( g_iGang[ iPlayer ] != g_iGang[ id ] || id == iPlayer )
  2217.  
  2218. continue;
  2219.  
  2220.  
  2221.  
  2222. get_user_name( iPlayer, szName, charsmax( szName ) );
  2223.  
  2224. num_to_str( iPlayer, szData, charsmax( szData ) );
  2225.  
  2226.  
  2227.  
  2228. menu_additem( hMenu, szName, szData );
  2229.  
  2230. }
  2231.  
  2232.  
  2233.  
  2234. menu_display( id, hMenu, 0 );
  2235.  
  2236. }
  2237.  
  2238.  
  2239.  
  2240. public TransferMenu_Handler( id, hMenu, iItem )
  2241.  
  2242. {
  2243.  
  2244. if( iItem == MENU_EXIT )
  2245.  
  2246. {
  2247.  
  2248. ShowLeaderMenu( id );
  2249.  
  2250. return PLUGIN_HANDLED;
  2251.  
  2252. }
  2253.  
  2254.  
  2255.  
  2256. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  2257.  
  2258.  
  2259.  
  2260. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, charsmax( szName ), hCallback );
  2261.  
  2262.  
  2263.  
  2264. new iPlayer = str_to_num( szData );
  2265.  
  2266.  
  2267.  
  2268. if( !is_user_connected( iPlayer ) )
  2269.  
  2270. {
  2271.  
  2272. ColorChat( id, NORMAL, "%s That player is no longer connected.", g_szPrefix );
  2273.  
  2274. ShowTransferMenu( id );
  2275.  
  2276. return PLUGIN_HANDLED;
  2277.  
  2278. }
  2279.  
  2280.  
  2281.  
  2282. set_user_gang( iPlayer, g_iGang[ id ], STATUS_LEADER );
  2283.  
  2284. set_user_gang( id, g_iGang[ id ], STATUS_ADMIN );
  2285.  
  2286.  
  2287.  
  2288. Cmd_Gang( id );
  2289.  
  2290.  
  2291.  
  2292. new iPlayers[ 32 ], iNum, iTemp;
  2293.  
  2294. get_players( iPlayers, iNum );
  2295.  
  2296.  
  2297.  
  2298. for( new i = 0; i < iNum; i++ )
  2299.  
  2300. {
  2301.  
  2302. iTemp = iPlayers[ i ];
  2303.  
  2304.  
  2305.  
  2306. if( iTemp == iPlayer )
  2307.  
  2308. {
  2309.  
  2310. ColorChat( iTemp, NORMAL, "%s You are the new leader of your gang.", g_szPrefix );
  2311.  
  2312. continue;
  2313.  
  2314. }
  2315.  
  2316.  
  2317.  
  2318. else if( g_iGang[ iTemp ] != g_iGang[ id ] )
  2319.  
  2320. continue;
  2321.  
  2322.  
  2323.  
  2324. ColorChat( iTemp, NORMAL, "%s ^03%s^01 is the new leader of your gang.", g_szPrefix, szName );
  2325.  
  2326. }
  2327.  
  2328.  
  2329.  
  2330. return PLUGIN_HANDLED;
  2331.  
  2332. }
  2333.  
  2334.  
  2335.  
  2336.  
  2337.  
  2338. public ShowKickMenu( id )
  2339.  
  2340. {
  2341.  
  2342. new iPlayers[ 32 ], iNum;
  2343.  
  2344. get_players( iPlayers, iNum );
  2345.  
  2346.  
  2347.  
  2348. new hMenu = menu_create( "Kick Player From Gang:", "KickMenu_Handler" );
  2349.  
  2350. new szName[ 32 ], szData[ 6 ];
  2351.  
  2352.  
  2353.  
  2354.  
  2355.  
  2356. for( new i = 0, iPlayer; i < iNum; i++ )
  2357.  
  2358. {
  2359.  
  2360. iPlayer = iPlayers[ i ];
  2361.  
  2362.  
  2363.  
  2364. if( g_iGang[ iPlayer ] != g_iGang[ id ] || id == iPlayer )
  2365.  
  2366. continue;
  2367.  
  2368.  
  2369.  
  2370. get_user_name( iPlayer, szName, charsmax( szName ) );
  2371.  
  2372. num_to_str( iPlayer, szData, charsmax( szData ) );
  2373.  
  2374.  
  2375.  
  2376. menu_additem( hMenu, szName, szData );
  2377.  
  2378. }
  2379.  
  2380.  
  2381.  
  2382. menu_display( id, hMenu, 0 );
  2383.  
  2384. }
  2385.  
  2386.  
  2387.  
  2388. public KickMenu_Handler( id, hMenu, iItem )
  2389.  
  2390. {
  2391.  
  2392. if( iItem == MENU_EXIT )
  2393.  
  2394. {
  2395.  
  2396. ShowLeaderMenu( id );
  2397.  
  2398. return PLUGIN_HANDLED;
  2399.  
  2400. }
  2401.  
  2402.  
  2403.  
  2404. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  2405.  
  2406.  
  2407.  
  2408. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, charsmax( szName ), hCallback );
  2409.  
  2410.  
  2411.  
  2412. new iPlayer = str_to_num( szData );
  2413.  
  2414.  
  2415.  
  2416. if( !is_user_connected( iPlayer ) )
  2417.  
  2418. {
  2419.  
  2420. ColorChat( id, NORMAL, "%s That player is no longer connected.", g_szPrefix );
  2421.  
  2422. ShowTransferMenu( id );
  2423.  
  2424. return PLUGIN_HANDLED;
  2425.  
  2426. }
  2427.  
  2428.  
  2429.  
  2430. set_user_gang( iPlayer, -1 );
  2431.  
  2432.  
  2433.  
  2434. Cmd_Gang( id );
  2435.  
  2436.  
  2437.  
  2438. new iPlayers[ 32 ], iNum, iTemp;
  2439.  
  2440. get_players( iPlayers, iNum );
  2441.  
  2442.  
  2443.  
  2444. for( new i = 0; i < iNum; i++ )
  2445.  
  2446. {
  2447.  
  2448. iTemp = iPlayers[ i ];
  2449.  
  2450.  
  2451.  
  2452. if( iTemp == iPlayer || g_iGang[ iTemp ] != g_iGang[ id ] )
  2453.  
  2454. continue;
  2455.  
  2456.  
  2457.  
  2458. ColorChat( iTemp, NORMAL, "%s ^03%s^01 has been kicked from the gang.", g_szPrefix, szName );
  2459.  
  2460. }
  2461.  
  2462.  
  2463.  
  2464. ColorChat( iPlayer, NORMAL, "%s You have been kicked from your gang.", g_szPrefix, szName );
  2465.  
  2466.  
  2467.  
  2468. return PLUGIN_HANDLED;
  2469.  
  2470. }
  2471.  
  2472.  
  2473.  
  2474. public ChangeName_Handler( id )
  2475.  
  2476. {
  2477.  
  2478. if( g_iGang[ id ] == -1 || getStatus( id, g_iGang[ id ] ) == STATUS_MEMBER )
  2479.  
  2480. {
  2481.  
  2482. return;
  2483.  
  2484. }
  2485.  
  2486.  
  2487.  
  2488. new iGang = g_iGang[ id ];
  2489.  
  2490.  
  2491.  
  2492. new szArgs[ 64 ];
  2493.  
  2494. read_args( szArgs, charsmax( szArgs ) );
  2495.  
  2496.  
  2497.  
  2498. new iPlayers[ 32 ], iNum;
  2499.  
  2500. get_players( iPlayers, iNum );
  2501.  
  2502.  
  2503.  
  2504. new bool:bInGang[ 33 ];
  2505.  
  2506. new iStatus[ 33 ];
  2507.  
  2508.  
  2509.  
  2510. for( new i = 0, iPlayer; i < iNum; i++ )
  2511.  
  2512. {
  2513.  
  2514. iPlayer = iPlayers[ i ];
  2515.  
  2516.  
  2517.  
  2518. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  2519.  
  2520. continue;
  2521.  
  2522.  
  2523.  
  2524. bInGang[ iPlayer ] = true;
  2525.  
  2526. iStatus[ iPlayer ] = getStatus( id, iGang );
  2527.  
  2528.  
  2529.  
  2530. set_user_gang( iPlayer, -1 );
  2531.  
  2532. }
  2533.  
  2534.  
  2535.  
  2536. new aData[ GangInfo ];
  2537.  
  2538. ArrayGetArray( g_aGangs, iGang, aData );
  2539.  
  2540.  
  2541.  
  2542. aData[ GangName ] = szArgs;
  2543.  
  2544.  
  2545.  
  2546. ArraySetArray( g_aGangs, iGang, aData );
  2547.  
  2548.  
  2549.  
  2550. for( new i = 0, iPlayer; i < iNum; i++ )
  2551.  
  2552. {
  2553.  
  2554. iPlayer = iPlayers[ i ];
  2555.  
  2556.  
  2557.  
  2558. if( !bInGang[ iPlayer ] )
  2559.  
  2560. continue;
  2561.  
  2562.  
  2563.  
  2564. set_user_gang( iPlayer, iGang, iStatus[ id ] );
  2565.  
  2566. }
  2567.  
  2568. }
  2569.  
  2570.  
  2571.  
  2572. public ShowAddAdminMenu( id )
  2573.  
  2574. {
  2575.  
  2576. new iPlayers[ 32 ], iNum;
  2577.  
  2578. new szName[ 32 ], szData[ 6 ];
  2579.  
  2580. new hMenu = menu_create( "Choose a Player to Promote:", "AddAdminMenu_Handler" );
  2581.  
  2582.  
  2583.  
  2584. get_players( iPlayers, iNum );
  2585.  
  2586.  
  2587.  
  2588. for( new i = 0, iPlayer; i < iNum; i++ )
  2589.  
  2590. {
  2591.  
  2592. iPlayer = iPlayers[ i ];
  2593.  
  2594.  
  2595.  
  2596. if( g_iGang[ id ] != g_iGang[ iPlayer ] || getStatus( iPlayer, g_iGang[ iPlayer ] ) > STATUS_MEMBER )
  2597.  
  2598. continue;
  2599.  
  2600.  
  2601.  
  2602. get_user_name( iPlayer, szName, charsmax( szName ) );
  2603.  
  2604.  
  2605.  
  2606. num_to_str( iPlayer, szData, charsmax( szData ) );
  2607.  
  2608.  
  2609.  
  2610. menu_additem( hMenu, szName, szData );
  2611.  
  2612. }
  2613.  
  2614.  
  2615.  
  2616. menu_display( id, hMenu, 0 );
  2617.  
  2618. }
  2619.  
  2620.  
  2621.  
  2622. public AddAdminMenu_Handler( id, hMenu, iItem )
  2623.  
  2624. {
  2625.  
  2626. if( iItem == MENU_EXIT )
  2627.  
  2628. {
  2629.  
  2630. menu_destroy( hMenu );
  2631.  
  2632. ShowLeaderMenu( id );
  2633.  
  2634. return PLUGIN_HANDLED;
  2635.  
  2636. }
  2637.  
  2638.  
  2639.  
  2640. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  2641.  
  2642.  
  2643.  
  2644. menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), hCallback );
  2645.  
  2646.  
  2647.  
  2648. new iChosen = str_to_num( szData );
  2649.  
  2650.  
  2651.  
  2652. if( !is_user_connected( iChosen ) )
  2653.  
  2654. {
  2655.  
  2656. menu_destroy( hMenu );
  2657.  
  2658. ShowLeaderMenu( id );
  2659.  
  2660. return PLUGIN_HANDLED;
  2661.  
  2662. }
  2663.  
  2664.  
  2665.  
  2666. set_user_gang( iChosen, g_iGang[ id ], STATUS_LEADER );
  2667.  
  2668.  
  2669.  
  2670. new iPlayers[ 32 ], iNum;
  2671.  
  2672. get_players( iPlayers, iNum );
  2673.  
  2674.  
  2675.  
  2676. for( new i = 0, iPlayer; i < iNum; i++ )
  2677.  
  2678. {
  2679.  
  2680. iPlayer = iPlayers[ i ];
  2681.  
  2682.  
  2683.  
  2684. if( g_iGang[ iPlayer ] != g_iGang[ id ] || iPlayer == iChosen )
  2685.  
  2686. continue;
  2687.  
  2688.  
  2689.  
  2690. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01has been promoted to an admin of your gang.", g_szPrefix, szName );
  2691.  
  2692. }
  2693.  
  2694.  
  2695.  
  2696. ColorChat( iChosen, NORMAL, "%s ^01You have been promoted to an admin of your gang.", g_szPrefix );
  2697.  
  2698.  
  2699.  
  2700. menu_destroy( hMenu );
  2701.  
  2702. return PLUGIN_HANDLED;
  2703.  
  2704. }
  2705.  
  2706.  
  2707.  
  2708. public ShowRemoveAdminMenu( id )
  2709.  
  2710. {
  2711.  
  2712. new iPlayers[ 32 ], iNum;
  2713.  
  2714. new szName[ 32 ], szData[ 6 ];
  2715.  
  2716. new hMenu = menu_create( "Choose a Player to Demote:", "RemoveAdminMenu_Handler" );
  2717.  
  2718.  
  2719.  
  2720. get_players( iPlayers, iNum );
  2721.  
  2722.  
  2723.  
  2724. for( new i = 0, iPlayer; i < iNum; i++ )
  2725.  
  2726. {
  2727.  
  2728. iPlayer = iPlayers[ i ];
  2729.  
  2730.  
  2731.  
  2732. if( g_iGang[ id ] != g_iGang[ iPlayer ] || getStatus( iPlayer, g_iGang[ iPlayer ] ) != STATUS_ADMIN )
  2733.  
  2734. continue;
  2735.  
  2736.  
  2737.  
  2738. get_user_name( iPlayer, szName, charsmax( szName ) );
  2739.  
  2740.  
  2741.  
  2742. num_to_str( iPlayer, szData, charsmax( szData ) );
  2743.  
  2744.  
  2745.  
  2746. menu_additem( hMenu, szName, szData );
  2747.  
  2748. }
  2749.  
  2750.  
  2751.  
  2752. menu_display( id, hMenu, 0 );
  2753.  
  2754. }
  2755.  
  2756.  
  2757.  
  2758. public RemoveAdminMenu_Handler( id, hMenu, iItem )
  2759.  
  2760. {
  2761.  
  2762. if( iItem == MENU_EXIT )
  2763.  
  2764. {
  2765.  
  2766. menu_destroy( hMenu );
  2767.  
  2768. ShowLeaderMenu( id );
  2769.  
  2770. return PLUGIN_HANDLED;
  2771.  
  2772. }
  2773.  
  2774.  
  2775.  
  2776. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  2777.  
  2778.  
  2779.  
  2780. menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), hCallback );
  2781.  
  2782.  
  2783.  
  2784. new iChosen = str_to_num( szData );
  2785.  
  2786.  
  2787.  
  2788. if( !is_user_connected( iChosen ) )
  2789.  
  2790. {
  2791.  
  2792. menu_destroy( hMenu );
  2793.  
  2794. ShowLeaderMenu( id );
  2795.  
  2796. return PLUGIN_HANDLED;
  2797.  
  2798. }
  2799.  
  2800.  
  2801.  
  2802. set_user_gang( iChosen, g_iGang[ id ], STATUS_MEMBER );
  2803.  
  2804.  
  2805.  
  2806. new iPlayers[ 32 ], iNum;
  2807.  
  2808. get_players( iPlayers, iNum );
  2809.  
  2810.  
  2811.  
  2812. for( new i = 0, iPlayer; i < iNum; i++ )
  2813.  
  2814. {
  2815.  
  2816. iPlayer = iPlayers[ i ];
  2817.  
  2818.  
  2819.  
  2820. if( g_iGang[ iPlayer ] != g_iGang[ id ] || iPlayer == iChosen )
  2821.  
  2822. continue;
  2823.  
  2824.  
  2825.  
  2826. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01has been demoted from being an admin of your gang.", g_szPrefix, szName );
  2827.  
  2828. }
  2829.  
  2830.  
  2831.  
  2832. ColorChat( iChosen, NORMAL, "%s ^01You have been demoted from being an admin of your gang.", g_szPrefix );
  2833.  
  2834.  
  2835.  
  2836. menu_destroy( hMenu );
  2837.  
  2838. return PLUGIN_HANDLED;
  2839.  
  2840. }
  2841.  
  2842.  
  2843.  
  2844. public ShowMembersMenu( id )
  2845.  
  2846. {
  2847.  
  2848. new szName[ 64 ], iPlayers[ 32 ], iNum;
  2849.  
  2850. get_players( iPlayers, iNum );
  2851.  
  2852.  
  2853.  
  2854. new hMenu = menu_create( "Online Members:", "MemberMenu_Handler" );
  2855.  
  2856.  
  2857.  
  2858. for( new i = 0, iPlayer; i < iNum; i++ )
  2859.  
  2860. {
  2861.  
  2862. iPlayer = iPlayers[ i ];
  2863.  
  2864.  
  2865.  
  2866. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  2867.  
  2868. continue;
  2869.  
  2870.  
  2871.  
  2872. get_user_name( iPlayer, szName, charsmax( szName ) );
  2873.  
  2874.  
  2875.  
  2876. switch( getStatus( iPlayer, g_iGang[ id ] ) )
  2877.  
  2878. {
  2879.  
  2880. case STATUS_MEMBER:
  2881.  
  2882. {
  2883.  
  2884. add( szName, charsmax( szName ), " \r[Member]" );
  2885.  
  2886. }
  2887.  
  2888.  
  2889.  
  2890. case STATUS_ADMIN:
  2891.  
  2892. {
  2893.  
  2894. add( szName, charsmax( szName ), " \r[Admin]" );
  2895.  
  2896. }
  2897.  
  2898.  
  2899.  
  2900. case STATUS_LEADER:
  2901.  
  2902. {
  2903.  
  2904. add( szName, charsmax( szName ), " \r[Leader]" );
  2905.  
  2906. }
  2907.  
  2908. }
  2909.  
  2910.  
  2911.  
  2912. menu_additem( hMenu, szName );
  2913.  
  2914. }
  2915.  
  2916.  
  2917.  
  2918. menu_display( id, hMenu, 0 );
  2919.  
  2920. }
  2921.  
  2922.  
  2923.  
  2924. public MemberMenu_Handler( id, hMenu, iItem )
  2925.  
  2926. {
  2927.  
  2928. if( iItem == MENU_EXIT )
  2929.  
  2930. {
  2931.  
  2932. menu_destroy( hMenu );
  2933.  
  2934. Cmd_Gang( id );
  2935.  
  2936. return PLUGIN_HANDLED;
  2937.  
  2938. }
  2939.  
  2940.  
  2941.  
  2942. menu_destroy( hMenu );
  2943.  
  2944.  
  2945.  
  2946. ShowMembersMenu( id )
  2947.  
  2948. return PLUGIN_HANDLED;
  2949.  
  2950. }
  2951.  
  2952.  
  2953.  
  2954. // Credits to Tirant from zombie mod and xOR from xRedirect
  2955.  
  2956. public LoadGangs()
  2957.  
  2958. {
  2959.  
  2960. new szConfigsDir[ 60 ];
  2961.  
  2962. get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
  2963.  
  2964. add( szConfigsDir, charsmax( szConfigsDir ), "/jb_gangs.ini" );
  2965.  
  2966.  
  2967.  
  2968. new iFile = fopen( szConfigsDir, "rt" );
  2969.  
  2970.  
  2971.  
  2972. new aData[ GangInfo ];
  2973.  
  2974.  
  2975.  
  2976. new szBuffer[ 512 ], szData[ 6 ], szValue[ 6 ], i, iCurGang;
  2977.  
  2978.  
  2979.  
  2980. while( !feof( iFile ) )
  2981.  
  2982. {
  2983.  
  2984. fgets( iFile, szBuffer, charsmax( szBuffer ) );
  2985.  
  2986.  
  2987.  
  2988. trim( szBuffer );
  2989.  
  2990. remove_quotes( szBuffer );
  2991.  
  2992.  
  2993.  
  2994. if( !szBuffer[ 0 ] || szBuffer[ 0 ] == ';' )
  2995.  
  2996. {
  2997.  
  2998. continue;
  2999.  
  3000. }
  3001.  
  3002.  
  3003.  
  3004. if( szBuffer[ 0 ] == '[' && szBuffer[ strlen( szBuffer ) - 1 ] == ']' )
  3005.  
  3006. {
  3007.  
  3008. copy( aData[ GangName ], strlen( szBuffer ) - 2, szBuffer[ 1 ] );
  3009.  
  3010. aData[ GangHP ] = 0;
  3011.  
  3012. aData[ GangStealing ] = 0;
  3013.  
  3014. aData[ GangGravity ] = 0;
  3015.  
  3016. aData[ GangStamina ] = 0;
  3017.  
  3018. aData[ GangWeaponDrop ] = 0;
  3019.  
  3020. aData[ GangDamage ] = 0;
  3021.  
  3022. aData[ GangKills ] = 0;
  3023.  
  3024. aData[ NumMembers ] = 0;
  3025.  
  3026. aData[ GangMembers ] = _:TrieCreate();
  3027.  
  3028.  
  3029.  
  3030. if( TrieKeyExists( g_tGangNames, aData[ GangName ] ) )
  3031.  
  3032. {
  3033.  
  3034. new szError[ 256 ];
  3035.  
  3036. formatex( szError, charsmax( szError ), "[JB Gangs] Gang already exists: %s", aData[ GangName ] );
  3037.  
  3038. set_fail_state( szError );
  3039.  
  3040. }
  3041.  
  3042.  
  3043.  
  3044. ArrayPushArray( g_aGangs, aData );
  3045.  
  3046.  
  3047.  
  3048. TrieSetCell( g_tGangNames, aData[ GangName ], iCurGang );
  3049.  
  3050.  
  3051.  
  3052. log_amx( "Gang Created: %s", aData[ GangName ] );
  3053.  
  3054.  
  3055.  
  3056. iCurGang++;
  3057.  
  3058.  
  3059.  
  3060. continue;
  3061.  
  3062. }
  3063.  
  3064.  
  3065.  
  3066. strtok( szBuffer, szData, 31, szValue, 511, '=' );
  3067.  
  3068. trim( szData );
  3069.  
  3070. trim( szValue );
  3071.  
  3072.  
  3073.  
  3074. if( TrieGetCell( g_tGangValues, szData, i ) )
  3075.  
  3076. {
  3077.  
  3078. ArrayGetArray( g_aGangs, iCurGang - 1, aData );
  3079.  
  3080.  
  3081.  
  3082. switch( i )
  3083.  
  3084. {
  3085.  
  3086. case VALUE_HP:
  3087.  
  3088. aData[ GangHP ] = str_to_num( szValue );
  3089.  
  3090.  
  3091.  
  3092. case VALUE_STEALING:
  3093.  
  3094. aData[ GangStealing ] = str_to_num( szValue );
  3095.  
  3096.  
  3097.  
  3098. case VALUE_GRAVITY:
  3099.  
  3100. aData[ GangGravity ] = str_to_num( szValue );
  3101.  
  3102.  
  3103.  
  3104. case VALUE_STAMINA:
  3105.  
  3106. aData[ GangStamina ] = str_to_num( szValue );
  3107.  
  3108.  
  3109.  
  3110. case VALUE_WEAPONDROP:
  3111.  
  3112. aData[ GangWeaponDrop ] = str_to_num( szValue );
  3113.  
  3114.  
  3115.  
  3116. case VALUE_DAMAGE:
  3117.  
  3118. aData[ GangDamage ] = str_to_num( szValue );
  3119.  
  3120.  
  3121.  
  3122. case VALUE_KILLS:
  3123.  
  3124. aData[ GangKills ] = str_to_num( szValue );
  3125.  
  3126. }
  3127.  
  3128.  
  3129.  
  3130. ArraySetArray( g_aGangs, iCurGang - 1, aData );
  3131.  
  3132. }
  3133.  
  3134. }
  3135.  
  3136.  
  3137.  
  3138. new Array:aSQL;
  3139.  
  3140. sqlv_read_all_ex( g_hVault, aSQL );
  3141.  
  3142.  
  3143.  
  3144. new aVaultData[ SQLVaultEntryEx ];
  3145.  
  3146.  
  3147.  
  3148. new iGang;
  3149.  
  3150.  
  3151.  
  3152. for( i = 0; i < ArraySize( aSQL ); i++ )
  3153.  
  3154. {
  3155.  
  3156. ArrayGetArray( aSQL, i, aVaultData );
  3157.  
  3158.  
  3159.  
  3160. if( TrieGetCell( g_tGangNames, aVaultData[ SQLVEx_Key2 ], iGang ) )
  3161.  
  3162. {
  3163.  
  3164. ArrayGetArray( g_aGangs, iGang, aData );
  3165.  
  3166.  
  3167.  
  3168. TrieSetCell( aData[ GangMembers ], aVaultData[ SQLVEx_Key1 ], str_to_num( aVaultData[ SQLVEx_Data ] ) );
  3169.  
  3170.  
  3171.  
  3172. aData[ NumMembers ]++;
  3173.  
  3174.  
  3175.  
  3176. ArraySetArray( g_aGangs, iGang, aData );
  3177.  
  3178. }
  3179.  
  3180. }
  3181.  
  3182.  
  3183.  
  3184. fclose( iFile );
  3185.  
  3186. }
  3187.  
  3188.  
  3189.  
  3190. public SaveGangs()
  3191.  
  3192. {
  3193.  
  3194. new szConfigsDir[ 64 ];
  3195.  
  3196. get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
  3197.  
  3198.  
  3199.  
  3200. add( szConfigsDir, charsmax( szConfigsDir ), "/jb_gangs.ini" );
  3201.  
  3202.  
  3203.  
  3204. if( file_exists( szConfigsDir ) )
  3205.  
  3206. delete_file( szConfigsDir );
  3207.  
  3208.  
  3209.  
  3210. new iFile = fopen( szConfigsDir, "wt" );
  3211.  
  3212.  
  3213.  
  3214. new aData[ GangInfo ];
  3215.  
  3216.  
  3217.  
  3218. new szBuffer[ 256 ];
  3219.  
  3220.  
  3221.  
  3222. for( new i = 0; i < ArraySize( g_aGangs ); i++ )
  3223.  
  3224. {
  3225.  
  3226. ArrayGetArray( g_aGangs, i, aData );
  3227.  
  3228.  
  3229.  
  3230. formatex( szBuffer, charsmax( szBuffer ), "[%s]^n", aData[ GangName ] );
  3231.  
  3232. fputs( iFile, szBuffer );
  3233.  
  3234.  
  3235.  
  3236. formatex( szBuffer, charsmax( szBuffer ), "HP=%i^n", aData[ GangHP ] );
  3237.  
  3238. fputs( iFile, szBuffer );
  3239.  
  3240.  
  3241.  
  3242. formatex( szBuffer, charsmax( szBuffer ), "Stealing=%i^n", aData[ GangStealing ] );
  3243.  
  3244. fputs( iFile, szBuffer );
  3245.  
  3246.  
  3247.  
  3248. formatex( szBuffer, charsmax( szBuffer ), "Gravity=%i^n", aData[ GangGravity ] );
  3249.  
  3250. fputs( iFile, szBuffer );
  3251.  
  3252.  
  3253.  
  3254. formatex( szBuffer, charsmax( szBuffer ), "Stamina=%i^n", aData[ GangStamina ] );
  3255.  
  3256. fputs( iFile, szBuffer );
  3257.  
  3258.  
  3259.  
  3260. formatex( szBuffer, charsmax( szBuffer ), "WeaponDrop=%i^n", aData[ GangWeaponDrop ] );
  3261.  
  3262. fputs( iFile, szBuffer );
  3263.  
  3264.  
  3265.  
  3266. formatex( szBuffer, charsmax( szBuffer ), "Damage=%i^n", aData[ GangDamage ] );
  3267.  
  3268. fputs( iFile, szBuffer );
  3269.  
  3270.  
  3271.  
  3272. formatex( szBuffer, charsmax( szBuffer ), "Kills=%i^n^n", aData[ GangKills ] );
  3273.  
  3274. fputs( iFile, szBuffer );
  3275.  
  3276. }
  3277.  
  3278.  
  3279.  
  3280. fclose( iFile );
  3281.  
  3282. }
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290. set_user_gang( id, iGang, iStatus=STATUS_MEMBER )
  3291.  
  3292. {
  3293.  
  3294. new szAuthID[ 35 ];
  3295.  
  3296. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  3297.  
  3298.  
  3299.  
  3300. new aData[ GangInfo ];
  3301.  
  3302.  
  3303.  
  3304. if( g_iGang[ id ] > -1 )
  3305.  
  3306. {
  3307.  
  3308. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  3309.  
  3310. TrieDeleteKey( aData[ GangMembers ], szAuthID );
  3311.  
  3312. aData[ NumMembers ]--;
  3313.  
  3314. ArraySetArray( g_aGangs, g_iGang[ id ], aData );
  3315.  
  3316.  
  3317.  
  3318. sqlv_remove_ex( g_hVault, szAuthID, aData[ GangName ] );
  3319.  
  3320. }
  3321.  
  3322.  
  3323.  
  3324. if( iGang > -1 )
  3325.  
  3326. {
  3327.  
  3328. ArrayGetArray( g_aGangs, iGang, aData );
  3329.  
  3330. TrieSetCell( aData[ GangMembers ], szAuthID, iStatus );
  3331.  
  3332. aData[ NumMembers ]++;
  3333.  
  3334. ArraySetArray( g_aGangs, iGang, aData );
  3335.  
  3336.  
  3337.  
  3338. sqlv_set_num_ex( g_hVault, szAuthID, aData[ GangName ], iStatus );
  3339.  
  3340. }
  3341.  
  3342.  
  3343.  
  3344. g_iGang[ id ] = iGang;
  3345.  
  3346.  
  3347.  
  3348. return 1;
  3349.  
  3350. }
  3351.  
  3352.  
  3353.  
  3354. get_user_gang( id )
  3355.  
  3356. {
  3357.  
  3358. new szAuthID[ 35 ];
  3359.  
  3360. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  3361.  
  3362.  
  3363.  
  3364. new aData[ GangInfo ];
  3365.  
  3366.  
  3367.  
  3368. for( new i = 0; i < ArraySize( g_aGangs ); i++ )
  3369.  
  3370. {
  3371.  
  3372. ArrayGetArray( g_aGangs, i, aData );
  3373.  
  3374.  
  3375.  
  3376. if( TrieKeyExists( aData[ GangMembers ], szAuthID ) )
  3377.  
  3378. return i;
  3379.  
  3380. }
  3381.  
  3382.  
  3383.  
  3384. return -1;
  3385.  
  3386. }
  3387.  
  3388.  
  3389.  
  3390. getStatus( id, iGang )
  3391.  
  3392. {
  3393.  
  3394. if( !is_user_connected( id ) || iGang == -1 )
  3395.  
  3396. return STATUS_NONE;
  3397.  
  3398.  
  3399.  
  3400. new aData[ GangInfo ];
  3401.  
  3402. ArrayGetArray( g_aGangs, iGang, aData );
  3403.  
  3404.  
  3405.  
  3406. new szAuthID[ 35 ];
  3407.  
  3408. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  3409.  
  3410.  
  3411.  
  3412. new iStatus;
  3413.  
  3414. TrieGetCell( aData[ GangMembers ], szAuthID, iStatus );
  3415.  
  3416.  
  3417.  
  3418. return iStatus;
  3419.  
  3420. }


A hozzászólást 1 alkalommal szerkesztették, utoljára CrB 2014.10.02. 20:29-kor.
témanévre figyelj.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Magyarítás?
HozzászólásElküldve: 2014.10.02. 20:11 
Offline
Őskövület
Avatar

Csatlakozott: 2011.12.28. 00:35
Hozzászólások: 2736
Megköszönt másnak: 56 alkalommal
Megköszönték neki: 275 alkalommal
Rossz helyre nyitottad a témát :D

UI: Fordítás

_________________
****


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Jailbreak banda magyarosítás
HozzászólásElküldve: 2014.10.21. 22:20 
Offline
Lelkes
Avatar

Csatlakozott: 2014.03.28. 20:20
Hozzászólások: 17
Megköszönt másnak: 5 alkalommal
Remélem megvagy elégedve, ha valamit talán elnéztem/elírtam nyugodtan szólj.
SMA Forráskód: [ Mindet kijelol ]
  1. /*
  2.  
  3. Jailbreak Gang System
  4.  
  5. H3avY Ra1n
  6.  
  7.  
  8.  
  9. Description
  10.  
  11. -----------
  12.  
  13. This plugin allows prisoners to create gangs and upgrade specific skills that apply to everybody in the gang.
  14.  
  15.  
  16.  
  17.  
  18.  
  19. Gang Menu
  20.  
  21. ---------
  22.  
  23. Banda keszitese - Allows a user to create a gang by paying money.
  24.  
  25. Invite to Gang - Only the leader of the gang can invite people to the gang.
  26.  
  27. Skills - Opens the skills menu, where any member of the gang can pay money to upgrade their skills.
  28.  
  29. 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)
  30.  
  31. Leave Gang - Allows a player to leave the gang. The leader cannot leave the gang until he transfers leadership to somebody else (explained later).
  32.  
  33. Gang 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.
  34.  
  35. Online Jatekosok - Shows a list of gang members that are currently in the server.
  36.  
  37.  
  38.  
  39.  
  40.  
  41. Skills
  42.  
  43. ------
  44.  
  45. HP - Increased health
  46.  
  47. Stealing - Increased money earnings.
  48.  
  49. Gravity - Lower Gravity
  50.  
  51. Damage - Increased damage
  52.  
  53. Stamina - Gives higher speed to players.
  54.  
  55. Weapon Drop - Chance of making the guard drop the weapon when you knife them. (%1 chance increase per level)
  56.  
  57.  
  58.  
  59.  
  60.  
  61. CVARS
  62.  
  63. -----
  64.  
  65. jb_gang_cost - The cost to create a gang.
  66.  
  67. jb_health_cost - The cost to upgrade gang health.
  68.  
  69. jb_stealing_cost - The cost to upgrade gang money earning.
  70.  
  71. jb_gravity_cost - The cost to upgrade gang gravity.
  72.  
  73. jb_damage_cost - The cost to upgrade gang damage.
  74.  
  75. jb_stamina_cost - The cost to upgrade gang stamina (speed).
  76.  
  77. jb_weapondrop_cost - The cost to upgrade gang weapon drop percentage.
  78.  
  79.  
  80.  
  81. Additionally there are CVars for the max level for each type of upgrade, so replace _cost above with _max.
  82.  
  83. Also there are CVars for the amount per level, so replace _cost above with _per.
  84.  
  85.  
  86.  
  87. jb_points_per_kill - The amount of points you get for a kill
  88.  
  89. jb_headshot_bonus - The amount of points you get for a headshot
  90.  
  91.  
  92.  
  93. jb_max_members - The max amount of members a gang can hold
  94.  
  95. jb_admin_create - Whether or not an admin can create gangs without using points
  96.  
  97.  
  98.  
  99. Credits
  100.  
  101. -------
  102.  
  103. F0RCE - Original Plugin Idea
  104.  
  105. Exolent - SQLVault Include
  106.  
  107. Drekes - Freezetime Fix (I was too lazy) <!-- s:) --><img src=\"{SMILIES_PATH}/icon_e_smile.gif\" alt=\":)\" title=\"mosoly\" /><!-- s:) -->
  108.  
  109.  
  110.  
  111.  
  112.  
  113. Changelog
  114.  
  115. ---------
  116.  
  117. September 26, 2011 - v1.0 - Initial Release
  118.  
  119. September 27, 2011 - v1.01 - Added more cvars, fixed a few bugs.
  120.  
  121. September 28, 2011 - v1.1 - Added gang admins, jb points instead of money, and a few other things I can't remember <!-- s:) --><img src=\"{SMILIES_PATH}/icon_e_smile.gif\" alt=\":)\" title=\"mosoly\" /><!-- s:) -->
  122.  
  123. January 21, 2011 - v1.1.1 - Added a cvar for whether an admin can create a gang without using points.
  124.  
  125. January 23, 2011 - v1.1.2 - Fixed freezetime problem
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132. */
  133.  
  134.  
  135.  
  136. /* Includes */
  137.  
  138.  
  139.  
  140. #include < amxmodx >
  141.  
  142. #include < amxmisc >
  143.  
  144. #include < sqlvault_ex >
  145.  
  146. #include < cstrike >
  147.  
  148. #include < colorchat >
  149.  
  150. #include < hamsandwich >
  151.  
  152. #include < fun >
  153.  
  154.  
  155.  
  156. /* Defines */
  157.  
  158.  
  159.  
  160. #define ADMIN_CREATE ADMIN_LEVEL_B
  161.  
  162.  
  163.  
  164. /* Constants */
  165.  
  166.  
  167.  
  168. new const g_szVersion[ ] = "1.1.2";
  169.  
  170.  
  171.  
  172. enum _:GangInfo
  173.  
  174. {
  175.  
  176. Trie:GangMembers,
  177.  
  178. GangName[ 64 ],
  179.  
  180. GangHP,
  181.  
  182. GangStealing,
  183.  
  184. GangGravity,
  185.  
  186. GangDamage,
  187.  
  188. GangStamina,
  189.  
  190. GangWeaponDrop,
  191.  
  192. GangKills,
  193.  
  194. NumMembers
  195.  
  196. };
  197.  
  198.  
  199.  
  200. enum
  201.  
  202. {
  203.  
  204. VALUE_HP,
  205.  
  206. VALUE_STEALING,
  207.  
  208. VALUE_GRAVITY,
  209.  
  210. VALUE_DAMAGE,
  211.  
  212. VALUE_STAMINA,
  213.  
  214. VALUE_WEAPONDROP,
  215.  
  216. VALUE_KILLS
  217.  
  218. }
  219.  
  220.  
  221.  
  222. enum
  223.  
  224. {
  225.  
  226. STATUS_NONE,
  227.  
  228. STATUS_MEMBER,
  229.  
  230. STATUS_ADMIN,
  231.  
  232. STATUS_LEADER
  233.  
  234. };
  235.  
  236.  
  237.  
  238. new const g_szGangValues[ ][ ] =
  239.  
  240. {
  241.  
  242. "Elet",
  243.  
  244. "Lopas",
  245.  
  246. "Gravitacio",
  247.  
  248. "Sebzes",
  249.  
  250. "Kitartas",
  251.  
  252. "FegyverDobas",
  253.  
  254. "Olesek"
  255.  
  256. };
  257.  
  258.  
  259.  
  260. new const g_szPrefix[ ] = "^04[Banda Mod]^01";
  261.  
  262.  
  263.  
  264. /* Tries */
  265.  
  266.  
  267.  
  268. new Trie:g_tGangNames;
  269.  
  270. new Trie:g_tGangValues;
  271.  
  272.  
  273.  
  274. /* Vault */
  275.  
  276.  
  277.  
  278. new SQLVault:g_hVault;
  279.  
  280. new SQLVault:g_hPointsVault;
  281.  
  282.  
  283.  
  284. /* Arrays */
  285.  
  286.  
  287.  
  288. new Array:g_aGangs;
  289.  
  290.  
  291.  
  292. /* Pcvars */
  293.  
  294.  
  295.  
  296. new g_pCreateCost;
  297.  
  298.  
  299.  
  300. new g_pHealthCost;
  301.  
  302. new g_pStealingCost;
  303.  
  304. new g_pGravityCost;
  305.  
  306. new g_pDamageCost;
  307.  
  308. new g_pStaminaCost;
  309.  
  310. new g_pWeaponDropCost;
  311.  
  312.  
  313.  
  314. new g_pHealthMax;
  315.  
  316. new g_pStealingMax;
  317.  
  318. new g_pGravityMax;
  319.  
  320. new g_pDamageMax;
  321.  
  322. new g_pStaminaMax;
  323.  
  324. new g_pWeaponDropMax;
  325.  
  326.  
  327.  
  328. new g_pHealthPerLevel;
  329.  
  330. new g_pStealingPerLevel;
  331.  
  332. new g_pGravityPerLevel;
  333.  
  334. new g_pDamagePerLevel;
  335.  
  336. new g_pStaminaPerLevel;
  337.  
  338. new g_pWeaponDropPerLevel;
  339.  
  340.  
  341.  
  342. new g_pPointsPerKill;
  343.  
  344. new g_pHeadshotBonus;
  345.  
  346.  
  347.  
  348. new g_pMaxMembers;
  349.  
  350. new g_pAdminCreate;
  351.  
  352.  
  353.  
  354. /* Integers */
  355.  
  356.  
  357.  
  358. new g_iGang[ 33 ];
  359.  
  360. new g_iPoints[ 33 ];
  361.  
  362.  
  363.  
  364.  
  365.  
  366. public plugin_init()
  367.  
  368. {
  369.  
  370. register_plugin( "Jailbreak Gang System", g_szVersion, "H3avY Ra1n" );
  371.  
  372.  
  373.  
  374. g_aGangs = ArrayCreate( GangInfo );
  375.  
  376.  
  377.  
  378. g_tGangValues = TrieCreate();
  379.  
  380. g_tGangNames = TrieCreate();
  381.  
  382.  
  383.  
  384. g_hVault = sqlv_open_local( "jb_gangs", false );
  385.  
  386. sqlv_init_ex( g_hVault );
  387.  
  388.  
  389.  
  390. g_hPointsVault = sqlv_open_local( "jb_points", true );
  391.  
  392.  
  393.  
  394. g_pCreateCost = register_cvar( "jb_gang_cost", "50" );
  395.  
  396. g_pHealthCost = register_cvar( "jb_health_cost", "20" );
  397.  
  398. g_pStealingCost = register_cvar( "jb_stealing_cost", "20" );
  399.  
  400. g_pGravityCost = register_cvar( "jb_gravity_cost", "20" );
  401.  
  402. g_pDamageCost = register_cvar( "jb_damage_cost", "20" );
  403.  
  404. g_pStaminaCost = register_cvar( "jb_stamina_cost", "20" );
  405.  
  406. g_pWeaponDropCost = register_cvar( "jb_weapondrop_cost", "20" );
  407.  
  408.  
  409.  
  410. g_pHealthMax = register_cvar( "jb_health_max", "10" );
  411.  
  412. g_pStealingMax = register_cvar( "jb_stealing_max", "10" );
  413.  
  414. g_pGravityMax = register_cvar( "jb_gravity_max", "10" ); // Max * Gravity Per Level must be LESS than 800
  415.  
  416. g_pDamageMax = register_cvar( "jb_damage_max", "10" );
  417.  
  418. g_pStaminaMax = register_cvar( "jb_stamina_max", "10" );
  419.  
  420. g_pWeaponDropMax = register_cvar( "jb_weapondrop_max", "10" );
  421.  
  422.  
  423.  
  424. g_pHealthPerLevel = register_cvar( "jb_health_per", "10" );
  425.  
  426. g_pStealingPerLevel = register_cvar( "jb_stealing_per", "0.05" );
  427.  
  428. g_pGravityPerLevel = register_cvar( "jb_gravity_per", "50" );
  429.  
  430. g_pDamagePerLevel = register_cvar( "jb_damage_per", "3" );
  431.  
  432. g_pStaminaPerLevel = register_cvar( "jb_stamina_per", "3" );
  433.  
  434. g_pWeaponDropPerLevel = register_cvar( "jb_weapondrop_per", "1" );
  435.  
  436.  
  437.  
  438. g_pPointsPerKill = register_cvar( "jb_points_per_kill", "3" );
  439.  
  440. g_pHeadshotBonus = register_cvar( "jb_headshot_bonus", "2" );
  441.  
  442.  
  443.  
  444. g_pMaxMembers = register_cvar( "jb_max_members", "10" );
  445.  
  446. g_pAdminCreate = register_cvar( "jb_admin_create", "0" ); // Admins can create gangs without points
  447.  
  448.  
  449.  
  450. register_cvar( "jb_gang_version", g_szVersion, FCVAR_SPONLY | FCVAR_SERVER );
  451.  
  452.  
  453.  
  454. register_menu( "Banda Menu", 1023, "GangMenu_Handler" );
  455.  
  456. register_menu( "Kepesseg Menu", 1023, "SkillsMenu_Handler" );
  457.  
  458.  
  459.  
  460. for( new i = 0; i < sizeof g_szGangValues; i++ )
  461.  
  462. {
  463.  
  464. TrieSetCell( g_tGangValues, g_szGangValues[ i ], i );
  465.  
  466. }
  467.  
  468.  
  469.  
  470. RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1 );
  471.  
  472. RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamage_Pre", 0 );
  473.  
  474. RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamage_Post", 1 );
  475.  
  476. RegisterHam( Ham_Item_PreFrame, "player", "Ham_PlayerResetSpeedPost", 1);
  477.  
  478.  
  479.  
  480. register_event( "DeathMsg", "Event_DeathMsg", "a" );
  481.  
  482.  
  483.  
  484. register_clcmd( "say /banda", "Cmd_Gang" );
  485.  
  486. register_clcmd( "gang_name", "Cmd_CreateGang" );
  487.  
  488.  
  489.  
  490. LoadGangs();
  491.  
  492. }
  493.  
  494.  
  495.  
  496. public client_disconnect( id )
  497.  
  498. {
  499.  
  500. g_iGang[ id ] = -1;
  501.  
  502.  
  503.  
  504. new szAuthID[ 35 ];
  505.  
  506. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  507.  
  508.  
  509.  
  510. sqlv_set_num( g_hPointsVault, szAuthID, g_iPoints[ id ] );
  511.  
  512. }
  513.  
  514.  
  515.  
  516. public client_putinserver( id )
  517.  
  518. {
  519.  
  520. g_iGang[ id ] = get_user_gang( id );
  521.  
  522. new szAuthID[ 35 ];
  523.  
  524. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  525.  
  526.  
  527.  
  528. g_iPoints[ id ] = sqlv_get_num( g_hPointsVault, szAuthID );
  529.  
  530. }
  531.  
  532.  
  533.  
  534. public plugin_end()
  535.  
  536. {
  537.  
  538. SaveGangs();
  539.  
  540. sqlv_close( g_hVault );
  541.  
  542. }
  543.  
  544.  
  545.  
  546. public Ham_PlayerSpawn_Post( id )
  547.  
  548. {
  549.  
  550. if( !is_user_alive( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  551.  
  552. return HAM_IGNORED;
  553.  
  554.  
  555.  
  556. if( g_iGang[ id ] == -1 )
  557.  
  558. {
  559.  
  560. return HAM_IGNORED;
  561.  
  562. }
  563.  
  564.  
  565.  
  566. new aData[ GangInfo ];
  567.  
  568. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  569.  
  570.  
  571.  
  572. new iHealth = 100 + aData[ GangHP ] * get_pcvar_num( g_pHealthPerLevel );
  573.  
  574. set_user_health( id, iHealth );
  575.  
  576.  
  577.  
  578. new iGravity = 800 - ( get_pcvar_num( g_pGravityPerLevel ) * aData[ GangGravity ] );
  579.  
  580. set_user_gravity( id, float( iGravity ) / 800.0 );
  581.  
  582.  
  583.  
  584. return HAM_IGNORED;
  585.  
  586. }
  587.  
  588.  
  589.  
  590. public Ham_TakeDamage_Pre( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
  591.  
  592. {
  593.  
  594. if( !is_user_alive( iAttacker ) || cs_get_user_team( iAttacker ) != CS_TEAM_T )
  595.  
  596. return HAM_IGNORED;
  597.  
  598.  
  599.  
  600. if( g_iGang[ iAttacker ] == -1 )
  601.  
  602. return HAM_IGNORED;
  603.  
  604.  
  605.  
  606. new aData[ GangInfo ];
  607.  
  608. ArrayGetArray( g_aGangs, g_iGang[ iAttacker ], aData );
  609.  
  610.  
  611.  
  612. SetHamParamFloat( 4, flDamage + ( get_pcvar_num( g_pDamagePerLevel ) * ( aData[ GangDamage ] ) ) );
  613.  
  614.  
  615.  
  616. return HAM_IGNORED;
  617.  
  618. }
  619.  
  620.  
  621.  
  622. public Ham_TakeDamage_Post( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
  623.  
  624. {
  625.  
  626. if( !is_user_alive( iAttacker ) || g_iGang[ iAttacker ] == -1 || get_user_weapon( iAttacker ) != CSW_KNIFE || cs_get_user_team( iAttacker ) != CS_TEAM_T )
  627.  
  628. {
  629.  
  630. return HAM_IGNORED;
  631.  
  632. }
  633.  
  634.  
  635.  
  636. new aData[ GangInfo ];
  637.  
  638. ArrayGetArray( g_aGangs, g_iGang[ iAttacker ], aData );
  639.  
  640.  
  641.  
  642. new iChance = aData[ GangWeaponDrop ] * get_pcvar_num( g_pWeaponDropPerLevel );
  643.  
  644.  
  645.  
  646. if( iChance == 0 )
  647.  
  648. return HAM_IGNORED;
  649.  
  650.  
  651.  
  652. new bool:bDrop = ( random_num( 1, 100 ) <= iChance );
  653.  
  654.  
  655.  
  656. if( bDrop )
  657.  
  658. client_cmd( iVictim, "drop" );
  659.  
  660.  
  661.  
  662. return HAM_IGNORED;
  663.  
  664. }
  665.  
  666.  
  667.  
  668. public Ham_PlayerResetSpeedPost( id )
  669.  
  670. {
  671.  
  672. if( g_iGang[ id ] == -1 || !is_user_alive( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  673.  
  674. {
  675.  
  676. return HAM_IGNORED;
  677.  
  678. }
  679.  
  680.  
  681.  
  682. new aData[ GangInfo ];
  683.  
  684. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  685.  
  686.  
  687.  
  688. if( aData[ GangStamina ] > 0 && get_user_maxspeed( id ) > 1.0 )
  689.  
  690. set_user_maxspeed( id, 250.0 + ( aData[ GangStamina ] * get_pcvar_num( g_pStaminaPerLevel ) ) );
  691.  
  692.  
  693.  
  694. return HAM_IGNORED;
  695.  
  696. }
  697.  
  698.  
  699.  
  700. public Event_DeathMsg()
  701.  
  702. {
  703.  
  704. new iKiller = read_data( 1 );
  705.  
  706. new iVictim = read_data( 2 );
  707.  
  708.  
  709.  
  710. if( !is_user_alive( iKiller ) || cs_get_user_team( iVictim ) != CS_TEAM_CT || cs_get_user_team( iKiller ) != CS_TEAM_T )
  711.  
  712. return PLUGIN_CONTINUE;
  713.  
  714.  
  715.  
  716. new iTotal = get_pcvar_num( g_pPointsPerKill ) + ( bool:read_data( 3 ) ? get_pcvar_num( g_pHeadshotBonus ) : 0 );
  717.  
  718.  
  719.  
  720. if( g_iGang[ iKiller ] > -1 )
  721.  
  722. {
  723.  
  724. new aData[ GangInfo ];
  725.  
  726. ArrayGetArray( g_aGangs, g_iGang[ iKiller ], aData );
  727.  
  728. aData[ GangKills ]++;
  729.  
  730. ArraySetArray( g_aGangs, g_iGang[ iKiller ], aData );
  731.  
  732.  
  733.  
  734. iTotal += iTotal * ( aData[ GangStealing ] * get_pcvar_num( g_pStealingPerLevel ) );
  735.  
  736. }
  737.  
  738.  
  739.  
  740. g_iPoints[ iKiller ] += iTotal;
  741.  
  742.  
  743.  
  744. return PLUGIN_CONTINUE;
  745.  
  746. }
  747.  
  748.  
  749.  
  750. public Cmd_Gang( id )
  751.  
  752. {
  753.  
  754. if( !is_user_connected( id ) || cs_get_user_team( id ) != CS_TEAM_T )
  755.  
  756. {
  757.  
  758. ColorChat( id, NORMAL, "%s Csak ^03rabok ^01tudjak hasznalni ezt a menut.", g_szPrefix );
  759.  
  760. return PLUGIN_HANDLED;
  761.  
  762. }
  763.  
  764.  
  765.  
  766. static szMenu[ 512 ], iLen, aData[ GangInfo ], iKeys, iStatus;
  767.  
  768.  
  769.  
  770. iKeys = MENU_KEY_0 | MENU_KEY_4;
  771.  
  772.  
  773.  
  774. iStatus = getStatus( id, g_iGang[ id ] );
  775.  
  776.  
  777.  
  778. if( g_iGang[ id ] > -1 )
  779.  
  780. {
  781.  
  782. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  783.  
  784. iLen = formatex( szMenu, charsmax( szMenu ), "\yBanda Menu^n\wJelenlegi Banda:\y %s^n", aData[ GangName ] );
  785.  
  786. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\yJB Pontok: \w%i^n^n", g_iPoints[ id ] );
  787.  
  788. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r1. \dBanda letrehozasa [%i Pont]^n", get_pcvar_num( g_pCreateCost ) );
  789.  
  790. }
  791.  
  792.  
  793.  
  794. else
  795.  
  796. {
  797.  
  798. iLen = formatex( szMenu, charsmax( szMenu ), "\yBanda Menu^n\wJelenlegi Banda:\r Nincs^n" );
  799.  
  800. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\yJB Pontok: \w%i^n^n", g_iPoints[ id ] );
  801.  
  802. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r1. \wBanda letrehozasa [%i Pont]^n", get_pcvar_num( g_pCreateCost ) );
  803.  
  804.  
  805.  
  806. iKeys |= MENU_KEY_1;
  807.  
  808. }
  809.  
  810.  
  811.  
  812.  
  813.  
  814. if( iStatus > STATUS_MEMBER && g_iGang[ id ] > -1 && get_pcvar_num( g_pMaxMembers ) > aData[ NumMembers ] )
  815.  
  816. {
  817.  
  818. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r2. \wJatekos meghivasa a bandaba^n" );
  819.  
  820. iKeys |= MENU_KEY_2;
  821.  
  822. }
  823.  
  824. else
  825.  
  826. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r2. \dJatekos meghivasa a bandaba^n" );
  827.  
  828.  
  829.  
  830. if( g_iGang[ id ] > -1 )
  831.  
  832. {
  833.  
  834. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r3. \wKepessegek^n" );
  835.  
  836. iKeys |= MENU_KEY_3;
  837.  
  838. }
  839.  
  840.  
  841.  
  842. else
  843.  
  844. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r3. \dKepessegek^n" );
  845.  
  846.  
  847.  
  848. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r4. \wTop-10^n" );
  849.  
  850.  
  851.  
  852. if( g_iGang[ id ] > -1 )
  853.  
  854. {
  855.  
  856. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r5. \wBanda Elhagyasa^n" );
  857.  
  858. iKeys |= MENU_KEY_5;
  859.  
  860. }
  861.  
  862.  
  863.  
  864. else
  865.  
  866. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r5. \dBanda Elhagyasa^n" );
  867.  
  868.  
  869.  
  870.  
  871.  
  872. if( iStatus > STATUS_MEMBER )
  873.  
  874. {
  875.  
  876. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r6. \wBanda Admin Menu^n" );
  877.  
  878. iKeys |= MENU_KEY_6;
  879.  
  880. }
  881.  
  882.  
  883.  
  884. else
  885.  
  886. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r6. \dBanda Amdmin Menu^n" );
  887.  
  888.  
  889.  
  890. if( g_iGang[ id ] > -1 )
  891.  
  892. {
  893.  
  894. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r7. \wOnline Tagok^n" );
  895.  
  896. iKeys |= MENU_KEY_7;
  897.  
  898. }
  899.  
  900.  
  901.  
  902. else
  903.  
  904. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "\r7. \dOnline Tagok^n" );
  905.  
  906.  
  907.  
  908. iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - iLen, "^n\r0. \wKilepes" );
  909.  
  910.  
  911.  
  912. show_menu( id, iKeys, szMenu, -1, "Banda Menu" );
  913.  
  914.  
  915.  
  916. return PLUGIN_CONTINUE;
  917.  
  918. }
  919.  
  920.  
  921.  
  922. public GangMenu_Handler( id, iKey )
  923.  
  924. {
  925.  
  926. switch( ( iKey + 1 ) % 10 )
  927.  
  928. {
  929.  
  930. case 0: return PLUGIN_HANDLED;
  931.  
  932.  
  933.  
  934. case 1:
  935.  
  936. {
  937.  
  938. if( get_pcvar_num( g_pAdminCreate ) && get_user_flags( id ) & ADMIN_CREATE )
  939.  
  940. {
  941.  
  942. client_cmd( id, "messagemode gang_name" );
  943.  
  944. }
  945.  
  946.  
  947.  
  948. else if( g_iPoints[ id ] < get_pcvar_num( g_pCreateCost ) )
  949.  
  950. {
  951.  
  952. ColorChat( id, NORMAL, "%s Nincs eleg pontod, hogy bandat hozz letre!", g_szPrefix );
  953.  
  954. return PLUGIN_HANDLED;
  955.  
  956. }
  957.  
  958.  
  959.  
  960. else
  961.  
  962. client_cmd( id, "messagemode gang_name" );
  963.  
  964. }
  965.  
  966.  
  967.  
  968. case 2:
  969.  
  970. {
  971.  
  972. ShowInviteMenu( id );
  973.  
  974. }
  975.  
  976.  
  977.  
  978. case 3:
  979.  
  980. {
  981.  
  982. ShowSkillsMenu( id );
  983.  
  984. }
  985.  
  986.  
  987.  
  988. case 4:
  989.  
  990. {
  991.  
  992. Cmd_Top10( id );
  993.  
  994. }
  995.  
  996.  
  997.  
  998. case 5:
  999.  
  1000. {
  1001.  
  1002. ShowLeaveConfirmMenu( id );
  1003.  
  1004. }
  1005.  
  1006.  
  1007.  
  1008. case 6:
  1009.  
  1010. {
  1011.  
  1012. ShowLeaderMenu( id );
  1013.  
  1014. }
  1015.  
  1016.  
  1017.  
  1018. case 7:
  1019.  
  1020. {
  1021.  
  1022. ShowMembersMenu( id );
  1023.  
  1024. }
  1025.  
  1026. }
  1027.  
  1028.  
  1029.  
  1030. return PLUGIN_HANDLED;
  1031.  
  1032. }
  1033.  
  1034.  
  1035.  
  1036. public Cmd_CreateGang( id )
  1037.  
  1038. {
  1039.  
  1040. new bool:bAdmin = false;
  1041.  
  1042.  
  1043.  
  1044. if( get_pcvar_num( g_pAdminCreate ) && get_user_flags( id ) & ADMIN_CREATE )
  1045.  
  1046. {
  1047.  
  1048. bAdmin = true;
  1049.  
  1050. }
  1051.  
  1052.  
  1053.  
  1054. else if( g_iPoints[ id ] < get_pcvar_num( g_pCreateCost ) )
  1055.  
  1056. {
  1057.  
  1058. ColorChat( id, NORMAL, "%s Nincs eleg pontod, hogy bandat hozz letre.", g_szPrefix );
  1059.  
  1060. return PLUGIN_HANDLED;
  1061.  
  1062. }
  1063.  
  1064.  
  1065.  
  1066. else if( g_iGang[ id ] > -1 )
  1067.  
  1068. {
  1069.  
  1070. ColorChat( id, NORMAL, "%s Nem hozhatsz letre bandat, mivel mar benne vagy egyben!", g_szPrefix );
  1071.  
  1072. return PLUGIN_HANDLED;
  1073.  
  1074. }
  1075.  
  1076.  
  1077.  
  1078. else if( cs_get_user_team( id ) != CS_TEAM_T )
  1079.  
  1080. {
  1081.  
  1082. ColorChat( id, NORMAL, "%s Csak ^03rabok ^01tudnak bandat letrehozni!", g_szPrefix );
  1083.  
  1084. return PLUGIN_HANDLED;
  1085.  
  1086. }
  1087.  
  1088.  
  1089.  
  1090. new szArgs[ 60 ];
  1091.  
  1092. read_args( szArgs, charsmax( szArgs ) );
  1093.  
  1094.  
  1095.  
  1096. remove_quotes( szArgs );
  1097.  
  1098.  
  1099.  
  1100. if( TrieKeyExists( g_tGangNames, szArgs ) )
  1101.  
  1102. {
  1103.  
  1104. ColorChat( id, NORMAL, "%s Ez a bandanev mar foglalt.", g_szPrefix );
  1105.  
  1106. Cmd_Gang( id );
  1107.  
  1108. return PLUGIN_HANDLED;
  1109.  
  1110. }
  1111.  
  1112.  
  1113.  
  1114. new aData[ GangInfo ];
  1115.  
  1116.  
  1117.  
  1118. aData[ GangName ] = szArgs;
  1119.  
  1120. aData[ GangHP ] = 0;
  1121.  
  1122. aData[ GangStealing ] = 0;
  1123.  
  1124. aData[ GangGravity ] = 0;
  1125.  
  1126. aData[ GangStamina ] = 0;
  1127.  
  1128. aData[ GangWeaponDrop ] = 0;
  1129.  
  1130. aData[ GangDamage ] = 0;
  1131.  
  1132. aData[ NumMembers ] = 0;
  1133.  
  1134. aData[ GangMembers ] = _:TrieCreate();
  1135.  
  1136.  
  1137.  
  1138. ArrayPushArray( g_aGangs, aData );
  1139.  
  1140.  
  1141.  
  1142. if( !bAdmin )
  1143.  
  1144. g_iPoints[ id ] -= get_pcvar_num( g_pCreateCost );
  1145.  
  1146.  
  1147.  
  1148. set_user_gang( id, ArraySize( g_aGangs ) - 1, STATUS_LEADER );
  1149.  
  1150.  
  1151.  
  1152. ColorChat( id, NORMAL, "%s Sikeresen letrehoztal egy bandat '^03%s^01'.", g_szPrefix, szArgs );
  1153.  
  1154.  
  1155.  
  1156. return PLUGIN_HANDLED;
  1157.  
  1158. }
  1159.  
  1160.  
  1161.  
  1162. public ShowInviteMenu( id )
  1163.  
  1164. {
  1165.  
  1166. new iPlayers[ 32 ], iNum;
  1167.  
  1168. get_players( iPlayers, iNum );
  1169.  
  1170.  
  1171.  
  1172. new szInfo[ 6 ], hMenu;
  1173.  
  1174. hMenu = menu_create( "Jatekos meghivasa:", "InviteMenu_Handler" );
  1175.  
  1176. new szName[ 32 ];
  1177.  
  1178.  
  1179.  
  1180. for( new i = 0, iPlayer; i < iNum; i++ )
  1181.  
  1182. {
  1183.  
  1184. iPlayer = iPlayers[ i ];
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190. if( iPlayer == id || g_iGang[ iPlayer ] == g_iGang[ id ] || cs_get_user_team( iPlayer ) != CS_TEAM_T )
  1191.  
  1192. continue;
  1193.  
  1194.  
  1195.  
  1196. get_user_name( iPlayer, szName, charsmax( szName ) );
  1197.  
  1198.  
  1199.  
  1200. num_to_str( iPlayer, szInfo, charsmax( szInfo ) );
  1201.  
  1202.  
  1203.  
  1204. menu_additem( hMenu, szName, szInfo );
  1205.  
  1206. }
  1207.  
  1208.  
  1209.  
  1210. menu_display( id, hMenu, 0 );
  1211.  
  1212. }
  1213.  
  1214.  
  1215.  
  1216. public InviteMenu_Handler( id, hMenu, iItem )
  1217.  
  1218. {
  1219.  
  1220. if( iItem == MENU_EXIT )
  1221.  
  1222. {
  1223.  
  1224. Cmd_Gang( id );
  1225.  
  1226. return PLUGIN_HANDLED;
  1227.  
  1228. }
  1229.  
  1230.  
  1231.  
  1232. new szData[ 6 ], iAccess, hCallback, szName[ 32 ];
  1233.  
  1234. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, 31, hCallback );
  1235.  
  1236.  
  1237.  
  1238. new iPlayer = str_to_num( szData );
  1239.  
  1240.  
  1241.  
  1242. if( !is_user_connected( iPlayer ) )
  1243.  
  1244. return PLUGIN_HANDLED;
  1245.  
  1246.  
  1247.  
  1248. ShowInviteConfirmMenu( id, iPlayer );
  1249.  
  1250.  
  1251.  
  1252. ColorChat( id, NORMAL, "%s Sikeresen meghivtad %s , hogy csatlakozzon a bandahoz.", g_szPrefix, szName );
  1253.  
  1254.  
  1255.  
  1256. Cmd_Gang( id );
  1257.  
  1258. return PLUGIN_HANDLED;
  1259.  
  1260. }
  1261.  
  1262.  
  1263.  
  1264. public ShowInviteConfirmMenu( id, iPlayer )
  1265.  
  1266. {
  1267.  
  1268. new szName[ 32 ];
  1269.  
  1270. get_user_name( id, szName, charsmax( szName ) );
  1271.  
  1272.  
  1273.  
  1274. new aData[ GangInfo ];
  1275.  
  1276. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  1277.  
  1278.  
  1279.  
  1280. new szMenuTitle[ 128 ];
  1281.  
  1282. formatex( szMenuTitle, charsmax( szMenuTitle ), "%s Meghivott, hogy csatlakozz %s", szName, aData[ GangName ] );
  1283.  
  1284. new hMenu = menu_create( szMenuTitle, "InviteConfirmMenu_Handler" );
  1285.  
  1286.  
  1287.  
  1288. new szInfo[ 6 ];
  1289.  
  1290. num_to_str( g_iGang[ id ], szInfo, 5 );
  1291.  
  1292.  
  1293.  
  1294. menu_additem( hMenu, "Meghivas Elfogadasa", szInfo );
  1295.  
  1296. menu_additem( hMenu, "Meghivas Elutasitasa", "-1" );
  1297.  
  1298.  
  1299.  
  1300. menu_display( iPlayer, hMenu, 0 );
  1301.  
  1302. }
  1303.  
  1304.  
  1305.  
  1306. public InviteConfirmMenu_Handler( id, hMenu, iItem )
  1307.  
  1308. {
  1309.  
  1310. if( iItem == MENU_EXIT )
  1311.  
  1312. return PLUGIN_HANDLED;
  1313.  
  1314.  
  1315.  
  1316. new szData[ 6 ], iAccess, hCallback;
  1317.  
  1318. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  1319.  
  1320.  
  1321.  
  1322. new iGang = str_to_num( szData );
  1323.  
  1324.  
  1325.  
  1326. if( iGang == -1 )
  1327.  
  1328. return PLUGIN_HANDLED;
  1329.  
  1330.  
  1331.  
  1332. if( getStatus( id, g_iGang[ id ] ) == STATUS_LEADER )
  1333.  
  1334. {
  1335.  
  1336. ColorChat( id, NORMAL, "%s Nem hagyhatod el a bandat, mert te vagy a vezere.", g_szPrefix );
  1337.  
  1338. return PLUGIN_HANDLED;
  1339.  
  1340. }
  1341.  
  1342.  
  1343.  
  1344. set_user_gang( id, iGang );
  1345.  
  1346.  
  1347.  
  1348. new aData[ GangInfo ];
  1349.  
  1350. ArrayGetArray( g_aGangs, iGang, aData );
  1351.  
  1352.  
  1353.  
  1354. ColorChat( id, NORMAL, "%s Sikeresen csatlakoztal a bandahoz ^03%s^01.", g_szPrefix, aData[ GangName ] );
  1355.  
  1356.  
  1357.  
  1358. return PLUGIN_HANDLED;
  1359.  
  1360. }
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366. public ShowSkillsMenu( id )
  1367.  
  1368. {
  1369.  
  1370. static szMenu[ 512 ], iLen, iKeys, aData[ GangInfo ];
  1371.  
  1372.  
  1373.  
  1374. if( !iKeys )
  1375.  
  1376. {
  1377.  
  1378. iKeys = MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_5 | MENU_KEY_6 | MENU_KEY_0;
  1379.  
  1380. }
  1381.  
  1382.  
  1383.  
  1384. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  1385.  
  1386.  
  1387.  
  1388. iLen = formatex( szMenu, charsmax( szMenu ), "\yKepesseg Menu^n^n" );
  1389.  
  1390. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r1. \wElet Fejlesztes [\rAr: \y%i Pontok\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pHealthCost ), aData[ GangHP ], get_pcvar_num( g_pHealthMax ) );
  1391.  
  1392. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r2. \wLopas Fejlesztes [\rAr: \y%i Pontok\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pStealingCost ), aData[ GangStealing ], get_pcvar_num( g_pStealingMax ) );
  1393.  
  1394. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r3. \wGravitacio Fejlesztes [\rAr: \y%i Pontok\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pGravityCost ), aData[ GangGravity ], get_pcvar_num( g_pGravityMax ) );
  1395.  
  1396. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r4. \wSebzes Fejlesztes [\rAr: \y%i Pontok\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pDamageCost ), aData[ GangDamage ], get_pcvar_num( g_pDamageMax ) );
  1397.  
  1398. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r5. \wFegyver Dobas Fejlesztes [\rAr: \y%i Pontok\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pWeaponDropCost ), aData[ GangWeaponDrop ], get_pcvar_num( g_pWeaponDropMax ) );
  1399.  
  1400. iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r6. \wSebesseg Fejlesztes [\rAr: \y%i Pontok\w] \y[Szint:%i/%i]^n", get_pcvar_num( g_pStaminaCost ), aData[ GangStamina ], get_pcvar_num( g_pStaminaMax ) );
  1401.  
  1402.  
  1403.  
  1404. iLen += formatex( szMenu[ iLen ], 511 - iLen, "^n\r0. \wKilepes" );
  1405.  
  1406.  
  1407.  
  1408. show_menu( id, iKeys, szMenu, -1, "Kepesseg Menu" );
  1409.  
  1410. }
  1411.  
  1412.  
  1413.  
  1414. public SkillsMenu_Handler( id, iKey )
  1415.  
  1416. {
  1417.  
  1418. new aData[ GangInfo ];
  1419.  
  1420. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  1421.  
  1422.  
  1423.  
  1424. switch( ( iKey + 1 ) % 10 )
  1425.  
  1426. {
  1427.  
  1428. case 0:
  1429.  
  1430. {
  1431.  
  1432. Cmd_Gang( id );
  1433.  
  1434. return PLUGIN_HANDLED;
  1435.  
  1436. }
  1437.  
  1438.  
  1439.  
  1440. case 1:
  1441.  
  1442. {
  1443.  
  1444. if( aData[ GangHP ] == get_pcvar_num( g_pHealthMax ) )
  1445.  
  1446. {
  1447.  
  1448. ColorChat( id, NORMAL, "%s A bandad elerte a maximalis szintet arra a kepessegre.", g_szPrefix );
  1449.  
  1450. ShowSkillsMenu( id );
  1451.  
  1452. return PLUGIN_HANDLED;
  1453.  
  1454. }
  1455.  
  1456.  
  1457.  
  1458. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pHealthCost );
  1459.  
  1460.  
  1461.  
  1462. if( iRemaining < 0 )
  1463.  
  1464. {
  1465.  
  1466. ColorChat( id, NORMAL, "%s Nincs eleg pontod a fejleszteshez.", g_szPrefix );
  1467.  
  1468. ShowSkillsMenu( id );
  1469.  
  1470. return PLUGIN_HANDLED;
  1471.  
  1472. }
  1473.  
  1474.  
  1475.  
  1476. aData[ GangHP ]++;
  1477.  
  1478.  
  1479.  
  1480. g_iPoints[ id ] = iRemaining;
  1481.  
  1482. }
  1483.  
  1484.  
  1485.  
  1486. case 2:
  1487.  
  1488. {
  1489.  
  1490. if( aData[ GangStealing ] == get_pcvar_num( g_pStealingMax ) )
  1491.  
  1492. {
  1493.  
  1494. ColorChat( id, NORMAL, "%s A bandad elerte a maximalis szintet arra a kepessegre.", g_szPrefix );
  1495.  
  1496. ShowSkillsMenu( id );
  1497.  
  1498. return PLUGIN_HANDLED;
  1499.  
  1500. }
  1501.  
  1502.  
  1503.  
  1504. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pStealingCost );
  1505.  
  1506.  
  1507.  
  1508. if( iRemaining < 0 )
  1509.  
  1510. {
  1511.  
  1512. ColorChat( id, NORMAL, "%s Nincs eleg pontod a fejleszteshez.", g_szPrefix );
  1513.  
  1514. ShowSkillsMenu( id );
  1515.  
  1516. return PLUGIN_HANDLED;
  1517.  
  1518. }
  1519.  
  1520.  
  1521.  
  1522. aData[ GangStealing ]++;
  1523.  
  1524.  
  1525.  
  1526. g_iPoints[ id ] = iRemaining;
  1527.  
  1528. }
  1529.  
  1530.  
  1531.  
  1532. case 3:
  1533.  
  1534. {
  1535.  
  1536. if( aData[ GangGravity ] == get_pcvar_num( g_pGravityMax ) )
  1537.  
  1538. {
  1539.  
  1540. ColorChat( id, NORMAL, "%s A bandad elerte a maximalis szintet arra a kepessegre.", g_szPrefix );
  1541.  
  1542. ShowSkillsMenu( id );
  1543.  
  1544. return PLUGIN_HANDLED;
  1545.  
  1546. }
  1547.  
  1548.  
  1549.  
  1550. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pGravityCost );
  1551.  
  1552.  
  1553.  
  1554. if( iRemaining < 0 )
  1555.  
  1556. {
  1557.  
  1558. ColorChat( id, NORMAL, "%s Nincs eleg pontod a fejleszteshez.", g_szPrefix );
  1559.  
  1560. ShowSkillsMenu( id );
  1561.  
  1562. return PLUGIN_HANDLED;
  1563.  
  1564. }
  1565.  
  1566.  
  1567.  
  1568. aData[ GangGravity ]++;
  1569.  
  1570.  
  1571.  
  1572. g_iPoints[ id ] = iRemaining;
  1573.  
  1574. }
  1575.  
  1576.  
  1577.  
  1578. case 4:
  1579.  
  1580. {
  1581.  
  1582. if( aData[ GangDamage ] == get_pcvar_num( g_pDamageMax ) )
  1583.  
  1584. {
  1585.  
  1586. ColorChat( id, NORMAL, "%s A bandad elerte a maximalis szintet arra a kepessegre.", g_szPrefix );
  1587.  
  1588. ShowSkillsMenu( id );
  1589.  
  1590. return PLUGIN_HANDLED;
  1591.  
  1592. }
  1593.  
  1594.  
  1595.  
  1596. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pDamageCost );
  1597.  
  1598.  
  1599.  
  1600. if( iRemaining < 0 )
  1601.  
  1602. {
  1603.  
  1604. ColorChat( id, NORMAL, "%s Nincs eleg pontod a fejleszteshez.", g_szPrefix );
  1605.  
  1606. ShowSkillsMenu( id );
  1607.  
  1608. return PLUGIN_HANDLED;
  1609.  
  1610. }
  1611.  
  1612.  
  1613.  
  1614. aData[ GangDamage ]++;
  1615.  
  1616.  
  1617.  
  1618. g_iPoints[ id ] = iRemaining;
  1619.  
  1620. }
  1621.  
  1622.  
  1623.  
  1624. case 5:
  1625.  
  1626. {
  1627.  
  1628. if( aData[ GangWeaponDrop ] == get_pcvar_num( g_pWeaponDropMax ) )
  1629.  
  1630. {
  1631.  
  1632. ColorChat( id, NORMAL, "%s A bandad elerte a maximalis szintet arra a kepessegre.", g_szPrefix );
  1633.  
  1634. ShowSkillsMenu( id );
  1635.  
  1636. return PLUGIN_HANDLED;
  1637.  
  1638. }
  1639.  
  1640.  
  1641.  
  1642. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pWeaponDropCost );
  1643.  
  1644.  
  1645.  
  1646. if( iRemaining < 0 )
  1647.  
  1648. {
  1649.  
  1650. ColorChat( id, NORMAL, "%s Nincs eleg pontod a fejleszteshez.", g_szPrefix );
  1651.  
  1652. ShowSkillsMenu( id );
  1653.  
  1654. return PLUGIN_HANDLED;
  1655.  
  1656. }
  1657.  
  1658.  
  1659.  
  1660. aData[ GangWeaponDrop ]++;
  1661.  
  1662.  
  1663.  
  1664. g_iPoints[ id ] = iRemaining;
  1665.  
  1666. }
  1667.  
  1668.  
  1669.  
  1670. case 6:
  1671.  
  1672. {
  1673.  
  1674. if( aData[ GangStamina ] == get_pcvar_num( g_pStaminaMax ) )
  1675.  
  1676. {
  1677.  
  1678. ColorChat( id, NORMAL, "%s A bandad elerte a maximalis szintet arra a kepessegre.", g_szPrefix );
  1679.  
  1680. ShowSkillsMenu( id );
  1681.  
  1682. return PLUGIN_HANDLED;
  1683.  
  1684. }
  1685.  
  1686.  
  1687.  
  1688. new iRemaining = g_iPoints[ id ] - get_pcvar_num( g_pStaminaCost );
  1689.  
  1690.  
  1691.  
  1692. if( iRemaining < 0 )
  1693.  
  1694. {
  1695.  
  1696. ColorChat( id, NORMAL, "%s Nincs eleg pontod a fejleszteshez.", g_szPrefix );
  1697.  
  1698. ShowSkillsMenu( id );
  1699.  
  1700. return PLUGIN_HANDLED;
  1701.  
  1702. }
  1703.  
  1704.  
  1705.  
  1706. aData[ GangStamina ]++;
  1707.  
  1708.  
  1709.  
  1710. g_iPoints[ id ] = iRemaining;
  1711.  
  1712. }
  1713.  
  1714. }
  1715.  
  1716.  
  1717.  
  1718. ArraySetArray( g_aGangs, g_iGang[ id ], aData );
  1719.  
  1720.  
  1721.  
  1722. new iPlayers[ 32 ], iNum, iPlayer;
  1723.  
  1724. new szName[ 32 ];
  1725.  
  1726. get_players( iPlayers, iNum );
  1727.  
  1728.  
  1729.  
  1730. for( new i = 0; i < iNum; i++ )
  1731.  
  1732. {
  1733.  
  1734. iPlayer = iPlayers[ i ];
  1735.  
  1736.  
  1737.  
  1738. if( iPlayer == id || g_iGang[ iPlayer ] != g_iGang[ id ] )
  1739.  
  1740. continue;
  1741.  
  1742.  
  1743.  
  1744. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01fejlesztette a banda kepessegeit.", g_szPrefix, szName );
  1745.  
  1746. }
  1747.  
  1748.  
  1749.  
  1750. ColorChat( id, NORMAL, "%s Sikeresen fejlesztetted a bandad.", g_szPrefix );
  1751.  
  1752.  
  1753.  
  1754. ShowSkillsMenu( id );
  1755.  
  1756.  
  1757.  
  1758. return PLUGIN_HANDLED;
  1759.  
  1760. }
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766. public Cmd_Top10( id )
  1767.  
  1768. {
  1769.  
  1770. new iSize = ArraySize( g_aGangs );
  1771.  
  1772.  
  1773.  
  1774. new iOrder[ 100 ][ 2 ];
  1775.  
  1776.  
  1777.  
  1778. new aData[ GangInfo ];
  1779.  
  1780.  
  1781.  
  1782. for( new i = 0; i < iSize; i++ )
  1783.  
  1784. {
  1785.  
  1786. ArrayGetArray( g_aGangs, i, aData );
  1787.  
  1788.  
  1789.  
  1790. iOrder[ i ][ 0 ] = i;
  1791.  
  1792. iOrder[ i ][ 1 ] = aData[ GangKills ];
  1793.  
  1794. }
  1795.  
  1796.  
  1797.  
  1798. SortCustom2D( iOrder, iSize, "Top10_Sort" );
  1799.  
  1800.  
  1801.  
  1802. new szMessage[ 2048 ];
  1803.  
  1804. formatex( szMessage, charsmax( szMessage ), "<body bgcolor=#000000><font color=#FFB000><pre>" );
  1805.  
  1806. format( szMessage, charsmax( szMessage ), "%s%2s %-22.22s %7s %4s %10s %9s %9s %11s %8s^n", szMessage, "#", "Nev", "Olesek", "Elet", "Lopas",
  1807.  
  1808. "Gravitacio", "Kitartas", "FegyverDobas", "Sebzes" );
  1809.  
  1810.  
  1811.  
  1812. for( new i = 0; i < min( 10, iSize ); i++ )
  1813.  
  1814. {
  1815.  
  1816. ArrayGetArray( g_aGangs, iOrder[ i ][ 0 ], aData );
  1817.  
  1818.  
  1819.  
  1820. format( szMessage, charsmax( szMessage ), "%s%-2d %22.22s %7d %4d %10d %9d %9d %11d %8d^n", szMessage, i + 1, aData[ GangName ],
  1821.  
  1822. aData[ GangKills ], aData[ GangHP ], aData[ GangStealing ], aData[ GangGravity ], aData[ GangStamina], aData[ GangWeaponDrop ], aData[ GangDamage ] );
  1823.  
  1824. }
  1825.  
  1826.  
  1827.  
  1828. show_motd( id, szMessage, "Banda Top 10" );
  1829.  
  1830. }
  1831.  
  1832.  
  1833.  
  1834. public Top10_Sort( const iElement1[ ], const iElement2[ ], const iArray[ ], szData[], iSize )
  1835.  
  1836. {
  1837.  
  1838. if( iElement1[ 1 ] > iElement2[ 1 ] )
  1839.  
  1840. return -1;
  1841.  
  1842.  
  1843.  
  1844. else if( iElement1[ 1 ] < iElement2[ 1 ] )
  1845.  
  1846. return 1;
  1847.  
  1848.  
  1849.  
  1850. return 0;
  1851.  
  1852. }
  1853.  
  1854.  
  1855.  
  1856. public ShowLeaveConfirmMenu( id )
  1857.  
  1858. {
  1859.  
  1860. new hMenu = menu_create( "Biztosan ki akarsz lepni?", "LeaveConfirmMenu_Handler" );
  1861.  
  1862. menu_additem( hMenu, "Igen, ki szeretnek lepni", "0" );
  1863.  
  1864. menu_additem( hMenu, "Nem, eszem agaban sincs", "1" );
  1865.  
  1866.  
  1867.  
  1868. menu_display( id, hMenu, 0 );
  1869.  
  1870. }
  1871.  
  1872.  
  1873.  
  1874. public LeaveConfirmMenu_Handler( id, hMenu, iItem )
  1875.  
  1876. {
  1877.  
  1878. if( iItem == MENU_EXIT )
  1879.  
  1880. return PLUGIN_HANDLED;
  1881.  
  1882.  
  1883.  
  1884. new szData[ 6 ], iAccess, hCallback;
  1885.  
  1886. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  1887.  
  1888.  
  1889.  
  1890. switch( str_to_num( szData ) )
  1891.  
  1892. {
  1893.  
  1894. case 0:
  1895.  
  1896. {
  1897.  
  1898. if( getStatus( id, g_iGang[ id ] ) == STATUS_LEADER )
  1899.  
  1900. {
  1901.  
  1902. ColorChat( id, NORMAL, "%s Elobb add at a vezetest valakinek mielott kilepnel.", g_szPrefix );
  1903.  
  1904. Cmd_Gang( id );
  1905.  
  1906.  
  1907.  
  1908. return PLUGIN_HANDLED;
  1909.  
  1910. }
  1911.  
  1912.  
  1913.  
  1914. ColorChat( id, NORMAL, "%s Sikeresen elhagytad a bandad.", g_szPrefix );
  1915.  
  1916. set_user_gang( id, -1 );
  1917.  
  1918. Cmd_Gang( id );
  1919.  
  1920. }
  1921.  
  1922.  
  1923.  
  1924. case 1: Cmd_Gang( id );
  1925.  
  1926. }
  1927.  
  1928.  
  1929.  
  1930. return PLUGIN_HANDLED;
  1931.  
  1932. }
  1933.  
  1934.  
  1935.  
  1936. public ShowLeaderMenu( id )
  1937.  
  1938. {
  1939.  
  1940. new hMenu = menu_create( "Banda Vezer Menu", "LeaderMenu_Handler" );
  1941.  
  1942.  
  1943.  
  1944. new iStatus = getStatus( id, g_iGang[ id ] );
  1945.  
  1946.  
  1947.  
  1948. if( iStatus == STATUS_LEADER )
  1949.  
  1950. {
  1951.  
  1952. menu_additem( hMenu, "Banda Feloszlatasa", "0" );
  1953.  
  1954. menu_additem( hMenu, "Vezer Atadasa", "1" );
  1955.  
  1956. menu_additem( hMenu, "Admin Hozzaadasa", "4" );
  1957.  
  1958. menu_additem( hMenu, "Admin Eltavolitasa", "5" );
  1959.  
  1960. }
  1961.  
  1962.  
  1963.  
  1964. menu_additem( hMenu, "Kirugas a bandabol", "2" );
  1965.  
  1966. menu_additem( hMenu, "Banda nev megvaltoztatasa", "3" );
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972. menu_display( id, hMenu, 0 );
  1973.  
  1974. }
  1975.  
  1976.  
  1977.  
  1978. public LeaderMenu_Handler( id, hMenu, iItem )
  1979.  
  1980. {
  1981.  
  1982. if( iItem == MENU_EXIT )
  1983.  
  1984. {
  1985.  
  1986. Cmd_Gang( id );
  1987.  
  1988. return PLUGIN_HANDLED;
  1989.  
  1990. }
  1991.  
  1992.  
  1993.  
  1994. new iAccess, hCallback, szData[ 6 ];
  1995.  
  1996. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  1997.  
  1998.  
  1999.  
  2000. switch( str_to_num( szData ) )
  2001.  
  2002. {
  2003.  
  2004. case 0:
  2005.  
  2006. {
  2007.  
  2008. ShowDisbandConfirmMenu( id );
  2009.  
  2010. }
  2011.  
  2012.  
  2013.  
  2014. case 1:
  2015.  
  2016. {
  2017.  
  2018. ShowTransferMenu( id );
  2019.  
  2020. }
  2021.  
  2022.  
  2023.  
  2024. case 2:
  2025.  
  2026. {
  2027.  
  2028. ShowKickMenu( id );
  2029.  
  2030. }
  2031.  
  2032.  
  2033.  
  2034. case 3:
  2035.  
  2036. {
  2037.  
  2038. client_cmd( id, "messagemode New_Name" );
  2039.  
  2040. }
  2041.  
  2042.  
  2043.  
  2044. case 4:
  2045.  
  2046. {
  2047.  
  2048. ShowAddAdminMenu( id );
  2049.  
  2050. }
  2051.  
  2052.  
  2053.  
  2054. case 5:
  2055.  
  2056. {
  2057.  
  2058. ShowRemoveAdminMenu( id );
  2059.  
  2060. }
  2061.  
  2062. }
  2063.  
  2064.  
  2065.  
  2066. return PLUGIN_HANDLED;
  2067.  
  2068. }
  2069.  
  2070.  
  2071.  
  2072. public ShowDisbandConfirmMenu( id )
  2073.  
  2074. {
  2075.  
  2076. new hMenu = menu_create( "Biztosan oszlatni akarod a bandat?", "DisbandConfirmMenu_Handler" );
  2077.  
  2078. menu_additem( hMenu, "Igen, oszlatni szeretnem", "0" );
  2079.  
  2080. menu_additem( hMenu, "Nem, eszem agaban sincs", "1" );
  2081.  
  2082.  
  2083.  
  2084. menu_display( id, hMenu, 0 );
  2085.  
  2086. }
  2087.  
  2088.  
  2089.  
  2090. public DisbandConfirmMenu_Handler( id, hMenu, iItem )
  2091.  
  2092. {
  2093.  
  2094. if( iItem == MENU_EXIT )
  2095.  
  2096. return PLUGIN_HANDLED;
  2097.  
  2098.  
  2099.  
  2100. new szData[ 6 ], iAccess, hCallback;
  2101.  
  2102. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, _, _, hCallback );
  2103.  
  2104.  
  2105.  
  2106. switch( str_to_num( szData ) )
  2107.  
  2108. {
  2109.  
  2110. case 0:
  2111.  
  2112. {
  2113.  
  2114.  
  2115.  
  2116. ColorChat( id, NORMAL, "%s Sikeresen oszlattad a bandad.", g_szPrefix );
  2117.  
  2118.  
  2119.  
  2120. new iPlayers[ 32 ], iNum;
  2121.  
  2122.  
  2123.  
  2124. get_players( iPlayers, iNum );
  2125.  
  2126.  
  2127.  
  2128. new iPlayer;
  2129.  
  2130.  
  2131.  
  2132. for( new i = 0; i < iNum; i++ )
  2133.  
  2134. {
  2135.  
  2136. iPlayer = iPlayers[ i ];
  2137.  
  2138.  
  2139.  
  2140. if( iPlayer == id )
  2141.  
  2142. continue;
  2143.  
  2144.  
  2145.  
  2146. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  2147.  
  2148. continue;
  2149.  
  2150.  
  2151.  
  2152. ColorChat( iPlayer, NORMAL, "%s A banda oszlatva lett a vezeto altal.", g_szPrefix );
  2153.  
  2154. set_user_gang( iPlayer, -1 );
  2155.  
  2156. }
  2157.  
  2158.  
  2159.  
  2160. new iGang = g_iGang[ id ];
  2161.  
  2162.  
  2163.  
  2164. set_user_gang( id, -1 );
  2165.  
  2166.  
  2167.  
  2168. ArrayDeleteItem( g_aGangs, iGang );
  2169.  
  2170.  
  2171.  
  2172. Cmd_Gang( id );
  2173.  
  2174. }
  2175.  
  2176.  
  2177.  
  2178. case 1: Cmd_Gang( id );
  2179.  
  2180. }
  2181.  
  2182.  
  2183.  
  2184. return PLUGIN_HANDLED;
  2185.  
  2186. }
  2187.  
  2188.  
  2189.  
  2190. public ShowTransferMenu( id )
  2191.  
  2192. {
  2193.  
  2194. new iPlayers[ 32 ], iNum;
  2195.  
  2196. get_players( iPlayers, iNum, "e", "TERRORIST" );
  2197.  
  2198.  
  2199.  
  2200. new hMenu = menu_create( "Vezer atadasa:", "TransferMenu_Handler" );
  2201.  
  2202. new szName[ 32 ], szData[ 6 ];
  2203.  
  2204.  
  2205.  
  2206. for( new i = 0, iPlayer; i < iNum; i++ )
  2207.  
  2208. {
  2209.  
  2210. iPlayer = iPlayers[ i ];
  2211.  
  2212.  
  2213.  
  2214. if( g_iGang[ iPlayer ] != g_iGang[ id ] || id == iPlayer )
  2215.  
  2216. continue;
  2217.  
  2218.  
  2219.  
  2220. get_user_name( iPlayer, szName, charsmax( szName ) );
  2221.  
  2222. num_to_str( iPlayer, szData, charsmax( szData ) );
  2223.  
  2224.  
  2225.  
  2226. menu_additem( hMenu, szName, szData );
  2227.  
  2228. }
  2229.  
  2230.  
  2231.  
  2232. menu_display( id, hMenu, 0 );
  2233.  
  2234. }
  2235.  
  2236.  
  2237.  
  2238. public TransferMenu_Handler( id, hMenu, iItem )
  2239.  
  2240. {
  2241.  
  2242. if( iItem == MENU_EXIT )
  2243.  
  2244. {
  2245.  
  2246. ShowLeaderMenu( id );
  2247.  
  2248. return PLUGIN_HANDLED;
  2249.  
  2250. }
  2251.  
  2252.  
  2253.  
  2254. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  2255.  
  2256.  
  2257.  
  2258. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, charsmax( szName ), hCallback );
  2259.  
  2260.  
  2261.  
  2262. new iPlayer = str_to_num( szData );
  2263.  
  2264.  
  2265.  
  2266. if( !is_user_connected( iPlayer ) )
  2267.  
  2268. {
  2269.  
  2270. ColorChat( id, NORMAL, "%s A jatekos nem talalhato.", g_szPrefix );
  2271.  
  2272. ShowTransferMenu( id );
  2273.  
  2274. return PLUGIN_HANDLED;
  2275.  
  2276. }
  2277.  
  2278.  
  2279.  
  2280. set_user_gang( iPlayer, g_iGang[ id ], STATUS_LEADER );
  2281.  
  2282. set_user_gang( id, g_iGang[ id ], STATUS_ADMIN );
  2283.  
  2284.  
  2285.  
  2286. Cmd_Gang( id );
  2287.  
  2288.  
  2289.  
  2290. new iPlayers[ 32 ], iNum, iTemp;
  2291.  
  2292. get_players( iPlayers, iNum );
  2293.  
  2294.  
  2295.  
  2296. for( new i = 0; i < iNum; i++ )
  2297.  
  2298. {
  2299.  
  2300. iTemp = iPlayers[ i ];
  2301.  
  2302.  
  2303.  
  2304. if( iTemp == iPlayer )
  2305.  
  2306. {
  2307.  
  2308. ColorChat( iTemp, NORMAL, "%s Te vagy a banda uj vezere.", g_szPrefix );
  2309.  
  2310. continue;
  2311.  
  2312. }
  2313.  
  2314.  
  2315.  
  2316. else if( g_iGang[ iTemp ] != g_iGang[ id ] )
  2317.  
  2318. continue;
  2319.  
  2320.  
  2321.  
  2322. ColorChat( iTemp, NORMAL, "%s ^03%s^01 a banda uj vezere.", g_szPrefix, szName );
  2323.  
  2324. }
  2325.  
  2326.  
  2327.  
  2328. return PLUGIN_HANDLED;
  2329.  
  2330. }
  2331.  
  2332.  
  2333.  
  2334.  
  2335.  
  2336. public ShowKickMenu( id )
  2337.  
  2338. {
  2339.  
  2340. new iPlayers[ 32 ], iNum;
  2341.  
  2342. get_players( iPlayers, iNum );
  2343.  
  2344.  
  2345.  
  2346. new hMenu = menu_create( "Bandabol valo kirugas:", "KickMenu_Handler" );
  2347.  
  2348. new szName[ 32 ], szData[ 6 ];
  2349.  
  2350.  
  2351.  
  2352.  
  2353.  
  2354. for( new i = 0, iPlayer; i < iNum; i++ )
  2355.  
  2356. {
  2357.  
  2358. iPlayer = iPlayers[ i ];
  2359.  
  2360.  
  2361.  
  2362. if( g_iGang[ iPlayer ] != g_iGang[ id ] || id == iPlayer )
  2363.  
  2364. continue;
  2365.  
  2366.  
  2367.  
  2368. get_user_name( iPlayer, szName, charsmax( szName ) );
  2369.  
  2370. num_to_str( iPlayer, szData, charsmax( szData ) );
  2371.  
  2372.  
  2373.  
  2374. menu_additem( hMenu, szName, szData );
  2375.  
  2376. }
  2377.  
  2378.  
  2379.  
  2380. menu_display( id, hMenu, 0 );
  2381.  
  2382. }
  2383.  
  2384.  
  2385.  
  2386. public KickMenu_Handler( id, hMenu, iItem )
  2387.  
  2388. {
  2389.  
  2390. if( iItem == MENU_EXIT )
  2391.  
  2392. {
  2393.  
  2394. ShowLeaderMenu( id );
  2395.  
  2396. return PLUGIN_HANDLED;
  2397.  
  2398. }
  2399.  
  2400.  
  2401.  
  2402. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  2403.  
  2404.  
  2405.  
  2406. menu_item_getinfo( hMenu, iItem, iAccess, szData, 5, szName, charsmax( szName ), hCallback );
  2407.  
  2408.  
  2409.  
  2410. new iPlayer = str_to_num( szData );
  2411.  
  2412.  
  2413.  
  2414. if( !is_user_connected( iPlayer ) )
  2415.  
  2416. {
  2417.  
  2418. ColorChat( id, NORMAL, "%s A jatekos nem talalhato.", g_szPrefix );
  2419.  
  2420. ShowTransferMenu( id );
  2421.  
  2422. return PLUGIN_HANDLED;
  2423.  
  2424. }
  2425.  
  2426.  
  2427.  
  2428. set_user_gang( iPlayer, -1 );
  2429.  
  2430.  
  2431.  
  2432. Cmd_Gang( id );
  2433.  
  2434.  
  2435.  
  2436. new iPlayers[ 32 ], iNum, iTemp;
  2437.  
  2438. get_players( iPlayers, iNum );
  2439.  
  2440.  
  2441.  
  2442. for( new i = 0; i < iNum; i++ )
  2443.  
  2444. {
  2445.  
  2446. iTemp = iPlayers[ i ];
  2447.  
  2448.  
  2449.  
  2450. if( iTemp == iPlayer || g_iGang[ iTemp ] != g_iGang[ id ] )
  2451.  
  2452. continue;
  2453.  
  2454.  
  2455.  
  2456. ColorChat( iTemp, NORMAL, "%s ^03%s^01 ki lett rugva a bandabol.", g_szPrefix, szName );
  2457.  
  2458. }
  2459.  
  2460.  
  2461.  
  2462. ColorChat( iPlayer, NORMAL, "%s Ki lettel rugva a bandabol.", g_szPrefix, szName );
  2463.  
  2464.  
  2465.  
  2466. return PLUGIN_HANDLED;
  2467.  
  2468. }
  2469.  
  2470.  
  2471.  
  2472. public ChangeName_Handler( id )
  2473.  
  2474. {
  2475.  
  2476. if( g_iGang[ id ] == -1 || getStatus( id, g_iGang[ id ] ) == STATUS_MEMBER )
  2477.  
  2478. {
  2479.  
  2480. return;
  2481.  
  2482. }
  2483.  
  2484.  
  2485.  
  2486. new iGang = g_iGang[ id ];
  2487.  
  2488.  
  2489.  
  2490. new szArgs[ 64 ];
  2491.  
  2492. read_args( szArgs, charsmax( szArgs ) );
  2493.  
  2494.  
  2495.  
  2496. new iPlayers[ 32 ], iNum;
  2497.  
  2498. get_players( iPlayers, iNum );
  2499.  
  2500.  
  2501.  
  2502. new bool:bInGang[ 33 ];
  2503.  
  2504. new iStatus[ 33 ];
  2505.  
  2506.  
  2507.  
  2508. for( new i = 0, iPlayer; i < iNum; i++ )
  2509.  
  2510. {
  2511.  
  2512. iPlayer = iPlayers[ i ];
  2513.  
  2514.  
  2515.  
  2516. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  2517.  
  2518. continue;
  2519.  
  2520.  
  2521.  
  2522. bInGang[ iPlayer ] = true;
  2523.  
  2524. iStatus[ iPlayer ] = getStatus( id, iGang );
  2525.  
  2526.  
  2527.  
  2528. set_user_gang( iPlayer, -1 );
  2529.  
  2530. }
  2531.  
  2532.  
  2533.  
  2534. new aData[ GangInfo ];
  2535.  
  2536. ArrayGetArray( g_aGangs, iGang, aData );
  2537.  
  2538.  
  2539.  
  2540. aData[ GangName ] = szArgs;
  2541.  
  2542.  
  2543.  
  2544. ArraySetArray( g_aGangs, iGang, aData );
  2545.  
  2546.  
  2547.  
  2548. for( new i = 0, iPlayer; i < iNum; i++ )
  2549.  
  2550. {
  2551.  
  2552. iPlayer = iPlayers[ i ];
  2553.  
  2554.  
  2555.  
  2556. if( !bInGang[ iPlayer ] )
  2557.  
  2558. continue;
  2559.  
  2560.  
  2561.  
  2562. set_user_gang( iPlayer, iGang, iStatus[ id ] );
  2563.  
  2564. }
  2565.  
  2566. }
  2567.  
  2568.  
  2569.  
  2570. public ShowAddAdminMenu( id )
  2571.  
  2572. {
  2573.  
  2574. new iPlayers[ 32 ], iNum;
  2575.  
  2576. new szName[ 32 ], szData[ 6 ];
  2577.  
  2578. new hMenu = menu_create( "Jatekos Eloleptetese:", "AddAdminMenu_Handler" );
  2579.  
  2580.  
  2581.  
  2582. get_players( iPlayers, iNum );
  2583.  
  2584.  
  2585.  
  2586. for( new i = 0, iPlayer; i < iNum; i++ )
  2587.  
  2588. {
  2589.  
  2590. iPlayer = iPlayers[ i ];
  2591.  
  2592.  
  2593.  
  2594. if( g_iGang[ id ] != g_iGang[ iPlayer ] || getStatus( iPlayer, g_iGang[ iPlayer ] ) > STATUS_MEMBER )
  2595.  
  2596. continue;
  2597.  
  2598.  
  2599.  
  2600. get_user_name( iPlayer, szName, charsmax( szName ) );
  2601.  
  2602.  
  2603.  
  2604. num_to_str( iPlayer, szData, charsmax( szData ) );
  2605.  
  2606.  
  2607.  
  2608. menu_additem( hMenu, szName, szData );
  2609.  
  2610. }
  2611.  
  2612.  
  2613.  
  2614. menu_display( id, hMenu, 0 );
  2615.  
  2616. }
  2617.  
  2618.  
  2619.  
  2620. public AddAdminMenu_Handler( id, hMenu, iItem )
  2621.  
  2622. {
  2623.  
  2624. if( iItem == MENU_EXIT )
  2625.  
  2626. {
  2627.  
  2628. menu_destroy( hMenu );
  2629.  
  2630. ShowLeaderMenu( id );
  2631.  
  2632. return PLUGIN_HANDLED;
  2633.  
  2634. }
  2635.  
  2636.  
  2637.  
  2638. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  2639.  
  2640.  
  2641.  
  2642. menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), hCallback );
  2643.  
  2644.  
  2645.  
  2646. new iChosen = str_to_num( szData );
  2647.  
  2648.  
  2649.  
  2650. if( !is_user_connected( iChosen ) )
  2651.  
  2652. {
  2653.  
  2654. menu_destroy( hMenu );
  2655.  
  2656. ShowLeaderMenu( id );
  2657.  
  2658. return PLUGIN_HANDLED;
  2659.  
  2660. }
  2661.  
  2662.  
  2663.  
  2664. set_user_gang( iChosen, g_iGang[ id ], STATUS_LEADER );
  2665.  
  2666.  
  2667.  
  2668. new iPlayers[ 32 ], iNum;
  2669.  
  2670. get_players( iPlayers, iNum );
  2671.  
  2672.  
  2673.  
  2674. for( new i = 0, iPlayer; i < iNum; i++ )
  2675.  
  2676. {
  2677.  
  2678. iPlayer = iPlayers[ i ];
  2679.  
  2680.  
  2681.  
  2682. if( g_iGang[ iPlayer ] != g_iGang[ id ] || iPlayer == iChosen )
  2683.  
  2684. continue;
  2685.  
  2686.  
  2687.  
  2688. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01Adminna lett eloleptetve.", g_szPrefix, szName );
  2689.  
  2690. }
  2691.  
  2692.  
  2693.  
  2694. ColorChat( iChosen, NORMAL, "%s ^01Adminna letettek elo.", g_szPrefix );
  2695.  
  2696.  
  2697.  
  2698. menu_destroy( hMenu );
  2699.  
  2700. return PLUGIN_HANDLED;
  2701.  
  2702. }
  2703.  
  2704.  
  2705.  
  2706. public ShowRemoveAdminMenu( id )
  2707.  
  2708. {
  2709.  
  2710. new iPlayers[ 32 ], iNum;
  2711.  
  2712. new szName[ 32 ], szData[ 6 ];
  2713.  
  2714. new hMenu = menu_create( "Jatekos Lefokozasa:", "RemoveAdminMenu_Handler" );
  2715.  
  2716.  
  2717.  
  2718. get_players( iPlayers, iNum );
  2719.  
  2720.  
  2721.  
  2722. for( new i = 0, iPlayer; i < iNum; i++ )
  2723.  
  2724. {
  2725.  
  2726. iPlayer = iPlayers[ i ];
  2727.  
  2728.  
  2729.  
  2730. if( g_iGang[ id ] != g_iGang[ iPlayer ] || getStatus( iPlayer, g_iGang[ iPlayer ] ) != STATUS_ADMIN )
  2731.  
  2732. continue;
  2733.  
  2734.  
  2735.  
  2736. get_user_name( iPlayer, szName, charsmax( szName ) );
  2737.  
  2738.  
  2739.  
  2740. num_to_str( iPlayer, szData, charsmax( szData ) );
  2741.  
  2742.  
  2743.  
  2744. menu_additem( hMenu, szName, szData );
  2745.  
  2746. }
  2747.  
  2748.  
  2749.  
  2750. menu_display( id, hMenu, 0 );
  2751.  
  2752. }
  2753.  
  2754.  
  2755.  
  2756. public RemoveAdminMenu_Handler( id, hMenu, iItem )
  2757.  
  2758. {
  2759.  
  2760. if( iItem == MENU_EXIT )
  2761.  
  2762. {
  2763.  
  2764. menu_destroy( hMenu );
  2765.  
  2766. ShowLeaderMenu( id );
  2767.  
  2768. return PLUGIN_HANDLED;
  2769.  
  2770. }
  2771.  
  2772.  
  2773.  
  2774. new iAccess, hCallback, szData[ 6 ], szName[ 32 ];
  2775.  
  2776.  
  2777.  
  2778. menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), hCallback );
  2779.  
  2780.  
  2781.  
  2782. new iChosen = str_to_num( szData );
  2783.  
  2784.  
  2785.  
  2786. if( !is_user_connected( iChosen ) )
  2787.  
  2788. {
  2789.  
  2790. menu_destroy( hMenu );
  2791.  
  2792. ShowLeaderMenu( id );
  2793.  
  2794. return PLUGIN_HANDLED;
  2795.  
  2796. }
  2797.  
  2798.  
  2799.  
  2800. set_user_gang( iChosen, g_iGang[ id ], STATUS_MEMBER );
  2801.  
  2802.  
  2803.  
  2804. new iPlayers[ 32 ], iNum;
  2805.  
  2806. get_players( iPlayers, iNum );
  2807.  
  2808.  
  2809.  
  2810. for( new i = 0, iPlayer; i < iNum; i++ )
  2811.  
  2812. {
  2813.  
  2814. iPlayer = iPlayers[ i ];
  2815.  
  2816.  
  2817.  
  2818. if( g_iGang[ iPlayer ] != g_iGang[ id ] || iPlayer == iChosen )
  2819.  
  2820. continue;
  2821.  
  2822.  
  2823.  
  2824. ColorChat( iPlayer, NORMAL, "%s ^03%s ^01Le lett fokozva adminrol sima jatekosra.", g_szPrefix, szName );
  2825.  
  2826. }
  2827.  
  2828.  
  2829.  
  2830. ColorChat( iChosen, NORMAL, "%s ^01Le lettel fokozva.", g_szPrefix );
  2831.  
  2832.  
  2833.  
  2834. menu_destroy( hMenu );
  2835.  
  2836. return PLUGIN_HANDLED;
  2837.  
  2838. }
  2839.  
  2840.  
  2841.  
  2842. public ShowMembersMenu( id )
  2843.  
  2844. {
  2845.  
  2846. new szName[ 64 ], iPlayers[ 32 ], iNum;
  2847.  
  2848. get_players( iPlayers, iNum );
  2849.  
  2850.  
  2851.  
  2852. new hMenu = menu_create( "Online Tagok:", "MemberMenu_Handler" );
  2853.  
  2854.  
  2855.  
  2856. for( new i = 0, iPlayer; i < iNum; i++ )
  2857.  
  2858. {
  2859.  
  2860. iPlayer = iPlayers[ i ];
  2861.  
  2862.  
  2863.  
  2864. if( g_iGang[ id ] != g_iGang[ iPlayer ] )
  2865.  
  2866. continue;
  2867.  
  2868.  
  2869.  
  2870. get_user_name( iPlayer, szName, charsmax( szName ) );
  2871.  
  2872.  
  2873.  
  2874. switch( getStatus( iPlayer, g_iGang[ id ] ) )
  2875.  
  2876. {
  2877.  
  2878. case STATUS_MEMBER:
  2879.  
  2880. {
  2881.  
  2882. add( szName, charsmax( szName ), " \r[Tag]" );
  2883.  
  2884. }
  2885.  
  2886.  
  2887.  
  2888. case STATUS_ADMIN:
  2889.  
  2890. {
  2891.  
  2892. add( szName, charsmax( szName ), " \r[Admin]" );
  2893.  
  2894. }
  2895.  
  2896.  
  2897.  
  2898. case STATUS_LEADER:
  2899.  
  2900. {
  2901.  
  2902. add( szName, charsmax( szName ), " \r[Vezer]" );
  2903.  
  2904. }
  2905.  
  2906. }
  2907.  
  2908.  
  2909.  
  2910. menu_additem( hMenu, szName );
  2911.  
  2912. }
  2913.  
  2914.  
  2915.  
  2916. menu_display( id, hMenu, 0 );
  2917.  
  2918. }
  2919.  
  2920.  
  2921.  
  2922. public MemberMenu_Handler( id, hMenu, iItem )
  2923.  
  2924. {
  2925.  
  2926. if( iItem == MENU_EXIT )
  2927.  
  2928. {
  2929.  
  2930. menu_destroy( hMenu );
  2931.  
  2932. Cmd_Gang( id );
  2933.  
  2934. return PLUGIN_HANDLED;
  2935.  
  2936. }
  2937.  
  2938.  
  2939.  
  2940. menu_destroy( hMenu );
  2941.  
  2942.  
  2943.  
  2944. ShowMembersMenu( id )
  2945.  
  2946. return PLUGIN_HANDLED;
  2947.  
  2948. }
  2949.  
  2950.  
  2951.  
  2952. // Credits to Tirant from zombie mod and xOR from xRedirect
  2953.  
  2954. public LoadGangs()
  2955.  
  2956. {
  2957.  
  2958. new szConfigsDir[ 60 ];
  2959.  
  2960. get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
  2961.  
  2962. add( szConfigsDir, charsmax( szConfigsDir ), "/jb_gangs.ini" );
  2963.  
  2964.  
  2965.  
  2966. new iFile = fopen( szConfigsDir, "rt" );
  2967.  
  2968.  
  2969.  
  2970. new aData[ GangInfo ];
  2971.  
  2972.  
  2973.  
  2974. new szBuffer[ 512 ], szData[ 6 ], szValue[ 6 ], i, iCurGang;
  2975.  
  2976.  
  2977.  
  2978. while( !feof( iFile ) )
  2979.  
  2980. {
  2981.  
  2982. fgets( iFile, szBuffer, charsmax( szBuffer ) );
  2983.  
  2984.  
  2985.  
  2986. trim( szBuffer );
  2987.  
  2988. remove_quotes( szBuffer );
  2989.  
  2990.  
  2991.  
  2992. if( !szBuffer[ 0 ] || szBuffer[ 0 ] == ';' )
  2993.  
  2994. {
  2995.  
  2996. continue;
  2997.  
  2998. }
  2999.  
  3000.  
  3001.  
  3002. if( szBuffer[ 0 ] == '[' && szBuffer[ strlen( szBuffer ) - 1 ] == ']' )
  3003.  
  3004. {
  3005.  
  3006. copy( aData[ GangName ], strlen( szBuffer ) - 2, szBuffer[ 1 ] );
  3007.  
  3008. aData[ GangHP ] = 0;
  3009.  
  3010. aData[ GangStealing ] = 0;
  3011.  
  3012. aData[ GangGravity ] = 0;
  3013.  
  3014. aData[ GangStamina ] = 0;
  3015.  
  3016. aData[ GangWeaponDrop ] = 0;
  3017.  
  3018. aData[ GangDamage ] = 0;
  3019.  
  3020. aData[ GangKills ] = 0;
  3021.  
  3022. aData[ NumMembers ] = 0;
  3023.  
  3024. aData[ GangMembers ] = _:TrieCreate();
  3025.  
  3026.  
  3027.  
  3028. if( TrieKeyExists( g_tGangNames, aData[ GangName ] ) )
  3029.  
  3030. {
  3031.  
  3032. new szError[ 256 ];
  3033.  
  3034. formatex( szError, charsmax( szError ), "[JB Banda] A banda mar letezik: %s", aData[ GangName ] );
  3035.  
  3036. set_fail_state( szError );
  3037.  
  3038. }
  3039.  
  3040.  
  3041.  
  3042. ArrayPushArray( g_aGangs, aData );
  3043.  
  3044.  
  3045.  
  3046. TrieSetCell( g_tGangNames, aData[ GangName ], iCurGang );
  3047.  
  3048.  
  3049.  
  3050. log_amx( "Gang Created: %s", aData[ GangName ] );
  3051.  
  3052.  
  3053.  
  3054. iCurGang++;
  3055.  
  3056.  
  3057.  
  3058. continue;
  3059.  
  3060. }
  3061.  
  3062.  
  3063.  
  3064. strtok( szBuffer, szData, 31, szValue, 511, '=' );
  3065.  
  3066. trim( szData );
  3067.  
  3068. trim( szValue );
  3069.  
  3070.  
  3071.  
  3072. if( TrieGetCell( g_tGangValues, szData, i ) )
  3073.  
  3074. {
  3075.  
  3076. ArrayGetArray( g_aGangs, iCurGang - 1, aData );
  3077.  
  3078.  
  3079.  
  3080. switch( i )
  3081.  
  3082. {
  3083.  
  3084. case VALUE_HP:
  3085.  
  3086. aData[ GangHP ] = str_to_num( szValue );
  3087.  
  3088.  
  3089.  
  3090. case VALUE_STEALING:
  3091.  
  3092. aData[ GangStealing ] = str_to_num( szValue );
  3093.  
  3094.  
  3095.  
  3096. case VALUE_GRAVITY:
  3097.  
  3098. aData[ GangGravity ] = str_to_num( szValue );
  3099.  
  3100.  
  3101.  
  3102. case VALUE_STAMINA:
  3103.  
  3104. aData[ GangStamina ] = str_to_num( szValue );
  3105.  
  3106.  
  3107.  
  3108. case VALUE_WEAPONDROP:
  3109.  
  3110. aData[ GangWeaponDrop ] = str_to_num( szValue );
  3111.  
  3112.  
  3113.  
  3114. case VALUE_DAMAGE:
  3115.  
  3116. aData[ GangDamage ] = str_to_num( szValue );
  3117.  
  3118.  
  3119.  
  3120. case VALUE_KILLS:
  3121.  
  3122. aData[ GangKills ] = str_to_num( szValue );
  3123.  
  3124. }
  3125.  
  3126.  
  3127.  
  3128. ArraySetArray( g_aGangs, iCurGang - 1, aData );
  3129.  
  3130. }
  3131.  
  3132. }
  3133.  
  3134.  
  3135.  
  3136. new Array:aSQL;
  3137.  
  3138. sqlv_read_all_ex( g_hVault, aSQL );
  3139.  
  3140.  
  3141.  
  3142. new aVaultData[ SQLVaultEntryEx ];
  3143.  
  3144.  
  3145.  
  3146. new iGang;
  3147.  
  3148.  
  3149.  
  3150. for( i = 0; i < ArraySize( aSQL ); i++ )
  3151.  
  3152. {
  3153.  
  3154. ArrayGetArray( aSQL, i, aVaultData );
  3155.  
  3156.  
  3157.  
  3158. if( TrieGetCell( g_tGangNames, aVaultData[ SQLVEx_Key2 ], iGang ) )
  3159.  
  3160. {
  3161.  
  3162. ArrayGetArray( g_aGangs, iGang, aData );
  3163.  
  3164.  
  3165.  
  3166. TrieSetCell( aData[ GangMembers ], aVaultData[ SQLVEx_Key1 ], str_to_num( aVaultData[ SQLVEx_Data ] ) );
  3167.  
  3168.  
  3169.  
  3170. aData[ NumMembers ]++;
  3171.  
  3172.  
  3173.  
  3174. ArraySetArray( g_aGangs, iGang, aData );
  3175.  
  3176. }
  3177.  
  3178. }
  3179.  
  3180.  
  3181.  
  3182. fclose( iFile );
  3183.  
  3184. }
  3185.  
  3186.  
  3187.  
  3188. public SaveGangs()
  3189.  
  3190. {
  3191.  
  3192. new szConfigsDir[ 64 ];
  3193.  
  3194. get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
  3195.  
  3196.  
  3197.  
  3198. add( szConfigsDir, charsmax( szConfigsDir ), "/jb_gangs.ini" );
  3199.  
  3200.  
  3201.  
  3202. if( file_exists( szConfigsDir ) )
  3203.  
  3204. delete_file( szConfigsDir );
  3205.  
  3206.  
  3207.  
  3208. new iFile = fopen( szConfigsDir, "wt" );
  3209.  
  3210.  
  3211.  
  3212. new aData[ GangInfo ];
  3213.  
  3214.  
  3215.  
  3216. new szBuffer[ 256 ];
  3217.  
  3218.  
  3219.  
  3220. for( new i = 0; i < ArraySize( g_aGangs ); i++ )
  3221.  
  3222. {
  3223.  
  3224. ArrayGetArray( g_aGangs, i, aData );
  3225.  
  3226.  
  3227.  
  3228. formatex( szBuffer, charsmax( szBuffer ), "[%s]^n", aData[ GangName ] );
  3229.  
  3230. fputs( iFile, szBuffer );
  3231.  
  3232.  
  3233.  
  3234. formatex( szBuffer, charsmax( szBuffer ), "Elet=%i^n", aData[ GangHP ] );
  3235.  
  3236. fputs( iFile, szBuffer );
  3237.  
  3238.  
  3239.  
  3240. formatex( szBuffer, charsmax( szBuffer ), "Lopas=%i^n", aData[ GangStealing ] );
  3241.  
  3242. fputs( iFile, szBuffer );
  3243.  
  3244.  
  3245.  
  3246. formatex( szBuffer, charsmax( szBuffer ), "Gravitacio=%i^n", aData[ GangGravity ] );
  3247.  
  3248. fputs( iFile, szBuffer );
  3249.  
  3250.  
  3251.  
  3252. formatex( szBuffer, charsmax( szBuffer ), "Kitartas=%i^n", aData[ GangStamina ] );
  3253.  
  3254. fputs( iFile, szBuffer );
  3255.  
  3256.  
  3257.  
  3258. formatex( szBuffer, charsmax( szBuffer ), "FegyverDobas=%i^n", aData[ GangWeaponDrop ] );
  3259.  
  3260. fputs( iFile, szBuffer );
  3261.  
  3262.  
  3263.  
  3264. formatex( szBuffer, charsmax( szBuffer ), "Sebzes=%i^n", aData[ GangDamage ] );
  3265.  
  3266. fputs( iFile, szBuffer );
  3267.  
  3268.  
  3269.  
  3270. formatex( szBuffer, charsmax( szBuffer ), "Olesek=%i^n^n", aData[ GangKills ] );
  3271.  
  3272. fputs( iFile, szBuffer );
  3273.  
  3274. }
  3275.  
  3276.  
  3277.  
  3278. fclose( iFile );
  3279.  
  3280. }
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288. set_user_gang( id, iGang, iStatus=STATUS_MEMBER )
  3289.  
  3290. {
  3291.  
  3292. new szAuthID[ 35 ];
  3293.  
  3294. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  3295.  
  3296.  
  3297.  
  3298. new aData[ GangInfo ];
  3299.  
  3300.  
  3301.  
  3302. if( g_iGang[ id ] > -1 )
  3303.  
  3304. {
  3305.  
  3306. ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
  3307.  
  3308. TrieDeleteKey( aData[ GangMembers ], szAuthID );
  3309.  
  3310. aData[ NumMembers ]--;
  3311.  
  3312. ArraySetArray( g_aGangs, g_iGang[ id ], aData );
  3313.  
  3314.  
  3315.  
  3316. sqlv_remove_ex( g_hVault, szAuthID, aData[ GangName ] );
  3317.  
  3318. }
  3319.  
  3320.  
  3321.  
  3322. if( iGang > -1 )
  3323.  
  3324. {
  3325.  
  3326. ArrayGetArray( g_aGangs, iGang, aData );
  3327.  
  3328. TrieSetCell( aData[ GangMembers ], szAuthID, iStatus );
  3329.  
  3330. aData[ NumMembers ]++;
  3331.  
  3332. ArraySetArray( g_aGangs, iGang, aData );
  3333.  
  3334.  
  3335.  
  3336. sqlv_set_num_ex( g_hVault, szAuthID, aData[ GangName ], iStatus );
  3337.  
  3338. }
  3339.  
  3340.  
  3341.  
  3342. g_iGang[ id ] = iGang;
  3343.  
  3344.  
  3345.  
  3346. return 1;
  3347.  
  3348. }
  3349.  
  3350.  
  3351.  
  3352. get_user_gang( id )
  3353.  
  3354. {
  3355.  
  3356. new szAuthID[ 35 ];
  3357.  
  3358. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  3359.  
  3360.  
  3361.  
  3362. new aData[ GangInfo ];
  3363.  
  3364.  
  3365.  
  3366. for( new i = 0; i < ArraySize( g_aGangs ); i++ )
  3367.  
  3368. {
  3369.  
  3370. ArrayGetArray( g_aGangs, i, aData );
  3371.  
  3372.  
  3373.  
  3374. if( TrieKeyExists( aData[ GangMembers ], szAuthID ) )
  3375.  
  3376. return i;
  3377.  
  3378. }
  3379.  
  3380.  
  3381.  
  3382. return -1;
  3383.  
  3384. }
  3385.  
  3386.  
  3387.  
  3388. getStatus( id, iGang )
  3389.  
  3390. {
  3391.  
  3392. if( !is_user_connected( id ) || iGang == -1 )
  3393.  
  3394. return STATUS_NONE;
  3395.  
  3396.  
  3397.  
  3398. new aData[ GangInfo ];
  3399.  
  3400. ArrayGetArray( g_aGangs, iGang, aData );
  3401.  
  3402.  
  3403.  
  3404. new szAuthID[ 35 ];
  3405.  
  3406. get_user_authid( id, szAuthID, charsmax( szAuthID ) );
  3407.  
  3408.  
  3409.  
  3410. new iStatus;
  3411.  
  3412. TrieGetCell( aData[ GangMembers ], szAuthID, iStatus );
  3413.  
  3414.  
  3415.  
  3416. return iStatus;
  3417.  
  3418. }

_________________
SMA Forráskód: [ Mindet kijelol ]
  1.  
  2. #include <amxmodx>
  3. #include <amxmisc>
  4.  
  5. #define PLUGIN "NoName"
  6. #define VERSION "1.0"
  7. #define AUTHOR "FuRy"
  8.  


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 3 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 3 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole