hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.24. 07:02



Jelenlévő felhasználók

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

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

Regisztrált felhasználók: nincs regisztrált felhasználó 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  [ 2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Ezt valaki lefordítaná ?
HozzászólásElküldve: 2013.12.23. 21:12 
Offline
Senior Tag
Avatar

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

_________________
Nem szégyen megköszönni :)

'The dictator is coming' :D


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Ezt valaki lefordítaná ?
HozzászólásElküldve: 2013.12.23. 21:13 
Offline
Senior Tag
Avatar

Csatlakozott: 2013.12.18. 13:57
Hozzászólások: 240
Megköszönt másnak: 16 alkalommal
Megköszönték neki: 24 alkalommal
Magyarra szeretnéd? Ha jól látom ez jailbreak. Azt letöltheted innen is.

_________________
Discord: KillStr3aK#4724 | GitHub
https://eternar.dev


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  [ 2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 5 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