Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Роуди.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    151
    Репутация:
    17 ±

    Время в игре / gettime ()

    Вечер в хату, скриптёры :D

    Два вопроса возникли у меня вдруг, один насчет время проведенное в игре ( Реализация у меня есть, но какая-то она костыльная ) и про gettime() , которое возвращает UNIX время.


    1. Время в игре я получаю так: Создаю 3 глобальный переменые, которая отвечает за часы & минуты & секунды. Затем, в 1 секундном таймере прибавляю к second_in_game +1 и когда переменая будет равнятся нулю, то обнуляю ее и приплюсовываю minute_in_game, так же и с часом.
    Если кто не понял, то прилагаю код.
    PHP код:
        seconds_in_game ++;
        
        if(
    seconds_in_game >= 59)
        {
            
    minute_in_game ++;
            
    seconds_in_game 0;
        }
        if(
    minute_in_game >= 59)
        {
            
    hour_in_game ++;
            
    minute_in_game 0;
        } 
    Можно что-то проще придумать?

    2. Второй вопрос заключается в том, что gettime() возвращает не точное время ( Примерно -10 от моего настоящего времени, запускаю на локалке )

    сегоднящнее число получаю таким образом
    PHP код:
    gettime()-366 
    , затем конвертирую через инклуд mxdate и получаю точное число & месяц & год, но время - нет.
    По этому мне пришлось приплюсовывать недостающие часы gettime()+39600, но боюсь если поставлю мод на хостинг будет определять не точное время, подтвердятся мои опасения?

    Заранее спасибо за внимание.
    Последний раз редактировалось Роуди.; 07.01.2016 в 17:34.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    1) Эмм, глобально:
    PHP код:
    new time_in_game[MAX_PLAYERS];//Как я понимаю, подсчёт времени для игроков идёт 
    В OnPlayerConnect или при авторизации:
    PHP код:
    time_in_game[playerid] = gettime(); 
    И пример вывода времени:
    PHP код:
    printf("Игрок с ID %d провёл в игре %d секунд"playeridgettime()-time_in_game[playerid]); 
    Ну а написать конвертер, который из секунд получит время, я думаю, не составит труда.

     Ну а если составит, то вот, например:
    PHP код:
    stock ConvertSeconds(conv_time, &conv_hour, &conv_minute,&conv_second)
    {
        if(
    conv_time <= 60)
        {
            
    conv_hour 0;
            
    conv_minute 0;
            
    conv_second conv_time;
        }
        else if(
    conv_time 60 && conv_time 3600)
        {
            
    conv_hour 0;
            
    conv_minute conv_time 60;
            
    conv_second floatround(conv_time 60floatround_tozero);
        }
        else if(
    conv_time == 3600){ conv_hour 1conv_minute 0conv_second 0; }
        else if(
    conv_time 3600)
        {
            new 
    conv_minute_int;
            
    conv_hour conv_time 3600;
            
    minutes_int floatround(conv_time 3600floatround_tozero);
            
    conv_minute conv_minute_int 60;
            
    conv_second floatround(conv_minute_int 60floatround_tozero);
        }
        return 
    1;

    Использование:
    PHP код:
    new hour_in_game,
        
    minute_in_game,
        
    seconds_in_game;

    ConvertSeconds(gettime()-time_in_game[playerid], hour_in_gameminute_in_gameseconds_in_game);
    printf("Игрок с ID %d провёл в игре %d часов, %d минут и %d секунд"playeridhour_in_gameminute_in_gameseconds_in_game); 


     Ну и вариант на pVar, который я давно писал для одного из пользователей форума
    В начало мода
    PHP код:
    #define ShowTimeOfPlayerInGame(%0,%1,%2,%3) ConvertSeconds(gettime() - GetPVarInt(%0, "Time Of Player In Game"), %1, %2, %3) 
    В OnPlayerConnect
    PHP код:
    SetPVarInt(playerid"Time Of Player In Game"gettime()); 
    После новую функцию для конвертации секунд в формат "час/минута/секунда"
    PHP код:
    stock ConvertSeconds(conv_time, &conv_hour, &conv_minute,&conv_second)
    {
        if(
    conv_time <= 60)
        {
            
    conv_hour 0;
            
    conv_minute 0;
            
    conv_second conv_time;
        }
        else if(
    conv_time 60 && conv_time 3600)
        {
            
    conv_hour 0;
            
    conv_minute conv_time 60;
            
    conv_second floatround(conv_time 60floatround_tozero);
        }
        else if(
    conv_time == 3600){ conv_hour 1conv_minute 0conv_second 0; }
        else if(
    conv_time 3600)
        {
            new 
    conv_minute_int;
            
    conv_hour conv_time 3600;
            
    minutes_int floatround(conv_time 3600floatround_tozero);
            
    conv_minute conv_minute_int 60;
            
    conv_second floatround(conv_minute_int 60floatround_tozero);
        }
        return 
    1;

    И пример вывода времени:
    PHP код:
    new hour_in_game,
        
    minute_in_game,
        
    seconds_in_game;

    ShowTimeOfPlayerInGame(playeridhour_in_gameminute_in_gameseconds_in_game);
    printf("Игрок с ID %d провёл в игре %d часов, %d минут и %d секунд"playeridhour_in_gameminute_in_gameseconds_in_game); 


    2) Не совсем понял чего Вы хотите... Зачем отнимать 366 от gettime и потом опять что-то приплюсовывать? О_о gettime и так должен возвращать нормальное время. На компьютере время установлено верное? Функция gettime снимает показания именно с настроек машины, на которой запущен сервер
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для InCorrect
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.12.2015
    Сообщений
    24
    Репутация:
    2 ±
    Цитата Сообщение от Роуди. Посмотреть сообщение
    Вечер в хату, скриптёры :D

    Два вопроса возникли у меня вдруг, один насчет время проведенное в игре ( Реализация у меня есть, но какая-то она костыльная ) и про gettime() , которое возвращает UNIX время.


    1. Время в игре я получаю так: Создаю 3 глобальный переменые, которая отвечает за часы & минуты & секунды. Затем, в 1 секундном таймере прибавляю к second_in_game +1 и когда переменая будет равнятся нулю, то обнуляю ее и приплюсовываю minute_in_game, так же и с часом.
    Если кто не понял, то прилагаю код.
    PHP код:
        seconds_in_game ++;
        
        if(
    seconds_in_game >= 59)
        {
            
    minute_in_game ++;
            
    seconds_in_game 0;
        }
        if(
    minute_in_game >= 59)
        {
            
    hour_in_game ++;
            
    minute_in_game 0;
        } 
    Можно что-то проще придумать?

    2. Второй вопрос заключается в том, что gettime() возвращает не точное время ( Примерно -10 от моего настоящего времени, запускаю на локалке )

    сегоднящнее число получаю таким образом
    PHP код:
    gettime()-366 
    , затем конвертирую через инклуд mxdate и получаю точное число & месяц & год, но время - нет.
    По этому мне пришлось приплюсовывать недостающие часы gettime()+39600, но боюсь если поставлю мод на хостинг будет определять не точное время, подтвердятся мои опасения?

    Заранее спасибо за внимание.
    1. Можно просто записывать секунды проведенные в игре.Ну а далее с помощью конвертера их преобразовывать
    2. Функция gettime() возвращает unix время Вашего компьютера.

    На хостинге с этим действительно могут быть проблемы
    PHP код:
    gettime() - 366 
    Решить проблему можно очень просто: синхронизация времени с сервером microsoft

  4. #4
    Аватар для Роуди.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    151
    Репутация:
    17 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    1) Эмм, глобально:
    PHP код:
    new time_in_game[MAX_PLAYERS];//Как я понимаю, подсчёт времени для игроков идёт 
    В OnPlayerConnect или при авторизации:
    PHP код:
    time_in_game[playerid] = gettime(); 
    И пример вывода времени:
    PHP код:
    printf("Игрок с ID %d провёл в игре %d секунд"playeridgettime()-time_in_game[playerid]); 
    Ну а написать конвертер, который из секунд получит время, я думаю, не составит труда.

     Ну а если составит, то вот, например:
    PHP код:
    stock ConvertSeconds(conv_time, &conv_hour, &conv_minute,&conv_second)
    {
        if(
    conv_time <= 60)
        {
            
    conv_hour 0;
            
    conv_minute 0;
            
    conv_second conv_time;
        }
        else if(
    conv_time 60 && conv_time 3600)
        {
            
    conv_hour 0;
            
    conv_minute conv_time 60;
            
    conv_second floatround(conv_time 60floatround_tozero);
        }
        else if(
    conv_time == 3600){ conv_hour 1conv_minute 0conv_second 0; }
        else if(
    conv_time 3600)
        {
            new 
    conv_minute_int;
            
    conv_hour conv_time 3600;
            
    minutes_int floatround(conv_time 3600floatround_tozero);
            
    conv_minute conv_minute_int 60;
            
    conv_second floatround(conv_minute_int 60floatround_tozero);
        }
        return 
    1;

    Использование:
    PHP код:
    new hour_in_game,
        
    minute_in_game,
        
    seconds_in_game;

    ConvertSeconds(gettime()-time_in_game[playerid], hour_in_gameminute_in_gameseconds_in_game);
    printf("Игрок с ID %d провёл в игре %d часов, %d минут и %d секунд"playeridhour_in_gameminute_in_gameseconds_in_game); 


     Ну и вариант на pVar, который я давно писал для одного из пользователей форума
    В начало мода
    PHP код:
    #define ShowTimeOfPlayerInGame(%0,%1,%2,%3) ConvertSeconds(gettime() - GetPVarInt(%0, "Time Of Player In Game"), %1, %2, %3) 
    В OnPlayerConnect
    PHP код:
    SetPVarInt(playerid"Time Of Player In Game"gettime()); 
    После новую функцию для конвертации секунд в формат "час/минута/секунда"
    PHP код:
    stock ConvertSeconds(conv_time, &conv_hour, &conv_minute,&conv_second)
    {
        if(
    conv_time <= 60)
        {
            
    conv_hour 0;
            
    conv_minute 0;
            
    conv_second conv_time;
        }
        else if(
    conv_time 60 && conv_time 3600)
        {
            
    conv_hour 0;
            
    conv_minute conv_time 60;
            
    conv_second floatround(conv_time 60floatround_tozero);
        }
        else if(
    conv_time == 3600){ conv_hour 1conv_minute 0conv_second 0; }
        else if(
    conv_time 3600)
        {
            new 
    conv_minute_int;
            
    conv_hour conv_time 3600;
            
    minutes_int floatround(conv_time 3600floatround_tozero);
            
    conv_minute conv_minute_int 60;
            
    conv_second floatround(conv_minute_int 60floatround_tozero);
        }
        return 
    1;

    И пример вывода времени:
    PHP код:
    new hour_in_game,
        
    minute_in_game,
        
    seconds_in_game;

    ShowTimeOfPlayerInGame(playeridhour_in_gameminute_in_gameseconds_in_game);
    printf("Игрок с ID %d провёл в игре %d часов, %d минут и %d секунд"playeridhour_in_gameminute_in_gameseconds_in_game); 


    2) Не совсем понял чего Вы хотите... Зачем отнимать 366 от gettime и потом опять что-то приплюсовывать? О_о gettime и так должен возвращать нормальное время. На компьютере время установлено верное? Функция gettime снимает показания именно с настроек машины, на которой запущен сервер
    логи выдают 2016-01-07 07:01:16, а у меня на компьютере 18:04( -1 мск )
    Как быть?
    Последний раз редактировалось Роуди.; 07.01.2016 в 18:06.

  5. #5
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,034
    Репутация:
    702 ±
    mxDate ошибочно определяет время, я портировал функции gmtime и mktime из ОС Minix в Pawn, пользуйся ими: https://github.com/Open-GTO/time_t
    P.S. gettime() возвращает UTC время.

  6. Пользователь сказал cпасибо:
    Роуди. (07.01.2016)
  7. #6
    Аватар для Роуди.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    151
    Репутация:
    17 ±
    Это, тему можно закрыть, спасибо

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •