[DUVIDA]Duvida no uso do else if
#1

Eu nгo entendi ainda quando se deve usar o else if. O ulso apenas do else eu ja tenho uma idйia de como usar, por exemplo :
pawn Код:
if (APlayerData[playerid][LoggedIn] == true)
    {
        if (sscanf(params, "us[128]", OtherPlayer, Message)) SendClientMessage(playerid, 0xFF0000AA, "Use: /pm [id] [menssagem]");
        else
        {
            if (IsPlayerConnected(OtherPlayer))
            {
                if (APlayerData[playerid][Muted] == false)
                {
                    GetPlayerName(playerid, YourName, sizeof(YourName));
                    GetPlayerName(OtherPlayer, OtherPlayerName, sizeof(OtherPlayerName));
                    format(Msg1, 128, "{808080}PM para %s{FFFFFF}: %s", OtherPlayerName, Message);
                    format(Msg2, 128, "{A0A0A0}PM de %s{FFFFFF}: %s", YourName, Message);
                    SendClientMessage(playerid, 0xFFFFFFFF, Msg1);
                    SendClientMessage(OtherPlayer, 0xFFFFFFFF, Msg2);
                }
                else
                    SendClientMessage(playerid, 0xFF0000FF, "Vocк ainda estб mudo.");
            }
            else
                SendClientMessage(playerid, 0xFF0000FF, "O jogador nгo estб online.");
        }
    }
Nesse caso aqui o else verifica se o if й verdadeiro caso o contrario ele executa oque tem dentro do else no caso as menssagens.

Sу que tem alguns comandos que vejo que usam else if que na minha cabeзa sу o if ja faria a mesma funзгo como nesse caso :
pawn Код:
CMD:ejetar(playerid, params[])
{
    new ID;
    new motorista = GetPlayerState(playerid);
    if(sscanf(params, "u", ID)) return SendClientMessage(playerid, -1, "Utilize /ejetar [ID]");
    new passageiro = GetPlayerState(ID);
    new Carro = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Й preciso estar em um veнculo!");
    else if(motorista !=  PLAYER_STATE_DRIVER) return SendClientMessage(playerid, -1, "Й preciso ser o motorista do veнculo!");
    else if(!IsPlayerConnected(ID)) return SendClientMessage(playerid, -1, "Jogador nгo conectado!");
    else if(!IsPlayerInVehicle(ID, Carro)) return SendClientMessage(playerid, -1, "O jogador nгo estб no seu carro!");
    else if(passageiro != PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, -1, "Esse player nгo й o passageiro!");
    RemovePlayerFromVehicle(ID);
    SendClientMessage(ID, -1, "O motorista te expulsou do carro!");
    SendClientMessage(playerid, -1, "Vocк expulsou o passageiro com sucesso!");
    return 1;
}
Aqui nesse caso nгo basta usar sу o if? sem o else? .


agora usando outro exemplo, eu um comando de dialog :
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == Tutorial)
    {
        if(response)
        {
            if(listitem == 0)
            {
                SetPlayerInterior(playerid, 0);
                SetPlayerPos(playerid,Float:x,Float:y,Float:z);
                SendClientMessage(playerid, COLOR_RED, "[INFO] Vocк teletransportou para o Teleporte nъmero 1.");
                return 1;
            }
            else if(listitem == 1) // aqui
            {
                SetPlayerInterior(playerid, 0);
                SetPlayerPos(playerid,Float:x,Float:y,Float:z);
                SendClientMessage(playerid, COLOR_RED, "[INFO] Vocк teletransportou para o Teleporte nъmero 2.");
            }
        }
    }
    return 1;
}
porque esse else if(lititem == 1) ? nгo bastava sу usar : if(listitem ==1)? ja que o if ja tem a funзгo de verificar se oque estб dentro do ()?

Entгo resumindo, a minha duvida seria quando usar o else if e se й realmente necessario usa-lo .
Reply
#2

Vocк deve usar else caso n for exemplo

pawn Код:
if(pAdmin[playerid] == 5)
{
     //funзгo
}
else //caso nгo for o adm level 5
{
     //funзгo
}
return 1;
}

