<string id="test_dialog_0"> - это то, на что ссылается скелет диалога.
<text>Это тэстовый диалог</text> - собственно текст.
!!!ВНИМАНИЕ!!!
Все диалоги начинаются со слов Меченого.
3. Теперь нужно прописать этот диалог НПС. Например Бармену.
Открываем файл "character_desc_bar.xml" и находим секцию Бармена. Она идёт самой первой.
После всех
<actor_dialog>???</actor_dialog>
Прописываем свой:
<actor_dialog>test_dialog</actor_dialog>
">>>>Диалоги Часть2<<<<"
Сложность:Средне
Как создать диалог посложнее.
Как создать диалог с разными вариантами ответов.
Как создать диалог который исчезнет после прочтения.
1. Открываем, например файл dialogs_escape.xml (gamedata/config/gameplay) и пишем в конец:
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 рублей, ПМ и по заданным координатам заспавнится ПМ.
------------------------------------------------------------
Код
<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 любое название.
------------------------------------------------------------
Это значит что фраза <text>test_dialog_2</text> появится если у ГГ есть 200рублей
Это значит что фраза <text>test_dialog_3</text> появится если у ГГ есть ПМ.
">>>>Как прописать свои файлы текстов в игру<<<<"
Сложность:Легко
Допустим вы захотели написать много диалогов, и не хочется их писать в оригинальные файлы.
Делаем так:
1. Открываем localization.ltx и прописываем в самый конец:
Код
ваш_файл_текстов
2. Создаём ваш_файл_текстов в папке "gamedata/config/text/rus/" и пишем в них диалоги/описания/любые тексты по анологии с другими файлами в папке "rus"
Функции диалогов:
=======================================================================
ВЫДАЁМ ПРЕДМЕТ АКТОРУ
=======================================================================
function название функции (first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "название предмета", "in")
end
Размещается в файлах скрипт.
Выдача поршня вставляется под строку действия.
название скрипта.название функции
Примечание, что бы выдать два одинаковых предмета пишем
function название функции (first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "название предмета", "in",2)
end
Если надо больше меняем цифру 2 на нужную нам.
=========================================================================
ОТБИРАЕМ ПРЕДМЕТ У АКТОРА.
=========================================================================
function название функции(first_speaker, second_speaker)
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета")
end
размещается в файлах скрипт
выдача поршня вставляется под строку действия
название скрипта.название функции
Примечание, что бы отобрать два одинаковых предмета пишем
function название функции(first_speaker, second_speaker)
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета",2)
end
Если надо больше меняем цифру 2 на нужную нам.
=======================================================================
СПАВНИМ ВЕЩЬ В РЮКЗАК гг
=======================================================================
function название функции()
local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end
В диалог
название скрипта.название функции
===========================================================================
ПРОВЕРКА НАЛИЧИЯ У АКТОРА ПРЕДМЕТА
===========================================================================
Вариант первый
function Название функции()
if db.actor:object("название предмета") then
return true
end
return false
end
в диалог
имя скрипта.название функции
<---------как вариант(пользуются ПЫС)------------------>
function название функции(first_speaker, second_speaker)
return first_speaker:object("название предмета") ~= nil
end
в диалог
имя скрипта.название функции
===========================================================================
ПРОВЕРКА ВЕЩЕЙ У ГГ
===========================================================================
function Название функции(first_speaker, second_speaker)
return first_speaker:object("название предмета") ~= nil or
first_speaker:object("название предмета") ~= nil or
first_speaker:object("название предмета") ~= nil
end
в диалог
имя скрипта.название функции
описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора
============================================================================
ПРОВЕРКА ДЕНЕГ У ГГ
============================================================================
Вариант первый(используют ПЫС)
function название функции(first_speaker, second_speaker)
return first_speaker:money() >= 2000
end
в диалог
имя скрипта.название функции
<-----------Вариант два-------------->
Использовал на ТЧ, но и в ЗП работает
function название функции()
return db.actor:money()>=10000
end
в диалог
имя скрипта.название функции
=========================================================================
СПАВН ПРЕДМЕТА
=========================================================================
function spawn_vintar()
alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)
end
В диалог
название скрипта.название функции
==========================================================================
МГНОВЕННАЯ СМЕРТЬ ГГ
==========================================================================
function название функции(npc, actor)
npc:kill(actor)
end
В диалог
название скрипта.название функции
===========================================================================
ПРОВЕРКА КОЛ_ВА ОДИНАКОВЫХ ПРЕДМЕТОВ
===========================================================================
function название функции(first_speaker, second_speaker)
local item_sections = {"Предмет"}
local needed = количество одинаковых предметов, ставится цифра без знаков
local count = 0
local item_section
local function calc(temp, item)
if item:section() == item_section then
count = count + 1
end
end
for k,v in pairs(item_sections) do
item_section = v
get_story_object("actor"):iterate_inventory(calc, actor)
end
return count >= needed
end
в диалог
имя скрипта.название функции
==========================================================================
ЛЕЧЕНИЕ ГГ
==========================================================================
Вставим этот актион в диалог
dialogs.medic_magic_potion
==========================================================================
ВЫДАЧА ДЕНЕГ от НПС ГГ
==========================================================================
function название функции(first_speaker, second_speaker)
dialogs.relocate_money_to_actor(first_speaker, second_speaker, 2000)
end
В диалог
название скрипта.название функции
==========================================================================
Инфопоршни
==========================================================================
ПОРШЕНЬ НА ОДНОРАЗОВОЕ ПРОЧТЕНИЕ ДИАЛОГА.
==========================================================================
прописываем в файле info_какойто.xml
в конце ветки диалога запишем
Название поршня
в начале диалога под id квеста запишем
название поршня
===========================================================================
ПОРШЕНЬ НА СКРЫТИЕ ДИАЛОГА ДО ПРОЧТЕНИЯ ОПРЕДЕЛЁНОГО ДИАЛОГА.
===========================================================================
прописываем в файле info_какойто.xml
В конце диалога после которого должна появиться новая ветка
название поршня
в начале новой ветки под id прописываем
название поршня
теперь новый диалог недоступен пока мы не прочтём первый
==========================================================================================
ПОРШЕНЬ НА ЗАПРЕТ ДИАЛОГА ЕСЛИ В ПРЕДИДУЩЕМ МЫ ПОСТАВИЛИ УСЛОВИЕ ПО КОТОРОМУ ЕГО НЕ БУДЕТ
==========================================================================================
прописываем в файле info_какойто.xml
В конце определяющего диалога ставим
название поршня
под id квеста(диалога) который не должен появиться прописываем
название поршня
Теперь диалог не появится.
ммихаилл А сам квест где? Как можно тебе помочь если не видеш того что ты так наделал?
Решений твоей проблемы может быть много. Это и условие выдачи квеста выполняется и квест повторяется, и отсутствие в нужном месте инфопоршня, и проверка на нахождение чего либо в инвентаре и многое другое.
karavan Я уже нашел и устранил проблему. А щя вот:
Почему как только начинаю выполнять второе задание, у того же НПС, то игра вылетает:
FATAL ERROR
[error]Expression : !phrase_dialog->m_PhraseVector.empty()
[error]Function : CPhraseDialog::SayPhrase
[error]File : D:\prog_repository\sources\trunk\xrGame\PhraseDialog.cpp
[error]Line : 146
[error]Description : No available phrase to say, dialog[g36_quest_prines]
Сам диалог:
<dialog id="g36_quest_dialog">
<dont_has_info>quest_g36_done</dont_has_info>
<dont_has_info>quest_g36_give</dont_has_info>
<phrase_list>
<phrase id="1">
<text>Ты прав мне как раз нужен человек. Заказчику нужно оружие "ГП37" он готов заплатить 15000 тысяч, 5000 мне, 10000 тебе.</text>
<give_info>quest_g36_give</give_info>
<action>dialogs_zaton.give_g36_quest</action>
</phrase>
<phrase id="0">
<text>Мне сказали, что ты можешь дать мне работу, я на любую согласен.</text>
<next>1</next>
</phrase>
</phrase_list>
</dialog>
ммихаилл
Почему не в ту тему? Тема ведь называется вопросы и ответы по модификациям на Зов Припяти. Или ты на счет того что я спросил на счет Потерянный мир Месть зоны, то я да, ошибся сам только щас понял.
Мы будем драться, чтобы жить
За тех, кто первым был убит
И пусть враг - призрак без лица
Мы будем Драться до конца...
AHKOP C:\Games\S.T.A.L.K.E.R. Clear Sky\UEgamedata\sounds\weapons: groza_bore.ogg
groza_draw.ogg
groza_reload.ogg
groza_switch.ogg n_groza_shot.ogg Какой то из них^ pkm_shot.ogg C:\Games\S.T.A.L.K.E.R. - Shadow Of Chernobyl\gamedata\sounds\weapons Сюда все переносишь и название не надо менять там одинаково^
ребят подскажите в сталкер sigerous найти имменной винторнз на цементном заводе икак вступить или отнисти кейс монолитовца на затоне знаю что в припяти
Цитата#Омск : DotsiK, тут ведь обсуждаются изменения в файлах игры? Я забыл уже что надо в каком файле изменить чтобы всегда бежать.
Сделай так:
jump_power = 0.00003 ;умешьшение силы с прыжком без учета веса ноши
jump_weight_power = 0.000005 ;0.0000045 ;умешьшение силы с прыжком с учетом веса ноши, для максимального допустимого веса
overweight_jump_k = 6 ;12 ;12 ;10 ;коэффициент влияние перегрузки прыжок с весом (умножается на jump_weight_power)
stand_power = -0.001.1
walk_power = 0.00004 ;умешьшение силы за секнду во время ходьбы без учета веса ноши
walk_weight_power = 0.00001 ;0.0002; ;умешьшение силы за секнду во время ходьбы с учетом веса ноши, для максимального допустимого веса
overweight_walk_k = 6 ;10 ;12 ;коэффициент влияние перегрузки ноши (умножается на walk_weight_power)
accel_k = 3 ;5 ;коэффициент на бег (умножается walk_power, walk_weight_power)
sprint_k = 1 ;75 ;коэффициент на "sprint" бег (умножается walk_power, walk_weight_power)
У меня так стоит и я бегаю бесконечно.
добавлено спустя 54 секунд
Эээ... вот этом файле: S.T.A.L.K.E.R. - Зов Припяти\gamedata\configs\creatures\actor.ltx
Сообщение было успешно отредактировано ммихаилл (08-11-2011 13:51 GMT3 часа, назад)
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.