Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

2 problemy get_user_name i isalpha


  • Zamknięty Temat jest zamknięty
10 odpowiedzi w tym temacie

#1 ZiuTeK

    Wszechwiedzący

  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:507
  • Lokalizacja:inąd
Offline

Napisano 06.01.2011 12:12

Witam, mam obecnie 2 problemy z ktorymi nie moge sobie poradzic.
1. Chce sprawdzic czy podany ciag znakow zawiera litery, zrobilem przykladowy plugin korzystajac z dokumentacji zamieszczonej na stronie ale cos nie chce mi to dzialac
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_concmd("amx_sprawdz","sprawdz_tekst",ADMIN_KICK,"<wpisz podany tekst do sprawdzenia>")
}
public sprawdz_tekst(id)
{
	new sArg[32];
	read_argv(1, sArg, sizeof sArg - 1);
	if(isalpha(sArg[31]))
                console_print(id, "Podany ciag znakow to litery")
}
Funkcja wyswietla sie kazdemu ale niczego nie zwraca niezaleznie czy wpisze 1, a, czy jakis tekst.

2. Mam plugin w ktorym sprawdzam w public infochanged czy zmienil nicka i wywoluje funkcje "sprawdz"
W funkcji sprawdz gdy pobieram jego nowego nicka przez funkcje
get_user_name(index,name,sizeof(name)-1
) nie uzyskuje zadnych rezultatow, tak jakby gracz gral dalej na tym samym nicku
dziala zas przez funkcje
get_user_info(index,"name",sUserInfo,sizeof sUserInfo -1)
Funkcja dziala ale nie bedzie przez to kompatybilna chyba z jakimis pluginami typu diablo gdzie musze blokowac zmiane nicku gracza. Przynajmniej tak mi sie wydaje. Jest ktos w stanie na to zaradzic lub rozwiac moje watpliwosci ?
  • +
  • -
  • 1

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 06.01.2011 13:49


public sprawdz_tekst(id)

{

	new sArg[32];

	read_argv(1, sArg, sizeof sArg - 1);

	for(new i = 0;i<strlen(sArg);i++){

		if(!isalpha(sArg[i])){

			return 0;

		}

	}

	console_print(id, "Podany ciag znakow to litery")

	return 1;

}

  • +
  • -
  • 1

#3 ZiuTeK

    Wszechwiedzący

  • Autor tematu
  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:507
  • Lokalizacja:inąd
Offline

Napisano 06.01.2011 17:26

dzięki, szkoda ze musi sprawdzac wszystkie znaki zeby zwrocic ta wartosc no ale jesli nie ma gotowej funkcji to trzeba bedzie tak.

Moze ktos zna odpowiedz na drugie pytanko? Dlaczego funkcja get_user_name nie dziala przy takim wywolaniu ? Czy potrzeba jakiegos opoznienia zeby ponownie pobrac name od gracza czy problem jest gdzie indziej ? W sumie przez get_user_info name tez pobieram dane od gracza i wszystko jest ok.
Kawalki kodu:
public client_infochanged(id)
{
    static sNewName[32], sOldName[32];
    
    get_user_name(id, sOldName, sizeof sOldName - 1);
    get_user_info(id, "name", sNewName, sizeof sNewName - 1);
    
    if(!equali(sNewName, sOldName))
        //set_task(0.5,"CheckAdmin",id)
	CheckAdmin(id)
}

i w ChceckAdmin(id)
stock CheckAdmin(index)
{
    static sUserInfo[32],haselko[32]
    get_user_info(index,"name",sUserInfo,sizeof sUserInfo -1)
a gdy dam
get_user_name(index,sUserInfo,sizeof sUserInfo-1)
to tak jakby gracz nie zmienil nicka i dopiero gdy ponownie go zmieni funkcja zaskakuje ale wywala gracza pomimo, ze ma nick adminowski.
Czy to moze dlatego ze nie jest to public tylko stock ?
Przerabiam plugin Temporary Admin by Alka i dziala wszystko ladnie, przydziela admina na nick, pobiera jego haslo z setinfo _pw tylko to glupie name nie jest pobierane.

Użytkownik ZiuTeK edytował ten post 06.01.2011 17:27

  • +
  • -
  • 0

#4 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 06.01.2011 17:33

AMX Mod X - Half-Life Scripting for Pros!
nawet tam autor pobiera stary nick poprzez get_user_name czyli można wnioskować że jest to forward pre czyli wykonywany zanim zmiana "dojdzie do końca" :)
  • +
  • -
  • 0