//agora outro geito
if(pAdmin[playerid] == 5)
{
     //funзгo
}
else if(pAdmin[playerid] == 4) //caso nгo for o adm level 5 mais for adm level 4
{
     //ai terб outra funзгo
}
return 1;
}

//so tentei explicar mais isso й usado em Dialogs e distancias de Locais pelo menos eu uso mais para isso
Se quiser outros exemplos ^^ tamo ai
Reply
#3

PHP код:
if(condicao) {
}
else {
    
// Ocorre caso condiзгo for falso.

PHP код:
if(condicao) {
}
else if(
condicao2) {
    
// Ocorre caso condicao for falso e condicao2 verdadeiro

Reply
#4

Код:
if(PlayerInfo[playerid][pAdmin] == 1) //caso seja admin nivel 1
{
     SendClientMessage(playerid, -1, "Vocк й admin nivel 1.");
}
else if(PlayerInfo[playerid][pAdmin] == 2) //caso seja admin nivel 2
{
    SendClientMessage(playerid, -1, "Vocк й admin nivel 2.");
}
else //caso nao for nenhum dos acima
{
   SendClientMessage(playerid, -1, "vocк nгo й admin 1 e nem 2");
}
Coloquei cуdigo porque nгo sei explicar bem, mas й como o Jason do mal disse.
Reply
#5

Sky Entгo deixa eu ver se eu entendi sobre a sua explicaзгo, caso ja tenha um if verificando 1 coisa citando seu exemplo o : if(pAdmin[playerid] == 5) E no mesmo comando ter outra opзгo para o admin de outro level por exemplo : else if(pAdmin[playerid] == 4) < nesse caso teria que usar o else if й necessario porque ja checa basicamente a mesma coisa que o primeiro if certo?


-------------------
// essa duvida mesmo й mais porque tambem eu imaginava que sу usava o else if se tive-se ja sу 1 if ai seria necessario usar o else if porque olha esse comando de um evento :
pawn Код:
if(strcmp(cmd, "/destrancarevento", true) == 0)
    {
        if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, VERMELHO, "[ERRO] Vocк deve estar logado na Rcon!");
        if(!Evento[Criado]) return SendClientMessage(playerid, VERMELHO, "[ERRO] Nгo existe um evento criado!");
        if(!Evento[Trancado]) return SendClientMessage(playerid, VERMELHO, "[ERRO] O Evento nгo estб trancado!");
        Evento[Trancado] = false;
        GetPlayerName(playerid, n, MAX_PLAYER_NAME);
        format(String, sizeof String, "[INFO] O Administrador %s Destrancou o evento! Use: /irevento", n);
        SendClientMessageToAll(AMARELO, String);
        return 1;
    }
Aqui nesse comando tem 3 if e sobre coisas diferentes.

mais em outro exemplo
pawn Код:
CMD:ejetar(playerid, params[])
{
    new ID;
    new motorista = GetPlayerState(playerid);
    if(sscanf(params, "u", ID)) return SendClientMessage(playerid, -1, "Utilize /ejetar [ID]");
    new passageiro = GetPlayerState(ID);
    new Carro = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Й preciso estar em um veнculo!");
    else if(motorista !=  PLAYER_STATE_DRIVER) return SendClientMessage(playerid, -1, "Й preciso ser o motorista do veнculo!");
    else if(!IsPlayerConnected(ID)) return SendClientMessage(playerid, -1, "Jogador nгo conectado!");
    else if(!IsPlayerInVehicle(ID, Carro)) return SendClientMessage(playerid, -1, "O jogador nгo estб no seu carro!");
    else if(passageiro != PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, -1, "Esse player nгo й o passageiro!");
    RemovePlayerFromVehicle(ID);
    SendClientMessage(ID, -1, "O motorista te expulsou do carro!");
    SendClientMessage(playerid, -1, "Vocк expulsou o passageiro com sucesso!");
    return 1;
}
Aqui ja ta usando else if sу que com sua explicaзгo sky ai й usado quando ja tem 1 if falando sobre a mesma coisa aqui no caso й sobre coisas diferentes... pode me explicar porque?
Reply
#6

Cara foi Bobagem mesmo usar 3 else if Pois ele poderia ter definido tudo somente assim


pawn Код:
CMD:ejetar(playerid, params[])
{
    new ID;
    new motorista = GetPlayerState(playerid);
    if(sscanf(params, "u", ID)) return SendClientMessage(playerid, -1, "Utilize /ejetar [ID]");
    new passageiro = GetPlayerState(ID);
    new Carro = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Й preciso estar em um veнculo!");
    if(motorista !=  PLAYER_STATE_DRIVER) return SendClientMessage(playerid, -1, "Й preciso ser o motorista do veнculo!");
    if(!IsPlayerConnected(ID)) return SendClientMessage(playerid, -1, "Jogador nгo conectado!");
    if(!IsPlayerInVehicle(ID, Carro)) return SendClientMessage(playerid, -1, "O jogador nгo estб no seu carro!");
    if(passageiro != PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, -1, "Esse player nгo й o passageiro!");
    RemovePlayerFromVehicle(ID);
    SendClientMessage(ID, -1, "O motorista te expulsou do carro!");
    SendClientMessage(playerid, -1, "Vocк expulsou o passageiro com sucesso!");
    return 1;
}
//tambem daria o mesmo resultado Mais que nem eu te disse й so ver o meu Post ai mais
// o else if pode ser melhor n sei mas raramente eu uso no meu GM


o else e definido somente para dizer a nos tipo

else = se n for

else if(funзгo) = se for outra funзгo
Reply
#7

pawn Код:
new teste = 5;

if(teste > 0)
    //Sera executado
if(teste > 1)
    //Sera executado
if(teste > 2)
    //Sera executado
if(teste > 3)
    //Sera executado
pawn Код:
new teste = 5;

if(teste > 0)
    //Sera executado
else if(teste > 1)
    //Nгo sera executado
else if(teste > 2)
    //Nгo sera executado
else if(teste > 3)
    //Nгo sera executado
Com else if, apenas a primeira afirmaзгo verdadeira й executada, mesmo que as outras tambйm sejam
Reply
#8

Simplesmente todos falaram a mesma coisa so que com palavras diferentes..
Reply
#9

Olha eu ia dar um closed por ja imaginar quando usar sу que depois da afirmaзгo do vini eu fiquei um poco confuso talvez seja eu que nгo soube interpretar...
Quote:
Originally Posted by Viniborn
Посмотреть сообщение
pawn Код:
new teste = 5;

if(teste > 0)
    //Sera executado
if(teste > 1)
    //Sera executado
if(teste > 2)
    //Sera executado
if(teste > 3)
    //Sera executado
pawn Код:
new teste = 5;

if(teste > 0)
    //Sera executado
else if(teste > 1)
    //Nгo sera executado
else if(teste > 2)
    //Nгo sera executado
else if(teste > 3)
    //Nгo sera executado
Com else if, apenas a primeira afirmaзгo verdadeira й executada, mesmo que as outras tambйm sejam
Olha entгo no seu exemplo voce diz que oque ta no else if nao serб executado mais e nesse exemplo de dialog :
pawn Код:
if(listitem == 0)
            {
                SetPlayerInterior(playerid, 0);
                SetPlayerPos(playerid,Float:x,Float:y,Float:z);
                SendClientMessage(playerid, COLOR_RED, "[INFO] Vocк teletransportou para o Teleporte nъmero 1.");
                return 1;
            }
            else if(listitem == 1)
            {
                SetPlayerInterior(playerid, 0);
                SetPlayerPos(playerid,Float:x,Float:y,Float:z);
                SendClientMessage(playerid, COLOR_RED, "[INFO] Vocк teletransportou para o Teleporte nъmero 2.");
            }
Aqui usou else if entгo oque estб dentro do else if(listitem == 1) nгo serб executado?

e Obrigada pelas Respostas.
Reply
#10

Serб sim, pois sгo IGUALDADES diferentes, nгo "maioridades", nesse ele executa APENAS o listitem indicado.
O else й como se fosse um "do contra", portando passando na condiзгo IF, um else nunca serб executado!
Mesmo que ele coincida com o IF, pois quem manda й o IF.

Else IF em alguns casos serve pra economizar linhas, ou atй mesmo otimizar cуdigos.

Abraзos, boa sorte nos estudos
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)