hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.28. 17:29



Jelenlévő felhasználók

Jelenleg 525 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 525 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: fordítés | sqlvault_ex
HozzászólásElküldve: 2013.12.22. 18:23 
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
Sziasztok segítenétek nekem nem tudom ezt fordítani mert a fordító program és online fordítóba azt írja ki ,hogy erro sqvault_ex. Köszönöm előre az összes választ .

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

Csatlakozott: 2013.10.27. 23:13
Hozzászólások: 412
Megköszönt másnak: 21 alkalommal
Megköszönték neki: 68 alkalommal
Remélem amx studiot használsz , na ahol az addons mappád van azon belül
( addons/amxmodx/scripting/include/ide berakod azt amit csatoltam )

és akkor fordíthatod.


Csatolmányok:
sqlvault_ex.inc [32.36 KiB]
Letöltve 72 alkalommal.

_________________
Kép

Ők köszönték meg NiGGeR-BorZ nek ezt a hozzászólást: Charlie224 (2013.12.23. 05:22)
  Népszerűség: 2.27%
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 61 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