Junior Member
|
02-05-2019
, 13:38
Re: [HELP] Jailbreak Gangs
|
#3
|
Okay, I'm sorry.
The "Gangs" plugin is connected to the "Stats" plugin, but no wishes or rebellions are saved, I do not know why
Gangs.sma
Code:
#include <amxmodx>
#include <sqlx>
#include <naxe_jailbreak>
new ranga_gracza[][] = { "", " (Zalozyciel)", " (Zastepca)" };
new flagi_gracza[33];
new gang_gracza[33];
new bool:wczytalo_gracza[33];
new bool:stworz_gang[33];
new nazwa_gracza[33][128];
new Handle:info, Handle:info2;
new gszQuery[768];
new Trie:gnGangName
new Trie:gnGangIle;
new zyczenia_gracza[33];
new MenuOpusc, MenuUsun;
public plugin_init() {
register_plugin("Gangi", "1.0", "naXe");
register_clcmd("say /gangi", "MenuGang");
register_clcmd("say /gang", "MenuGang");
register_clcmd("nazwa_gangu", "StworzNazweGangu");
register_clcmd("say_team", "GangSay");
register_message(76, "PrefiksSay");
}
public plugin_cfg() {
info = SQL_MakeDbTuple("XXX", "XXX", "XXX", "730803_gangi");
info2 = SQL_MakeDbTuple("XXX", "XXX", "XXX", "730803_staty");
new error, error2, szError[128], szError2[128];
new Handle:hConn, Handle:hConn2;
hConn = SQL_Connect(info, error, szError, 127);
hConn2 = SQL_Connect(info2, error2, szError2, 127);
if(error) {
log_amx("[Gangi] Blad: %s", szError);
return;
}
if(error2) {
log_amx("[Gangi] Blad: %s", szError2);
return;
}
gnGangName = TrieCreate();
gnGangIle = TrieCreate();
new Handle:query;
SQL_FormatQuery("CREATE TABLE IF NOT EXISTS `NazwaGangu` (`id` int(10) NOT NULL AUTO_INCREMENT, `Nick` varchar(32) NOT NULL, `Ilosc` int(10) NOT NULL DEFAULT '1', PRIMARY KEY (`id`))")
query = SQL_PrepareQuery(hConn, gszQuery)
SQL_Execute(query)
SQL_FreeHandle(query);
SQL_FormatQuery("CREATE TABLE IF NOT EXISTS `CzlonekGangu` (`id` int(10) NOT NULL DEFAULT '0', `Nick` varchar(32) NOT NULL, `Flaga` int(5) NOT NULL DEFAULT '0', PRIMARY KEY (`Nick`))");
query = SQL_PrepareQuery(hConn, gszQuery);
SQL_Execute(query)
SQL_FreeHandle(query);
query = SQL_PrepareQuery(hConn,"SELECT * FROM `NazwaGangu` WHERE 1");
if(!SQL_Execute(query)) {
SQL_QueryError(query, szError, 127);
log_amx("[Gangi] Nie mozna zaladowac gangow (%s)", szError);
}
else if(SQL_NumResults(query)) {
new szNazwa[32], szInt[32];
while(SQL_MoreResults(query)) {
num_to_str(SQL_ReadResult(query, 0), szInt, 31);
SQL_ReadResult(query, 1, szNazwa, 31);
TrieSetCell(gnGangIle, szInt, SQL_ReadResult(query, 2));
TrieSetString(gnGangName, szInt, szNazwa);
SQL_NextRow(query);
}
SQL_FreeHandle(query);
}
SQL_FreeHandle(hConn);
SQL_FreeHandle(hConn2);
MenuOpusc = menu_create("Czy napewno chcesz opuscic swoj gang?", "Handel_OpuscGang");
menu_additem(MenuOpusc, "\yTak");
menu_additem(MenuOpusc, "Nie");
menu_setprop(MenuOpusc, 4, "Wyjdz");
MenuUsun = menu_create("Czy napewno chcesz usunac swoj gang?", "Handel_UsunGang");
menu_additem(MenuUsun, "\yTak");
menu_additem(MenuUsun, "Nie");
menu_setprop(MenuUsun, 4, "Wyjdz");
}
public MenuGang(id) {
if(!wczytalo_gracza[id] || stworz_gang[id]) {
ColorChat(id, 0, "^4[Gang]^1 Zaczekaj az gang sie utworzy lub zostaniesz wczytany!");
return 1;
}
new menu = menu_create("Menu gangu:", "Handel_Gang");
if(!gang_gracza[id]) menu_additem(menu, "Stworz gang \y(40+ Zyczen)", "0");
else {
if(flagi_gracza[id] == 1) {
menu_additem(menu, "Dodaj czlonka do swojego gangu", "2");
menu_additem(menu, "Usun czlonka gangu^n", "3");
menu_additem(menu, "Czlonkowie gangu", "5");
menu_additem(menu, "Ustaw range dla czlonka^n", "7");
menu_additem(menu, "\yUsun swoj gang", "4");
} else {
menu_additem(menu, "\yOpusc gang^n", "1");
if(flagi_gracza[id] == 2) {
menu_additem(menu, "Dodaj czlonka do swojego gangu", "2");
menu_additem(menu, "Usun czlonka gangu^n", "3");
}
menu_additem(menu, "Czlonkowie gangu", "5");
}
}
menu_setprop(menu, 4, "Wyjdz");
menu_display(id, menu);
return 1;
}
public Handel_Gang(id, menu, item) {
if(item == -3) return;
new szItem[3], id2;
menu_item_getinfo(menu, item, id2, szItem, 2, _, _, id2);
switch(str_to_num(szItem)) {
case 0: {
if(!WymaganiaDoGangu(id)) return;
client_cmd(id, "messagemode nazwa_gangu");
}
case 1: menu_display(id, MenuOpusc);
case 2: {
new szInt[3], menu2 = menu_create("Wyslij zaproszenie do gangu:", "Handel_ZaproszenieDoGangu");
for(new i = 1; i <= MaxClients; i++) {
if(!is_user_connected(i) || gang_gracza[i] || zyczenia_gracza[i] < 10 || is_user_hltv(i) || is_user_bot(i)) continue;
num_to_str(i, szInt, 2);
menu_additem(menu2, nazwa_gracza[i], szInt);
}
menu_setprop(menu2, 2, "Poprzednia strona");
menu_setprop(menu2, 3, "Nastepna strona");
menu_setprop(menu2, 4, "Wyjdz");
menu_display(id, menu2);
}
case 3: {
new data[1]; data[0] = id;
SQL_FormatQuery("SELECT `Nick` FROM `CzlonekGangu` WHERE `id` = '%i' AND NOT `Flaga` = '1'", gang_gracza[id]);
SQL_ThreadQuery(info, "UsunCzlonkaGangu", gszQuery, data, 1);
}
case 4: menu_display(id, MenuUsun);
case 5: {
new data[1]; data[0] = id;
SQL_FormatQuery("SELECT `Nick`,`Flaga` FROM `CzlonekGangu` WHERE `id` = '%i'", gang_gracza[id]);
SQL_ThreadQuery(info, "PokazCzlonkaGangu", gszQuery, data, 1);
}
case 7: {
new data[1]; data[0] = id;
SQL_FormatQuery("SELECT `Nick`,`Flaga` FROM `CzlonekGangu` WHERE `id` = '%i' AND NOT `Flaga` = '1'", gang_gracza[id]);
SQL_ThreadQuery(info, "UstawRangCzlonka", gszQuery, data, 1);
}
}
}
public Handel_OpuscGang(id, menu, item) {
if(item == -3 || item == 1) return;
UstawIloscGangu(gang_gracza[id], -1);
gang_gracza[id] = 0;
flagi_gracza[id] = 0;
SQL_FormatQuery("UPDATE `CzlonekGangu` SET `id` = '0', `Flaga` = '0' WHERE `Nick` = '%s'", nazwa_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
ColorChat(id, 0, "^4[Gang]^1 Opusciles swoj gang.");
}
public Handel_UsunGang(id, menu, item) {
if(item == -3 || item == 1) return;
for(new i = 1; i <= MaxClients; i++) {
if(gang_gracza[id] == gang_gracza[i] && id != i) {
gang_gracza[i] = 0;
flagi_gracza[i] = 0;
}
}
SQL_FormatQuery("UPDATE `CzlonekGangu` SET `id` = '0', `Flaga` = '0' WHERE `id` = '%i'", gang_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
SQL_FormatQuery("DELETE FROM `NazwaGangu` WHERE `id` = '%i'", gang_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
new StrItem[32];
num_to_str(gang_gracza[id], StrItem, 31);
TrieDeleteKey(gnGangIle, StrItem);
gang_gracza[id] = 0;
flagi_gracza[id] = 0;
ColorChat(id, 0, "^4[Gang]^1 Usunales swoj gang.");
}
public Handel_ZaproszenieDoGangu(id, menu, item) {
if(item == -3) return;
if(PobierzIloscGangu(gang_gracza[id]) >= 25) {
ColorChat(id, 0, "^4[Gang]^1 Masz za duzo czlonkow w gangu (25)");
return;
}
new szInt[3], id2;
menu_item_getinfo(menu, item, id2, szInt, 2, _, _, id2);
id2 = str_to_num(szInt);
if(zyczenia_gracza[id2] < 10) {
ColorChat(id, 0, "^4[Gang]^1 Gracz nie ma minimalnej ilosci zyczen (10)");
return;
}
ColorChat(id, 0, "^4[Gang]^1 Wyslales^3 %s^1 zaproszenie do swojego gangu", nazwa_gracza[id2]);
new szTemp[128], menu2, gszInt[32], szGang[64];
num_to_str(gang_gracza[id], gszInt, 31);
TrieGetString(gnGangName, gszInt, szGang, 63);
formatex(szTemp, 127, "%s zaprosil cie, abys dolaczyl do gangu ^"%s^"", nazwa_gracza[id], szGang);
menu2 = menu_create(szTemp, "Handel_DostalZaproszenie");
num_to_str(id, szInt, 2);
menu_additem(menu2, "Akceptuj", szInt);
menu_additem(menu2, "Odrzuc", szInt);
menu_setprop(menu2, 4, "Wyjdz");
menu_display(id2, menu2);
ColorChat(id2, 0, "^4[Gang]^3 %s^1 wyslal Ci zaproszenie do swojego gangu", nazwa_gracza[id]);
}
public Handel_DostalZaproszenie(id, menu, item) {
if(item == -3) return;
new szInt[3], id2;
menu_item_getinfo(menu, item, id2, szInt, 2, _, _, id2);
id2 = str_to_num(szInt);
if(PobierzIloscGangu(gang_gracza[id2]) >= 25) return;
ColorChat(id2, 0, "^4[Gang]^3 %s^1%s przyjal Twoje%s zaproszeni%s do gangu", nazwa_gracza[id], item ? " nie" : "", item ? "go" : "", item ? "a" : "e");
if(item == 1) return;
UstawIloscGangu(gang_gracza[id2], 1);
SQL_FormatQuery("UPDATE `CzlonekGangu` SET `id` = '%i' WHERE `Nick` = '%s'", gang_gracza[id2], nazwa_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
gang_gracza[id] = gang_gracza[id2];
}
public PokazCzlonkaGangu(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id)) return;
if(SQL_NumRows(query)) {
new szName[50], menu = menu_create("Czlonkowie gangu:", "Handel_CzlonkowieGangu");
while(SQL_MoreResults(query)) {
SQL_ReadResult(query, 0, szName, 31);
add(szName, 49, ranga_gracza[SQL_ReadResult(query, 1)]);
menu_additem(menu, szName);
SQL_NextRow(query);
}
menu_setprop(menu, 2, "Poprzednia strona");
menu_setprop(menu, 3, "Nastepna strona");
menu_setprop(menu, 4, "Wyjdz");
menu_display(id, menu);
}
}
public Handel_CzlonkowieGangu(id, menu, item) {
if(item == -3) return;
menu_display(id, menu, item/7);
}
public UsunCzlonkaGangu(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id)) return;
if(SQL_NumRows(query)) {
new szName[32], menu = menu_create("Usun z gangu:", "Handel_UsunZGangu");
while(SQL_MoreResults(query)) {
SQL_ReadResult(query, 0, szName, 31);
menu_additem(menu, szName, szName);
SQL_NextRow(query);
}
menu_setprop(menu, 2, "Poprzednia strona");
menu_setprop(menu, 3, "Nastepna strona");
menu_setprop(menu, 4, "Wyjdz");
menu_display(id, menu);
}
}
public Handel_UsunZGangu(id, menu, item) {
if(item == -3) return;
new szName[32], id2;
menu_item_getinfo(menu, item, id2, szName, 32, _, _, id2);
SQL_FormatQuery("UPDATE `CzlonekGangu` SET `id` = '0', `Flaga` = '0' WHERE `Nick` = '%s'", szName);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
UstawIloscGangu(gang_gracza[id], -1);
id2 = get_user_index(szName);
if(is_user_connected(id2)) {
gang_gracza[id2] = 0;
flagi_gracza[id2] = 0;
}
ColorChat(id, 0, "^4[Gang]^1 Usunales^3 %s^1 z gangu", szName);
}
public UstawRangCzlonka(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id)) return;
if(SQL_NumRows(query)) {
new szName[2][50], menu = menu_create("Ustaw range:", "Handel_UstawRangeCzlonka");
while(SQL_MoreResults(query)) {
SQL_ReadResult(query, 0, szName[0], 31);
formatex(szName[1], 49, "%s%s", szName[0], ranga_gracza[SQL_ReadResult(query, 1)]);
menu_additem(menu, szName[1], szName[0]);
SQL_NextRow(query);
}
menu_setprop(menu, 2, "Poprzednia strona");
menu_setprop(menu, 3, "Nastepna strona");
menu_setprop(menu, 4, "Wyjdz");
menu_display(id, menu);
}
}
public Handel_UstawRangeCzlonka(id, menu, item) {
if(item == -3) return;
new szName[32], id2;
menu_item_getinfo(menu, item, id2, szName, 31, _, _, id2);
new szTemp[128], menu2;
format(szTemp, 127, "Ustaw range dla %s", szName);
menu2 = menu_create(szTemp, "Handel_UstawRangeCzlonkaGangu");
menu_additem(menu2, "Zadna", szName);
menu_additem(menu2, "Zastepca", szName);
menu_setprop(menu2, 4, "Wyjdz");
menu_display(id, menu2);
}
public Handel_UstawRangeCzlonkaGangu(id, menu, item) {
if(item == -3) return;
new szName[32], id2;
menu_item_getinfo(menu, item, id2, szName, 32, _, _, id2);
item = item ? 2 : 0;
SQL_FormatQuery("UPDATE `CzlonekGangu` SET `Flaga` = '%i' WHERE `Nick` = '%s'", item, szName);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
id2 = get_user_index(szName);
if(is_user_connected(id2)) {
flagi_gracza[id2] = item;
ColorChat(id2, 0, "^4[Gang]^3 %s^1 ustawil ci range%s", nazwa_gracza[id], ranga_gracza[item]);
}
ColorChat(id, 0, "^4[Gang]^1 Ustawiles range%s czlonkowi^3 %s", ranga_gracza[item], szName);
}
public GangSay(id) {
new said[3]; read_argv(1, said, 2);
if(said[0] != '*' || !said[1] || !gang_gracza[id]) return 0;
new message[192];
read_args(message, 191);
remove_quotes(message);
for(new i = 1; i <= MaxClients; i++) {
if(!is_user_connected(i) || gang_gracza[i] != gang_gracza[id]) continue;
ColorChat(i, 0, "^3(GANG)^4 %s^3 : %s", nazwa_gracza[id], message[2]);
}
return 1;
}
public OnPlayerConnected(id) {
stworz_gang[id] = false;
wczytalo_gracza[id] = false;
gang_gracza[id] = 0;
flagi_gracza[id] = 0;
zyczenia_gracza[id] = 0;
get_user_name(id, nazwa_gracza[id], 127);
replace_all(nazwa_gracza[id], 127, "\\", "\\\\");
replace_all(nazwa_gracza[id], 127, "\0", "\\0");
replace_all(nazwa_gracza[id], 127, "\n", "\\n");
replace_all(nazwa_gracza[id], 127, "\r", "\\r");
replace_all(nazwa_gracza[id], 127, "\x1a", "\Z");
replace_all(nazwa_gracza[id], 127, "'", "\'");
replace_all(nazwa_gracza[id], 127, "^"", "\^"");
replace_all(nazwa_gracza[id], 127, "`", "\`");
replace_all(nazwa_gracza[id], 127, "%", "\%");
static data[1]; data[0] = id;
SQL_FormatQuery("SELECT * FROM `CzlonekGangu` WHERE `Nick` = '%s'", nazwa_gracza[id]);
SQL_ThreadQuery(info, "PobierzGang", gszQuery, data, 1);
SQL_FormatQuery("SELECT `Zyczenia` FROM `StatystykiGraczy` WHERE `Nick` = '%s'", nazwa_gracza[id]);
SQL_ThreadQuery(info2, "PobierzStaty", gszQuery, data, 1);
}
public client_infochanged(id) {
if(!is_user_connected(id)) return;
new name[128]; get_user_info(id, "name", name, 127);
if(equal(name, nazwa_gracza[id])) return;
replace_all(name, 127, "\\", "\\\\");
replace_all(name, 127, "\0", "\\0");
replace_all(name, 127, "\n", "\\n");
replace_all(name, 127, "\r", "\\r");
replace_all(name, 127, "\x1a", "\Z");
replace_all(name, 127, "'", "\'");
replace_all(name, 127, "^"", "\^"");
replace_all(name, 127, "`", "\`");
replace_all(name, 127, "%", "\%");
formatex(nazwa_gracza[id], 127, name);
}
public PobierzGang(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id)) return;
if(SQL_NumRows(query)) {
gang_gracza[id] = SQL_ReadResult(query, 0);
flagi_gracza[id] = SQL_ReadResult(query, 2);
} else {
SQL_FormatQuery("INSERT INTO `CzlonekGangu` (`Nick`) VALUES ('%s')", nazwa_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
}
wczytalo_gracza[id] = true;
}
public PobierzStaty(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id)) return;
if(!SQL_NumRows(query)) return;
zyczenia_gracza[id] += SQL_ReadResult(query, SQL_FieldNameToNum(query, "Zyczenia"));
}
public StworzNazweGangu(id) {
if(get_user_team(id) != 1 || !wczytalo_gracza[id]) return 1;
if(!WymaganiaDoGangu(id)) return 1;
if(stworz_gang[id]) {
ColorChat(id, 0, "^4[Gang]^1 Poczekaj, trwa tworzenie twojego gangu...");
return 1;
}
new szArgs[32];
read_args(szArgs, 31);
remove_quotes(szArgs);
if(!userFlags(id, "a") && strlen(szArgs) > 10) {
ColorChat(id, 0, "^4[Gang]^1 Za dluga nazwa gangu! Maksymalnie 10 znakow.");
return 1;
}
if(strfind(szArgs, "'") != -1 || strfind(szArgs, "`") != -1 || strfind(szArgs, "%") != -1) {
ColorChat(id, 0, "^4[Gang]^1 Nie mozesz uzyc niedozwolonych znakow (', ` i %)");
return 1;
}
static data[32];
copy(data[1], 31, szArgs);
data[0] = id;
SQL_FormatQuery("SELECT `id` FROM `NazwaGangu` WHERE `Nick` = '%s'", szArgs);
SQL_ThreadQuery(info, "SprawdzenieDostepnosci", gszQuery, data, 32);
stworz_gang[id] = true;
return 1;
}
public SprawdzenieDostepnosci(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0]
if(SQL_NumRows(query)) {
ColorChat(id, 0, "^4[Gang]^1 Gang z taka nazwa juz istnieje.");
stworz_gang[id] = false;
return;
}
ColorChat(id, 0, "^4[Gang]^1 Stworzyles gang^3 %s", data[1]);
SQL_FormatQuery("INSERT INTO `NazwaGangu` (`Nick`) VALUES ('%s')", data[1]);
SQL_ThreadQuery(info, "ZapiszDaneGang", gszQuery, data, 32);
}
public ZapiszDaneGang(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
SQL_FormatQuery("SELECT `id` FROM `NazwaGangu` WHERE `Nick` = '%s'", data[1]);
SQL_ThreadQuery(info, "PobierzGangID", gszQuery, data, 32);
}
public PobierzGangID(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(SQL_NumRows(query)) {
gang_gracza[id] = SQL_ReadResult(query, 0);
flagi_gracza[id] = 1;
new szInt[32];
num_to_str(gang_gracza[id], szInt, 31);
TrieSetCell(gnGangIle, szInt, 1);
TrieSetString(gnGangName, szInt, data[1]);
SQL_FormatQuery("UPDATE `CzlonekGangu` SET `id` = '%i', `Flaga` = '1' WHERE `Nick` = '%s'", gang_gracza[id], nazwa_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
}
stworz_gang[id] = false;
}
public ZapiszDane(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
}
public PrefiksSay(msgId, msgDest, msgEnt) {
new id = get_msg_arg_int(1);
if(!is_user_connected(id) || !(1 <= get_user_team(id) <= 2) || !gang_gracza[id]) return 0;
new szInt[32], szGang[12], szPrefix[16];
num_to_str(gang_gracza[id], szInt, 31);
TrieGetString(gnGangName, szInt, szGang, 11);
formatex(szPrefix, 15, "^4[%s]", szGang);
new szTmp[196], szTmp2[196];
get_msg_arg_string(2, szTmp, 195);
if(!equal(szTmp, "#Cstrike_Chat_All")) {
add(szTmp2, 195, szPrefix);
add(szTmp2, 195, " ");
add(szTmp2, 195, szTmp);
} else {
add(szTmp2, 195, szPrefix);
add(szTmp2, 195, "^3 %s1^1 : %s2");
}
set_msg_arg_string(2, szTmp2);
return 0;
}
public OnPrisonerTakeWish(id)
if((jail_get_tt(false) + jail_get_ct(false)) >= 5) zyczenia_gracza[id] += 1;
stock SQL_FormatQuery(szQuery[], ...) vformat(gszQuery, 767, szQuery, 2);
stock PobierzIloscGangu(gang) {
new StrItem[32], ile;
num_to_str(gang, StrItem, 31);
TrieGetCell(gnGangIle, StrItem, ile);
return ile;
}
stock UstawIloscGangu(gang, dodaj) {
new StrItem[32], ile;
num_to_str(gang, StrItem, 31);
TrieGetCell(gnGangIle, StrItem, ile);
TrieSetCell(gnGangIle, StrItem, ile+dodaj);
SQL_FormatQuery("UPDATE `NazwaGangu` SET `Ilosc` = (`Ilosc` + %i) WHERE `id` = '%i'", dodaj, gang);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
}
stock bool:WymaganiaDoGangu(id) {
if(!userFlags(id, "a") && zyczenia_gracza[id] < 40) {
ColorChat(id, 0, "^4[Gang]^1 Masz za malo zyczen, aby stworzyc swoj gang!");
return false;
}
if(gang_gracza[id]) {
ColorChat(id, 0, "^4[Gang]^1 Masz juz gang!");
return false;
}
return true;
}
Stats.sma
Code:
#include <amxmodx>
#include <sqlx>
#include <naxe_jailbreak>
new Handle:info, gszQuery[768];
new sid_gracza[33][35], ip_gracza[33][16], nazwa_gracza[33][128];
new czas_gracza[33], zyczenia_gracza[33], budynie_gracza[33];
new polaczenia_gracza[33];
new mapa[64], czas[2][11], plik[65], msg[256];
new Trie:recNick;
public plugin_init() {
register_plugin("Statystyki Graczy", "1.0", "naXe");
register_clcmd("say /czas", "PokazCzas");
register_clcmd("say /top15", "Top15");
register_clcmd("say /rank", "RankStats");
}
public plugin_natives() register_native("playerGetTime", "_PobierzCzas", 1);
public _PobierzCzas(id) return czas_gracza[id] + get_user_time(id, 1);
public plugin_cfg() {
recNick = TrieCreate();
get_mapname(mapa, 63);
info = SQL_MakeDbTuple("xxx", "xxx", xxx", "730803_staty");
new error, szError[128];
new Handle:hConn = SQL_Connect(info, error, szError, 127);
if(error) {
log_amx("Blad: %s", szError);
return;
}
new Handle: query = SQL_PrepareQuery(hConn, "CREATE TABLE IF NOT EXISTS `StatystykiGraczy` (\
`id` int(11) NOT NULL AUTO_INCREMENT,\
`Nick` varchar(32) NOT NULL,\
`SteamID` varchar(35) NOT NULL,\
`IP` varchar(16) NOT NULL,\
`Ostatnie` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\
`Czas` int(10) NOT NULL,\
`Zabicia` int(10) NOT NULL,\
`Zyczenia` int(10) NOT NULL,\
`Polaczenia` int(10) NOT NULL,\
PRIMARY KEY (`id`)\
)");
SQL_Execute(query)
SQL_FreeHandle(query);
SQL_FreeHandle(hConn);
}
public plugin_end() SQL_FreeHandle(info);
public PokazCzas(id) {
new czas = _PobierzCzas(id);
new d = czas / 86400;
new h = czas % 86400 / 3600;
new m = czas % 3600 / 60;
ColorChat(id, 0, "^4[CzasGry]^1 Spedziles na serwerze^3 %i^1 d%s,^3 %i^1 godzin%s^3 %i^1 minut%s", d, d == 1 ? "zien" : "ni", h, h == 1 ? "e" : (1 < h < 5) ? "y," : ",", m, m == 1 ? "e" : (1 < m < 5) ? "y" : "");
return 1;
}
public Top15(id) {
new menu = menu_create("Top 15", "HandleTop");
menu_additem(menu, "Top 15 budyniow");
menu_additem(menu, "Top 15 zyczen");
menu_additem(menu, "Top 15 czasow");
menu_setprop(menu, 4, "Wyjdz");
menu_display(id, menu);
return 1;
}
public HandleTop(id, menu, item) {
if(item == -3) return;
static data[2];
data[0] = id;
data[1] = item;
SQL_FormatQuery("SELECT * FROM `StatystykiGraczy` ORDER BY `%s` DESC LIMIT 15", item == 1 ? "Zyczenia" : item == 2 ? "Czas" : "Zabicia");
SQL_ThreadQuery(info, "PobierzTop", gszQuery, data, 2);
}
public PobierzTop(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id)) return;
if(!SQL_NumRows(query)) return;
new buffer[2048], szName[41], iLen, i;
iLen = copy(buffer[iLen], 2047-iLen, "<body bgcolor=#FFFFFF><table width=100%% cellpadding=2 cellspacing=0 border=0>");
if(0 <= data[1] <= 1) {
iLen += formatex(buffer[iLen], 2047-iLen, "<tr align=center bgcolor=#52697B><th width=5%%> # <th width=35%% align=left> Gracz: <th width=20%%> %s:", data[1] ? "Zyczen" : "Budyniow");
while(SQL_MoreResults(query)) {
SQL_ReadResult(query, SQL_FieldNameToNum(query, "Nick"), szName, 40);
replace_all(szName, 40, "<", "<");
replace_all(szName, 40, ">", ">");
iLen += formatex(buffer[iLen], 2047-iLen, "<tr align=center%s><td> %i. <td align=left> %s <td> %i", (i%2) ? " bgcolor=#A4BED6" : "", i+1, szName, SQL_ReadResult(query, SQL_FieldNameToNum(query, data[1] == 1 ? "Zyczenia" : "Zabicia")));
i++;
SQL_NextRow(query);
}
}
if(data[1] == 2) {
iLen += formatex(buffer[iLen], 2047-iLen, "<tr align=center bgcolor=#52697B><th width=5%%> # <th width=35%% align=left> Gracz: <th width=20%%> Czas gry:");
while(SQL_MoreResults(query)) {
SQL_ReadResult(query, SQL_FieldNameToNum(query, "Nick"), szName, 40);
replace_all(szName, 40, "<", "<");
replace_all(szName, 40, ">", ">");
new czas = SQL_ReadResult(query, SQL_FieldNameToNum(query, "Czas"));
iLen += formatex(buffer[iLen], 2047-iLen, "<tr align=center%s><td> %i. <td align=left> %s <td> %i d %i h %i m", (i%2) ? " bgcolor=#A4BED6" : "", i+1, szName, czas / 86400, czas % 86400 / 3600, czas % 3600 / 60);
i++;
SQL_NextRow(query);
}
}
iLen += copy(buffer[iLen], 2047-iLen, "</table></body>");
show_motd(id, buffer, "Top 15")
}
public RankStats(id) {
new menu = menu_create("Rank Stats:", "HandleRankStats");
menu_additem(menu, "Twoj rank budyniow");
menu_additem(menu, "Twoj rank zyczen");
menu_additem(menu, "Twoj rank czasu");
menu_setprop(menu, 4, "Wyjdz");
menu_display(id, menu);
return 1;
}
public HandleRankStats(id, menu, item) {
if(item == -3) return;
new data[2];
data[0] = id;
data[1] = item;
SQL_FormatQuery("SELECT COUNT(*) FROM `StatystykiGraczy` WHERE `%s` >= %i", item == 2 ? "Czas" : item == 1 ? "Zyczenia" : "Zabicia", item == 2 ? _PobierzCzas(id) : item == 1 ? zyczenia_gracza[id] : budynie_gracza[id]);
SQL_ThreadQuery(info, "PobierzRank", gszQuery, data, 2);
}
public PobierzRank(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id)) return;
if(0 <= data[1] <= 1) ColorChat(id, 0, "^4[RANK]^1 Masz^3 %i^1 %s zajmujesz^3 %i^1 miejsce", data[1] ? zyczenia_gracza[id] : budynie_gracza[id], data[1] ? "zyczen" : "budyniow", SQL_ReadResult(query, 0));
else {
PokazCzas(id);
ColorChat(id, 0, "^4[RANK]^1 Zajmujesz^3 %i^1 miejsce", SQL_ReadResult(query, 0));
}
}
public OnPrisonerTakeWish(id, guard, num) {
if((jail_get_ct(false) + jail_get_tt(false)) < 4) return 0;
zyczenia_gracza[id]++;
SQL_FormatQuery("UPDATE `StatystykiGraczy` SET `Zyczenia` = (`Zyczenia` + 1) WHERE `Nick` = '%s'", nazwa_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
return 0;
}
public OnPlayerDie(id, killer) {
if(!is_user_connected(id) || !is_user_connected(killer) || get_user_team(id) != 2 || get_user_team(killer) != 1 || jail_get_wish() || jail_get_last() || (jail_get_ct(false) + jail_get_tt(false)) < 4) return;
budynie_gracza[killer]++;
SQL_FormatQuery("UPDATE `StatystykiGraczy` SET `Zabicia` = (`Zabicia` + 1) WHERE `Nick` = '%s'", nazwa_gracza[killer]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
}
public OnPlayerConnected(id) {
get_user_name(id, nazwa_gracza[id], 127);
get_user_authid(id, sid_gracza[id], 34);
get_user_ip(id, ip_gracza[id], 15, 1);
replace_all(nazwa_gracza[id], 127, "\\", "\\\\");
replace_all(nazwa_gracza[id], 127, "\0", "\\0");
replace_all(nazwa_gracza[id], 127, "\n", "\\n");
replace_all(nazwa_gracza[id], 127, "\r", "\\r");
replace_all(nazwa_gracza[id], 127, "\x1a", "\Z");
replace_all(nazwa_gracza[id], 127, "'", "\'");
replace_all(nazwa_gracza[id], 127, "^"", "\^"");
replace_all(nazwa_gracza[id], 127, "`", "\`");
replace_all(nazwa_gracza[id], 127, "%", "\%");
czas_gracza[id] = 0;
budynie_gracza[id] = 0;
zyczenia_gracza[id] = 0;
polaczenia_gracza[id] = 0;
if(!TrieKeyExists(recNick, nazwa_gracza[id])) {
TrieSetCell(recNick, nazwa_gracza[id], 1);
polaczenia_gracza[id]++;
SQL_FormatQuery("UPDATE `StatystykiGraczy` SET `Polaczenia` = (`Polaczenia` + 1) WHERE `Nick` = '%s';", nazwa_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
}
static data[1]; data[0] = id;
SQL_FormatQuery("SELECT * FROM `StatystykiGraczy` WHERE `Nick` = '%s'", nazwa_gracza[id]);
SQL_ThreadQuery(info, "PobierzDane", gszQuery, data, 1);
}
public client_infochanged(id) {
if(!is_user_connected(id)) return;
new name[128]; get_user_info(id, "name", name, 127);
if(equal(name, nazwa_gracza[id])) return;
replace_all(name, 127, "\\", "\\\\");
replace_all(name, 127, "\0", "\\0");
replace_all(name, 127, "\n", "\\n");
replace_all(name, 127, "\r", "\\r");
replace_all(name, 127, "\x1a", "\Z");
replace_all(name, 127, "'", "\'");
replace_all(name, 127, "^"", "\^"");
replace_all(name, 127, "`", "\`");
replace_all(name, 127, "%", "\%");
formatex(nazwa_gracza[id], 127, name);
}
public PobierzDane(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id)) return;
if(SQL_NumRows(query)) {
budynie_gracza[id] += SQL_ReadResult(query, SQL_FieldNameToNum(query, "Zabicia"));
zyczenia_gracza[id] += SQL_ReadResult(query, SQL_FieldNameToNum(query, "Zyczenia"));
czas_gracza[id] += get_user_time(id, 1) + SQL_ReadResult(query, SQL_FieldNameToNum(query, "Czas"));
polaczenia_gracza[id] += SQL_ReadResult(query, SQL_FieldNameToNum(query, "Polaczenia"));
} else {
SQL_FormatQuery("INSERT INTO `StatystykiGraczy` (`Nick`, `SteamID`, `IP`, `Ostatnie`, `Czas`, `Zabicia`, `Zyczenia`, `Polaczenia`) VALUES ('%s', '%s', '%s', NOW(), %i, 0, 0, 1)", nazwa_gracza[id], sid_gracza[id], ip_gracza[id], get_user_time(id, 1));
//SQL_FormatQuery("INSERT INTO `StatystykiGraczy` (`Nick`, `SteamID`, `IP`) VALUES ('%s', '%s', '%s')", nazwa_gracza[id], sid_gracza[id], ip_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
}
get_time("%d.%m.%Y", czas[0], 10);
get_time("%H:%M", czas[1], 5);
formatex(plik, 64, "addons/amxmodx/logs/polaczenia/%s.log", czas[0]);
format(msg, 255, "[%s] Nick: %s | IP: %s | SID: %s | Godzina: %s", mapa, nazwa_gracza[id], ip_gracza[id], sid_gracza[id], czas[1]);
write_file(plik, msg, -1);
ColorChat(0, 0, "^1 Gracz^3 %s^1 (^3%s^1) dolaczyl do gry. (Polaczen:^3 %i^1).", nazwa_gracza[id], getStatus(id), polaczenia_gracza[id]);
}
public OnPlayerDisconnected(id) {
SQL_FormatQuery("UPDATE `StatystykiGraczy` SET `Czas` = `Czas` + %i, `Ostatnie` = NOW() WHERE `Nick` = '%s'", get_user_time(id, 1), nazwa_gracza[id]);
SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
}
public ZapiszDane(failstate, Handle:query, error[], errnum, data[], size) {
if(failstate != 0) {
log_amx("<Zapytanie> Blad: %s", error);
return;
}
}
stock getStatus(id) {
new status[20]
if(polaczenia_gracza[id] <= 19) status = "Nowy";
else if(20 <= polaczenia_gracza[id] <= 59) status = "Poczatkujacy"
else if(60 <= polaczenia_gracza[id] <= 149) status = "Gracz";
else if(150 <= polaczenia_gracza[id] <= 339) status = "Zaawansowany";
else if(340 <= polaczenia_gracza[id] <= 599) status = "Wszechobecny";
else if(600 <= polaczenia_gracza[id] <= 799) status = "No Lifer";
else if(800 <= polaczenia_gracza[id] <= 1399) status = "Serwer narkotykiem";
else if(1400 <= polaczenia_gracza[id] <= 1699) status = "Uzalezniony na maxa";
else if(1700 <= polaczenia_gracza[id] <= 1999) status = "Madafaker";
else if(polaczenia_gracza[id] >= 2000) status = "Jol Madafaker";
return status;
}
stock SQL_FormatQuery(szQuery[], ...) vformat(gszQuery, 767, szQuery, 2);
Last edited by ObeliX; 02-05-2019 at 19:35.
|
|