· 6 years ago · Aug 24, 2019, 09:38 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <hamsandwich>
4#include <celltrie>
5#include <sqlx>
6#include <colorchat>
7
8#define PLUGIN "Gangi JailBreak"
9#define VERSION "1.0"
10#define AUTHOR "Cypis // JailBreak Team"
11
12#define MAX_PEOPLE 8
13#define KWOTA_RESPEKTU 500
14#define MIN_BUNTY 50
15#define MIN_ZYCZENIA 30
16
17#define PREFIX "[Gangi]^1"
18
19#define ForPlayers(%1) for(new %1 = 1; %1 <= 32; %1++)
20
21enum GANG_FLAGS{
22 USER = 0,
23 ADMINS
24}
25
26new const user_ranga[][] = {"", " \r(Zalozyciel)"};
27new GANG_FLAGS:user_flags[33];
28
29new user_gang[33],
30bool:user_wczytalo[33],
31bool:create_gang[33],
32nazwa_gracza[33][35],
33Handle:info,
34gszQuery[512+256],
35Trie:gnGangName,
36Trie:gnGangIle,
37player_id,
38ilosc2[33],
39name[33];
40
41new user_zyczenia[33], user_bunty[33], bool:nielicz;
42
43//TOP 15 Gangow
44
45#define ForArray(%1,%2) for(new %1 = 0; %1 < sizeof %2; %1++)
46
47#define MAX_CHARS 33
48
49const topGangsDisplayed = 15;
50
51new g_sBuffer[2048];
52
53new topGangsBunty[topGangsDisplayed],
54topGangsZyczenia[topGangsDisplayed];
55///////
56
57native get_respekt(id);
58native set_respekt(id, wartosc);
59
60public plugin_init()
61{
62 register_plugin(PLUGIN, VERSION, AUTHOR);
63
64 register_clcmd("say /gang","menuGang");
65 register_clcmd("say /gangi","loadTopGangs");
66 register_clcmd("say /przelej","menuTransfer");
67 register_clcmd("say /przelew","menuTransfer");
68 register_clcmd("say /przekaz","menuTransfer");
69 register_clcmd("say /rankg","RankStats");
70 register_clcmd("say /topg","Top15");
71
72 register_clcmd("nazwa_gangu", "CreateNameGang");
73 register_clcmd("ile_przelac","pobierz");
74
75 RegisterHam(Ham_Killed, "player", "SmiercGraczaPost", 1);
76 register_message(get_user_msgid("SayText"),"handleSayText");
77}
78
79public plugin_cfg()
80{
81 new pcvar_host, pcvar_user, pcvar_pass, pcvar_db;
82 new szHost[32], szUser[32], szPass[32], szDb[32];
83
84 pcvar_host = register_cvar("gangi_host", "sql.pukawka.pl");
85 pcvar_user = register_cvar("gangi_user", "734069");
86 pcvar_pass = register_cvar("gangi_pass", "yan44YaB984PSLpK9MRj");
87 pcvar_db = register_cvar("gangi_db", "734069_gangi");
88
89 get_pcvar_string(pcvar_host, szHost, 31);
90 get_pcvar_string(pcvar_user, szUser, 31);
91 get_pcvar_string(pcvar_pass, szPass, 31);
92 get_pcvar_string(pcvar_db, szDb, 31);
93
94 info = SQL_MakeDbTuple(szHost, szUser, szPass, szDb);
95
96 new error, szError[128];
97 new Handle:hConn = SQL_Connect(info, error, szError, 127);
98 if(error)
99 {
100 log_amx("[Gangi] Error: %s", szError);
101 return;
102 }
103
104 gnGangName = TrieCreate();
105 gnGangIle = TrieCreate();
106
107 new Handle:query;
108
109 SQL_FormatQuery("CREATE TABLE IF NOT EXISTS `gang_core` (\
110 `idGang` int(10) NOT NULL AUTO_INCREMENT,\
111 `NameGang` varchar(32) NOT NULL,\
112 `Ilosc` int(10) NOT NULL DEFAULT 1,\
113 `BuntyG` int(10) NOT NULL DEFAULT 0,\
114 `ZyczeniaG` int(10) NOT NULL DEFAULT 0, PRIMARY KEY (`idGang`))")
115 query = SQL_PrepareQuery(hConn, gszQuery)
116
117 SQL_Execute(query)
118 SQL_FreeHandle(query);
119
120 SQL_FormatQuery("CREATE TABLE IF NOT EXISTS `gang_czlonkowie` (\
121 `idPlayer` int(10) NOT NULL DEFAULT 1,\
122 `NamePlayer` varchar(32) NOT NULL,\
123 `Bunty` int(10) NOT NULL DEFAULT 0,\
124 `Zyczenia` int(10) NOT NULL DEFAULT 0,\
125 `Flaga` int(5) NOT NULL DEFAULT 0, PRIMARY KEY (`NamePlayer`));")
126 query = SQL_PrepareQuery(hConn, gszQuery);
127
128 SQL_Execute(query)
129 SQL_FreeHandle(query);
130
131 query = SQL_PrepareQuery(hConn,"SELECT * FROM `gang_core` WHERE 1");
132 if(!SQL_Execute(query))
133 {
134 SQL_QueryError(query, szError, 127);
135 log_amx("[Gangi] Nie mozna zaladowac Gangow (%s)", szError);
136 }
137 else if(SQL_NumResults(query))
138 {
139 new szNazwa[32], szInt[10];
140 while(SQL_MoreResults(query))
141 {
142 num_to_str(SQL_ReadResult(query, 0), szInt, 9);
143 SQL_ReadResult(query, 1, szNazwa, 31);
144
145 TrieSetCell(gnGangIle, szInt, SQL_ReadResult(query, 2));
146 TrieSetString(gnGangName, szInt, szNazwa);
147
148 SQL_NextRow(query);
149 }
150 SQL_FreeHandle(query);
151 }
152 SQL_FreeHandle(hConn);
153}
154
155public plugin_natives()
156{
157 register_native("gang_id","gang_id", 1)
158 register_native("gang_nazwa","pobierz_nazwe", 1)
159}
160
161public gang_id(id)
162{
163 return user_gang[id];
164}
165
166public pobierz_nazwe(id,szReturn[],iLen)
167{
168 new szInt[10], szPrefix[12];
169 num_to_str(user_gang[id], szInt, 9);
170 TrieGetString(gnGangName, szInt, szPrefix, 11);
171 param_convert(2);
172 if(user_gang[id])
173 {
174 formatex(szReturn,iLen,szPrefix);
175 }
176 else
177 {
178 formatex(szReturn,iLen,"Brak");
179 }
180}
181
182public menuTransfer(index)
183{
184 if(!user_gang[index])
185 {
186 ColorChat(index, GREEN, "%s Nie jestes w zadnym Gangu! Nie mozesz przelewac Respektu!", PREFIX);
187 return PLUGIN_HANDLED;
188 }
189
190 new menuIndex = menu_create("Wybierz Gracza:", "Przelew_Gracza_handler"),
191 userName[33],
192 userIndex[3];
193
194 ForPlayers(i){
195 if(!is_user_connected(i) || i == index || user_gang[i] != user_gang[index])
196 {
197 continue;
198 }
199
200 get_user_name(i, userName, charsmax(userName));
201
202 formatex(userIndex, charsmax(userIndex), "%i", i);
203
204 menu_additem(menuIndex, userName, userIndex);
205 }
206
207 menu_display(index, menuIndex);
208
209 return PLUGIN_HANDLED;
210}
211
212public Przelew_Gracza_handler(index, menuIndex, item)
213{
214 if(item == MENU_EXIT)
215 {
216 menu_destroy(menuIndex);
217
218 return PLUGIN_HANDLED;
219 }
220
221 new menuData[2],
222 blank,
223 target;
224
225 menu_item_getinfo(menuIndex, item, blank, menuData, charsmax(menuData), _, _, blank);
226
227 menu_destroy(menuIndex);
228
229 target = str_to_num(menuData);
230
231 if(!is_user_connected(target))
232 {
233 return PLUGIN_HANDLED;
234 }
235
236 console_cmd(index, "messagemode ile_przelac");
237
238 return PLUGIN_HANDLED;
239}
240
241public pobierz(id)
242{
243 new text[192]
244 read_argv(1,text,191)
245 format(ilosc2, charsmax(ilosc2), "%s", text);
246 przelej(id)
247}
248
249public przelej(id)
250{
251 new name2[33];
252 get_user_name(id, name2, 32);
253
254 if(get_respekt(id) >= str_to_num(ilosc2) > 0)
255 {
256 set_respekt(player_id, get_respekt(player_id) + str_to_num(ilosc2))
257 set_respekt(id, get_respekt(id) - str_to_num(ilosc2))
258 ColorChat(0, GREEN, "%s Gracz^4 %s^1 przelal^4 %i Respektu^1 Graczowi^4 %s",PREFIX,name2,str_to_num(ilosc2),name);
259 log_to_file("addons/amxmodx/logs/jb_logi/[Respekt]_Przelany_Respekt.txt", "Przelewajacy: [%s] | Odbiorca: [%s] | Respekt: [%d]",name2,name,str_to_num(ilosc2));
260 }
261 else if(str_to_num(ilosc2) > get_respekt(id))
262 {
263 ColorChat(id, GREEN, "%s Nie masz tyle Respektu!", PREFIX);
264 }
265
266 else if(get_respekt(id) >= str_to_num(ilosc2) <= 0)
267 {
268 ColorChat(id, GREEN, "%s Bledna wartosc!", PREFIX);
269 }
270}
271
272public menuGang(id)
273{
274 if(!user_wczytalo[id] || create_gang[id])
275 {
276 return;
277 }
278 if(get_user_team(id) == 1)
279 {
280 new menu = menu_create("Menu Gangu:", "Handel_Gang");
281 if(!user_gang[id])
282 {
283 menu_additem(menu, "Stworz Gang^n", "0");
284 menu_additem(menu, "Ranking Buntow i Zyczen", "5");
285 menu_additem(menu, "TOP 15 Buntow i Zyczen", "6");
286 }
287 else
288 {
289 if(user_flags[id] == ADMINS && user_gang[id])
290 {
291 menu_additem(menu, "Dodaj czlonka do Gangu", "1");
292 menu_additem(menu, "Czlonkowie Gangu", "2");
293 menu_additem(menu, "Wyrzuc czlonka z Gangu", "3");
294 menu_additem(menu, "Przelej Respekt Czlonkowi Gangu", "4");
295 menu_additem(menu, "Ranking Buntow i Zyczen", "5");
296 menu_additem(menu, "TOP 15 Buntow i Zyczen^n^n", "6");
297 menu_additem(menu, "\yRozwiaz Gang", "7");
298 }
299 else
300 {
301 menu_additem(menu, "Czlonkowie Gangu", "2");
302 menu_additem(menu, "Przelej Respekt Czlonkowi Gangu", "4");
303 menu_additem(menu, "Ranking Buntow i Zyczen", "5");
304 menu_additem(menu, "TOP 15 Buntow i Zyczen^n^n", "6");
305 menu_additem(menu, "\yOpusc Gang", "8");
306 }
307 }
308 menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
309 menu_display(id, menu);
310 }
311 else
312 {
313 ColorChat(id, RED, "%s To menu jest dostepne tylko dla Wiezniow.", PREFIX)
314 }
315}
316
317public Handel_Gang(id, menu, item)
318{
319 if(item == MENU_EXIT)
320 return;
321
322 new szItem[3], id2;
323 menu_item_getinfo(menu, item, id2, szItem, 2, _, _, id2);
324 switch(str_to_num(szItem))
325 {
326 case 0:
327 {
328 menuCreate(id);
329 }
330 case 1:
331 {
332 new szInt[3], menu2 = menu_create("Wyslij zaproszenie do Gangu:", "Handel_ZaproszenieDoGangu");
333 ForPlayers(i){
334 if(!is_user_connected(i) || user_gang[i] || is_user_hltv(i))
335 continue;
336
337 num_to_str(i, szInt, 2);
338 menu_additem(menu2, nazwa_gracza[i], szInt);
339 }
340 menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz");
341 menu_display(id, menu2);
342 }
343 case 2:
344 {
345 new data[1];
346 data[0] = id;
347 SQL_FormatQuery("SELECT `NamePlayer`,`Flaga` FROM `gang_czlonkowie` WHERE `idPlayer` = '%i';", user_gang[id]);
348 SQL_ThreadQuery(info, "PokazCzlonkaGangu", gszQuery, data, 1);
349 }
350 case 3:
351 {
352 new data[1];
353 data[0] = id;
354 SQL_FormatQuery("SELECT `NamePlayer` FROM `gang_czlonkowie` WHERE `idPlayer` = '%i' AND NOT `Flaga` = '%d'", user_gang[id], _:ADMINS);
355 SQL_ThreadQuery(info, "UsunCzlonkaGangu", gszQuery, data, 1);
356 }
357 case 4:
358 {
359 menuTransfer(id);
360 }
361 case 5:
362 {
363 RankStats(id);
364 }
365 case 6:
366 {
367 Top15(id);
368 }
369 case 7:
370 {
371
372 new menu2 = menu_create("Czy napewno chcesz opuscic swoj Gang?", "Handel_OpuscGang");
373 menu_additem(menu2, "\yTak");
374 menu_additem(menu2, "Nie");
375 menu_display(id, menu2);
376 }
377 case 8:
378 {
379 new menu2 = menu_create("Czy napewno chcesz rozwiazac swoj Gang?", "Handel_UsunGang");
380 menu_additem(menu2, "\yTak");
381 menu_additem(menu2, "Nie");
382 menu_display(id, menu2);
383 }
384 }
385}
386
387public menuCreate(id)
388{
389 if(!user_wczytalo[id] || create_gang[id])
390 {
391 return;
392 }
393 if(!user_gang[id])
394 {
395 new menu = menu_create("Menu tworzenia Gangu:", "Handel_createGang");
396 menu_additem(menu, "Stworz Gang za 50 (Zyczen)", "0");
397 menu_additem(menu, "Stworz Gang za 50 (Buntow)", "1");
398 menu_additem(menu, "Stworz Gang za 500 (Respektu)", "2");
399
400 menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
401 menu_display(id, menu);
402 }
403 else
404 {
405 ColorChat(id, RED, "%s Posiadasz juz Gang", PREFIX)
406 }
407}
408
409public Handel_createGang(id, menu, item)
410{
411 if(item == MENU_EXIT)
412 return;
413
414 new szItem[3], id2;
415 menu_item_getinfo(menu, item, id2, szItem, 2, _, _, id2);
416 switch(str_to_num(szItem))
417 {
418 case 0:
419 {
420 if(!WymaganiaDoGanguZyczenia(id))
421 return;
422
423 client_cmd(id, "messagemode nazwa_gangu");
424 }
425 case 1:
426 {
427 if(!WymaganiaDoGanguBunty(id))
428 return;
429
430 client_cmd(id, "messagemode nazwa_gangu");
431 }
432 case 2:
433 {
434 if(!WymaganiaDoGanguRespekt(id))
435 return;
436
437 client_cmd(id, "messagemode nazwa_gangu");
438 }
439 }
440}
441
442public Handel_OpuscGang(id, menu, item)
443{
444 if(item == MENU_EXIT || item == 1)
445 return;
446
447 UstawIloscGangu(user_gang[id], -1);
448
449 user_gang[id] = 0;
450 user_flags[id] = USER;
451 topGangsBunty[id] = 0;
452 topGangsZyczenia[id] = 0;
453
454 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `idPlayer` = '0', `Flaga` = '0' WHERE `NamePlayer` = '%s';", nazwa_gracza[id]);
455 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
456
457 SQL_FormatQuery("UPDATE `gang_core` SET `BuntyG` = '0', `ZyczeniaG` = '0' WHERE `idGang` = '%i';", user_gang[id]);
458 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
459
460 ColorChat(id, GREEN, "%s Opusciles swoj Gang.",PREFIX);
461
462 new szInt[10], nazwa_gangu[12];
463 num_to_str(user_gang[id], szInt, 9);
464 TrieGetString(gnGangName, szInt, nazwa_gangu, 11);
465
466 new nazwa_gracza[33],sid_gracza[33],ip_gracza[33];
467 get_user_name(id,nazwa_gracza,charsmax(nazwa_gracza));
468 get_user_authid(id, sid_gracza, charsmax(sid_gracza));
469 get_user_ip(id, ip_gracza, charsmax(ip_gracza), 1);
470 log_to_file("addons/amxmodx/logs/jb_logi/[Gangi]_Opuszczenie_Gangu.txt", "Gang: [%s] | Opuscil: [%s] [%s] [%s]", nazwa_gangu, nazwa_gracza,sid_gracza,ip_gracza);
471}
472
473public Handel_UsunGang(id, menu, item)
474{
475 if(item == MENU_EXIT || item == 1)
476 return;
477
478 ForPlayers(i){
479 if(user_gang[id] == user_gang[i] && id != i)
480 {
481 user_gang[i] = 0;
482 user_flags[i] = USER;
483 topGangsZyczenia[i] = 0;
484 topGangsBunty[i] = 0;
485 }
486 }
487 new szInt[10], nazwa_gangu[12];
488 num_to_str(user_gang[id], szInt, 9);
489 TrieGetString(gnGangName, szInt, nazwa_gangu, 11);
490
491 new nazwa_gracza[33],sid_gracza[33],ip_gracza[33];
492 get_user_name(id,nazwa_gracza,charsmax(nazwa_gracza));
493 get_user_authid(id, sid_gracza, charsmax(sid_gracza));
494 get_user_ip(id, ip_gracza, charsmax(ip_gracza), 1);
495 log_to_file("addons/amxmodx/logs/jb_logi/[Gangi]_Rozwiazane_Gangi.txt", "Rozwiazany Gang: [%s] | Przez: [%s] [%s] [%s]", nazwa_gangu, nazwa_gracza,sid_gracza,ip_gracza);
496
497 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `idPlayer` = '0', `Flaga` = '0' WHERE `idPlayer` = '%i';", user_gang[id]);
498 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
499
500 SQL_FormatQuery("DELETE FROM `gang_core` WHERE `idGang` = '%i';", user_gang[id]);
501 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
502
503 TrieDeleteKey(gnGangIle, szInt); //USUNIECIE ILOSCI LUDZI Z GANGU
504
505 user_gang[id] = 0;
506 user_flags[id] = USER;
507 topGangsBunty[id] = 0;
508 topGangsZyczenia[id] = 0;
509
510 ColorChat(id, GREEN, "%s Rozwiazales swoj Gang.",PREFIX);
511}
512
513//RANK STATS
514public RankStats(id)
515{
516 new menu = menu_create("\d|> Ranking JailBreak^n", "Handel_RankStats");
517 menu_additem(menu, "\rTwoj Ranking Buntow");
518 menu_additem(menu, "\yTwoj Ranking Zyczen");
519
520 menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
521 menu_display(id, menu);
522}
523
524public Handel_RankStats(id, menu, item)
525{
526 if(item == MENU_EXIT)
527 return;
528
529 new data[2];
530 data[0] = id;
531 data[1] = item;
532
533 SQL_FormatQuery("SELECT COUNT(*) FROM `gang_czlonkowie` WHERE `%s` >= %d;", item? "Zyczenia": "Bunty", item? user_zyczenia[id]: user_bunty[id]);
534 SQL_ThreadQuery(info, "PobierzRank", gszQuery, data, 2);
535}
536
537public PobierzRank(failstate, Handle:query, error[], errnum, data[], size){
538 if(failstate != TQUERY_SUCCESS){
539 log_amx("<Query> Error: %s", error);
540 return;
541 }
542 new id = data[0];
543 if(!is_user_connected(id) && !is_user_connecting(id))
544 return;
545
546 ColorChat(id, GREEN, "^x04[RANK]^x01 Masz ^x03%i^x01 %s zajmujesz miejsce ^x03%i", data[1]? user_zyczenia[id]: user_bunty[id], data[1]? "zyczen": "buntow", SQL_ReadResult(query, 0));
547}
548
549//TOP 15
550public Top15(id)
551{
552 new menu = menu_create("\d|> Top 15 JailBreak^n", "Handel_Top");
553 menu_additem(menu, "Top 15 Buntow");
554 menu_additem(menu, "Top 15 Zyczen");
555
556 menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
557 menu_display(id, menu);
558}
559
560public Handel_Top(id, menu, item)
561{
562 if(item == MENU_EXIT)
563 return;
564
565 new data[2];
566 data[0] = id;
567 data[1] = item;
568
569 SQL_FormatQuery("SELECT * FROM `gang_czlonkowie` ORDER BY `%s` DESC LIMIT 15", item? "Zyczenia": "Bunty");
570 SQL_ThreadQuery(info, "PobierzTop", gszQuery, data, 2);
571}
572
573public PobierzTop(failstate, Handle:query, error[], errnum, data[], size){
574 if(failstate != TQUERY_SUCCESS){
575 log_amx("<Query> Error: %s", error);
576 return;
577 }
578 new id = data[0];
579 if(!is_user_connected(id) && !is_user_connecting(id))
580 return;
581
582 if(SQL_NumRows(query))
583 {
584 new buffer[2048], szName[41], iLen=0, i=0;
585 iLen = copy(buffer[iLen], 2047-iLen, "<body bgcolor=#FFFFFF><table width=100%% cellpadding=2 cellspacing=0 border=0>");
586 iLen += formatex(buffer[iLen], 2047-iLen, "<tr align=center bgcolor=#52697B><th width=5%%> # <th width=35%% align=left> Gracz: <th width=20%%> Najwiecej %s", (data[1]? "Zyczen": "Buntów"));
587
588 while(SQL_MoreResults(query))
589 {
590 SQL_ReadResult(query, 1, szName, 40);
591 replace_all(szName, 40, "<", "<");
592 replace_all(szName, 40, ">", ">");
593
594 iLen += formatex(buffer[iLen], 2047-iLen, "<tr align=center%s><td> %i. <td align=left> %s <td> %i", ((i%2)==0)? "" :" bgcolor=#A4BED6", i+1, szName, SQL_ReadResult(query, (data[1]? 3: 2)));
595
596 i++;
597 SQL_NextRow(query);
598 }
599
600 iLen += copy(buffer[iLen], 2047-iLen, "</table></body>");
601 show_motd(id, buffer, "Top 15")
602 }
603}
604
605public Handel_ZaproszenieDoGangu(id, menu, item)
606{
607 if(item == MENU_EXIT)
608 return;
609
610 if(PobierzIloscGangu(user_gang[id]) >= MAX_PEOPLE)
611 {
612 ColorChat(id, GREEN, "%s Masz za duzo czlonkow w Gangu!^4 (%d)",PREFIX, MAX_PEOPLE);
613 return;
614 }
615
616 new szInt[3], id2;
617 menu_item_getinfo(menu, item, id2, szInt, 2, _, _, id2);
618
619 id2 = str_to_num(szInt);
620 ColorChat(id, GREEN, "%s Wyslales Graczowi^4 %s^1 zaproszenie do swojego Gangu,", PREFIX, nazwa_gracza[id2]);
621
622 new szTemp[128], menu2;
623 formatex(szTemp, 127, "%s zaprosil Cie, abys dolaczyl do jego Gangu.", nazwa_gracza[id]);
624 menu2 = menu_create(szTemp, "Handel_DostalZaproszenie");
625
626 num_to_str(id, szInt, 2);
627 menu_additem(menu2, "Akceptuj", szInt);
628 menu_additem(menu2, "Odrzuc", szInt);
629
630 menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz");
631 menu_display(id2, menu2);
632
633 ColorChat(id2, GREEN, "%s Gracz^4 %s^1 wyslal Tobie zaproszenie do swojego Gangu!",PREFIX, nazwa_gracza[id]);
634}
635
636public Handel_DostalZaproszenie(id, menu, item)
637{
638 if(item == MENU_EXIT)
639 return;
640
641 new szInt[3], id2;
642 menu_item_getinfo(menu, item, id2, szInt, 2, _, _, id2);
643
644 id2 = str_to_num(szInt);
645 if(PobierzIloscGangu(user_gang[id2]) >= MAX_PEOPLE)
646 return;
647
648 ColorChat(id2, GREEN, "%s Gracz %s %s do Gangu", PREFIX, nazwa_gracza[id], item? "nie przyjal Twojego zaproszenia": "przyjal Twoje zaproszenie");
649
650 if(item == 1)
651 return;
652
653 new szInt2[10], nazwa_gangu[12];
654 num_to_str(user_gang[id], szInt2, 9);
655 TrieGetString(gnGangName, szInt2, nazwa_gangu, 11);
656
657 new nazwa_gracza[33];
658 get_user_name(id,nazwa_gracza,charsmax(nazwa_gracza));
659 log_to_file("addons/amxmodx/logs/jb_logi/[Gangi]_Dodani_Czlonkowie.txt", "Gang: [%s] | Dodany: [%s]", nazwa_gangu, nazwa_gracza);
660
661 UstawIloscGangu(user_gang[id2], 1);
662 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `idPlayer` = '%i' WHERE `NamePlayer` = '%s';", user_gang[id2], nazwa_gracza[id]);
663 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
664 user_gang[id] = user_gang[id2];
665}
666
667public PokazCzlonkaGangu(failstate, Handle:query, error[], errnum, data[], size){
668 if(failstate != TQUERY_SUCCESS){
669 log_amx("<Query> Error: %s", error);
670 return;
671 }
672 new id = data[0];
673 if(!is_user_connected(id) && !is_user_connecting(id))
674 return;
675
676 if(SQL_NumRows(query))
677 {
678 new szName[64], menu = menu_create("Czlonkowie Gangu:", "Handel_CzlonkowieGangu");
679 while(SQL_MoreResults(query))
680 {
681 SQL_ReadResult(query, 0, szName, 63);
682 add(szName, 63, user_ranga[SQL_ReadResult(query, 1)]);
683
684 menu_additem(menu, szName);
685 SQL_NextRow(query);
686 }
687 menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
688 menu_display(id, menu);
689 }
690}
691
692public Handel_CzlonkowieGangu(id, menu, item)
693{
694 if(item == MENU_EXIT)
695 return;
696
697 menu_display(id, menu, item/7);
698}
699
700public UsunCzlonkaGangu(failstate, Handle:query, error[], errnum, data[], size){
701 if(failstate != TQUERY_SUCCESS){
702 log_amx("<Query> Error: %s", error);
703 return;
704 }
705 new id = data[0];
706 if(!is_user_connected(id) && !is_user_connecting(id))
707 return;
708
709 if(SQL_NumRows(query))
710 {
711 new szName[32], menu = menu_create("Wyrzuc Czlonka z Gangu:", "Handel_UsunZGangu");
712 while(SQL_MoreResults(query))
713 {
714 SQL_ReadResult(query, 0, szName, 31);
715 menu_additem(menu, szName, szName);
716 SQL_NextRow(query);
717 }
718 menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
719 menu_display(id, menu);
720 }
721}
722
723public Handel_UsunZGangu(id, menu, item)
724{
725 if(item == MENU_EXIT)
726 return;
727
728 new szName[32], id2;
729 menu_item_getinfo(menu, item, id2, szName, 32, _, _, id2);
730
731 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `idPlayer` = '0', `Flaga` = '%d' WHERE `NamePlayer` = '%s';", _:USER, szName);////
732 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
733
734 UstawIloscGangu(user_gang[id], -1);
735
736 id2 = get_user_index(szName);////
737 if(is_user_connected(id2))
738 {
739 user_gang[id2] = 0;
740 user_flags[id2] = USER;
741 }
742
743 ColorChat(id, GREEN, "%s Wyrzuciles Czlonka^4 %s^1 z Gangu.", PREFIX, szName);
744
745 new szInt[10], nazwa_gangu[12];
746 num_to_str(user_gang[id], szInt, 9);
747 TrieGetString(gnGangName, szInt, nazwa_gangu, 11);
748
749 new nazwa_gracza[33];
750 get_user_name(id,nazwa_gracza,charsmax(nazwa_gracza));
751 log_to_file("addons/amxmodx/logs/jb_logi/[Gangi]_Wyrzuceni_Czlonkowie.txt", "Gang: [%s] | Wyrzucony: [%s]", nazwa_gangu, nazwa_gracza);
752
753}
754
755public client_putinserver(id)
756{
757 if(is_user_hltv(id))
758 return;
759
760 create_gang[id] = false;
761 user_wczytalo[id] = false;
762 user_gang[id] = 0;
763 user_flags[id] = USER;
764 user_bunty[id] = 0;
765 user_zyczenia[id] = 0;
766 topGangsZyczenia[id] = 0;
767 topGangsBunty[id] = 0;
768
769 get_user_name(id, nazwa_gracza[id], 34);
770 replace_all(nazwa_gracza[id], 34, "'", "\'");
771 replace_all(nazwa_gracza[id], 34, "`", "\`");
772
773 new data[1];
774 data[0] = id;
775
776 SQL_FormatQuery("SELECT * FROM `gang_czlonkowie` WHERE `NamePlayer` = '%s';", nazwa_gracza[id]);
777 SQL_ThreadQuery(info, "PobierzGang", gszQuery, data, 1);
778
779 SQL_FormatQuery("SELECT * FROM `gang_core` WHERE `idGang` = '%s';", user_gang[id]);
780 SQL_ThreadQuery(info, "PobierzGangS", gszQuery, data, 1);
781}
782
783public PobierzGang(failstate, Handle:query, error[], errnum, data[], size)
784{
785 if(failstate != TQUERY_SUCCESS){
786 log_amx("<Query> Error: %s", error);
787 return;
788 }
789 new id = data[0];
790 if(!is_user_connected(id) && !is_user_connecting(id))
791 return;
792
793 if(SQL_NumRows(query))
794 {
795 user_gang[id] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "idPlayer")); //id_gangu
796 user_flags[id] = GANG_FLAGS:SQL_ReadResult(query, SQL_FieldNameToNum(query, "Flaga")); //flaga
797 user_bunty[id] += SQL_ReadResult(query, SQL_FieldNameToNum(query, "Bunty")); //zabicia
798 user_zyczenia[id] += SQL_ReadResult(query, SQL_FieldNameToNum(query, "Zyczenia")); //zyczenia
799 }
800 else
801 {
802 SQL_FormatQuery("INSERT INTO `gang_czlonkowie` (`NamePlayer`) VALUES ('%s');", nazwa_gracza[id]);
803 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
804 }
805 user_wczytalo[id] = true;
806}
807
808public PobierzGangS(failstate, Handle:query, error[], errnum, data[], size)
809{
810 if(failstate != TQUERY_SUCCESS){
811 log_amx("<Query> Error: %s", error);
812 return;
813 }
814 new id = data[0];
815 if(!is_user_connected(id) && !is_user_connecting(id))
816 return;
817
818 new StrItem[10], ile;
819 num_to_str(user_gang[id], StrItem, 9);
820 TrieGetCell(gnGangIle, StrItem, ile);
821
822 if(SQL_NumRows(query))
823 {
824 user_gang[id] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "idGang")); //id_gangu
825
826 topGangsZyczenia[id] += SQL_ReadResult(query, SQL_FieldNameToNum(query, "ZyczeniaG")); //zyczenia gangu
827 topGangsBunty[id] += SQL_ReadResult(query, SQL_FieldNameToNum(query, "BuntyG")); //bunty gangu
828 ile += SQL_ReadResult(query, SQL_FieldNameToNum(query, "Ilosc")); //Ilosc osob w Gangu
829 }
830 else
831 {
832 SQL_FormatQuery("INSERT INTO `gang_core` (`idGang`) VALUES ('%i');", user_gang[id]);
833 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
834 }
835 user_wczytalo[id] = true;
836}
837
838public CreateNameGang(id)
839{
840 if(get_user_team(id) != 1 || !user_wczytalo[id])
841 return PLUGIN_HANDLED;
842
843 if(!WymaganiaDoGanguRespekt(id))
844 return PLUGIN_HANDLED;
845
846 if(create_gang[id])
847 {
848 ColorChat(id, GREEN, "%s Poczekaj, trwa tworzenie twojego Gangu.", PREFIX);
849 return PLUGIN_HANDLED;
850 }
851
852 new szArgs[32];
853 read_args(szArgs, charsmax(szArgs));
854 remove_quotes(szArgs);
855
856 if(strlen(szArgs) > 10)
857 {
858 ColorChat(id, GREEN, "%s Za dluga nazwa Gangu! Maksymalnie 15 liter!", PREFIX);
859 return PLUGIN_HANDLED;
860 }
861 if(strfind(szArgs, "'") != -1 || strfind(szArgs, "`") != -1)
862 {
863 ColorChat(id, GREEN, "%s Nie mozesz uzyc niedozwolonych znakow", PREFIX);
864 return PLUGIN_HANDLED;
865 }
866
867 new data[11];
868 copy(data[1], 10, szArgs);
869 data[0] = id;
870
871 SQL_FormatQuery("SELECT `idGang` FROM `gang_core` WHERE `NameGang` = '%s';", szArgs);
872 SQL_ThreadQuery(info, "SprawdzenieDostepnosci", gszQuery, data, 11);
873
874 create_gang[id] = true;
875 return PLUGIN_HANDLED;
876}
877
878public SprawdzenieDostepnosci(failstate, Handle:query, error[], errnum, data[], size){
879 if(failstate != TQUERY_SUCCESS){
880 log_amx("<Query> Error: %s", error);
881 return;
882 }
883 new id = data[0]
884 if(SQL_NumRows(query))
885 {
886 ColorChat(id, GREEN, "%s Gang z taka nazwa juz istnieje!", PREFIX);
887 create_gang[id] = false;
888 return;
889 }
890
891 set_respekt(id, get_respekt(id)-KWOTA_RESPEKTU);
892
893 ColorChat(id, GREEN, "%s Stworzyles Gang^x03 %s", PREFIX, data[1]);
894
895 new nazwa_gracza[33],sid_gracza[33],ip_gracza[33];
896 get_user_name(id,nazwa_gracza,charsmax(nazwa_gracza));
897 get_user_authid(id, sid_gracza, charsmax(sid_gracza));
898 get_user_ip(id, ip_gracza, charsmax(ip_gracza), 1);
899 log_amx("addons/amxmodx/logs/jb_logi/[Gangi]_Stworzone_Gangi.txt", "Stworzony Gang: [%s] | Zalozyciel: [%s] [%s] [%s]", data[1], nazwa_gracza,sid_gracza,ip_gracza);
900
901 SQL_FormatQuery("INSERT INTO `gang_core` (`NameGang`) VALUES ('%s');", data[1]);
902 SQL_ThreadQuery(info, "ZapiszDaneGang", gszQuery, data, 32);
903
904}
905
906public ZapiszDaneGang(failstate, Handle:query, error[], errnum, data[], size){
907 if(failstate != TQUERY_SUCCESS){
908 log_amx("<Query> Error: %s", error);
909 return;
910 }
911
912 SQL_FormatQuery("SELECT `idGang` FROM `gang_core` WHERE `NameGang` = '%s';", data[1]);
913 SQL_ThreadQuery(info, "PobierzGangID", gszQuery, data, 32);
914}
915
916public PobierzGangID(failstate, Handle:query, error[], errnum, data[], size){
917 if(failstate != TQUERY_SUCCESS){
918 log_amx("<Query> Error: %s", error);
919 return;
920 }
921 new id = data[0];
922 if(SQL_NumRows(query))
923 {
924 user_gang[id] = SQL_ReadResult(query, 0);
925 user_flags[id] = ADMINS;
926
927 new szInt[10];
928 num_to_str(user_gang[id], szInt, 9);
929 TrieSetCell(gnGangIle, szInt, 1);
930 TrieSetString(gnGangName, szInt, data[1]);
931
932 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `idPlayer` = '%i', `Flaga` = '%d' WHERE `NamePlayer` = '%s';", user_gang[id], _:ADMINS, nazwa_gracza[id]);
933 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
934 }
935 create_gang[id] = false;
936}
937
938public ZapiszDane(failstate, Handle:query, error[], errnum, data[], size){
939 if(failstate != TQUERY_SUCCESS){
940 log_amx("<Query> Error: %s", error);
941 return;
942 }
943}
944
945public handleSayText(msgId, msgDest, msgEnt)
946{
947 new id = get_msg_arg_int(1);
948
949 if(!is_user_connected(id) || !user_gang[id])
950 {
951 return PLUGIN_CONTINUE;
952 }
953
954 new szTmp[192], szTmp2[192];
955 get_msg_arg_string(2, szTmp, charsmax(szTmp));
956
957 new szInt[10], szPrefix[64];
958 num_to_str(user_gang[id], szInt, 9);
959 TrieGetString(gnGangName, szInt, szPrefix, 11);
960
961 if(!equal(szTmp,"#Cstrike_Chat_All"))
962 {
963 add(szTmp2, charsmax(szTmp2), "^x04[");
964 add(szTmp2, charsmax(szTmp2), szPrefix);
965 add(szTmp2, charsmax(szTmp2), "] ");
966 add(szTmp2, charsmax(szTmp2), szTmp);
967 }
968 else
969 {
970 new szPlayerName[64];
971 get_user_name(id, szPlayerName, charsmax(szPlayerName));
972
973 get_msg_arg_string(4, szTmp, charsmax(szTmp)); //4. argument zawiera treoa wys3anej wiadomooci
974 set_msg_arg_string(4, ""); //Musimy go wyzerowaa, gdy? gra wykorzysta wiadomooa podwójnie co mo?e skutkowaa crash'em 191+ znaków.
975
976 add(szTmp2, charsmax(szTmp2), "^x04[");
977 add(szTmp2, charsmax(szTmp2), szPrefix);
978 add(szTmp2, charsmax(szTmp2), "]^x03 ");
979 add(szTmp2, charsmax(szTmp2), szPlayerName);
980 add(szTmp2, charsmax(szTmp2), "^x01 : ");
981 add(szTmp2, charsmax(szTmp2), szTmp)
982 }
983 set_msg_arg_string(2, szTmp2);
984
985 return PLUGIN_CONTINUE;
986}
987
988stock SQL_FormatQuery(const szQuery[], ...)
989{
990 vformat(gszQuery, charsmax(gszQuery), szQuery, 2);
991}
992
993stock PobierzIloscGangu(gang)
994{
995 new StrItem[10], ile;
996 num_to_str(gang, StrItem, 9);
997 TrieGetCell(gnGangIle, StrItem, ile);
998 return ile;
999}
1000
1001stock UstawIloscGangu(gang, dodaj)
1002{
1003 new StrItem[10], ile;
1004 num_to_str(gang, StrItem, 9);
1005 TrieGetCell(gnGangIle, StrItem, ile);
1006 TrieSetCell(gnGangIle, StrItem, ile+dodaj);
1007
1008 SQL_FormatQuery("UPDATE `gang_core` SET `Ilosc` = (`Ilosc` + %d) WHERE `idGang` = '%d';", dodaj, gang);
1009 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
1010}
1011
1012stock bool:WymaganiaDoGanguRespekt(id)
1013{
1014 if(!access(id, ADMIN_IMMUNITY))
1015 {
1016 if(get_respekt(id) < KWOTA_RESPEKTU)
1017 {
1018 ColorChat(id, GREEN, "%s Masz za malo Respektu, aby stworzyc swoj Gang!", PREFIX);
1019 return false;
1020 }
1021 }
1022 if(user_gang[id])
1023 {
1024 ColorChat(id, GREEN, "%s Jestes juz w Gangu!", PREFIX);
1025 return false;
1026 }
1027 return true;
1028}
1029
1030stock bool:WymaganiaDoGanguBunty(id)
1031{
1032 if(!access(id, ADMIN_IMMUNITY))
1033 {
1034 if(user_bunty[id] < MIN_BUNTY)
1035 {
1036 ColorChat(id, GREEN, "%s Masz za malo Buntow, aby stworzyc swoj Gang!", PREFIX);
1037 return false;
1038 }
1039 }
1040 if(user_gang[id])
1041 {
1042 ColorChat(id, GREEN, "%s Jestes juz w Gangu!", PREFIX);
1043 return false;
1044 }
1045 return true;
1046}
1047
1048stock bool:WymaganiaDoGanguZyczenia(id)
1049{
1050 if(!access(id, ADMIN_IMMUNITY))
1051 {
1052 if(user_zyczenia[id] < MIN_ZYCZENIA)
1053 {
1054 ColorChat(id, GREEN, "%s Masz za malo Zyczen, aby stworzyc swoj Gang!", PREFIX);
1055 return false;
1056 }
1057 }
1058 if(user_gang[id])
1059 {
1060 ColorChat(id, GREEN, "%s Jestes juz w Gangu!", PREFIX);
1061 return false;
1062 }
1063 return true;
1064}
1065
1066public OnLastPrisonerTakeWish(id)
1067{
1068 nielicz = true;
1069 if(user_gang[id])
1070 {
1071 topGangsZyczenia[id]++;
1072 SQL_FormatQuery("UPDATE `gang_core` SET `ZyczeniaG` = (`ZyczeniaG` + 1) WHERE `idGang` = '%i';", user_gang[id]);
1073 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
1074
1075 user_zyczenia[id]++;
1076 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `Zyczenia` = (`Zyczenia` + 1) WHERE `NamePlayer` = '%s';", nazwa_gracza[id]);
1077 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
1078 }
1079 else
1080 {
1081 user_zyczenia[id]++;
1082 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `Zyczenia` = (`Zyczenia` + 1) WHERE `NamePlayer` = '%s';", nazwa_gracza[id]);
1083 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
1084 }
1085}
1086
1087public SmiercGraczaPost(id, attacker, shouldgib)
1088{
1089 if(!is_user_connected(id) || !is_user_connected(attacker))
1090 return HAM_IGNORED;
1091
1092 if(user_gang[attacker] && get_user_team(id) == 2 && get_user_team(attacker) == 1 && !nielicz)
1093 {
1094 topGangsBunty[attacker]++;
1095 SQL_FormatQuery("UPDATE `gang_core` SET `BuntyG` = (`BuntyG` + 1) WHERE `idGang` = '%i';", user_gang[attacker]);
1096 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
1097
1098 user_bunty[attacker]++;
1099 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `Bunty` = (`Bunty` + 1) WHERE `NamePlayer` = '%s';", nazwa_gracza[attacker]);
1100 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
1101 }
1102 else if(get_user_team(id) == 2 && get_user_team(attacker) == 1 && !nielicz)
1103 {
1104 user_bunty[attacker]++;
1105 SQL_FormatQuery("UPDATE `gang_czlonkowie` SET `Bunty` = (`Bunty` + 1) WHERE `NamePlayer` = '%s';", nazwa_gracza[attacker]);
1106 SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
1107 }
1108 return HAM_IGNORED;
1109}
1110
1111public OnRemoveData()
1112{
1113 nielicz = false;
1114}
1115
1116public loadTopGangs(id)
1117{
1118 new mysqlRequest[MAX_CHARS * 3];
1119 new Data[1]; Data[0] = id
1120
1121 formatex(mysqlRequest, charsmax(mysqlRequest), "SELECT * FROM `gang_core` ORDER BY (`BuntyG` / `ZyczeniaG`) DESC LIMIT %i;", topGangsDisplayed)
1122 SQL_ThreadQuery(info, "loadTopGangsHandler", mysqlRequest, Data, 1)
1123
1124 return PLUGIN_HANDLED
1125}
1126
1127public loadTopGangsHandler(failstate, Handle:query, error[], errnum, data[], size)
1128{
1129 if(failstate != TQUERY_SUCCESS)
1130 {
1131 log_amx("<Query> Error: %s", error);
1132 return;
1133 }
1134
1135 new id; id = data[0]
1136
1137 new rows1 = SQL_NumResults(query)
1138
1139 if( SQL_MoreResults(query) )
1140 {
1141 for(new i = 0 ; i < rows1 ; i++)
1142 {
1143 new szInt[10], nazwa_gangu[12];
1144 num_to_str(user_gang[i], szInt, 9);
1145 TrieGetString(gnGangName, szInt, nazwa_gangu, 11);
1146
1147 SQL_ReadResult(query, 1, nazwa_gangu, 63 )
1148
1149 user_gang[i] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "idGang"));
1150 topGangsBunty[i] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "BuntyG"));
1151 topGangsZyczenia[i] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "ZyczeniaG"));
1152
1153 SQL_NextRow(query)
1154 }
1155 }
1156 if(rows1 > 0)
1157 {
1158 new iLen=0;
1159 iLen = format( g_sBuffer[iLen], 2047 - iLen, "<html><body bgcolor=^"#666666^">")
1160 iLen += format( g_sBuffer[iLen], 2047 - iLen, "<center><b><font size=6 color=#00CD00>TOP15 - Gangow</b>\
1161 <hr size=1 color=#00CD00><table style=^"color:#FFFFFF;width:750%^">")
1162 iLen += format( g_sBuffer[iLen], 2047 - iLen, "<tr style=color:#00cd00;><td>Miejsce<td>Nazwa Gangu<td>Zyczenia<td>Bunty")
1163
1164 for(new i = 0 ; i < rows1 ; i++)
1165 {
1166 new szInt[10], nazwa_gangu[12];
1167 num_to_str(user_gang[i], szInt, 9);
1168 TrieGetString(gnGangName, szInt, nazwa_gangu, 11);
1169
1170 replace_all(nazwa_gangu[i], 63, "&", "&" )
1171 replace_all(nazwa_gangu[i], 63, "<", "<" )
1172 replace_all(nazwa_gangu[i], 63, ">", ">" )
1173
1174 iLen += format( g_sBuffer[iLen], 2047 - iLen, "<tr><td>%i.<td>%s<td>%i<td>%i", i + 1, nazwa_gangu, topGangsZyczenia[i], topGangsBunty[i] )
1175 }
1176 show_motd(id, g_sBuffer, "Top15 Gangow")
1177 }
1178
1179 // Create motd.
1180
1181}