• Страница 1 из 1
  • 1
Как сделать простой диалог.
Дата: Вторник (11.09.2012) | Время: 14:47 | Сообщение № 1
Майор



Сообщений: 319
Награды: 9
Репутация:
Статус:

Итак, начнем.

1. Открываем файл dialogs_escape.xml (gamedata/config/gameplay) и пишем в самом низу

Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
</phrase>
</phrase_list>
</dialog>


Это скелет диалога. В нём будут написаны все инфопоршни и actions.

- это название диалога, которое нужно будет написать НПС.

- номер фразы.

test_dialog_0 - это текст фразы.

? - переход к фразе.

2. Теперь нужно написать тексты диалога. Заходим в файл "stable_dialogs_bar.xml" (gamedata/config/text/rus) и пишем в конце:

Код
<string id="test_dialog_0">
<text>Это тэстовый диалог</text>
</string>
<string id="test_dialog_1">
<text>Угу.</text>
</string>


- это то, на что ссылается скелет диалога.

Это тэстовый диалог - собственно текст.

ВНИМАНИЕ! Все диалоги начинаются со слов Меченого.

3. Теперь нужно прописать этот диалог НПС. Например Бармену.
Открываем файл "character_desc_bar.xml" и находим секцию Бармена. Она идёт самой первой.
После всех
???
Прописываем свой:
test_dialog

Как сделать средний диалог;
Как создать диалог посложнее.
Как создать диалог с разными вариантами ответов.
Как создать диалог исчезающий после прочтения.

1. Открываем файл dialogs_escape.xml (gamedata/config/gameplay) и пишем в конец:

Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
</phrase_list>
</dialog>


2 и 3 это возможные ответы Меченого.

2. Теперь нужно написать тексты диалога. Заходим в файл "stable_dialogs_bar.xml" (gamedata/config/text/rus) и пишем в конце:

Код
<string id="test_dialog_0">
<text>Как дела?</text>
</string>
<string id="test_dialog_1">
<text>Нормально, а у тебя?</text>
</string>
<string id="test_dialog_2">
<text>Нормально</text>
</string>
<string id="test_dialog_3">
<text>Хреново.</text>
</string>


3.Чтобы этот диалог не появлялся, пишем инфопоршень. Например в файле info_l01escape.xml

Код
<info_portion id="test_pogovoril"></info_portion>


4.Дописываем инфопоршень в скелет диалога:

Код
<dialog id="test_dialog">
<dont_has_info>test_pogovoril</dont_has_info>
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<give_info>test_pogovoril</give_info>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<give_info>test_pogovoril</give_info>
</phrase>
</phrase_list>
</dialog>


test_pogovoril - если ГГ получил инфопоршень, диалог не показывать.

test_pogovoril - дать ГГ инфопоршень.

Получается, что когда ГГ скажет любую из 2 фраз, диалог больше не появится.

Делаем сложный диалог:

-Как сделать разные action в диалогах.

1.Создаём обычный диалог:

Код
<dialog id="test_dialog">
<dont_has_info>test_pogovoril</dont_has_info>
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
<next>4</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
<phrase id="4">
<text>test_dialog_4</text>
</phrase>
</phrase_list>
</dialog>

C такими текстами:

Код
<string id="test_dialog_0">
<text>Я тестю функции.</text>
</string>
<string id="test_dialog_1">
<text>Ок, какую?</text>
</string>
<string id="test_dialog_2">
<text>Дать деньги</text>
</string>
<string id="test_dialog_3">
<text>Дать ПМ</text>
</string>
<string id="test_dialog_4">
<text>Заспавнить ПМ</text>
</string>


2.Создаём свой скрипт в папке gamedata/script например test.script и пишем в него 3 функции:

Код
function dat_dengi(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 3000, "in")
end


Это функция отдачи денег ГГ. На месте 3000 любое число. На месте dat_dengi любое название.

Код
function dat_item(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "wpn_pm", "in")
end


Это функция отдачи предмета ГГ. На месте wpn_pm любой предмет.
На месте dat_item любое название.

Код
function spawn_item_or_monster_or_stalker()
alife():create("wpn_pm",vector():set(pos),lvid,gvid)
end


Это функция спавна чего либо. На месте wpn_pm любой предмет,монстр или сталкер.
На месте (pos),lvid,gvid) любые координаты.
На месте spawn_item_or_monster_or_stalker любое название.

Так же функция может быть одна, но с несколькими действиями.
Например:

Код
function all(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 3000, "in")
dialogs.relocate_item_section(second_speaker, "wpn_pm", "in")
alife():create("wpn_pm",vector():set(pos),lvid,gvid)
end


