Źle pobiera nick gracza przy banowaniu
Andrzejek
15.02.2014
Witam, mam taki problem że wybieram w menu np. Nazwa Gracza 1 a banuje w ogóle innego gracza np. Nazwa Gracza 2
public menuBanowania(id) { if(!access(id, ADMIN_CVAR)) { client_print(id, print_console, "Nie masz dostepu do tej komendy"); return PLUGIN_HANDLED; } new menu=menu_create("Wybierz gracza do zbanowania", "handleBanowanie"); new Player[32], iPlayers, pid, szName[32], szBuff[2]; get_players(Player, iPlayers) for(new i=0; i<iPlayers; i++) { pid=Player[i]; if(is_user_connected(pid)) { formatex(szBuff, 1, "%d", pid); get_user_name(pid, szName, 31); menu_additem(menu, szName, szBuff); } } menu_display(id, menu); return PLUGIN_HANDLED; } public handleBanowanie(id, menu, item) { if(item==MENU_EXIT) return PLUGIN_HANDLED; new access,data[2],szName[32],callback,pid; menu_item_getinfo(menu, item, access, data,1, szName, 31, callback); pid=str_to_num(data); zbanujGracza(id, pid); return PLUGIN_HANDLED; } public zbanujGracza(aid, pid) { if(!is_user_connected(pid)) { return; } new szName[32], szName2[32], szSid[32], szSid2[32], szDate[32]; get_time("%H:%M:%S %d-%m-%Y", szDate, 31); get_user_name(pid, szName, 31); get_user_name(aid, szName2, 31); ColorChat(aid, TEAM_COLOR, "[Ban]^x01 Gracz^x04 %s^x01 zostal pomyslnie zbanowany!", szName); ColorChat(pid, TEAM_COLOR, "[Ban]^x04 %s^x01, zostales zbanowany!", szName); }
sebul
15.02.2014
http://amxx.pl/topic...tworzenia-menu/
http://amxx.pl/topic...menu-przykłady/
formatex(szBuff, 1, "%d", pid);
Według Ciebie każde id gracza posiada tylko jedną cyfrę?
kyriuch
15.02.2014
formatex(szBuff, 1, "%d", pid);
Według Ciebie każde id gracza posiada tylko jedną cyfrę?
troszkę fail, tablica przechowuje dwa znaki, jej elementami są 0 i 1 więc len = 1, kolega dobrze napisał
jak na razie mogę zasugerować
formatex(szBuff, 1, "%d", pid);
zastąpić na
num_to_str(pid, szBuff, 1);
i zobaczyć, czy działa
sebul
15.02.2014
Czyli według was, np. liczba 23 ma 1 znak... Brawo, nie wiedziałem, że nawet po zwróceniu uwagi, ktoś może tego nie zauważyćformatex(szBuff, 1, "%d", pid);
Według Ciebie każde id gracza posiada tylko jedną cyfrę?
troszkę fail, tablica przechowuje dwa znaki, jej elementami są 0 i 1 więc len = 1, kolega dobrze napisał
jak na razie mogę zasugerowaćformatex(szBuff, 1, "%d", pid);zastąpić na
num_to_str(pid, szBuff, 1);i zobaczyć, czy działa
kyriuch
15.02.2014
przecież masz szBuff[2] czyli maxlen = 1 bo od 0 do 1, o co Ci chodzi? szBuff[0] = 2 szBuff[1] = 3 dla liczby 23, maxlen = 1? Czasami zwykły user też może mieć racje
Użytkownik kyriuch edytował ten post 15.02.2014 20:21
sebul
15.02.2014
O to, że liczby mogą mieć więcej niż jedną cyfrę/znak? Chociażby wspomniana wcześniej przeze mnie liczba 23 ma 2 znaki, a nie 1... wydawało mi się, że jest to "oczywista oczywistość", ale jednak się myliłem.
@EDIT
Omg... akurat nie masz w niczym racji.
szBuff[2]
Taka zmienna ma dwa znaki, ale ostatni to znak kończący, czyli 0, w dodatku tutaj
formatex(szBuff, 1, "%d", pid);
jest napisane, żeby zapisać tylko 1 znak. Aby było poprawnie należy zrobić tak
szBuff[3];
formatex(szBuff, 2, "%d", pid);
I nie kompromituj się więcej, tylko do książek uczyć się podstaw.
kyriuch
15.02.2014
A kto powiedział, że ma jeden znak? O co Ci chodzi? chyba nie znasz drugiego parametru funkcji format PRZY MAXLEN RÓWNYM 1 MÓWIMY O 2 ZNAKACH BO TABLICA ZACZYNA SIĘ OD ELEMENTU 0
@up
bez komentarza, jesteś idiotą daj mi jeszcze warna poza tymi trzema minusami
Użytkownik kyriuch edytował ten post 15.02.2014 20:28
exexe
15.02.2014
#include <amxmodx>
public plugin_init() {
register_plugin("t", "0", "t")
register_clcmd("say /int", "int_test");
}
public int_test(id)
{
new int1[3], int2[2];
num_to_str(23, int1, 2);
num_to_str(23, int2, 1);
client_print(id, 3, "%s - %s", int1, int2);
client_print(id, 3, "%s%s%s", int1[0], int1[1], int1[2]);
client_print(id, 3, "%s%s", int2[0], int2[1]);
}
Wyniki:
23 - 2 23 2
kyriuch
15.02.2014
właśnie też napisałem
#include <amxmodx> public plugin_init() { register_clcmd("/test", "test"); } public test(id) { new s_test[2]; for(new i = 1; i <= 32; i++) { formatex(s_test, 1, "%i", i); client_print(id, print_console, "%s", s_test); } return 1; }
aż mnie zatkało zwracam honor sebul good to know a i żeby trzymać się tematu, to weź tam tak kolego popraw to jest ten błąd
Użytkownik kyriuch edytował ten post 15.02.2014 20:41
Andrzejek
15.02.2014
O to, że liczby mogą mieć więcej niż jedną cyfrę/znak? Chociażby wspomniana wcześniej przeze mnie liczba 23 ma 2 znaki, a nie 1... wydawało mi się, że jest to "oczywista oczywistość", ale jednak się myliłem.
@EDIT
Omg... akurat nie masz w niczym racji.
szBuff[2]Taka zmienna ma dwa znaki, ale ostatni to znak kończący, czyli 0, w dodatku tutaj
formatex(szBuff, 1, "%d", pid);jest napisane, żeby zapisać tylko 1 znak. Aby było poprawnie należy zrobić tak
szBuff[3];formatex(szBuff, 2, "%d", pid);
I nie kompromituj się więcej, tylko do książek uczyć się podstaw.
Tylko ja już tak testowałem przed założeniem tego tematu i to nic nie pomogło, prawdopodobnie błąd leży w tym, że gracz jest zbanowany o takim nicku ale widzi go jako nie zbanowanego.
sebul
16.02.2014
Widocznie nie przeczytałeś całego mojego postu, w którym były linki do tematów, które mówią o tym jak poprawnie tworzyć menu z graczami.
Andrzejek
16.02.2014
Widocznie nie przeczytałeś całego mojego postu, w którym były linki do tematów, które mówią o tym jak poprawnie tworzyć menu z graczami.
Przeczytałem dokładnie twoje posty i tematy do których podałeś linka, ale chodzi mi o to że błąd leży po stronie SQL bo jest na zapis SQL. Ale będę jeszcze kombinować
speedkill
16.02.2014
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "speedkill" new g_MaxPlayers; public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /test", "ShowUserMenu"); } public plugin_cfg(){ g_MaxPlayers = get_maxplayers(); } public ShowUserMenu(id){ new g_UserName[64], g_Menu = menu_create("Wybierz gracza:", "PlayerChoose"); for(new i = 1; i <= g_MaxPlayers; i++){ if(is_user_connected(i) && is_real_user(i) && i != id){ get_user_name(i, g_UserName, charsmax(g_UserName)); menu_additem(g_Menu, g_UserName); } } menu_setprop(g_Menu, MPROP_BACKNAME, "Powrot"); menu_setprop(g_Menu, MPROP_NEXTNAME, "Dalej"); menu_setprop(g_Menu, MPROP_EXITNAME, "Wyjscie"); menu_display(id, g_Menu); } public PlayerChoose(id, g_Menu, g_Item){ if(g_Item == MENU_EXIT){ menu_destroy(g_Menu); return PLUGIN_HANDLED; } new g_Data[6], g_UserName[64], g_Access, g_CallBack; menu_item_getinfo(g_Menu, g_Item, g_Access, g_Data, charsmax(g_Data), g_UserName, charsmax(g_UserName), g_CallBack); new g_UserIndex = get_user_index(g_UserName); // Index gracza wybranego... menu_destroy(g_Menu); return PLUGIN_HANDLED; } stock is_real_user(id){ if(is_user_bot(id) || is_user_hltv(id)){ return false; } return true; }
speedkill
16.02.2014
Ten temat został zamknięty przez moderatora.
Powód: Temat zamknięty na prośbę użytkownika.
Z pozdrowieniami,
Zespół AMXX.PL