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

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

  1. #1
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±

    AFK система

    Помогите плиз
    Добавил AFK систему вроде бы всё нормально пока не дойдёт до 10 минут время начинает идти так 10:1001
    PHP код:
    public OnGameModeInit()
    {
        
    SetTimer("CheckAFK"10001);
        return 
    1;
    }
    public 
    OnPlayerUpdate(playerid)
    {
        
    DeletePVar(playerid"AFKTime");
        return 
    1;
    }
    forward CheckAFK();
    public 
    CheckAFK()
    {
        for(new 
    GetMaxPlayers() - 1!= -1i--)
        {
            if(!
    IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
            new 
    afktime GetPVarInt(i"AFKTime");
            
    SetPVarInt(i"AFKTime"afktime 1);
            if(
    afktime >= 4)
            {
                new 
    string[18];
                if(
    afktime 3599) return format(stringsizeof(string), "На паузе %d:%02d:%02d"floatround(afktime 3600), floatround((afktime 3600) / 60), afktime 3600);
                else if(
    afktime 59format(stringsizeof(string), "На паузе %d:%02d"floatround(afktime 60), afktime 60);
                else 
    format(stringsizeof(string), "На паузе %d сек."afktime);
                
    SetPlayerChatBubble(istring0xFF0000FF10.01000);
            }
        }
        return 
    1;


  2. #2
    Аватар для Nurick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    Где то видел данный код, случайно автор кода не OKStyle?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Pvar медленнее массивов и в подобной системе это будет гораздо заметнее, чем где-либо ещё
    По поводу времени - формулы расчёта неверные. Вот исправление вашей проблемы:
    PHP код:
    else if(afktime 59format(stringsizeof(string), "На паузе %d:%02d"floatround(afktime 60), floatround(afktime 60)); 
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Да, автор кода я, да, формула в этом коде неверная. А насчет Пваров - проблем тут с ними не было никогда.

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Конечно они медленнее, ведь обычная переменная УЖЕ содержит значение, а PVar постоянно получается в необходимый момент времени. А это, как минимум, ping * 2.

  8. #7
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±
    Лучше делать на переменных? если да на примере не могли бы показать

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Pvar медленнее массивов и в подобной системе это будет гораздо заметнее, чем где-либо ещё
    По поводу времени - формулы расчёта неверные. Вот исправление вашей проблемы:
    PHP код:
    else if(afktime 59format(stringsizeof(string), "На паузе %d:%02d"floatround(afktime 60), floatround(afktime 60)); 
    Только смысл ещё теряется. Надо чтобы "сек." было, если время до минуты, и часы, если больше 60 минут.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    В общем, можно сделать как-то так и не страдать
    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(
    string[0]) format(stringsizeof(string), "На паузе %d:%02d:%02d"string[0], string[1], string[2]);
                else if(
    string[1]) format(stringsizeof(string), "На паузе %d:%02d"string[1], string[2]);
                else 
    format(stringsizeof(string), "На паузе %d сек."string[2]);
                
    SetPlayerChatBubble(istring0xFF0000FF10.01000);
            }
        }
        return 
    1;
    }


    stock ConvertAfkSeconds(conv_time, &conv_hour, &conv_minute, &conv_second)
    {
        if(
    conv_time <= 60conv_hour 0conv_minute 0conv_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 == 3600conv_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;

    И stock потом использовать для других случаев, когда нужно конвертировать время из секунд (название ему и сами дать можете)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  12. Пользователь сказал cпасибо:
    denis01 (02.07.2014)
 

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

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

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

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

Ваши права

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