[AJUDA] Problema com uma CallBack - Loteria!
#1

Olб pessoal, nгo estou entendendo uma coisa que estб acontecendo com uma callback que editei pra passar as informaзхes da loteria, quando ela sorteia um nъmero!
O que estб acontecendo? Eu seto um numero para ser sorteado, por exemplo o 20 e faзo o teste com 2 players online, ou seja, eu e outra pessoa, jб fiz com mais e deu a mesma coisa:
Todos os players ficam com o nъmero 20 e eu executo a CallBack pra efetuar o sorteio e dar a grana pra os 2 players, no caso, os quais possuem o nъmero sorteado, mas sу um estб recebendo (Eu, no caso) e sу um aparece na lista de ganhadores e na verdade eu defini pra todos que tiverem o nъmero serem sorteados! Nгo sei o que fazer mais, jб tentei de tudo, tenho vбrias Callbacks nesse mesmo estilo e nunca me deram problemas como esse!

Quem puder me ajudar eu ficarei muito feliz, sу postei aqui porque realmente me quebrou a cabeзa essa parada!
Aqui vai uma cуpia do script, bem como ela estб aqui:

Os comandos pra executar a Loteria manualmente:
pawn Код:
if(strcmp(cmd, "/test2", true) == 0)//Aqui eu executo a Callback...
{
Lotto(20);
return 1;
}


if(strcmp(cmd, "/test1", true) == 0)//Primeiro seto o nъmero pra todos online....
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
   PlayerInfo[i][pLottoNr] = 20;
}
}
A CallBack da Loteria:
pawn Код:
public Lotto(number)
{
    new JackpotFallen = 0;
    DeletarArmasAoMorrer();
    new string[256];
    //new strtext[256];
    new rand = random(10000);
    new winner[MAX_PLAYER_NAME];
    format(string, sizeof(string), "||LOTЙRICA||: O nъmero sorteado de hoje foi: %d", number);
    OOCOff(COLOR_WHITE, string);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {

                SendClientMessage(i,COLOR_YELLOW2, "||===========| GANHADORES |===========||");
                if(PlayerInfo[i][pLottoNr] == number)
                {
                    GetPlayerName(i, winner, sizeof(winner));
                    format(string, 256, "|| %s - R$%d Reais", winner, Jackpot);
                    //strcat(strtext, string);
                    JackpotFallen++;
                }
                if(JackpotFallen != 0)
                {
                           
                            SendClientMessage(i,COLOR_WHITE, string);
                            PlayerPlaySound(i,1057,0.0,0.0,0.0);
                }
                if(JackpotFallen == 0)
                {
                  SendClientMessage(i,COLOR_WHITE, "||            Nenhuma pessoa foi Sorteada!             ||");
                  PlayerPlaySound(i,1057,0.0,0.0,0.0);
                }
                SendClientMessage(i,COLOR_YELLOW2, "||===================================||");
                if(PlayerInfo[i][pLottoNr] == number)
                {
                            format(string, sizeof(string), "||DKS||: Parabйns! Vocк ganhou R$%d Reais da Loteria!", Jackpot);
                            SendClientMessage(i, COLOR_WHITE, string);
                            SafeGivePlayerReal(i, Jackpot);
                }
                PlayerInfo[i][pLottoNr] = 0;
                Jackpot += rand;
                format(string, sizeof(string), "||LOTЙRICA||: O prкmio mudou para R$%d Reais! O prуximo sorteio serб daqui 1 hora!", Jackpot);
                OOCOff(COLOR_LIGHTBLUE, string);
                return 1;
        }

    }
    return 1;

}
Reply
#2

Tem um /admins funcional?

Estude-o e vocк vai conseguir fazer seu /loteria funfar pra mais de 1 player ^^
Reply
#3

Exatamente amigгo, a de Admins foi minha base, mas nгo tem jeito veio, dб uma olhada:

pawn Код:
if (strcmp(cmd, "/admins1", true) == 0)
    {
        new count = 0;
        if(IsPlayerConnected(playerid))
        {
            SendClientMessage(playerid, COLOR_RED, " ");
            SendClientMessage(playerid, COLOR_YELLOW2, "||==========| ADMINS  ONLINE |==========||");
            for(new i = 0; i < MAX_PLAYERS; i++)
            {
                if(IsPlayerConnected(i))
                {
                    if(PlayerInfo[i][pAdmin] >= 1 && PlayerInfo[i][pAdmin] != 7 && Afk[i] ==0 && PlayerInfo[playerid][pMascarado] == 0)
                    {
                        new admtext[40];
                        if(PlayerInfo[i][pAdmin] == 6) { admtext = "{EEDD82}Proprietбrio{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 5) { admtext = "{EEDD82}Elite{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 4) { admtext = "{EEDD82}Sub-Elite{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 3) { admtext = "{EEDD82}Moderador{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 2) { admtext = "{EEDD82}Sub-Moderador{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 1) { admtext = "{EEDD82}Recruta{FFFFFF}"; }
                        GetPlayerName(i, sendername, sizeof(sendername));
                        if(PlayerInfo[i][pAdmin] >= 1 && PlayerInfo[i][pAdmin] <= 6 && PlayerInfo[i][pMascarado] == 0)
                        {
                            format(string, 80, "|| %s (%s) - Disponнvel", sendername, admtext);
                            SendClientMessage(playerid, COLOR_WHITE, string);
                            count++;
                        }

                    }
                    if(PlayerInfo[i][pAdmin] >= 1 && PlayerInfo[i][pAdmin] != 7 && Afk[i]==1 && PlayerInfo[i][pMascarado] == 0)
                    {
                        new admtext[40];
                        if(PlayerInfo[i][pAdmin] == 6) { admtext = "{EEDD82}Proprietбrio{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 5) { admtext = "{EEDD82}Elite{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 4) { admtext = "{EEDD82}Sub-Elite{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 3) { admtext = "{EEDD82}Moderador{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 2) { admtext = "{EEDD82}Sub-Moderador{FFFFFF}"; }
                        else if(PlayerInfo[i][pAdmin] == 1) { admtext = "{EEDD82}Recruta{FFFFFF}"; }
                        GetPlayerName(i, sendername, sizeof(sendername));
                        if(PlayerInfo[i][pAdmin] >= 1 && PlayerInfo[i][pAdmin] <= 6 && PlayerInfo[playerid][pMascarado] == 0)
                        {
                            format(string, 80, "|| %s (%s) - Ausente", sendername, admtext);
                            SendClientMessage(playerid, COLOR_WHITE, string);
                            count++;
                            PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
                        }
                    }

                }
            }
        }
        if(count == 0)
        SendClientMessage(playerid, COLOR_YELLOW2, "||       Nгo hб Admins online no momento!      ||");
        PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
        return SendClientMessage(playerid, COLOR_YELLOW2, "||===================================||");
    }
Reply
#4

Fiz aqui rapidinho, ve se funciona e tenta readptar ^^
pawn Код:
new numeros[5][1] =
{
    {1},{2},{3},{4},{5}
   
};
pawn Код:
CMD:sorteio(playerid,params[])
{
    new sorteado = random(sizeof(numeros));
    new lotto[64];
    format(lotto,sizeof lotto,"O nъmero %i foi sorteado!",numeros[sorteado][0]);
    SendClientMessageToAll(-1,lotto);
    new foisorteado = numeros[sorteado][0];
    DarPremio(playerid,foisorteado);
    return 1;
}
pawn Код:
stock DarPremio(playerid,foisorteado)
{
    new count = 0;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(PlayerInfo[playerid][numeroloteria] == foisorteado)
        {
            new informar[128];
            new nome[24];
            GetPlayerName(playerid,nome,sizeof nome);
            format(informar,sizeof(informar),"Parabйns para %s! Ganhou nada no sorteio!",nome);
            SendClientMessageToAll(-1,informar);
            count ++;
        }
    }
    if(count == 0)
    {
        SendClientMessageToAll(-1,"Ninguйm ganhou na loteria!");
        return 1;
    }
    return 1;
}
Aqui ele so faz o sorteio de um numero random!
Retira a condiзгo da playerinfo que todos os players serгo sorteados (faзa isso pra um teste)

Qualquer coisa tamo ae

@@ EDIT @@

Esqueci de checar se o player ta conectado ali no loop... Ele vai floodar se nгo checar entгo coloca a condiзгo if(IsPlayerConnected(i)) dentro do loop... Abraзos
Reply
#5

O correto seria sem o return 1; dentro do loop.
pawn Код:
public Lotto(number)
{
    new JackpotFallen = 0;
    DeletarArmasAoMorrer();
    new string[256];
    //new strtext[256];
    new rand = random(10000);
    new winner[MAX_PLAYER_NAME];
    format(string, sizeof(string), "||LOTЙRICA||: O nъmero sorteado de hoje foi: %d", number);
    OOCOff(COLOR_WHITE, string);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {

                SendClientMessage(i,COLOR_YELLOW2, "||===========| GANHADORES |===========||");
                if(PlayerInfo[i][pLottoNr] == number)
                {
                    GetPlayerName(i, winner, sizeof(winner));
                    format(string, 256, "|| %s - R$%d Reais", winner, Jackpot);
                    //strcat(strtext, string);
                    JackpotFallen++;
                }
                if(JackpotFallen != 0)
                {

                            SendClientMessage(i,COLOR_WHITE, string);
                            PlayerPlaySound(i,1057,0.0,0.0,0.0);
                }
                if(JackpotFallen == 0)
                {
                  SendClientMessage(i,COLOR_WHITE, "||            Nenhuma pessoa foi Sorteada!             ||");
                  PlayerPlaySound(i,1057,0.0,0.0,0.0);
                }
                SendClientMessage(i,COLOR_YELLOW2, "||===================================||");
                if(PlayerInfo[i][pLottoNr] == number)
                {
                            format(string, sizeof(string), "||DKS||: Parabйns! Vocк ganhou R$%d Reais da Loteria!", Jackpot);
                            SendClientMessage(i, COLOR_WHITE, string);
                            SafeGivePlayerReal(i, Jackpot);
                              PlayerInfo[i][pLottoNr] = 0;
                }
        }

    }
    Jackpot += rand;
    format(string, sizeof(string), "||LOTЙRICA||: O prкmio mudou para R$%d Reais! O prуximo sorteio serб daqui 1 hora!", Jackpot);
    OOCOff(COLOR_LIGHTBLUE, string);
    return 1;

}
Reply
#6

Bom galera, eu refiz de outra forma o sistema e agora estб legal, deixei mais realista, em vez de ser automбtico o sorteio e todos saberem quem ganhou agora cada pessoa que comprou o nъmero vai ter que digitar um comando depois do sorteio pra ver se o seu nъmero foi sorteado, se foi ele recebe a grana! 100% sem Bug!


Obrigado a todos que tentaram ajudar, + Reputaзгo pra todos! Valeu!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)