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

    Статус
    Оффлайн
    Регистрация
    16.10.2014
    Сообщений
    11
    Репутация:
    0 ±
    Цитата Сообщение от NewGreen Посмотреть сообщение
    но также теоретически может возникнуть баг (хотя это багом назвать трудно)
    А именно?

    Цитата Сообщение от NewGreen Посмотреть сообщение
    я не могу вам гарантировать нормальную работу алгоритма.
    Вся суть вашего "эффективного" алгоритма.

    Цитата Сообщение от NewGreen Посмотреть сообщение
    Немного теории:
    OnPlayerUpdate - обновляется очень быстро, и работает пока игрок не свернул игру, соответственно переменная checkToAFK[playerid] будет иметь значение false до тех пор пока игрок не свернет игру, как только он игрок свернул игру, система определяется что игрок АФК, именно благодаря этому коду в 1 сек таймере:
    PHP код:
    if(checkToAFK[playerid]) {
        
    // Выполняем АФК функции
    }
    checkToAFK[playerid] = true
    OnPlayerUpdate может вызваться 1 раз в секунду,учитывая что SA не свёрнута.

  2. #12
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от James_Cruise Посмотреть сообщение
    А именно?


    Вся суть вашего "эффективного" алгоритма.



    OnPlayerUpdate может вызваться 1 раз в секунду,учитывая что SA не свёрнута.
    Вопрос о вызове сего каллбэка был решен давно.

  3. #13
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от James_Cruise Посмотреть сообщение
    OnPlayerUpdate может вызваться 1 раз в секунду,учитывая что SA не свёрнута.
    http://wiki.sa-mp.com/wiki/OnPlayerUpdate

    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. #14
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В Pawn обычно не используется такое понятие, как "байт", вместо этого используется понятие "ячейка". В версии Pawn для SA:MP ячейка равна 4 байтам, хотя в других версиях (например, для Vault-MP) она может состоять из 8 байт. На каждую переменную выделяется по 1 ячейке, поэтому нельзя сделать одиночные переменные размером всего в 1 байт.
    Впрочем, можно сделать массив из байтов:
    PHP код:
    new arr[12 char]; 
    Этим кодом создастся массив из 12 байт (12/4 = 3 ячейки).
    Затем присваиваем ячейке значение:
    PHP код:
    arr{playerid} = 1
    Обратите внимание: вместо квадратных скобок используются фигурные - они означают доступ вместо всей ячейки только к байту с указанным индексом.
    Еще можно обмануть систему переменных под которые выделяются 4 байта (не удобно писать 1 ячейка :-) ) и использовать массивы например так для целых чисел:
    PHP код:
    new arr[1 char]; // итого 1 байт 
    правда далеко на 1 байте не уедешь)) но можно использовать для небольших чисел.
    Так же можно и поступать со строками (аля массивами):
    PHP код:
    new str[10+1 char]; // плюс 1 на завершающий символ строки 
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Хорошенько подумайте, что будет, если в том же односекундном таймере добавить код с проверкой на AFK _после_ присвоения checkToAFK[playerid] = true.
    В целом система писалась на коленке, могу расписать немного подробно:
    К глобальным переменным:
    PHP код:
    new bool:checkToAFK[MAX_PLAYERS]; 
    Где то в моде сферический код в вакууме:
    PHP код:
    public OnPlayerUpdate(playerid)
    {
    checkToAFK[playerid] = false// пока окно игрок активен система его игнорит
    }
    public 
    OnGameModeInit()
    {
    SetTimer("SomeFunc",1000,true);
    }
    public 
    SomeFunc() // опустил forward
    {
    for(new 
    0MAX_PLAYERSi++)
    {
    if(
    checkToAFK[i]) //
    {
    SendClientMessage(i,-1,"AFK"); // тут что угодно, действия при АФК
    }
    checkToAFK[playerid] = true// если игрок свернул игру **
    }
    return 
    1;

    ** - при сворачивании игры переменная принимает значение true и условие if(checkToAFK[i]) нахождения в АФК начинает выполняться.

    В принципе я не вижу здесь никаких других сценариев, есть правда некоторая вероятность того, что переменная checkToAFK[playerid] может быть переключена случайна на true, но она очень маленькая.

    - - - Добавлено - - -

    Цитата Сообщение от James_Cruise Посмотреть сообщение
    А именно?
    О баге я написал в посте к Daniel_Cortez чуть выше почитайте.

    Цитата Сообщение от James_Cruise Посмотреть сообщение
    Вся суть вашего "эффективного" алгоритма.
    Это суть не моего алгоритма, а вашего, который вы переписали уже из моего, и не нужно вырывать слова из контекста, этим вы не меняете сути дела, а лишь пытаетесь зацепиться за что либо с целью искажения реального положения вещей .

    Цитата Сообщение от James_Cruise Посмотреть сообщение
    OnPlayerUpdate может вызваться 1 раз в секунду,учитывая что SA не свёрнута.
    Опять же выше предоставили необходимые ссылки на ваше утверждение.
    Последний раз редактировалось NewGreen; 17.10.2014 в 16:43.

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

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    157
    Репутация:
    245 ±
    Цитата Сообщение от NewGreen Посмотреть сообщение
    Еще можно обмануть систему переменных под которые выделяются 4 байта (не удобно писать 1 ячейка :-) ) и использовать массивы например так для целых чисел:
    PHP код:
    new arr[1 char]; // итого 1 байт 
    правда далеко на 1 байте не уедешь)) но можно использовать для небольших чисел.
    Так же можно и поступать со строками (аля массивами):
    PHP код:
    new str[10+1 char]; // плюс 1 на завершающий символ строки 
    В целом система писалась на коленке, могу расписать немного подробно:
    К глобальным переменным:
    PHP код:
    new bool:checkToAFK[MAX_PLAYERS]; 
    Где то в моде сферический код в вакууме:
    PHP код:
    public OnPlayerUpdate(playerid)
    {
    checkToAFK[playerid] = false// пока окно игрок активен система его игнорит
    }
    public 
    OnGameModeInit()
    {
    SetTimer("SomeFunc",1000,true);
    }
    public 
    SomeFunc() // опустил forward
    {
    for(new 
    0MAX_PLAYERSi++)
    {
    if(
    checkToAFK[i]) //
    {
    SendClientMessage(i,-1,"AFK"); // тут что угодно, действия при АФК
    }
    checkToAFK[playerid] = true// если игрок свернул игру **
    }
    return 
    1;

    ** - при сворачивании игры переменная принимает значение true и условие if(checkToAFK[i]) нахождения в АФК начинает выполняться.

    В принципе я не вижу здесь никаких других сценариев, есть правда некоторая вероятность того, что переменная checkToAFK[playerid] может быть переключена случайна на true, но она очень маленькая.

    - - - Добавлено - - -


    О баге я написал в посте к Daniel_Cortez чуть выше почитайте.



    Это суть не моего алгоритма, а вашего, который вы переписали уже из моего, и не нужно вырывать слова из контекста, этим вы не меняете сути дела, а лишь пытаетесь зацепиться за что либо с целью искажения реального положения вещей .



    Опять же выше предоставили необходимые ссылки на ваше утверждение.

  6. #16
    Аватар для James_Cruise
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.10.2014
    Сообщений
    11
    Репутация:
    0 ±
    Цитата Сообщение от NewGreen Посмотреть сообщение
    Еще можно обмануть систему переменных под которые выделяются 4 байта (не удобно писать 1 ячейка :-) ) и использовать массивы например так для целых чисел:
    PHP код:
    new arr[1 char]; // итого 1 байт 
    правда далеко на 1 байте не уедешь)) но можно использовать для небольших чисел.
    Так же можно и поступать со строками (аля массивами):
    PHP код:
    new str[10+1 char]; // плюс 1 на завершающий символ строки 
    В целом система писалась на коленке, могу расписать немного подробно:
    К глобальным переменным:
    PHP код:
    new bool:checkToAFK[MAX_PLAYERS]; 
    Где то в моде сферический код в вакууме:
    PHP код:
    public OnPlayerUpdate(playerid)
    {
    checkToAFK[playerid] = false// пока окно игрок активен система его игнорит
    }
    public 
    OnGameModeInit()
    {
    SetTimer("SomeFunc",1000,true);
    }
    public 
    SomeFunc() // опустил forward
    {
    for(new 
    0MAX_PLAYERSi++)
    {
    if(
    checkToAFK[i]) //
    {
    SendClientMessage(i,-1,"AFK"); // тут что угодно, действия при АФК
    }
    checkToAFK[playerid] = true// если игрок свернул игру **
    }
    return 
    1;

    ** - при сворачивании игры переменная принимает значение true и условие if(checkToAFK[i]) нахождения в АФК начинает выполняться.

    В принципе я не вижу здесь никаких других сценариев, есть правда некоторая вероятность того, что переменная checkToAFK[playerid] может быть переключена случайна на true, но она очень маленькая.

    - - - Добавлено - - -


    О баге я написал в посте к Daniel_Cortez чуть выше почитайте.



    Это суть не моего алгоритма, а вашего, который вы переписали уже из моего, и не нужно вырывать слова из контекста, этим вы не меняете сути дела, а лишь пытаетесь зацепиться за что либо с целью искажения реального положения вещей .



    Опять же выше предоставили необходимые ссылки на ваше утверждение.
    wat?

    Как бы вы там не доказывали,ваш алгоритм в каком то плане быдловат. Не огорчайтесь, но это факт.
    Я не говорю за лишние проверки, вот элементарное, неточности ...
    Последний раз редактировалось James_Cruise; 17.10.2014 в 18:13.

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

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от James_Cruise Посмотреть сообщение
    wat?

    Как бы вы там не доказывали,ваш алгоритм в каком то плане быдловат. Не огорчайтесь, но это факт.
    Я не говорю за лишние проверки, вот элементарное, неточности ...
    Прошу по пунктам расписать:
    1) чем же алгоритм быдловат - и что вообще вы подразумеваете под быдлокодом
    2) лишние проверки - опишите где вы увидели лишние проверки, там так же одна проверка как и у вас
    3) неточности - что вы подразумеваете под этим

    От себя добавлю, не неточности а лишь вероятность, а вероятность понятие достаточно неопределенное, она может быть как 1 так и 0.000001 а может быть вообще 0.

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

    Статус
    Оффлайн
    Регистрация
    16.10.2014
    Сообщений
    11
    Репутация:
    0 ±
    1) Есть реализованный алгоритм афк,без вcяких "вероятностей",и использованием таймера.
    2) Читаем пункт 1.
    3) Читаем комментарий #5.
    Цитата Сообщение от NewGreen Посмотреть сообщение
    Прошу по пунктам расписать:
    1) чем же алгоритм быдловат - и что вообще вы подразумеваете под быдлокодом
    2) лишние проверки - опишите где вы увидели лишние проверки, там так же одна проверка как и у вас
    3) неточности - что вы подразумеваете под этим

    От себя добавлю, не неточности а лишь вероятность, а вероятность понятие достаточно неопределенное, она может быть как 1 так и 0.000001 а может быть вообще 0.

  9. #19
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от James_Cruise Посмотреть сообщение
    1) Есть реализованный алгоритм афк,без вcяких "вероятностей",и использованием таймера.
    2) Читаем пункт 1.
    3) Читаем комментарий #5.
    В любом алгоритме так или иначе есть вероятность ошибки.
    Использование таймера, вы уже несколько раз в этой ветке упомянули это предложение, чем так плохи таймеры ?

  10. #20
    Аватар для James_Cruise
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.10.2014
    Сообщений
    11
    Репутация:
    0 ±
    В данном случае,ваш алгоритм более неточный,тут и ослу понятно.
    Я не говорил что таймеры плохи,я говорю,что можно обойтись без него.
    Цитата Сообщение от NewGreen Посмотреть сообщение
    В любом алгоритме так или иначе есть вероятность ошибки.
    Использование таймера, вы уже несколько раз в этой ветке упомянули это предложение, чем так плохи таймеры ?

 

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

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

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

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

Ваши права

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