PDA

Просмотр полной версии : [Вопрос] afk system



Don Carleone
26.11.2015, 15:30
Смотрите какая проблема. Писал афк систему и не могу понять в чем ошибка. Значит если игрок свернулся над головой у него горит текст (AFK blalalala) все прекрасно все показывает, но работа таймера меня пугает, секунды летят, в прямом смысле слова ЛЕТЯТ, одна за две и отображается это все над головой, допустим простоял человек в афк 10 секунд, над головой пишет 50:03 как будто он уже 50 минут стоит... Прошу помощи у бородатых скриптеров...

Собственно сам функционал афк системы, система работает в секундном таймере....


foreach(new i: Player)
{
if(PlayerAFK[i] == 0) PlayerAFK[i] = -1;
else if(PlayerAFK[i] == -1)
{
PlayerAFK[i] = 1;
f("AFK: {FFFFFF}[%s]", Convert(PlayerAFK[i]));
SetPlayerChatBubble(i, string, COLOR_GREEN, 20.0, 1200);
}
else if(PlayerAFK[i] > 0)
{
PlayerAFK[i]+=1;
f("AFK: {FFFFFF}[%s]", Convert(PlayerAFK[i]));
SetPlayerChatBubble(i, string, COLOR_GREEN, 20.0, 1200);
if(PlayerAFK[i] > 6000)
{
if(Pl[i][pAdmin] == 0)
{
SCM(i, COLOR_RED, "Âû ñëèøêîì äîëãî ïðîñòîÿëè â AFK!");
SetTimerEx("kick", 50, false, "i", i);
}
}
}
}

Связано ли это с моим кодом или проблема в чем то другом? up help me

---------- Post added at 15:12 ---------- Previous post was at 15:08 ----------

Небольшое вложение, это буквально спустя минуты 3.

http://rghost.ru/6qlnCCkjp/image.png

Вы скажите, что кидай суда свой конвертер, скажу сразу дело не в нем... Но если это кому то поможет - пожалуйста!


Convert(number)
{
new hours = 0, mins = 0, secs = 0, string[100];
hours = floatround(number / 3600);
mins = floatround((number / 60) - (hours * 60));
secs = floatround(number - ((hours * 3600) + (mins * 60)));
if(hours > 0) { format(string, 100, "%i:%02d?:%02d?", hours, mins, secs); }
else { format(string, 100, "%i:%02d", mins, secs); }
return string;
}

$continue$
26.11.2015, 17:03
Достойная система - AFK. (http://pro-pawn.ru/showthread.php?10626-%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%BD%D0%B0-AFK%28%D0%A1%D0%B2%D1%91%D1%80%D0%BD%D1%83%D1%82%D0%BE-%D0%BB%D0%B8-%D0%BE%D0%BA%D0%BE%D1%88%D0%BA%D0%BE-SA%29&p=52088&viewfull=1#post52088)
А, если поискать то можно найти и конвертор времени (http://pro-pawn.ru/showthread.php?9499-AFK-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0&p=44163&viewfull=1#post44163)
http://i.imgur.com/fG26btg.png



main()
{
new result[18];
ConvertTimeForAFK(86000, result);
}



stock ConvertTimeForAFK(number, output[] = EOS, length = sizeof(output))
{
new string[18];
if(number > 3599) format(string, sizeof(string), "На паузе %d:%02d:%02d", number / 3600, number % 3600/60, number % 3600 % 60);
else if(number > 59) format(string, sizeof(string), "На паузе %d:%02d", number / 60, number % 60);
else format(string, sizeof(string), "На паузе %d сек.", number);
strins(output, string, 0, length);
}

Nurick
26.11.2015, 19:31
new afk_time[MAX_PLAYERS];


afk_time[playerid] = -1;


for(new i = GetMaxPlayers() - 1; i != -1; i--)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
if(++afk_time[i] > 0)
{
new string[18];
if(afk_time[i] > 3599) format(string, sizeof(string), "На паузе %d:%02d:%02d", afk_time[i] / 3600, afk_time[i] % 3600/60, afk_time[i] % 3600 % 60);
else if(afk_time[i] > 59) format(string, sizeof(string), "На паузе %d:%02d", afk_time[i] / 60, afk_time[i] % 60);
else format(string, sizeof(string), "На паузе %d сек.", afk_time[i]);
SetPlayerChatBubble(i, string, 0xFF0000FF, 10.0, 1500);
}
}