Portal SAMP
[Pedido] Contador embaixo na tela. - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Pedido] Contador embaixo na tela. (/showthread.php?tid=1817)

Páginas: 1 2


Contador embaixo na tela. - xxxjhonatan_wi - 06/11/2021

Fiz um sistema de payday de 45 minutos, e queria que na tela do player tivesse uma contagem regressiva: "PayDay em: 45 minutos", e toda vez que o tempo acabasse, começasse de novo. PS:Ele deve ser zerado toda vez que o player der disconnect


RE: Contador embaixo na tela. - xbruno1000x - 06/11/2021

Use um criador de textdraw para pegar a posição, use format para o texto juntamente de suas variáveis que armazenam o tempo. Depois é so usar o SetString para funcionar. É difícil alguém conseguir fazer isso pra você, pois não temos acesso as suas variáveis.


RE: Contador embaixo na tela. - xxxjhonatan_wi - 07/11/2021

(06/11/2021 21:17)xbruno1000x Escreveu: Use um criador de textdraw para pegar a posição, use format para o texto juntamente de suas variáveis que armazenam o tempo. Depois é so usar o SetString para funcionar. É difícil alguém conseguir fazer isso pra você, pois não temos acesso as suas variáveis.

Você pode me dar um guia mais específico ? eu não manjo de textdraw. Vou colocar tudo relacionado a payday aqui abaixo:

new TIMERPAYDAY[MAX_PLAYERS]; //VARIAVEL GLOBAL

TIMERPAYDAY[playerid] = SetTimerEx( "PayDay", 60000 , true, "d", playerid); //Onde o tempo começa a contar, coloquei na dialog de quando acerta a senha!

KillTimer(TIMERPAYDAY[playerid]); //Coloquei em OnPlayerDisconnect

forward PayDay(playerid);
public PayDay(playerid)
{
    SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
    SendClientMessage(playerid, -1, "Voce recebeu + 1 score e $6500");
    SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
    for(new i = 0, p = GetPlayerPoolSize(); i <= p; i++)
    {
        if(IsPlayerConnected(i)){
            new scoreantigo = GetPlayerScore(i);
            SetPlayerScore(i, scoreantigo+1);
            GivePlayerMoney(i, 6500);
        }

    }
    if(PlayerInfo[playerid][Vip] == 1)
    {
        SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
        SendClientMessage(playerid, -1, "Por ser um player vip: Ganhou + 2 score[TOTAL 3] e mais $6500[TOTAL 13000]");
        SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
        for(new i = 0, p = GetPlayerPoolSize(); i <= p; i++)
    {
        if(IsPlayerConnected(i)){
            new scoreantigo = GetPlayerScore(i);
            SetPlayerScore(i, scoreantigo+2);
            GivePlayerMoney(i, 6500);
        }

    }
    }
    if(PlayerInfo[playerid][Acionista] == 1)
    {
        SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
        SendClientMessage(playerid, -1, "Por ser um player Acionista: Ganhou + 4 score[TOTAL 5] e mais $13000[TOTAL 19500]");
        SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
        for(new i = 0, p = GetPlayerPoolSize(); i <= p; i++)
    {
        if(IsPlayerConnected(i)){
            new scoreantigo = GetPlayerScore(i);
            SetPlayerScore(i, scoreantigo+4);
            GivePlayerMoney(i, 13000);
        }

    }
    }
}


RE: Contador embaixo na tela. - xbruno1000x - 07/11/2021

no post você diz que o sistema de 45 minutos, mas esse que você enviou só tem 1 minuto.



Código:
new stringXb[70];
format(stringXb, 70, "O próximo payday será em ~r~%d segundos", valor);
GameTextForPlayer(playerid, stringXb, 1250, 4);


Basta substituir o valor por uma variável que armazene o tempo decorrido.
Com textdraw personalizada é a mesma coisa, porém utilizará o TextdrawSetString.


RE: Contador embaixo na tela. - xxxjhonatan_wi - 07/11/2021

(07/11/2021 12:20)xbruno1000x Escreveu: no post você diz que o sistema de 45 minutos, mas esse que você enviou só tem 1 minuto.



Código:
new stringXb[70];
format(stringXb, 70, "O próximo payday será em ~r~%d segundos", valor);
GameTextForPlayer(playerid, stringXb, 1250, 4);


Basta substituir o valor por uma variável que armazene o tempo decorrido.
Com textdraw personalizada é a mesma coisa, porém utilizará o TextdrawSetString.

está 1 minuto porquê eu estava testando, mas vou por 45.

Então o código fica assim?

new stringXb[70];
format(stringXb, 70, "O próximo payday será em ~r~%d segundos", TIMERPAYDAY); (É a variável que eu uso pro tempo)
GameTextForPlayer(playerid, stringXb, 1250, 4);


RE: Contador embaixo na tela. - MrThúúG - 07/11/2021

será que não dava pra fazer a verificação pelo gettime ? e usar as variáveis individuais em vez de usar variáveis globais. ?


RE: Contador embaixo na tela. - xxxjhonatan_wi - 07/11/2021

