Skocz do zawartości
normalnie

[Rozwiązane] Funkcja ma sprawdzać czy gracz jest adminem.

Rekomendowane odpowiedzi

Jest sobie funkcja  (w pluginie, który był wcześniej nie działała i trochę go przekształciłem, aby sprawdzić czy działa tak sama z siebie)

bool jestADMIN(int client){
    if(GetUserFlagBits(client) & ADMFLAG_BAN) return true;

    return false;
}

i chyba powinna działać. Lecz gdy ją wepnę do reszty kodu:

#include <sourcemod>
#include <multicolors>

public void OnPluginStart(){
    RegConsoleCmd("sm_isadmin", admin);
}

public Action admin(int client, int args){
    if (jestADMIN(client)) {
        CPrintToChat(client, "[{red}ADMIN{default}] {green}%N jest na serwerze!", client); // Admin = kolor czerwony; nie admin = kolor niebieski
    }
    else CPrintToChat(client, "[{blue}ADMIN{default}] {green}%N jest na serwerze!", client);
    return Plugin_Handled;
}

bool jestADMIN(int client){
    if(GetUserFlagBits(client) & ADMFLAG_BAN) return true;

    return false;
}

Jestem dodany do adminów, a jednak po wpisaniu komendy wywołuje się 

    else CPrintToChat(client, "[{blue}ADMIN{default}] {green}%N jest na serwerze!", client);

Coś robię źle? Proszę o pomoc 😄

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość

Warunki zawsze neguj jeśli tylko możesz.

if(!jestADMIN(client)) { }

 

Chociaż nie wydaje mi się, by było to problemem. Możesz na serwerze wpisać sm_who ? 😛 

Z tego co zauważyłem, to flaga "Z" sama w sobie nie daje fizycznie wszystkich flag po kolei, tylko jakby ich permisje no.

To znaczy, że ta funkcja pokaże Ci false gdy zapytasz o flagę np ADMFLAG_CUSTOM1, mając flagę AMDFLAG_ROOT. To sprawdzałem, z ADMFLAG_BAN może być podobnie. Check it out 😛

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
6 godzin temu, SUPER TIMOR napisał:

Warunki zawsze neguj jeśli tylko możesz.

if(!jestADMIN(client)) { }

 

Chociaż nie wydaje mi się, by było to problemem. Możesz na serwerze wpisać sm_who ? 😛 

Z tego co zauważyłem, to flaga "Z" sama w sobie nie daje fizycznie wszystkich flag po kolei, tylko jakby ich permisje no.

To znaczy, że ta funkcja pokaże Ci false gdy zapytasz o flagę np ADMFLAG_CUSTOM1, mając flagę AMDFLAG_ROOT. To sprawdzałem, z ADMFLAG_BAN może być podobnie. Check it out 😛

Miałeś rację, zmiana typu flagi na ADMFLAG_ROOT okazała się być prawidłowym rozwiązaniem, dzięki 😄

Wiesz może czy dało się jakby przeformatować typ  zmiennej z CHAR do INT i w jaki sposób to zrobić? Chodzi o to, że np. jest komenda !hp <wartość> i ma ustawić hp na taką wartość, tyle że funkcja GetCmdArgString zapisuje w zmiennej typie char, a potrzebuję zamienić ten typ na int. Z góry dzięki 🙂 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość

    char argument[64];
    GetCmdArg(numer_argumentu, argument, sizeof(argument));

    int argument_jako_int = StringToInt(argument);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki wszystkim za pomoc, miło, że są tacy ludzie, którzy z chęcią pomagają 😄 

Szacun 💪

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

Jeżeli się z tym nie zgadzasz, raportuj ten post

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...