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


    Electr0
    • Публичное тестирование

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

    Цитата

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

     


    Отзывы пользователей

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

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

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

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

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

     

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

     

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

    Ссылка на комментарий
    Поделиться на других сайтах

    метод 3:

     

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

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

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

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

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

     

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

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

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

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

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

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

    Ссылка на комментарий
    Поделиться на других сайтах



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

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

    Гость
    Добавить комментарий...

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

      Разрешено не более 75 эмодзи.

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

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

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


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

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

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

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

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

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