1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/runsnails-skynet_gameserver_study

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

-- создано NaiveBug^梁疯

Подготовка перед началом

1: Установите MySQL и добавьте пользователя с именем: iphone, пароль: iphoneGame (или измените пароль в mysql/sql) (ps: обратите внимание на права доступа)

2: Импортируйте sql/sql.sql в базу данных, после чего нажмите start.bat или skynet.exe для запуска сервера игры

-- Объяснение:

1 Этот код предназначен для изучения логики Skynet, а исполняемые файлы exe можно скачать с официального сайта Skynet для Windows (неофициальная версия), если требуется коммерческое использование, то следует перейти на Linux, так как код кросс-платформен и будет работать одинаково.

2 Код находится в code/script, остальное - это оригинальные элементы Skynet.

--

Структура кода: (сначала изучите примеры кода в Skynet)

1 Для каждого игрока существует свой Agent, клиент отправляет данные, которые перенаправляются в netcommon.netPackCommon в Agent, затем данные обрабатываются в net/netcommon.netPackCommon для каждого сетевого пакета, как в самом простом примере netchat.

2 who является игроком, используйте GetPlayer() для его получения.

3 Сетевые протоколы кодируются с использованием Protobuf, для клиента вы можете посмотреть примеры в google Protobuf, в Skynet используется версия Protobuf на C языке от брата Yunfeng, протоколы находятся в protos, pb файлы можно сгенерировать с помощью поиска в интернете по запросу "protobufinit инициализация и загрузка protobuf".4 Для входа в систему с использованием учетной записи сначала выполните netbase.C2SLogin, затем загрузите данные игрока в account/LoadPlayerData. Данные загружаются и обрабатываются в списках m_DBList и m_WhenUpdateSaveList (список m_WhenUpdateSaveList обновляется только при наличии изменений и сохраняется через определенное время). После загрузки данные передаются в функцию EnterGame игрока. После выполнения всех операций данные отправляются обратно клиенту.

5 m_DBList и m_WhenUpdateSaveList являются одними из самых важных элементов этого фреймворка для работы с данными, код находится в db/dbmgr.

6 data — это данные из таблицы, генерация данных из таблицы может быть изучена в моем проекте python_read_excel_to_lua, данные из таблицы инициализируются в data/share.lua, это делается для экономии памяти, не требуется загружать каждую таблицу в каждом виртуальном окружении, достаточно загрузить только те, которые используются. Используется функция sharedata Skynet.

7 Хранение данных NPC осуществляется в herodb/load и herodb/save, загрузка данных происходит в dbmgr/load и dbmgr/save, в конечном итоге данные сериализируются в строку с помощью g_pickle.serializeTable и сохраняются в MySQL.8 Хранение данных осуществляется в виде блоков, то есть больших строк, которые сохраняются в базе данных и загружаются. Поэтому после упаковки, даже если вы пишете логику на верхнем уровне, вам не нужно беспокоиться о других вопросах хранения данных. Это потому что в функции AutoSave игрока каждые несколько минут вызывается Save для проверки базы данных на наличие изменений, и только если изменения есть, они сохраняются.9 Что касается обновления, вызывается функция UpdateSave. Если вызывается herodb для проверки обновлений с помощью функции CheckUpdate, то проверяется каждый объект на наличие обновлений. Каждый Chero наследует DictKeysCtrl или CDictKeysCtrl из base/only (их различие заключается в том, что один использует точку, а другой — двоеточие для определенного стиля записи). Поэтому при записи данных можно использовать операции Set и Query для работы с таблицей, например, Chero:SetName и Chero:GetName(). При вызове этих функций данные автоматически сохраняются и обновляются, что позволяет не беспокоиться о данных, делая работу очень удобной и быстрой.10. Способ написания класса BaseClass(CNpc) определен в base/BaseClass, это Lua-класс, написанный Yunfeng в 2006 году. Я использую его только для множества объектов NPC, чтобы сэкономить немного памяти. На самом деле, его можно не использовать, а просто создать объект с помощью createdbmgr, что позволяет использовать self.xx вместо self:xx, что удобнее для унифицированного использования.

-------------------------окончание----------------

Если у вас есть предложения, вы можете оставить комментарий или обратиться к Yunfeng в группе Skynet с упоминанием @clear. Yunfeng обладает большой способностью и делает большой вклад, а я, имея меньшие способности, делаю небольшой вклад.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Конструкт Skynet для сервера логических игр, предназначенный для обучения новичков или любительского использования. Конечно, его можно легко использовать для серверов карточных игр, игр с пошаговым режимом, а также для серверов малых и средних игр, включая коммерческие игры. Для многопользовательских онлайн-игр требуется кластеризация. Преимущес... Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/runsnails-skynet_gameserver_study.git
git@api.gitlife.ru:oschina-mirror/runsnails-skynet_gameserver_study.git
oschina-mirror
runsnails-skynet_gameserver_study
runsnails-skynet_gameserver_study
master