Перейти к контенту
Zander_driver

Модуль для упрощенного создания диалогов.

Рекомендуемые сообщения

NL-Vincenz    12

 

 

x0 = текст_первой_фразы

Извините за нубский вопрос, текст можно писать прям в этом же файле? Без всяких xml:russian_ru:

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Карлан    924

@Zander_driver, за труды по любому плюс. Мне понравилось. Только с магией блоков ты переборщил, конфиги тупиковая ветвь, можно было бы повысить функциональность блоков сделав конфигурирование на скриптовых таблицах. Это мое мнение.

 

@NL-Vincenz, в хмл надо только будет айдишник записать, ну и подключить штатным способом, все остальное делаешь в ltx, ну и еще функцию в скрипте делаешь, но можно обертку сделать вокруг конфига, и не парится.

  • Спасибо 1
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
RayTwitty    441

Не буду писать про то, насколько наглядно или нет выглядит данная система по сравнению xml-ветками - это субъективное мнение, но вот новые команды распространенных действий добавить бы не помешало - has/give/lost_item и т.п.

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Карлан    924

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

 

И все же диалогэдитор перекрывает все здешние удобства на мой взгляд.

Изменено пользователем Карлан

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zander_driver    2 712

 

 

можно было бы повысить функциональность блоков сделав конфигурирование на скриптовых таблицах

Вообще-то, я инструкции-то не дописал еще. Возможность скриптовой генерации тех же диалоговых блоков очень даже имеется, это было в том куске, который я написал, а форум съел и не отдал. В ближайшие часы допишу, как этим пользоваться. Надеюсь мне кураторство дадут наконец :)

 

 

 

новые команды распространенных действий добавить бы не помешало - has/give/lost_item и т.п.

Дельная мысль.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Карлан    924

@Zander_driver, ты наверное меня не понял, я говорю о создании настроек в скриптах, чтобы в течении игры можно было на ходу редактировать текущий диалог (это и сейчас можно, но непонятно где, я за удобство тут выступаю), и потом менять настройки хотя бы с помощью моего костыля который я тут когда-то выкладывал, правда никто не понял зачем я это сделал :(. А пастебин его уже удалил (у кого может остался покажите)  :(.

Изменено пользователем Карлан

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zander_driver    2 712

 

 

на ходу редактировать текущий диалог

Ну для этого достаточно разубедить движок от мысли хранить однажды сгенеренный граф диалога аки сокровище какое-то. Если генератор вызывается при каждом обращении к диалогу, то какие вообще проблемы создать его каждый раз так как надо?)

Похоже это ты в свою очередь не понял что я имел в виду, говоря о скриптовой генерации.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Карлан    924

@Zander_driver, я там не движком делал а написал скриптовый костыль, который неплохо справлялся с управлением диалогами. (тебе кстати не скидывал? а то за антисоветчину меня раскулачили)

 

Если генератор вызывается при каждом обращении к диалогу, то какие вообще проблемы создать его каждый раз так как надо?)

Я не понял что ты тут говоришь. К чему генерировать ингейм если их нельзя будет заюзать?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zander_driver    2 712

Перезалил файл, закомментировал там пару лишних вызовов которые сначала незаметил, и добавил вот это:

 

 

команда item - заспавнить в инвентарь актора итем указанной секции и количества. количество пишется через точку, если не указано то считается равным единице.

пример:
item5 = bandage.10, medkit.5 ; заспавнит 10 бинтов и 5 аптечек
пример2:
item5 = antirad, wpn_pm.2 ; заспавнит 1 антирад и два ПМа.

команда remove - удалить из инвентаря актора итемы указанных секций и количества. Если у актора меньше итемов, удаляются те что есть. Т.е. проверка необходимого количества здесь не выполняется. Если такая проверка нужна, используйте команду has_item.

пример:
remove5 = wpn_pm ; удалит ПМ
пример2:
remove5 = bandage.2, medkit.3, antirad.4, vodka.5 ; удалит 2 бинта, 3 аптечки, 4 антирада и 5 бутылок водки. если чего-то не хватает, это не помешает.

команда has_item - вставляет проверку наличия в инвентаре актора, указанных предметов в указанном количестве.

фраза не будет пропущена, если хоть какого-то из указанных итемов не хватает.

пример:
has_item5 = wpn_abakan ; фраза будет доступна если у актора есть абакан
пример2:
has_item5 = af_medusa.10, bandage.4 ; фраза будет доступна если у актора есть 10 медуз и 4 бинта.

команда donthas_item - вставляет проверку, что в инвентаре актора указанных предметов меньше заданного количества.

пример:
donthas_item5 = wpn_pm, wpn_abakan, wpn_mp5, medkit ; фраза будет доступна только если у актора нет ничего из перечисленного оружия и нет аптечек.
пример2:
donthas_item5 = bandage.25, medkit ; фраза будет доступна если у актора нет ни одной аптечки, и количество бинтов в его инвентаре менее 25.

 

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
RayTwitty    441

@Zander_driver, надо бы стандартизировать названия команд - при разнобое могут быть ошибки во время написания: give_item\lost_item\has_item\donthas_item, give_info\lost_info\has_info\donthas_info, give_money\lost_money\has_money\donthas_money и т.п.

Еще можно ввести команды transfer_item и transfer_money для передачи между ГГ и НПС.

Например



from10 = actor
to10 = sidor
transfer_item10 = vodka.5, antibodun.10

команда a - добавит вызов функции в указанной фразе (аналогично тегу <action>)
команда p - добавит прекондишен (проверку условия) в указанной фразе (аналогично тегу <precondition>)

Имхо, но тоже нужно заменить на полные аналоги (action и precondition), дабы визуально не сливалось с другими командами. Исключительно для удобства.

Изменено пользователем Shadows
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Карлан    924

Тут подумал, можно такой же модуль сколотить и для тасков, в тасках если не ошибаюсь надо только таск зарегать в хмл, остальное можно сделать в скрипте, поправьте если не прав.

 

@Zander_driver, еще предложение ввести сразу ключи change_rank, change_reputation, change_goodwill.

, from to тогда думается лучше npc поставить, так как какая разница сидор там или кто другой, все равно второй агент всегда один.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
RayTwitty    441

from to тогда думается лучше npc поставить, так как какая разница сидор там или кто другой, все равно второй агент всегда один.

Тут я подразумевал, что команду можно использовать не только как передачу железно между актором и собеседником, но и например между другими НПС. Конечно, такие случаи редки, но мало ли...

Если упрощать, то можно ввести одну команду "to" принимающую два значения - ГГ или собеседник.

to10 = actor|second_talker -- кому?
transfer_item10 = vodka.5, antibodun.10
Изменено пользователем Shadows

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Карлан    924

, ну вот я о втором агенте и говорил, об однобокой передаче я не слова не сказал кажися :blink: .


 

 

но и например между другими НПС

Не вот теперь я действительно не въехал, это как это можно завести диалог между двумя нпсами чтобы там трансфер сделать? Или мы типо стоим рядом с двумя, с одним базарим, и этот наш одний передает итем другому? Ты как-то круто завернул честно слово.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
RayTwitty    441
Не вот теперь я действительно не въехал, это как это можно завести диалог между двумя нпсами чтобы там трансфер сделать? Или мы типо стоим рядом с двумя, с одним базарим, и этот наш одний передает итем другому? Ты как-то круто завернул честно слово.

Это не диалог, а функция передачи предметов\денег, которая _не привязана_ конкретно к собеседникам. Чтобы не писать каждый раз в скрипте, можно создать универсальный сценарий прямо в коде диалоге, точно же как например со спавном предметов (туда бы тоже не помешало добавить команду-параметр "куда\в кого спавним").

 

Спавн объекта на позиции:

pos_x10 = 453
pos_y10 = 0
pos_z10 = 789
gvid10 = 52
lvid10 = 1015
create10 = vodka.6
Изменено пользователем Shadows

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Карлан    924

, по моему это перебор. Уж касаемо этого модуля точно - бритва Оккама. Например у меня никогда не возникала потребность явного трансфера между нпс. 


 

 

Спавн объекта на позиции:

Тормози, тут я предлагаю ввести уже тогда всем понятный способ как в логике:

%=func(param1:param2:param3:...)%

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
RayTwitty    441

 

 

тут я предлагаю ввести уже тогда всем понятный способ как в логике:

Вот в тег action его и надо вводить.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Desertir    208

Решился прочесть описание, увидел, что так же используются числовые идентификаторы, что команды именуются одной-двумя буквами... дальше не стал читать, а то еще желание переписать появится.

Очевидно, скрипт писался под себя в надежде, что и остальные примут. Я уверен, на все найдутся свои пользователи, так что это не пост в стиле "фу, какая какашка".

ИМХО может быть это и полезно, но бОльшего удобства я не увидел.

 

Я бы сделал 2 типа секций: первый будет описывать сам диалог (условия и еще что-то там) + будет указана только стартовая фраза, второй это собственно сама фраза, которая может ссылаться на другие фразы и т.п. Естественно без всяких х100500, а нормальные, адекватные названия на английском (ну тут кому как, можно и moy_krutoy_dialog назвать).

Разделение на доп секции позволит избежать всяких числовых постфиксов, ну и конечно генератор должен генерить их сам. Я в кишки не влезал, не в курсе как в скриптах связываются фразы, но хардкодные числа это ад.

Изменено пользователем Desertir
  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
RayTwitty    441
без всяких х100500, а нормальные, адекватные названия на английском

Для каждой фразы будешь придумывать названия на английском? :D

 

В конечном итоге у тебя всё равно получится - [имя_диалога]_[номер_фразы], а оно ничем практически не отличается от просто [номер_фразы], только увеличивает количество видимой информации и тем самым затрудняет чтение\написание конфига (человеком).

Изменено пользователем Shadows
  • Согласен 3

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

×