А если я зайду, увижу окно авторизации, продержусь 50 секунд, выйду и следом зайдет игрок под моим ID
Вид для печати
Не будет такого. Запуск таймера в коннекте.
Разве что можно делать так:
PHP код:
public OnPlayerConnect(playerid)
{
SetPVarInt(playerid,"Loginned",SetTimerEx("LoginnedTimer", 60000, 0, "i", playerid));
return true;
}
PHP код:
public OnPlayerDisconnect(playerid,reason)
{
if(GetPVarInt(playerid,"Loginned")!=0)
KillTimer(GetPVarInt(playerid,"Loginned"));
return true;
}
это туда где вы авторизуетесь:PHP код:
forward LoginnedTimer(i);
public LoginnedTimer(i)
{
if(GetPVarInt(i,"Loginned")!=0)
Kick(i);
return true;
}
исправил в общемPHP код:
if(GetPVarInt(playerid,"Loginned")!=0) DeletePVar(playerid,"Loginned");
Это и являлось причиной ошибки.Цитата:
Не будет такого. Запуск таймера в коннекте.
Много кто предлагал делать, но: Зачем создавать для каждого игрока таймер? Если можно проверять каждого игрока в цикле, что более надёжнее, нежели проверять определённого.
Извини никто не скажет как добавить чтобы в чат писалось время это. К примеру:
Оставшее время на авторизацию : 30(--30-29-28-27-26-25-24-23-22-21-20.....)
С убыванием на -1 и как ноль то Кик
выводить в чат каждую секунду время оставшееся на авторизацию - бредовая затея, не думаю что игрокам понравится. Но если все таки хочешь, то создаешь переменную, равную общему времени на авторизацию и в секундном таймере вычитаешь по 1 секунде, обновляешь данные и выводишь игроку в чат.
Ну или без переменной:
PHP код:
SetTimerEx("@____TimeForAuthorization", 1000, 0, "ii", playerid, 30);
Я не говорю, что этот вариант лучше или оптимизированнее - я не тестировал. Просто ещё один вариант реализации, который мне пришёл на умPHP код:
@____TimeForAuthorization(playerid, time);
@____TimeForAuthorization(playerid, time)
{
new string[...];
format(...);
SendClientMessage(playerid, -1, string);
if(time > 0) SetTimerEx("@____TimeForAuthorization", 1000, 0, "ii", playerid, time-1);
else
{
SendCLientMessage(playerid. -1. "Время вышло");
}
return 1;
}
Нет :D Если брать мою реализацию, то так:
Если брать реализацию wAx, то можно при начале авторизации присвоить к pVar значение, например:PHP код:
@____TimeForAuthorization(playerid, time);
@____TimeForAuthorization(playerid, time)
{
new string[3];
format(string, sizeof(string), "%d", time);
SendClientMessage(playerid, -1, string);
if(time > 0) SetTimerEx("@____TimeForAuthorization", 1000, 0, "ii", playerid, time-1);
else
{
SendCLientMessage(playerid. -1. "Время вышло");
}
return 1;
}
И потом в секундный таймер вставить код, типа:PHP код:
SetPVarInt(playerid, "TimeForAuthorization", 31);
Только playerid на переменную цикла заменить нужноPHP код:
if(GetPVarInt(playerid, "TimeForAuthorization"))
{
new authorization_time = GetPVarInt(playerid, "TimeForAuthorization")-1;
SetPVarInt(playerid, "TimeForAuthorization", authorization_time);
if(authorization_time == 1)
{
SendClientMessage(playerid, -1, "Время вышло");
DeletePVar(playerid, "TimeForAuthorization");
}
else
{
new string[3];
format(string, sizeof(string), "%d", authorization_time-1);
SendClientMessage(playerid, -1, string);
}
}