Продолжительность времени

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
Как лучше отслеживать продолжительность времени?

Вот стартую
C++:
int
    iTime[MAXPLAYERS+1];

public void OnPluginStart()
{
    RegConsoleCmd("sm_test", cmd);
    RegConsoleCmd("sm_test2", cmd2);
}

public Action cmd(int client, any args)
{
    iTime[client] = GetTime();
}

public Action cmd2(int client, any args)
{
    PrintToChatAll("Прошло времени [%d]", (GetTime() - iTime[client]));
    iTime[client] = 0;
}
Но тут будет крайне не удобно, а вдруг пройдёт 100500 секунд? Надо же нормально вывести, типо 3 дня и 3 ночи ("Прошло 1 месяц | 2 дня | 4 часа | 56 секунд ")
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Как лучше отслеживать продолжительность времени?

Вот стартую
C++:
int
    iTime[MAXPLAYERS+1];

public void OnPluginStart()
{
    RegConsoleCmd("sm_test", cmd);
    RegConsoleCmd("sm_test2", cmd2);
}

public Action cmd(int client, any args)
{
    iTime[client] = GetTime();
}

public Action cmd2(int client, any args)
{
    PrintToChatAll("Прошло времени [%d]", (GetTime() - iTime[client]));
    iTime[client] = 0;
}
Но тут будет крайне не удобно, а вдруг пройдёт 100500 секунд? Надо же нормально вывести, типо 3 дня и 3 ночи ("Прошло 1 месяц | 2 дня | 4 часа | 56 секунд ")
FormatTime() strftime - C++ Reference
 

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
м?


C++:
int
    iTime[MAXPLAYERS+1];

public void OnPluginStart()
{
    RegConsoleCmd("sm_test", cmd);
    RegConsoleCmd("sm_test2", cmd2);
}

public Action cmd(int client, any args)
{
    iTime[client] = GetTime();
}

public Action cmd2(int client, any args)
{
    char sTime[256];
    FormatTime(sTime, sizeof(sTime), NULL_STRING, GetTime() - iTime[client]);
    PrintToChatAll("Прошло времени [%s]", sTime);
    iTime[client] = 0;
}
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
м?


C++:
int
    iTime[MAXPLAYERS+1];

public void OnPluginStart()
{
    RegConsoleCmd("sm_test", cmd);
    RegConsoleCmd("sm_test2", cmd2);
}

public Action cmd(int client, any args)
{
    iTime[client] = GetTime();
}

public Action cmd2(int client, any args)
{
    char sTime[256];
    FormatTime(sTime, sizeof(sTime), NULL_STRING, GetTime() - iTime[client]);
    PrintToChatAll("Прошло времени [%s]", sTime);
    iTime[client] = 0;
}
FormatTime(sTime, sizeof(sTime), "%x", GetTime() - iTime[client]);
FormatTime(sTime, sizeof(sTime), "%D", GetTime() - iTime[client]);
к примеру
А вообще наверное можно тип такого написать
/60/60/24/30/12 = years
/60/60/24/
30.5 = months
/60/60/24 = days
/60/60 = hours
/60 = mins
/1 = secs

можно через остаток при делении одной единицы найти другую
это все черное наугад написал для примера
 
Последнее редактирование:

Tomiks

Участник
Сообщения
419
Реакции
288
Где-то на форуме была эта функция по переводу готовая @Nekro .
C++:
void GetStringTime(int time, char[] buffer, int maxlength)
{
    static int dims[] = {60, 60, 24, 30, 12, cellmax};
    static char sign[][] = {"с", "м", "ч", "д", "м", "г"};
    static char form[][] = {"%02i%s%s", "%02i%s %s", "%i%s %s"};
    buffer[0] = EOS;
    int i = 0, f = -1;
    bool cond = false;
    while (!cond) {
        if (f++ == 1)
            cond = true;
        do {
            Format(buffer, maxlength, form[f], time % dims[i], sign[i], buffer);
            if (time /= dims[i++], time == 0)
                return;
        } while (cond);
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
 

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
Этот способ выводит всё как надо, спасибо.
 
Сверху Снизу