Русское сообщество по скриптингу

Работа со временем

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

Работа со временем

Сообщение TheXA0S » 23 апр 2020, 21:35

Приветствую всех!
Как можно записывать время онлайна игрока, время с первого входа на сервер, текущее время?
Желательно с записью в бд по СтимИД

Пример:
В худе

Вы на сервере уже 3 месяца(всего)
Впервые зашли к нам 12 ноября 2019 г
Всего 1 год 5 месяцев 14 дней
Время по МСК: 17:53
Аватара пользователя
TheXA0S
 
Сообщения: 25
Зарегистрирован: 11 дек 2019, 16:20
Откуда: Moscow
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: C++, HTML, CSS, JS, PAWN

Re: Работа со временем

Сообщение Leonidddd » 23 апр 2020, 23:40

TheXA0S, не понял, что за
Всего 1 год 5 месяцев 14 дней

Похоже, это время запуска сервера. Его можно вообще записать в файл в юникс формате и просто считывать его.

Ну, с первым заходом тут уже понятно и так, просто через timestamp(unix time) при первом заходе игрока создаешь и все, не трогаешь тот столбец. Вот со счетчиком кол-ва дней чуть-чуть посложнее, тут либо создать дату последнего прибавления счетчика и уже если игрок зашёл ровно через сутки(или на след. день, через день это можно фиксировать). Будут необходимы нэтивы get_systime, создание таблиц с нужными данными а ля

Код: Выделить всё
    new Handle:Queries;
    Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS UCSTATS (pId INT(11)  primary key NOT NULL AUTO_INCREMENT, name varchar(33),steamid varchar(32), firstjoin TIMESTAMP); ALTER TABLE UCSTATS ADD UNIQUE (pId);ALTER TABLE `UCSTATS` ADD UNIQUE(`steamid`);ALTER TABLE UCSTATS AUTO_INCREMENT = 1;");


Пример очень грубый, в такую таблицу вписываем уникальный id игрока, ник/стим айди, первый заход на сервер. При сохранении firstjoin-a(тот же get_systime) не забудьте использовать в sql запросе конвертор FROM_UNIXTIME, чтобы корректно прошло сохранение в БД. Для подсчета дней использовать можно что-нибудь на подобии: get_systime() - firstjoin( значение получайте при запросе через UNIX_TIMESTAMP, чтобы получить числовой timestamp для дальнейшего вычисления ) = diff(разница между текущим временем и заходом первый раз), тут вроде бы не припомню нэтивной ф-ции для этого, но придется написать свой сток для вычисления секунд в дни, к примеру,(думаю, с этим проблем нету, делим x сек на (60*60*24) = кол-во дней, от этого отталкиваемся и выводим там через add/format/formatex если там X дней > 365, то считаем год или более, если меньше, но больше 30(тут можно изощряться, чтобы ещё высокосный год учесть/сокращенный февральский месяц/месяцы с 31 днем, много запарки, лучше просто 30 как дефолт сделать и не париться), то учесть месяцы, ну и на самый конец уже дни выводить.

Блин, хотел покороче, а получилось как всегда но думаю у вас получится, если действительно захотите это сделать.

UPD: Для вывода полученной разницы во времени можете использовать за основу Вы должны зарегистрироваться, чтобы видеть ссылки.(сток ф-ция в файле time.inc) .
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.


Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], sb123 и гости: 9