[Ajuda] Quanto devo usar Maxplayers e playerid
#1

Pessoal isso estou com uma dъvida sobre MAX_PLAYERS e playerid


Eu sei que isso vai para todos os players mais no caso se o JogadorT for reprovado por fica mais de 5 minutos fora de um veнculo, serб que todos os jogadores que tiver com a variaveis do teste serгo reprovados? por causa do loop e do jogadorT ? pois quem deveria ser reprovado sу o jogadorT
Nesse Caso
pawn Код:
Auto_escola(playerid);
public Auto_escola(playerid)
{
    new i;
    while(i < MAX_PLAYERS)
    {
        i++;
        if(Teste_De_Carro[i] == 1 || Teste_De_Moto[i] == 1 || Teste_De_Cam_Oni[i] == 1 || Teste_De_Barco[i] == 1 || Teste_De_Voo[i] == 1 && !IsPlayerInAnyVehicle(i))
        {
            SendClientMessage(i, 0xFA8072FF, "Vocк foi reprovado do teste de habilitaзгo por ficar mais de 5 minutos fora do veнculo da auto escola.");
            PlayerPlaySound(i,1085, 0.0, 0.0, 0.0);
            SetVehicleToRespawn(GetPlayerVehicleID(i));
            DisablePlayerRaceCheckpoint(i);
            SetPlayerVirtualWorld(i, 0);
            SetPlayerInterior(i, 3);
            SetPlayerPos(i, -2023.8905, -114.4800, 1035.1719);
            SetPlayerFacingAngle(i, 93.8901);
            VerificarEtapa[i] = 0;
            Teste_De_Carro[i] = 0;
            Teste_De_Moto[i] = 0;
            Teste_De_Cam_Oni[i] = 0;
            Teste_De_Barco[i] = 0;
            Teste_De_Voo[i] = 0;
            Pontos_Velo[i] = 0;
        }
    }
}
Agora fiz outro sem loop

EXEMPLO: Sou o id 0 e vou fazer o teste, serб que isso sу vai pegar pro id 0? essa funзгo sу irб acionar para o id 0, por causa que ta playerid e nгo o loop, isso que me deixa na dъvida Quando devo usar max_players e playerid



pawn Код:
if(Teste_De_Carro[playerid] == 1 || Teste_De_Moto[playerid] == 1 || Teste_De_Cam_Oni[playerid] == 1 || Teste_De_Barco[playerid] == 1 || Teste_De_Voo[playerid] == 1 && !IsPlayerInAnyVehicle(playerid))
        {
            SendClientMessage(playerid, 0xFA8072FF, "Vocк foi reprovado do teste de habilitaзгo por ficar mais de 5 minutos fora do veнculo da auto escola.");
            PlayerPlaySound(playerid,1085, 0.0, 0.0, 0.0);
            SetVehicleToRespawn(GetPlayerVehicleID(playerid));
            DisablePlayerRaceCheckpoint(playerid);
            SetPlayerVirtualWorld(playerid, 0);
            SetPlayerInterior(playerid, 3);
            SetPlayerPos(playerid, -2023.8905, -114.4800, 1035.1719);
            SetPlayerFacingAngle(playerid, 93.8901);
            VerificarEtapa[playerid] = 0;
            Teste_De_Carro[playerid] = 0;
            Teste_De_Moto[playerid] = 0;
            Teste_De_Cam_Oni[playerid] = 0;
            Teste_De_Barco[playerid] = 0;
            Teste_De_Voo[playerid] = 0;
            Pontos_Velo[playerid] = 0;
        }
Reply
#2

Quando vocк usa playerid, ele esta referindo ao jogador.

Ja quando vocк utilizar MAX_PLAYERS com o loop, ele esta percorrendo em todos.

Exemplos.

pawn Код:
CMD:grana(playerid) {
    for(new i=0; i<MAX_PLAYERS; i++) {
        GivePlayerMoney(i, 50000);
    }
    print("Todos os conectados receberam 50000 reais");
    return 1;
}
Com o loop, ele da 50000 de grana a todos os jogadores conectados, sem exceзхes.

