PDA

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



iWors
05.03.2016, 19:33
CMD:time(playerid, params[])
{
new string[2 + 2 + 2 + 2 + 2 + 4]; // [Как правильно рассчитать, чтобы в диалоге все корректно показывалось]
new year, month, day, hour, minute, second;
gmtime(gettime(), year, month, day, hour, minute, second);

format(string, sizeof(string), "%02d:%02d:%02d %02d.%02d.%04d", hour, minute, second, day, month, year);
SD(playerid, dTime, DIALOG_STYLE_MSGBOX, "{FF6600}Служба точного времени", string, "Закрыть", "");
return 1;
}

vovandolg
05.03.2016, 19:49
вот тут почитай (http://pro-pawn.ru/showthread.php?13388-%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%B0-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%BE%D0%B9-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8)

StevenH
05.03.2016, 20:52
Вроде так


CMD:time(playerid)
{
new year, month, day, hour, minute, second;
gmtime(gettime(), year, month, day, hour, minute, second);

static const fmt_str[] = "%02d:%02d:%02d %02d.%02d.%04d";
new string[sizeof(fmt_str)-4+2-4+2-4+2-4+2-4+2-4+4]; // итого -10
//new string[sizeof(fmt_str)-10]; // или так
format(string, sizeof(string), fmt_str, hour, minute, second, day, month, year);
SD(playerid, dTime, 0, "{FF6600}Служба точного времени", string, "Закрыть", "");
return 1;
}

VVWVV
05.03.2016, 20:59
Вроде так


CMD:time(playerid)
{
new year, month, day, hour, minute, second;
gmtime(gettime(), year, month, day, hour, minute, second);

static const fmt_str[] = "%02d:%02d:%02d %02d.%02d.%04d";
new string[sizeof(fmt_str)-4+2-4+2-4+2-4+2-4+2-4+4]; // итого -10
//new string[sizeof(fmt_str)-10]; // или так
format(string, sizeof(string), fmt_str, hour, minute, second, day, month, year);
SD(playerid, dTime, 0, "{FF6600}Служба точного времени", string, "Закрыть", "");
return 1;
}


CMD:time(playerid)
{
static const fmt_str[] = "%02d:%02d:%02d %02d.%02d.%04d";
new year, month, day, hour, minute, second,
buffer[sizeof fmt_str + ((-4 + 2) * 5) + (-4 + 4)];
gmtime(gettime(), year, month, day, hour, minute, second);
format(
buffer, sizeof buffer, fmt_str,
hour, minute, second, day, month, year
);
SD(playerid, dTime, 0, !"{FF6600}Служба точного времени", string,
!"Закрыть", !"");
return 1;
}

newbie01
05.03.2016, 21:09
вот тут почитай (http://pro-pawn.ru/showthread.php?13388-%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%B0-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%BE%D0%B9-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8)

Daniel Cortez написал отличный урок и теперь все им всюду тыкают))

vovandolg
05.03.2016, 21:17
Я ленивая жопа и пользуюсь StrLen.exe))
На этом же форуме и скачал, когда доделаю мод тогда и пошлефую вручную эти цифры с помощью урока DC..

BadPawn
05.03.2016, 22:11
static const t_time[] = "%02d:%02d:%02d %04d.%02d.%02d";
new len_time[sizeof t_time + (2*5+4) - (4*6)];
//sizeof t_time - автоподсчет символов в статической константе t_time. Их 29.
//(2*5+4) - выделаем память для вывода часов, минут, секунд, далее дня, месяца и года.
// - (4*6) - отнимаем кол-во символов на месте которых будет отображаться время и дата.

Автоматический автоподсчет, от тебя требуется прибавить кол-во символов НЕОБХОДИМЫХ ДЛЯ ВЫВОДА форматированной строки и отнять..., хз как их назвать, покажу лучше: %d(-2 символа), %02d(-4 символа).


редакт: пока напишу, тут уже 10000000 ответов. )

//DeimoS: Это называется "спецификатор". Хотя более подробнее можно прочесть в статье о printf (https://ru.wikipedia.org/wiki/Printf#.D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.B8_.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F) (хоть и не всё написанное там можно отнести к Pawn)

iWors
06.03.2016, 14:22
Благодарю за помощь.