[Ajuda] Payday
#1

Bom dia!

Bom, meu GM й baseado em GF, e tem um sistema de payday, que tem um loop e pega todos os players do server, e de hora em hora ele й executado...

Gostaria de uma ajuda de vocкs, preciso que ele em vez do loop, pegar player por player, e quando a pessoa logar, comeзar uma contagem de 60 minutos, ou comeзar do 0 e chegar ao 60, tanto faz, quando bater isso, dar o payday individualmente, e esse tempo ser salvo com DOF2.

A parte de salvar o tempo eu ja fiz, mas preciso adaptar o sistema de payday, pra que cada player receba individualmente, em vez de ser de hora em hora pra todo mundo...


PHP код:
public PayDay()
{
    new 
Containterest;
    new 
rent 0;
    
caralhodepayday true;
    for (new 
0MAX_PLAYERSi++)
    {
        if (
IsPlayerConnected(i) && !IsPlayerNPC(i))
        {
            if (
PlayerInfo[i][pLevel] > 0)
            {
                if (
Multa[i] > 1)
                {
                    if (!
PlayerInfo[i][pJailed])
                    {
                        
SendClientMessage(iCOR_TRIADS"Vocк devia ter debitado suas dнvidas, lhe enviaram um pedido de prisгo.");
                        
GameTextForPlayer(i"~r~apreendido !"20001);
                        
PlayerInfo[i][pJailTime] = 240;
                        
SetPlayerInterior(i6);
                        
SetPlayerPos(i264.628877.57421001.0391);
                        
PlayerInfo[i][pJailed] = 1;
                        
ResetPlayerWeapons(i);
                        
WantedPoints[i] = 0;
                        
format(gstringsizeof(gstring), "Vocк foi preso por %d segundos.   Fianзa: Desativada"PlayerInfo[i][pJailTime]);
                        
SendClientMessage(iCOLOR_LIGHTBLUEgstring);
                    }
                }
                if (
MoneyMessage[i] == 1)
                {
                    if (!
PlayerInfo[i][pJailed])
                    {
                        
SendClientMessage(iCOLOR_LIGHTRED"Vocк nгo pagou a sua dнvida e foi preso.");
                        
GameTextForPlayer(i"~r~Preso!"20001);
                        
SetPlayerInterior(i6);
                        
SetPlayerPos(i264.628877.57421001.0391);
                        
PlayerInfo[i][pJailed] = 1;
                        
ResetPlayerWeaponsEx(i);
                        
WantedPoints[i] = 0;
                        
SetPlayerWantedLevel(i0);
                        
PlayerInfo[i][pJailTime] = 600;
                        
format(gstringsizeof(gstring), "Vocк foi preso por %d segundos."PlayerInfo[i][pJailTime]);
                        
SendClientMessage(iCOLOR_LIGHTBLUEgstring);
                    }
                }
                new 
playername2[MAX_PLAYER_NAME];
                
GetPlayerName(iplayername2sizeof(playername2));
                
Conta PlayerInfo[i][pConta];
                new 
key PlayerInfo[i][pPHousekey];
                if (
key != 255)
                {
                    
rent HouseInfo[key][hRent];
                    if (
strcmp(playername2HouseInfo[key][hOwner], true) == 0)
                    {
                        
rent 0;
                    }
                    else if (
rent GetPlayerMoney(i))
                    {
                        
PlayerInfo[i][pPHousekey] = 255;
                        
SendClientMessage(iCOLOR_WHITE"Vocк foi expulso(a).");
                        
rent 0;
                    }
                    
HouseInfo[key][hTakings] = HouseInfo[key][hTakings] + rent;
                }
                new 
tmpintrate;
                if (
PlayerInfo[i][pVIP] == 1)
                {
                    
tmpintrate 0;
                }
                else if (
PlayerInfo[i][pVIP] == 2)
                {
                    
tmpintrate 0;
                }
                else if (
PlayerInfo[i][pSocio] == 1)
                {
                    
tmpintrate 0;
                }
                else if (
PlayerInfo[i][pSocio] == 2)
                {
                    
tmpintrate 0;
                }
                else if (
PlayerInfo[i][pSocio] == 3)
                {
                    
tmpintrate 0;
                }
                else
                {
                    
tmpintrate 10;
                }
                if (
PlayerInfo[i][pPayDay] >= 3)
                {
                    
Tax += TaxValue//Shorld work for every player online
                    
PlayerInfo[i][pConta] -= TaxValue;
                    new 
checks PlayerInfo[i][pSalario];
                    new 
ebill = (PlayerInfo[i][pConta] / 50) * (PlayerInfo[i][pLevel]);
                    
ConsumingMoney[i] = 1;
                    if (
PlayerInfo[i][pConta] > 0)
                    {
                        
PlayerInfo[i][pConta] -= ebill;
                        
SBizzInfo[4][sbTill] += 20;
                        
BizzInfo[3][bTill] += 20;
                        
SBizzInfo[11][sbTill] += 20;
                    }
                    else
                    {
                        
ebill 0;
                    }
                    
interest = (PlayerInfo[i][pConta] / 1000) * (tmpintrate);
                    
PlayerInfo[i][pExp]++;
                    
PlayerPlayMusic(i);
                    
PlayerInfo[i][pConta] = Conta interest;
                    
PlayerInfo[i][pConta] += checks;
                    
SendClientMessage(iCOR_GRO"[_BPV_] Pagamento [_BPV_]");
                    
format(gstringsizeof(gstring), "  [Salario]: {0FFF00}[R$%d] "checks);
                    
SendClientMessage(iCOLOR_WHITEgstring);
                    
format(gstringsizeof(gstring), "  [Juros]: {FF0005}[0.%d] {FFFFFF}por cento"tmpintrate);
                    
SendClientMessage(iCOLOR_WHITEgstring);
                    
format(gstringsizeof(gstring), "  [Antigo Saldo Bancбrio]: {646464}[R$%d] {FFFFFF}| [Novo Saldo Bancбrio]: {0FFF00}[R$%d]"ContaPlayerInfo[i][pConta]);
                    
SendClientMessage(iCOLOR_WHITEgstring);
                    
format(gstringsizeof(gstring), "  [Aluguel]: {FF0005}[-R$%d]"rent);
                    
SendClientMessage(iCOLOR_WHITEgstring);
                    
PlayerPlaySound(i11850.00.00.0);
                    
format(gstringsizeof(gstring), "~p~-==- ~g~Salario ~p~ -==-");
                    
GameTextForPlayer(igstring50001);
                    
GivePlayerMoney(i, -100);
                    
rent 0;
                    
PlayerInfo[i][pPayDay] = 0;
                    
PlayerInfo[i][pSalario] = 0;
                    
PlayerInfo[i][pCaixinha] = 0;
                    
PlayerInfo[i][pConnectTime] += 1;
                    
pban[i] = 0;
                    if (
PlayerInfo[i][pEmprego] > 0PlayerInfo[i][pPayDay] += 1;
                    if (
PlayerInfo[i][pPayDay] >= 5)
                    {
                        
PlayerInfo[i][pExp]++;
                        
PlayerInfo[i][pPayDay] = 0;
                    }
                }
                if (
PlayerInfo[i][pSocio] == 1)
                {
                    
PlayerInfo[i][pExp] += 3;
                    
PlayerInfo[i][pPayDay] = 0;
                }
                if (
PlayerInfo[i][pSocio] == 2)
                {
                    
PlayerInfo[i][pExp] += 4;
                    
PlayerInfo[i][pPayDay] = 0;
                }
                if (
PlayerInfo[i][pSocio] == 3)
                {
                    
PlayerInfo[i][pExp] += 5;
                    
PlayerInfo[i][pPayDay] = 0;
                }
                if (
PlayerInfo[i][pVIP] == 1)
                {
                    
PlayerInfo[i][pExp] += 1;
                    
PlayerInfo[i][pPayDay] = 0;
                }
                if (
PlayerInfo[i][pVIP] == 2)
                {
                    
PlayerInfo[i][pExp] += 2;
                    
PlayerInfo[i][pPayDay] = 0;
                }
                if (
WantedPoints[i] > 0)
                {
                    
WantedPoints[i] -= 1;
                    
SetPlayerWantedLevel(iWantedPoints[i]);
                    
format(gstringsizeof(gstring), "Nнvel de procurado: %d"WantedPoints[i]);
                    
SendClientMessage(iCOLOR_YELLOWgstring);
                }
                else
                {
                    
SendClientMessage(iCOLOR_LIGHTRED"* Vocк nгo jogou tempo suficiente para receber salбrio!");
                }
            }
        }
        new 
lolbagui;
        
lolbagui PlayerInfo[i][pExp];
        new 
nxtlevel PlayerInfo[i][pLevel] + 1;
        if (
PlayerInfo[i][pSocio] == 1)
        {
            
nxtlevel 1;
        }
        else if (
PlayerInfo[i][pSocio] == 2)
        {
            
nxtlevel 2;
        }
        else if (
PlayerInfo[i][pSocio] == 3)
        {
            
nxtlevel 3;
        }
        if (
lolbagui >= nxtlevel levelexp)
        {
            
GameTextForPlayer(i"~g~Respeito Adquirido!~n~~r~Digite /comprarnivel!"50001);
        }
    }
    return 
true;

Esse й a public do payday, no caso eu trocaria o loop (i) por playerid?

Aqui uma base que peguei para o sistema de salvar o tempo... Mas estou com uma dъvida, quando o tempo do timer chegar a 0, como faзo pra ele iniciar a contagem de novo?

PHP код:
new TempoParaPayday[MAX_PLAYERS], timertempoonline[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
TempoParaPayday[playerid] = DOF2_GetInt(local do arquivo"TempoOnline");
    
timertempoonline[playerid] = SetTimerEx("TempoOnlineTimer"60000true"i"playerid);
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    
DOF2_SetInt(local do arquivo"TempoOnline"TempoParaPayday[playerid]);
    
KillTimer(timertempoonline[playerid]);
    return 
1;
}
TempoOnlineTimer(playerid);
public 
TempoOnlineTimer(playerid)
{
    
TempoParaPayday[playerid]++;
    return 
1;

Obrigado!
Reply
#2

Quote:
Originally Posted by Sennior
Посмотреть сообщение
Esse й a public do payday, no caso eu trocaria o loop (i) por playerid?
Se for SetTimerEx nгo precisa de loop
Se for SetTime precisa de loop


Quote:
Originally Posted by Sennior
Посмотреть сообщение
Aqui uma base que peguei para o sistema de salvar o tempo... Mas estou com uma dъvida, quando o tempo do timer chegar a 0, como faзo pra ele iniciar a contagem de novo?
Код:
timertempoonline[playerid] = SetTimerEx("TempoOnlineTimer", 60000, true, "i", playerid);
true = com repetiзгo
false = sem repetiзгo
Reply
#3

Ah, maneiro, nгo sabia disso do SetTimeEx do true e false.

E a parte la do loop, entendi F1N4L, mas por exemplo, quero colocar o payday individualmente pra cada pessoa, eu tiro o
PHP код:
for (new 0MAX_PLAYERSi++){} 
e troco os
PHP код:
(i)[i
por
PHP код:
(playerid)[playerid
?

Obrigado!
Reply
#4

Vou dar-lhe uma recomendaзгo:
Supondo que hб 300 players online em seu servidor, haverб 300 timers ativos. Ninguйm recomenda a utilizaзгo de timers desta forma e ainda mais para algo tгo simples que poderia ser feito com apenas um, olhe...


Fiz um codigo limpo para melhor entendimento.
Код:
#include a_samp

new TempoOnline[MAX_PLAYERS];

main()
{
	SetTimer("PayDay", 1000, true); // timer ъnico com repetiзгo de 1 segundo
}

public OnPlayerConnect(playerid)
{
	TempoOnline[playerid] = 60 * 60 + gettime(); // 60 minutos / 1 hora
	
	return true;
}

forward PayDay();
public PayDay()
{
	if(TempoOnline[playerid] < gettime())
	{
		TempoOnline[playerid] = 60 * 60 + gettime(); // Para comeзar a nova contagem
		
		GivePlayerMoney(playerid, 1000); // dб o dinheiro
		
		SendClientMessage(playerid, -1, "Vocк recebeu por ser um escravo da Dilma!"); // mensagem ao receber
	}
	return true;
}
Veja que com um timer e uma condicional fizemos um payday simples e eficiente.
Claro que ao sair o tempo serб perdido, mas й sу salvar o valor da variбvel e a contagem continuarб!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)