Тема: Ресурсная система для
Download
1 / 26

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


  • 183 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Тема: Ресурсная система для MMO Докладчик: Сидоренко Дмитрий' - kirra


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

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


О чем пойдет речь

  • Компоненты проекта MMO. Требования, предъявляемые к ресурсной системе

  • Ресурсная система в многоязыковой среде

  • Методы борьбы с некорректными данными

  • Ресурсная система на основе XML

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

  • Что еще хотелось бы реализовать


Сервер

Клиент

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

Компоненты MMO проекта


Требования компонент

  • Сервер

    • Некорректные данные не должны ронять сервер

    • Возможность написания сложных семантических проверок данных

  • Клиент

    • Возможность in-place загрузки


Требования компонент

Инструментарий

  • Возможность распределенной работы с БД

  • Быстрый поиск по системе ресурсов

  • Удобный механизм типизации

  • Возможность массового редактирования

  • Возможность работы аутсорсеров


Общие требования

  • Отсутствие дублирования данных

  • Объектная модель данных

  • Консистентность

  • Быстрая загрузка

  • Human readable – особенно на этапе разработки, пока еще нет удобных инструментов редактирования


Зачем нужно много языков программирования

  • Клиент на С++

    • Компилятор генерирует оптимизированный native код

    • Позволяет выполнять низкоуровневые манипуляции с памятью

  • Сервер на Java

    • Современный язык (простой синтаксис, garbage collection, reflection)

    • Работает на Linux

    • Удобная среда разработки (Intellij IDEA)

  • Редактор на C#

    • современный язык (…)

    • язык изначально ориентированный на быструю разработку GUI приложений

    • Удобные языковые конструкции (delegates, events, properties)


Ресурсная система в многоязыковой среде

Метаописание ресурса задается на java.Используется инструментарий генерации кода для других языков, используемых в проекте.

Плюсы выбора java для метаописания:

  • Простой синтаксис

  • Есть reflection – стандартный способ получить runtime type information

  • Есть удобные среды разработки (Intellij IDEA)

  • Есть аннотации – декларативные элементы языка


Генерация кода по метаописанию многоязыковой среде


Борьба с некорректными данными многоязыковой среде

Три рубежа обороны

  • редактор (карт, спелов, квестов и т.д.)

  • коммит хук в системе контроля версий

  • подсистема десериализации ресурсов в игровом коде


Проверки ограничения диапазона многоязыковой среде

Для примитивных типов данных можно задавать ограничение назначение. Ограничение проверяется на всех 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;

}


Nullpointerexception
Скажем нет многоязыковой среде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();

}

}

}


Default or not default
Default or not default многоязыковой среде

Значения поумолчанию задаются в описателе ресурса. Для некоторых полей значение поумолчанию не имеет смысла. Такие поля требуют явного задания значений.

public class Mob {

@AllowDefault

private float thickness= 1.0f;

@NotNull

private String name;

@NotNull

private VisualModel model;

}


Более сложные проверки многоязыковой среде

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


Ресурсная система на основе многоязыковой средеXML

  • Объекты хранятся в отдельных XML файлах

  • Плюсы

    • Иерархическая структура

    • Использование стандартных XML parsers для десериализации

    • Human readable. Возможность редактировать в любом xml редакторе и даже в простом текстовом редакторе

    • Возможность распределенной работы

  • Минусы

    • Сложность массовой обработки

    • Много мелких файлов тормозит файловую систему

    • Дублирование данных


Inlining xml
Inlining - многоязыковой средевстраивание нескольких мелких объектов в один XML файл

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

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


Inlining xml1
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>


Дублирование данных многоязыковой среде

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>


Использование прототипов для удаления дублирования данных

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>


Удобство редактирования удаления дублирования данных

<?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>


Массовое редактирование удаления дублирования данных


Поиск по системе ресурсов удаления дублирования данных


Жизненный цикл базы данных удаления дублирования данных


Рефакторинг удаления дублирования данных данных

Относительно простые рефакторинги:

  • удаление поля

  • переименование поля

  • переименование типа

    Сложные рефакторинги:

  • нужно писать конвертор данных


Generics
Generics удаления дублирования данныхв ресурсной системе


Вопросы? удаления дублирования данных

Сидоренко Дмитрий

dmitry.sidorenko@nivalonline.com


ad