Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
dodawanie tagga w nicku w zaleznosci od ip (pomoc)
#1
Napisano 13.10.2008 12:27
Nie potrafie pisac pluginów dlatego proszę o pomoc. Najlepiej jakby ktos napisal kawalek skryptu np tylko dla 2 roznych ip. z reszta mysle ze sobie poradze
#2
Napisano 13.10.2008 21:15
#3
Napisano 13.10.2008 22:15
#4
Napisano 14.10.2008 00:10
#5
Napisano 15.10.2008 10:46
#6
Napisano 15.10.2008 11:09
a nie widzisz co grankee Ci napisał ? Wczoraj napisał że jutro wieczorem da edita, czyli czekaj jak powiedział.i co zpluginem, moge liczyc na pomoc?
#7
Napisano 15.10.2008 12:13
#8
Napisano 15.10.2008 17:39
[ Dodano: 15-10-2008, 20:40 ]
powinno być ok, ale nie sprawdzałem, bo mecz
#include <amxmodx> new g_gracz[32] // TUTAJ DODASZ ZAKRES IP, NA KTÓRYM MA BYĆ WYMUSZANY TAG, ORAZ TAG. new ipki[4][16]=//16 znakow to maksymalna dlugosc ip, nie ma potrzeby zmieniać { "123.123.123.123", "123.213.213", "123.123", "123" } new tag[4][16]=//16 znakow to maksymalna dlugosc taga, w przypadku dłuższego należy zmienić tą liczbę na ilość znaków taga { "Tag dla 1 ip", "Tag dla 2 ip", "Tag dla 3 ip", "Tag dla 4 ip" } // KOD public plugin_init() { register_plugin("IP Tags","1.0","grankee") } public client_connect(id) { g_gracz[id]=-1 new ip[16],oldname[32],newname[48],i=0 get_user_ip(id,ip,15,1) while(ipki[i][0]) { if (equali(ip,ipki[i])) { get_user_name(id,oldname,31) format(newname,47,"%s%s",tag[i],oldname) set_user_info(id,"name",newname) g_gracz[id]=i return PLUGIN_CONTINUE } } return PLUGIN_CONTINUE } public client_disconnect(id) { g_gracz[id]= -1 } public client_infochanged(id) { if(g_gracz[id]!=-1) { new newname[32],oldname[32],lastname[48] get_user_info(id, "name", newname,31) get_user_name(id,oldname,31) if(!is_user_connected(id) || is_user_bot(id)) return PLUGIN_CONTINUE if(!equali(newname, oldname)) { if(equali(newname,tag[g_gracz[id]])) return PLUGIN_CONTINUE format(oldname,47,"%s%s",tag[g_gracz[id]],newname) set_user_info(id,"name",lastname) return PLUGIN_HANDLED } } return PLUGIN_CONTINUE }
#9
Napisano 15.10.2008 20:26
#10
Napisano 16.10.2008 19:59
#11
Napisano 16.10.2008 21:23
#12 Gość__*
#13
Napisano 16.10.2008 21:38
wpisy z momentu rozpoczecia dzialania plgina
amxmodx/logs/
L 10/15/2008 - 21:26:00: [adminchat.amxx] Chat: "spider<175><STEAM_ID_LAN><>" tsay "restart mapy i test nowego plugina" L 10/15/2008 - 21:26:16: [admincmd.amxx] Cmd: "spider<175><STEAM_ID_LAN><>" changelevel "mini_dust2" L 10/15/2008 - 21:26:18: -------- Mapchange to mini_dust2 -------- L 10/15/2008 - 21:28:38: -------- Mapchange to de_dust2 -------- L 10/15/2008 - 21:29:49: -------- Mapchange to de_dust2 --------
dalej wszystko ok, po restarcie serwera i wylaczeniu plugina wszystko wrocilo do normy
jak widac nie ma przydatnych informacji
#14
Napisano 16.10.2008 22:16
public client_connect(id) { g_gracz[id]=-1 new ip[16],oldname[32],newname[48],i=0 get_user_ip(id,ip,15,1) while(ipki[i][0]) { if (equali(ip,ipki[i])) { get_user_name(id,oldname,31) format(newname,47,"%s%s",tag[i],oldname) set_user_info(id,"name",newname) g_gracz[id]=i return PLUGIN_CONTINUE } } return PLUGIN_CONTINUE }nie widze i++
#15
Napisano 17.10.2008 07:34
#include <amxmodx> new g_gracz[32] // TUTAJ DODASZ ZAKRES IP, NA KTÓRYM MA BYĆ WYMUSZANY TAG, ORAZ TAG. new ipki[][16]=//16 znakow to maksymalna dlugosc ip, nie ma potrzeby zmieniać { "123.123.123.123", "123.213.213", "123.123", "123" } new tag[][16]=//16 znakow to maksymalna dlugosc taga, w przypadku dłuższego należy zmienić tą liczbę na ilość znaków taga { "Tag dla 1 ip", "Tag dla 2 ip", "Tag dla 3 ip", "Tag dla 4 ip" } // KOD public plugin_init() { register_plugin("IP Tags","1.0","grankee") } public client_connect(id) { g_gracz[id]=-1 new ip[16],oldname[32],newname[48],i=0 get_user_ip(id,ip,15,1) while(ipki[i][0]) { if (equali(ip,ipki[i])) { get_user_name(id,oldname,31) format(newname,47,"%s%s",tag[i],oldname) set_user_info(id,"name",newname) g_gracz[id]=i return PLUGIN_CONTINUE } i++ } return PLUGIN_CONTINUE } public client_disconnect(id) { g_gracz[id]= -1 } public client_infochanged(id) { if(g_gracz[id]!=-1) { new newname[32],oldname[32],lastname[48] get_user_info(id, "name", newname,31) get_user_name(id,oldname,31) if(!is_user_connected(id) || is_user_bot(id)) return PLUGIN_CONTINUE if(!equali(newname, oldname)) { if(equali(newname,tag[g_gracz[id]])) return PLUGIN_CONTINUE format(oldname,47,"%s%s",tag[g_gracz[id]],newname) set_user_info(id,"name",lastname) return PLUGIN_HANDLED } } return PLUGIN_CONTINUE }
#16
Napisano 17.10.2008 09:53
if(equali(newname,tag[g_gracz[id]])) return PLUGIN_CONTINUEa nie powinno być:
if(containi(newname, tag[g_gracz[id])!=-1) return PLUGIN_CONTINUETak samo z
if (equali(ip,ipki[i]))IP to liczby i kropki więc wystarczy equal, ale jak w tablicy są
"123.123.123.123", "123.213.213", "123.123", "123"to wypadało by dać jednak contain, żeby można dać na np podsieć całą.
#17
Napisano 17.10.2008 10:29
#include <amxmodx> new g_gracz[32] // TUTAJ DODASZ ZAKRES IP, NA KTÓRYM MA BYĆ WYMUSZANY TAG, ORAZ TAG. new ipki[15][16]=//16 znakow to maksymalna dlugosc ip, nie ma potrzeby zmieniać { "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx", "1xx.xx.xxx" } new tag[15][16]=//16 znakow to maksymalna dlugosc taga, w przypadku dłuższego należy zmienić tą liczbę na ilość znaków taga { "[ds1]", "[ds2]", "[ds2]", "[ds2]", "[ds3]", "[ds4]", "[ds5]", "[ds6]", "[ds7]", "[ds8]", "[ds8]", "[ds9]", "[ds10]", "[ds11]", "[ds5l]" } // KOD public plugin_init() { register_plugin("IP Tags","1.0","grankee") } public client_connect(id) { g_gracz[id]=-1 new ip[16],oldname[32],newname[48],i=0 get_user_ip(id,ip,15,1) while(ipki[i][0]) { if (equali(ip,ipki[i])) { get_user_name(id,oldname,31) format(newname,47,"%s%s",tag[i],oldname) set_user_info(id,"name",newname) g_gracz[id]=i return PLUGIN_CONTINUE } i++ } return PLUGIN_CONTINUE } public client_disconnect(id) { g_gracz[id]= -1 } public client_infochanged(id) { if(g_gracz[id]!=-1) { new newname[32],oldname[32],lastname[48] get_user_info(id, "name", newname,31) get_user_name(id,oldname,31) if(!is_user_connected(id) || is_user_bot(id)) return PLUGIN_CONTINUE if(!equali(newname, oldname)) { if(equali(newname,tag[g_gracz[id]])) return PLUGIN_CONTINUE format(oldname,47,"%s%s",tag[g_gracz[id]],newname) set_user_info(id,"name",lastname) return PLUGIN_HANDLED } } return PLUGIN_CONTINUE }
po wlaczeniu debugowania w logach pojawiaja sie takie bledy:
L 10/17/2008 - 11:01:49: Info (map "mini_dust2") (logfile "error_101708.log") L 10/17/2008 - 11:01:49: [AMXX] Displaying debug trace (plugin "iptag.amxx") L 10/17/2008 - 11:01:49: [AMXX] Run time error 4: index out of bounds L 10/17/2008 - 11:01:49: [AMXX] [0] textL83qqj.sma::client_connect (line 55)
nick gracza sie nie zmienia
ale jesli zmienilem w tablicy ip na jedno konkretne ip to gracz po polaczeniu znika z listy graczy (z listy ktora jest pod Tabem) ale normalnie moze grac Tak jakby mial pusty string w nazwie (chociaz nawet ta pusta nazwa nie jest wyswietlana na liscie)
czekam na dalsze wskazowki
#18
Napisano 17.10.2008 10:32
format(newname,47,"%s%s",tag[i],oldname) set_user_info(id,"name",newname)Tylko że nick ma jednak ograniczenia chyba do 31 znaków
#19
Napisano 17.10.2008 15:56
if (contain(ip,ipki[i])==0)dzięki temu bedzie mozna zdefiniowac ze np. 82.(xxx.xxx.xxx) to np. NEOm a jak ktos ma 92.82.82.82 to to nie uzna za neo choc ma 82. w sobie.
======
public client_connect(id) { g_gracz[id]=-1 new ip[16],oldname[32],newname[48],i=0 get_user_ip(id,ip,15,1) while(ipki[i][0]) { if (equali(ip,ipki[i])) { get_user_name(id,oldname,31) format(newname,47,"%s%s",tag[i],oldname) set_user_info(id,"name",newname) g_gracz[id]=i return PLUGIN_CONTINUE } i++ } return PLUGIN_CONTINUE }nie ma ogranicznika dla 'i'. Czyli petla while bedzie chciala robic i do nieskonczonosci (lub trafienia na podane ip), a ze tablica ma ograniczony zakres, to predzej czy później wywali "index out of bounds"
#20
Napisano 17.10.2008 21:44
while(ipki[i][0])
warunek w nawiasie (ipki[i][0]) to pierwszy znak kolejnego stringa z tablicy ipki, jeśli kolejne ip nie istnieje to nie istnieje też jego pierwszy znak(który jest warunkiem) co za tym idzie pętla się już nie wykona, coś poknociłem?
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych