SA-MP Forums Archive
[Ajuda] Public - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Public (/showthread.php?tid=633779)



Public - Scorpion659 - 07.05.2017

Estou com uma dъvida que eu nгo imaginava estar, como eu inicio um timer quando a gm ligar com o parвmetro playerid? sempre da erro pois na public ongamemodeinit n tem playerid


Respuesta: Public - SammyJ - 07.05.2017

Quote:
Originally Posted by Scorpion659
Посмотреть сообщение
Estou com uma dъvida que eu nгo imaginava estar, como eu inicio um timer quando a gm ligar com o parвmetro playerid? sempre da erro pois na public ongamemodeinit n tem playerid
coloque na public OnPlayerConnect oras.


Re: Respuesta: Public - Scorpion659 - 07.05.2017

Quote:
Originally Posted by SammyJ
Посмотреть сообщение
coloque na public OnPlayerConnect oras.
olha nгo era o que eu queria mas vc me deu uma ideia boa, vou por pro primeiro player que entrar ligar o tiver e setar uma variavel bool como true, se tiver true ele nгo executa mais, vlw pela dica


Re: Public - RodrigoMSR - 07.05.2017

Recomendo um loop nessa funзгo sem parвmetro em vez de criar um timer para cada jogador.
Код:
public OnGameModeInit()
{
	SetTimer("Function", 1000, true); //executar a funзгo "Function" a cada 1000ms (1 segundo) repetindo sempre (repeating = true)
	return 1;
}

forward Function();
public Function()
{
	for(new i = 0; i < MAX_PLAYERS; i++) //percorrer do ID 0 ao mбximo de jogadores
	{
	    if(IsPlayerConnected(i))
	    {
	        //i й o novo playerid
	    }
	}
	return 1;
}



Re: Public - Scorpion659 - 07.05.2017

Quote:
Originally Posted by RodrigoMSR
Посмотреть сообщение
Recomendo um loop nessa funзгo sem parвmetro em vez de criar um timer para cada jogador.
Код:
public OnGameModeInit()
{
	SetTimer("Function", 1000, true); //executar a funзгo "Function" a cada 1000ms (1 segundo) repetindo sempre (repeating = true)
	return 1;
}

forward Function();
public Function()
{
	for(new i = 0; i < MAX_PLAYERS; i++) //percorrer do ID 0 ao mбximo de jogadores
	{
	    if(IsPlayerConnected(i))
	    {
	        //i й o novo playerid
	    }
	}
	return 1;
}
sim foi oque eu fiz olha:
PHP код:

//inicio da gm
SetTimer("timerserver"1000true);
//end
public timerserver()
{
    
relogioserver();
    
infocarro();
    
UpdateActors();
    return 
1;
}
stock relogioserver()
{
    new 
time[6], data[32], hora[32];
    
gettime(time[0], time[1], time[2]);
    
getdate(time[3], time[4], time[5]);
    
format(horasizeof(hora), "%02d:%02d"time[0], time[1]);
    
format(datasizeof(data), "%02d/%02d/%d"time[5], time[4], time[3]);
    
TextDrawSetString(Textdraw24hora);
    
TextDrawSetString(Textdraw25data);
    return 
1;
}
//forward infocarro(playerid);
stock infocarro()
{
    new 
string[32], velocidade[32], velmodel;
    new 
Float:xPos[3];
    for(new 
0MAX_PLAYERSi++){
        if(
IsPlayerInAnyVehicle(i)){
            if(
playernoveh[i] != 1){
                
PlayerTextDrawShow(iTextdraw26);
                
PlayerTextDrawShow(iTextdraw27);
                
PlayerTextDrawShow(iTextdraw28);
                
PlayerTextDrawShow(iTextdraw29);
                
PlayerTextDrawShow(iTextdraw30);
                
PlayerTextDrawShow(iTextdraw31);
                
playernoveh[i] = 1;
            }
            
model GetVehicleModel(GetPlayerVehicleID(i));
            
GetVehicleVelocity(GetPlayerVehicleID(i), xPos[0], xPos[1], xPos[2]);
            
vel floatround(floatsqroot(xPos[0] * xPos[0] + xPos[1] * xPos[1] + xPos[2] * xPos[2]) * 170.00);
            
format(stringsizeof(string), "%d"model);
            
format(velocidadesizeof(velocidade), "%d Km/H"vel);
            
PlayerTextDrawSetString(iTextdraw29string);
            
PlayerTextDrawSetString(iTextdraw31velocidade);
        }else{
            if(
playernoveh[i] == ){
            
PlayerTextDrawHide(iTextdraw26);
            
PlayerTextDrawHide(iTextdraw27);
            
PlayerTextDrawHide(iTextdraw28);
            
PlayerTextDrawHide(iTextdraw29);
            
PlayerTextDrawHide(iTextdraw30);
            
PlayerTextDrawHide(iTextdraw31);
            
playernoveh[i] = 0;}
        }
    }
    return 
1;

mas uma pergunta, se comeзar a por muita coisa pra atualizar a cada segundo, serб que a velocidade de leitura do cуdigo vai ser rбpida pra ler um for? se ler mt cуdigo dentro do for pra cada jogador?

digo, qual a velocidade de leitura que o pc lк a gm? e se ele nгo der tempo de ler tudo em um segundo e jб acumular com outros segundos? existe esse perigo?


Re: Public - RodrigoMSR - 07.05.2017

A funзгo й chamada pelo timer a cada tantos milissegundos, o tempo de execuзгo desta sua, em casos extremos, nгo passa de 20ms. Um loop com 100.000.000 de iteraзхes leva 2 segundos para ser concluнdo, entгo um de 100 seria insignificante (demoraria menos de 1ms para ser executado).

Abaixo um exemplo prбtico de um timer que atualiza vбrios minigames e jogadores, veja no chat que quase sempre demora menos de 1ms, mas pode acontecer de demorar atй 10ms: http://imgur.com/zILeMam


Re: Public - Scorpion659 - 07.05.2017

Quote:
Originally Posted by RodrigoMSR
Посмотреть сообщение
A funзгo й chamada pelo timer a cada tantos milissegundos, o tempo de execuзгo desta sua, em casos extremos, nгo passa de 20ms. Um loop com 100.000.000 de iteraзхes leva 2 segundos para ser concluнdo, entгo um de 100 seria insignificante (demoraria menos de 1ms para ser executado).

Abaixo um exemplo prбtico de um timer que atualiza vбrios minigames e jogadores, veja no chat que quase sempre demora menos de 1ms, mas pode acontecer de demorar atй 10ms: http://imgur.com/zILeMam
atah kk й pq me deu esse medo pois ainda tem mtt codigo que vai dentro desse for, ele vai atualizar o tempo vivo de todos os jogadores, assim como localizaзгo, horбrio do server, hud de carro, painel de vida, temperatura, kills entre outros, mas creio que nгo darб problema obg