[Ajuda] Sу aparece pro ID 0
#1

Bom pessoal fiz um contador de segundos em textdraw, exemplo: Quando o jogador for preso irб aparecer o tempo em textdraw na tela dele, mais o problema й que o tempo em textdraw sу aparece se o jogador for id 0, se o jogador for o ID 1 ou acima de 1, o tempo em textdraw nгo aparece, sу aparece pro id 0 olhem.

pawn Код:
// incio do GM
new TimerCadeia;

// Ongamemodeinit
TimerCadeia = SetTimer("Terminou_Cadeia", 1000, 1);

//Calback
forward Terminou_Cadeia(playerid);
public Terminou_Cadeia(playerid)
{
    DadosJogador[playerid][TEMPO_PRESO]--;
    if(DadosJogador[playerid][JOGADOR_PRESO] == 1 )
    {
            TextDrawShowForPlayer(playerid, Tempo_Hora_Roubo[playerid]);
            format(String, sizeof(String), "~g~~h~~h~Tempo: ~r~~h~~h~%i",DadosJogador[playerid][TEMPO_PRESO]);
            TextDrawSetString(Tempo_Hora_Roubo[playerid], String);
    }
    else
    {
        TextDrawHideForPlayer(playerid, Tempo_Hora_Roubo[playerid]);
    }
       
    if(DadosJogador[playerid][JOGADOR_PRESO] == 1 && DadosJogador[playerid][LOCAL_PRESO] == 1 && DadosJogador[playerid][TEMPO_PRESO] == 0)
    {
        TextDrawHideForPlayer(playerid, Tempo_Hora_Roubo[playerid]);
        SetPlayerInterior(playerid, 0);
        SetPlayerPos(playerid, 1546.2529, -1675.5369, 13.5620);
        SetPlayerFacingAngle(playerid, 88.3610);
        DadosJogador[playerid][JOGADOR_PRESO] = 0;
        DadosJogador[playerid][LOCAL_PRESO] = 0;
        DadosJogador[playerid][TEMPO_PRESO] = 0;
        SkinsJogadores(playerid);
        GameTextForPlayer(playerid, "Liberdade canto !!!", 2500, 3);
    }
    return true;
}
Reply
#2

Quote:

//no topo do gamemode:

new TimerCadeia[MAX_PLAYERS];

//Na public OnPlayerConnect

TimerCadeia[playerid] = SetTimerEx("Terminou_Cadeia", 1000, true, "i", playerid);

//Na public OnPlayerDisconnect

KillTimer(TimerCadeia[playerid] );
Precisa ser SetTimerEx, e precisa estar em OnPlayerConnect como eu fiz no exemplo acima. Vocк nгo pode usar um timer que vai ser processado para cada player numa funзгo onde nгo й chamada por um player, ou seja, vocк nгo pode usar isso na OnGameModeInit. O SetTimerEx serve para dar uma identidade particular ao timer, para nгo ser confundido com outras variбveis externas.
Reply
#3

Quote:
Originally Posted by n0minal
Посмотреть сообщение
Precisa ser SetTimerEx("Terminou_Cadeia", 1000, true, "i", playerid);

Precisa estar em OnPlayerConnect tambйm.
pq precisa estar em onplayerconnect ?
Reply
#4

Tenta isto:

pawn Код:
TimerCadeia = SetTimerEx("Terminou_Cadeia", 1000, 1, "i", playerid);
Nгo й preciso estб em OnPlayerConnect mas й sempre melhor, pois logo quando o jogador entra vai ser executada a callback.
Reply
#5

Quote:
Originally Posted by xCR7
Посмотреть сообщение
Tenta isto:

pawn Код:
TimerCadeia = SetTimerEx("Terminou_Cadeia", 1000, 1, "i", playerid);
Nгo й preciso estб em OnPlayerConnect mas й sempre melhor, pois logo quando o jogador entra vai ser executada a callback.
Meu conselho jб й diferente, prefiro no OnPlayerSpawn, pois se estiver no OnPlayerConnect esse o player obter um sistema de login. Sу do player estar conectado sem se logar jб irб estar funcionando a callback ou seja. Jб irб estar descontando o tempo preso.

Usa o sistema do n0minal e coloca no OnPlayerSpawn
Reply
#6

