Relógio Payday - Duzzxls - 14/04/2024
Alguém pode fazer um sistema de mostrar as horas e minutos em textodraw de Payday? Eu já fiz a Textdraw, só falta ela funcionar. Ela tá assim: 59:21 (demonstração), só preciso do looping pra fazer funcionar o tempo e mostrar na tela, ela é para o Player não global.
RE: Relógio Payday - samuelmatheus0502 - 14/04/2024
Olá meu amigo, fiz um aqui rapidinho pra você ter ideia e adaptar para você, lembrando existe inumeras maneiras de fazer, essa foi a maneira que eu fiz...
Código: // No começo do seu gamemode juntos com suas variaveis adicione essas abaixos
new bool:timerPayday[MAX_PLAYERS];//variavel para ligar o timer
new idTimerPayday[MAX_PLAYERS];//variavel para armazenar o timer unico de cada player
new secondTimer[MAX_PLAYERS];//variavel para armazenar os segundos do timer
new minuteTimer[MAX_PLAYERS];//variavel para armazenar os minutos do timer
// ligarTimerPayday adicione essa função na public onplayerspawn da seguinte maniera: ligarTimerPayday(playerid);
/* EXEMPLO -------------------
OnPlayerSpawn(playerid) {
ligarTimerPayday(playerid);
return 1;
}
-----------------------------*/
// desligarTimerPayday adicione essa função na public onplayerdisconnect da seguinte maniera: desligarTimerPayday(playerid);
/* EXEMPLO ---------------------
OnPlayerDisconnect(playerid) {
desligarTimerPayday(playerid);
return 1;
}----------------------------*/
/* todas esses códigos abaixos adicione no final do seu gamemode, essas são as funções que rodará o seu timer,
OBS: eu fiz a atualizar em sendclientmessage, você terá que mudar para textdraw usando playertextdrawsetstring*/
ligarTimerPayday(playerid) { // função para ligar o timer
if(timerPayday[playerid] == false) {
timerPayday[playerid] = true;
idTimerPayday[playerid] = SetTimerEx("timerPaydayForPlayer", 1000, true,"i", playerid);
minuteTimer[playerid] = 60;
secondTimer[playerid] = 0;
}
return 1;
}
desligarTimerPayday(playerid) {// função desligar timer
if(timerPayday[playerid] == true) {
KillTimer(idTimerPayday[playerid]);
}
return 1;
}
forward timerPaydayForPlayer(playerid);
public timerPaydayForPlayer(playerid) {
new string[256];
if(minuteTimer[playerid] == 0 && secondTimer[playerid] == 0) { // aqui é se o timer finalizar, ou seja se ficar 00:00, onde você atualizaria sua textdraw com playertextdrawsetstring
SendClientMessage(playerid, -1, "SEU PAGAMENTO CHEGOU!!");
minuteTimer[playerid] = 60;
secondTimer[playerid] = 0;
return 1;
}
if(secondTimer[playerid] == 0) { // aqui é se o segundo zerar, ou seja, ex: 51:00 vai para 50:59
minuteTimer[playerid] --;
secondTimer[playerid] = 59;
format(string, sizeof(string),"%02d:%02d",minuteTimer[playerid], secondTimer[playerid]);
SendClientMessage(playerid, -1, string);
} else { // aqui é se nenhum dos casos acima ocorrer, nocaso subtrai 1 segundo do timer
secondTimer[playerid] --;
format(string, sizeof(string),"%02d:%02d",minuteTimer[playerid], secondTimer[playerid]);
SendClientMessage(playerid, -1, string);
}
return 1;
}
Lembrando: você terá que adaptar ao seu sistema de salvamento. Tendo que setar o segundo e minuto que ficou da última vez que o player logou, aí terá que criar uma função para isso
estou disposto a te ajudar se tiver alguma dúvida.
RE: Relógio Payday - Duzzxls - 16/04/2024
(14/04/2024 21:44)samuelmatheus0502 Escreveu: Olá meu amigo, fiz um aqui rapidinho pra você ter ideia e adaptar para você, lembrando existe inumeras maneiras de fazer, essa foi a maneira que eu fiz...
Código: // No começo do seu gamemode juntos com suas variaveis adicione essas abaixos
new bool:timerPayday[MAX_PLAYERS];//variavel para ligar o timer
new idTimerPayday[MAX_PLAYERS];//variavel para armazenar o timer unico de cada player
new secondTimer[MAX_PLAYERS];//variavel para armazenar os segundos do timer
new minuteTimer[MAX_PLAYERS];//variavel para armazenar os minutos do timer
// ligarTimerPayday adicione essa função na public onplayerspawn da seguinte maniera: ligarTimerPayday(playerid);
/* EXEMPLO -------------------
OnPlayerSpawn(playerid) {
ligarTimerPayday(playerid);
return 1;
}
-----------------------------*/
// desligarTimerPayday adicione essa função na public onplayerdisconnect da seguinte maniera: desligarTimerPayday(playerid);
/* EXEMPLO ---------------------
OnPlayerDisconnect(playerid) {
desligarTimerPayday(playerid);
return 1;
}----------------------------*/
/* todas esses códigos abaixos adicione no final do seu gamemode, essas são as funções que rodará o seu timer,
OBS: eu fiz a atualizar em sendclientmessage, você terá que mudar para textdraw usando playertextdrawsetstring*/
ligarTimerPayday(playerid) { // função para ligar o timer
if(timerPayday[playerid] == false) {
timerPayday[playerid] = true;
idTimerPayday[playerid] = SetTimerEx("timerPaydayForPlayer", 1000, true,"i", playerid);
minuteTimer[playerid] = 60;
secondTimer[playerid] = 0;
}
return 1;
}
desligarTimerPayday(playerid) {// função desligar timer
if(timerPayday[playerid] == true) {
KillTimer(idTimerPayday[playerid]);
}
return 1;
}
forward timerPaydayForPlayer(playerid);
public timerPaydayForPlayer(playerid) {
new string[256];
if(minuteTimer[playerid] == 0 && secondTimer[playerid] == 0) { // aqui é se o timer finalizar, ou seja se ficar 00:00, onde você atualizaria sua textdraw com playertextdrawsetstring
SendClientMessage(playerid, -1, "SEU PAGAMENTO CHEGOU!!");
minuteTimer[playerid] = 60;
secondTimer[playerid] = 0;
return 1;
}
if(secondTimer[playerid] == 0) { // aqui é se o segundo zerar, ou seja, ex: 51:00 vai para 50:59
minuteTimer[playerid] --;
secondTimer[playerid] = 59;
format(string, sizeof(string),"%02d:%02d",minuteTimer[playerid], secondTimer[playerid]);
SendClientMessage(playerid, -1, string);
} else { // aqui é se nenhum dos casos acima ocorrer, nocaso subtrai 1 segundo do timer
secondTimer[playerid] --;
format(string, sizeof(string),"%02d:%02d",minuteTimer[playerid], secondTimer[playerid]);
SendClientMessage(playerid, -1, string);
}
return 1;
}
Lembrando: você terá que adaptar ao seu sistema de salvamento. Tendo que setar o segundo e minuto que ficou da última vez que o player logou, aí terá que criar uma função para isso
estou disposto a te ajudar se tiver alguma dúvida.
obrigado, adaptei ao meu servidor e esta funcionando certinho. So queria saber como funciona o SetTimerEx, os parametros e etc
RE: Relógio Payday - samuelmatheus0502 - 16/04/2024
Então cara, confesso que eu mesmo não sei exatamente ta, mas até onde eu sei é que settimerex é usada para setar timer diratamente para o player, e o settimer quando é coisas relacionado ao servidor que não tem nada a ver com nenhum player.
Que bom que deu tudo certo aí, fico feliz
RE: Relógio Payday - White_Blue - 17/04/2024
(16/04/2024 21:52)samuelmatheus0502 Escreveu: Então cara, confesso que eu mesmo não sei exatamente ta, mas até onde eu sei é que settimerex é usada para setar timer diratamente para o player, e o settimer quando é coisas relacionado ao servidor que não tem nada a ver com nenhum player.
Que bom que deu tudo certo aí, fico feliz
Não exatamente. O SetTimerEx permite você passar especificadores para o timer, isso inclui o ID do jogador por exemplo. Mas não se limita a isso.
RE: Relógio Payday - Carlos Victor - 17/04/2024
Fiz uma forma mais simples e mais "otimizado", manipulando apenas uma variável.
Código PHP: #include <a_samp>
new gPayday[MAX_PLAYERS];
public OnGameModeInit() { SetTimer("OnPaydayTimer", 1000, true); return 1; }
public OnPlayerConnect(playerid) { gPayday[playerid] = 3600; return 1; }
forward OnPaydayTimer(); public OnPaydayTimer() { for (new i = 0, j = GetPlayerPoolSize(); i <= j; i++) { if (IsPlayerConnected(i)) { if (--gPayday[i] <= 0) { gPayday[i] = 3600; GivePlayerMoney(i, 2500);
SendClientMessage(i, -1, "* Você recebeu seu pagamento!"); } else { format(string, sizeof(string), "Payday~n~%02d:%02d", gPayday[i] / 60, gPayday[i] % 60); GameTextForPlayer(i, string, 1200, 3); } } } return 1; }
RE: Relógio Payday - Duzzxls - 20/04/2024
O que é esse parâmetro "i"?
RE: Relógio Payday - White_Blue - 20/04/2024
(20/04/2024 08:19)Duzzxls Escreveu: O que é esse parâmetro "i"?
"i" nesse caso não é um parâmetro, sim o que a gente chama de iterador (i é a letra inicial de I-terator, que virou uma convenção na programação nomear o iterador de "i"). Eu recomendo estudar bastante sobre loops se você ainda não sabe o que é, por que é algo que você vai precisar usar bastante.
|