Criando switch
O que é um switch?
Switch é um comparador de resultados semelhante ao if e else if porem com uma estrutura diferenciada, em alguns casos chega à ser mais rápido(caso usado corretamente com auxilio de break).
Exemplo de uso:
Vamos tomar por exemplo o comando /admins, em vez criarmos um if seguido de vários else if pra cada nível de admin à aparecer no /admins precisaremos apenas criar um switch(função) seguido de cases, o case servirá como o else if mas de uma maneira mais compacta e otimizada pois só armazenará o numero(enum) à ser verificado, abaixo o exemplo do /admins por if e o /admins por switch.
if (strcmp(cmd, "/admins", true) == 0) { for(new i = 0; i <= MAX_PLAYERS; i++) { if(IsPlayerConnected(i) == 1 && PlayerInfo[i][pAdmin] > 0) { if(PlayerInfo[i][pTrampo] == 1) { GetPlayerName(i, sendername, sizeof(sendername)); if(PlayerInfo[i][pAdmin] == 1) { format(string, 256, "Nome: %s [Moderador] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } if(PlayerInfo[i][pAdmin] == 2) { format(string, 256, "Nome: %s [Administração Nível 2] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } if(PlayerInfo[i][pAdmin] == 3) { format(string, 256, "Nome: %s [ Administração Nível 3] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } } } return 1; }
O exemplo acima mostra como seria um /admins usando else if, veja como ficaria este comando usando switch abaixo.
if (strcmp(cmd, "/admins", true) == 0) { for(new i = 0; i <= MAX_PLAYERS; i++) { switch(PlayerInfo[i][pAdmin])//Função a ser verificada { case 1: { format(string, 256, "Nome: %s [Moderador] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } //Se a função verificada for igual a 1 case 2: { format(string, 256, "Nome: %s [Administrador nível 2] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } //Se a função verificada for igual a 2 case 3: { format(string, 256, "Nome: %s [Administrador nível 3] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } //Se a função verificada for igual a 3 default: { Aqui a função a ser execultada caso nada se iguale aos resultados acima. } } } return 1; }
É lógico que nem todos os comandos /admin serão assim.
Criando o seu switch:
Crie seu switch com a função à ser verificada que quiser, mas siga este formato abaixo:
switch (Função) //Coloque por exemplo um PlayerInfo[player][info] ou qualquer outra coisa { case 1: { //O que deve ser executado caso seja igual a 1 return true; } case 2: { //O que deve ser executado caso seja igual a 2 return true; } case 3: { //O que deve ser executado caso seja igual a 3 } return true; } default: //Não obrigatório { //O que deve ser executado caso não seja igual aos exemplos acima } }
Lembrando, não necessariamente o resultado deverá seguir este padrão de 1, 2, 3.... Você tem total liberdade pra pular ou adequar valores.
Você pode também modificar a forma do case, pra procurar por mais de um resultado como no exemplo abaixo:
case 1, 2, 3: { //O que deve ser executado caso seja igual a 1, 2 ou 3 return true; }
em um if você teria que usar algo maior como este abaixo
if (Função == 1 || Função == 2 || Função == 3) //Ou como os valores são consecutivos usar operadores relacionais < > { O que deve ser executado caso a função seja igual a 1, 2 ou 3 return true; }
Você pode também verificar resultados de um numero à outro, como no exemplo abaixo.
case 1 .. 10: { //O que deve ser executado caso o resultado se enquadre entre 1 e 10 return true; }
Em if ficaria assim
if (Função >= 1 && Função <= 3) { //O que deve ser executado caso a Função se enquadre entre ou igual 1 ou 4 return true; }
Abaixo um exemplo bem distinto dos cases:
if (strcmp(cmd, "/org", true) == 0) { switch (PlayerInfo[playerid][pMembro]) { case 1 .. 3: { SendClientMessage(playerid, Cor, "Você pertence a uma org igual ou entre 1 e 3"); } case 7, 8, 10: { SendClientMessage(playerid, Cor, "Você pertence a org 7, 8 ou 10"); } case 4: { SendClientMessage(playerid, Cor, "Você pertence a org 4"); } default: { SendClientMessage(playerid, Cor, "Você pertence a uma org que não é 1, 2, 3, 4, 7, 8 ou 10"); } } return 1: }
Qualquer duvidas é só perguntar, como sempre.
0 comentários:
Postar um comentário