Зависание баффов на 0

blodden

Знаменитый
Участник
Сообщения
44
Розыгрыши
0
Решения
1
Репутация
16
Реакции
13
Баллы
1 298
Всем привет, ребят кто сможет подсказать в чем проблема ?
Когда баффы заканчиваются то висят на 0 это бывает редко но случается, приходится перезаходить игру и тогда все нормально.
Хде копать не подскажите ?
 
скорее всего таймер бафа перескакивает в минус и поэтому зависание. Страдали от такой проблемы со станом. Копай обработку эффектов в стадии финиша
 
Ну хорошо гляну, а то уже подозрения на патч может какая та dll кривая
 
Ну хорошо гляну, а то уже подозрения на патч может какая та dll кривая
ну в идеале вообще когда есть подозрения на патчи , ставить полностью чистые без каких либо дополнений, так и будет понятно в сервере дело или же в клиенте. бывают редкие конечно исключения что может ориг клиент иметь косяки но это крайне редко бывает.
 
ну в идеале вообще когда есть подозрения на патчи , ставить полностью чистые без каких либо дополнений, так и будет понятно в сервере дело или же в клиенте. бывают редкие конечно исключения что может ориг клиент иметь косяки но это крайне редко бывает.
Да уже попробовал чистый патч и с НКсофта тоже самое.
 
Всем привет, ребят кто сможет подсказать в чем проблема ?
Когда баффы заканчиваются то висят на 0 это бывает редко но случается, приходится перезаходить игру и тогда все нормально.
Хде копать не подскажите ?
Только у вас или у всех игроков на сервере? На Овере (сборке) такая проблема на многих серверах встречалась, там у всего сервера уходили эффекты в 0 (становились бесконечными), помогал только релог сервака. Решение проблемы не знаю, но очевидно оно в сервере.
 
Только у вас или у всех игроков на сервере? На Овере такая проблема на многих серверах встречалась, там у всего сервера уходили эффекты в 0, помогал только релог сервака. Решение проблемы не знаю, но очевидно оно в сервере.
нее, у всех игроков такая проблема, но редко встречаемая.
 
У нас такое бывало тоже когда-то - причина была в забивании пула менеджера эффектов (EffectTaskManager в овере), т.е. проще говоря таски обработки работы эффектов (наложение/тики/снятие) не успевали вовремя отрабатывать и возникали такие "зависания" эффектов.
Решить можно например увеличением количества инстансов этих менеджеров, т.е. проще говоря раскидыванием запихивания задач эффектов на несколько параллельно работающих менеджеров.
Но сильно с количеством опять же не стоит увлекаться - можно сделать еще хуже. Вобщем зависит все от количества имеющихся ядер проца и всего такого.

Еще посоветовал бы поизучать, если есть, вещи типа нубобафферов и т.п. А то во многих сборках нет ограничения по времени на повторные запросы баффа, что позволяет зафлудить сервер запросами на этот самый бафф, что так же может легко и быстро забить очередь этих самых менеджеров и вызвать ту же самую проблему у всех. По крайней мере в оригинальном фениксе/овере таких проверок нет, нсколько я помню. Да и многие когда пишут те же бафферы в коммнуке и т.п. на эту тему не заморачиваются. А ведь это такой простой путь для вот такого своеобразного ддоса сервера...

К примеру у нас когда-то, еще на фениксе, когда я еще не добавлял этих проверок, именно так вызвали данный косяк - тупо зафлуживали серв через нубобаффера запросами на бафф с вполне понятным результатом. С тех пор взял за правило втыкать во все подобные вещи обязательную проверку типа "с момента предыдущего запроса этого игрока не прошло N миллисекунд - он идет нафиг со своим запросом".
 
