radši sem dám TUT na automatický AFK systém, který jsem psal i v jednom příspěvku, možná se bude hodit i jiným ...
public OnPlayerUpdate se vyvolává když je hráč "aktivní", tím myslím když je hráč ve hře a ne na ploše nebo v GTA menu a nebo po delší době nehraní. Public se vyvolává několikrát za sekundu, takže pomocí druhého timeru ( pro přehlednější znázornění použiju 2 timery, z nichž první se mi bude po sekundě vyvolávat, můžete použít OnGameModeInit) můžete zjistit, zda je hráč aktivní nebo ne.
příklad :
new VeHre[MAX_PLAYERS];
forward KontrolaAktivnosti();
forward KontrolaAktivnosti_2();
při každém vyvolání publicu OnPlayerUpdate se hráčovi přičte +1 k proměnné VeHre, tudíž bude jeho proměnná větší než 0
public OnPlayerUpdate(playerid){
if(IsPlayerConnected(playerid)){
VeHre[playerid] ++;
}
}
publicem KontrolaAktivnosti nastavíme hráči proměnnou VeHre na 0 a pokud se public OnPlayerUpdate hráči nevyvolá, tzn. že bude mít nulu i nadále v druhém publicu KontrolaAktivnosti_2 tak to znamená, že je hráč AFK (neaktivní)
public KontrolaAktivnosti(){
SetTimer("KontrolaAktivnosti_2",1000,0);
for(new i=0;i if(IsPlayerConnected(i)){
VeHre[i] = 0;
}
}
}
public KontrolaAktivnosti_2(){
for(new i=0;i if(IsPlayerConnected(i)){
if(VeHre[i] == 0){
SendClientMessageToAll(COLOR_WHITE,"Hráč je AFK (neaktivní)");
} else {
SendClientMessageToAll(COLOR_WHITE,"Hráč je ve hře (aktivní)");
}
VeHre[i] = 0; //resetování proměnné
}
}
}