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

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 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
    Адрес
    Уфа, Россия
    Сообщений
    313
    Репутация:
    51 ±
    Где то видел данный код, случайно автор кода не OKStyle?

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

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

    Широко известно, что идеи стоят 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Я и не говорю, что с ними будет проблема. Просто многие гоняются за миллисекундами, а о медленности pVar написано даже на офф.сайте. В общем, я просто предупредил :)
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    В интернете полно систем AFK на переменных
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    В общем, можно сделать как-то так и не страдать
    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 потом использовать для других случаев, когда нужно конвертировать время из секунд (название ему и сами дать можете)
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

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

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

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

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

Ваши права

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