pawn Код:
CMD:grana(playerid) {
    GivePlayerMoney(playerid, 50000);
    printf("O jogador id %d recebeu 50000 reais", playerid);
    return 1;
}
Agora, ele da 50000 de grana apenas pro playerid (jogador que digita o comando).

Espero ter tirado sua duvida.

Abraзos,
Reply
#3

Quote:
Originally Posted by xCR7
Посмотреть сообщение
Quando vocк usa playerid, ele esta referindo ao jogador.

Ja quando vocк utilizar MAX_PLAYERS com o loop, ele esta percorrendo em todos.

Exemplos.

pawn Код:
CMD:grana(playerid) {
    for(new i=0; i<MAX_PLAYERS; i++) {
        GivePlayerMoney(i, 50000);
    }
    print("Todos os conectados receberam 50000 reais");
    return 1;
}
Com o loop, ele da 50000 de grana a todos os jogadores conectados, sem exceзхes.

pawn Код:
CMD:grana(playerid) {
    GivePlayerMoney(playerid, 50000);
    printf("O jogador id %d recebeu 50000 reais", playerid);
    return 1;
}
Agora, ele da 50000 de grana apenas pro playerid (jogador que digita o comando).

Espero ter tirado sua duvida.

Abraзos,
MAX_PLAYERS tambйm pode ser usado para dar o "tamanho" a uma array
Reply
#4

Quote:
Originally Posted by xCR7
Посмотреть сообщение
Quando vocк usa playerid, ele esta referindo ao jogador.

Ja quando vocк utilizar MAX_PLAYERS com o loop, ele esta percorrendo em todos.

Exemplos.

pawn Код:
CMD:grana(playerid) {
    for(new i=0; i<MAX_PLAYERS; i++) {
        GivePlayerMoney(i, 50000);
    }
    print("Todos os conectados receberam 50000 reais");
    return 1;
}
Com o loop, ele da 50000 de grana a todos os jogadores conectados, sem exceзхes.

pawn Код:
CMD:grana(playerid) {
    GivePlayerMoney(playerid, 50000);
    printf("O jogador id %d recebeu 50000 reais", playerid);
    return 1;
}
Agora, ele da 50000 de grana apenas pro playerid (jogador que digita o comando).

Espero ter tirado sua duvida.

Abraзos,
pawn Код:
new i;
    while(i < MAX_PLAYERS)
    {
        i++;
        if(Teste_De_Carro[i] == 1 || Teste_De_Moto[i] == 1 || Teste_De_Cam_Oni[i] == 1 || Teste_De_Barco[i] == 1 || Teste_De_Voo[i] == 1 && !IsPlayerInAnyVehicle(i))
        {
            SendClientMessage(i, 0xFA8072FF, "Vocк foi reprovado do teste de habilitaзгo por ficar mais de 5 minutos fora do veнculo da auto escola.");
            PlayerPlaySound(i,1085, 0.0, 0.0, 0.0);
            SetVehicleToRespawn(GetPlayerVehicleID(i));
            DisablePlayerRaceCheckpoint(i);
            SetPlayerVirtualWorld(i, 0);
            SetPlayerInterior(i, 3);
            SetPlayerPos(i, -2023.8905, -114.4800, 1035.1719);
            SetPlayerFacingAngle(i, 93.8901);
            VerificarEtapa[i] = 0;
            Teste_De_Carro[i] = 0;
            Teste_De_Moto[i] = 0;
            Teste_De_Cam_Oni[i] = 0;
            Teste_De_Barco[i] = 0;
            Teste_De_Voo[i] = 0;
            Pontos_Velo[i] = 0;
        }
    }
Entгo nesse caso eu nгo preciso usar loop, por que й um sistema de auto escola.
ai cada jogador irб fazer sua prуpria aula para poder adquirir sua licenзa, estou certo?
Reply
#5

