Здравствуйте, Гость

Автор Тема: Редактор генераторов  (Прочитано 2042 раз)

Оффлайн Jack

  • Частый гость
  • **
  • Сообщений: 154
  • Джек из Хаоса
    • Просмотр профиля
Редактор генераторов
« : Октября 20, 2014, 16:41 »
Представляю вам АЛЬФА версию.
Задача оказалась сложнее, чем я рассчитывал, и на ее реализацию ушли все выходные, и часть сегодняшнего дня. Наверное я бы и не стал пока браться, если бы знал сколько это займет времени, но я не знал. Да и идея эта крепко засела у меня в голове. В общем в каком-то виде я его все же сделал. В ближайшие дни планирую перегнать в него все свои прошлые генераторы из прошлых реализаций, подправлю баги. И тогда, наверное, переведу в статус БЕТЫ :)
http://paradoxdream.com/ngen
Принципы работы загрузки и сохранения во многом похожи на мой лист персонажа, поэтому пересказывать не буду. А перейду непосредственно к функционалу самого редактора. Во первых, для авторизированных пользователей доступна возможность «опубликовать», что позволит видеть ваш генератор среди прочих,в панеле слева.
Что бы создать генератор, нажимаем на ссылку «Создать свой генератор», или перейдя по ссылке http://paradoxdream.com/ngen/new
Все генераторы состоят из элементов 5 типов(я не уверен что хорошо подобрал терминологию, так что если у вас появятся предложение по ее изменении, пишите):
1)      Генератор – последовательность элементов собственно и образающая типичный генератор. Может содержать в себе элементы любых типов.
2)      Словарь – коллекция строк, из которых случайным образом выбирается одна.
3)      Строка – просто строка. Например можно использовать для пробела.
4)      Объединение – во многом похоже на словарь, с той разницей, что может содержать в себе элементы любых типов, и выбирает случайно один из них. Тут следует сказать кое-что о «вероятностях». Все вложенные элементы воспринимаются как единая сущность, кроме словарей. Пример:
Например есть два словаря:
А) меч, кинжал
Б) шлем, щит, кольчуга, нагрудник
К примеру мы вставили эти два словаря в объединение. Вероятность появления элементов двух этих словарей будут равновероятными. Т.е. вероятность появления оружия будет 1 к 3, а вовсе не 1 к 2. Это сделано специально(на то были причины, и они станут очевидны после будущих расширений функционала), но если вдруг вам надо сделать иначе, всегда можно вставить в объединение два генератора, и в каждый из них встроить по одному словарю.
5)      Ссылка – элемент, который может ссылаться на любой другой элемент. Позволяет повторно использовать одни и те же элементы.
 
А теперь попробую написать простейший туториал по создания простого генератора.
Для создания нового генератора переходим по ссылке http://paradoxdream.com/ngen/new
Заполняем его имя, например пишем в графе название «Пример 1».
Нажимаем кнопку Генератор, что бы создать элемент «генератор».
Нажимаем карандашик, что бы его отредактировать. В открывшемся окне меняем имя на «оружие» и ставим галочку Публичный. Нажимаем кнопку «сохранить изменения».
Теперь создадим дочерний элемент «словарь». Для этого в заголове генератора нажмем «плюс» и выберем «словарь».
Теперь в нажмем на синий карандаш в заголовке словаря, и в поле текст введем текст:
Золотой
Серебряный
Железный
Нажимаем кнопку «сохранить изменения».
Теперь снова нажмем +, что бы создать в генераторе еще один элемент – строка. Войдем в редактирование строки и напишем там единственный символ – пробел.
Снова нажмем +, и создадим в генераторе еще один словарь. Войдем в редактирование словаря и в поле словарь напишем:
меч
кинжал
топор
Нажимаем кнопку «сохранить изменения».
 
Вот наш первый генератор готов. В голубой области нашего нового генератора видно пример генеренной строки. Теперь нажмем кнопку «сохранить», что бы сохранить генератор в целом. И можно нажать кнопу «просмотр», что бы полноценно им попользоваться.
 
Ну и давайте напоследок немного модифицируем наш генератор, что-бы увидеть другие возможности редактора.
1)      Нажмем на кнопку Объединение, что бы создать элемент этого типа на верхнем уровне.(автоматически он назовется «элемент_4»)
2)      Нажмем плюс на панели нашего прошлого генератора и выберем пункт «создать ссылку». Назжем клавишу мышки над зоголовком нашей ссылке и перетащим его в белую область нашего Объединения.
3)      Создадим внутри нашего объединения генератор. Снова создадим ссылку нашего первого генератора, и перетащим в новый генетратор(элемент_6).
4)      Теперь создадим в новом генераторе(элемент 6), строку и изменит текст на пробел.
5)      Теперь создадим в новом генераторе(элемент 6), еще один словарь и введем текст:
Крови
Забвения
Ярости
Смерти
6)      Теперь войдем в редактор нашего объединения, и введем название, вместо элемент_4 - Оружие 2. И включим галочку публичный. Сохраняем генератор в целом и нажимаем кнопку «просмотр».
 
 

