|
| 1 | +######## |
| 2 | +Questgen |
| 3 | +######## |
1 | 4 |
|
| 5 | +Библиотека для автоматической генерации заданий (квестов). Позволяет по описанию мира (в виде набора предикатов) автоматически создавать вложенные нелинейные задания с событиями и разного рода ограничениями (вроде «исход задания для этого персонажа должен быть только положительным»). |
2 | 6 |
|
3 |
| -# questgen |
| 7 | +Также позволяет визуализировать то, что получилось, пример визуализации: svg_ |
4 | 8 |
|
5 |
| -Библиотека для автоматической генерации заданий (квестов). Позволяет по описанию мира (в виде набора предикатов) автоматически создавать вложенные нелинейные задания с событиями и разного рода ограничениями (вроде «исход задания для этого персонажа должен быть только положительным»). |
| 9 | +.. _svg: http://tiendil.org/static/trash/collect_debt.svg |
| 10 | + |
| 11 | +Конструкторы всех заданий: ``./questgen/quests/`` |
6 | 12 |
|
7 |
| -Также позволяет визуализировать то, что получилось, пример визуализации: [svg](http://tiendil.org/static/trash/collect_debt.svg). |
| 13 | +Создавалась для использования в MMOZPG игре Сказка_. |
8 | 14 |
|
9 |
| -Конструкторы всех заданий: ./questgen/quests/ |
| 15 | +.. _Сказка: http://the-tale.org |
10 | 16 |
|
11 |
| -Создавалась для использования в MMOZPG игре [«Сказка»](http://the-tale.org). |
| 17 | +Визуализации всех «базовых» шаблонов заданий лежат в каталоге ``./questgen/svgs/`` |
12 | 18 |
|
13 |
| -Визуализации всех «базовых» шаблонов заданий лежат в каталоге ./questgen/svgs/ |
| 19 | +Работа библиотеки описана в статье на habrahabr_. |
14 | 20 |
|
15 |
| -## условные обозначения в визуализаторе |
| 21 | +.. _habrahabr: http://habrahabr.ru/post/201680/ |
| 22 | + |
| 23 | +************************************ |
| 24 | +Условные обозначения в визуализаторе |
| 25 | +************************************ |
16 | 26 |
|
17 | 27 | Отображается граф квеста без модификаций (например, со всеми вариантами события, см. далее).
|
18 | 28 |
|
19 |
| -- серые узлы — начало и окончание задания; |
20 |
| -- фиолетовые узлы — точки выбора; |
21 |
| -- зелёные узлы — обычные точки сюжета; |
22 |
| -- красные узлы — условные переходы; |
23 |
| -- бирюзовые контуры — подквесты; |
24 |
| -- более тёмным фоном на в узлах отмечены требования к ситуации, которые должны быть выполнены для возможности перехода в эту точку сюжета; |
25 |
| -- более светлым фоном выделены действия, которые должны быть выполнены сразу после перехода в точку сюжета. |
26 |
| -- жёлтые контуры — события; |
| 29 | +* серые узлы — начало и окончание задания; |
| 30 | +* фиолетовые узлы — точки выбора; |
| 31 | +* зелёные узлы — обычные точки сюжета; |
| 32 | +* красные узлы — условные переходы; |
| 33 | +* бирюзовые контуры — подквесты; |
| 34 | +* более тёмным фоном на в узлах отмечены требования к ситуации, которые должны быть выполнены для возможности перехода в эту точку сюжета; |
| 35 | +* более светлым фоном выделены действия, которые должны быть выполнены сразу после перехода в точку сюжета. |
| 36 | +* жёлтые контуры — события; |
| 37 | + |
27 | 38 |
|
28 |
| -## установка |
| 39 | +********* |
| 40 | +Установка |
| 41 | +********* |
29 | 42 |
|
30 |
| -pip install git+git://github.com/Tiendil/questgen.git#egg=Questgen |
| 43 | +:: |
31 | 44 |
|
32 |
| -## принцип работы |
| 45 | + pip install git+git://github.com/Tiendil/questgen.git#egg=Questgen |
| 46 | + |
| 47 | +************** |
| 48 | +Принцип работы |
| 49 | +************** |
33 | 50 |
|
34 | 51 | Состояния мира описывается в виде предикатов вроде
|
35 | 52 |
|
36 |
| -```python |
37 |
| -LocatedIn(object='hero', place='place_1') |
38 |
| -``` |
| 53 | +.. code:: python |
| 54 | +
|
| 55 | + LocatedIn(object='hero', place='place_1') |
| 56 | +
|
39 | 57 |
|
40 | 58 | и сохраняются в базу знаний (БЗ)
|
41 | 59 |
|
42 | 60 | Задание описывается ориентированным связанным графом с одной начальной вершиной и несколькими конечными (который тоже хранится в БЗ).
|
43 | 61 |
|
44 |
| -- каждая вершина имеет список требований, которые должны быть удовлетворены, прежде чем можно будет перейти в неё (например, герой должен находиться в конкретном месте); |
45 |
| -- каждая вершина имеет список действий, которые должны быть выполнены, когда мы в неё перешли; |
46 |
| -- каждая дуга имеет два списка действий: |
47 |
| - - которые должны быть выполнены, когда мы начинаем двигаться по дуге; |
48 |
| - - когда мы заканчиваем двигаться по дуге (т.е. переходим в новую вершину после удовлетворения всех её требований); |
49 |
| -- существует несколько типов вершин: |
50 |
| - - Начальная — одна на задание, с неё начинается «путешествие»; |
51 |
| - - Конечная — несколько на задание, определяет результат выполнения (для стыковки с другими заданиями); |
52 |
| - - обычная — узел истории, можешь иметь несколько входящих дуг и ровно одну исходящую; |
53 |
| - - выбор — может иметь несколько исходящих дуг, между которыми можно переключаться, пока не пришли в одну из следующих вершин; |
| 62 | +* каждая вершина имеет список требований, которые должны быть удовлетворены, прежде чем можно будет перейти в неё (например, герой должен находиться в конкретном месте); |
| 63 | +* каждая вершина имеет список действий, которые должны быть выполнены, когда мы в неё перешли; |
| 64 | +* каждая дуга имеет два списка действий: |
| 65 | + * которые должны быть выполнены, когда мы начинаем двигаться по дуге; |
| 66 | + * когда мы заканчиваем двигаться по дуге (т.е. переходим в новую вершину после удовлетворения всех её требований); |
| 67 | +* существует несколько типов вершин: |
| 68 | + * Начальная — одна на задание, с неё начинается «путешествие»; |
| 69 | + * Конечная — несколько на задание, определяет результат выполнения (для стыковки с другими заданиями); |
| 70 | + * обычная — узел истории, можешь иметь несколько входящих дуг и ровно одну исходящую; |
| 71 | + * выбор — может иметь несколько исходящих дуг, между которыми можно переключаться, пока не пришли в одну из следующих вершин; |
54 | 72 |
|
55 | 73 | Несколько вершин могут быть объединены в «событие», которое раскрывается при завершении генерации графа, удаляя все вершины кроме одной. Таким образом можно делать случайные события.
|
56 | 74 |
|
57 | 75 | Общий порядок генерации:
|
58 | 76 |
|
59 |
| -1. создать описание мира; |
60 |
| -1. создать задание; |
61 |
| -1. обработать задание (см. пример использования далее); |
62 |
| -1. проверить на корректность; |
63 |
| -1. работать с квестом в коде игры (игра реализует код, который выполняется при проходе по графу). |
| 77 | +#. создать описание мира; |
| 78 | +#. создать задание; |
| 79 | +#. обработать задание (см. пример использования далее); |
| 80 | +#. проверить на корректность; |
| 81 | +#. работать с квестом в коде игры (игра реализует код, который выполняется при проходе по графу). |
64 | 82 |
|
65 | 83 | **Следует помнить, что генерация задания может быть неудачной (вызывается исключение questgen.exceptions.RollBackError). Это не значит, что всё плохо, это значит, что необходимо повторить генерацию, т.к. был сформирован неудачный граф задания.** Из этого следует, что для лучшей и более быстрой генерации заданий лучше иметь мир побольше, чтобы не было много коллизий.
|
66 | 84 |
|
| 85 | +****** |
| 86 | +Пример |
| 87 | +****** |
67 | 88 |
|
68 |
| -## Пример использования |
69 |
| - |
70 |
| -см. ./helpers/example.py |
| 89 | +см. ``./helpers/example.py`` |
71 | 90 |
|
72 |
| -## Визуализация |
| 91 | +************ |
| 92 | +Визуализация |
| 93 | +************ |
73 | 94 |
|
74 |
| -Визуализатор: ./helpers/visualizer.py создаёт изображения шаблонов заданий в ./questgen/svgs/ |
| 95 | +Визуализатор: ``./helpers/visualizer.py`` создаёт изображения шаблонов заданий в ``./questgen/svgs/`` |
75 | 96 |
|
76 |
| -Использует graphviz через библиотеку pygraph |
| 97 | +Использует ``graphviz`` через библиотеку ``pygraph`` |
77 | 98 |
|
78 |
| -__Если создаются неверные (поехавшие) изображения, поставьте новую версию graphviz__ |
| 99 | +*Если создаются неверные (поехавшие) изображения, поставьте новую версию graphviz* |
0 commit comments