Последнее редактирование:
У нас такое бывало тоже когда-то - причина была в забивании пула менеджера эффектов (EffectTaskManager в овере), т.е. проще говоря таски обработки работы эффектов (наложение/тики/снятие) не успевали вовремя отрабатывать и возникали такие "зависания" эффектов.
Решить можно например увеличением количества инстансов этих менеджеров, т.е. проще говоря раскидыванием запихивания задач эффектов на несколько параллельно работающих менеджеров.
Но сильно с количеством опять же не стоит увлекаться - можно сделать еще хуже. Вобщем зависит все от количества имеющихся ядер проца и всего такого.

Еще посоветовал бы поизучать, если есть, вещи типа нубобафферов и т.п. А то во многих сборках нет ограничения по времени на повторные запросы баффа, что позволяет зафлудить сервер запросами на этот самый бафф, что так же может легко и быстро забить очередь этих самых менеджеров и вызвать ту же самую проблему у всех. По крайней мере в оригинальном фениксе/овере таких проверок нет, нсколько я помню. Да и многие когда пишут те же бафферы в коммнуке и т.п. на эту тему не заморачиваются. А ведь это такой простой путь для вот такого своеобразного ддоса сервера...

К примеру у нас когда-то, еще на фениксе, когда я еще не добавлял этих проверок, именно так вызвали данный косяк - тупо зафлуживали серв через нубобаффера запросами на бафф с вполне понятным результатом. С тех пор взял за правило втыкать во все подобные вещи обязательную проверку типа "с момента предыдущего запроса этого игрока не прошло N миллисекунд - он идет нафиг со своим запросом".
Вроде как у фениксов есть же базовый лимит на запрос ко всем байпассам вроде он там равен 100 или 200 мс.
А вот у оверов, да подобной проверки нет. Лучше глобально такие проверки ставить, в каждый скрипт впиливать проверки это слишком сурово :)
 
ну 100 мс на байпассы это один фиг мало, т.к. просто посложнее будет процесс флуда - больше персов на ботах подключать придется
в подобных местах вобще разумно втыкать антифлуд хотя бы на 1-2 секунды, все равно вряд ли обычному игроку потребуется сразу же повторно запросить набор баффов.
 
ну 100 мс на байпассы это один фиг мало, т.к. просто посложнее будет процесс флуда - больше персов на ботах подключать придется
в подобных местах вобще разумно втыкать антифлуд хотя бы на 1-2 секунды, все равно вряд ли обычному игроку потребуется сразу же повторно запросить набор баффов.
Если тачка норм и обработчик бс в ядре норм, то 100 мс в целом то за глаза, но да на такие важные места можно и исключения сделать). В целом общую проверку обязательно нужно иметь в ядре. Потому как в тех же оверах уязвимых мест на эту тему просто уйма, нубо-баф фикс - это хорошо, а там еще есть вкусные циклы на парс манора в замках, им можно задачник у**ать минуты за 2 в 1 окно :) ну или те же нпсы в кхшках)
 
Еще кстати стоит проверить, вдруг есть где мобы/нпс которые из-за какой нибудь ошибки непрерывно на себя или других нпс рекаст каких-то баффов делают - тоже может к такому привести по идее, особенно если эти баффы с нулевым временем каста и без реюза.
 
К примеру у нас когда-то, еще на фениксе, когда я еще не добавлял этих проверок, именно так вызвали данный косяк - тупо зафлуживали серв через нубобаффера запросами на бафф с вполне понятным результатом. С тех пор взял за правило втыкать во все подобные вещи обязательную проверку типа "с момента предыдущего запроса этого игрока не прошло N миллисекунд - он идет нафиг со своим запросом".
Человек дело говорит. По сути это делается так:
Java:
  private static boolean checkReuse(Player player, String displayName)
  {
    if(player.isSharedGroupDisabled(Buffer.SHARED_REUSE_GROUP))
    {
      player.sendPacket(new SystemMessage(SystemMessage.S1_IS_NOT_AVAILABLE_AT_THIS_TIME_BEING_PREPARED_FOR_REUSE).addString(displayName));
      return false;
    }
    TimeStamp timeStamp = new TimeStamp(Buffer.SHARED_REUSE_GROUP, System.currentTimeMillis() + Config.SOME_DELAY, Config.SOME_DELAY);
    player.addSharedGroupReuse(Buffer.SHARED_REUSE_GROUP, timeStamp);
    return true;
  }
и уже в doBuff делаем проверочку checkReuse
 
  • Мне нравится
Реакции: kick
Ну у меня чуток по другому - просто в сессионные переменные кладу реюз и проверяю там же.
Сессионные - по сути полный аналог обычных переменных персонажа из character_variables, просто без сохранения в бд, т.е. хранятся только в памяти, пока игрок в онлайне.
Java:
    /**
     * Устанавливает время следующего использования заданного действия
     *
     * @param action    - название действия
     * @param time        - время в мс
     */
    public void setNextActionUseTime(final String action, final long time)
    {
        _variables.setSessionVar(action, time);
    }

    /**
     * Возвращает время следующего использования заданного действия
     *
     * @param action    - название действия
     * @return        - время в мс
     */
    public long getNextActionUseTime(final String action)
    {
        return _variables.getSessionVar(action, 0L);
    }

    /**
     * Проверяет возможность следующего использования заданного действия
     *
     * @param action    - название действия
     * @param reuse        - если задано значение больше 0 и если уже есть возможность использовать - дополнительно будет выставлено время до следующего использования.
     * @return        - true - можно использовать, false - пока еще нет
     */
    public boolean checkNextActionUseTime(final String action, final long reuse)
    {
        if (getNextActionUseTime(action) > System.currentTimeMillis())
            return false;

        if (reuse > 0)
            setNextActionUseTime(action, System.currentTimeMillis() + reuse);

        return true;
    }
 
Ровно так же примерно и работает addSharedGroupReuse. Нет тут ни каких char_var и дрочение базы.
 
ну у меня сессионки просто так сказать большим функционалом обладают - я в них могу хранить что угодно, а не только тот же таймстамп как в шаредгроуп, т.е. данные вобще любого типа (включая любые производные от базового Object), так что и тут их задействовал как то что подходило под необходимый функционал.

З.Ы. у меня вобще сейчас аж 4 вида переменных имеются, подобных тем что в character_variables. Кроме них еще сессионные переменные, переменные общие на весь аккаунт, переменные для кланов :)
 
Последнее редактирование:
все, понял.

Если тачка норм и обработчик бс в ядре норм, то 100 мс в целом то за глаза, но да на такие важные места можно и исключения сделать). В целом общую проверку обязательно нужно иметь в ядре. Потому как в тех же оверах уязвимых мест на эту тему просто уйма, нубо-баф фикс - это хорошо, а там еще есть вкусные циклы на парс манора в замках, им можно задачник у**ать минуты за 2 в 1 окно :) ну или те же нпсы в кхшках)
Манор вообще весь в эксплоитах, а через КХ можно ронять серваки - там вообще ядрёный эксплоит.
И если не секрет как ты х*лил в пару окон "задачник" манора ?
 
Вобще при желании многими пакетами можно "изнасиловать" большинство серверов, на почти любых сборках.
Для предотвращения этого надо впиливать нормальный антифлуд, в котором можно было бы задавать допустимые периоды запросов индивидуально для любых клиентских пакетов.
 
Вобще при желании многими пакетами можно "изнасиловать" большинство серверов, на почти любых сборках.
Для предотвращения этого надо впиливать нормальный антифлуд, в котором можно было бы задавать допустимые периоды запросов индивидуально для любых клиентских пакетов.
Ну с КХ там нет ничего сложного убить даже с 1 окна, а вот с манором интересно. Там вроде нет по реквесту ни какого парса, лист грузиться сразу, а запрос КЛа посевов отдаётся из базы и довольно аккуратно. Если конечно афтар не вбросил.
 
Назад
Сверху Снизу