Оффлайн Jack

  • Частый гость
  • **
  • Сообщений: 154
  • Джек из Хаоса
    • Просмотр профиля
Re: Редактор генераторов
« Ответ #1 : Октября 25, 2014, 02:37 »

Наверное, я вам уже надоел со своими генераторами? Если да, скажите. А если нет, читайте дальше... Сегодня я попробую сделать еще один небольшой туториал.


Ну во-первых, кроме того что я исправил ряд багов, и сделал несколкьо изменений, о которых писал в комментариях в предыдущем посту, я реализовал пару ваших пожеланий. А именно:
Возможность клонировать генератор, и главное – это позволяет поделиться ссылочкой. Чем я сегодня и займусь. (Следует отметить, что в том механизме сейчас есть один маленький не критичный баг. После сохранение клонированного генератора и попытке его отредактировать генератор виснет. Я пока не придумал как это исправить, но кнопка “обновить страницу» решает проблему. Данные при этом никакие не теряются.)
Во вторых, добавил синтаксис, позволяющий вставить в текст другой элемент. Делается это так: @(число), где число – это ID элемента, который можно увидеть в его заголовке после знака #.


А теперь приступим. Сегодня я не буду писать генераторы «от фанаря», а буду демонстрировать реализацию описанных в книгах генераторах. Возьму для начала книгу «Идеальный мастер». А теперь перейду по ссылку http://paradoxdream.com/ngen/new что бы создать новый генератор.
В начале я введу название для своего генератора(а точнее группы генераторов из книги). Пусть он называется «Идеальный мастер».
И сделаю самый простой из возможных. Нажму кнопку «Словарь», что бы создать словарь. Затем на карандашь, что бы начать его редактировать. Впишу название «ОПИСАНИЕ ЗАПАХОВ», и сразу установлю галочку Публичный(эта галочка нужна даже, если вы не планируете публиковать сам генератор, а только пользоваться самому). И в поле Словарь, вставлю текст из книги:
Аммиачный
Ароматный
Благоухающий
Бодрящий
...
Нажму кнопку «сохранить изменения». Затем сохраним наш генератор, кнопкой save  можем немного его потестировать, нажав кнопку «просмотр».
Ссылка для просмотра: http://paradoxdream.com/ngen/pomahufut
Ссылка для создание клона(можно посмотреть исходник): http://paradoxdream.com/ngen/clone/pomahufut
Словарь – это простейший элемент генератора, представляет собой список строк, которые случайным образом, равновероятно выбираются во время генерации.




Отлично, мы сделали наш самый первый генератор. Теперь сделаем что-то посложнее.
Например «ЗАПОМИНАЮЩИЕСЯ ПОСТОЯЛЫЕ ДВОРЫ». Я нажму кнопку «генератор», что бы создать генератор. Войду в его настройки, введу имя «ЗАПОМИНАЮЩИЕСЯ ПОСТОЯЛЫЕ ДВОРЫ», и поставлю галочку Публичный, а потом кнопку Сохранить изменения. Теперь я нажму кнопку +, в заголовке нового генератора, и в выпадающем списке выберу Словарь. Войду в редактирование словая и вставлю в поле словаря список из книги:
Бегущий
Бережливый
Благоразумный
...
Больше ничего трогать тут не буду, а просто сохраню изменения. Снова нажму на + в заголовке нашего генератора и выберу «Добавить пробел». А следом вставлю второй словарь.
Акула
Архон
Бард
Бог


Вот и готов наш генератор названий для таверну. Сохраню и нажму «просмотреть»
Просмотр: http://paradoxdream.com/ngen/nozojoyij
Исходник: http://paradoxdream.com/ngen/clone/nozojoyij
Итак, генератор – это элемент, который представляет из себя коллекцию других элементов, при работе которого, все его элементы генерятся и складываютя в единую строку. Т.е. в результате мы увидим результат каждого отдельного входящего в него эленемта. В нашем случае, например  Бережливый Бард. Есть тут все еще проблемы со склонениями, но я пока не успеваю внедрить этот механизм. Думаю он появится на следующей неделе.


А теперь, давайте проведем маленький эксперемент, с тем что есть. Создадим еще один генератора, и назовем его, например, «Постоялый двор 2».
Теперь нажмем на + в генераторе ЗАПОМИНАЮЩИЕСЯ ПОСТОЯЛЫЕ ДВОРЫ, и выберем пункт «Создать ссылку». На том же уровне появится новый элемент:
“Ссылка #2 (ЗАПОМИНАЮЩИЕСЯ ПОСТОЯЛЫЕ ДВОРЫ)”. Я схвачу этот пункт мышкой и перетащу в белую область нашего нового генератора «Постоялый двор». Далее я создам внутри него текстовый элемент « от которого исходил ». Затем я точно так же нажму + на словаре Описание запахов, и создам ссылку на него. Так же перетащу появившеюся ссылку внутрь Постоялый двор 2. И добавлю в конце еще один текст « аромат.» Сохраняем и смотрим:
Просмотр: http://paradoxdream.com/ngen/gowuhoyul
Исходники: http://paradoxdream.com/ngen/clone/gowuhoyul
Итак, ссылка – это елемент который ссылается на любой другой элемент и ведет как оригинал. Она много лучше клона(который мы могли так же применить в данном примере), потому, что если мы сейчас добавим новые запахи, они появится сразу везде. А в случае с клоном, как не сложно догадаться – нет.


Теперь я продемонстрирую работу нового «синтаксиса». Я удалю все элементы из Постоялый двор 2, кроме одной строки, и изменю ее следующим образом: «От трактира @(2) исходил @(1) запах.».
Просмотр: http://paradoxdream.com/ngen/zeluvejaz
Исходник: http://paradoxdream.com/ngen/clone/zeluvejaz
Вообще я бы не злоупотреблял этим механизмом, как по мне, в результате немного теряется визуальная структура алгоритма. Но дело, как говорится – хозяйское :)


Итак, у нас остался один блок, для которого мы не написали примера, под названием Оъединение(я все ще не уверен, что это название для него подходит и что оно очевидно, так что если у вас есть предложение как его переименовать - пишите).


Отложим книгу «Идеальный мастер» и возьмем бесплатный шаблон для Фиаско отсюда http://studio101.ru/archive/studio101/fiasco/playsets/ «ошибка системы». Создадим новый генератор с помощью кнопки Новый, или перейдя по ссылке http://paradoxdream.com/ngen/new. Теперь нам придется потрудится чуточку больше. Создадим генератор предметов из книги. Для этого создадим в начале генератор. Добавим внутрь строку «Имплант: ». А затем словарь:
Аюрведический суперчип
Потайные монолезвия
Зрительные импланты с дополнительным модулем
Банк данных, встроенный в личную память
Проектор правдоподобных голограмм
Улучшенная печень и поджелудочная


Повторим операцию для остальных типов предметов. При желании, можно воспользоваться клонированием элементов и редактированием.
Итак, у нас получилось 6 не слишком полезных по отдельности генераторов. Галочки публичный я нигде не ставил, так что и смотреть особо нечего. Что нам теперь с этим делать? А теперь мы нажмем кнопку «объединение», что бы создать элемент этого типа. И перетащим все наши генераторы внутрь этого элемента. Теперь войдем в его редактирование, назовем Предметы и включим галочку Публичный.
Просмотр: http://paradoxdream.com/ngen/bodufoduv
Исходник: http://paradoxdream.com/ngen/clone/bodufoduv
Итак, объединение – это своего рода Словарь. В результате выбирается один из его вложенных элементов. Только в отличии от словаря, он может содержать в себе самые разнообразные элементы, а не только строки.


На этом, на сегодня все. Основные темы мы рассмотрели, ссылки на все примеры я дал.


ВАЖНО!
Если в процессе перетаскивания элементов «генератор» подвис, не надо пугаться. Нажмите на всякий случай кнопку «Сохранить», что бы никакие изменения не пропали, а затем обнавите страницу и можете продолжать. Баг этот я буду фиксить, но пока точно не знаю, когда у меня будет на это время. Опять же, я пока не знаю, в чем именно он заключается. Приношу извинения за возможные временные неудобства.

Оффлайн Jack

  • Частый гость
  • **
  • Сообщений: 154
  • Джек из Хаоса
    • Просмотр профиля
Re: Редактор генераторов
« Ответ #2 : Октября 25, 2014, 04:01 »
Внес в генератор одно маленькое, но по моему, очень полезное изменение. Теперь при добавлении нового элемента(за исключением ссылок, пробела, клонирования), для вновь созданного элемента автоматически открывается редактор! Для, так сказать, уменьшения количества телодвижений.

Оффлайн Jack

  • Частый гость
  • **
  • Сообщений: 154
  • Джек из Хаоса
    • Просмотр профиля
Re: Редактор генераторов
« Ответ #3 : Октября 25, 2014, 18:48 »
И еще одно обновление, довольно важное для меня, потому что оно закрывает основные мои потребности от генератора и я теперь могу перенести все свои генераторы из прошлых систем. И самое сложное, наверное.
Для таких элементов, как генератор, объединение и словарь в редакторе появилось несколько дополнительных свойств, а именно:
1) Род/Число, думаю тут особо нечего пояснять.
2) Галочка «Не показывать», занести значение в переменную и не показывать. Имя переменной в которую будет занесено значение — это имя данного элемента, где включена эта галочка. Для того что бы вывести значение переменной можно пользоваться тем же синтаксисом, что и вставка элементов в строку. Только вместо ID элемента, надо вводить имя переменной. Например так: @(tavern_name)
3) Функция. На данный момент их всего две, «нижний регистр» и «склонение прилагательных». Если выбрать «нижний регистр», то после генерации все что относилось к данному блоку будет написано в нижнем регистре, даже если там раньше встречались заглавные буквы. Мелочь, но полезная. А вот про склонение я сейчас расскажу подробнее.

Тема может показаться довольно сложной, ну я надеюсь освоитесь. Пример будет прилагаться. Будем разбирать наш пример с генерацией имени таверны. Итак, у нас был следующий алгоритм генерации:
[Бегущий, Бережливый] [Бард, Акула, Болото]
Т.е. прилагательное+существительное. Но теперь нам придется его изменить. Нам в начале надо будет сгенерить существительное, узнать его род, потом сгенерить и просклонять прилагательное. Вот тут нам и понадобятся галочка «Не показывать», так как выводить существительное все равно надо в конце. А теперь попробуем это реализовать. В генераторе «ЗАПОМИНАЮЩИЕСЯ ПОСТОЯЛЫЕ ДВОРЫ» добавим элемент «объединение», назовем его например «tavern_name» и включим галочку «не показывать». Теперь перетащим внутрь словарь Элемент_5 и 2 раза склонируем. Теперь зайдем в каждый из них по очереди, и:
В первом поставим Род/Число в мужской, назовем для понятности мужской, сам словарь, и удалим из него все слова не относящиеся к мужскому роду. Затем второй установим в женский, и так же оставим только слова в женском роде. А потом третий пометим как средний, ну и удалим лишние слова. Наше объединение tavern_name перетащим в верх генератора. Теперь если мы вдруг посмотрим, что получилось, то увидим, что существительное исчезло из генератора. Это нормально. Теперь войдем в наш словарь прилагательных(элемент_3), и включим там функцию Склонение прилагательных. Обратите внимание, что сами прилагательные должны иметь именительный падеж. Итак, мы почти закончили, теперь войдем в редактор строки, там где раньше был просто пробел и измените ее на следующее: " @{tavern_name}". Это позволяет нам вывести существительное, которые мы сгенерили ранее. Сохраняем, смотрим. Если вы все сделали правильно, то все будет пучком! ;)
Рабочий вариант можно посмотреть тут: http://paradoxdream.com/ngen/rafej
Исходный код: http://paradoxdream.com/ngen/clone/zeluvejaz
Здесь я так же воспользовался функцией «нижний регистр», для запахов, в генератора «Постоялый двор 2». Но описывать не буду, сами разберетесь, если захотите ;)

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

Оффлайн Pavelius

  • Частый гость
  • **
  • Сообщений: 237
    • Просмотр профиля
Re: Редактор генераторов
« Ответ #4 : Октября 27, 2014, 10:01 »
Кстати, можно попробывать придумать алгоритм определяющий род по буквам. Надо конечно почитать правила грамматики, но по-моему в большинстве случаев то что закачнивается на "а" єто женский род. Исключения можно учесть.

Оффлайн Jack

  • Частый гость
  • **
  • Сообщений: 154
  • Джек из Хаоса
    • Просмотр профиля
Re: Редактор генераторов
« Ответ #5 : Октября 27, 2014, 10:51 »
Кстати, можно попробывать придумать алгоритм определяющий род по буквам. Надо конечно почитать правила грамматики, но по-моему в большинстве случаев то что закачнивается на "а" єто женский род. Исключения можно учесть.
Читать - не читал, а придумать я как то пробовал, у меня не получилось... :(
Вот придумать функцию склонения прилагательных получилось, хотя я тоже ничего не читал) Правда это было чертовски давно, когда я задавался этим вопросом... Может лет 5 назад. И правда, надо будет подумать. Было бы намного удобнее, пожалуй...