shape1
shape2
shape3
shape4
shape7
shape8

Используем Unix время


Batka1337

Хацкер-программист
Пользователь
08.12.2014
363
154
0
26
UNIX-время или POSIX-время (англ. Unix time) - способ кодирования времени, принятый в UNIX и других POSIX-совместимых операционных системах.
Моментом начала отсчёта считается полночь (по UTC) с 31 декабря 1969 года на 1 января 1970, время с этого момента называют "эрой UNIX" (англ. Unix Epoch).

Где можно использовать это:
Проверка на флуд.
Оплата дома/бизнеса.
Проверка сколько прошло дней/недель/месяцев с какого-то времени.

Небольшая таблица:
Обычная дата(Human readable time) | Секунды
1 минута | 60 секунд
1 час | 3600 секунд
1 день | 86400 секунд
1 неделя | 604800 секунд
1 месяц (30.44 дней) | 2629743 секунд
1 год (365.24 дней) | 31556926 секунд
Пример:
Например у нас на сервере есть VIP, мы его выдаём на 30 дней.
Потом проверяем на сколько у тебя он остался при заходе и выводим это в чат.
 ​
Выдача VIP:
 ​
Код:
PlayerInfo[playerid][pVip] = gettime()+60*60*24*30;
SendClientMessage(playerid,-1,"Вам выдана VIP на 30 дней");
Чтобы точно не ошибиться или же если вы забыли просто действуйте умножением.
60 (так как в минуте 60 сек) * 60 (так как в часе 60 мин) * 24 (так как 24 часа) * 30 (дней сколько вам надо)

Вывод сколько осталось VIP:

Сначала создадим stock для получения информации сколько прошло с этого времени
 ​
Код:
stock timec(timestamp, compare = -1) {
    if (compare == -1) {
        compare = gettime();
    }
    new
        n,
        Float:d = (timestamp > compare) ? timestamp - compare : compare - timestamp,
        returnstr[32];
    if (d < 60) {
        format(returnstr, sizeof(returnstr), "меньше минуты");
        return returnstr;
    } else if (d < 3600) { // 3600 = 1 hour
        n = floatround(floatdiv(d, 60.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "мин.");
    } else if (d < 86400) { // 86400 = 1 day
        n = floatround(floatdiv(d, 3600.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "ч.");
    } else if (d < 2592000) { // 2592000 = 1 month
        n = floatround(floatdiv(d, 86400.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "дн.");
    } else if (d < 31536000) { // 31536000 = 1 year
        n = floatround(floatdiv(d, 2592000.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "мес.");
    } else {
        n = floatround(floatdiv(d, 31536000.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "г.");
    }
    if (n == 1) {
        format(returnstr, sizeof(returnstr), "1 %s", returnstr);
    } else {
        format(returnstr, sizeof(returnstr), "%d %s", n, returnstr);
    }
    return returnstr;
}
И сам показ информации
Код:
static const fmt_str[] = "У вас осталось %s VIP";
new str1[sizeof(fmt_str)-2+32];
format(str1, sizeof(str1), fmt_str, timec(PlayerInfo[playerid][pVip]));
SendClientMessage(playerid,-1,str1);
Автор темы: Batka1337
 
Последнее редактирование модератором:

Dmitriy_Orell

алкоголик
Пользователь
12.04.2015
977
2
390
0
@Batka1337,Вас просили указать, автора работы, а не автора темы. 

 
Последнее редактирование модератором:

Batka1337

Хацкер-программист
Пользователь
08.12.2014
363
154
0
26
@Dmitriy_Orell, это я писал, я текст составлял, если так понятней

 

egorik_105

Новичок
Пользователь
17.08.2016
91
12
0
21
как на основе этой темы сделать снятие вип после истечения времени 

по типу 

Код:
		if (PlayerInfo[playerid][pVipTime] <= 0 && PlayerInfo[playerid][pDonateRank] > 0)
		{
			PlayerInfo[playerid][pVipTime] = 0;
			PlayerInfo[playerid][pDonateRank] = 0;
			SendClientMessage(playerid,COLOR_LIGHTGREEN,"С вас снят VIP , срок кончился");
		}
 

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер


PlayerInfo[playerid][pVipTime] = gettime()+60*60*1//1 - количество часов (таким образом выдаем VIP статус)

Код:
if(PlayerInfo[playerid][pVipTime] < gettime())
{ /*код, если VIP статус кончился*/ }
:D83DDC46:  в регулярно обновляемые таймеры (например, односекундный)