1 / 26

Тема: Ресурсная система для MMO Докладчик: Сидоренко Дмитрий

Тема: Ресурсная система для MMO Докладчик: Сидоренко Дмитрий. О чем пойдет речь. Компоненты проекта MMO. Требования, предъявляемые к ресурсной системе Ресурсная система в многоязыковой среде Методы борьбы с некорректными данными Ресурсная система на основе XML Жизненный цикл базы данных

kirra
Download Presentation

Тема: Ресурсная система для MMO Докладчик: Сидоренко Дмитрий

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Тема: Ресурсная система для MMOДокладчик: Сидоренко Дмитрий

  2. О чем пойдет речь • Компоненты проекта MMO. Требования, предъявляемые к ресурсной системе • Ресурсная система в многоязыковой среде • Методы борьбы с некорректными данными • Ресурсная система на основе XML • Жизненный цикл базы данных • Что еще хотелось бы реализовать

  3. Сервер Клиент Инструментарий (редактор карт, model viewer, инструментарий массового редактирования, экспортеры) Компоненты MMO проекта

  4. Требования компонент • Сервер • Некорректные данные не должны ронять сервер • Возможность написания сложных семантических проверок данных • Клиент • Возможность in-place загрузки

  5. Требования компонент Инструментарий • Возможность распределенной работы с БД • Быстрый поиск по системе ресурсов • Удобный механизм типизации • Возможность массового редактирования • Возможность работы аутсорсеров

  6. Общие требования • Отсутствие дублирования данных • Объектная модель данных • Консистентность • Быстрая загрузка • Human readable – особенно на этапе разработки, пока еще нет удобных инструментов редактирования

  7. Зачем нужно много языков программирования • Клиент на С++ • Компилятор генерирует оптимизированный native код • Позволяет выполнять низкоуровневые манипуляции с памятью • Сервер на Java • Современный язык (простой синтаксис, garbage collection, reflection) • Работает на Linux • Удобная среда разработки (Intellij IDEA) • Редактор на C# • современный язык (…) • язык изначально ориентированный на быструю разработку GUI приложений • Удобные языковые конструкции (delegates, events, properties)

  8. Ресурсная система в многоязыковой среде Метаописание ресурса задается на java.Используется инструментарий генерации кода для других языков, используемых в проекте. Плюсы выбора java для метаописания: • Простой синтаксис • Есть reflection – стандартный способ получить runtime type information • Есть удобные среды разработки (Intellij IDEA) • Есть аннотации – декларативные элементы языка

  9. Генерация кода по метаописанию

  10. Борьба с некорректными данными Три рубежа обороны • редактор (карт, спелов, квестов и т.д.) • коммит хук в системе контроля версий • подсистема десериализации ресурсов в игровом коде

  11. Проверки ограничения диапазона Для примитивных типов данных можно задавать ограничение назначение. Ограничение проверяется на всех 3-х рубежах защиты. public class AstralShip extends Resource { @FloatMinMaxConstraint(minValue=10.0f, maxValue=1000000.0f) private float tonnage; @IntMinMaxConstraint(minValue=5, maxValue=30) private int crewCount; @ArrayIndexConstraint(maxIndex=25) private AstralTurret [] turrets; }

  12. Скажем нет NullPointerException public class AstralShip extends Resource{ @NotNull @NotNullElements(policy=NotNullElements.RemovePolicy.REMOVE) private AstralMissile [] missiles; public static class AstralMissile { public void launch() { } } } public class MissileLauncher { public void launch(@NotNull AstralShip.AstralMissile [] missiles){ for (AstralShip.AstralMissile missile:missiles){ missile.launch(); } } }

  13. Default or not default Значения поумолчанию задаются в описателе ресурса. Для некоторых полей значение поумолчанию не имеет смысла. Такие поля требуют явного задания значений. public class Mob { @AllowDefault private float thickness= 1.0f; @NotNull private String name; @NotNull private VisualModel model; }

  14. Более сложные проверки Можно задавать условия, проверяемые не для одного, а для целой группы объектов.

  15. Ресурсная система на основе XML • Объекты хранятся в отдельных XML файлах • Плюсы • Иерархическая структура • Использование стандартных XML parsers для десериализации • Human readable. Возможность редактировать в любом xml редакторе и даже в простом текстовом редакторе • Возможность распределенной работы • Минусы • Сложность массовой обработки • Много мелких файлов тормозит файловую систему • Дублирование данных

  16. Inlining - встраивание нескольких мелких объектов в один XML файл • Многие файловые системы не оптимизированы для большого количества маленьких файлов • При хранении большого количества маленьких файлов в ФС метаинформация занимает больший объем, чем полезные данные

  17. Inlining - встраивание нескольких объектов в один XML файл Можно так: <Port> <ships> < Item href=“AstralShip.xdb#xpointer(AstralShip)” /> < Item href=“LittleBoat.xdb#xpointer(Boat)” /> < Item href=“AstralSubmarine.xdb#xpointer(AstralSubmarine)” /> </ships> </Port> Но если объекты маленькие, лучше так: <Port> <ships> < Item type=“AstralShip” > <tonnage>100000</tonnage> <noOfGuns>10<noOfGuns> </Item> < Item type=“Boat” > <noOfPlaces>5</noOfPlaces> </Item> < Item type=“AstralSubmarine”> <ammoType>AstralMissile</ammoType> <ammoCount>10</ammoCount> </Item> </ships> </Port>

  18. Дублирование данных AstralMissile1.xml <AstralMissile> <distance> 1000</distance> <detonation>10</ detonation> <precision> 0.1</ precision > <fuel>1000</fuel> <noOfParts>3</noOfParts> </ AstralMissile > AstralMissile2.xml <AstralMissile> <distance> 1000</distance> <detonation> 15</ detonation> <precision> 0.1</ precision > <fuel>1000</fuel> <noOfParts>3</noOfParts> </ AstralMissile > AstralMissile3.xml <AstralMissile> <distance> 1000</distance> <detonation> 20</ detonation> <precision> 0.1</ precision > <fuel>1000</fuel> <noOfParts>3</noOfParts> </ AstralMissile> AstralMissile4.xml <AstralMissile> <distance> 1000</distance> <detonation> 10</ detonation> <precision> 0.05</ precision > <fuel>1000</fuel> <noOfParts>3</noOfParts> </ AstralMissile>

  19. Использование прототипов для удаления дублирования данных AstralMissilePrototype.xml <AstralMissile> <Vars> <distanceVar> 1000</distanceVar> <detonationVar>10</detonationVar> <precisionVar> 0.1</ precisionVar> <fuelVar>1000</fuelVar> <noOfPartsVar>3</noOfPartsVar> </Vars> <distance var=“distanceVar” /> <detonation var=“detonationVar” /> <precision var=“precisionVar” /> <fuelVar var=“fuelVar” /> <noOfParts var=“noOfPartsVar” /> </ AstralMissile> AstralMissile1.xml <AstralMissile> <include href=“AstralMissilePrototype.xml”/> </AstralMissile> AstralMissile2.xml <AstralMissile> <include href=“AstralMissilePrototype.xml”/> <Vars> <detonationVar>15</detonation> </Vars> </ AstralMissile> AstralMissile3.xml <AstralMissile> <include href=“AstralMissilePrototype.xml”/> <Vars> <detonationVar>15</detonation> </Vars> </ AstralMissile> AstralMissile4.xml <AstralMissile> <include href=“AstralMissilePrototype.xml”/> <Vars> <precisionVar>0.01</precisionVar> </Vars> </AstralMissile>

  20. Удобство редактирования <?xml version="1.0" encoding="UTF-8" ?> <gameMechanics.constructor.schemes.spell.area.SpellArea> <Header> <Prototype href="Spell.xdb#xpointer(/gameMechanics.constructor.schemes.spell.area.SpellArea)" /> <Variables> <level>4</level> <mana>70</mana> <damage>35</damage> <name>Spell01Name.txt</name> <learnLevel>4</learnLevel> <minDamage>35</minDamage> <maxDamage>35</maxDamage> </Variables> </Header> <Name href="Spell01_Name.txt" /> <Description href="Spell01_Desc.txt" /> </gameMechanics.constructor.schemes.spell.area.SpellArea>

  21. Массовое редактирование

  22. Поиск по системе ресурсов

  23. Жизненный цикл базы данных

  24. Рефакторинг данных Относительно простые рефакторинги: • удаление поля • переименование поля • переименование типа Сложные рефакторинги: • нужно писать конвертор данных

  25. Generics в ресурсной системе

  26. Вопросы? Сидоренко Дмитрий dmitry.sidorenko@nivalonline.com

More Related