Значит что одновременно ГГ дадут 3000 рублей, ПМ и по заданным координатам заспавнится ПМ.

3.Впишем функции в диалог:

Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
<next>4</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<action>test.dat_dengi</action>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<action>test.dat_item</action>
</phrase>
<phrase id="4">
<text>test_dialog_4</text>
<action>test.spawn_item_or_monster_or_stalker</action>
</phrase>
</phrase_list>
</dialog>


Это значит что после после фразы
test_dialog_2
ГГ дадут 3000руб.

Это значит что после после фразы
test_dialog_3
ГГ дадут ПМ.

Это значит что после после фразы
test_dialog_3
Заспавнится ПМ.

Создание диалога для мастера:

-Как сделать разные precondition в диалогах.
Прекондишоны - это проверки на появление диалога

1.Создаём обычный диалог:

Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
</phrase_list>
</dialog>


C такими текстами:

Код
<string id="test_dialog_0">
<text>Тест прекондишонов.</text>
</string>
<string id="test_dialog_1">
<text>Какой?</text>
</string>
<string id="test_dialog_2">
<text>Эта фраза появляется если у ГГ есть ??? рублей.</text>
</string>
<string id="test_dialog_3">
<text>Эта фраза появляется если у ГГ есть ??? предмет.</text>
</string>


2.Создаём свой скрипт в папке gamedata/script например test.script и пишем в него 3

функции-прекондишона:

Код
function has_money_???()
local money = math.floor(200 *

xr_statistic_freeplay.get_freeplay_statistic():get_found_pda_discount())
return db.actor:money()>=money
end


Это функция проверки количества денег ГГ. На месте 200 любое число.
На месте has_money_??? любое название.

Код
function has_item(task, objective)
if db.actor ~= nil then
return db.actor:object("wpn_pm") ~= nil
end
return false
end


Это функция проверки наличия какого либо предмета у ГГ. На месте wpn_pm любой предмет.
На месте has_item любое название.

3.Впишем функции в диалог:

Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<precondition>test.has_money???</precondition>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<precondition>test.has_item</precondition>
</phrase>
</phrase_list>
</dialog>


Это значит что фраза test_dialog_2 появится если у ГГ есть 200рублей
Это значит что фраза test_dialog_3 появится если у ГГ есть ПМ.


Сообщение отредактировал Nik-1 - Вторник, 11.09.2012, 14:43
| Страна: RU
Дата: Вторник (11.09.2012) | Время: 19:42 | Сообщение № 2



Сообщений: 1064
Награды: 36
Репутация:
Статус:

Молодцом! Держи репу!
| Страна: KZ
Дата: Среда (12.09.2012) | Время: 05:58 | Сообщение № 3
Майор



Сообщений: 319
Награды: 9
Репутация:
Статус:

PHOENiX,Спс,всегда рад
| Страна: RU
Дата: Четверг (22.11.2012) | Время: 17:17 | Сообщение № 4
Вершитель Судеб



Сообщений: 1371
Награды: 19
Репутация:
Статус:

Quote (Ник)
Все диалоги начинаются со слов Меченого.

Да, конечно... Про <start_dialog> знаешь, не?)


Хастер Асдолг.
Haste (от англ. "haste (хэйст)" - ускорение), As (сокр. от англ. "assasin (ассасин)" - убийца), Dolg (группировка долг).
[img][/img]
| Страна: RU
Дата: Вторник (12.02.2013) | Время: 20:27 | Сообщение № 5
Рядовой



Сообщений: 2
Награды: 0
Репутация:
Статус:

я так понимаю это не простоя кропотливая работа на выдержку пальцев и нервов ,молодец даже очень!у меня терпения не хватит писать все это жаль sad

privet
| Страна: GE
Дата: Вторник (12.02.2013) | Время: 21:12 | Сообщение № 6
Вершитель Судеб



Сообщений: 1371
Награды: 19
Репутация:
Статус:

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

Хастер Асдолг.
Haste (от англ. "haste (хэйст)" - ускорение), As (сокр. от англ. "assasin (ассасин)" - убийца), Dolg (группировка долг).
[img][/img]
| Страна: RU
Дата: Среда (13.02.2013) | Время: 08:18 | Сообщение № 7
Генерал-полковник



Сообщений: 1240
Награды: 22
Репутация:
Статус:


Группировка в ФРПГ:


kupnu4, Ассасин прав это не так уж сложно.


Персонаж - Ведьмак
Группировка - Одиночки
| Страна: RU
  • Страница 1 из 1
  • 1
Поиск: