Portal SAMP
[Ajuda] PayDay fora de hora - 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: [Ajuda] PayDay fora de hora (/showthread.php?tid=1814)



PayDay fora de hora - xxxjhonatan_wi - 04/11/2021

Criei um sisteminha de payday para o player ganhar score e dinheiro a cada minuto(esse tempo pra fazer o teste), porém, o payday cai em momentos diferentes, sem seguir o cronograma de 1 minuto.

Ex: ele cai em em 1minuto e 5 segundos, 55 segundos, 1 minuto e 10 segundos...

CÓDIGO:

Parte: public OnGameModeInit()

Código:
SetTimer("PayDay", 60000, true);


O RESTO ABAIXO::


Código:
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, "Player vip: Ganhou +2 score e mais $4250");
        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, 4250);
        }

    }
    }
    if(PlayerInfo[playerid][Acionista] == 1)
    {
        SendClientMessage(playerid, -1, "============== PAYDAY ============== ");
        SendClientMessage(playerid, -1, "Player Acionista: Ganhou +2 score e mais $4250");
        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, 4250);
        }

    }
    }
}



RE: PayDay fora de hora - MrThúúG - 04/11/2021

Eu faria assim...

Código PHP:
new TIMERPAYDAY[MAX_PLAYERS]; // Topo do GM


TIMERPAYDAY[playerid] = SetTimerEx"PayDay"60000 true"d"playerid); // Em On Player Spawn


KillTimer(TIMERPAYDAY[playerid]); // OnPlayerDisconnect


forward PayDay(playerid);
public 
PayDay(playerid)
{
    if(
PlayerInfo[playerid][Vip] < 1  || PlayerInfo[playerid][Acionista] <  1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Voce recebeu + 1 score e $6500");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+1);
        
GivePlayerMoney(playerid6500);
    }
    else if(
PlayerInfo[playerid][Vip] == 1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Player vip: Ganhou +2 score e mais $4250");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+2);
        
GivePlayerMoney(playerid4250);

    }
    else if(
PlayerInfo[playerid][Acionista] == 1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Player Acionista: Ganhou +2 score e mais $4250");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+2);
        
GivePlayerMoney(playerid4250);

    }
    return 
1;




RE: PayDay fora de hora - xbruno1000x - 04/11/2021

Quando for chamar um timer para uma public que tenha variáveis, use SetTimerEx. O exemplo acima, do MrThúúG, está perfeito.


RE: PayDay fora de hora - Flenexg - 04/11/2021

utilize a include timerfix, ela arruma esse problema com os timers.


RE: PayDay fora de hora - xxxjhonatan_wi - 05/11/2021

(04/11/2021 21:09)MrThúúG Escreveu: Eu faria assim...

Código PHP:
new TIMERPAYDAY[MAX_PLAYERS]; // Topo do GM


TIMERPAYDAY[playerid] = SetTimerEx"PayDay"60000 true"d"playerid); // Em On Player Spawn


KillTimer(TIMERPAYDAY[playerid]); // OnPlayerDisconnect


forward PayDay(playerid);
public 
PayDay(playerid)
{
    if(
PlayerInfo[playerid][Vip] < 1  || PlayerInfo[playerid][Acionista] <  1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Voce recebeu + 1 score e $6500");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+1);
        
GivePlayerMoney(playerid6500);
    }
    else if(
PlayerInfo[playerid][Vip] == 1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Player vip: Ganhou +2 score e mais $4250");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+2);
        
GivePlayerMoney(playerid4250);

    }
    else if(
PlayerInfo[playerid][Acionista] == 1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Player Acionista: Ganhou +2 score e mais $4250");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+2);
        
GivePlayerMoney(playerid4250);

    }
    return 
1;


Ele da mais de um payday mesmo sem estar setado como acionista ou vip e continua sem ser na hora certa ;-;

(04/11/2021 22:50)Flenexg Escreveu: utilize a include timerfix, ela arruma esse problema com os timers.

eu baixei a include e fui testar com o meu código, mas se eu ativo a include, qnd eu abro o servidor ele consta sem "gamemode", ele volta com o botão de spawn e faz eu spawnar naquele lugar no nada. ele ignora tudo que tem na gamemode pronto


RE: PayDay fora de hora - MrThúúG - 06/11/2021

(05/11/2021 15:16)xxxjhonatan_wi Escreveu:
(04/11/2021 21:09)MrThúúG Escreveu: Eu faria assim...

Código PHP:
new TIMERPAYDAY[MAX_PLAYERS]; // Topo do GM


TIMERPAYDAY[playerid] = SetTimerEx"PayDay"60000 true"d"playerid); // Em On Player Spawn


KillTimer(TIMERPAYDAY[playerid]); // OnPlayerDisconnect


forward PayDay(playerid);
public 
PayDay(playerid)
{
    if(
PlayerInfo[playerid][Vip] < 1  || PlayerInfo[playerid][Acionista] <  1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Voce recebeu + 1 score e $6500");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+1);
        
GivePlayerMoney(playerid6500);
    }
    else if(
PlayerInfo[playerid][Vip] == 1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Player vip: Ganhou +2 score e mais $4250");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+2);
        
GivePlayerMoney(playerid4250);

    }
    else if(
PlayerInfo[playerid][Acionista] == 1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Player Acionista: Ganhou +2 score e mais $4250");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+2);
        
GivePlayerMoney(playerid4250);

    }
    return 
1;


Ele da mais de um payday mesmo sem estar setado como acionista ou vip e continua sem ser na hora certa ;-;

(04/11/2021 22:50)Flenexg Escreveu: utilize a include timerfix, ela arruma esse problema com os timers.

eu baixei a include e fui testar com o meu código, mas se eu ativo a include, qnd eu abro o servidor ele consta sem "gamemode", ele volta com o botão de spawn e faz eu spawnar naquele lugar no nada. ele ignora tudo que tem na gamemode pronto

Se o server é em windows você tem que por o arquivo timerfix.dll na pasta plugins e no server.cfg, e se for linux timerfix.so no server.cfg e na pasta plugins.


RE: PayDay fora de hora - xxxjhonatan_wi - 06/11/2021

(06/11/2021 10:13)MrThúúG Escreveu:
(05/11/2021 15:16)xxxjhonatan_wi Escreveu:
(04/11/2021 21:09)MrThúúG Escreveu: Eu faria assim...

Código PHP:
new TIMERPAYDAY[MAX_PLAYERS]; // Topo do GM


TIMERPAYDAY[playerid] = SetTimerEx"PayDay"60000 true"d"playerid); // Em On Player Spawn


KillTimer(TIMERPAYDAY[playerid]); // OnPlayerDisconnect


forward PayDay(playerid);
public 
PayDay(playerid)
{
    if(
PlayerInfo[playerid][Vip] < 1  || PlayerInfo[playerid][Acionista] <  1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Voce recebeu + 1 score e $6500");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+1);
        
GivePlayerMoney(playerid6500);
    }
    else if(
PlayerInfo[playerid][Vip] == 1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Player vip: Ganhou +2 score e mais $4250");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+2);
        
GivePlayerMoney(playerid4250);

    }
    else if(
PlayerInfo[playerid][Acionista] == 1)
    {
        

        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        
SendClientMessage(playerid, -1"Player Acionista: Ganhou +2 score e mais $4250");
        
SendClientMessage(playerid, -1"============== PAYDAY ============== ");
        new 
scoreantigo GetPlayerScore(playerid);
        
SetPlayerScore(playeridscoreantigo+2);
        
GivePlayerMoney(playerid4250);

    }
    return 
1;


Ele da mais de um payday mesmo sem estar setado como acionista ou vip e continua sem ser na hora certa ;-;

(04/11/2021 22:50)Flenexg Escreveu: utilize a include timerfix, ela arruma esse problema com os timers.

eu baixei a include e fui testar com o meu código, mas se eu ativo a include, qnd eu abro o servidor ele consta sem "gamemode", ele volta com o botão de spawn e faz eu spawnar naquele lugar no nada. ele ignora tudo que tem na gamemode pronto

Se o server é em windows você tem que por o arquivo timerfix.dll na pasta plugins e no server.cfg, e se for linux timerfix.so no server.cfg e na pasta plugins.

você pode mandar o download? o único que eu acho é timerfix.inc


RE: PayDay fora de hora - MrThúúG - 06/11/2021

Compilei do: github.com/udan11/samp-plugin-timerfix

.dll https://www.mediafire.com/file/4vxd32iyt22rnoc/timerfix.dll/file

.inc https://www.mediafire.com/file/9buxnlu1jnizw78/timerfix.inc/file


RE: PayDay fora de hora - Cesar157 - 17/06/2023

Será que você pode renovar o link amigo por gentileza