#5 ZiuTeK

    Wszechwiedzący

  • Autor tematu
  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:507
  • Lokalizacja:inąd
Offline

Napisano 06.01.2011 19:21

No dobra, teraz moje pytanie jest takie, jak wykryc kiedy zmiana juz dojdzie konca zebym mogl wtedy ponowic get_user_name w funkcji AdminCheck ?
Czy wystarczy jakies opoznienie przy wywolywaniu funkcji AdminCheck czy tez trzeba jakos inaczej z tym kombinowac ?
  • +
  • -
  • 0

#6 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 06.01.2011 19:46

tak daj set_task np 0.1 i all ok powinno być :)
  • +
  • -
  • 0

#7 ZiuTeK

    Wszechwiedzący

  • Autor tematu
  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:507
  • Lokalizacja:inąd
Offline

Napisano 06.01.2011 20:17

No niestety, dalem nawet na 0.5 i w niczym to nie pomoglo, probowalem w public client_infochanged(id)przed wywolaniem checkadmin ustawic jeszcze nicka przez set_user_name ale zonk, funkcja nie wykryta, w dokumentacji tez jej nie ma a w wielu pluginach w googlach znalazlem ta komende.
Moje pomysly sie skonczyly bo proba wywolania client_cmd(id,"name ... raczej nie ma sensu bo gracz w ten sam sposob zmienil przeciez nicka. Jeszcze jakis pomysl komus zawital do glowy ? :D będę bardzo wdzieczny ;P
  • +
  • -
  • 0

#8 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 06.01.2011 20:39

set_pev + pev_netname
po za tym po co ci get_user_name
jeśli
get_user_info(id, "name", sNewName, sizeof sNewName - 1);
działa dobrze :)
przyznam że nie rozumiem do końca co chcesz osiągnać
  • +
  • -
  • 0

#9 ZiuTeK

    Wszechwiedzący

  • Autor tematu
  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:507
  • Lokalizacja:inąd
Offline

Napisano 06.01.2011 21:09

No chcialem, zeby pobierac name gracza a nie jego info "name" bo z tego co zauwazylem chyba na diablo przy pluginie blokada nicka bylo cos takiego, mialem nicka gracz1, zmienilem go na gracz2 i chociaz moj nick na serwerze sie nie zmienil to w setinfo name mialem ten nick gracz2.
Problem byl przez to, ze chyba zle wywolywalem stocka CheckAdmin
dawalem komende set_task(0.1,"CheckAdmin",id) a w sumie nie wiem jak to zrobic prawidlowo, po zamianie stocka na public CheckAdmin wszystko dziala jak nalezy i pobiera nicka.
Jesli ktos potrafi mi to wytlumaczyc dlaczego tak sie dzieje, jak uzyc poprawnie set_task do stock-a dam plusika ;P

Edited, wlasnie ponownie odwiedzilem diablo i pomimo ze nick sie nie zmienil to zmienilo sie zarowno name jak i setinfo name :D Tyle kombinacji bez potrzeby ;P No ale dobra, moje pytanie o tego stocka i set_task nadal aktualne.

Użytkownik ZiuTeK edytował ten post 06.01.2011 21:15

  • +
  • -
  • 0

#10 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 06.01.2011 21:27

stocki podobnie jak zwykłe funkcje są zamknięte jakby w pluginie i nikt poza samym pluginem nie może ich wywoływać; set_task powoduje próbę wywołania funkcji przez moduł, czyli z zewnątrz a tam dostępne są tylko funkcje publiczne
  • +
  • -
  • 1

#11 ZiuTeK

    Wszechwiedzący

  • Autor tematu
  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:507
  • Lokalizacja:inąd
Offline

Napisano 06.01.2011 21:44

Dziekuje za odpowiedz i oczywiscie plusik. Temacik mozna zamknac :P

Użytkownik ZiuTeK edytował ten post 06.01.2011 21:47

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych