07.05.2017, 03:03
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
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; }
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; } |
//inicio da gm
SetTimer("timerserver", 1000, true);
//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(hora, sizeof(hora), "%02d:%02d", time[0], time[1]);
format(data, sizeof(data), "%02d/%02d/%d", time[5], time[4], time[3]);
TextDrawSetString(Textdraw24, hora);
TextDrawSetString(Textdraw25, data);
return 1;
}
//forward infocarro(playerid);
stock infocarro()
{
new string[32], velocidade[32], vel, model;
new Float:xPos[3];
for(new i = 0; i < MAX_PLAYERS; i++){
if(IsPlayerInAnyVehicle(i)){
if(playernoveh[i] != 1){
PlayerTextDrawShow(i, Textdraw26);
PlayerTextDrawShow(i, Textdraw27);
PlayerTextDrawShow(i, Textdraw28);
PlayerTextDrawShow(i, Textdraw29);
PlayerTextDrawShow(i, Textdraw30);
PlayerTextDrawShow(i, Textdraw31);
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(string, sizeof(string), "%d", model);
format(velocidade, sizeof(velocidade), "%d Km/H", vel);
PlayerTextDrawSetString(i, Textdraw29, string);
PlayerTextDrawSetString(i, Textdraw31, velocidade);
}else{
if(playernoveh[i] == 1 ){
PlayerTextDrawHide(i, Textdraw26);
PlayerTextDrawHide(i, Textdraw27);
PlayerTextDrawHide(i, Textdraw28);
PlayerTextDrawHide(i, Textdraw29);
PlayerTextDrawHide(i, Textdraw30);
PlayerTextDrawHide(i, Textdraw31);
playernoveh[i] = 0;}
}
}
return 1;
}
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 |