Перейти к содержанию
  • Если загрузить слот на двух серверах можно на одном продавать, на другом сохранять и снова продавать


    Текст от кларуса который показал баг:

    Цитата

    я зашел на приватную мегу
    загрузил убегу с оружием
    вышел с приватной меги (убега осталась)
    зашел на обычную мегу
    загрузил эту же убегу
    продал с неё пулемёт (+5000)
    вернулся на приватную мегу
    и увидел что моя убега стоит заспавненная вместе с пулемётом который я продал только что на обычной меге
    ну я просто сохранил её (вместе с пулемётом потому что он заспавнен)
    вернулся на обычную мегу и опять его продал (ред.)

     


    Обратная связь

    Рекомендуемые комментарии

    Electr0

    Опубликовано

    в связи с этим приватная мега и обычная вторая отключены до момента выработки фикса, скорее всего на месяц полтора т.к. времени у меня не будет после 27 января вообще.

    Electr0

    Опубликовано

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

    Electr0

    Опубликовано

    примерный вариант фикса: 

    в базе данных слотов добавляем поле version оно будет зашиваться при сохранении слота прибавляя +1 при каждом сохранении. далее во время сохранения во время прошивки слота предметам заодно прошиваем и номер version , при входе на сервер во время сборки данных о названиях слотов и количества предметов в них заодно записываем значение version каждого слота,  и финальное: при сохранении проверяем данные version из предметов и у слота на карте, не сходятся? тогда кумбек

    Electr0

    Опубликовано

    1 час назад, Electr0 сказал:

    примерный вариант фикса: 

    в базе данных слотов добавляем поле version оно будет зашиваться при сохранении слота прибавляя +1 при каждом сохранении. далее во время сохранения во время прошивки слота предметам заодно прошиваем и номер version , при входе на сервер во время сборки данных о названиях слотов и количества предметов в них заодно записываем значение version каждого слота,  и финальное: при сохранении проверяем данные version из предметов и у слота на карте, не сходятся? тогда кумбек

    так.. а ведь это не закроет проблему когда игрок просто загрузил слот на двух мегах по очереди и пошел продавать с них предметы.

     

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

     

    при старте карты сервер обязан отчитатся в таблицу статусов слотов о данных по загруженности слотов игроков.

    Electr0

    Опубликовано

    в случае потери соединения сервера с интернетом и не выхода на связь больше он не сможет сказать что слот игрока нигде не загружен, этот метод по этому параметру тоже такой себе способ получается. В таком случае для обхода этого исключения нужно добавлять epochstamp времени и если запись в базе данных старше 5 минут то ее во время сеанса связи нужно удалить и не брать в расчет. Сервер же должен раз в 2-4 минуты подтверждать статус слота.

    Electr0

    Опубликовано

    метод 3:

     

    что если во время загрузки слота записывать и прибавлять число загрузок слота.

    Допустим загрузили слот на приватной меге:

    после чего его число загрузок стало 1

    пошли на обычную мегу число загрузок стало 2

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

    Electr0

    Опубликовано

    метод 3 взят в работу, других логических исключений пока не нашел.

    Electr0

    Опубликовано

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

    Electr0

    Опубликовано

    • внедрена запись последней активности слота перед тем как начать загрузку предметов из базы данных.
    • внедрена выгрузка времени последней активности слота перед тем как начать сохранение предметов в базу данных
    • внедрена запись последней активности слота перед тем как начать сохранение предметов в базу данных
    • внедрена запись кеша активности слотов в файл
    • внедрена загрузка кеша активности слотов из файла при запуске плагина и выгрузка кеша активности слотов в файл при выгрузке плагина

     

    теперь это надо грамотно совместить.

    Electr0

    Опубликовано

    Значение Статус изменено на: Закрытое тестирование

    Electr0

    Опубликовано

    Значение Статус изменено на: В обработке

    Electr0

    Опубликовано

    процесс тестирования  блокировки сохранения слота завершен, если обнаружена более поздняя операция со слотом то слот не даст себя сохранить. Теперь надо внедрять это во все остальное.

    Electr0

    Опубликовано

    Основная работа над допиливанием завершена, теперь надо добавить в остальное:

    • MoveObjectsFromSlotInSlotByType
    • SendSlotToPlayer
    • MoveObjectInSlot
    • SoldObject
    • SaveFileEraser (тут не нужно, слишком избыточно, то что игрок очистит слот ему ничего не даст)
    Electr0

    Опубликовано

    Значение Статус изменено на: Закрытое тестирование

    Electr0

    Опубликовано

    23.01.2020 в 23:28, Electr0 сказал:

    Основная работа над допиливанием завершена, теперь надо добавить в остальное:

    • MoveObjectsFromSlotInSlotByType
    • SendSlotToPlayer
    • MoveObjectInSlot
    • SoldObject
    • SaveFileEraser (тут не нужно, слишком избыточно, то что игрок очистит слот ему ничего не даст)

    все запросы на запись вынесены в отдельную функцию чтобы не повторять одно и тоже во всех добавляемых к проверке функциях со слотами.

    Electr0

    Опубликовано

    Значение Статус изменено на: Публичное тестирование



    Присоединяйтесь к обсуждению

    Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

    Гость
    К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Обозначения статусов

    В обработке = Мы работаем над вашим отчетом.

    Исправлено = Проблема исправлена.

    Тестируется = Изменения внесены, но требуют тестирования.

    Закрыт = Отзыв некорректный, либо проблема не повторяется при проверке на серверах. Если у вас есть дополнительная информация напишите комментарий и мы снова откроем этот вопрос.

×
×
  • Создать...