· 10 years ago · Sep 25, 2016, 05:52 PM
1 /* Includes */
2
3#include < amxmodx >
4#include < amxmisc >
5#include < fvault >
6#include < cstrike >
7#include < hamsandwich >
8#include < fakemeta_util >
9#include < regex >
10
11 /* Defines */
12
13#define ADMIN_ACCESS ADMIN_IMMUNITY
14#define TASKID_GLOW 12654
15#define REGEX_STEAMID_PATTERN "^^STEAM_0:(0|1):\d+$"
16#define MAX_MEMBERS 15
17#define MAX_GANGS 24
18#define MAX_ADMINS 3
19#define GANG_COST 100000
20
21#define DISTANCE_SUCK -9.0
22#define DISTANCE_CAMERA 90.0
23#define CLASS_Cameraman "class_cameraman"
24
25#define FILE_NAME "GangFiless"
26 /* Natives */
27#define GANG_CHANGE_NAME_COST 70000
28#define GANG_CHANGE_COLOR_COST 50000
29
30
31#define is_str_alpha(%1) is_str_type((%1), STRTYPE_ALPHA)
32#define KEYS_GENERIC (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)
33#define is_char(%1) (0 < (%1) <= 255)
34
35#define IsValidAuthid(%1) (regex_match_c(%1, g_SteamID_pattern, g_regex_return) > 0)
36#define TASK_WORK 2312
37#define MAX_COLORS 4
38#define MAX_SKILL_ARRAY 6
39
40
41
42native get_user_cash( iPlayer );
43native set_user_cash( iPlayer, Cash );
44
45 /* Constants */
46
47new const Info[ 5 ][ ] =
48{
49 "Gangs Jailbreak API Missions",
50 "0.5",
51 "eldadz",
52 "Immortals",
53 "Immortals"
54};
55
56enum StrType (<<= 1)
57{
58 STRTYPE_NUM = 1,
59 STRTYPE_ALPHA,
60 STRTYPE_SPACE
61};
62
63enum _:enumBlackjack
64{
65 BLACKJACK_PLAYER,
66 BLACKJACK_SERVER
67}
68
69enum _:GangInfo
70{
71 Trie:GangMembers,
72 GangName[ 64 ],
73 GangMessage[ 80 ],
74 GangCreation[ 80 ],
75 GangRegen, // Regen
76 GangBoost, // Cash Boost
77 GangGetCash, // Get Cash
78 GangNext,
79 GangSkillMemeber, // Next Cash
80 GangCash, // Cash
81 GangCredits, // Cash
82 GangMaxDonation,
83 GangColor,
84 NumMembers
85};
86
87enum
88{
89 VALUE_REGEN, // Regen
90 VALUE_BOOST, // Cash Boost
91 VALUE_GETCASH, // Get Cash
92 VALUE_NEXTCASH,
93 VALUE_CASH,
94 VALUE_MESSAGE[ 80 ],
95 VALUE_MAXDONATION,
96 VALUE_CREATION,
97 VALUE_COLOR,
98 VALUE_GANGPLAYERS,
99 VALUE_CREDITS
100}
101
102enum _:enumBJCards
103{
104 CARD_ACE,
105 CARD_DEUCE,
106 CARD_THREE,
107 CARD_FOUR,
108 CARD_FIVE,
109 CARD_SIX,
110 CARD_SEVEN,
111 CARD_EIGHT,
112 CARD_NINE,
113 CARD_TEN,
114 CARD_JACK,
115 CARD_QUEEN,
116 CARD_KING,
117
118 MAX_CARD_KINDS
119}
120
121enum
122{
123 STATUS_NONE,
124 STATUS_MEMBER,
125 STATUS_ADMIN,
126 STATUS_LEADER
127};
128
129enum _:enumPlayer
130{
131 playerName[ 128 ],
132 playerGangName[ 33 ],
133 playerGangData,
134 playerGangInvited[ 33 ],
135 playerGangInvitedDate[ 80 ],
136 playerTokens,
137 playerCash,
138 playerBjWin,
139 playerBjLose,
140 playerBjTotalWin,
141 playerBjTotalLose
142}
143
144enum _:enumColors
145{
146 PLAYER_COLOR_MENU,
147 PLAYER_CAMREA,
148 PLAYER_FLAGS,
149 PLAYER_ISMENU,
150 PLAYER_COUNT,
151 PLAYER_INTCOLOR,
152 PLAYER_UPGRADE,
153 PLAYER_TARGET,
154 PLAYER_AMOUNT,
155
156 PLAYER_CHANGE_MESSAGE[ 33 ],
157 PLAYER_CREATE_MESSAGE[ 33 ],
158 PLAYER_GANG_MESSAGE[ 80 ],
159
160 bool:PLAYER_GAME,
161 bool:PLAYER_GAMEDOWN,
162 bool:PLAYER_WON,
163 bool:PLAYER_DRAWCARDS,
164 bool:PLAYER_DOUBLE,
165
166 MAX_SHIT
167}
168
169enum _:enBasic
170{
171 baseName[ 32 ],
172 baseDescrption[ 200 ],
173 baseCount,
174 baseEnum,
175 baseArrayNumber[ 6 ],
176 baseArrayCashCost[ 6 ],
177 baseArrayCreditsCost[ 6 ]
178};
179
180
181enum _:enumSkills
182{
183 SKILL_HP,
184 SKILL_EXTRACASH,
185 SKILL_GETCASH,
186 SKILL_PAYCHECK,
187 SKILL_MAXMEMBERS
188}
189
190enum _:enGangColors
191{
192 rColor,
193 gColor,
194 bColor,
195 ColorName[ 20 ]
196};
197
198
199new const szSkills[ enumSkills ][ enBasic ] =
200{
201 {
202 "Health Regeneration",
203 "gang teammates health will reagan every few seconds",
204 1,
205 GangRegen,
206 { 0, 35, 30, 20, 15 },
207 { 200, 1000, 1500, 2000, 0 },
208 { 20, 50, 70, 100, 0 },
209 },
210 {
211 "Extra Cash",
212 "gang teammates getting extra cash for each kill",
213 1,
214 GangBoost,
215 { 0 , 25, 50, 75, 100 },
216 { 75000 , 250000, 325000, 500000, 0 },
217 { 500 , 700, 900, 1000, 0 }
218 },
219 {
220 "Get Cash",
221 "gang teammates will be able to use the command /getcash",
222 1,
223 GangGetCash,
224 { 0, 100, 150, 200 , 250 },
225 { 2000, 10000, 12500, 17000 , 20000 },
226 { 200 , 400, 700, 1000, 0 }
227 },
228 {
229 "Paycheck ",
230 "gang teammates reciving more cash every paycheck",
231 1,
232 GangNext,
233 { 0, 250, 325, 400, 500 },
234 { 125000, 380000, 500000, 750000, 0 },
235 { 800 , 1500, 2500, 5000, 0 }
236 },
237 {
238 "Max Memebers",
239 "incrising the amount of gang memebers",
240 0,
241 GangSkillMemeber,
242 { 3, 8, 10, 14, 20 },
243 { 10000, 75000, 125000, 200000, 300000 },
244 { 1000 , 1100, 1250, 1700, 0 }
245 }
246};
247
248new const g_strCards[ MAX_CARD_KINDS ][] =
249{
250 "A",
251 "2",
252 "3",
253 "4",
254 "5",
255 "6",
256 "7",
257 "8",
258 "9",
259 "10",
260 "J",
261 "Q",
262 "K"
263}
264
265new cardCount[ MAX_CARD_KINDS ] =
266{
267 1,
268 2,
269 3,
270 4,
271 5,
272 6,
273 7,
274 8,
275 9,
276 10,
277 10,
278 10,
279 10
280}
281
282new const g_iGangsColors[ MAX_GANGS ][ enGangColors ] =
283{
284 { 200, 000, 000, "Red" },
285 { 255, 083, 073, "Red Orange" },
286 { 255, 117, 056, "Orange" },
287 { 255, 174, 066, "Yellow Orange" },
288 { 255, 207, 171, "Peach" },
289 { 252, 232, 131, "Yellow" },
290 { 254, 254, 034, "Lemon Yellow" },
291 { 059, 176, 143, "Jungle Green" },
292 { 197, 227, 132, "Yellow Green" },
293 { 000, 150, 000, "Green" },
294 { 120, 219, 226, "Aquamarine" },
295 { 135, 206, 235, "Baby Blue" },
296 { 128, 218, 235, "Sky Blue" },
297 { 000, 000, 255, "Blue" },
298 { 146, 110, 174, "Violet" },
299 { 255, 105, 180, "Hot Pink" },
300 { 246, 100, 175, "Magenta" },
301 { 205, 074, 076, "Mahogany" },
302 { 250, 167, 108, "Tan" },
303 { 234, 126, 093, "Light Brown" },
304 { 180, 103, 077, "Brown" },
305 { 149, 145, 140, "Gray" },
306 { 000, 000, 000, "Black" },
307 { 255, 255, 255, "White" }
308}
309
310new const g_strColorMessage[ MAX_COLORS ][ ] =
311{
312 "Gray",
313 "White",
314 "Yellow",
315 "Red"
316}
317
318new const g_strColorGang[ MAX_COLORS ][ ] =
319{
320 "\d",
321 "\w",
322 "\y",
323 "\r"
324} /* Vault */
325
326new const g_szGangValues[ ][ ] =
327{
328 "Regeneration", "CashBoost","GetCash",
329 "NextCash", "Cash", "GangMessage",
330 "MaxDonation", "GangCreation", "GangColor",
331 "GangPlayers", "GangCredits"
332};
333
334new Array:g_aGangs, Trie:g_tGangNames, Trie:g_tGangValues;
335
336new g_iGang[ 33 ], g_Player[ 33 ][ MAX_SHIT ], g_iPlayer[ 33 ][ enumBJCards ][ enumBlackjack ];
337new g_intPlayer[ 33 ][ enumPlayer ], g_intItem[ 33 ][ 6 ], g_Top15[ 2048 ], szItem[ 256 ], g_strGangTest[ 33 ][ 35 ];
338new bool: bGetCash[ 33 ], bool: bGlow, bool:g_bisUpgradeShit[ 33 ]
339new Float: fRegen[ 33 ];
340
341new const g_szGangs[] = "Gangs_File";
342new const g_szGangPlayerss[] = "Gang_Offical_File";
343/* Regex */
344
345new g_regex_return, Regex:g_SteamID_pattern;
346
347public plugin_init()
348{
349 register_plugin( Info[ 0 ], Info[ 1 ], Info[ 2 ] );
350
351 register_clcmd( "say /check", "CmdCheckCmd" );
352
353 register_clcmd( "say", "CmdSay" );
354 register_clcmd( "say /gang", "CmdGang" );
355 register_clcmd( "say /showtop", "CmdOwnerMenu" );
356
357 register_clcmd( "Choose_Your_GangName", "CmdCreateGang" );
358
359 register_clcmd( "Choose Money Amount", "CmdGangDonate" );
360 register_clcmd( "Withdraw Money Amount", "CmdGangWithdraw" );
361 register_clcmd( "Choose Credits Amount", "CmdGangCredits" );
362
363 register_clcmd( "Change Gang Name", "CmdGangChangeName" );
364 register_clcmd ( "gang_message", "fnMessageGang" )
365
366 register_forward( FM_PlayerPreThink, "FwdPreThink" );
367
368 register_event( "DeathMsg", "evDeathMsg", "a" );
369 register_logevent( "evRoundStart", 2, "1=Round_Start" );
370
371 register_menucmd(register_menuid("blackjackmenu"), 1023, "Handler_blackjackmenu")
372 register_menucmd(register_menuid("GangPlayerMenu"),KEYS_GENERIC,"GangBack")
373 register_menucmd(register_menuid("GangUpgradeMenu"),KEYS_GENERIC,"GangUpgradeHandle")
374
375 g_aGangs = ArrayCreate( GangInfo );
376
377 g_tGangValues = TrieCreate();
378 g_tGangNames = TrieCreate();
379
380 new error[ 2 ];
381 g_SteamID_pattern = regex_compile(REGEX_STEAMID_PATTERN, g_regex_return, error, sizeof(error) - 1);
382
383 for( new i; i < sizeof g_szGangValues; i++ )
384 TrieSetCell( g_tGangValues, g_szGangValues[ i ], i );
385
386 LoadGangs();
387}
388
389public SayCCTop15( Client )
390{
391 static aData[ GangInfo ];
392
393 new Array:arrayStats,Trie:trieNames;
394 new strTemp[ 20 ],kNum[ 6 ], intRank, strKName[ 32 ], strRank[ 5 ], iLen
395
396 arrayStats = ArrayCreate( 20 )
397 trieNames = TrieCreate()
398
399 for ( new i; i < ArraySize( g_aGangs ); i++ )
400 {
401 ArrayGetArray( g_aGangs, i, aData );
402 formatex( strTemp, charsmax( strTemp ),"%d %d", i, aData[ GangMaxDonation ])
403 ArrayPushString( arrayStats, strTemp )
404
405 num_to_str( i, kNum, charsmax( kNum ) );
406 TrieSetString( trieNames, kNum ,aData[ GangName ] )
407 }
408 ArraySort(arrayStats,"GangSorter")
409
410 iLen = format(g_Top15, sizeof g_Top15 - 1,"<meta charset=UTF-8><style>body{background:#242424;margin:20px;font-family:Tahoma}th{background:#2F3034;color:#BDB670;text-align:center} table{padding:4px;background:#4A4945;font-size:10px;color:#FFF}img{height:12px;background:#99CC00;margin:0 3px}#r{height:12px;background:#999900}#clr{background:none;color:#FFF;font-size:20px}</style>");
411 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<body><center><table><tr align=center>" )
412
413 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<tr align=center><th><h1>#10 Top Gangs<tr align=center>" )
414 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<tr align=center><th><h3>Name: %s<tr align=center>", szName( Client ))
415 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<tr align=center><th><h3>Note: Top cash may take a few moments to update.<tr align=center></table>" )
416 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<br><br>" )
417
418 iLen += formatex(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen, "<table cellpadding=1 cellspacing=1 border=0><th width=1%%><align=left font color=white> %s <th width=5%%> %-22.22s <th width=5%%> %s", "#", "Name", "Max Donation")
419
420
421 for ( new x = 0; x < ArraySize( g_aGangs ); x++ )
422 {
423 new pt = getter( arrayStats, x, intRank )
424
425 formatex( strRank, charsmax( strRank ), "%d", intRank)
426 TrieGetString( trieNames, strRank, strKName, charsmax( strKName ) )
427
428 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<tr align=left><td>%d</td><td>%s</td><td>%i</td>", x + 1, strKName, pt);
429
430 }
431
432 ArrayDestroy( arrayStats )
433 TrieDestroy( trieNames )
434
435 show_motd( Client, g_Top15, "Top Gangs" );
436}
437
438public SayCCTop15Players( Client )
439{
440 static aData[ GangInfo ];
441 new Array:arrayStats,Trie:trieNames;
442 new strTemp[ 20 ], strKey[ 64 ], szAuthID[ 35 ], szNameID[ 35 ],kNum[ 6 ], intRank, strKName[ 32 ], strRank[ 5 ], iLen, intTotal
443
444 arrayStats = ArrayCreate( 20 )
445 trieNames = TrieCreate()
446
447 new Array:arrayData;
448 new eData[ enumPlayer ];
449 new Total = GetPlayerStats( arrayData );
450
451 ArrayGetArray( g_aGangs, str_to_num( g_intItem[ Client ] ), aData );
452
453 for( new i = 0; i < Total; i++ )
454 {
455 ArrayGetArray( arrayData, i, eData );
456
457 if ( !( equal( eData[ playerGangName ], aData[ GangName ] ) ) )
458 continue;
459 formatex( strTemp, charsmax( strTemp ),"%d %d", i, eData[ playerCash ])
460 ArrayPushString( arrayStats, strTemp )
461
462 num_to_str( i, kNum, charsmax( kNum ) );
463
464 formatex( strKey, charsmax( strKey ), eData[ playerName ]);
465 replace_all( strKey, charsmax( strKey ), "@", " ");
466 parse( strKey, szAuthID, charsmax( szAuthID ), szNameID, charsmax( szNameID ) );
467
468
469 TrieSetString( trieNames, kNum ,szNameID )
470 client_print( Client, print_chat, "%d %d", i, eData[ playerCash ]);
471
472 intTotal++;
473
474 }
475 ArraySort(arrayStats,"GangSorter")
476
477 iLen = format(g_Top15, sizeof g_Top15 - 1,"<meta charset=UTF-8><style>body{background:#242424;margin:20px;font-family:Tahoma}th{background:#2F3034;color:#BDB670;text-align:center} table{padding:4px;background:#4A4945;font-size:10px;color:#FFF}img{height:12px;background:#99CC00;margin:0 3px}#r{height:12px;background:#999900}#clr{background:none;color:#FFF;font-size:20px}</style>");
478 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<body><center><table><tr align=center>" )
479
480 //iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<tr align=center><th><h1>%s Top Cash<tr align=center>", aData[ GangName ])
481 //iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<tr align=center><th><h3>Name: %s<tr align=center>", szName( Client ))
482 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<tr align=center><th><h3>Note: Top cash may take a few moments to update.<tr align=center></table>" )
483 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<br><br>" )
484
485 iLen += formatex(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen, "<table cellpadding=1 cellspacing=1 border=0><th width=1%%><align=left font color=white> %s <th width=5%%> %-22.22s <th width=5%%> %s", "#", "Name", "Max Donation")
486
487
488 for ( new x = 0; x < intTotal; x++ )
489 {
490 new pt = getter( arrayStats, x, intRank )
491
492 formatex( strRank, charsmax( strRank ), "%d", intRank)
493 TrieGetString( trieNames, strRank, strKName, charsmax( strKName ) )
494
495 iLen += format(g_Top15[iLen], (sizeof g_Top15 - 1) - iLen,"<tr align=left><td>%d</td><td>%s</td><td>%i</td>", x + 1, strKName, pt);
496
497 }
498 ArrayDestroy( arrayStats )
499 TrieDestroy( trieNames )
500
501
502 show_motd( Client, g_Top15, "Gang Top Donations" );
503}
504
505public CmdCheckCmd( index )
506{
507 static aData[ GangInfo ];
508
509 if( g_iGang[ index ] > -1 )
510 {
511 ArrayGetArray( g_aGangs, g_iGang[ index ], aData );
512 //if( is_day() )
513 fm_set_user_rendering( index, kRenderFxGlowShell, g_iGangsColors[ aData[ GangColor ] ][ 0 ], g_iGangsColors[ aData[ GangColor ] ][ 1 ], g_iGangsColors[ aData[ GangColor ] ][ 2 ], 48 );
514 }
515
516 return 1;
517}
518public plugin_natives()
519{
520 register_library( "GangLibrary" );
521
522 register_native( "set_glow", "_set_glow" );
523
524 register_native( "remove_glow", "_remove_glow" );
525
526 register_native( "get_user_gang_nextcash", "_get_user_gang_nextcash" );
527
528 register_native( "get_user_gangid", "NativeGetGang" );
529}
530
531
532public NativeGetGang( plugin, params )
533{
534 static index;
535
536 index = get_param( 1 );
537
538 if ( g_iGang[ index ] == -1 )
539 return -1;
540
541 return g_iGang[ index ];
542}
543
544public _get_user_gang_nextcash( plugin, params )
545{
546 static index;
547
548 index = get_param( 1 );
549
550 if ( g_iGang[ index ] == -1 )
551 return 0;
552
553 static aData[ GangInfo ], lvl, cash;
554
555 ArrayGetArray( g_aGangs, g_iGang[ index ], aData );
556
557 lvl = aData[ GangNext ];
558 cash = szSkills[ SKILL_PAYCHECK ][ baseArrayNumber + lvl ];
559
560 return cash;
561}
562
563public CmdCreateGang( client )
564{
565 static szArgs[ 64 ];
566
567 read_args( szArgs, charsmax( szArgs ) );
568
569 remove_quotes( szArgs )
570
571 if ( strlen( szArgs ) < 3 )
572 {
573 client_cmd( client, "messagemode Choose_Your_GangName" );
574 return ColorChat( client, "The name is too short." );
575 }
576
577 if ( !is_str_alpha( szArgs ) )
578 {
579 client_cmd( client, "messagemode Choose_Your_GangName" );
580 return ColorChat( client, "You need to use letters only." );
581 }
582
583 copy( g_strGangTest[ client ], 35, szArgs );
584 return MenuCreateGang( client );
585}
586
587public CmdGangCredits( client )
588{
589 if ( !is_user_connected( client ) )
590 return 1;
591
592 if ( g_iGang[ client ] == -1 )
593 return ColorChat( client, "You need to be in a gang." );
594
595 new aData[ GangInfo ];
596
597 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
598
599 static szArgs[ 32 ], iAmount;
600
601 read_args( szArgs, charsmax( szArgs ) );
602
603 remove_quotes( szArgs );
604
605 iAmount = str_to_num( szArgs );
606
607 if ( !is_str_num( szArgs ) )
608 return 1;
609
610 if ( iAmount < 1 )
611 {
612 client_cmd( client, "messagemode Choose Credits Amount" );
613
614 return ColorChat( client, "You need to depoist at least^4 1 Credits^1." );
615 }
616
617 if ( iAmount > g_intPlayer[ client ][ playerTokens ] )
618 {
619 client_cmd( client, "messagemode Choose Credits Amount" );
620
621 return ColorChat( client, "You don't have this amount of Credits." );
622 }
623
624 new Players[ 32 ], iNum, iTemp;
625
626 get_players( Players, iNum, "ch" );
627
628 for ( new i; i < iNum; i++ )
629 {
630 iTemp = Players[ i ];
631
632 if ( g_iGang[ iTemp ] != g_iGang[ client ] || iTemp == client )
633 continue;
634
635 ColorChat( iTemp, "^4%s^1 donated^3 %i^1 cash to the^3 %s^1 gang.", szName( client ), iAmount, aData[ GangName ]);
636
637 }
638
639 ColorChat( client, "You donated^3 %i^1 cash to the gang^3 %s^1.", iAmount, aData[ GangName ] );
640
641
642 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
643
644 aData[ GangCredits ] += iAmount;
645
646 ArraySetArray( g_aGangs, g_iGang[ client ], aData );
647
648 g_intPlayer[ client ][ playerTokens ] -= iAmount;
649 SaveUser( client );
650 return 1;
651}
652
653public CmdGangWithdraw( client )
654{
655 if ( !is_user_connected( client ) )
656 return 1;
657
658 if ( g_iGang[ client ] == -1 )
659 return ColorChat( client, "You need to be in a gang." );
660
661 new aData[ GangInfo ];
662
663 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
664
665 static szArgs[ 32 ], iAmount;
666
667 read_args( szArgs, charsmax( szArgs ) );
668
669 remove_quotes( szArgs );
670
671 iAmount = str_to_num( szArgs );
672
673 if ( !is_str_num( szArgs ) )
674 return 1;
675
676 if ( iAmount < 1 )
677 {
678 client_cmd( client, "messagemode Withdraw Money Amount" );
679
680 return ColorChat( client, "You need to depoist at least^4 1 Cash^1." );
681 }
682
683 if ( iAmount > aData[ GangCash ] )
684 {
685 client_cmd( client, "messagemode Withdraw Money Amount" );
686
687 return ColorChat( client, "the Gang don't have this amount of cash." );
688 }
689
690 new Players[ 32 ], iNum, iTemp;
691
692 get_players( Players, iNum, "ch" );
693
694 for ( new i; i < iNum; i++ )
695 {
696 iTemp = Players[ i ];
697
698 if ( g_iGang[ iTemp ] != g_iGang[ client ] || iTemp == client )
699 continue;
700
701 ColorChat( iTemp, "^4%s^1 Withdraw^3 %i^1 cash from the^3 %s^1 gang.", szName( client ), iAmount, aData[ GangName ]);
702
703 }
704
705 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
706
707 aData[ GangCash ] -= iAmount;
708
709 ArraySetArray( g_aGangs, g_iGang[ client ], aData );
710
711 ColorChat( client, "You Withdraw^3 %i^1 cash from the^3 %s^1 gang.", iAmount, aData[ GangName ]);
712
713 set_user_cash( client, get_user_cash( client ) + iAmount );
714
715 return 1;
716}
717
718public CmdGangDonate( client )
719{
720 if ( !is_user_connected( client ) )
721 return 1;
722
723 if ( g_iGang[ client ] == -1 )
724 return ColorChat( client, "You need to be in a gang." );
725
726 new aData[ GangInfo ];
727
728 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
729
730 static szArgs[ 32 ], iAmount;
731
732 read_args( szArgs, charsmax( szArgs ) );
733
734 remove_quotes( szArgs );
735
736 iAmount = str_to_num( szArgs );
737
738 if ( !is_str_num( szArgs ) )
739 return 1;
740
741 if ( iAmount < 1 )
742 {
743 client_cmd( client, "messagemode Choose Money Amount" );
744
745 return ColorChat( client, "You need to depoist at least^4 1 Cash^1." );
746 }
747
748 if ( iAmount > get_user_cash( client ) )
749 {
750 client_cmd( client, "messagemode Choose Money Amount" );
751
752 return ColorChat( client, "You don't have this amount of cash." );
753 }
754
755 new Players[ 32 ], iNum, iTemp;
756
757 get_players( Players, iNum, "ch" );
758
759 for ( new i; i < iNum; i++ )
760 {
761 iTemp = Players[ i ];
762
763 if ( g_iGang[ iTemp ] != g_iGang[ client ] || iTemp == client )
764 continue;
765
766 ColorChat( iTemp, "^4%s^1 donated^3 %i^1 cash to the^3 %s^1 gang.", szName( client ), iAmount, aData[ GangName ]);
767
768 }
769
770 ColorChat( client, "You donated^3 %i^1 cash to the gang^3 %s^1.", iAmount, aData[ GangName ] );
771
772
773 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
774
775 aData[ GangCash ] += iAmount;
776 aData[ GangMaxDonation ] += iAmount;
777 g_intPlayer[ client ][ playerCash ] += iAmount;
778
779 SaveUser( client );
780 ArraySetArray( g_aGangs, g_iGang[ client ], aData );
781
782 set_user_cash( client, get_user_cash( client ) - iAmount );
783
784 return 1;
785}
786
787public plugin_end()
788{
789 SaveGangs();
790}
791
792public client_putinserver( client )
793{
794 LoadUser( client );
795
796 g_iGang[ client ] = get_user_gang( client );
797
798 bGetCash[ client ] = true;
799
800 fRegen[ client ] = get_gametime();
801}
802
803public client_disconnect( client )
804{
805 g_iGang[ client ] = -1;
806}
807
808public CmdGang( client )
809{
810 static Menu, aData[ GangInfo ], szGangName[ 32 ], szGangMessage[ 80 ];
811
812 szGangName = "Gang Message";
813 szGangMessage = "Welcome to the Gang Menu";
814
815 if ( g_iGang[ client ] > -1 )
816 {
817 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
818
819 formatex( szGangName, charsmax( szGangName ), aData[ GangName ] );
820 formatex( szGangMessage, charsmax( szGangMessage ), aData[ GangMessage ] );
821 replace_all( szGangMessage, charsmax( szGangMessage ), "*newline*", "^n");
822 }
823
824 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\yJailbreak Gangs \wMain Menu^n^n\d[ \y%s \d] %s^n", Info[ 3 ], szGangName, szGangMessage);
825 Menu = menu_create( szItem, "HandlerGangMenu" );
826
827
828 menu_additem( Menu, ( g_iGang[ client ] != -1 ) ? "Leave Gang" : "\wCreate Gang \d[ \r$\w200,000 \d]");
829 menu_additem( Menu, "View Server Gangs" );
830 menu_additem( Menu, (g_iGang[ client ] < -1) ? "\dGang Homepage^n" : "Gang Homepage^n" );
831 menu_additem( Menu, "Gang Top 15" );
832
833 menu_display( client, Menu );
834
835 return 1;
836}
837
838public HandlerGangMenu( client, Menu, Item )
839{
840 if ( Item == MENU_EXIT )
841 {
842 menu_destroy( Menu );
843
844 return 1;
845 }
846
847 switch ( Item )
848 {
849 case 0:
850 {
851 if ( g_iGang[ client ] == -1 )
852 {
853 g_strGangTest[ client ] = "None";
854 MenuCreateGang( client );
855 }
856 else
857 {
858 if ( getStatus( client, g_iGang[ client ] ) == STATUS_LEADER )
859 {
860 return CmdGang( client );
861 }
862 return CmdLeaveConfirm( client );
863 }
864 }
865
866 case 1:
867 {
868 return CmdGangsInfo( client );
869 }
870 case 2:
871 return GangHomePage( client );
872 case 3:
873 SayCCTop15( client );
874
875 }
876
877 menu_destroy( Menu );
878
879 return 1;
880}
881
882public MenuCreateGang( id )
883{
884 new strTemp[ 65 ]
885
886 formatex(strTemp, charsmax( strTemp ), "\r[ \w%s \r] \yGang Create Main", Info[ 3 ]);
887
888 new Menu = menu_create(strTemp, "GangMenu_Handler")
889
890 formatex(strTemp, charsmax(strTemp), "Gang Name \y[%s]", g_strGangTest[ id ] );
891 menu_additem(Menu, strTemp, "1", 0)
892
893 formatex(strTemp, charsmax(strTemp), "Gang Color \y[%s]", g_iGangsColors[ g_Player[ id ][ PLAYER_COLOR_MENU ] ][ ColorName ]);
894 menu_additem(Menu, strTemp, "2", 0)
895
896 menu_additem(Menu, "Create Gang", "3", 0)
897
898 menu_display( id, Menu, 0);
899
900 return PLUGIN_HANDLED;
901}
902
903public GangMenu_Handler( client, Menu, key )
904{
905
906 if( key == MENU_EXIT )
907 {
908 menu_destroy( Menu );
909
910 CmdGang( client )
911
912 return 1;
913 }
914
915 switch( key )
916 {
917
918 case 0:
919 {
920 client_cmd( client, "messagemode Choose_Your_GangName" );
921 ColorChat( client, "Type in the ^4Gang Name^1.");
922 return 1;
923 }
924 case 1:
925 {
926 Menu_Color( client );
927 return 1;
928 }
929 case 2:
930 {
931 if ( get_user_cash( client ) < GANG_COST )
932 return ColorChat( client, "You don't have enough cash." );
933
934 if ( g_iGang[ client ] > -1 )
935 return ColorChat( client, "You're already in a gang" );
936
937 if ( ArraySize( g_aGangs ) >= MAX_GANGS - 1 )
938 return ColorChat( client, "There are too many gangs." );
939
940 if ( TrieKeyExists( g_tGangNames, g_strGangTest[ client ] ) )
941 {
942 MenuCreateGang( client );
943
944 return ColorChat( client, "There's already a gang with that name." );
945 }
946
947 static bData[ GangInfo ];
948
949 for ( new i; i < ArraySize( g_aGangs ); i++ )
950 {
951 ArrayGetArray( g_aGangs, i, bData );
952
953 if ( equali( bData[ GangName ], g_strGangTest[ client ] ) )
954 {
955 MenuCreateGang( client );
956 return ColorChat( client, "Theres already a gang with that name." );
957 }
958 }
959
960 new iHours, iMints, iSeconds;
961 new iDays, iMounths, iYears;
962 new aData[ GangInfo ];
963
964 time( iHours, iMints, iSeconds );
965 date( iYears, iMounths, iDays );
966
967 aData[ GangName ] = g_strGangTest[ client ];
968 aData[ GangMessage ] = "None Message";
969
970 aData[ GangColor ] = g_Player[ client ][ PLAYER_COLOR_MENU ];
971 aData[ GangMaxDonation ] = 0;
972 aData[ GangCash ] = 0;
973 aData[ GangCredits ] = 0;
974 aData[ NumMembers ] = 0;
975 aData[ GangMembers ] = _:TrieCreate();
976
977 aData[ GangRegen ] = szSkills[ SKILL_HP ][ baseCount ];
978 aData[ GangBoost ] = szSkills[ SKILL_EXTRACASH ][ baseCount ];
979 aData[ GangGetCash ] = szSkills[ SKILL_GETCASH ][ baseCount ];
980 aData[ GangNext ] = szSkills[ SKILL_PAYCHECK ][ baseCount ];
981 aData[ GangSkillMemeber ] = szSkills[ SKILL_MAXMEMBERS ][ baseCount ];
982
983
984 formatex( aData[ GangCreation ],79,"%d:%d:%d %d/%d/%d", iHours, iMints, iSeconds, iDays, iMounths, iYears);
985 ArrayPushArray( g_aGangs, aData );
986
987 set_user_cash( client, get_user_cash( client ) - GANG_COST );
988
989 g_intPlayer[ client ][ playerBjLose ] = 0;
990 g_intPlayer[ client ][ playerBjWin ] = 0;
991 g_intPlayer[ client ][ playerBjTotalWin ] = 0;
992 g_intPlayer[ client ][ playerBjTotalLose ] = 0;
993 g_intPlayer[ client ][ playerCash ] = 0;
994
995 g_intPlayer[ client ][ playerGangInvited ] = "CREATOR";
996
997 time( iHours, iMints, iSeconds );
998 date( iYears, iMounths, iDays );
999
1000 formatex( g_intPlayer[ client ][ playerGangInvitedDate ],79,"%d:%d:%d %d/%d/%d", iHours, iMints, iSeconds, iDays, iMounths, iYears);
1001
1002 set_user_gang( client, ArraySize( g_aGangs ) - 1, STATUS_LEADER );
1003
1004 return ColorChat( 0, "^3%s^1 created the gang:^4 %s", szName( client ), g_strGangTest[ client ] );
1005 }
1006
1007 }
1008
1009 return 1;
1010}
1011
1012stock GetColorName( intItem )
1013{
1014 static aData[ GangInfo ];
1015
1016 new strKey[ 64 ];
1017 formatex( strKey, charsmax( strKey ), "%s", g_iGangsColors[ intItem ][ ColorName ]);
1018
1019 for ( new i; i < ArraySize( g_aGangs ); i++ )
1020 {
1021 ArrayGetArray( g_aGangs, i, aData );
1022
1023 if( aData[ GangColor ] == intItem )
1024 {
1025 formatex( strKey, charsmax( strKey ), "%s\r(%s)", g_iGangsColors[ aData[ GangColor ] ][ ColorName ], aData[ GangName ]);
1026 }
1027
1028 }
1029
1030 return strKey
1031
1032}
1033
1034public Menu_Color( id )
1035{
1036 new strTemp[100], g_priceCallBack = menu_makecallback( "menu_callback" )
1037
1038 formatex(strTemp, charsmax(strTemp), "\r[ \w%s \r] \yGang Colors Menu", Info[ 3 ])
1039
1040 new intMenu = menu_create(strTemp, "Handler_Colors")
1041
1042 new strKey[ 6 ]
1043
1044 for(new i = 0; i < MAX_GANGS; i++)
1045 {
1046 // Check if color isnt used yet..
1047 num_to_str(i, strKey, charsmax(strKey))
1048 menu_additem(intMenu, GetColorName( i ), strKey, 0, g_priceCallBack)
1049 }
1050 menu_display(id, intMenu)
1051}
1052public menu_callback( Client, menu, item )
1053{
1054 static aData[ GangInfo ];
1055 for ( new i; i < ArraySize( g_aGangs ); i++ )
1056 {
1057 ArrayGetArray( g_aGangs, i, aData );
1058
1059 if( aData[ GangColor ] == item )
1060 {
1061 return ITEM_DISABLED;
1062 }
1063
1064 }
1065 return ITEM_IGNORE;
1066}
1067
1068public Handler_Colors( id, menu, item )
1069{
1070 if(item == MENU_EXIT)
1071 {
1072 menu_destroy(menu)
1073 return PLUGIN_HANDLED
1074 }
1075 else
1076 {
1077 g_Player[ id ][ PLAYER_COLOR_MENU ] = MenuKey( menu, item );
1078 client_print(id, print_chat, "Choosen Color is %s", g_iGangsColors[ g_Player[ id ][ PLAYER_COLOR_MENU ] ][ ColorName ])
1079 MenuCreateGang( id );
1080 }
1081 return PLUGIN_HANDLED
1082}
1083
1084public GangHomePage( Client )
1085{
1086 static Menu, aData[ GangInfo ]
1087 ArrayGetArray( g_aGangs, g_iGang[ Client ], aData );
1088
1089 new g_sBuffer[ 1024 ], iLen = 0;
1090
1091 iLen = format(g_sBuffer[iLen], 1023, "\r[\w %s \r] \yJailbreak Gang Homepage Main^n\r*\d*Note:Soon Gang Fights , Winner Gang Song^n^n", Info[ 3 ])
1092
1093 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\wGang Description:^n^n")
1094
1095 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yGang Name: \w%s \y| \wOnline \r%i\y | Color :\w%s^n", aData[ GangName ], GetOnlineMemebers( g_iGang[ Client ] ), g_iGangsColors[ aData[ GangColor ] ][ ColorName ])
1096 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yGang Max Donations : \r$\w%i^n", aData[ GangMaxDonation ])
1097 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yLeader: \w%s^n", GetGangOwner( g_iGang[ Client ] ))
1098 Menu = menu_create( g_sBuffer, "Handler_CharInfo" );
1099
1100 menu_additem( Menu, "Gang Bank^n");
1101
1102 menu_additem( Menu, "Memeber Menu");
1103 menu_additem( Menu, "Admin Menu^n");
1104
1105 menu_additem( Menu, "Leader Management");
1106
1107 menu_display( Client, Menu );
1108
1109 return 1;
1110}
1111
1112public Handler_CharInfo( client, Menu, Item )
1113{
1114 if ( Item == MENU_EXIT )
1115 {
1116 menu_destroy( Menu );
1117
1118 return 1;
1119 }
1120 switch( Item )
1121 {
1122 case 0:
1123 {
1124 if ( g_iGang[ client ] == -1 )
1125 return CmdGang( client );
1126
1127 return CmdGangBank( client );
1128 }
1129 case 1:
1130 {
1131 if ( g_iGang[ client ] == -1 )
1132 return CmdGang( client );
1133
1134 return CmdMembersMenu( client);
1135 }
1136
1137 case 2:
1138 {
1139 if ( g_iGang[ client ] == -1 )
1140 return CmdGang( client );
1141
1142 else if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
1143 return CmdGang( client );
1144
1145 return CmdAdminMenu( client );
1146 }
1147
1148 case 3:
1149 {
1150 if ( g_iGang[ client ] == -1 )
1151 return CmdGang( client );
1152
1153 else if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
1154 return CmdGang( client );
1155
1156 return CmdOwnerMenu( client );
1157 }
1158 }
1159}
1160
1161public CmdMembersMenu( client )
1162{
1163 if ( g_iGang[ client ] == -1 )
1164 return ColorChat( client, "You need to be in a gang." );
1165
1166 static aData[ GangInfo ], Menu;
1167
1168 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1169
1170 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\y Gangs Menu^n\wMembers Menu", Info[ 3 ]);
1171
1172 Menu = menu_create( szItem, "SubMembersMenu" );
1173
1174 formatex( szItem, charsmax( szItem ), "Gang Memebers\y(%i)", getOnlineMembers( g_iGang[ client ] ) );
1175
1176 menu_additem( Menu, szItem );
1177
1178 menu_additem( Menu, "View Gang Skills^n" );
1179 menu_additem( Menu, "Gang Blackjack" );
1180
1181 menu_display( client, Menu );
1182
1183 return 1;
1184}
1185
1186
1187public SubMembersMenu( client, Menu, Item )
1188{
1189 if ( g_iGang[ client ] == -1 )
1190 return ColorChat( client, "You need to be in a gang." );
1191
1192 if ( Item == MENU_EXIT )
1193 {
1194 menu_destroy( Menu );
1195
1196 return CmdGang( client );
1197 }
1198
1199 switch ( Item )
1200 {
1201 case 0:
1202 {
1203 if ( g_iGang[ client ] == -1 )
1204 return CmdGang( client );
1205
1206 return CmdMembersViewMenu( client, g_iGang[ client ] );
1207 }
1208
1209 case 1:
1210 return CmdGangSkills( client );
1211
1212 case 2:
1213 {
1214 g_Player[ client ][ PLAYER_AMOUNT ] = 1;
1215 CmdBlackJack( client );
1216 }
1217 }
1218
1219 menu_destroy( Menu );
1220
1221 return 1;
1222}
1223
1224
1225stock GetGangOwner( iGang )
1226{
1227 static aData[ GangInfo ], szKey1[ 128 ], szAuthID[ 35 ], szNameID[ 32 ]
1228
1229 ArrayGetArray( g_aGangs, iGang, aData );
1230
1231 new Array:arrayData;
1232 new eData[ enumPlayer ];
1233 new Total = GetPlayerStats( arrayData );
1234
1235 for( new i = 0; i < Total; i++ )
1236 {
1237 ArrayGetArray( arrayData, i, eData );
1238
1239 formatex( szKey1, charsmax( szKey1 ), eData[ playerName ]);
1240 if ( equali( eData[ playerGangName ], aData[ GangName ] ) )
1241 {
1242 if( eData[ playerGangData ] == 3 )
1243 {
1244 replace( szKey1, charsmax( szKey1 ), "@", " " );
1245
1246 parse( szKey1, szAuthID, charsmax( szAuthID ), szNameID, charsmax( szNameID ) );
1247 break;
1248 }
1249 }
1250
1251 }
1252 return szNameID;
1253}
1254
1255public CmdGangSkills( client )
1256{
1257 if ( g_iGang[ client ] == -1 )
1258 return ColorChat( client, "You need to be in a gang." );
1259
1260 static Menu, aData[ GangInfo ], iData, MaxData, kNum[ 6 ];
1261 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1262 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Menu \rUpgraded \wSkills^n\wCurrnet Gang:\y %s", Info[ 3 ], aData[ GangName ] );
1263
1264 Menu = menu_create( szItem, "SubGangSkills" );
1265
1266 for( new i = 0; i <= charsmax( szSkills ); i++ )
1267 {
1268 iData = aData[ i + GangRegen ];
1269 MaxData = ( MAX_SKILL_ARRAY - 1 );
1270
1271 if ( iData == MaxData )
1272 formatex( szItem, charsmax( szItem ), "%s:\y Max", szSkills[ i ][ baseName ] );
1273
1274 else
1275 formatex( szItem, charsmax( szItem ), "%s", szSkills[ i ][ baseName ])
1276 num_to_str( i, kNum, charsmax( kNum ) );
1277 menu_additem( Menu, szItem, kNum );
1278 }
1279 menu_display( client, Menu );
1280
1281 return 1;
1282}
1283
1284public GangUpgradeShower( Client, IntItem )
1285{
1286 new g_sBuffer[ 1024 ], iLen = 0;
1287
1288 static aData[ GangInfo ], iData;
1289 ArrayGetArray( g_aGangs, g_iGang[ Client ], aData );
1290
1291 new CurrectUpg = IntItem + GangRegen;
1292
1293 iLen = format(g_sBuffer[iLen], 1023, "\r[\w %s \r]\w Gang \r%s \wUpgrades^n^n^n", Info[ 3 ], aData[ GangName ])
1294
1295
1296 iLen = formatex( g_sBuffer[iLen], charsmax( g_sBuffer ) - iLen, "^n^n\yUpgrade Name: \w%s\d( \w%i \d/ \r%i MAX \d)^n", szSkills[ IntItem ][ baseName ], GetStatusShit( Client, IntItem, false ) , GetStatusShit( Client, IntItem, true ))
1297 iLen += formatex( g_sBuffer[iLen], charsmax( g_sBuffer ) - iLen, "\yUpgrade Statistics: \w[ %s \w] \y(%.1f%%)^n^n", GetStatusUpgrade( g_iGang[ Client ], IntItem ), ( float( aData[ CurrectUpg ] ) / float( ( MAX_SKILL_ARRAY - 2 ) ) * 100.0 ))
1298 iLen += formatex( g_sBuffer[iLen], charsmax( g_sBuffer ) - iLen, "\rDescrption:^n\y* \w%s", szSkills[ IntItem ][ baseDescrption ])
1299
1300 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\r0. \wExit")
1301
1302 show_menu(Client, MENU_KEY_0, g_sBuffer, -1, "GangUpgradeMenu")
1303}
1304
1305GetStatusShit( index, intUpgrade, bool:bMAX )
1306{
1307 new strTemp[ 125 ];
1308
1309 static aData[ GangInfo ];
1310 ArrayGetArray( g_aGangs, g_iGang[ index ], aData );
1311
1312 strTemp = "";
1313
1314 if( bMAX )
1315 formatex( strTemp, charsmax( strTemp ), "%s", szSkills[ intUpgrade ][ baseArrayNumber + ( MAX_SKILL_ARRAY - 2 ) ]);
1316 else
1317 {
1318 strTemp = "";
1319 formatex( strTemp, charsmax( strTemp ), "%s", szSkills[ intUpgrade ][ baseArrayNumber + aData[ intUpgrade + GangRegen ] ])
1320 }
1321 return strTemp;
1322}
1323
1324
1325GetStatusShitInt( index, intUpgrade )
1326{
1327 new intTemp = 0;
1328
1329 static aData[ GangInfo ];
1330 ArrayGetArray( g_aGangs, g_iGang[ index ], aData );
1331
1332 intTemp = szSkills[ intUpgrade ][ baseArrayCashCost + aData[ intUpgrade + GangRegen ] ];
1333 return intTemp;
1334}
1335
1336public GangUpgradeHandle(id,key)
1337{
1338
1339 return CmdGangSkills( id );
1340}
1341
1342GetStatusUpgrade( index, intUpgrade )
1343{
1344 new strTemp[ 125 ], strUpper[ 40 ], strDowner[ 40 ];
1345
1346 static aData[ GangInfo ];
1347 ArrayGetArray( g_aGangs, g_iGang[ index ], aData );
1348
1349 strUpper = "";
1350 strDowner = "";
1351
1352 for( new i = szSkills[ intUpgrade ][ baseCount ]; i <= aData[ intUpgrade + GangRegen ]; i++ )
1353 {
1354 formatex(strUpper, charsmax( strUpper ), "%s\y||", strUpper);
1355 }
1356 for( new i = ( MAX_SKILL_ARRAY - 2 ); i > aData[ intUpgrade + GangRegen ]; i-- )
1357 {
1358 formatex(strDowner, charsmax( strDowner ), "%s\r||", strDowner);
1359 }
1360
1361 formatex( strTemp, charsmax( strTemp ), "%s%s", strUpper, strDowner );
1362
1363 return strTemp;
1364}
1365
1366public SubGangSkills( client, Menu, Item )
1367{
1368 if ( g_iGang[ client ] == -1 )
1369 return ColorChat( client, "You need to be in a gang." );
1370
1371 if ( Item == MENU_EXIT )
1372 {
1373 menu_destroy( Menu );
1374
1375 return CmdMembersMenu( client );
1376 }
1377
1378 GangUpgradeShower( client, MenuKey( Menu, Item ) );
1379}
1380
1381stock getOnlineMembers( Gang )
1382{
1383 static Players[ 32 ], iNum, iPlayer, gNum;
1384
1385 gNum = 0;
1386
1387 get_players( Players, iNum, "ch" );
1388
1389 for ( new i; i < iNum; i++ )
1390 {
1391 iPlayer = Players[ i ];
1392
1393 if ( !is_user_connected( iPlayer ) || Gang != g_iGang[ iPlayer ] )
1394 continue;
1395
1396 gNum++;
1397 }
1398
1399 return gNum;
1400}
1401
1402stock getRank( const client )
1403{
1404 static szRank[ 7 ];
1405
1406 switch ( getStatus( client, g_iGang[ client ] ) )
1407 {
1408 case 1:
1409 szRank = "Member";
1410
1411 case 2:
1412 szRank = "Admin";
1413
1414 case 3:
1415 szRank = "Leader";
1416 }
1417
1418 return szRank;
1419}
1420
1421/* Invite Menu */
1422
1423public CmdShowInvite( client )
1424{
1425 if ( g_iGang[ client ] == -1 )
1426 return ColorChat( client, "You need to be in a gang." );
1427
1428 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
1429 return ColorChat( client, "You have no^x04 access^x01 to this command." );
1430
1431 static aData[ GangInfo ];
1432
1433 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1434
1435 if ( aData[ NumMembers ] >= szSkills[ SKILL_MAXMEMBERS ][ baseArrayNumber + aData[ GangSkillMemeber ] ] )
1436 return ColorChat( client, "The gang has already reached its^3 Maximum Members^1!" );
1437
1438 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Menu^nInvite a Player!", Info[ 3 ] );
1439
1440 new Menu = menu_create( szItem, "SubShowInvite" );
1441
1442 new Players[ 32 ], iNum, iPlayer, szTempid[ 10 ];
1443
1444 get_players( Players, iNum );
1445
1446 for ( new i; i < iNum; i++ )
1447 {
1448 iPlayer = Players[ i ];
1449
1450 if ( iPlayer == client || g_iGang[ iPlayer ] == g_iGang[ client ] )
1451 continue;
1452
1453 num_to_str( iPlayer, szTempid, charsmax( szTempid ) );
1454
1455 menu_additem( Menu, szName( iPlayer ), szTempid );
1456 }
1457
1458 menu_display( client, Menu );
1459
1460 return 1;
1461}
1462
1463public SubShowInvite( client, Menu, Item )
1464{
1465 if ( g_iGang[ client ] == -1 )
1466 return ColorChat( client, "You need to be in a gang." );
1467
1468 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
1469 return ColorChat( client, "You have no^x04 access^x01 to this command." );
1470
1471 static aData[ GangInfo ];
1472
1473 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1474
1475 if ( aData[ NumMembers ] >= szSkills[ SKILL_MAXMEMBERS ][ baseArrayNumber + aData[ GangSkillMemeber ] ] )
1476 return ColorChat( client, "The gang has already reached its^3 Maximum Members^1 Upgrade the Memeber Skill!" );
1477
1478 if ( Item == MENU_EXIT )
1479 {
1480 menu_destroy( Menu );
1481
1482 return 1;
1483 }
1484
1485 new Trash, mData[ 6 ];
1486
1487 menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _, _, Trash );
1488
1489 new iPlayer = str_to_num( mData );
1490
1491 if ( !is_user_connected( iPlayer ) )
1492 return ColorChat( client, "Player is no longer^3 Connected^1." );
1493
1494 if ( g_iGang[ iPlayer ] > -1 )
1495 {
1496 CmdShowInvite( client );
1497
1498 return ColorChat( client, "This user is already in a gang." );
1499 }
1500
1501 ColorChat( client, "You invited^4 %s^1 to the gang^x03 %s^x01.", szName( iPlayer ), aData[ GangName ] );
1502
1503 CmdInviteConfirm( client, iPlayer );
1504
1505 CmdGang( client );
1506
1507 return 1;
1508}
1509
1510public CmdInviteConfirm( client, iPlayer )
1511{
1512 if ( g_iGang[ iPlayer ] > -1 )
1513 return ColorChat( client, "This player is already in a gang." );
1514
1515 copy( g_intPlayer[ iPlayer ][ playerGangInvited ], charsmax( g_intPlayer[][ playerGangInvited ] ), szName( client ) );
1516 new aData[ GangInfo ], szTempid[ 10 ];
1517
1518 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1519
1520 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Menu^n\r%s\w Invited you to\y %s\w gang.", Info[ 3 ], szName( client ), aData[ GangName ] );
1521
1522 new Menu = menu_create( szItem, "SubInviteConfirm" );
1523
1524 num_to_str( g_iGang[ client ], szTempid, charsmax( szTempid ) );
1525
1526 menu_additem( Menu, "Confirm", szTempid );
1527
1528 menu_additem( Menu, "Decline", szTempid );
1529
1530 menu_display( iPlayer, Menu );
1531
1532 return 1;
1533}
1534
1535public SubInviteConfirm( iPlayer, Menu, Item )
1536{
1537 if ( g_iGang[ iPlayer ] > -1 )
1538 return ColorChat( iPlayer, "You're already in a gang." );
1539
1540 if ( Item == MENU_EXIT || Item == 1 )
1541 {
1542 menu_destroy( Menu );
1543
1544 ColorChat( iPlayer, "You^3 declined^1 the invitation." );
1545
1546 return 1
1547 }
1548
1549 new mData[ 6 ], Trash;
1550
1551 menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _,_, Trash );
1552
1553 new iGang = str_to_num( mData );
1554
1555 if ( iGang == -1 )
1556 return 1;
1557
1558 if ( g_iGang[ iPlayer ] > -1 )
1559 return ColorChat( iPlayer, "You're already in a gang." );
1560
1561 new iHours, iMints, iSeconds;
1562 new iDays, iMounths, iYears;
1563
1564 time( iHours, iMints, iSeconds );
1565 date( iYears, iMounths, iDays );
1566
1567 formatex( g_intPlayer[ iPlayer ][ playerGangInvitedDate ],79,"%d:%d:%d %d/%d/%d", iHours, iMints, iSeconds, iDays, iMounths, iYears);
1568
1569 set_user_gang( iPlayer, iGang );
1570
1571 new aData[ GangInfo ];
1572
1573 ArrayGetArray( g_aGangs, iGang, aData );
1574
1575
1576 if ( aData[ NumMembers ] >= szSkills[ SKILL_MAXMEMBERS ][ baseArrayNumber + aData[ GangSkillMemeber ] ] )
1577 return ColorChat( iPlayer, "This gang has already reached its^3 Max Members^1!" );
1578
1579 new Players[ 32 ], iNum, iTemp;
1580
1581 get_players( Players, iNum );
1582
1583 for ( new i; i < iNum; i++ )
1584 {
1585 iTemp = Players[ i ];
1586
1587 if ( g_iGang[ iTemp ] != g_iGang[ iPlayer ] || iPlayer == iTemp )
1588 continue;
1589
1590 ColorChat( iTemp, "^x03%s^x01 joined your gang!", szName( iPlayer ) );
1591
1592 ArrayGetArray( g_aGangs, g_iGang[ iPlayer ], aData );
1593 }
1594
1595 return ColorChat( iPlayer, "You joined the gang^x03 %s^x01.", aData[ GangName ] );
1596
1597}
1598
1599/* Leave Menu */
1600
1601public CmdLeaveConfirm( client )
1602{
1603 if ( g_iGang[ client ] == -1 )
1604 return ColorChat( client, "You need to be in a gang." );
1605
1606 static aData[ GangInfo ];
1607
1608 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1609
1610 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Menu^nAre you sure you want to leave the\y %s\w gang?", Info[ 3 ], aData[ GangName ] );
1611
1612 new Menu = menu_create( szItem, "SubLeaveConfirm" );
1613
1614 menu_additem( Menu, "Yes" );
1615
1616 menu_additem( Menu, "No, Don't Leave" );
1617
1618 menu_display( client, Menu );
1619
1620 return 1;
1621}
1622
1623
1624public SubLeaveConfirm( client, Menu, Item )
1625{
1626
1627 if ( g_iGang[ client ] == -1 )
1628 return ColorChat( client, "You need to be in a gang." );
1629
1630 if ( Item == MENU_EXIT )
1631 {
1632 menu_destroy( Menu );
1633
1634 return 1;
1635 }
1636
1637 switch ( Item )
1638 {
1639 case 0:
1640 {
1641
1642 if ( getStatus( client, g_iGang[ client ] ) == STATUS_LEADER )
1643 return ColorChat( client, "You need to transfer the leadership first." );
1644
1645 static Players[ 32 ], iNum, iPlayer, aData[ GangInfo ], szKey[ 128 ];
1646
1647 static szAuthID[ 35 ], szNameID[ 32 ];
1648
1649 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1650
1651 new Array:arrayData;
1652 new eData[ enumPlayer ];
1653 new Total = GetPlayerStats( arrayData );
1654
1655 for( new i = 0; i < Total; i++ )
1656 {
1657 ArrayGetArray( arrayData, i, eData );
1658
1659 formatex( szKey, charsmax( szKey ), eData[ playerName ] );
1660
1661 replace( szKey, charsmax( szKey ), "@", " " );
1662
1663 parse( szKey, szAuthID, charsmax( szAuthID ), szNameID, charsmax( szNameID ) );
1664
1665 if ( !( equal( szAuth( client ), szAuthID ) ) )
1666 continue;
1667
1668 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1669
1670 TrieDeleteKey( aData[ GangMembers ], eData[ playerName ] );
1671
1672 aData[ NumMembers ]--;
1673
1674 ArraySetArray( g_aGangs, g_iGang[ client ], aData );
1675
1676 fvault_remove_key( g_szGangPlayerss, eData[ playerName ] );
1677
1678 get_players( Players, iNum );
1679
1680 for ( new i; i < iNum; i++ )
1681 {
1682 iPlayer = Players[ i ];
1683
1684 if( iPlayer == client || g_iGang[ iPlayer ] != g_iGang[ client ] )
1685 continue;
1686
1687 ColorChat( 0, "^4%s^1 left the gang^3 %s^1.", szName( client ), aData[ GangName ] );
1688 }
1689
1690 g_iGang[ client ] = -1;
1691
1692 ColorChat( client, "You left the gang." );
1693 }
1694
1695 }
1696 }
1697
1698 menu_destroy( Menu );
1699
1700 CmdGang( client );
1701
1702 return 1;
1703}
1704
1705
1706/* Online Memebers */
1707
1708public CmdOnlineMembers( client )
1709{
1710 if ( g_iGang[ client ] == -1 )
1711 return ColorChat( client, "You need to be in a gang." );
1712
1713 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Online Members", Info[ 3 ] );
1714
1715 new Menu = menu_create( szItem, "SubOnlineMembers" );
1716
1717 new Players[ 32 ], iNum, iPlayer;
1718
1719 get_players( Players, iNum );
1720
1721 for ( new i; i < iNum; i++ )
1722 {
1723 iPlayer = Players[ i ];
1724
1725 if ( g_iGang[ client ] != g_iGang[ iPlayer ] )
1726 continue;
1727
1728 formatex( szItem, charsmax( szItem ), "%s - \d[\r%s\d]", szName( iPlayer ), getRank( iPlayer ) );
1729
1730 menu_additem( Menu, szItem );
1731 }
1732
1733 menu_display( client, Menu );
1734
1735 return 1;
1736}
1737
1738public SubOnlineMembers( client, Menu, Item )
1739{
1740 if ( g_iGang[ client ] == -1 )
1741 return ColorChat( client, "You need to be in a gang." );
1742
1743 if ( Item == MENU_EXIT )
1744 {
1745 menu_destroy( Menu );
1746
1747 return CmdMembersMenu( client );
1748 }
1749
1750 menu_destroy( Menu );
1751
1752 CmdOnlineMembers( client );
1753
1754 return 1;
1755}
1756
1757/* Disband Menu */
1758
1759public CmdDisbandConfirm( client )
1760{
1761 if ( g_iGang[ client ] == -1 )
1762 return ColorChat( client, "You need to be in a gang." );
1763
1764 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
1765 return ColorChat( client, "You have no^x04 access^x01 to this command." );
1766
1767 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Menu^nAre you sure you want to\r Disband\w the gang?", Info[ 3 ] );
1768
1769 new Menu = menu_create( szItem, "SubDisbandConfirm" );
1770
1771 menu_additem( Menu, "Confirm" );
1772
1773 menu_additem( Menu, "Decline" );
1774
1775 menu_display( client, Menu );
1776
1777 return 1;
1778}
1779
1780public SubDisbandConfirm( client, Menu, Item )
1781{
1782 if ( g_iGang[ client ] == -1 )
1783 return ColorChat( client, "You need to be in a gang." );
1784
1785 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
1786 return ColorChat( client, "You have no^x04 access^x01 to this command." );
1787
1788 if ( Item == MENU_EXIT )
1789 {
1790 menu_destroy( Menu );
1791
1792 return 1;
1793 }
1794
1795 switch ( Item )
1796 {
1797 case 0:
1798 {
1799 new aData[ GangInfo ], Players[ 32 ], iNum, iPlayer, iGang;
1800
1801 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1802
1803 ColorChat( 0, "^4%s^1 disabanded the gang:^3 %s^1!", szName( client ), aData[ GangName ] );
1804
1805 get_players( Players, iNum );
1806
1807 for ( new i; i < iNum; i++ )
1808 {
1809 iPlayer = Players[ i ];
1810
1811 if ( iPlayer == client || g_iGang[ client ] != g_iGang[ iPlayer ] )
1812 continue;
1813
1814 ColorChat( iPlayer, "Your gang was disbanded by^4 %s", szName( client ) );
1815
1816 set_user_gang( iPlayer, -1 );
1817 }
1818
1819 new Array:arrayData;
1820 new eData[ enumPlayer ];
1821 new Total = GetPlayerStats( arrayData );
1822
1823 for( new j = 0; j < Total; j++ )
1824 {
1825 ArrayGetArray( arrayData, j, eData );
1826
1827 if ( !( equal( eData[ playerGangName ], aData[ GangName ] ) ) )
1828 continue;
1829 }
1830
1831
1832 iGang = g_iGang[ client ];
1833
1834 set_user_gang( client, -1 );
1835
1836 ArrayDeleteItem( g_aGangs, iGang );
1837 }
1838 }
1839
1840 menu_destroy( Menu );
1841
1842 CmdGang( client );
1843
1844 return 1;
1845}
1846
1847/* Transfer Menu */
1848
1849public CmdTransferMenu( client )
1850{
1851 if ( g_iGang[ client ] == -1 )
1852 return ColorChat( client, "You need to be in a gang." );
1853
1854 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
1855 return ColorChat( client, "You have no^x04 access^x01 to this command." );
1856
1857 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Menu^nTransfer Leadership to", Info[ 3 ] );
1858
1859 new Menu = menu_create( szItem, "SubTransferMenu" );
1860
1861 new Players[ 32 ], iNum, iPlayer, szTempid[ 10 ];
1862
1863 get_players( Players, iNum );
1864
1865 for ( new i; i < iNum; i++ )
1866 {
1867 iPlayer = Players[ i ];
1868
1869 if ( g_iGang[ iPlayer ] != g_iGang[ client ] || client == iPlayer )
1870 continue;
1871
1872 num_to_str( iPlayer, szTempid, charsmax( szTempid ) );
1873
1874 menu_additem( Menu, szName( iPlayer ), szTempid );
1875 }
1876
1877 menu_display( client, Menu );
1878
1879 return 1;
1880}
1881
1882public SubTransferMenu( client, Menu, Item )
1883{
1884 if ( g_iGang[ client ] == -1 )
1885 return ColorChat( client, "You need to be in a gang." );
1886
1887 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
1888 return ColorChat( client, "You have no^x04 access^x01 to this command." );
1889
1890 if ( Item == MENU_EXIT )
1891 {
1892 menu_destroy( Menu );
1893
1894 return 1;
1895 }
1896
1897 new Trash, mData[ 6 ], aData[ GangInfo ];
1898
1899 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
1900
1901 menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _,_, Trash );
1902
1903 new iPlayer = str_to_num( mData );
1904
1905 if ( !is_user_connected( iPlayer ) )
1906 {
1907 CmdTransferMenu( client );
1908
1909 return ColorChat( client, "Player is no longer^3 Connected^1." );
1910 }
1911
1912 set_user_gang( iPlayer, g_iGang[ client ], STATUS_LEADER );
1913
1914 set_user_gang( client, g_iGang[ client ], STATUS_ADMIN );
1915
1916 CmdGang( client );
1917
1918 new Players[ 32 ], iNum, iTemp;
1919
1920 get_players( Players, iNum );
1921
1922 for ( new i; i < iNum; i++ )
1923 {
1924 iTemp = Players[ i ];
1925
1926 if ( iTemp == iPlayer )
1927 {
1928 ColorChat( iTemp, "You are the new leader of the gang." );
1929
1930 continue;
1931 }
1932
1933 else if ( g_iGang[ iTemp ] != g_iGang[ client ] )
1934 continue;
1935
1936 ColorChat( iTemp, "^x04%s^x01 is the new leader of the^x03 %s^x01 gang.", szName( iPlayer ), aData[ GangName ] );
1937 }
1938
1939 return 1;
1940}
1941
1942/* Add Admin */
1943
1944stock get_gang_admins( const index )
1945{
1946 static aData[ GangInfo ], iNum
1947
1948 iNum = 0;
1949
1950 ArrayGetArray( g_aGangs, g_iGang[ index ], aData );
1951
1952 new Array:arrayData;
1953 new eData[ enumPlayer ];
1954 new Total = GetPlayerStats( arrayData );
1955
1956 for( new i = 0; i < Total; i++ )
1957 {
1958 ArrayGetArray( arrayData, i, eData );
1959
1960 if ( !( equali( aData[ GangName ], eData[ playerGangName ] ) ) )
1961 continue;
1962
1963 if ( eData[ playerGangData ] == 2 )
1964 iNum++;
1965 }
1966
1967 return iNum;
1968}
1969
1970public CmdAddAdmin( client )
1971{
1972 if ( g_iGang[ client ] == -1 )
1973 return ColorChat( client, "You need to be in a gang." );
1974
1975 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
1976 return ColorChat( client, "You have no^x04 access^x01 to this command." );
1977
1978 if ( get_gang_admins( client ) >= MAX_ADMINS )
1979 return ColorChat( client, "The gang has reached it's maximum^4 Admin Members^1." );
1980
1981 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Menu^nPromote a Player", Info[ 3 ] );
1982
1983 new Menu = menu_create( szItem, "SubAddAdmin" );
1984
1985 new Players[ 32 ], iNum, iPlayer, szTempid[ 10 ];
1986
1987 get_players( Players, iNum );
1988
1989 for ( new i; i < iNum; i++ )
1990 {
1991 iPlayer = Players[ i ];
1992
1993 if ( g_iGang[ client ] != g_iGang[ iPlayer ] || getStatus( iPlayer, g_iGang[ iPlayer ] ) > STATUS_MEMBER )
1994 continue;
1995
1996 num_to_str( iPlayer, szTempid, charsmax( szTempid ) );
1997
1998 menu_additem( Menu, szName( iPlayer ), szTempid );
1999 }
2000
2001 menu_display( client, Menu );
2002
2003 return 1;
2004}
2005
2006public SubAddAdmin( client, Menu, Item )
2007{
2008 if ( g_iGang[ client ] == -1 )
2009 return ColorChat( client, "You need to be in a gang." );
2010
2011 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
2012 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2013
2014 if ( get_gang_admins( client ) >= MAX_ADMINS )
2015 return ColorChat( client, "The gang has reached it's maximum^4 Admin Members^1." );
2016
2017 if ( Item == MENU_EXIT )
2018 {
2019 menu_destroy( Menu );
2020
2021 return 1;
2022 }
2023
2024 new Trash, mData[ 6 ];
2025
2026 menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _,_, Trash )
2027
2028 new iPlayer = str_to_num( mData );
2029
2030 if ( !is_user_connected( iPlayer ) )
2031 {
2032 ColorChat( client, "Player is no longer^3 Connected^1." );
2033
2034 CmdAddAdmin( client );
2035
2036 return 1;
2037 }
2038
2039 set_user_gang( iPlayer, g_iGang[ client ], STATUS_ADMIN );
2040
2041 new Players[ 32 ], iNum, iTemp;
2042
2043 get_players( Players, iNum );
2044
2045 for ( new i; i < iNum; i++ )
2046 {
2047 iTemp = Players[ i ];
2048
2049 if ( g_iGang[ iTemp ] != g_iGang[ client ] || iPlayer == iTemp )
2050 continue;
2051
2052 ColorChat( iTemp, "^3%s^1 has been^4 promoted^1 to^3 Admin^1 of the gang.", szName( iPlayer ) );
2053 }
2054
2055 ColorChat( iPlayer, "You have been^4 promoted^1 to^3 Admin^1 of the gang." );
2056
2057 ColorChat( client, "You promoted^4 %s^1 to^3 Admin^1 of the gang.", szName( iPlayer ) );
2058
2059 menu_destroy( Menu );
2060
2061 return 1;
2062}
2063
2064/* Remove Admin */
2065
2066public CmdRemoveAdmin( client )
2067{
2068 if ( g_iGang[ client ] == -1 )
2069 return ColorChat( client, "You need to be in a gang." );
2070
2071 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
2072 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2073
2074 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Menu^nDemote a Player", Info[ 3 ] );
2075
2076 new Menu = menu_create( szItem, "SubRemoveAdmin" );
2077
2078 new Players[ 32 ], iNum, iPlayer, szTempid[ 10 ];
2079
2080 get_players( Players, iNum );
2081
2082 for ( new i; i < iNum; i++ )
2083 {
2084 iPlayer = Players[ i ];
2085
2086 if ( g_iGang[ client ] != g_iGang[ iPlayer ] || getStatus( iPlayer, g_iGang[ iPlayer ] ) != STATUS_ADMIN )
2087 continue;
2088
2089 num_to_str( iPlayer, szTempid, charsmax( szTempid ) );
2090
2091 menu_additem( Menu, szName( iPlayer ), szTempid );
2092 }
2093
2094 menu_display( client, Menu );
2095
2096 return 1;
2097}
2098
2099public SubRemoveAdmin( client, Menu, Item )
2100{
2101 if ( g_iGang[ client ] == -1 )
2102 return ColorChat( client, "You need to be in a gang." );
2103
2104 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
2105 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2106
2107 if ( Item == MENU_EXIT )
2108 {
2109 menu_destroy( Menu );
2110
2111 return 1;
2112 }
2113
2114 new Trash, mData[ 6 ];
2115
2116 menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _,_, Trash );
2117
2118 new iPlayer = str_to_num( mData );
2119
2120 if ( !is_user_connected( iPlayer ) )
2121 {
2122 CmdRemoveAdmin( client );
2123
2124 return ColorChat( client, "Player is no longer^3 Connected^1." );
2125 }
2126
2127 set_user_gang( iPlayer, g_iGang[ client ], STATUS_MEMBER );
2128
2129 new Players[ 32 ], iNum, iTemp;
2130
2131 get_players( Players, iNum );
2132
2133 for ( new i; i < iNum; i++ )
2134 {
2135 iTemp = Players[ i ];
2136
2137 if ( g_iGang[ iTemp ] != g_iGang[ client ] || iPlayer == iTemp )
2138 continue;
2139
2140 ColorChat( iTemp, "^3%s^1 has been^4 demoted^1 from being^3 Admin^1 of the gang.", szName( iPlayer ) );
2141 }
2142
2143 ColorChat( iPlayer, "You've been^4 demoted^1 from being^3 Admin^1 of the gang." );
2144
2145 ColorChat( client, "You^4 demoted^3 %s^1 from being^4 Admin^1 of the gang.", szName( iPlayer ) );
2146
2147 CmdGang( client );
2148
2149 return 1;
2150}
2151
2152/* Admin Menu */
2153
2154public CmdGangBank( client )
2155{
2156 if ( g_iGang[ client ] == -1 )
2157 return ColorChat( client, "You need to be in a gang." );
2158
2159 static aData[ GangInfo ];
2160 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
2161 new iLen = 0;
2162
2163 iLen = formatex( szItem[iLen], charsmax( szItem ) - iLen, "\r[\w%s\r]\yGang Bank \wMenu.", Info[ 3 ] );
2164 iLen += formatex( szItem[iLen], charsmax( szItem ) - iLen, "^n^n\rCurrect Balance:");
2165
2166 iLen += formatex( szItem[iLen], charsmax( szItem ) - iLen, "^n\wCurrect \yCash: \w%i\r$", aData[ GangCash ] );
2167 iLen += formatex( szItem[iLen], charsmax( szItem ) - iLen, "^n\wCurrect \yCredits: \w%i", aData[ GangCredits ] );
2168
2169 new Menu = menu_create( szItem, "SubBankMenu" );
2170
2171 menu_additem( Menu, "Deposit Cash" );
2172 menu_additem( Menu,( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER ) ? "Withdraw Cash\r[ \dLEADERS ONLY \r]" : "Withdraw Cash" );
2173
2174 menu_additem( Menu, "Deposit Credits" );
2175
2176 menu_display( client, Menu );
2177
2178 return 1;
2179}
2180
2181
2182public SubBankMenu( client, Menu, Item )
2183{
2184 if ( g_iGang[ client ] == -1 )
2185 return ColorChat( client, "You need to be in a gang." );
2186
2187 if ( Item == MENU_EXIT )
2188 {
2189 menu_destroy( Menu );
2190
2191 return 1;
2192 }
2193
2194 switch ( Item )
2195 {
2196 case 0: return client_cmd( client, "messagemode Choose Money Amount" );
2197
2198 case 1:
2199 {
2200 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
2201 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2202
2203
2204 return client_cmd( client, "messagemode Withdraw Money Amount" );
2205 }
2206
2207 case 2: return client_cmd( client, "messagemode Choose Credits Amount" );
2208 }
2209
2210 menu_destroy( Menu );
2211
2212 return 1;
2213}
2214
2215public CmdAdminMenu( client )
2216{
2217 if ( g_iGang[ client ] == -1 )
2218 return ColorChat( client, "You need to be in a gang." );
2219
2220 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
2221 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2222
2223 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gang Main Menu^nAdmin Menu.", Info[ 3 ] );
2224
2225 new Menu = menu_create( szItem, "SubAdminMenu" );
2226
2227 menu_additem( Menu, "Kick from the Gang" );
2228 menu_additem( Menu, "Invite to the Gang" );
2229 menu_additem( Menu, "Upgrade Skills" );
2230
2231 menu_display( client, Menu );
2232
2233 return 1;
2234}
2235
2236public SubAdminMenu( client, Menu, Item )
2237{
2238 if ( g_iGang[ client ] == -1 )
2239 return ColorChat( client, "You need to be in a gang." );
2240
2241 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
2242 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2243
2244 if ( Item == MENU_EXIT )
2245 {
2246 menu_destroy( Menu );
2247
2248 return 1;
2249 }
2250
2251 switch ( Item )
2252 {
2253 case 0: return CmdKickMenu( client );
2254
2255 case 1: return CmdShowInvite( client );
2256
2257 case 2: return CmdSkillsMenu( client );
2258 }
2259
2260 menu_destroy( Menu );
2261
2262 return 1;
2263}
2264
2265/* Owner Menu */
2266
2267public CmdOwnerMenu( client )
2268{
2269 if ( g_iGang[ client ] == -1 )
2270 return ColorChat( client, "You need to be in a gang." );
2271
2272 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
2273 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2274
2275 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Leaders Menu", Info[ 3 ] );
2276
2277 new Menu = menu_create( szItem, "SubOwnerMneu" );
2278
2279 menu_additem( Menu, "Change Gang Message^n" );
2280
2281 menu_additem( Menu, "Manage Memebers" );
2282 menu_additem( Menu, "Manage Skills^n" );
2283
2284 menu_additem( Menu, "Change Name\r[\w 70.000\y$ \r]^n" );
2285
2286 menu_additem( Menu, "Transfer OwnerShip" );
2287 menu_additem( Menu, "\rClose Gang" );
2288
2289 menu_display( client, Menu );
2290
2291 return 1;
2292}
2293
2294public CmdGangChangeName( Client )
2295{
2296 new strMessage[ 80 ], intCount = 0;
2297 read_argv( 1, strMessage, charsmax( strMessage ) );
2298
2299 if ( g_iGang[ Client ] == -1 )
2300 return ColorChat( Client, "You need to be in a gang." );
2301
2302 static bData[ GangInfo ];
2303
2304 for ( new i; i < ArraySize( g_aGangs ); i++ )
2305 {
2306 ArrayGetArray( g_aGangs, i, bData );
2307
2308 if ( equali( bData[ GangName ], strMessage ) )
2309 {
2310 client_cmd( Client, "messagemode Change Gang Name" );
2311 return ColorChat( Client, "Theres already a gang with that name." );
2312 }
2313 }
2314
2315 formatex( g_Player[ Client ][ PLAYER_CHANGE_MESSAGE ], 31,"%s",strMessage );
2316 CmdConfirmChange( Client, g_iGang[ Client ] );
2317 return 1;
2318}
2319
2320
2321public CmdConfirmChange( client, iGang )
2322{
2323 static aData[ GangInfo ];
2324
2325 ArrayGetArray( g_aGangs, iGang, aData );
2326
2327 if( aData[ GangCash ] < GANG_CHANGE_NAME_COST )
2328 return ColorChat( client, "Gang dont have the required Cash." );
2329
2330 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Are you sure you want to\rChange\w the gang to\y %s?", Info[ 3 ], g_Player[ client ][ PLAYER_CHANGE_MESSAGE ] );
2331
2332 new Menu = menu_create( szItem, "SubConfirmChange" );
2333
2334 static szGang[ 6 ];
2335
2336 num_to_str( iGang, szGang, charsmax( szGang ) );
2337
2338 menu_additem( Menu, "\rYes", szGang );
2339 menu_additem( Menu, "No", szGang );
2340
2341 menu_display( client, Menu );
2342
2343 return 1;
2344}
2345
2346public SubConfirmChange( client, Menu, Item )
2347{
2348 if ( Item == MENU_EXIT || Item == 1 )
2349 {
2350 menu_destroy( Menu );
2351
2352 return CmdOwnerMenu( client );
2353 }
2354
2355 static iGang, aData[ GangInfo ]
2356
2357 iGang = MenuKey( Menu, Item );
2358 ArrayGetArray( g_aGangs, iGang, aData );
2359
2360 if( aData[ GangCash ] < GANG_CHANGE_NAME_COST )
2361 return ColorChat( client, "Gang dont have the required Cash." );
2362 static bData[ GangInfo ];
2363
2364 for ( new i; i < ArraySize( g_aGangs ); i++ )
2365 {
2366 ArrayGetArray( g_aGangs, i, bData );
2367
2368 if ( equali( bData[ GangName ], g_Player[ client ][ PLAYER_CHANGE_MESSAGE ] ) )
2369 {
2370 CmdOwnerMenu( client );
2371 return ColorChat( client, "Theres already a gang with that name." );
2372 }
2373 }
2374
2375 aData[ GangCash ] -= GANG_CHANGE_NAME_COST;
2376 aData[ GangName ] = g_Player[ client ][ PLAYER_CHANGE_MESSAGE ];
2377 ArraySetArray( g_aGangs, iGang, aData );
2378
2379 menu_destroy( Menu );
2380
2381 return CmdGangsInfo( client );
2382}
2383
2384public SubOwnerMneu( client, Menu, Item )
2385{
2386 if ( g_iGang[ client ] == -1 )
2387 return ColorChat( client, "You need to be in a gang." );
2388
2389 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
2390 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2391
2392 if ( Item == MENU_EXIT )
2393 {
2394 menu_destroy( Menu );
2395
2396 return 1;
2397 }
2398
2399 switch ( Item )
2400 {
2401
2402 case 0: return MenuChance_Message( client );
2403 case 1: return CmdOwnerMemeberMenu( client );
2404 case 2: return CmdSkillsMenu( client );
2405 case 3:
2406 {
2407 static aData[ GangInfo ];
2408 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
2409 if( aData[ GangCash ] < GANG_CHANGE_NAME_COST )
2410 {
2411 return ColorChat( client, "gang dont have the required cash." );
2412 }
2413 client_cmd( client, "messagemode Change Gang Name" );
2414 }
2415 case 4: return CmdTransferMenu( client );
2416 case 5: return CmdDisbandConfirm( client );
2417 }
2418
2419 menu_destroy( Menu );
2420
2421 return 1;
2422}
2423
2424
2425public CmdOwnerMemeberMenu( client )
2426{
2427 if ( g_iGang[ client ] == -1 )
2428 return ColorChat( client, "You need to be in a gang." );
2429
2430 if ( getStatus( client, g_iGang[ client ] ) < STATUS_LEADER )
2431 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2432
2433 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Leader Memeber Menu", Info[ 3 ] );
2434
2435 new Menu = menu_create( szItem, "SubOwnerMemeberMneu" );
2436
2437 menu_additem( Menu, "Kick Memeber Gang" );
2438 menu_additem( Menu, "Invite Gang player^n" );
2439
2440 menu_additem( Menu, "Add an Admin" );
2441 menu_additem( Menu, "Remove an Admin" );
2442
2443 menu_display( client, Menu );
2444
2445 return 1;
2446}
2447
2448public SubOwnerMemeberMneu( client, Menu, Item )
2449{
2450 if ( g_iGang[ client ] == -1 )
2451 return ColorChat( client, "You need to be in a gang." );
2452
2453 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
2454 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2455
2456 if ( Item == MENU_EXIT )
2457 {
2458 menu_destroy( Menu );
2459
2460 return 1;
2461 }
2462
2463 switch ( Item )
2464 {
2465 case 0: return CmdKickMenu( client );
2466
2467 case 1: return CmdShowInvite( client );
2468
2469 case 2: return CmdAddAdmin( client );
2470
2471 case 3: return CmdRemoveAdmin( client );
2472 }
2473
2474 menu_destroy( Menu );
2475
2476 return 1;
2477}
2478public fnMessageGang( Client )
2479{
2480 new strMessage[ 80 ], intCount = 0;
2481 read_argv( 1, strMessage, charsmax( strMessage ) );
2482
2483 replace_all( strMessage, charsmax( strMessage ), "^n", "");
2484 replace_all( strMessage, charsmax( strMessage ), "\r", "");
2485 replace_all( strMessage, charsmax( strMessage ), "\w", "");
2486 replace_all( strMessage, charsmax( strMessage ), "\y", "");
2487 replace_all( strMessage, charsmax( strMessage ), "\g", "");
2488
2489 if( intCount > 4 )
2490 {
2491 ColorChat( Client, "Sorry your message have more then 4 new lines");
2492 client_cmd( Client, "messagemode gang_message" );
2493 return 1;
2494 }
2495
2496 formatex( g_Player[ Client ][ PLAYER_GANG_MESSAGE ],79,"%s",strMessage );
2497 MenuChance_Message( Client );
2498 return 1;
2499}
2500
2501
2502public MenuChance_Message( id )
2503{
2504 new strTemp[ 1048 ]
2505 new aData[ GangInfo ];
2506
2507 replace_all( g_Player[ id ][ PLAYER_GANG_MESSAGE ], charsmax( g_Player[][ PLAYER_GANG_MESSAGE ] ), "*newline*", "^n");
2508 ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
2509
2510 formatex(strTemp, charsmax( strTemp ), "\r[ \w%s \r] \wGang Message Change^nCurrect Gang Message:^n%s%s", Info[ 3 ], g_strColorGang[ g_Player[ id ][ PLAYER_INTCOLOR ] ], g_Player[ id ][ PLAYER_GANG_MESSAGE ]);
2511
2512 new Menu = menu_create(strTemp, "GangMenuMessage_Handler")
2513
2514 menu_additem(Menu, "Change Message", "0", 0)
2515
2516 formatex(strTemp, charsmax( strTemp ), "Change Message Color %s[ %s %s]", g_strColorGang[ g_Player[ id ][ PLAYER_INTCOLOR ] ], g_strColorMessage[ g_Player[ id ][ PLAYER_INTCOLOR ] ], g_strColorGang[ g_Player[ id ][ PLAYER_INTCOLOR ] ]);
2517 menu_additem(Menu, strTemp, "1", 0)
2518
2519 menu_additem(Menu, "Accept !", "2", 0)
2520
2521 menu_display( id, Menu, 0);
2522
2523 return PLUGIN_HANDLED;
2524}
2525
2526public GangMenuMessage_Handler( id, menu, item )
2527{
2528 if(item == MENU_EXIT)
2529 {
2530 menu_destroy(menu);
2531 return PLUGIN_HANDLED
2532 }
2533 else
2534 {
2535 switch( MenuKey( menu, item ) )
2536 {
2537 case 0: client_cmd( id, "messagemode gang_message" );
2538 case 1:
2539 {
2540 if( g_Player[ id ][ PLAYER_INTCOLOR ] >= MAX_COLORS - 1 )
2541 {
2542 g_Player[ id ][ PLAYER_INTCOLOR ] = 0;
2543 }
2544 else
2545 {
2546 g_Player[ id ][ PLAYER_INTCOLOR ]++;
2547 }
2548 MenuChance_Message( id );
2549 }
2550 case 2:
2551 {
2552 new aData[ GangInfo ];
2553 ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
2554
2555 formatex( aData[ GangMessage ],79, "%s%s", g_strColorGang[ g_Player[ id ][ PLAYER_INTCOLOR ] ], g_Player[ id ][ PLAYER_GANG_MESSAGE ]);
2556
2557 ArraySetArray( g_aGangs, g_iGang[ id ], aData );
2558 CmdGang( id );
2559
2560 }
2561 }
2562 }
2563 return PLUGIN_HANDLED
2564}
2565
2566public CmdSkillsMenu( client )
2567{
2568 if ( g_iGang[ client ] == -1 )
2569 return ColorChat( client, "You need to be in a gang." );
2570
2571 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
2572 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2573
2574 static aData[ GangInfo ]
2575
2576 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
2577
2578 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Skills Menu^n\dCurrent Gang:\y %s^n\dGang Cash:\y %i\w Cash.",
2579 Info[ 3 ], aData[ GangName ], aData[ GangCash ] );
2580
2581 new Menu = menu_create( szItem, "SubSkillsMenu" );
2582
2583 new iLen = 0, strTemp[ 256 ], CurrectUpg = g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen;
2584
2585
2586 formatex( szItem, charsmax( szItem ), "\wView \rCurrect \wSkill %s", szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseName ] );
2587 menu_additem( Menu, szItem );
2588
2589 iLen = formatex( strTemp[iLen], charsmax( strTemp ) - iLen, "^n^n\yUpgrade Name: \w%s\d( \w%i \d/ \r%i MAX \d)^n", szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseName ], GetStatusShit( client, g_Player[ client ][ PLAYER_UPGRADE ], false ) , GetStatusShit( client, g_Player[ client ][ PLAYER_UPGRADE ], true ))
2590 iLen += formatex( strTemp[iLen], charsmax( strTemp ) - iLen, "\yUpgrade Statistics: \w[ %s \w] \y(%.1f%%)^n^n", GetStatusUpgrade( g_iGang[ client ], g_Player[ client ][ PLAYER_UPGRADE ] ), ( float( aData[ CurrectUpg ] ) / float( ( MAX_SKILL_ARRAY - 2 ) ) * 100.0 ))
2591 iLen += formatex( strTemp[iLen], charsmax( strTemp ) - iLen, "\rDescrption:^n\y* \w%s", szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseDescrption ])
2592
2593 formatex( szItem, charsmax( szItem ), "Upgrade Status \r[ %s \r]%s", ( g_Player[ client ][ PLAYER_ISMENU ] == 1 ) ? "\wENABLE" : "\dDISABLE", ( g_Player[ client ][ PLAYER_ISMENU ] == 1 ) ? strTemp : "")
2594 menu_additem( Menu, szItem );
2595
2596 if( szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseArrayCashCost + aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] ] == 0 )
2597 formatex( szItem, charsmax( szItem ), "Upgrade \r[ \wMAXED OUT \r]")
2598 else
2599 formatex( szItem, charsmax( szItem ), "Upgrade")
2600 menu_additem( Menu, szItem );
2601
2602 menu_display( client, Menu );
2603
2604 return 1;
2605}
2606
2607public CmdConfirmUpgrade( client, iUpgrade )
2608{
2609 static aData[ GangInfo ];
2610
2611 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
2612
2613 new iLen = 0;
2614
2615 iLen = formatex( szItem[iLen], charsmax( szItem ) - iLen, "\r[\w%s\r] \yUpgrade Payment Requerments^n^n", Info[ 3 ])
2616 iLen += formatex( szItem[iLen], charsmax( szItem ) - iLen, "Cash - \d[ \w%i\r$ \d/ \w%i\r$ \d]^n", aData[ GangCash ], szSkills[ iUpgrade ][ baseArrayCashCost + aData[ iUpgrade + GangRegen ] ])
2617 iLen += formatex( szItem[iLen], charsmax( szItem ) - iLen, "\yCredits - \d[ \w%i\rCREDITS \d/ \w%i\rCREDITS \d]", aData[ GangCredits ], szSkills[ iUpgrade ][ baseArrayCreditsCost + aData[ iUpgrade + GangRegen ] ])
2618
2619 new Menu = menu_create( szItem, "SubConfirmUpgrade" );
2620
2621 static szGang[ 6 ];
2622
2623 num_to_str( g_iGang[ client ], szGang, charsmax( szGang ) );
2624
2625 menu_additem( Menu, ( szSkills[ iUpgrade ][ baseArrayCashCost + aData[ iUpgrade + GangRegen ] ] > aData[ GangCash ] ) ? "\dGang cant \rafford \dthe \yCash Requirement" : ( szSkills[ iUpgrade ][ baseArrayCreditsCost + aData[ iUpgrade + GangRegen ] ] > aData[ GangCredits ] ) ? "\dGang cant \rafford \dthe \yCredits requirement" : "Upgrade Now !", szGang, 0, menu_makecallback( "menuitem_callbackcc" ) );
2626 menu_additem( Menu, "No", szGang );
2627
2628 menu_display( client, Menu );
2629
2630 return 1;
2631}
2632
2633
2634public menuitem_callbackcc( client, menu, item )
2635{
2636 static aData[ GangInfo ];
2637
2638 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
2639
2640 if( szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseArrayCreditsCost + aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] ] > aData[ GangCredits ] )
2641 {
2642 return ITEM_DISABLED;
2643 }
2644 if( szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseArrayCashCost + aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] ] > aData[ GangCash ] )
2645 {
2646 return ITEM_DISABLED;
2647 }
2648 return ITEM_IGNORE;
2649}
2650
2651
2652public SubConfirmUpgrade( client, Menu, Item )
2653{
2654 if ( Item == MENU_EXIT || Item == 1 )
2655 {
2656 menu_destroy( Menu );
2657
2658 return CmdSkillsMenu( client );
2659 }
2660
2661 static aData[ GangInfo ]//, Cost, Skill, Max;
2662 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
2663
2664 if( szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseArrayCashCost + aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] ] > aData[ GangCash ] )
2665 {
2666 client_print( client, print_console, "DEBUG #FAIL");
2667 ColorChat( client, "The gang doesn't have enough cash." );
2668 return 1;
2669 }
2670
2671 if( szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseArrayCreditsCost + aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] ] > aData[ GangCredits ] )
2672 {
2673 client_print( client, print_console, "DEBUG #FAIL");
2674 ColorChat( client, "The gang doesn't have enough credits." );
2675 return 1;
2676 }
2677
2678 aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ]++;
2679
2680 aData[ GangCash ] -= szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseArrayCashCost + aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] ]
2681 aData[ GangCredits ] -= szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseArrayCreditsCost + aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] ]
2682
2683 ArraySetArray( g_aGangs, g_iGang[ client ], aData )
2684
2685 new Players[ 32 ], iNum, iTemp;
2686
2687 get_players( Players, iNum, "ch" );
2688
2689 for ( new i; i < iNum; i++ )
2690 {
2691 iTemp = Players[ i ];
2692
2693 if ( g_iGang[ iTemp ] != g_iGang[ client ] || client == iTemp )
2694 continue;
2695
2696 ColorChat( iTemp, "^3%s^4 upgraded^1 the skill^3 %s^1 to level^3 %i^1!", szName( client ), szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseName ], aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] );
2697 }
2698
2699 ColorChat( client, "You^3 upgraded^1 the skill^4 %s^1 to level^3 %i^1!", szSkills[ g_Player[ client ][ PLAYER_UPGRADE ] ][ baseName ], aData[ g_Player[ client ][ PLAYER_UPGRADE ] + GangRegen ] );
2700}
2701
2702public SubSkillsMenu( client, Menu, Item )
2703{
2704 if ( g_iGang[ client ] == -1 )
2705 return ColorChat( client, "You need to be in a gang." );
2706
2707 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
2708 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2709
2710 if ( Item == MENU_EXIT )
2711 {
2712 menu_destroy( Menu );
2713
2714 return 1;
2715 }
2716
2717 client_print( client, print_console, "DEBUG #1");
2718 static aData[ GangInfo ]//, Cost, Skill, Max;
2719
2720 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
2721
2722 if( Item == 0 )
2723 {
2724 if( g_Player[ client ][ PLAYER_UPGRADE ] >= charsmax( szSkills ) )
2725 {
2726 g_Player[ client ][ PLAYER_UPGRADE ] = 0;
2727 }
2728 else
2729 g_Player[ client ][ PLAYER_UPGRADE ]++
2730 }
2731 else if( Item == 1 )
2732 {
2733 g_Player[ client ][ PLAYER_ISMENU ] = !g_Player[ client ][ PLAYER_ISMENU ]
2734 }
2735 else
2736 {
2737 return CmdConfirmUpgrade( client, g_Player[ client ][ PLAYER_UPGRADE ] );
2738 }
2739 CmdSkillsMenu( client );
2740 return 1;
2741}
2742
2743/* Gangs Info */
2744
2745public CmdGangsInfo( client )
2746{
2747 static aData[ GangInfo ];
2748
2749 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Gangs Server List", Info[ 3 ] );
2750
2751 new Menu = menu_create( szItem, "SubGangsInfo" );
2752
2753 for ( new i; i < ArraySize( g_aGangs ); i++ )
2754 {
2755 ArrayGetArray( g_aGangs, i, aData );
2756
2757 formatex( szItem, charsmax( szItem ), "%s", aData[ GangName ] );
2758
2759 menu_additem( Menu, szItem );
2760 }
2761
2762 menu_setprop( Menu, MPROP_EXITNAME, "Back" );
2763
2764 menu_display( client, Menu );
2765
2766 return 1;
2767}
2768
2769public SubGangsInfo( client, Menu, Item )
2770{
2771 if ( Item == MENU_EXIT )
2772 {
2773 menu_destroy( Menu );
2774
2775 return CmdGang( client );
2776 }
2777
2778 GangShittyMenu( client, Item );
2779
2780 return 1;
2781}
2782
2783
2784public GangShittyMenu( Client, Item )
2785{
2786 new g_sBuffer[ 1024 ], iLen = 0;
2787
2788 static aData[ GangInfo ], iData;
2789
2790 num_to_str( Item, g_intItem[ Client ], charsmax( g_intItem[] ) );
2791
2792 ArrayGetArray( g_aGangs, Item, aData );
2793
2794
2795 iLen = format(g_sBuffer[iLen], 1023, "\r[\w %s \r]\y Gang %s \wStats^n^n", Info[ 3 ], aData[ GangName ])
2796
2797 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yGang Name: \w%s^n", aData[ GangName ])
2798 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yLeader: \w%s^n^n", GetGangOwner( Item ))
2799
2800 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yGang Memebers: \d[\w%i / \r%i\d]^n", GetOnlineMemebers( g_iGang[ Client ] ), szSkills[ SKILL_MAXMEMBERS ][ baseArrayNumber + aData[ GangSkillMemeber ] ])
2801 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yGang Color: \w%s^n", g_iGangsColors[ aData[ GangColor ] ][ ColorName ])
2802 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yGang Cash: \w%i\r$ \d| \yGang Credits: \w%i^n", aData[ GangCash ], aData[ GangCredits ])
2803 //iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yGang Creation:\w%s ^n", aData[ GangCreation ])
2804 iLen += format( g_sBuffer[iLen], 1023 - iLen, "\yGang Max Donations: \r$\w%i^n", aData[ GangMaxDonation ])
2805
2806 new Menu = menu_create( g_sBuffer, "GangInformationSub" );
2807
2808
2809 formatex( szItem, charsmax( szItem ), "\wShow Memebers\d(\y%i\d)", GetOnlineMemebers( g_iGang[ Client ] ))
2810 menu_additem( Menu, szItem );
2811
2812 menu_additem( Menu, "Top 10 of Donators" );
2813
2814 menu_setprop( Menu, MPROP_EXITNAME, "Back" );
2815
2816 menu_display( Client, Menu );
2817}
2818
2819
2820public GangInformationSub( Client, Menu, Item )
2821{
2822 if ( Item == MENU_EXIT )
2823 {
2824 menu_destroy( Menu );
2825
2826 return CmdGang( Client );
2827 }
2828
2829 switch( Item )
2830 {
2831 case 0:CmdMembersViewMenu( Client, str_to_num( g_intItem[ Client ] ) )
2832 case 1: SayCCTop15Players( Client );
2833 }
2834
2835 return 1;
2836}
2837
2838public CmdMembersViewMenu( client, Item )
2839{
2840 static aData[ GangInfo ]
2841 ArrayGetArray( g_aGangs, Item, aData );
2842
2843 formatex( szItem, charsmax( szItem ), "\r[\w%s\r] \wView \r%s Memebers", Info[ 3 ], aData[ GangName ] );
2844
2845 new Menu = menu_create( szItem, "SubMembersViewMenu" );
2846
2847 static szKey1[ 254 ], szAuthID[ 35 ], szNameID[ 32 ], KeyIndex[ 6 ];
2848
2849 new Array:arrayData;
2850 new eData[ enumPlayer ];
2851 new Total = GetPlayerStats( arrayData );
2852
2853 for( new i = 0; i < Total; i++ )
2854 {
2855 ArrayGetArray( arrayData, i, eData );
2856
2857 if ( equali( eData[ playerGangName ], aData[ GangName ] ) )
2858 {
2859
2860 formatex( szKey1, charsmax( szKey1 ), "%s", eData[ playerName ] )
2861 replace( szKey1, charsmax( szKey1 ), "@", " " );
2862
2863 parse( szKey1, szAuthID, charsmax( szAuthID ), szNameID, charsmax( szNameID ) );
2864
2865 if ( is_auth_online( szAuthID ) )
2866 formatex( szItem, charsmax( szItem ), "%s \y[ONLINE]", szNameID);
2867
2868 else formatex( szItem, charsmax( szItem ), "%s \r[OFFLINE]", szNameID);
2869
2870 num_to_str( i, KeyIndex, charsmax( KeyIndex ) );
2871
2872 menu_additem( Menu, szItem, KeyIndex );
2873 }
2874 }
2875
2876 menu_display( client, Menu );
2877
2878 return 1;
2879}
2880
2881public SubMembersViewMenu( client, Menu, Item )
2882{
2883 if ( Item == MENU_EXIT )
2884 {
2885 menu_destroy( Menu );
2886
2887 return 1;
2888 }
2889
2890 g_Player[ client ][ PLAYER_TARGET ] = MenuKey( Menu, Item );
2891 return MenuShowTarget( client );
2892}
2893
2894
2895
2896public MenuShowTarget( Client )
2897{
2898 new strTemp[ 1023 ], iLen, szKey[ 128 ], szKeyName[ 33 ];
2899
2900 new Array:arrayData;
2901 new eData[ enumPlayer ];
2902 GetPlayerStats( arrayData );
2903
2904 ArrayGetArray( arrayData, g_Player[ Client ][ PLAYER_TARGET ], eData );
2905
2906 formatex( szKey, charsmax( szKey ), eData[ playerName ] );
2907 replace_all( szKey, charsmax( szKey ), "@", " ");
2908
2909 strbreak( szKey, szKeyName, charsmax( szKeyName ), szKey, charsmax( szKey ) );
2910
2911 iLen = format(strTemp[iLen], 1023, "\r[ \w%s \r] \wGang View Player Menu^n\dCurrectly Showing Player \r%s^n^n", Info[ 3 ], szKey);
2912
2913 iLen += format( strTemp[iLen], 1023 - iLen, "\dMemeber Status : \w%s^n", ( eData[ playerGangData ] == 1 ) ? "Member" : ( eData[ playerGangData ] == 2 ) ? "Admin" :"Leader" );
2914 iLen += format( strTemp[iLen], 1023 - iLen, "\dInivter : \r%s^n", eData[ playerGangInvited ]);
2915 iLen += format( strTemp[iLen], 1023 - iLen, "\dInvite Date : \r%s^n^n", eData[ playerGangInvitedDate ]);
2916
2917 iLen += format( strTemp[iLen], 1023 - iLen, "\rBlackjack Stats:^n");
2918 iLen += format( strTemp[iLen], 1023 - iLen, "\dTotal Winning Games \d(\r%i$\d)^n", eData[ playerBjWin ]);
2919 iLen += format( strTemp[iLen], 1023 - iLen, "\dTotal Losing Games \d(\r%i$\d)^n^n", eData[ playerBjLose ]);
2920
2921 iLen += format( strTemp[iLen], 1023 - iLen, "\rBlackjack Statistics^n");
2922 iLen += format( strTemp[iLen], 1023 - iLen, "\dTotal Win Games - \r%i\d/\w%i\y(%.f%%)^n", eData[ playerBjTotalWin ], eData[ playerBjTotalLose ] + eData[ playerBjTotalWin ], ( float( eData[ playerBjTotalWin ] ) / float( eData[ playerBjTotalLose ] + eData[ playerBjTotalWin ] ) * 100.0 ));
2923 iLen += format( strTemp[iLen], 1023 - iLen, "\dTotal Lost Games - \r%i\d/\w%i\y(%.f%%)", eData[ playerBjTotalLose ], eData[ playerBjTotalLose ] + eData[ playerBjTotalWin ], ( float( eData[ playerBjTotalLose ] ) / float( eData[ playerBjTotalLose ] + eData[ playerBjTotalWin ] ) * 100.0 ));
2924
2925 iLen += format( strTemp[iLen], 1023 - iLen, "^n^n\r0. \wExit");
2926
2927 show_menu(Client, MENU_KEY_0, strTemp, -1, "GangPlayerMenu");
2928 return 1;
2929}
2930
2931public GangBack( id ,key )
2932{
2933
2934 CmdMembersViewMenu( id, str_to_num( g_intItem[ id ] ) );
2935 return 1;
2936}
2937
2938/* Owners Manage Disband Gangs */
2939
2940public CmdConfirmDelete( client, iGang )
2941{
2942 if ( !( get_user_flags( client ) & ADMIN_ACCESS ) )
2943 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2944
2945 static aData[ GangInfo ];
2946
2947 ArrayGetArray( g_aGangs, iGang, aData );
2948
2949 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Are you sure you want to\r delete\w the gang\y %s?", Info[ 3 ], aData[ GangName ] );
2950
2951 new Menu = menu_create( szItem, "SubConfirmDelete" );
2952
2953 static szGang[ 6 ];
2954
2955 num_to_str( iGang, szGang, charsmax( szGang ) );
2956
2957 menu_additem( Menu, "\rYes\w, Delete this gang.", szGang );
2958 menu_additem( Menu, "No, \yLeave this gang alone.", szGang );
2959
2960 menu_display( client, Menu );
2961
2962 return 1;
2963}
2964
2965public SubConfirmDelete( client, Menu, Item )
2966{
2967 if ( !( get_user_flags( client ) & ADMIN_ACCESS ) )
2968 return ColorChat( client, "You have no^x04 access^x01 to this command." );
2969
2970 if ( Item == MENU_EXIT || Item == 1 )
2971 {
2972 menu_destroy( Menu );
2973
2974 return CmdGangsInfo( client );
2975 }
2976
2977 static iGang, aData[ GangInfo ], Players[ 32 ], iNum, iPlayer
2978
2979 iGang = MenuKey( Menu, Item );
2980
2981 ArrayGetArray( g_aGangs, iGang, aData );
2982
2983 ColorChat( 0, "ADMIN:^3 %s^1 deleted^1 the gang^4 %s^1!", szName( client ), aData[ GangName ] );
2984
2985 get_players( Players, iNum, "ch" );
2986
2987 for ( new i; i < iNum; i++ )
2988 {
2989 iPlayer = Players[ i ];
2990
2991 if ( g_iGang[ iPlayer ] != iGang )
2992 continue;
2993
2994 set_user_gang( iPlayer, -1 );
2995 }
2996
2997 ArrayDeleteItem( g_aGangs, iGang );
2998
2999 menu_destroy( Menu );
3000
3001 return CmdGangsInfo( client );
3002}
3003
3004/* Kick Menu */
3005
3006
3007public CmdMenu( client )
3008{
3009 static aData[ GangInfo ];
3010
3011 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
3012
3013 new Array:arrayData;
3014 new eData[ enumPlayer ];
3015 new Total = GetPlayerStats( arrayData );
3016
3017 for( new i = 0; i < Total; i++ )
3018 {
3019 ArrayGetArray( arrayData, i, eData );
3020
3021 if ( !( equali( eData[ playerGangName ], aData[ GangName ] ) ) )
3022 continue;
3023
3024 ColorChat( client, "^3%s:^4 %s", eData[ playerGangName ], eData[ playerName ] );
3025
3026 }
3027}
3028
3029public CmdKickMenu( client )
3030{
3031 if ( g_iGang[ client ] == -1 )
3032 return ColorChat( client, "You need to be in a gang." );
3033
3034 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
3035 return ColorChat( client, "You have no^x04 access^x01 to this command." );
3036
3037 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Kick Menu", Info[ 3 ] );
3038
3039 new Menu = menu_create( szItem, "SubKickMenu" );
3040
3041 static aData[ GangInfo ], szKey1[ 254 ], szAuthID[ 35 ], szNameID[ 32 ], KeyIndex[ 6 ];
3042
3043 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
3044
3045 new Array:arrayData;
3046 new eData[ enumPlayer ];
3047 new Total = GetPlayerStats( arrayData );
3048
3049 for( new i = 0; i < Total; i++ )
3050 {
3051 ArrayGetArray( arrayData, i, eData );
3052
3053 if ( equali( eData[ playerGangName ], aData[ GangName ] ) )
3054 {
3055 if ( eData[ playerGangData ] > getStatus( client, g_iGang[ client ] ) )
3056 continue;
3057
3058 formatex( szKey1, charsmax( szKey1 ), "%s", eData[ playerName ] )
3059 replace( szKey1, charsmax( szKey1 ), "@", " " );
3060
3061 parse( szKey1, szAuthID, charsmax( szAuthID ), szNameID, charsmax( szNameID ) );
3062
3063 if ( is_auth_online( szAuthID ) )
3064 formatex( szItem, charsmax( szItem ), "\yONLINE\w - %s (%s)", szNameID, szAuthID );
3065
3066 else formatex( szItem, charsmax( szItem ), "\rOFFLINE\d - %s (%s)", szNameID, szAuthID );
3067
3068 num_to_str( i, KeyIndex, charsmax( KeyIndex ) );
3069
3070 menu_additem( Menu, szItem, KeyIndex );
3071 }
3072 }
3073
3074 menu_display( client, Menu );
3075
3076 return 1;
3077}
3078
3079public SubKickMenu( client, Menu, Item )
3080{
3081 if ( g_iGang[ client ] == -1 )
3082 return ColorChat( client, "You need to be in a gang." );
3083
3084 if ( getStatus( client, g_iGang[ client ] ) < STATUS_ADMIN )
3085 return ColorChat( client, "You have no^x04 access^x01 to this command." );
3086
3087 if ( Item == MENU_EXIT )
3088 {
3089 menu_destroy( Menu );
3090
3091 return 1;
3092 }
3093
3094 new Array:arrayData;
3095 new eData[ enumPlayer ];
3096 GetPlayerStats( arrayData );
3097
3098 static mData[ 6 ], Trash, KeyIndex, aData[ GangInfo ], szKey1[ 254 ];
3099
3100 static szAuthID[ 35 ], szNameID[ 32 ], iStatus;
3101
3102 iStatus = getStatus( client, g_iGang[ client ] );
3103
3104 KeyIndex = MenuKey( Menu, Item );
3105
3106 ArrayGetArray( arrayData, KeyIndex, eData );
3107
3108 if ( eData[ playerGangData ] == STATUS_ADMIN && eData[ playerGangData ] != STATUS_MEMBER || eData[ playerGangData ] == STATUS_LEADER && eData[ playerGangData ] > STATUS_ADMIN )
3109 return ColorChat( client, "You canno't kick %s^1!", (eData[ playerGangData ] ==STATUS_ADMIN) ? "an^4 Admin" : "a^4 Leader" );
3110
3111 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
3112
3113
3114 formatex( szKey1, charsmax( szKey1 ), "%s", eData[ playerName ]);
3115 TrieDeleteKey( aData[ GangMembers ], eData[ playerName ] );
3116
3117 aData[ NumMembers ]--;
3118
3119 ArraySetArray( g_aGangs, g_iGang[ client ], aData );
3120
3121 fvault_remove_key( g_szGangPlayerss, eData[ playerName ]);
3122
3123 replace( szKey1, charsmax( szKey1 ), "@", " " );
3124
3125 parse( szKey1, szAuthID, charsmax( szAuthID ), szNameID, charsmax( szNameID ) );
3126
3127 new Players[ 32 ], iNum, iPlayer;
3128
3129 get_players( Players, iNum, "ch" );
3130
3131 if ( is_auth_online( szAuthID ) )
3132 {
3133 for ( new i; i < iNum; i++ )
3134 {
3135 iPlayer = Players[ i ];
3136
3137 if ( equali( szAuthID, szAuth( iPlayer ) ) )
3138 g_iGang[ iPlayer ] = -1;
3139 }
3140 }
3141
3142 for( new i; i < iNum; i++ )
3143 {
3144 iPlayer = Players[ i ];
3145
3146 if( iPlayer == client || g_iGang[ iPlayer ] != g_iGang[ client ] )
3147 continue;
3148
3149 set_user_gang( iPlayer, -1, STATUS_NONE );
3150 }
3151
3152 ColorChat( 0, "^x04%s^x01 kicked^x03 %s^x01 from gang.", szName( client ), szNameID );
3153
3154 return CmdGang( client );
3155}
3156
3157/* Events */
3158
3159public evRoundStart()
3160{
3161 static aData[ GangInfo ];
3162
3163 for ( new client = 1; client < get_maxplayers(); client++ )
3164 {
3165 if ( !is_user_connected( client ) || g_iGang[ client ] == -1 )
3166 continue;
3167
3168 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
3169
3170 if ( aData[ GangGetCash ] == 0 )
3171 continue;
3172
3173 set_hudmessage( 0, 70, 255, -1.0, 0.0, 0, 0.1, 12.0, 0.1, 0.1, -1 );
3174
3175
3176 if( szSkills[ SKILL_GETCASH ][ baseArrayNumber + aData[ GangGetCash ] ] >= ( MAX_SKILL_ARRAY - 1 ) && is_user_admin( client ) )
3177 show_hudmessage( client, "Type /getcash to get %i Cash!", szSkills[ SKILL_GETCASH ][ baseArrayNumber + aData[ GangGetCash ] ] * 2 );
3178 else
3179 show_hudmessage( client, "Type /getcash to get %i Cash!", szSkills[ SKILL_GETCASH ][ baseArrayNumber + aData[ GangGetCash ] ] );
3180
3181 bGetCash[ client ] = false;
3182 }
3183}
3184
3185public evDeathMsg()
3186{
3187 static Attacker, Victim, aData[ GangInfo ], Bonus;
3188
3189 Attacker = read_data( 1 );
3190 Victim = read_data( 2 );
3191 if ( !is_user_connected( Attacker ) )
3192 return 0;
3193
3194 if ( cs_get_user_team( Attacker ) != CS_TEAM_T || cs_get_user_team( Victim ) != CS_TEAM_CT || Attacker == Victim || g_iGang[ Attacker ] == -1 )
3195 return 0;
3196
3197 ArrayGetArray( g_aGangs, g_iGang[ Attacker ], aData );
3198
3199 if ( aData[ GangBoost ] == 0 )
3200 return 0;
3201
3202 Bonus = szSkills[ SKILL_EXTRACASH ][ baseArrayNumber + aData[ GangBoost ] ]
3203
3204 if ( CountPlayers() < 5 )
3205 return 1;
3206
3207 set_user_cash( Attacker, get_user_cash( Attacker ) + Bonus );
3208
3209 ColorChat( Attacker, "You gained^4 %i^3 bonus cash^1!", Bonus );
3210
3211 return 0;
3212}
3213
3214/* Forwards */
3215
3216public FwdPreThink( client )
3217{
3218 if ( !is_user_alive( client ) || !is_user_connected( client ) || g_iGang[ client ] == -1 )
3219 return 1;
3220
3221 static aData[ GangInfo ];
3222
3223 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
3224
3225 if ( aData[ GangRegen ] == 0 )
3226 return 1;
3227
3228 if ( fRegen[ client ] + szSkills[ SKILL_HP ][ baseArrayNumber + aData[ GangRegen ] ] < get_gametime() )
3229 {
3230 if ( get_user_health( client ) >= 100 )
3231 {
3232 fRegen[ client ] = get_gametime();
3233
3234 return 1;
3235 }
3236
3237 else if ( get_user_health( client ) + 20 > 100 )
3238 fm_set_user_health( client, 100 );
3239
3240 else
3241 fm_set_user_health( client, get_user_health( client ) + 20 );
3242
3243 fRegen[ client ] = get_gametime();
3244 }
3245
3246 return 1;
3247}
3248
3249/* Chat */
3250
3251public CmdSay( client )
3252{
3253 static szMsg[ 512 ];
3254
3255 read_args( szMsg, charsmax( szMsg ) );
3256
3257 remove_quotes( szMsg );
3258
3259 static aData[ GangInfo ], Amount;
3260
3261 if ( g_iGang[ client ] > -1 )
3262 ArrayGetArray( g_aGangs, g_iGang[ client ], aData );
3263
3264 if ( equali( szMsg, "/getcash" ) || equali( szMsg, "/gc" ) )
3265 {
3266 if ( g_iGang[ client ] == -1 )
3267 return ColorChat( client, "You need to be in a gang." );
3268
3269 if ( aData[ GangGetCash ] == 0 )
3270 return ColorChat( client, "That skill is not yet upgraded in your gang." );
3271
3272 if ( bGetCash[ client ] )
3273 return ColorChat( client, "You can only use^4 Get cash^1 on time^3 per round^1!" );
3274
3275 if ( CountPlayers() < 5 )
3276 return ColorChat( client, "You can't use^3 get cash^1 if there are less than^4 5 players^1." );
3277
3278 static iData;
3279
3280 iData = aData[ GangGetCash ];
3281
3282 bGetCash[ client ] = true;
3283
3284 Amount = szSkills[ SKILL_GETCASH ][ baseArrayNumber + iData ]
3285
3286 Amount += Amount;
3287
3288 set_user_cash( client, get_user_cash( client ) + Amount );
3289
3290 return ColorChat( client, "You received^4 %i cash^1,^3 good luck^1!", Amount );
3291 }
3292
3293 if ( g_iGang[ client ] == -1 )
3294 return 0;
3295
3296
3297 if ( szMsg[ 0 ] != '~' )
3298 return 0;
3299
3300 replace( szMsg, charsmax( szMsg ), "~", "" );
3301
3302 static Players[ 32 ], iNum, iPlayer, szStatus[ 32 ];
3303
3304 get_players( Players, iNum );
3305
3306 formatex( szStatus, charsmax( szStatus ), "*%s*",
3307 (getStatus( client, g_iGang[ client ] ) == STATUS_LEADER) ? "Leader" : (getStatus( client, g_iGang[ client ] ) == STATUS_ADMIN) ? "Admin" : "Member" );
3308
3309 for ( new i; i < iNum; i++ )
3310 {
3311 iPlayer = Players[ i ];
3312
3313 if ( g_iGang[ iPlayer ] != g_iGang[ client ] )
3314 continue;
3315
3316 ColorChat( iPlayer, "^3*^1%s^1[^3 %s ^1] %s^4 %s^1 :^3 %s", is_user_alive( client ) ? " " : "DEAD", aData[ GangName ], szStatus, szName( client ), szMsg );
3317 }
3318
3319 return 1;
3320}
3321
3322
3323stock CountPlayers()
3324{
3325 static Players[ 32 ], iNum;
3326
3327 get_players( Players, iNum, "ch" );
3328
3329 return iNum;
3330}
3331
3332/* Gang Glow */
3333
3334public _set_glow( plugin, params )
3335{
3336 bGlow = true;
3337
3338 GangGlow();
3339
3340 set_task( 20.0, "GangGlow", TASKID_GLOW, _,_, "b" );
3341}
3342
3343public _remove_glow( plugin, params )
3344{
3345 remove_task( TASKID_GLOW );
3346
3347 bGlow = false;
3348
3349 for ( new client = 1; client < get_maxplayers(); client++ )
3350 {
3351 if ( !is_user_connected( client ) || !is_user_alive( client ) )
3352 continue;
3353
3354 fm_set_user_rendering( client );
3355 }
3356}
3357
3358public GangGlow()
3359{
3360 if ( !bGlow )
3361 return 1;
3362
3363 static red, green, blue;
3364
3365 for ( new client = 1; client < get_maxplayers(); client++ )
3366 {
3367 if ( !is_user_connected( client ) || !is_user_alive( client ) || cs_get_user_team( client ) != CS_TEAM_T || g_iGang[ client ] == -1 )
3368 continue;
3369
3370 red = g_iGangsColors[ g_iGang[ client ] ][ rColor ];
3371 green = g_iGangsColors[ g_iGang[ client ] ][ gColor ];
3372 blue = g_iGangsColors[ g_iGang[ client ] ][ bColor ];
3373
3374 fm_set_user_rendering( client, kRenderFxGlowShell, red, green, blue, kRenderNormal, 16 );
3375 }
3376
3377 return 1;
3378}
3379
3380
3381public CmdChangeVote( iTask )
3382{
3383 iTask -= TASK_WORK;
3384
3385 if( GetCurrectAmount( iTask , BLACKJACK_SERVER ) > 16 )
3386 {
3387 remove_task( TASK_WORK + iTask );
3388 g_Player [ iTask ][ PLAYER_WON ] = true;
3389 ShowOtherMenu( iTask );
3390 return PLUGIN_HANDLED;
3391 }
3392 else
3393 {
3394 CmdGiveCards( iTask, 1, BLACKJACK_SERVER );
3395 ShowOtherMenu( iTask );
3396 set_task( 0.5, "CmdChangeVote", iTask + TASK_WORK);
3397 }
3398 return PLUGIN_HANDLED;
3399}
3400
3401
3402
3403public CmdBlackJack( client )
3404{
3405 static Menu;
3406
3407 formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\yBlackjack \wMain Menu \r(\w %i\d Credits\r )", Info[ 3 ], g_intPlayer[ client ][ playerTokens ]);
3408 Menu = menu_create( szItem, "HandlerBlackJack" );
3409
3410 formatex( szItem, charsmax( szItem ), "Tokens Amount \d(\y%i Credits \d) ", g_Player[ client ][ PLAYER_AMOUNT ]);
3411 menu_additem( Menu, szItem );
3412 menu_additem( Menu, "Start a Game !");
3413
3414 menu_display( client, Menu );
3415 return 1;
3416}
3417
3418public HandlerBlackJack( client, Menu, Item )
3419{
3420 if ( Item == MENU_EXIT )
3421 {
3422 menu_destroy( Menu );
3423
3424 return 1;
3425 }
3426
3427 switch ( Item )
3428 {
3429 case 0:
3430 {
3431 if( g_Player[ client ][ PLAYER_AMOUNT ] >= 5 )
3432 {
3433 g_Player[ client ][ PLAYER_AMOUNT ] = 1;
3434 }
3435 else
3436 {
3437 g_Player[ client ][ PLAYER_AMOUNT ]++;
3438 }
3439 CmdBlackJack( client );
3440 }
3441 case 1:
3442 {
3443 if( g_intPlayer[ client ][ playerTokens ] < g_Player[ client ][ PLAYER_AMOUNT ] )
3444 {
3445 CmdBlackJack( client );
3446 }
3447 else if( g_Player [ client ][ PLAYER_GAME ] )
3448 {
3449 CmdBlackJack( client );
3450 }
3451 else
3452 {
3453 g_Player [ client ][ PLAYER_GAME ] = true;
3454 g_Player[ client ][ PLAYER_DRAWCARDS ] = false;
3455 g_Player[ client ][ PLAYER_DOUBLE ] = false;
3456 g_Player [ client ][ PLAYER_GAMEDOWN ] = false;
3457 g_Player [ client ][ PLAYER_WON ] = false;
3458 CmdGiveCards( client, 2, BLACKJACK_PLAYER );
3459 CmdGiveCards( client, 1, BLACKJACK_SERVER );
3460
3461 g_intPlayer[ client ][ playerTokens ] -= g_Player[ client ][ PLAYER_AMOUNT ];
3462 SaveUser( client );
3463 ShowOtherMenu( client );
3464 }
3465 }
3466 }
3467 return 1;
3468}
3469
3470public ShowOtherMenu( Client )
3471{
3472 new strTemp[ 1024 ], iLen = 0, strCards[ 128 ];
3473
3474 if( GetCurrectAmount( Client , BLACKJACK_PLAYER ) > 21 )
3475 {
3476 g_Player [ Client ][ PLAYER_WON ] = true;
3477 }
3478
3479 iLen = formatex( strTemp[ iLen ], sizeof( strTemp ) - iLen - 1,"\r[ \wInjstice \r] \yMain %s\wBlackjack menu^n\wCurrect Pot\d( \w%i \rCredits \d)^n", ( !g_Player [ Client ][ PLAYER_WON ] ) ? "" : " \dResults ", ( !g_Player[ Client ][ PLAYER_DOUBLE ] ) ? (2 * g_Player[ Client ][ PLAYER_AMOUNT ] ) : ( ( g_Player[ Client ][ PLAYER_AMOUNT ] + g_Player[ Client ][ PLAYER_AMOUNT ] ) * 2 ));
3480
3481 for( new i = 0; i < MAX_CARD_KINDS; i++ )
3482 {
3483 if( g_iPlayer[ Client ][ i ][ BLACKJACK_PLAYER ] > 0 )
3484 formatex( strCards, charsmax( strCards ) , "%s%s,", strCards, g_strCards[ i ]);
3485 }
3486 iLen += formatex( strTemp[ iLen ], sizeof( strTemp ) - iLen - 1,"You\y(%i)\d:^n %s", GetCurrectAmount( Client , BLACKJACK_PLAYER ) , strCards);
3487
3488 strCards = "";
3489 for( new i = 0; i < MAX_CARD_KINDS; i++ )
3490 {
3491 if( g_iPlayer[ Client ][ i ][ BLACKJACK_SERVER ] > 0 )
3492 formatex( strCards, charsmax( strCards ) , "%s%s,", strCards, g_strCards[ i ]);
3493 }
3494
3495 iLen += formatex( strTemp[ iLen ], sizeof( strTemp ) - iLen - 1,"^n^n\wServer\y(%i)\d:^n %s", GetCurrectAmount( Client , BLACKJACK_SERVER ), strCards);
3496
3497 if( g_Player [ Client ][ PLAYER_WON ] )
3498 {
3499 new szKeyName[ 32 ];
3500 new intWinner = GetWinner( Client );
3501
3502 if( intWinner == 5 )
3503 {
3504 iLen += format( strTemp[iLen], sizeof( strTemp ) - iLen - 1, "^n\dthe Game \wStatus\d: \rDraw^n^n^n")
3505 }
3506 else
3507 {
3508 new intCashout = ( !g_Player[ Client ][ PLAYER_DOUBLE ] ) ? ( g_Player[ Client ][ PLAYER_AMOUNT ] ) : ( g_Player[ Client ][ PLAYER_AMOUNT ] + g_Player[ Client ][ PLAYER_AMOUNT ] );
3509
3510 if( intWinner == 0 )
3511 {
3512 szKeyName = "Server";
3513 g_intPlayer[ Client ][ playerBjLose ]++;
3514 g_intPlayer[ Client ][ playerBjTotalLose ] += intCashout;
3515 }
3516 else
3517 {
3518 szKeyName = "You";
3519 g_intPlayer[ Client ][ playerBjWin ]++;
3520 g_intPlayer[ Client ][ playerBjTotalWin ] += 2 * intCashout;
3521 g_intPlayer[ Client ][ playerTokens ] += 2 * intCashout;
3522 }
3523 SaveUser( Client );
3524 iLen += format( strTemp[iLen], sizeof( strTemp ) - iLen - 1, "^n^n\wthe Game \yStatus\d: \w%s Won^n^n^n", szKeyName)
3525 }
3526 }
3527 else
3528 {
3529 iLen += format( strTemp[iLen], sizeof( strTemp ) - iLen - 1, "^n^n^n\r1. \wTake a Card")
3530 if( !g_Player[ Client ][ PLAYER_DRAWCARDS ] )
3531 iLen += format( strTemp[iLen], sizeof( strTemp ) - iLen - 1, "^n\r2. \wDouble[ PAY %i Credits ] ", g_Player[ Client ][ PLAYER_AMOUNT ] )
3532 iLen += format( strTemp[iLen], sizeof( strTemp ) - iLen - 1, "^n\r3. \wStop^n^n")
3533 }
3534 iLen += format( strTemp[iLen], sizeof( strTemp ) - iLen - 1, "\r0. \wExit")
3535
3536 show_menu(Client, MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3, strTemp, -1, "blackjackmenu")
3537
3538}
3539
3540public Handler_blackjackmenu( Client, item )
3541{
3542 if(g_Player [ Client ][ PLAYER_WON ] )
3543 {
3544 CmdBlackJack( Client );
3545 }
3546 switch( item )
3547 {
3548 case 0:
3549 {
3550 g_Player[ Client ][ PLAYER_DRAWCARDS ] = true;
3551 CmdGiveCards( Client, 1, BLACKJACK_PLAYER );
3552 ShowOtherMenu( Client )
3553 }
3554 case 1:
3555 {
3556 if( g_Player[ Client ][ PLAYER_DRAWCARDS ] )
3557 {
3558 ShowOtherMenu( Client );
3559 }
3560 else
3561 {
3562 g_Player[ Client ][ PLAYER_DOUBLE ] = true;
3563 CmdGiveCards( Client, 1, BLACKJACK_PLAYER );
3564 set_task( 0.5, "CmdChangeVote", Client + TASK_WORK);
3565 g_intPlayer[ Client ][ playerTokens ] -= g_Player[ Client ][ PLAYER_AMOUNT ];
3566 SaveUser( Client );
3567 }
3568 }
3569 case 2:
3570 {
3571 set_task( 0.5, "CmdChangeVote", Client + TASK_WORK);
3572 }
3573 default:
3574 {
3575 ResetGame( Client );
3576
3577 if( !g_Player [ Client ][ PLAYER_GAME ] )
3578 {
3579 g_Player [ Client ][ PLAYER_GAME ] = true;
3580 g_Player [ Client ][ PLAYER_GAMEDOWN ] = false;
3581 g_Player[ Client ][ PLAYER_DOUBLE ] = false;
3582 g_Player[ Client ][ PLAYER_DRAWCARDS ] = false;
3583 g_Player [ Client ][ PLAYER_WON ] = false;
3584 CmdGiveCards( Client, 2, BLACKJACK_PLAYER );
3585 CmdGiveCards( Client, 1, BLACKJACK_SERVER );
3586 ShowOtherMenu( Client );
3587 }
3588 }
3589 }
3590}
3591
3592/* Stocks and Functions */
3593
3594/*
3595public SaveGangs()
3596{
3597 static data[ 512 ];
3598 new len;
3599
3600 static aData[ GangInfo ];
3601
3602 for( new i = 0; i < ArraySize( g_aGangs ); i++ )
3603 {
3604 ArrayGetArray( g_aGangs, i, aData );
3605
3606 len == formatex( data[ len ], sizeof( data ) - len - 1, "%i", aData[ GangRegen ])
3607 len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", aData[ GangBoost ])
3608 len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", aData[ GangGetCash ])
3609 len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", aData[ GangNext ])
3610 len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", aData[ GangCash ])
3611 len += formatex( data[ len ], sizeof( data ) - len - 1, " ^"%s^"", aData[ GangMessage ])
3612 len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", aData[ GangMaxDonation ])
3613 len += formatex( data[ len ], sizeof( data ) - len - 1, " ^"%s^"", aData[ GangCreation ])
3614 len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", aData[ GangColor ])
3615 len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", aData[ GangSkillMemeber ])
3616 len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", aData[ GangCredits ])
3617
3618 fvault_set_data( g_szGangs, aData[ GangName ], data )
3619 }
3620}
3621
3622public LoadGangs()
3623{
3624 new intTotal, aData[ GangInfo ], strData[ 512 ], num[ 80 ];
3625
3626 new iTotal = fvault_size( g_szGangs );
3627 new Array:arrayData;
3628 new eData[ enumPlayer ];
3629 new Total = GetPlayerStats( arrayData );
3630
3631 for( new i = 0; i < iTotal; i++ )
3632 {
3633 fvault_get_keyname( g_szGangs, i, aData[ GangName ], sizeof( aData[ GangName ] ) - 1);
3634 fvault_get_data( g_szGangs, aData[ GangName ], strData, sizeof( strData ) - 1 );
3635
3636 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3637 aData[ GangRegen ] = str_to_num( num );
3638
3639 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3640 aData[ GangBoost ] = str_to_num( num );
3641
3642 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3643 aData[ GangGetCash ] = str_to_num( num );
3644
3645 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3646 aData[ GangNext ] = str_to_num( num );
3647
3648 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3649 aData[ GangCash ] = str_to_num( num );
3650
3651 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3652 copy( aData[ GangMessage ], sizeof( aData[ GangMessage ] ) - 1, num );
3653
3654 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3655 aData[ GangMaxDonation ] = str_to_num( num );
3656
3657 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3658 copy( aData[ GangCreation ], sizeof( aData[ GangCreation ] ) - 1, num );
3659
3660 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3661 aData[ GangColor ] = str_to_num( num );
3662
3663 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3664 aData[ GangSkillMemeber ] = str_to_num( num );
3665
3666 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3667 aData[ GangCredits ] = str_to_num( num );
3668
3669 TrieSetCell( g_tGangNames, aData[ GangName ], intTotal );
3670 ArrayPushArray( g_aGangs, aData );
3671
3672 intTotal++
3673 }
3674 new iGang
3675
3676 for( new j = 0; j < Total; j++ )
3677 {
3678 ArrayGetArray( arrayData, i, eData );
3679
3680 if( TrieGetCell( g_tGangNames, eData[ playerGangName ], iGang ) )
3681 {
3682 ArrayGetArray( g_aGangs, iGang, aData );
3683
3684 TrieSetCell( aData[ GangMembers ], eData[ playerName ], eData[ playerGangData ] );
3685
3686 aData[ NumMembers ]++;
3687
3688 ArraySetArray( g_aGangs, iGang, aData );
3689 }
3690 }
3691}*/
3692
3693public LoadGangs()
3694{
3695 new szConfigsDir[ 60 ], szFileName[ 32 ];
3696
3697 get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
3698
3699 formatex( szFileName, charsmax( szFileName ), "/%s.ini", FILE_NAME );
3700
3701 add( szConfigsDir, charsmax( szConfigsDir ), szFileName );
3702
3703 new iFile = fopen( szConfigsDir, "rt" );
3704
3705 new aData[ GangInfo ];
3706
3707 new szBuffer[ 512 ], szData[ 256 ], szValue[ 512 ], i, iCurGang;
3708
3709 while( !feof( iFile ) )
3710 {
3711 fgets( iFile, szBuffer, charsmax( szBuffer ) );
3712
3713 trim( szBuffer );
3714 remove_quotes( szBuffer );
3715
3716 if( !szBuffer[ 0 ] || szBuffer[ 0 ] == ';' )
3717 {
3718 continue;
3719 }
3720
3721 if( szBuffer[ 0 ] == '[' && szBuffer[ strlen( szBuffer ) - 1 ] == ']' )
3722 {
3723 copy( aData[ GangName ], strlen( szBuffer ) - 2, szBuffer[ 1 ] );
3724 aData[ GangRegen ] = 0;
3725 aData[ GangBoost ] = 0;
3726 aData[ GangGetCash ] = 0;
3727 aData[ GangNext ] = 0;
3728 aData[ GangCredits ] = 0;
3729 aData[ GangCash ] = 0;
3730 aData[ NumMembers ] = 0;
3731 aData[ GangMembers ] = _:TrieCreate();
3732
3733
3734 if( TrieKeyExists( g_tGangNames, aData[ GangName ] ) )
3735 {
3736 new szError[ 256 ];
3737 formatex( szError, charsmax( szError ), "[JB Gangs] Gang already exists: %s", aData[ GangName ] );
3738 set_fail_state( szError );
3739 }
3740
3741 ArrayPushArray( g_aGangs, aData );
3742
3743 TrieSetCell( g_tGangNames, aData[ GangName ], iCurGang );
3744
3745 log_amx( "Gang Created: %s", aData[ GangName ] );
3746
3747 iCurGang++;
3748
3749 continue;
3750 }
3751
3752 strtok( szBuffer, szData, charsmax( szData ), szValue, charsmax( szValue ), '=' );
3753 trim( szData );
3754 trim( szValue );
3755
3756 if( TrieGetCell( g_tGangValues, szData, i ) )
3757 {
3758 ArrayGetArray( g_aGangs, iCurGang - 1, aData );
3759
3760 switch( i )
3761 {
3762 case VALUE_CREATION:
3763 formatex( aData[ GangCreation ], charsmax( aData[ GangCreation ] ), "%s", szValue);
3764 case VALUE_REGEN:
3765 aData[ GangRegen ] = str_to_num( szValue );
3766
3767 case VALUE_BOOST:
3768 aData[ GangBoost ] = str_to_num( szValue );
3769
3770 case VALUE_GETCASH:
3771 aData[ GangGetCash ] = str_to_num( szValue );
3772
3773 case VALUE_NEXTCASH:
3774 aData[ GangNext ] = str_to_num( szValue );
3775
3776 case VALUE_CASH:
3777 aData[ GangCash ] = str_to_num( szValue );
3778
3779 case VALUE_MESSAGE:
3780 copy( aData[ GangMessage ], charsmax( aData[ GangMessage ] ), szValue );
3781
3782 case VALUE_MAXDONATION:
3783 aData[ GangMaxDonation ] = str_to_num( szValue );
3784 case VALUE_COLOR:
3785 aData[ GangColor ] = str_to_num( szValue );
3786 case VALUE_GANGPLAYERS:
3787 aData[ GangSkillMemeber ] = str_to_num( szValue );
3788 case VALUE_CREDITS:
3789 aData[ GangCredits ] = str_to_num( szValue );
3790 }
3791
3792 ArraySetArray( g_aGangs, iCurGang - 1, aData );
3793 }
3794 }
3795 new iGang;
3796
3797 new Array:arrayData;
3798 new eData[ enumPlayer ];
3799 new Total = GetPlayerStats( arrayData );
3800
3801 for( new i = 0; i < Total; i++ )
3802 {
3803 ArrayGetArray( arrayData, i, eData );
3804
3805 if( TrieGetCell( g_tGangNames, eData[ playerGangName ], iGang ) )
3806 {
3807 ArrayGetArray( g_aGangs, iGang, aData );
3808
3809 TrieSetCell( aData[ GangMembers ], eData[ playerName ], eData[ playerGangData ] );
3810
3811 aData[ NumMembers ]++;
3812
3813 ArraySetArray( g_aGangs, iGang, aData );
3814 }
3815 }
3816
3817
3818 fclose( iFile );
3819}
3820
3821public SaveGangs()
3822{
3823 new szConfigsDir[ 60 ], szFileName[ 32 ];
3824
3825 get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
3826
3827 formatex( szFileName, charsmax( szFileName ), "/%s.ini", FILE_NAME );
3828
3829 add( szConfigsDir, charsmax( szConfigsDir ), szFileName );
3830
3831 if( file_exists( szConfigsDir ) )
3832 delete_file( szConfigsDir );
3833
3834 new iFile = fopen( szConfigsDir, "wt" );
3835
3836 new aData[ GangInfo ];
3837
3838 new szBuffer[ 512 ];
3839
3840 for( new i = 0; i < ArraySize( g_aGangs ); i++ )
3841 {
3842 ArrayGetArray( g_aGangs, i, aData );
3843
3844 formatex( szBuffer, charsmax( szBuffer ), "[%s]^n", aData[ GangName ] );
3845 fputs( iFile, szBuffer );
3846
3847 formatex( szBuffer, charsmax( szBuffer ), "GangCreation=^"%s^"^n", aData[ GangCreation ] );
3848 fputs( iFile, szBuffer );
3849
3850 formatex( szBuffer, charsmax( szBuffer ), "Regeneration=%i^n", aData[ GangRegen ] );
3851 fputs( iFile, szBuffer );
3852
3853 formatex( szBuffer, charsmax( szBuffer ), "CashBoost=%i^n", aData[ GangBoost ] );
3854 fputs( iFile, szBuffer );
3855
3856 formatex( szBuffer, charsmax( szBuffer ), "GetCash=%i^n", aData[ GangGetCash ] );
3857 fputs( iFile, szBuffer );
3858
3859 formatex( szBuffer, charsmax( szBuffer ), "NextCash=%i^n", aData[ GangNext ] );
3860 fputs( iFile, szBuffer );
3861
3862 formatex( szBuffer, charsmax( szBuffer ), "Cash=%i^n", aData[ GangCash ] );
3863 fputs( iFile, szBuffer );
3864
3865 formatex( szBuffer, charsmax( szBuffer ), "GangMessage=%s^n", aData[ GangMessage ] );
3866 fputs( iFile, szBuffer );
3867
3868 formatex( szBuffer, charsmax( szBuffer ), "MaxDonation=%i^n", aData[ GangMaxDonation ] );
3869 fputs( iFile, szBuffer );
3870
3871 formatex( szBuffer, charsmax( szBuffer ), "GangColor=%i^n", aData[ GangColor ] );
3872 fputs( iFile, szBuffer );
3873
3874 formatex( szBuffer, charsmax( szBuffer ), "GangPlayers=%i^n", aData[ GangSkillMemeber ] );
3875 fputs( iFile, szBuffer );
3876
3877 formatex( szBuffer, charsmax( szBuffer ), "GangCredits=%i^n^n", aData[ GangCredits ] );
3878 fputs( iFile, szBuffer );
3879
3880 }
3881
3882 fclose( iFile );
3883}
3884
3885set_user_gang( id, iGang, iStatus = STATUS_MEMBER )
3886{
3887 new szAuthID[ 35 ], szFormat[ 128 ];
3888
3889 new Array:arrayData;
3890 new eData[ enumPlayer ];
3891 GetPlayerStats( arrayData );
3892
3893 GetUserAuth( id, szAuthID, charsmax( szAuthID ) );
3894
3895 new aData[ GangInfo ];
3896
3897 if( g_iGang[ id ] > -1 )
3898 {
3899 ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
3900
3901 TrieDeleteKey( aData[ GangMembers ], szAuthID );
3902
3903 aData[ NumMembers ]--;
3904
3905 ArraySetArray( g_aGangs, g_iGang[ id ], aData );
3906
3907 fvault_remove_key( g_szGangPlayerss, szAuthID );
3908 }
3909
3910 if( iGang > -1 )
3911 {
3912 formatex( szFormat, charsmax( szFormat ), "%s@%s", szAuthID, szName( id ) );
3913
3914 ArrayGetArray( g_aGangs, iGang, aData );
3915
3916 TrieSetCell( aData[ GangMembers ], szFormat, iStatus );
3917
3918 aData[ NumMembers ]++;
3919
3920 ArraySetArray( g_aGangs, iGang, aData );
3921
3922 new strData[ 256 ], len = 0;
3923
3924 len = formatex( strData[ len ], sizeof( strData ) - len - 1, "^"%s^"", aData[ GangName ]);
3925 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", iStatus);
3926 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " ^"%s^"", g_intPlayer[ id ][ playerGangInvited ]);
3927 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " ^"%s^"", g_intPlayer[ id ][ playerGangInvitedDate ]);
3928 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ id ][ playerTokens ]);
3929
3930 // Blackjack Here
3931 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ id ][ playerBjLose ]);
3932 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ id ][ playerBjWin ]);
3933 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ id ][ playerBjTotalLose ]);
3934 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ id ][ playerBjTotalWin ]);
3935
3936 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ id ][ playerCash ]);
3937
3938 fvault_set_data( g_szGangPlayerss, szFormat, strData );
3939 }
3940
3941 g_iGang[ id ] = iGang;
3942
3943 return 1;
3944}
3945
3946public LoadUser( index )
3947{
3948 new strData[ 128 ], strKey[ 128 ], szAuthID[ 35 ], num[ 10 ];
3949
3950 GetUserAuth( index, szAuthID, charsmax( szAuthID ) );
3951
3952 formatex( strKey, charsmax( strKey ), "%s@%s", szAuthID, szName( index ) );
3953
3954 if( fvault_get_data( g_szGangPlayerss, strKey, strData, 127) )
3955 {
3956 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3957 copy( g_intPlayer[ index ][ playerGangName ], charsmax( g_intPlayer[][ playerGangName ] ), num );
3958
3959 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3960 g_intPlayer[ index ][ playerGangData ] = str_to_num( num );
3961
3962 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3963 copy( g_intPlayer[ index ][ playerGangInvited ], charsmax( g_intPlayer[][ playerGangInvited ] ), num );
3964
3965 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3966 copy( g_intPlayer[ index ][ playerGangInvitedDate ], charsmax( g_intPlayer[][ playerGangInvited ] ), num );
3967
3968 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3969 g_intPlayer[ index ][ playerTokens ] = str_to_num( num );
3970
3971 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3972 g_intPlayer[ index ][ playerBjLose ] = str_to_num( num );
3973
3974 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3975 g_intPlayer[ index ][ playerBjWin ] = str_to_num( num );
3976
3977 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3978 g_intPlayer[ index ][ playerBjTotalLose ] = str_to_num( num );
3979
3980 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3981 g_intPlayer[ index ][ playerBjTotalWin ] = str_to_num( num );
3982
3983 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
3984 g_intPlayer[ index ][ playerCash ] = str_to_num( num );
3985 }
3986}
3987public SaveUser( index )
3988{
3989 new strData[ 256 ], szAuthID[ 35 ], strKey[ 128 ], len = 0;
3990
3991 new aData[ GangInfo ];
3992 ArrayGetArray( g_aGangs, g_iGang[ index ], aData );
3993
3994 new Array:arrayData;
3995 new eData[ enumPlayer ];
3996 GetPlayerStats( arrayData );
3997
3998 GetUserAuth( index, szAuthID, charsmax( szAuthID ) );
3999
4000 formatex( strKey, charsmax( strKey ), "%s@%s", szAuthID, szName( index ) );
4001
4002 len = formatex( strData[ len ], sizeof( strData ) - len - 1, "^"%s^"", g_intPlayer[ index ][ GangName ]);
4003 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ index ][ playerGangData ]);
4004 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " ^"%s^"", g_intPlayer[ index ][ playerGangInvited ]);
4005 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " ^"%s^"", g_intPlayer[ index ][ playerGangInvitedDate ]);
4006 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ index ][ playerTokens ]);
4007
4008 // Blackjack Here
4009 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ index ][ playerBjLose ]);
4010 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ index ][ playerBjWin ]);
4011 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ index ][ playerBjTotalLose ]);
4012 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ index ][ playerBjTotalWin ]);
4013
4014 len += formatex( strData[ len ], sizeof( strData ) - len - 1, " %i", g_intPlayer[ index ][ playerCash ]);
4015
4016 fvault_set_data( g_szGangPlayerss, strKey, strData );
4017}
4018
4019GetPlayerStats( &Array:aData )
4020{
4021 aData = ArrayCreate( enumPlayer );
4022
4023 new Total;
4024
4025 new eData[ enumPlayer ];
4026
4027 new iTotal = fvault_size( g_szGangPlayerss );
4028
4029 new strData[ 256 ], num[ 80 ];
4030
4031 for( new i = 0; i < iTotal; i++ )
4032 {
4033 fvault_get_keyname( g_szGangPlayerss, i, eData[ playerName ], sizeof( eData[ playerName ] ) - 1);
4034 fvault_get_data( g_szGangPlayerss, eData[ playerName ], strData, sizeof( strData ) - 1 );
4035
4036 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4037 copy( eData[ playerGangName ], charsmax( eData[ playerGangName ] ), num );
4038
4039 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4040 eData[ playerGangData ] = str_to_num( num );
4041
4042 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4043 copy( eData[ playerGangInvited ], charsmax( eData[ playerGangInvited ] ), num );
4044
4045 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4046 copy( eData[ playerGangInvitedDate ], charsmax( eData[ playerGangInvitedDate ] ), num );
4047
4048 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4049 eData[ playerTokens ] = str_to_num( num );
4050
4051 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4052 eData[ playerBjLose ] = str_to_num( num );
4053
4054 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4055 eData[ playerBjWin ] = str_to_num( num );
4056
4057 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4058 eData[ playerBjTotalLose ] = str_to_num( num );
4059
4060 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4061 eData[ playerBjTotalWin ] = str_to_num( num );
4062
4063 strbreak( strData, num, charsmax( num ), strData, charsmax( strData ) );
4064 eData[ playerCash ] = str_to_num( num );
4065
4066 Total++;
4067
4068 ArrayPushArray( aData, eData);
4069 }
4070
4071 return Total;
4072}
4073
4074
4075get_user_gang( id )
4076{
4077 static aData[ GangInfo ], szAuthID[ 35 ];
4078
4079 GetUserAuth( id, szAuthID, charsmax( szAuthID ) );
4080
4081 new Key1[ 128 ], szAuthID2[ 35 ], szNameID[ 33 ];
4082
4083 new Array:arrayData;
4084 new eData[ enumPlayer ];
4085 new Total = GetPlayerStats( arrayData );
4086
4087 for( new i = 0; i < Total; i++ )
4088 {
4089 ArrayGetArray( arrayData, i, eData );
4090
4091 formatex( Key1, charsmax( Key1 ), "%s", eData[ playerName ]);
4092 replace( Key1, charsmax( Key1 ), "@", " " );
4093
4094 parse( Key1, szAuthID2, charsmax( szAuthID2 ), szNameID, charsmax( szNameID ) );
4095
4096 if ( equali( szAuthID, szAuthID2 ) )
4097 {
4098 for( new j; j < ArraySize( g_aGangs ); j++ )
4099 {
4100 ArrayGetArray( g_aGangs, j, aData );
4101
4102 if ( equal( aData[ GangName ], eData[ playerGangName ] ) )
4103 {
4104
4105 return j;
4106 }
4107 }
4108 }
4109 }
4110
4111 return -1;
4112}
4113
4114getStatus( id, iGang )
4115{
4116 if ( !is_user_connected( id ) || iGang == -1 )
4117 return STATUS_NONE;
4118
4119 static aData[ GangInfo ], szAuthID[ 35 ], iStatus;
4120
4121 ArrayGetArray( g_aGangs, iGang, aData );
4122
4123 GetUserAuth( id, szAuthID, charsmax( szAuthID ) );
4124
4125 iStatus = 0;
4126
4127 new szKey1[ 254 ], szKey2[ 256 ], szData[ 512 ], szAuthID2[ 35 ], szNameID[ 32 ];
4128
4129 for ( new KeyIndex; KeyIndex < fvault_size( g_szGangPlayerss ); KeyIndex++ )
4130 {
4131 fvault_get_keyname( g_szGangPlayerss, KeyIndex, szKey1, charsmax ( szKey1 ) );
4132 fvault_get_data( g_szGangPlayerss, szKey1, szData, charsmax( szData ) );
4133
4134 strbreak( szData, szKey2, charsmax( szKey2 ), szData, charsmax( szData ) );
4135 replace( szKey1, charsmax( szKey1 ), "@", " " );
4136
4137 parse( szKey1, szAuthID2, charsmax( szAuthID ), szNameID, charsmax( szNameID ) );
4138
4139 if ( !( equal( szKey2, aData[ GangName ] ) ) )
4140 continue;
4141
4142 if ( !( equali( szAuthID, szAuthID2 ) ) )
4143 continue;
4144
4145 break;
4146 }
4147 strbreak( szData, szKey2, charsmax( szKey2 ), szData, charsmax( szData ) );
4148 iStatus = str_to_num( szKey2 );
4149
4150 TrieGetCell( aData[ GangMembers ], szAuthID, iStatus );
4151
4152 return iStatus;
4153}
4154
4155stock ColorChat( const client, const string[], any:... )
4156{
4157 new szMsg[ 191 ], Players[ 32 ], PNum = 1;
4158
4159 static iLen; iLen = formatex( szMsg, charsmax( szMsg ), "^3[%s]^1 ", Info[ 4 ] );
4160
4161 vformat( szMsg[ iLen ], charsmax( szMsg ) - iLen, string, 3 );
4162
4163 if ( client )
4164 Players[ 0 ] = client;
4165
4166 else
4167 get_players( Players, PNum, "ch" );
4168
4169 for ( new i; i < PNum; i++ )
4170 {
4171 if( is_user_connected( Players[ i ] ) )
4172 {
4173 message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, Players[ i ] );
4174
4175 write_byte( Players[ i ] );
4176
4177 write_string( szMsg );
4178
4179 message_end( );
4180 }
4181 }
4182
4183 return 1;
4184}
4185
4186
4187stock GetRanked( GangId )
4188{
4189 new intRanked;
4190
4191 static aData[ GangInfo ];
4192
4193 new arrayData[ GangInfo ];
4194 ArrayGetArray( g_aGangs, GangId, arrayData );
4195
4196 new Array:arrayStats,Trie:trieNames;
4197 new strTemp[ 20 ],kNum[ 6 ], szCash[ 10 ];
4198
4199 arrayStats = ArrayCreate( 20 )
4200 trieNames = TrieCreate()
4201
4202 for ( new i; i < ArraySize( g_aGangs ); i++ )
4203 {
4204 ArrayGetArray( g_aGangs, i, aData );
4205 formatex( strTemp, charsmax( strTemp ),"%d %d", i, aData[ GangMaxDonation ])
4206 ArrayPushString( arrayStats, strTemp )
4207
4208 num_to_str( i, kNum, charsmax( kNum ) );
4209 TrieSetString( trieNames, kNum ,aData[ GangName ] )
4210 }
4211 ArraySort(arrayStats,"GangSorter")
4212
4213 new intRank, strKName[ 32 ], strRank[ 5 ]
4214
4215 for ( new x = 0; x < ArraySize( g_aGangs ); x++ )
4216 {
4217 new pt = getter( arrayStats, x, intRank )
4218
4219 formatex( strRank, charsmax( strRank ), "%d", intRank)
4220 TrieGetString( trieNames, strRank, strKName, charsmax( strKName ) )
4221
4222 if( equali( strKName , arrayData[ GangName ] ) )
4223 {
4224 intRanked = x + 1;
4225 }
4226
4227 }
4228
4229 ArrayDestroy( arrayStats )
4230 TrieDestroy( trieNames )
4231
4232 return intRanked
4233}
4234
4235public GangSorter( Array:arrayStatus,item1,item2 )
4236{
4237 new intKey1 = getter( arrayStatus,item1 )
4238 new intKey2 = getter( arrayStatus,item2 )
4239
4240 if( intKey1 < intKey2 )
4241 return 1
4242
4243 else if( intKey1 > intKey2 )
4244 return -1
4245 return 0
4246}
4247
4248
4249getter( Array:arrayStatus, intItem, &intRank = 0 )
4250{
4251 new strOut[ 32 ], strTemp[ 2 ][ 10 ], intVal
4252
4253 ArrayGetString( arrayStatus, intItem, strOut, charsmax( strOut ) );
4254
4255 parse( strOut, strTemp[ 0 ], charsmax( strTemp[] ), strTemp[ 1 ], charsmax( strTemp[] ))
4256 intRank = str_to_num( strTemp[ 0 ] )
4257 intVal = str_to_num( strTemp[ 1 ] )
4258 return intVal
4259}
4260
4261stock szName( const index )
4262{
4263 static g_szName[ 32 ]; get_user_name( index, g_szName, charsmax( g_szName ) );
4264
4265 return g_szName;
4266}
4267
4268stock szAuth( const index )
4269{
4270 static g_szAuthID[ 35 ]; get_user_authid( index, g_szAuthID, charsmax( g_szAuthID ) );
4271
4272 return g_szAuthID;
4273}
4274
4275stock szAddress( const index )
4276{
4277 static g_szAddress[ 22 ]; get_user_ip( index, g_szAddress, charsmax( g_szAddress ), 1 );
4278
4279 return g_szAddress;
4280}
4281
4282/*stock GetTeamColor( CsTeams:iTeam )
4283{
4284 switch ( iTeam )
4285 {
4286 case CS_TEAM_CT: return BLUE;
4287
4288 case CS_TEAM_T: return RED;
4289
4290 case CS_TEAM_SPECTATOR: return GREY;
4291 }
4292
4293 return GREEN;
4294}*/
4295
4296stock bool:is_str_type(const string[], StrType:flags, const exceptions[] = "")
4297{
4298 new c, i, tmp[2];
4299 while(is_char(c = string[i++]))
4300 {
4301 if(flags & STRTYPE_NUM && isdigit(c)
4302 || flags & STRTYPE_ALPHA && isalpha(c)
4303 || flags & STRTYPE_SPACE && isspace(c))
4304 {
4305 continue;
4306 }
4307
4308 tmp[0] = c;
4309 if(contain(exceptions, tmp) != -1)
4310 {
4311 continue;
4312 }
4313
4314 return false;
4315 }
4316
4317 return (i > 1);
4318}
4319
4320stock GetOnlineMemebers( intGang )
4321{
4322 new intCount;
4323 new Players[ 32 ], iNum, iPlayer;
4324
4325 get_players( Players, iNum );
4326
4327 for ( new i; i < iNum; i++ )
4328 {
4329 iPlayer = Players[ i ];
4330
4331 if ( intGang != g_iGang[ iPlayer ] )
4332 continue;
4333 intCount++;
4334 }
4335 return intCount;
4336}
4337
4338
4339stock GetWinner( intId )
4340{
4341 new plCount = GetCurrectAmount( intId , BLACKJACK_PLAYER )
4342 new svCount = GetCurrectAmount( intId , BLACKJACK_SERVER )
4343 new plCards = CmdCardsAmount( intId, BLACKJACK_PLAYER );
4344 new swCards = CmdCardsAmount( intId, BLACKJACK_SERVER );
4345
4346 if(plCount > 21)
4347 { // Player is dead?
4348 if(svCount > 21) // Server also dead?
4349 return 5 // Tie
4350 return 0 // Server won
4351 }
4352 else if(svCount > 21) // Server is dead?
4353 return 1
4354 // ---------------------------------------------------
4355 if(plCards > 4)
4356 { // 5cards = auto win
4357 if(swCards > 4) // Server also?
4358 return 5 // Tie
4359 return 1
4360 }
4361 else if(plCards > 4)
4362 return 0
4363 // ---------------------------------------------------
4364 if( plCount == svCount )
4365 return 5 // Tie!
4366 else if(plCount > svCount)
4367 return 1 // Player won
4368 else
4369 return 0 // Server won
4370 return 5
4371}
4372
4373stock CmdGiveCards( intId, intCards, intPlayer )
4374{
4375 new intChoosenCard;
4376
4377 for( new i = 0; i < intCards; i++ )
4378 {
4379 intChoosenCard = random_num( CARD_ACE, CARD_KING );
4380
4381 g_iPlayer[ intId ][ intChoosenCard ][ intPlayer ]++;
4382 }
4383}
4384
4385stock GetCurrectAmount( intId, intPlayer )
4386{
4387 new intSum = 0, intAce;
4388
4389 for( new i = 0; i < MAX_CARD_KINDS; i++ )
4390 {
4391 if( g_iPlayer[ intId ][ i ][ intPlayer ] > 0 )
4392 {
4393 if( i == CARD_ACE )
4394 {
4395 intAce++;
4396 }
4397 else intSum += cardCount[ i ];
4398 }
4399 }
4400 for( new intCounter = 0; intCounter < intAce; intCounter++ )
4401 {
4402 if( intSum < 12 )
4403 {
4404 intSum += 11;
4405 }
4406 else
4407 {
4408 intSum += 1;
4409 }
4410 }
4411 return intSum
4412}
4413
4414stock CmdCardsAmount( intId, intPlayer )
4415{
4416 new intCards = 0;
4417
4418 for( new i = 0; i < MAX_CARD_KINDS; i++ )
4419 {
4420 if( g_iPlayer[ intId ][ i ][ intPlayer ] > 0 )
4421 intCards++;
4422 }
4423 return intCards;
4424}
4425
4426stock ResetGame( intId )
4427{
4428 g_Player [ intId ][ PLAYER_GAME ] = false;
4429
4430 for( new i = 0; i < MAX_CARD_KINDS; i++ )
4431 {
4432 g_iPlayer[ intId ][ i ][ BLACKJACK_PLAYER ] = 0;
4433 g_iPlayer[ intId ][ i ][ BLACKJACK_SERVER ] = 0;
4434 }
4435}
4436
4437
4438stock MenuKey(menu, item)
4439{
4440 new szData[6], szxName[64];
4441 new intaccess, callback;
4442 menu_item_getinfo(menu, item, intaccess, szData, charsmax(szData), szxName, charsmax( szxName ), callback);
4443
4444 menu_destroy(menu)
4445
4446 return str_to_num(szData);
4447}
4448
4449stock GetUserAuth( const index, output[], len )
4450{
4451 if ( IsValidAuthid( szAuth( index ) ) )
4452 get_user_authid( index, output, len );
4453
4454 else get_user_ip( index, output, len, 1 )
4455}
4456
4457stock bool: is_auth_online( Auth[] )
4458{
4459 static Players[ 32 ], iNum, iPlayer, szAuthID[ 35 ];
4460
4461 get_players( Players, iNum, "ch" );
4462
4463 for ( new i; i < iNum; i++ )
4464 {
4465 iPlayer = Players[ i ];
4466
4467 if ( IsValidAuthid( Auth ) )
4468 formatex( szAuthID, charsmax( szAuthID ), szAuth( iPlayer ) );
4469
4470 else formatex( szAuthID, charsmax( szAuthID ), szAddress( iPlayer ) );
4471
4472 if ( equali( Auth, szAuthID ) )
4473 return true;
4474 }
4475
4476 return false;
4477}