[Ajuda] Patentes
#1

Olб boa noite, criei um sistema de patentes se o player tiver tantas vitorias ele entrarб em um certo grupo mas nгo estб funcionando da forma correta, quando eu chego em um nъmero de vitorias a mensagem da callback nгo chega e no comando rank fica sem grupo.

Esse cуdigo eu criei sу para testes.

pawn Код:
#include a_samp
#include zcmd

#define Azul 0xFFFFFFFF //Nгo liguem '-'

enum pInfo
{
     pWins,
}

static PlayerInfo[MAX_PLAYERS][pInfo];

forward IsPlayerRankingInfo(playerid);

stock Ranking(playerid)
{
    new rr[40];
    if(PlayerInfo[playerid][pWins] == 0) rr = "New Driver";
    else if(PlayerInfo[playerid][pWins] == 10) rr = "Little Driver";
    else if(PlayerInfo[playerid][pWins] == 30) rr = "Young Driver";
    else if(PlayerInfo[playerid][pWins] == 50) rr = "Huge Driver";
    else if(PlayerInfo[playerid][pWins] == 80) rr = "Great Driver";
    else if(PlayerInfo[playerid][pWins] == 150) rr = "Good Driver";
    else if(PlayerInfo[playerid][pWins] == 200) rr = "Driver Master";
    else if(PlayerInfo[playerid][pWins] == 300) rr = "Old Driver";
    else if(PlayerInfo[playerid][pWins] == 500) rr = "High Driver";
    return rr;
}

//Comando para ver o rank atual.

command(rank, playerid, params[])
{
  static cmd[256], tmp[256];
  format(cmd, sizeof(cmd), "{32CD32}•{FFFFFF} Rank: %s\n", Ranking(playerid));
  strcat(tmp, cmd);
  ShowPlayerDialog(playerid, 10000, DIALOG_STYLE_MSGBOX, "Rank", cmd, "Fechar", "");
  return true;
}

//Comando para ver quantas vitorias tem.

command(wins, playerid, params[])
{
  static cmd[256], tmp[256];
  format(cmd, sizeof(cmd), "{32CD32}•{FFFFFF} Wins: %d\n", PlayerInfo[playerid][pWins]);
  strcat(tmp, cmd);
  ShowPlayerDialog(playerid, 10000, DIALOG_STYLE_MSGBOX, "Wins", cmd, "Fechar", "");
  return true;
}

//Comando para aumentar as vitorias, apenas para testes.

CMD:w(playerid, params[])
{
  PlayerInfo[playerid][pWins]++;
  return true;
}

public IsPlayerRankingInfo(playerid)
{
     if(PlayerInfo[playerid][pWins] == 10)
     {
       SendClientMessage(playerid, Azul, "[ {32CD32}UP{FFFFFF} ] Voce subiu de rank.");
       SendClientMessage(playerid, Azul,"{32CD32}•{FFFFFF} Rank atual: Little Driver");
     }
      else if(PlayerInfo[playerid][pWins] == 30)
     {
       SendClientMessage(playerid, Azul, "[ {32CD32}UP{FFFFFF} ] Voce subiu de rank.");
       SendClientMessage(playerid, Azul,"{32CD32}•{FFFFFF} Rank atual: Young Driver");
     }
      else if(PlayerInfo[playerid][pWins] == 50)
     {
       SendClientMessage(playerid, Azul, "[ {32CD32}UP{FFFFFF} ] Voce subiu de rank.");
       SendClientMessage(playerid, Azul,"{32CD32}•{FFFFFF} Rank atual: Huge Driver");
     }
      else if(PlayerInfo[playerid][pWins] == 80)
     {
       SendClientMessage(playerid, Azul, "[ {32CD32}UP{FFFFFF} ] Voce subiu de rank.");
       SendClientMessage(playerid, Azul,"{32CD32}•{FFFFFF} Rank atual: Great Driver");
     }
      else if(PlayerInfo[playerid][pWins] == 150)
     {
       SendClientMessage(playerid, Azul, "[ {32CD32}UP{FFFFFF} ] Voce subiu de rank.");
       SendClientMessage(playerid, Azul,"{32CD32}•{FFFFFF} Rank atual: Good Driver");
     }
      else if(PlayerInfo[playerid][pWins] == 200)
     {
       SendClientMessage(playerid, Azul, "[ {32CD32}UP{FFFFFF} ] Voce subiu de rank.");
       SendClientMessage(playerid, Azul,"{32CD32}•{FFFFFF} Rank atual: Driver Master");
     }
      else if(PlayerInfo[playerid][pWins] == 300)
     {
       SendClientMessage(playerid, Azul, "[ {32CD32}UP{FFFFFF} ] Voce subiu de rank.");
       SendClientMessage(playerid, Azul,"{32CD32}•{FFFFFF} Rank atual: Old Driver");
     }
      else if(PlayerInfo[playerid][pWins] == 500)
     {
       SendClientMessage(playerid, Azul, "[ {32CD32}UP{FFFFFF} ] Voce subiu de rank.");
       SendClientMessage(playerid, Azul,"{32CD32}•{FFFFFF} Rank atual: High Driver");
     }
     return 1;
}
Reply
#2

Operadores amigo!!
Quando vocк usa ( == ), significa IGUALDADE.

Ou Seja, quando vocк bota:

pawn Код:
if(PlayerInfo[playerid][pWins] == 0) rr = "New Driver";
Significa que SOMENTE o 0 vai ser New Driver. O 1,2,3,4,5,6,7,8,9 nгo vai ser nada. O 10 vai ser Little Driver, o 11,12,13,14,15,16,17...29 nгo vai ser nada... Assim sucessivamente.

Olhe a parte de operadores lуgicos: https://sampforum.blast.hk/showthread.php?tid=240266

Espero que alguйm lhe dк um cуdigo pronto com a minha base conceitual porque nunca mais vou dar cуdigos prontos
Reply
#3

Exatamente como o JonathanFeitosa disse acima. Tente dessa forma:

pawn Код:
stock Ranking(playerid)
{
    new rr[40];
    if(PlayerInfo[playerid][pWins] < 10) rr = "New Driver";
    else if(PlayerInfo[playerid][pWins] >= 10 && PlayerInfo[playerid][pWins] < 30) rr = "Little Driver";
    else if(PlayerInfo[playerid][pWins] >= 30 && PlayerInfo[playerid][pWins] < 50) rr = "Young Driver";
    else if(PlayerInfo[playerid][pWins] >= 50 && PlayerInfo[playerid][pWins] < 80) rr = "Huge Driver";
    else if(PlayerInfo[playerid][pWins] >= 80 && PlayerInfo[playerid][pWins] < 150) rr = "Great Driver";
    else if(PlayerInfo[playerid][pWins] >= 150 && PlayerInfo[playerid][pWins] < 200) rr = "Good Driver";
    else if(PlayerInfo[playerid][pWins] >= 200 && PlayerInfo[playerid][pWins] < 300) rr = "Driver Master";
    else if(PlayerInfo[playerid][pWins] >= 300 && PlayerInfo[playerid][pWins] < 500) rr = "Old Driver";
    else if(PlayerInfo[playerid][pWins] >= 500) rr = "High Driver";
    return rr;
}
Reply
#4

Realmente nгo prestei atenзгo nesta parte, mas e na mensagem ao subir de patente como faзo para aparecer (ainda nгo estб aparecendo) assim que alcanзar o nъmero de vitorias necessбrias?
Reply
#5

Utilize a mesma tйcnica que o Artista usou. Sу copia a parte dos if e else if e substitui. Ele vai fazer de novo pra vocк. '-'
Reply
#6

Eu jб tinha colocado Jonathan mas nгo estб aparecendo a mensagem.
Reply
#7

coloque no comando IsPlayerRankingInfo(playerid);

Vocк pode colocar essa callback junto ao de atualizar o Level.
Reply
#8

Certifique-se que estб chamando IsPlayerRankingInfo(playerid) toda vez em que vocк incrementa um valor na sua variбvel.
Se o problema persistir, repita o processo que fiz acima. Pois imagine a seguinte a seguinte situaзгo:
O player possui o valor 11 na variбvel, entгo ao chamar a callback, nгo serб exibida nenhuma mensagem.
Reply
#9

Quote:
Originally Posted by Artista
Посмотреть сообщение
Exatamente como o JonathanFeitosa disse acima. Tente dessa forma:

pawn Код:
stock Ranking(playerid)
{
    new rr[40];
    if(PlayerInfo[playerid][pWins] < 10) rr = "New Driver";
    else if(PlayerInfo[playerid][pWins] >= 10 && PlayerInfo[playerid][pWins] < 30) rr = "Little Driver";
    else if(PlayerInfo[playerid][pWins] >= 30 && PlayerInfo[playerid][pWins] < 50) rr = "Young Driver";
    else if(PlayerInfo[playerid][pWins] >= 50 && PlayerInfo[playerid][pWins] < 80) rr = "Huge Driver";
    else if(PlayerInfo[playerid][pWins] >= 80 && PlayerInfo[playerid][pWins] < 150) rr = "Great Driver";
    else if(PlayerInfo[playerid][pWins] >= 150 && PlayerInfo[playerid][pWins] < 200) rr = "Good Driver";
    else if(PlayerInfo[playerid][pWins] >= 200 && PlayerInfo[playerid][pWins] < 300) rr = "Driver Master";
    else if(PlayerInfo[playerid][pWins] >= 300 && PlayerInfo[playerid][pWins] < 500) rr = "Old Driver";
    else if(PlayerInfo[playerid][pWins] >= 500) rr = "High Driver";
    return rr;
}
Aplique um switch que й muito melhor que isso.
Reply
#10

Quote:
Originally Posted by PT
Посмотреть сообщение
Aplique um switch que й muito melhor que isso.
Minha intenзгo foi complementar a resposta do JonathanFeitosa. Mas vocк estб certo, tambйm prefiro switch
pawn Код:
stock Ranking(playerid)
{
    new rr[15];
    switch(PlayerInfo[playerid][pWins])
    {
        case 0..10: rr="New Driver";
        case 30..49: rr="Young Driver";
        case 50..79: rr="Huge Driver";
        case 80..149: rr="Great Driver";
        case 150..199: rr="Good Driver";
        case 200..299: rr="Driver Master";
        case 300..499: rr="Old Driver";
        default: rr="High Driver";
    }
    return rr;
}
-------
Ts3, experimente colocar PlayerInfo[playerid][pWins]++; no inicio de IsPlayerRankingInfo
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)