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

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


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

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

 

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

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

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

  • Спасибо 1
Ссылка на комментарий

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

 

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

Изменено пользователем Карлан
Ссылка на комментарий

 

 

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

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

 

 

 

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

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

Изменено пользователем Карлан
Ссылка на комментарий

 

 

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

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

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

 

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

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

Ссылка на комментарий

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

 

 

команда 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.

 

 

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@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
Ссылка на комментарий

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

 

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

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

Ссылка на комментарий

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

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

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

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

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


 

 

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

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

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

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

 

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

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

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


 

 

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

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

%=func(param1:param2:param3:...)%
Ссылка на комментарий

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

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

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

 

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

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

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

ТЧ 1.0004. SAP и Trans mod

github

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

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

 

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

Изменено пользователем Shadows
  • Согласен 3
Ссылка на комментарий
Гость
Эта тема закрыта для публикации сообщений.
  • Недавно просматривали   0 пользователей

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