Jump to content
  • 0

Nu imi verifica daca player-ul este conecat


Matei02Mihai

Question

Salut. Am incercat sa fac urmatoarea comanda, dar nu inteleg de ce nu imi verifica daca playerul nu este conectat.

Orice as scrie dupa /id in chat, comanda se comporta ca si cum ar fi conectat acel player pe server.

 

Quote
CMD:id(playerid, params[]){
    new playername[30];
    if(sscanf(params, "s[30]", playername)) return SendClientMessage(playerid, -1, "/id [playername]");
    else{
        new id = GetPlayerID(playername);
        if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Acel player nu este conectat!");
        else{
            new string[256];
            format(string, sizeof(string), "id-ul player-ului %s este %i.", playername, id);
            SendClientMessage(playerid, -1, string);
        }
    }
    return 1;
}
Quote
62     stock GetPlayerID(playername[]){
             new x;
             foreach(Player, i)
                 if(strcmp(playername, ReturnPlayerName(i), false, 30)) x = i;
             return x;
         }
Quote
stock ReturnPlayerName(playerid){
    new name[24];
    GetPlayerName(playerid, name, sizeof(name));
    return name;
}

 

erori.PNG

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Modifica in functia "GetPlayerID" linia 

if(strcmp(playername, ReturnPlayerName(i), false, 30)) x = i;

in 

if(!strcmp(playername, ReturnPlayerName(i), false, 30)) x = i;

 

Trebuie sa faci asta deoarece functia "strcmp" returneaza 0 daca cele 2 string-uri sunt la fel. Si returneaza 1 sau -1 daca nu sunt la fel.
Deci, cum ai tu acum in cod, iti apeleaza "x = i" pentru fiecare jucator care NU are acelasi nume cu cel pe care l-ai scris in comanda.

Discord:
! Akan !#6675

Link to comment
Share on other sites

  • 0
On 8/10/2022 at 10:25 PM, Vicentzo- said:

Salut, incearca sa stergi acel 'else' de la comanda dupa acea verificare cu sscanf si incearca iar

 

On 8/11/2022 at 4:24 PM, Akan said:

Modifica in functia "GetPlayerID" linia 

if(strcmp(playername, ReturnPlayerName(i), false, 30)) x = i;

in 

if(!strcmp(playername, ReturnPlayerName(i), false, 30)) x = i;

 

Trebuie sa faci asta deoarece functia "strcmp" returneaza 0 daca cele 2 string-uri sunt la fel. Si returneaza 1 sau -1 daca nu sunt la fel.
Deci, cum ai tu acum in cod, iti apeleaza "x = i" pentru fiecare jucator care NU are acelasi nume cu cel pe care l-ai scris in comanda.

Am incercat ambele sugestii, dar niciun rezultat. Am incercat si cu functia de mai jos, prin metoda pe care @Akan mi-a recomandat-o. Am pus comanda pe alt server, crezand ca problema o fi de la serverul pe care am, aceeasi problema, dar nimic. Am inceput sa cred ca problema e din exterior, si nu de la vreun script din alea pe care vi le-am aratat. O sa caut pe net, poate gasesc niste include-uri fixate. Va multumesc pentru ajutor!

 

Quote
forward GetPlayerID(playername[]);
public GetPlayerID(playername[]){
    new pname[256];
    foreach(Player, i){
        GetPlayerName(i, pname, sizeof(pname));
        if(!strcmp(playername, pname, true, 32))
            return i;
    }
}

 

Edited by Matei02Mihai
Am uitat sa adaug comanda de care vorbeam
Link to comment
Share on other sites

  • 0

Dar nu asa ti-am spus sa faci.

Uite asa ti-am spus:

stock GetPlayerID(playername[]){
             new x;
             foreach(Player, i)
                 if(!strcmp(playername, ReturnPlayerName(i), false, 30)) x = i;
             return x;
         }

 

Discord:
! Akan !#6675

Link to comment
Share on other sites

  • 0
20 hours ago, Akan said:

Dar nu asa ti-am spus sa faci.

Uite asa ti-am spus:

stock GetPlayerID(playername[]){
             new x;
             foreach(Player, i)
                 if(!strcmp(playername, ReturnPlayerName(i), false, 30)) x = i;
             return x;
         }

 

M-am uitat acum mai atent si am observat ca functia returneaza 0 daca nu gaseste un jucator cu acel nume, iar aceasta trebuie de fapt sa returneze INVALID_PLAYER_ID;

Asa trebuie sa fie functia:
 

stock GetPlayerID(playername[]) {
      foreach(Player, i)
              if(!strcmp(playername, ReturnPlayerName(i), false, 30)) return i;
      return INVALID_PLAYER_ID;
}

 

  • Upvote 1

Discord:
! Akan !#6675

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.