←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Konsola serwera nie moze dać bana


Best Answer grankee 14.11.2014 00:50

@radim 

if(!cmd_access(id,level,cid) && id!=0)
        return PLUGIN_HANDLED

Nieważne, że część warunku

id!=0 

zostanie spełniona, bo jeżeli admin będzie miał odpowiednią flagę to część warunku

!cmd_access(id,level,cid)

nie zostanie spełniona, a co zatym idzie nie dojdzie to przerwania działania funkcji, ponieważ 

&&

oznacza, że aby całość była spełniona muszą być spełnione jej obie części.

Admin z odpowiednią flagą zatem będzie mógł dać bana.

Go to the full post

  • +
  • -
Andrzejek's Photo Andrzejek 10.11.2014

Witam, mam taki problem, ponieważ konsola serwera czyli dokładnie tak:

 

server_cmd("amx_ban 15 %s VoteBan", szNameOfiara)

 

szNameOfiara - zawiera nick ofiary do zbanowania

 

próbowałem tak nawet

 

server_cmd("amx_ban ^"15^" #%d ^"VoteBan^"", get_user_userid(id_ofiary))

 

server_cmd("amx_ban ^"15^" %s ^"VoteBan^"", szNameOfiara)

 

I serwer to wykonuje, to potem cisza, nie daje bana. Nie wiem w czym jest problem, sprawdzałem nawet z tego: http://amxx.pl/topic...ans-brak-spamu/ i tak samo cisza. Wie może dlaczego tak się dzieje ??

Quote

  • +
  • -
GwynBleidD's Photo GwynBleidD 10.11.2014

Zerknij w plugin od banów jakiego typu jest komenda amx_ban i czy sprawdza uprawnienia również od serwera.

 

Jeśli jest register_clcmd, dodaj register_srvcmd na funkcję która pominie sprawdzanie uprawnień

 

Jeśli jest register_concmd lub register_clcmd i register_srvcmd kierujące na tą samą funkcję sprawdzającą uprawnienia bez względu na to, czy wykonuje ją gracz czy serwer, rozdziel to.

Quote

  • +
  • -
Andrzejek's Photo Andrzejek 10.11.2014

register_concmd

Nie bardzo rozumiem o co chodzi :(

Quote

  • +
  • -
sebul's Photo sebul 11.11.2014

Jak jest tylko "register_concmd" to nie dziw się, że funkcja nie działa, jeśli serwer coś wysyła.
Quote

  • +
  • -
GwynBleidD's Photo GwynBleidD 11.11.2014

register_concmd akurat rejestruje zarówno dla gracza jak i dla serwera :)

 

Są 2 rodzaje komend w AMXX, komenda klienta i komenda serwera. Komendę klienta tworzysz poprzez register_clcmd, a serwera poprzez register_srvcmd. Istnieje jeszcze register_concmd która po prostu rejestruje tą samą komendę zarówno dla klienta jak i dla serwera.

 

I teraz uprawnienia:

Jeśli w funkcji sprawdzasz uprawnienia, nie sprawdzając czy komenda została wywołana przez klienta czy przez serwer, to w 90% przypadków wywołania jej przez serwer komenda się nie powiedzie, bo serwer NIE POSIADA ŻADNYCH FLAG. No chyba, że mu je przydzielisz :) (to jest te 10% przypadków). Dlatego jeśli posiadasz komendę wymagającą sprawdzenia uprawnień, zarejestruj ją na 2 sposoby, z czego komendę serwera pozbawisz sprawdzania uprawnień.

 


sebul (11.11.2014 22:42):
Nie wiem czemu myślałem o "register_clcmd" a pisałem o "register_concmd". Pewnie przez godzinę...
Quote

  • +
  • -
Rivit's Photo Rivit 11.11.2014

@Gwyn

Mam ten sam problem (ale z kickiem). Czyli jak dodam serwerowi wszystkie flagi (oprócz z) to będzie działać poprawnie?
Quote

  • +
  • -
GwynBleidD's Photo GwynBleidD 11.11.2014

napisałem wyżej co jest DOBRYM rozwiązaniem. Dawanie serwerowi flag NIE jest.

Quote

  • +
  • -
Andrzejek's Photo Andrzejek 11.11.2014

register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<time in mins> <steamID or nickname or #authid or IP> <reason>")

Czyli działa dla osób, które mają falgę ban, to jak mam to teraz zrobić, mam zarejestrować register_srvcmdfavicons.png w pluginie w amxbans i wklepać komende do pluginu gdzie chce dać bana ??

Quote

  • +
  • -
grankee's Photo grankee 13.11.2014

na początku funkcji przypisanej do tej komendy masz coś w stylu

public cmdBan(id,level,cid,3)
{
     if(!cmd_access(id,level,cid))
         return PLUGIN_HANDLED
......

wystarczy tutaj dodać warunek że jeśli jest serverem to też przejdzie np.

if(!cmd_access(id,level,cid) && id!=0)
        return PLUGIN_HANDLED

o ile kojarzę, ale mogę się mylić, to server ma id=0.

Więc ten warunek zatrzyma akcję jeśli wykonujący nie ma odpowiedniej flagi oraz nie jest serwerem.

Jeśli więc będzie serwerem to akcja się nie zatrzyma.


Edited by grankee, 13.11.2014 02:50.
Quote

  • +
  • -
radim's Photo radim 13.11.2014

na początku funkcji przypisanej do tej komendy masz coś w stylu

public cmdBan(id,level,cid,3)
{
     if(!cmd_access(id,level,cid))
         return PLUGIN_HANDLED
......

wystarczy tutaj dodać warunek że jeśli jest serverem to też przejdzie np.

if(!cmd_access(id,level,cid) && id!=0)
        return PLUGIN_HANDLED

o ile kojarzę, ale mogę się mylić, to server ma id=0.

Więc ten warunek zatrzyma akcję jeśli wykonujący nie ma odpowiedniej flagi oraz nie jest serwerem.

Jeśli więc będzie serwerem to akcja się nie zatrzyma.

I wtedy admin (gracz z odpowiednią flagą przypisaną dla tej komendy) też nie będzie mogł dawać bana bo nie jest serwerem. Zamiat koniunkcji dałbym alternatywę

Quote

  • +
  • -
Andrzejek's Photo Andrzejek 13.11.2014

Ale właśnie nie ma takiej funkcji w pluginie z amxbans tylko jest zrobione w include :)

 

@radim a dokładnie?? :0

Attached Files

Quote

  • +
  • -
Best Answer grankee's Photo grankee 14.11.2014

@radim 

if(!cmd_access(id,level,cid) && id!=0)
        return PLUGIN_HANDLED

Nieważne, że część warunku

id!=0 

zostanie spełniona, bo jeżeli admin będzie miał odpowiednią flagę to część warunku

!cmd_access(id,level,cid)

nie zostanie spełniona, a co zatym idzie nie dojdzie to przerwania działania funkcji, ponieważ 

&&

oznacza, że aby całość była spełniona muszą być spełnione jej obie części.

Admin z odpowiednią flagą zatem będzie mógł dać bana.

Quote