Error al recibir premio
#1

Bueno aver si me pueden dar una mano con esto:
tengo un Textdraw con al version de Zamaroth de un contador de Experiencia, y puse lo siguiente:
pawn Код:
if(Experiencia >= 100)
{
    AccountInfo[i][aNivel]++; //esto es para q suba de nivel
    GameTextForPlayer(i,"subiste de nivel! ~n~~r~NIVEL 1",4000,1); Es un texto de aviso
ShowPlayerDialog(playerid,122,DIALOG_STYLE_LIST,"PREMIOS NIVEL 1","Katana\nAerosol\nCuchillo","Recibir","Cancelar"); //abre el dialog menu para elegir el arma
}
Bueno el texto y el dialog se abren perfectamente al llegar a esa experiencia pero el problema es q tanto el texto como el dialog aparecen todo el tiempo, osea llegas a esa experiencia y abre ambas cosas, elijes el arma, y cuando se cierra se vuelve abrir, y asi todo el tiempo
Como puedo hacer para q solo le de el premio una sola vez?

Bueno eso es todo espero puedan ayudarme xD

salu2
Reply
#2

Quote:
Originally Posted by laborgward
Bueno aver si me pueden dar una mano con esto:
tengo un Textdraw con al version de Zamaroth de un contador de Experiencia, y puse lo siguiente:
pawn Код:
if(Experiencia >= 100)
{
    AccountInfo[i][aNivel]++; //esto es para q suba de nivel
    GameTextForPlayer(i,"subiste de nivel! ~n~~r~NIVEL 1",4000,1); Es un texto de aviso
ShowPlayerDialog(playerid,122,DIALOG_STYLE_LIST,"PREMIOS NIVEL 1","Katana\nAerosol\nCuchillo","Recibir","Cancelar"); //abre el dialog menu para elegir el arma
}
Bueno el texto y el dialog se abren perfectamente al llegar a esa experiencia pero el problema es q tanto el texto como el dialog aparecen todo el tiempo, osea llegas a esa experiencia y abre ambas cosas, elijes el arma, y cuando se cierra se vuelve abrir, y asi todo el tiempo
Como puedo hacer para q solo le de el premio una sola vez?

Bueno eso es todo espero puedan ayudarme xD

salu2
їLo tenes en un timer? їO que callback estas usando?
Reply
#3

Si al para ir agregando experiencia al textdraw lo tengo un en timer:
pawn Код:
SetTimer("ScoreTextDrawUpdate2", 3000, true);
y el codigo completo es:
pawn Код:
public ScoreTextDrawUpdate2()
{
    new string[256];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
      if(IsPlayerConnected(i))
      {
                if(Spawned[i])
                {
                new Score = AccountInfo[i][aExperiencia];
                format(string, sizeof(string), "%d", Score);
                TextDrawHideForPlayer(i, ScoreTextDraw2[i]);
                   ScoreTextDraw2[i] = TextDrawCreate(494.000000, 423.000000, string);
                   TextDrawAlignment(ScoreTextDraw2[i],0);
                   TextDrawBackgroundColor(ScoreTextDraw2[i],0x000000ff);
                   TextDrawFont(ScoreTextDraw2[i],3);
                   TextDrawLetterSize(ScoreTextDraw2[i],0.709999, 2.100000);
                   TextDrawSetOutline(ScoreTextDraw2[i],1);
                   TextDrawSetProportional(ScoreTextDraw2[i],0);
                   TextDrawSetShadow(ScoreTextDraw2[i],1);
                   TextDrawShowForPlayer(i, ScoreTextDraw2[i]);
                   if(Score == 100)
                         {
                                 AccountInfo[i][aNivel]++; //esto es para q suba de nivel
                GameTextForPlayer(i,"subiste de nivel! ~n~~r~NIVEL 1",4000,1); Es un texto de aviso
                ShowPlayerDialog(playerid,122,DIALOG_STYLE_LIST,"PREMIOS NIVEL 1","Katana\nAerosol\nCuchillo","Recibir","Cancelar"); //abre el dialog menu para elegir el arma
                         }
                }
            }
        }
    return 1;
}
Reply
#4

Claro, tenes que 'matarlo' al timer despuйs de seleccionar. Se utiliza KillTimer.

pawn Код:
public ScoreTextDrawUpdate2()
{
    new string[256];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
      if(IsPlayerConnected(i))
      {
                if(Spawned[i])
                {
                new Score = AccountInfo[i][aExperiencia];
                format(string, sizeof(string), "%d", Score);
                TextDrawHideForPlayer(i, ScoreTextDraw2[i]);
                   ScoreTextDraw2[i] = TextDrawCreate(494.000000, 423.000000, string);
                   TextDrawAlignment(ScoreTextDraw2[i],0);
                   TextDrawBackgroundColor(ScoreTextDraw2[i],0x000000ff);
                   TextDrawFont(ScoreTextDraw2[i],3);
                   TextDrawLetterSize(ScoreTextDraw2[i],0.709999, 2.100000);
                   TextDrawSetOutline(ScoreTextDraw2[i],1);
                   TextDrawSetProportional(ScoreTextDraw2[i],0);
                   TextDrawSetShadow(ScoreTextDraw2[i],1);
                   TextDrawShowForPlayer(i, ScoreTextDraw2[i]);
                   if(Score == 100)
                         {
                                 AccountInfo[i][aNivel]++; //esto es para q suba de nivel
                GameTextForPlayer(i,"subiste de nivel! ~n~~r~NIVEL 1",4000,1); Es un texto de aviso
                ShowPlayerDialog(playerid,122,DIALOG_STYLE_LIST,"PREMIOS NIVEL 1","Katana\nAerosol\nCuchillo","Recibir","Cancelar");
                KillTimer(ScoreTextDrawUpdate2);
                         }
                }
            }
        }
    return 1;
}
Reply
#5

Quote:
Originally Posted by Fedee!
Claro, tenes que 'matarlo' al timer despuйs de seleccionar. Se utiliza KillTimer.

pawn Код:
public ScoreTextDrawUpdate2()
{
    new string[256];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
      if(IsPlayerConnected(i))
      {
                if(Spawned[i])
                {
                new Score = AccountInfo[i][aExperiencia];
                format(string, sizeof(string), "%d", Score);
                TextDrawHideForPlayer(i, ScoreTextDraw2[i]);
                  ScoreTextDraw2[i] = TextDrawCreate(494.000000, 423.000000, string);
                  TextDrawAlignment(ScoreTextDraw2[i],0);
                  TextDrawBackgroundColor(ScoreTextDraw2[i],0x000000ff);
                  TextDrawFont(ScoreTextDraw2[i],3);
                  TextDrawLetterSize(ScoreTextDraw2[i],0.709999, 2.100000);
                  TextDrawSetOutline(ScoreTextDraw2[i],1);
                  TextDrawSetProportional(ScoreTextDraw2[i],0);
                  TextDrawSetShadow(ScoreTextDraw2[i],1);
                  TextDrawShowForPlayer(i, ScoreTextDraw2[i]);
                   if(Score == 100)
                         {
                                AccountInfo[i][aNivel]++; //esto es para q suba de nivel
                GameTextForPlayer(i,"subiste de nivel! ~n~~r~NIVEL 1",4000,1); Es un texto de aviso
                ShowPlayerDialog(playerid,122,DIALOG_STYLE_LIST,"PREMIOS NIVEL 1","Katana\nAerosol\nCuchillo","Recibir","Cancelar");
                KillTimer(ScoreTextDrawUpdate2);
                        }
                }
            }
        }
    return 1;
}
pero si yo mato al timer no seguira apareciendo el textdraw y no seguira contando la experiencia

no hay otra formaї
Reply
#6

Que yo sepa no... (no se me ocurre nada xD)
Reply
#7

Prueba con una variable:

Mira agregas una definicion: new PremioRecibido[MAX_PLAYERS];
Luego cuando se conecta: PremiRecibido[playerid] = 0;
Ahora en la parte de tu codigo:

pawn Код:
if(Score == 100 && PremiRecibido[playerid] == 0)
    {
        AccountInfo[i][aNivel]++; //esto es para q suba de nivel
        GameTextForPlayer(i,"subiste de nivel! ~n~~r~NIVEL 1",4000,1); Es un texto de aviso
        ShowPlayerDialog(playerid,122,DIALOG_STYLE_LIST,"PREMIOS NIVEL 1","Katana\nAerosol\nCuchillo","Recibir","Cancelar");
        PremioRecibido[playerid] = 1;
    }


Eso hace que cuando reciba el premio por primera vez quede por decirlo "recibido" y luego si ya lo recibio no se lo vuelve a dar. Espero que te sirva
Reply
#8

Quote:
Originally Posted by MrDeath
Prueba con una variable:

Mira agregas una definicion: new PremioRecibido[MAX_PLAYERS];
Luego cuando se conecta: PremiRecibido[playerid] = 0;
Ahora en la parte de tu codigo:

pawn Код:
if(Score == 100 && PremiRecibido[playerid] == 0)
    {
        AccountInfo[i][aNivel]++; //esto es para q suba de nivel
        GameTextForPlayer(i,"subiste de nivel! ~n~~r~NIVEL 1",4000,1); Es un texto de aviso
        ShowPlayerDialog(playerid,122,DIALOG_STYLE_LIST,"PREMIOS NIVEL 1","Katana\nAerosol\nCuchillo","Recibir","Cancelar");
        PremioRecibido[playerid] = 1;
    }


Eso hace que cuando reciba el premio por primera vez quede por decirlo "recibido" y luego si ya lo recibio no se lo vuelve a dar. Espero que te sirva
Sos un kpo death funciona perfecto

gracias x la ayuda suerte

CERRAR TEMA
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)