Quote:
Originally Posted by [BOPE]Seu._.Madruga
Посмотреть сообщение
Meu conselho jб й diferente, prefiro no OnPlayerSpawn, pois se estiver no OnPlayerConnect esse o player obter um sistema de login. Sу do player estar conectado sem se logar jб irб estar funcionando a callback ou seja. Jб irб estar descontando o tempo preso.

Usa o sistema do n0minal e coloca no OnPlayerSpawn
Sim, correto seria colocar no login.
Pois no OnPlayerSpawn serб chamado mais de uma vez e irб criar vбrios timers.. ou reformular a callback.


OU
vocк pode deixar o SetTimer no OnGameModeInit e trocar a callback..


pawn Код:
forward Terminou_Cadeia(); public Terminou_Cadeia()
{

    for(new i, e = GetMaxPlayers(); i != e; ++i){
   
       
        if(DadosJogador[i][JOGADOR_PRESO] == 1 )
        {
                DadosJogador[i][TEMPO_PRESO]--;
                TextDrawShowForPlayer(i, Tempo_Hora_Roubo[i]);
                format(String, sizeof(String), "~g~~h~~h~Tempo: ~r~~h~~h~%i",DadosJogador[i][TEMPO_PRESO]);
                TextDrawSetString(Tempo_Hora_Roubo[i], String);
        }
        else
        {
            TextDrawHideForPlayer(i, Tempo_Hora_Roubo[i]);
        }

        if(DadosJogador[i][JOGADOR_PRESO] == 1 && DadosJogador[i][LOCAL_PRESO] == 1 && DadosJogador[i][TEMPO_PRESO] == 0)
        {
            TextDrawHideForPlayer(i, Tempo_Hora_Roubo[i]);
            SetPlayerInterior(i, 0);
            SetPlayerPos(i, 1546.2529, -1675.5369, 13.5620);
            SetPlayerFacingAngle(i, 88.3610);
            DadosJogador[i][JOGADOR_PRESO] = 0;
            DadosJogador[i][LOCAL_PRESO] = 0;
            DadosJogador[i][TEMPO_PRESO] = 0;
            SkinsJogadores(i);
            GameTextForPlayer(i, "Liberdade canto !!!", 2500, 3);
        }
    }
    return true;
}
Reply
#7

Quote:
Originally Posted by zSuYaNw
Посмотреть сообщение
Sim, correto seria colocar no login.
Pois no OnPlayerSpawn serб chamado mais de uma vez e irб criar vбrios timers.. ou reformular a callback.


OU
vocк pode deixar o SetTimer no OnGameModeInit e trocar a callback..


pawn Код:
forward Terminou_Cadeia(); public Terminou_Cadeia()
{

    for(new i, e = GetMaxPlayers(); i != e; ++i){
   
       
        if(DadosJogador[i][JOGADOR_PRESO] == 1 )
        {
                DadosJogador[i][TEMPO_PRESO]--;
                TextDrawShowForPlayer(i, Tempo_Hora_Roubo[i]);
                format(String, sizeof(String), "~g~~h~~h~Tempo: ~r~~h~~h~%i",DadosJogador[i][TEMPO_PRESO]);
                TextDrawSetString(Tempo_Hora_Roubo[i], String);
        }
        else
        {
            TextDrawHideForPlayer(i, Tempo_Hora_Roubo[i]);
        }

        if(DadosJogador[i][JOGADOR_PRESO] == 1 && DadosJogador[i][LOCAL_PRESO] == 1 && DadosJogador[i][TEMPO_PRESO] == 0)
        {
            TextDrawHideForPlayer(i, Tempo_Hora_Roubo[i]);
            SetPlayerInterior(i, 0);
            SetPlayerPos(i, 1546.2529, -1675.5369, 13.5620);
            SetPlayerFacingAngle(i, 88.3610);
            DadosJogador[i][JOGADOR_PRESO] = 0;
            DadosJogador[i][LOCAL_PRESO] = 0;
            DadosJogador[i][TEMPO_PRESO] = 0;
            SkinsJogadores(i);
            GameTextForPlayer(i, "Liberdade canto !!!", 2500, 3);
        }
    }
    return true;
}
Isso que eu pensei, jб tinha deixado no onplayerlogin !!!, vlw pessoal.
Reply
#8

Quote:
Originally Posted by PetterAdriano
Посмотреть сообщение
Isso que eu pensei, jб tinha deixado no onplayerlogin !!!, vlw pessoal.
Sim, colocou corretamente.. mas presta atenзгo aonde coloca os settimers!
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)