RE: SetTimer e SetTimerEx - Básico - White_Blue - 24/11/2022
(24/11/2022 07:00)MisteriumBr Escreveu: Para isto existe a função KillTimer.
Código PHP: new timer[MAX_PLAYERS];
public OnPlayerConnect(playerid) { Timer[playerid] = SetTimerEx("StartTimer", 10000, true, "i", playerid); // Inicia o timer quando o player entra no servidor return 1; }
public OnPlayerDisconnect(playerid, reason) { KillTimer(Timer[playerid]); // Executamos a KillTimer, que para o timer. return 1; }
forward StartTimer(playerid); public StartTimer(playerid) { GivePlayerMoney(playerid, 1000); // Neste exemplo, o timer dará $1,000 para o player a cada 10 segundos enquanto ele estiver desconectado return 1; }
Me tira uma dúvida para ver se estou fazendo certo, estou querendo colocar um anti farm na hora de vender veiculos, para o player não ficar comprando e vendendo o veículo o tempo todo, então pensei em colocar um SetTimer para limitar o uso do comando caso ele seja executado de novo. E seja liberado depois de 1 hora por exemplo. O uso do SetTimeEx serve para fazer isso, se puder me dar uma luz de código alternativo mais simples, valeu irmão Para isso não é necessário SetTimerEx. Você pode usar timestamp.
OBS: Se o jogador sair do servidor e entrar, o tempo será zerado. Então se quiser salvar terá que usar seu sistema de salvamento.
Código PHP: CMD:teste(playerid) { if(gettime() - GetPVarInt(playerid, "Time") < 3600000) return SendClientMessage(playerid, -1, "Aguarde 1 hora para usar o comando novamente."); SetPVarInt(playerid, "Time", gettime()); SendClientMessage(playerid, -1, "Você usou o comando! Agora só poderá usar novamente em 1 hora."); return 1; }
RE: SetTimer e SetTimerEx - Básico - MisteriumBr - 24/11/2022
(24/11/2022 09:17)White_Blue Escreveu: (24/11/2022 07:00)MisteriumBr Escreveu: Para isto existe a função KillTimer.
Código PHP: new timer[MAX_PLAYERS];
public OnPlayerConnect(playerid) { Timer[playerid] = SetTimerEx("StartTimer", 10000, true, "i", playerid); // Inicia o timer quando o player entra no servidor return 1; }
public OnPlayerDisconnect(playerid, reason) { KillTimer(Timer[playerid]); // Executamos a KillTimer, que para o timer. return 1; }
forward StartTimer(playerid); public StartTimer(playerid) { GivePlayerMoney(playerid, 1000); // Neste exemplo, o timer dará $1,000 para o player a cada 10 segundos enquanto ele estiver desconectado return 1; }
Me tira uma dúvida para ver se estou fazendo certo, estou querendo colocar um anti farm na hora de vender veiculos, para o player não ficar comprando e vendendo o veículo o tempo todo, então pensei em colocar um SetTimer para limitar o uso do comando caso ele seja executado de novo. E seja liberado depois de 1 hora por exemplo. O uso do SetTimeEx serve para fazer isso, se puder me dar uma luz de código alternativo mais simples, valeu irmão Para isso não é necessário SetTimerEx. Você pode usar timestamp.
OBS: Se o jogador sair do servidor e entrar, o tempo será zerado. Então se quiser salvar terá que usar seu sistema de salvamento.
Código PHP: CMD:teste(playerid) { if(gettime() - GetPVarInt(playerid, "Time") < 3600000) return SendClientMessage(playerid, -1, "Aguarde 1 hora para usar o comando novamente."); SetPVarInt(playerid, "Time", gettime()); SendClientMessage(playerid, -1, "Você usou o comando! Agora só poderá usar novamente em 1 hora."); return 1; }
Cara queria te agradecer primeiramente esta me ajudando demais.
Esse codigo acima me funcionou legal, mas como eu poderia estar salvando essa informação para cada player, sou um pouco iniciante e é a primeira vez que estou mexendo com gettime, quebrei a cabeça com o SetTimeEx antes mas você me ajudou XD
RE: SetTimer e SetTimerEx - Básico - White_Blue - 24/11/2022
(24/11/2022 15:37)MisteriumBr Escreveu: (24/11/2022 09:17)White_Blue Escreveu: (24/11/2022 07:00)MisteriumBr Escreveu: Para isto existe a função KillTimer.
Código PHP: new timer[MAX_PLAYERS];
public OnPlayerConnect(playerid) { Timer[playerid] = SetTimerEx("StartTimer", 10000, true, "i", playerid); // Inicia o timer quando o player entra no servidor return 1; }
public OnPlayerDisconnect(playerid, reason) { KillTimer(Timer[playerid]); // Executamos a KillTimer, que para o timer. return 1; }
forward StartTimer(playerid); public StartTimer(playerid) { GivePlayerMoney(playerid, 1000); // Neste exemplo, o timer dará $1,000 para o player a cada 10 segundos enquanto ele estiver desconectado return 1; }
Me tira uma dúvida para ver se estou fazendo certo, estou querendo colocar um anti farm na hora de vender veiculos, para o player não ficar comprando e vendendo o veículo o tempo todo, então pensei em colocar um SetTimer para limitar o uso do comando caso ele seja executado de novo. E seja liberado depois de 1 hora por exemplo. O uso do SetTimeEx serve para fazer isso, se puder me dar uma luz de código alternativo mais simples, valeu irmão Para isso não é necessário SetTimerEx. Você pode usar timestamp.
OBS: Se o jogador sair do servidor e entrar, o tempo será zerado. Então se quiser salvar terá que usar seu sistema de salvamento.
Código PHP: CMD:teste(playerid) { if(gettime() - GetPVarInt(playerid, "Time") < 3600000) return SendClientMessage(playerid, -1, "Aguarde 1 hora para usar o comando novamente."); SetPVarInt(playerid, "Time", gettime()); SendClientMessage(playerid, -1, "Você usou o comando! Agora só poderá usar novamente em 1 hora."); return 1; }
Cara queria te agradecer primeiramente esta me ajudando demais.
Esse codigo acima me funcionou legal, mas como eu poderia estar salvando essa informação para cada player, sou um pouco iniciante e é a primeira vez que estou mexendo com gettime, quebrei a cabeça com o SetTimeEx antes mas você me ajudou XD
Ficarei feliz em ajudar. Mas primeiro tenho que saber qual sistema de salvamento você usa. Ex: MySQL, DOF2, Dini.
RE: SetTimer e SetTimerEx - Básico - MisteriumBr - 24/11/2022
No momento estou usando DOF2
RE: SetTimer e SetTimerEx - Básico - White_Blue - 24/11/2022
(24/11/2022 15:46)MisteriumBr Escreveu: No momento estou usando DOF2
Então é simples. Nesse caso, usaremos o timer para salvar.
Código PHP: new Timer[MAX_PLAYERS];
forward Timer(playerid); public Timer(playerid) { new Arquivo[128], pname[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); format(Arquivo, sizeof(Arquivo), "/Sua_Pasta_de_Contas/%s",); DOF2_SetInt(Arquivo, "Time", 0); return 1; }
CMD:teste(playerid) { new Arquivo[128], pname[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); format(Arquivo, sizeof(Arquivo), "/Sua_Pasta_de_Contas/%s",); if(DOF2_GetInt(Arquivo, "Time")) return SendClientMessage(playerid, -1, "Você só pode usar este comando dentro de 1 hora!"); DOF2_SetInt(Arquivo, "Time", 1); SendClientMessage(playerid, -1, "Comando efetuado! Agora você só poderá usar este comando dentro de 1 hora."); Timer[playerid] = SetTimerEx("Timer", 3600000, false, "i", playerid); // Seta o timer para 1 hora para resetar e o player poder usar o comando novamente. DOF2_SetInt(Arquivo, "Tempo", Timer); return 1; }
public OnPlayerDisconnect(playerid, reason) { KillTimer(Timer[playerid]); return 1; }
RE: SetTimer e SetTimerEx - Básico - MisteriumBr - 24/11/2022
[quote pid="11827" dateline="1669316672"]
Então é simples. Nesse caso, usaremos o timer para salvar.
Código PHP: new Timer[MAX_PLAYERS];
forward Timer(playerid); public Timer(playerid) { new Arquivo[128], pname[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); format(Arquivo, sizeof(Arquivo), "/Sua_Pasta_de_Contas/%s",); DOF2_SetInt(Arquivo, "Time", 0); return 1; }
CMD:teste(playerid) { new Arquivo[128], pname[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); format(Arquivo, sizeof(Arquivo), "/Sua_Pasta_de_Contas/%s",); if(DOF2_GetInt(Arquivo, "Time")) return SendClientMessage(playerid, -1, "Você só pode usar este comando dentro de 1 hora!"); DOF2_SetInt(Arquivo, "Time", 1); SendClientMessage(playerid, -1, "Comando efetuado! Agora você só poderá usar este comando dentro de 1 hora."); Timer[playerid] = SetTimerEx("Timer", 3600000, false, "i", playerid); // Seta o timer para 1 hora para resetar e o player poder usar o comando novamente. DOF2_SetInt(Arquivo, "Tempo", Timer); return 1; }
public OnPlayerDisconnect(playerid, reason) { KillTimer(Timer[playerid]); return 1; }
[/quote]
Nesse caso quando o player conectar novamente ele recupera o tempo?
Eu vi que tem um KillTimer em OnPlayerDisconnect ele apenas para o timer ou apaga?
RE: SetTimer e SetTimerEx - Básico - White_Blue - 24/11/2022
(24/11/2022 16:16)MisteriumBr Escreveu: [quote pid="11827" dateline="1669316672"]
Código PHP: Então é simples. Nesse caso, usaremos o timer para salvar.
[php]new Timer[MAX_PLAYERS];
forward Timer(playerid); public Timer(playerid) { new Arquivo[128], pname[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); format(Arquivo, sizeof(Arquivo), "/Sua_Pasta_de_Contas/%s",); DOF2_SetInt(Arquivo, "Time", 0); return 1; }
CMD:teste(playerid) { new Arquivo[128], pname[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); format(Arquivo, sizeof(Arquivo), "/Sua_Pasta_de_Contas/%s",); if(DOF2_GetInt(Arquivo, "Time")) return SendClientMessage(playerid, -1, "Você só pode usar este comando dentro de 1 hora!"); DOF2_SetInt(Arquivo, "Time", 1); SendClientMessage(playerid, -1, "Comando efetuado! Agora você só poderá usar este comando dentro de 1 hora."); Timer[playerid] = SetTimerEx("Timer", 3600000, false, "i", playerid); // Seta o timer para 1 hora para resetar e o player poder usar o comando novamente. DOF2_SetInt(Arquivo, "Tempo", Timer); return 1; }
public OnPlayerDisconnect(playerid, reason) { KillTimer(Timer[playerid]); return 1; }
Nesse caso quando o player conectar novamente ele recupera o tempo?
Eu vi que tem um KillTimer em OnPlayerDisconnect ele apenas para o timer ou apaga?
Não salva o tempo quando o player reconectar, se ele quita o timer reseta.
O KillTimer na OnPlayerDisconnect é para otimizar melhor.
|