Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 11 по 20 из 33

Тема: AFK система

  1. #11
    Аватар для OKStyle
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Использование стока недопустимо в данной задаче - слишком сложно.

    Надо считать сразу в сообщениях, примерно:
    PHP код:
    if(afktime 3599) return format(stringsizeof(string), "На паузе %d:%02d:%02d"afktime 3600floatround(afktime 60), floatround(afktime/60) % 60);
    else if(
    afktime 59format(stringsizeof(string), "На паузе %d:%02d"afktime 60floatround(afktime/60) % 60);
    else 
    format(stringsizeof(string), "На паузе %d сек."afktime); 

  2. #12
    Аватар для ^_^
    Übermensch

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    157
    Репутация:
    245 ±
    Цитата Сообщение от OKStyle Посмотреть сообщение
    Использование стока недопустимо в данной задаче - слишком сложно.

    Надо считать сразу в сообщениях, примерно:
    PHP код:
    if(afktime 3599) return format(stringsizeof(string), "На паузе %d:%02d:%02d"afktime 3600floatround(afktime 60), floatround(afktime/60) % 60);
    else if(
    afktime 59format(stringsizeof(string), "На паузе %d:%02d"afktime 60floatround(afktime/60) % 60);
    else 
    format(stringsizeof(string), "На паузе %d сек."afktime); 
    floatround(afktime % 60), floatround(afktime/60) % 60

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от OKStyle Посмотреть сообщение
    Использование стока недопустимо в данной задаче - слишком сложно.

    Надо считать сразу в сообщениях, примерно:
    PHP код:
    if(afktime 3599) return format(stringsizeof(string), "На паузе %d:%02d:%02d"afktime 3600floatround(afktime 60), floatround(afktime/60) % 60);
    else if(
    afktime 59format(stringsizeof(string), "На паузе %d:%02d"afktime 60floatround(afktime/60) % 60);
    else 
    format(stringsizeof(string), "На паузе %d сек."afktime); 
    Хмм, ну если для вас потеря пары сотых миллисекунд - существенная потеря, хорошо.
    Тогда, во-первых, стоит убрать лишний возврат из первого условия.
    Во-вторых, формулы должны выглядеть так:
    PHP код:
    if(afktime 3599format(stringsizeof(string), "На паузе %d:%02d:%02d"afktime 3600afktime 3600/60afktime 3600 60);
    else if(
    afktime 59format(stringsizeof(string), "На паузе %d:%02d"afktime 60afktime 60);
    else 
    format(stringsizeof(string), "На паузе %d сек."afktime); 
    Ибо чтоб, например, найти час, нужно число разделить на 3600. А чтоб найти минуты, нужно сначала найти остаток от прошлого деления, а потом уже из этого числа найти нужные нам минуты. Ну и так далее :)

     Полный код для автора темы (AFK system)
    PHP код:
    new afk_time[MAX_PLAYERS];

    public 
    OnGameModeInit()
    {
        
    SetTimer("CheckAFK"10001);
        return 
    1;
    }
    public 
    OnPlayerUpdate(playerid)
    {
        
    afk_time[playerid] = -1;
        return 
    1;
    }
    forward CheckAFK();
    public 
    CheckAFK()
    {
        new 
    string[18];
        for(new 
    GetMaxPlayers() - 1!= -1i--)
        {
            if(!
    IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
            if(++
    afk_time[i] > 0)
            {
                
    ConvertAfkSeconds(afk_time[i], string[0], string[1], string[2])
                if(
    afk_time[i] > 3599format(stringsizeof(string), "На паузе %d:%02d:%02d"afk_time[i] / 3600afk_time[i] % 3600/60afk_time[i] % 3600 60);
                else if(
    afk_time[i] > 59format(stringsizeof(string), "На паузе %d:%02d"afk_time[i] / 60afk_time[i] % 60);
                else 
    format(stringsizeof(string), "На паузе %d сек."afk_time[i]);
                
    SetPlayerChatBubble(istring0xFF0000FF10.01000);
            }
        }
        return 
    1;


    Вроде, ничего не забыл
    Последний раз редактировалось DeimoS; 02.07.2014 в 13:21.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  4. Пользователь сказал cпасибо:
    denis01 (02.07.2014)
  5. #14
    Аватар для OKStyle
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Мой код не претендует на идеал по части формул)) Я ж написал - примерно =)

  6. #15
    Аватар для ^_^
    Übermensch

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    157
    Репутация:
    245 ±
    Цитата Сообщение от OKStyle Посмотреть сообщение
    Мой код не претендует на идеал по части формул)) Я ж написал - примерно =)
    Не в формулах тут дело, а в ненужном использовании функции floatround.
    Точный пример:
    floatround(afktime % 60)
    Итак, этапы которые будет выполнять машина:
    1) afktime % 60 = целочисленный результат остатка от деления
    2) тип _: целочисленного результата преобразовывает в Float:
    3) округляет результат (x.0 в x.0, 50.0 в 50.0, 20.0 в 20.0 и т.д).
    4) преобразовывает конечный результат в _: (integer)
    5) возвращает результат (тот же что и в 1 пункте)
    afktime % 60
    1) целочисленный результат остатка от деления
    Во втором случае - также.
    Вот собственно и плюсы чтения книг и руководств...
    Последний раз редактировалось ^_^; 02.07.2014 в 13:43.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  8. #17
    Аватар для ^_^
    Übermensch

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    157
    Репутация:
    245 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Зачем цитировать меня, петушок? =)))

  9. #18
    Аватар для OKStyle
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    При чем тут руководства?)) Все и так знают, что делает floatround, и что бессмысленно его юзать на целых переменных

  10. #19
    Аватар для ^_^
    Übermensch

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    157
    Репутация:
    245 ±
    Цитата Сообщение от OKStyle Посмотреть сообщение
    При чем тут руководства?)) Все и так знают, что делает floatround, и что бессмысленно его юзать на целых переменных
    Однако тебе на это плевать и нарочно так делаешь?

  11. #20
    Аватар для OKStyle
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Я не парюсь на эту тему. Я сразу сказал, что формула там неверная. С другой стороны, если юзать округление - результат будет тот же. Не говоря о скоростях.

 

 
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя

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

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

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

Ваши права

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