Quote:
Originally Posted by PetterAdriano
Посмотреть сообщение
pawn Код:
new i;
    while(i < MAX_PLAYERS)
    {
        i++;
        if(Teste_De_Carro[i] == 1 || Teste_De_Moto[i] == 1 || Teste_De_Cam_Oni[i] == 1 || Teste_De_Barco[i] == 1 || Teste_De_Voo[i] == 1 && !IsPlayerInAnyVehicle(i))
        {
            SendClientMessage(i, 0xFA8072FF, "Vocк foi reprovado do teste de habilitaзгo por ficar mais de 5 minutos fora do veнculo da auto escola.");
            PlayerPlaySound(i,1085, 0.0, 0.0, 0.0);
            SetVehicleToRespawn(GetPlayerVehicleID(i));
            DisablePlayerRaceCheckpoint(i);
            SetPlayerVirtualWorld(i, 0);
            SetPlayerInterior(i, 3);
            SetPlayerPos(i, -2023.8905, -114.4800, 1035.1719);
            SetPlayerFacingAngle(i, 93.8901);
            VerificarEtapa[i] = 0;
            Teste_De_Carro[i] = 0;
            Teste_De_Moto[i] = 0;
            Teste_De_Cam_Oni[i] = 0;
            Teste_De_Barco[i] = 0;
            Teste_De_Voo[i] = 0;
            Pontos_Velo[i] = 0;
        }
    }
Entгo nesse caso eu nгo preciso usar loop, por que й um sistema de auto escola.
ai cada jogador irб fazer sua prуpria aula para poder adquirir sua licenзa, estou certo?
Sim, nгo ha a necessidade de criar um loop.

Abraзos,
Reply
#6

Nгo hб necessidade de usar um loop, jб que o sistema que vocк quer fazer й individual.
MAX_PLAYERS, tem o valor por padrгo de 500. Isto й, quando vocк declara uma variбvel com a definiзгo MAX_PLAYERS vocк esta na verdade criando um vetor com 500 posiзхes.

Um exemplo bem bбsico:
pawn Код:
new Vetor[MAX_PLAYERS] = { 'h','e','l','l','o', ' ', 'd','a','r','k','n','e','s','s',' ','m','y',' ','o','l','d',' ','f','r','i','e','n','d' };
printf(Vetor);
Vai imprimir: hello darkness my old friend

Como o PT disse, MAX_PLAYERS й apenas um tamanho.
Reply
#7

Quote:
Originally Posted by xCR7
Посмотреть сообщение
Sim, nгo ha a necessidade de criar um loop.

Abraзos,
Eu fiz isso e testei comigo e com meu irmгo, mais a funзгo sу pegou para o id 0 e nгo para os outros id's
Reply
#8

lembrando que vocк tambйm tem que tirar o conceito de:
"sу pode usar playerid quando usar maxPlayers"
"Loop serve para pegar todos os Players".
Etc..

Tens que aprender o conceito de cada um e porque utiliza para isso. Entгo procure pesquisar por partes.
Reply
#9

Quote:
Originally Posted by JonathanFeitosa
Посмотреть сообщение
lembrando que vocк tambйm tem que tirar o conceito de:
"sу pode usar playerid quando usar maxPlayers"
"Loop serve para pegar todos os Players".
Etc..

Tens que aprender o conceito de cada um e porque utiliza para isso. Entгo procure pesquisar por partes.
Foda... й isso que to confuso de mais
Reply
#10

Quote:
Originally Posted by PetterAdriano
Посмотреть сообщение
Foda... й isso que to confuso de mais
loops sгo estruturas de repetiзгo.
Sabendo disso, em qual ocasiгo devemos usб-las?

Digamos que vocк queira dar grana a todos os jogadores, vocк faria...
pawn Код:
GivePlayerMoney(0, 1000);
GivePlayerMoney(1, 1000);
GivePlayerMoney(2, 1000);
// ... atй chegar ao nъmero total desejado
Assim?

Nгo, seria muito cansativo!
Entгo sгo nessas ocasiхes que o loop for й bem empregado!
O for tem 3 especificaзхes:
onde comeзa
onde termina
quanto serб o incremento ou decremento por volta

Portanto, no exemplo acima poderнamos fazer assim:
pawn Код:
for ( new i = 0; i < MAX_PLAYERS; i++ ) GivePlayerMoney(i, 1000);
Muito mais fбcil!

Jб o loop while, й executado enquanto uma condiзгo for verdadeira.
O while й mais lento que o for e й bastante usado em C/C++ na construзгo de menus.

Sobre a parte do playerid e MAX_PLAYERS, basta ver a minha primeira resposta. Caso nгo tenha entendido a minha explicaзгo, sinta-se livre para perguntar!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)