[Ajuda] Problema com Timer
#1

Faz tempo que nгo recorro mais a esse fуrum, geralmente faзo meus cуdigos em 1 hora, e levo mais 2 para arrumar ele. Sу que dessa vez nгo estou conseguindo resolver.

Criei o sistema de gangzone para meu gamemode que estou fazendo do 0. Como todo sistema/cуdigo que faзo, passo mais tempo arrumando os bugs, do que fazendo ele, mas depois de tanto tempo, ainda nгo consegui resolver esse.

Minha ideia, era demorar um minuto, para dominar uma GangZone:

Код:
SetTimerEx("DominandoGZ", 60000, false, "id", playerid, 2);
Dominando[playerid] = 2;
Mas geralmente demora de 65 a 67 segundos:

Reply
#2

Vocк pode tentar fazer o timer assim
Код:
SetTimerEx("DominandoGZ", 30000 * 2, false, "id", playerid, 2);
Ou vocк tambйm pode fazer uma public em forma de loop basicamente, repetindo-a atй chegar a variбvel X que seria o tempo de dominar a GZ.
Reply
#3

@SaDaN Trocar 60000, por (30000 * 2), й mesma coisa que trocar 6 por meia duzia.


Creio que o problema esteja no cуdigo lento por estar mal feito, pois a Favela, й a gangzone 2, atrasou em 5 segundos, a primeira й Pista de Skate, fui testar e nгo teve atraso, e a Mata, й a quinta e teve atraso de 10 seg.

Vou deixar o DominandoGZ(playerid, GzID) abaixo:

Код:
public DominandoGZ(playerid, GzID)
{

	if(PlayerEmGangZone(playerid) != Dominando[playerid])
	{
		FalharDominio(playerid);
		return 1;
	}
	if(GzID == 1)
	{
	    GangZoneStopFlashForAll(GZPistaSkate);
		Dominando[playerid] = 0;
		SDPistaSkate = 0;
     	if(GetPlayerOrg(playerid) == 1)
     	{
     		DonoPistaSkate = 1;
     	    SendClientMessageToAll(COR_ORG1, "[GZ] A Policia Militar dominou a Pista de Skate");
			GangZoneShowForAll(GZPistaSkate, COR_ORG1);
		}
     	if(GetPlayerOrg(playerid) == 9)
     	{
     	    DonoPistaSkate = 9;
     	    SendClientMessageToAll(COR_ORG9, "[GZ] A Grove Street dominou a Pista de Skate");
			GangZoneShowForAll(GZPistaSkate, COR_ORG9);
		}
     	if(GetPlayerOrg(playerid) == 10)
     	{
     	    DonoPistaSkate = 10;
     	    SendClientMessageToAll(COR_ORG10, "[GZ] Os Los Santos Vagos dominaram a Pista de Skate");
			GangZoneShowForAll(GZPistaSkate, COR_ORG10);
		}
     	if(GetPlayerOrg(playerid) == 11)
     	{
     	    DonoPistaSkate = 11;
     	    SendClientMessageToAll(COR_ORG11, "[GZ] Os Los Aztecas dominaram a Pista de Skate");
			GangZoneShowForAll(GZPistaSkate, COR_ORG11);
		}
     	if(GetPlayerOrg(playerid) == 12)
     	{
     	    DonoPistaSkate = 12;
     	    SendClientMessageToAll(COR_ORG13, "[GZ] Os Ballas dominaram a Pista de Skate");
			GangZoneShowForAll(GZPistaSkate, COR_ORG12);
		}
     	if(GetPlayerOrg(playerid) == 13)
     	{
     	    DonoPistaSkate = 13;
     	    SendClientMessageToAll(COR_ORG13, "[GZ] Os Bloods dominaram a Pista de Skate");
			GangZoneShowForAll(GZPistaSkate, COR_ORG13);
		}
	}
	
	if(GzID == 2)
	{
	    GangZoneStopFlashForAll(GZFavela);
		Dominando[playerid] = 0;
		SDFavela = 0;
     	if(GetPlayerOrg(playerid) == 1)
     	{
     	    DonoFavela = 1;
     	    SendClientMessageToAll(COR_ORG1, "[GZ] A Policia Militar dominou a Favela");
			GangZoneShowForAll(GZFavela, COR_ORG1);
		}
     	if(GetPlayerOrg(playerid) == 9)
     	{
     	    DonoFavela = 9;
     	    SendClientMessageToAll(COR_ORG9, "[GZ] A Grove Street dominou a Favela");
			GangZoneShowForAll(GZFavela, COR_ORG9);
		}
     	if(GetPlayerOrg(playerid) == 10)
     	{
     	    DonoFavela = 10;
     	    SendClientMessageToAll(COR_ORG10, "[GZ] Os Los Santos Vagos dominaram a Favela");
			GangZoneShowForAll(GZFavela, COR_ORG10);
		}
     	if(GetPlayerOrg(playerid) == 11)
     	{
     	    DonoFavela = 11;
     	    SendClientMessageToAll(COR_ORG11, "[GZ] Os Los Aztecas dominaram a Favela");
			GangZoneShowForAll(GZFavela, COR_ORG11);
		}
     	if(GetPlayerOrg(playerid) == 12)
     	{
     	    DonoFavela = 12;
     	    SendClientMessageToAll(COR_ORG12, "[GZ] Os Ballas dominaram a Favela");
			GangZoneShowForAll(GZFavela, COR_ORG12);
		}
     	if(GetPlayerOrg(playerid) == 13)
     	{
     	    DonoFavela = 13;
     	    SendClientMessageToAll(COR_ORG13, "[GZ] Os Bloods dominaram a Favela");
			GangZoneShowForAll(GZFavela, COR_ORG13);
		}
	}
	
	if(GzID == 3)
	{
	    GangZoneStopFlashForAll(GZCasarao);
		Dominando[playerid] = 0;
		SDCasarao = 0;
     	if(GetPlayerOrg(playerid) == 3)
     	{
     	    SendClientMessageToAll(COR_ORG3, "[GZ] A Policia Federal dominou o Casarгo");
			GangZoneShowForAll(GZCasarao, COR_ORG3);
			DonoCasarao = 3;
		}
     	if(GetPlayerOrg(playerid) == 14)
     	{
     	    DonoCasarao = 14;
     	    SendClientMessageToAll(COR_ORG14, "[GZ] A Yakuza dominou o Casarгo");
			GangZoneShowForAll(GZCasarao, COR_ORG14);
		}
     	if(GetPlayerOrg(playerid) == 15)
     	{
     	    DonoCasarao = 15;
     	    SendClientMessageToAll(COR_ORG15, "[GZ] A Cosa Nostra dominou o Casarгo");
			GangZoneShowForAll(GZCasarao, COR_ORG15);
		}
	}
	
	if(GzID == 4)
	{
	    GangZoneStopFlashForAll(GZEstacao);
		Dominando[playerid] = 0;
		SDEstacao = 0;
     	if(GetPlayerOrg(playerid) == 3)
     	{
     	    SendClientMessageToAll(COR_ORG3, "[GZ] A Policia Federal dominou o Estaзгo");
			GangZoneShowForAll(GZEstacao, COR_ORG3);
			DonoEstacao = 3;
		}
     	if(GetPlayerOrg(playerid) == 14)
     	{
     	    DonoEstacao = 14;
     	    SendClientMessageToAll(COR_ORG14, "[GZ] A Yakuza dominou o Estaзгo");
			GangZoneShowForAll(GZEstacao, COR_ORG14);
		}
     	if(GetPlayerOrg(playerid) == 15)
     	{
     	    DonoEstacao = 15;
     	    SendClientMessageToAll(COR_ORG15, "[GZ] A Cosa Nostra dominou o Estaзгo");
			GangZoneShowForAll(GZEstacao, COR_ORG15);
		}
	}
	
	if(GzID == 5)
	{
	    GangZoneStopFlashForAll(GZMata);
		Dominando[playerid] = 0;
		SDMata = 0;
     	if(GetPlayerOrg(playerid) == 5)
     	{
     	    SendClientMessageToAll(COR_ORG5, "[GZ] O Exercito dominou a Mata");
			GangZoneShowForAll(GZMata, COR_ORG5);
			DonoEstacao = 3;
		}
     	if(GetPlayerOrg(playerid) == 20)
     	{
     	    DonoEstacao = 20;
     	    SendClientMessageToAll(COR_ORG20, "[GZ] A AlQeada dominou a Mata");
			GangZoneShowForAll(GZMata, COR_ORG20);
		}
     	if(GetPlayerOrg(playerid) == 21)
     	{
     	    DonoEstacao = 21;
     	    SendClientMessageToAll(COR_ORG21, "[GZ] O Estado Islamico dominou a Mata");
			GangZoneShowForAll(GZMata, COR_ORG21);
		}
		if(GetPlayerOrg(playerid) == 22)
     	{
     	    DonoEstacao = 22;
     	    SendClientMessageToAll(COR_ORG22, "[GZ] A FARC dominou o Estaзгo");
			GangZoneShowForAll(GZMata, COR_ORG22);
		}
	}
	return 1;
}
Reply
#4

Й sу utilizar switch e armazenar cada valor.

PHP код:
public DominandoGZ(playeridGzID)
{
    if(
PlayerEmGangZone(playerid) != Dominando[playerid])
        return 
FalharDominio(playerid);
    
    new 
Str[70], NameOrg[30], NameGz[15], GZcor;
    switch(
GzID)
    {
        case 
1NameGz "Pista de Skate"GZ GZPistaSkateSDPistaSkate 0DonoPistaSkate GetPlayerOrg(playerid);
        case 
2NameGz "Favela"GZ GZFavelaSDFavela 0DonoFavela GetPlayerOrg(playerid);
        case 
3NameGz "Casarгo"GZ GZCasasaoSDCasarao 0DonoCasarao GetPlayerOrg(playerid);
        case 
4NameGz "Estaзгo"GZ GZEstacaoSDEstacao 0DonoEstacao GetPlayerOrg(playerid);
        case 
5NameGz "Mata"GZ GZMataSDMata 0DonoMata GetPlayerOrg(playerid);
    }
    switch(
GetPlayerOrg(playerid))
    {
        case 
1NameOrg "Policia Militar"cor COR_ORG1;
        case 
9NameOrg "Grove Street"cor COR_ORG9;
        
//Complete com todas as cores e nomes das orgs respectivas
    
}
    
GangZoneShowForAll(GZcor);
    
format(Str70"[GZ] A org %s dominou %s"NameOrgNameGz);
    
SendClientMessageToAll(corStr);
    return 
1;

Reply
#5

Quote:
Originally Posted by EditPawn
Посмотреть сообщение
Й sу utilizar switch e armazenar cada valor.

PHP код:
public DominandoGZ(playeridGzID)
{
    if(
PlayerEmGangZone(playerid) != Dominando[playerid])
        return 
FalharDominio(playerid);
    
    new 
Str[70], NameOrg[30], NameGz[15], GZcor;
    switch(
GzID)
    {
        case 
1NameGz "Pista de Skate"GZ GZPistaSkateSDPistaSkate 0DonoPistaSkate GetPlayerOrg(playerid);
        case 
2NameGz "Favela"GZ GZFavelaSDFavela 0DonoFavela GetPlayerOrg(playerid);
        case 
3NameGz "Casarгo"GZ GZCasasaoSDCasarao 0DonoCasarao GetPlayerOrg(playerid);
        case 
4NameGz "Estaзгo"GZ GZEstacaoSDEstacao 0DonoEstacao GetPlayerOrg(playerid);
        case 
5NameGz "Mata"GZ GZMataSDMata 0DonoMata GetPlayerOrg(playerid);
    }
    switch(
GetPlayerOrg(playerid))
    {
        case 
1NameOrg "Policia Militar"cor COR_ORG1;
        case 
9NameOrg "Grove Street"cor COR_ORG9;
        
//Complete com todas as cores e nomes das orgs respectivas
    
}
    
GangZoneShowForAll(GZcor);
    
format(Str70"[GZ] A org %s dominou %s"NameOrgNameGz);
    
SendClientMessageToAll(corStr);
    return 
1;

Usei Switch e continua dando um atraso de uns 5 segundos, e mesmo assim, o primeiro jeito que eu fiz, й capaz de ficar lento a ponto de atrasar 5~7 Segundos?
Reply
#6

Quote:
Originally Posted by Ever_SH
Посмотреть сообщение
Usei Switch e continua dando um atraso de uns 5 segundos, e mesmo assim, o primeiro jeito que eu fiz, й capaz de ficar lento a ponto de atrasar 5~7 Segundos?
Provavelmente nгo seja esse o problema, pelo que eu sei o que poderia atrasar й algum loop muito extenso.

@EDIT
Verifique se existe algum loop antes do Timer, e tambйm a funзгo GetPlayerOrg se possui algum loop.

Me refiro a loop com valores altos.
Reply
#7

Nгo hб loop antes e nem depois do timer.
Os ъnicos loop's que meu gamemode jб tem, sгo os dos comandos de Chat da Org, ver membros online e etc. E tem um na funзгo "Update" que criei, ela й chamada de segundo em segundo, que serve para descontar tempo dos presos e etc. Cheguei a tirar o cуdigo dela agora para ver se era isso, mas tambйm nгo era isso.

A Pista de Skate que falei antes que nгo havia atrasos, fui testar de novo e tambйm teve.

Antes cheguei a mudar o tempo do timer para 40000, mas tambйm teve atraso, o tempo foi entre 45~47 segundos.
Reply
#8

Quote:
Originally Posted by Ever_SH
Посмотреть сообщение
Nгo hб loop antes e nem depois do timer.
Os ъnicos loop's que meu gamemode jб tem, sгo os dos comandos de Chat da Org, ver membros online e etc. E tem um na funзгo "Update" que criei, ela й chamada de segundo em segundo, que serve para descontar tempo dos presos e etc. Cheguei a tirar o cуdigo dela agora para ver se era isso, mas tambйm nгo era isso.

A Pista de Skate que falei antes que nгo havia atrasos, fui testar de novo e tambйm teve.

Antes cheguei a mudar o tempo do timer para 40000, mas tambйm teve atraso, o tempo foi entre 45~47 segundos.
Talvez o problema pode estar na hora que mostra antes da SendClientMessage.
Reply
#9

Quote:
Originally Posted by EditPawn
Посмотреть сообщение
Talvez o problema pode estar na hora que mostra antes da SendClientMessage.
O comando /timestamp й do prуprio Samp, acho difнcil ele falhar, mas tambйm pensei na possibilidade antes, entгo cronometrei com meu celular 2 vezes, as duas vezes o resultado foi 1 minuto e 7 segundos.
Reply
#10

Tente dessa forma e verifique se funciona corretamente.

PHP код:
forward VerificarDominando(playeridtempoidarea); public VerificarDominando(playeridtempoidarea) {
    if(
tempo == 0DominandoGZ(playerididarea);
    else 
SetTimerEx("VerificarArea"1000false"iii"playerid, --tempoidarea);
    
printf("%i"tempo);

Utilizando quando comeзa a dominar
PHP код:
VerificarDominando(playerid602);
Dominando[playerid] = 2
Obs: ele vai printar os valores do tempo no seu console, vocк tambйm pode fazer testes mandando SendClientMessage para o jogador.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)