(07/11/2021 13:58)MrThúúG Escreveu: será que não dava pra fazer pelo gettime ? e usar as variáveis individual em vez de usar variáveis global. ?

Até dar, só n sei fazer ikksjkj


RE: Contador embaixo na tela. - MrThúúG - 07/11/2021

eu não entendi isso no teu codigo... você esta misturando variáveis globais com variáveis pessoais '-' public PayDay(playerid) e depois faz uma verificação global     for(new i = 0, p = GetPlayerPoolSize(); i <= p; i++) ....

forward PayDay(playerid);
public PayDay(playerid)
{
    SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
    SendClientMessage(playerid, -1, "Voce recebeu + 1 score e $6500");
    SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
    for(new i = 0, p = GetPlayerPoolSize(); i <= p; i++)
    {
        if(IsPlayerConnected(i)){
            new scoreantigo = GetPlayerScore(i);
            SetPlayerScore(i, scoreantigo+1);
            GivePlayerMoney(i, 6500);
        }

    }


RE: Contador embaixo na tela. - White_Blue - 15/07/2022

É um tópico antigo, mas vou deixar minha mensagem se por a caso alguém precisar algum dia.





Código PHP:
#define PAYDAY 40 // Defina o tempo do seu PayDay, defini para 40 minutos.

// Variáveis Globais
new Text:PaydayText[2];
new 
PlayerText:PaydayPlayerText[MAX_PLAYERS][1];
new 
PaydayTimer[MAX_PLAYERS];
new 
Timer[MAX_PLAYERS];

public 
OnGameModeInit() {
 
// TextDraws
 
PaydayText[0] = TextDrawCreate(432.058837384.249938"ld_grav:timer");
TextDrawTextSize(PaydayText[0], 24.00000028.000000);
TextDrawAlignment(PaydayText[0], 1);
TextDrawColor(PaydayText[0], -1);
TextDrawSetShadow(PaydayText[0], 0);
TextDrawBackgroundColor(PaydayText[0], 255);
TextDrawFont(PaydayText[0], 4);
TextDrawSetProportional(PaydayText[0], 0);

PaydayText[1] = TextDrawCreate(457.999847394.749969"box");
TextDrawLetterSize(PaydayText[1], 0.000000, -0.070588);
TextDrawTextSize(PaydayText[1], 618.0000000.000000);
TextDrawAlignment(PaydayText[1], 1);
TextDrawColor(PaydayText[1], -1);
TextDrawUseBox(PaydayText[1], 1);
TextDrawBoxColor(PaydayText[1], 255);
TextDrawSetShadow(PaydayText[1], 0);
TextDrawBackgroundColor(PaydayText[1], 255);
TextDrawFont(PaydayText[1], 1);
TextDrawSetProportional(PaydayText[1], 1);
 return 
1;
}

public 
OnPlayerConnect(playerid) {
 
// TextDraws
 
PaydayPlayerText[playerid][0] = CreatePlayerTextDraw(playerid624.588378396.500091"~w~Payday em ~g~40~w~ minutos!");
PlayerTextDrawLetterSize(playeridPaydayPlayerText[playerid][0], 0.4000001.600000);
PlayerTextDrawAlignment(playeridPaydayPlayerText[playerid][0], 3);
PlayerTextDrawColor(playeridPaydayPlayerText[playerid][0], 41215);
PlayerTextDrawSetShadow(playeridPaydayPlayerText[playerid][0], 0);
PlayerTextDrawSetOutline(playeridPaydayPlayerText[playerid][0], 1);
PlayerTextDrawBackgroundColor(playeridPaydayPlayerText[playerid][0], 255);
PlayerTextDrawFont(playeridPaydayPlayerText[playerid][0], 3);
PlayerTextDrawSetProportional(playeridPaydayPlayerText[playerid][0], 1);

MostrarText(playerid);

Timer[playerid] = PAYDAY 60 1;
// Timer
PaydayTimer[playerid] = SetTimerEx("PayDay"1000true"i"playerid);
 return 
1;
}

forward PayDay(i);
public 
PayDay(i)
{
new 
string[128];
Timer[i]--;
format(stringsizeof(string), "~w~Payday em ~g~%s~w~ minutos!"Convert(Timer[i]));
PlayerTextDrawSetString(iPaydayPlayerText[i][0], string);
if(
Timer[i] == 0) {
SetPlayerScore(iGetPlayerScore(i) + 1);
GivePlayerMoney(i2500);
SendClientMessage(i, -1"=========================\nPayday!\n=========================");
PlayerPlaySound(i11370.00.00.0);
Timer[i] = PAYDAY 60 1;
}
return 
1;
}

stock Convert(number) {
new 
hoursminssecsstring[100];
hours floatround(number 3600);
mins floatround((number 60) - (hours 60));
secs floatround(number - ((hours 3600) + (mins 60)));
if(
hours >= 24hours hours 24;

if(
hours 0format(string100"%02d:%02d:%02d"hoursminssecs);
else 
format(string100"%02d:%02d"minssecs);
return 
string;
}

stock MostrarText(playerid) {
for(new 
02i++) TextDrawShowForPlayer(playeridPaydayText[i]);
for(new 
01j++) PlayerTextDrawShow(playeridPaydayPlayerText[playerid][j]);
return 
1;
}

stock EsconderText(playerid) {
for(new 
02i++) TextDrawHideForPlayer(playeridPaydayText[i]);
for(new 
01j++) PlayerTextDrawHide(playeridPaydayPlayerText[playerid][j]);
return 
1;




RE: Contador embaixo na tela. - MaxN - 07/10/2022

(15/07/2022 14:40)White_Blue Escreveu: É um tópico antigo, mas vou deixar minha mensagem se por a caso alguém precisar algum dia.



Como posso deixar em 10 minutos para ganhar, pode me ajudar?

Código PHP:
#define PAYDAY 40 // Defina o tempo do seu PayDay, defini para 40 minutos.

// Variáveis Globais
new Text:PaydayText[2];
new 
PlayerText:PaydayPlayerText[MAX_PLAYERS][1];
new 
PaydayTimer[MAX_PLAYERS];
new 
Timer[MAX_PLAYERS];

public 
OnGameModeInit() {
 
// TextDraws
 
PaydayText[0] = TextDrawCreate(432.058837384.249938"ld_grav:timer");
TextDrawTextSize(PaydayText[0], 24.00000028.000000);
TextDrawAlignment(PaydayText[0], 1);
TextDrawColor(PaydayText[0], -1);
TextDrawSetShadow(PaydayText[0], 0);
TextDrawBackgroundColor(PaydayText[0], 255);
TextDrawFont(PaydayText[0], 4);
TextDrawSetProportional(PaydayText[0], 0);

PaydayText[1] = TextDrawCreate(457.999847394.749969"box");
TextDrawLetterSize(PaydayText[1], 0.000000, -0.070588);
TextDrawTextSize(PaydayText[1], 618.0000000.000000);
TextDrawAlignment(PaydayText[1], 1);
TextDrawColor(PaydayText[1], -1);
TextDrawUseBox(PaydayText[1], 1);
TextDrawBoxColor(PaydayText[1], 255);
TextDrawSetShadow(PaydayText[1], 0);
TextDrawBackgroundColor(PaydayText[1], 255);
TextDrawFont(PaydayText[1], 1);
TextDrawSetProportional(PaydayText[1], 1);
 return 
1;
}

public 
OnPlayerConnect(playerid) {
 
// TextDraws
 
PaydayPlayerText[playerid][0] = CreatePlayerTextDraw(playerid624.588378396.500091"~w~Payday em ~g~40~w~ minutos!");
PlayerTextDrawLetterSize(playeridPaydayPlayerText[playerid][0], 0.4000001.600000);
PlayerTextDrawAlignment(playeridPaydayPlayerText[playerid][0], 3);
PlayerTextDrawColor(playeridPaydayPlayerText[playerid][0], 41215);
PlayerTextDrawSetShadow(playeridPaydayPlayerText[playerid][0], 0);
PlayerTextDrawSetOutline(playeridPaydayPlayerText[playerid][0], 1);
PlayerTextDrawBackgroundColor(playeridPaydayPlayerText[playerid][0], 255);
PlayerTextDrawFont(playeridPaydayPlayerText[playerid][0], 3);
PlayerTextDrawSetProportional(playeridPaydayPlayerText[playerid][0], 1);

MostrarText(playerid);

Timer[playerid] = PAYDAY 60 1;
// Timer
PaydayTimer[playerid] = SetTimerEx("PayDay"1000true"i"playerid);
 return 
1;
}

forward PayDay(i);
public 
PayDay(i)
{
new 
string[128];
Timer[i]--;
format(stringsizeof(string), "~w~Payday em ~g~%s~w~ minutos!"Convert(Timer[i]));
PlayerTextDrawSetString(iPaydayPlayerText[i][0], string);
if(
Timer[i] == 0) {
SetPlayerScore(iGetPlayerScore(i) + 1);
GivePlayerMoney(i2500);
SendClientMessage(i, -1"=========================\nPayday!\n=========================");
PlayerPlaySound(i11370.00.00.0);
Timer[i] = PAYDAY 60 1;
}
return 
1;
}

stock Convert(number) {
new 
hoursminssecsstring[100];
hours floatround(number 3600);
mins floatround((number 60) - (hours 60));
secs floatround(number - ((hours 3600) + (mins 60)));
if(
hours >= 24hours hours 24;

if(
hours 0format(string100"%02d:%02d:%02d"hoursminssecs);
else 
format(string100"%02d:%02d"minssecs);
return 
string;
}

stock MostrarText(playerid) {
for(new 
02i++) TextDrawShowForPlayer(playeridPaydayText[i]);
for(new 
01j++) PlayerTextDrawShow(playeridPaydayPlayerText[playerid][j]);
return 
1;
}

stock EsconderText(playerid) {
for(new 
02i++) TextDrawHideForPlayer(playeridPaydayText[i]);
for(new 
01j++) PlayerTextDrawHide(playeridPaydayPlayerText[playerid][j]);
return 
1;