Pls help в ковырянии FPS 1.2.1(ТЧ)

Релизы, ссылки и обсуждения

Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение Ghazhsh » 14 сен 2012, 11:20

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

Начал пока за армию, вроде разобрался, как добавлять новые квесты, добавил атмосферности в диалогах (а-ля "Чистилище" - ты пойми, здесь у меня солдат нет, есть военнослужащие, закусь тварям зоны от украинских военкоматов :) )
Подумал, что одного квестодателя армейцам маловато - тем более, что есть командир базы на агропроме.
В файлах гулага и описания обнаружил, что на агропроме целых три команидра - капитан-командир базы, два лейтенанта-командира солдат. В игре отображается только один из лейтенантов. Прикрутил ему торговлю, выдачу квестов пока не осилил. насколько я понял - надо сначала присвоить лейтенанту story_id, а потом уже диалоги с квестами к нему приписывать.
Обидно получается с заданием на вынос лагеря новичков - все убиты, а не засчитывает. Как я понял - проблема в том, что к лагерю приписывается какой-то нпс с другой локации.
Еще обратил внимание, что в начале игры группа солдат с кордона движется в сторону тоннеля с аномалиями, расстреливая монстров, иногда наваливаясь и на новичков из них 1-2 в тоннеле гибнут, потом, насколько я понимаю, они уходят по новому переходу на агропром.

возникшие вопросы:
Критично ли присвоение story_id из свободных номеров в списке (9999), или если нпс привязан к локации, story_id должен начинаться с номера локации?
Есть ли путь исправления завершения задания на вынос лагеря?
Где наити инфопоршен, которым запускается выход солдат с блокпоста, и конечную точку их движения.
Как сделать, что зачищеные по квесту лагеря потом занимались нпс из союзной группировки? - логично для зачищенных от бандитов АТП и прохода под мостом потом занять их солдатами
Ghazhsh
 
Сообщения: 13
Зарегистрирован: 14 сен 2012, 10:41

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение kstn » 16 сен 2012, 08:51

Критично ли присвоение story_id из свободных номеров в списке (9999), или если нпс привязан к локации, story_id должен начинаться с номера локации?

Вроде нет, но я спавнил нпс с sid > 7000, прописывал ему активный смарт в любой локации и он его спокойно занимал. Только есть нюансы: смарт может не принимать вашего нпс, если он имеет неподходящие для смарта параметры, например ранг для generel_lager (smart_terrain_presets.ltx) ну и остальные - более очевидные.
Как сделать, что зачищеные по квесту лагеря потом занимались нпс из союзной группировки? - логично для зачищенных от бандитов АТП и прохода под мостом потом занять их солдатами

Если речь о generel_lager, то это делается созданием отдельных смартов с разными communities. Смарты должны включаться и отключаться от условий прописанных в поле cond.
Для эксклюзивных гулагов потребуется ввести дополнительное состояние гулага - state ( в function load_states(gname, type) ), со всеми вытекающими. Подробности в любом gulag_локация.script + gulag_локация.ltx, главное быть внимательным иначе можно легко слепить горбатого. :)
kstn
 
Сообщения: 135
Зарегистрирован: 17 июл 2009, 13:10

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение Ghazhsh » 18 сен 2012, 22:07

kstn писал(а):Если речь о generel_lager, то это делается созданием отдельных смартов с разными communities. Смарты должны включаться и отключаться от условий прописанных в поле cond.
Для эксклюзивных гулагов потребуется ввести дополнительное состояние гулага - state ( в function load_states(gname, type) ), со всеми вытекающими. Подробности в любом gulag_локация.script + gulag_локация.ltx, главное быть внимательным иначе можно легко слепить горбатого. :)

all_spawn для этого ковырять надо? Если да, значит мне пока туда лезть рановато
Ghazhsh
 
Сообщения: 13
Зарегистрирован: 14 сен 2012, 10:41

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение kstn » 19 сен 2012, 17:28

Ghazhsh писал(а):all_spawn для этого ковырять надо? Если да, значит мне пока туда лезть рановато

Если требуется править универсальные гулаги с типом general_lager или general_lair, то Да. Если править специализированный гулаг, то может и не понадобиться (в данном случае), т.к. работа таких гулагов довольно гибко задаётся через скрипты.
kstn
 
Сообщения: 135
Зарегистрирован: 17 июл 2009, 13:10

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение Ghazhsh » 01 апр 2014, 21:52

Просьба не смеяться и пинать за ап старой темы. :roll:
Два года прошло, а уровень знаний в моддинге сильно не увеличился :(

Прошу сообщество проверить последовательность действий, указать ошибки. SoC 1.0004+FPS 1.21
Задача - сделать командира базы на агропроме agr_soldier_commander2 квестодателем. Персонаж присутствовал по умолчанию, я его не вводил, только торговлю прикрутил и переименовал, убедившись что именно он виден в игре.

1. Ввел в профиль персонажа в character_desc_agroprom.xml диалоги на выдачу и сдачу квеста.
[Показать] Спойлер:
<specific_character id="agr_soldier_commander2" team_default = "1">
<name>Подполковник Шемет</name>
<icon>ui_npc_u_soldier_beret_3</icon>
<map_icon x="2" y="0"></map_icon>
<bio>sim_soldier_commander_bio</bio>
<class>agr_Soldier_commander</class>
<community>military</community> <terrain_sect>stalker_military_terrain</terrain_sect>
<money min="100000" max="500000" infinitive="1"></money>
<rank>799</rank>
<reputation>-19</reputation>
<visual>actors\soldier\soldier_beret_3</visual>
<snd_config>characters_voice\human_02\military\</snd_config>
<crouch_type>0</crouch_type>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj \n
wpn_ak74 \n
ammo_5.45x39_fmj \n
device_torch \n
#include "gameplay\character_drugs.xml"
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_5.xml"
#include "gameplay\character_dialogs.xml"
<actor_dialog>agr_soldier_commander2_dialog</actor_dialog>
<actor_dialog>agr_soldier_commander2_reward</actor_dialog>

</specific_character>


2. Прописал вышеозначенные диалоги в dialogs.xml
[Показать] Спойлер:
<dialog id="agr_soldier_commander2_dialog" priority="-1">
<init_func>task_manager.init_agr_soldier_commander2_task_dialog</init_func>
<precondition>dialogs.is_opp_not_wounded</precondition>
</dialog>
<dialog id="agr_soldier_commander2_reward" priority="0">
<init_func>task_manager.init_agr_soldier_commander2_reward_dialog</init_func>
<precondition>task_manager.has_active_vendor_task</precondition>
<precondition>dialogs.is_opp_not_wounded</precondition>
</dialog>


3. В task_manager.ltx прописал идентификатор, цели и награды.
[Показать] Спойлер:
;-----agr_commander------
agr_soldier_commander2_eliminate_lager_1

.......
[agr_soldier_commander2_eliminate_lager_1]
type = eliminate_lager
text = esc_commander_eliminate_lager_2_text
description = esc_commander_eliminate_lager_2_descr
parent = agr_soldier_commander2
target = agr_u_bandits
reward_reputation = +30
reward_rank = 5
supply_item = ammo_5.45x39_fmj, ammo_5.45x39_fmj, ammo_5.45x39_fmj, conserva, conserva, medkit_army, medkit_army
reward_item = ammo_5.45x39_ap, ammo_5.45x39_ap
reward_relation = dolg, +5
time = 259200
prior = 1

text = и description = использую от существующего квеста esc_commander_eliminate_lager_2

4. Ввел названия и описания для квеста, завязку диалога о задании в stable_task_manager.xml
[Показать] Спойлер:
<string id="esc_commander_eliminate_lager_2_descr">
<text>Уничтожить нарушителей в подземных строениях НИИ "Агропром".</text>
</string>
<string id="esc_commander_eliminate_lager_2_text">
<text>Под одной из наших баз, в подземных ходах, вечно собирается на стоянку разные отморозки. Так как это один из подходов к нашему расположению, то никого там быть и не должно. Перебей всех в подземных строениях НИИ "Агропром".</text>
</string>
........
<string id="tm_agr_soldier_commander2_has_no_job">
<text>Срочного ничего нет. Можешь связаться с командиром южного блокпоста, или если охота живых денег - сгонять на базу "Долга".</text>
</string>
<string id="tm_agr_soldier_commander2_job_ask">
<text>По поводу какого задания ты хочешь поговорить?</text>
</string>
<string id="tm_agr_soldier_commander2_job_complete">
<text>Это за выполнение задачи</text>
</string>
<string id="tm_agr_soldier_commander2_job_what">
<text>Что по заданию?</text>
</string>
<string id="tm_agr_soldier_commander2_list_job">
<text>Оперативная обстановка диктует следующие задачи:</text>
</string>
<string id="agr_soldier_commander2_eliminate_lager_1">
<text>Уничтожить нарушителей под НИИ "Агропром".</text>
</string>


5. В storyline_info_taskmanager.xml изменений не вносил, т.к. используем уже прописаные esc_commander_eliminate_lager_2_descr и esc_commander_eliminate_lager_2_text

6. В task_manager.script ввел
[Показать] Спойлер:
local parent_by_story = {
........
[9888] = "agr_soldier_commander2"
}
local story_by_parent = {
........
agr_soldier_commander2 = 9888
}
.......
function init_agr_soldier_commander2_task_dialog(dlg)
get_random_task():init_task_dialog(dlg, "agr_soldier_commander2")
end
.........
function init_agr_soldier_commander2_reward_dialog(dlg)
get_random_task():init_reward_dialog(dlg, "agr_soldier_commander2")
end

Придуманный story_id также вписал в game_story_ids.ltx в самый конец

7. Ввел в game_tasks_by_vendor.xml
[Показать] Спойлер:
<game_task id="eliminate_lager_agr_soldier_commander2">
<title>title</title>
<objective>
<text>objective</text>
<icon>ui_iconsTotal_eliminate_lager</icon>
<function_complete>task_manager.task_complete</function_complete>
<function_fail>task_manager.task_fail</function_fail>
</objective>
</game_task>

Вроде все сделал по учебникам. Пробую.
Ghazhsh
 
Сообщения: 13
Зарегистрирован: 14 сен 2012, 10:41

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение Ghazhsh » 01 апр 2014, 22:05

Что из вышеперечисленного смущает - если обрабатываемый НПС уже есть в игре, не получится ли так, что story id ему присваивается автоматически, а я еще и вручную добавляю.

Запустил, получил вылет
[Показать] Спойлер:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ....t.a.l.k.e.r. - freeplay\gamedata\scripts\_g.script:1263: attempt to index global 'task_manager' (a nil value)

Закоментил указанную в логе строчку
[Показать] Спойлер:
function start_game_callback()
printf ("start_game_callback called")
--' task_manager.clear_task_manager()
treasure_manager.clear_treasure_manager()
xr_sound.clear_all_sound_object()
dialog_manager.fill_phrase_table()
end

Опять вылет
[Показать] Спойлер:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ....e.r. - freeplay\gamedata\scripts\se_stalker.script:242: attempt to index global 'task_manager' (a nil value)

Выделена указанная в логе строчка ,закоментил на всякий случай все
[Показать] Спойлер:
--' Регистрация в таскменеджере
--' task_manager.get_random_task():register_target(self)

--' if self:alive() and self:smart_terrain_id() == 65535 then
--' self:brain():update()
--' end


Опять вылет
[Показать] Спойлер:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...l.k.e.r. - freeplay\gamedata\scripts\se_item.script:49: attempt to index global 'task_manager' (a nil value)

Комментим
[Показать] Спойлер:
-- Регистрация в таскменеджере
--' task_manager.get_random_task():register_target(self)


И снова
[Показать] Спойлер:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...l.k.e.r. - freeplay\gamedata\scripts\se_item.script:70: attempt to index global 'task_manager' (a nil value)

Комментим
[Показать] Спойлер:
-- Регистрация в таскменеджере
--' task_manager.get_random_task():register_target(self)


И опять
[Показать] Спойлер:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...r. - freeplay\gamedata\scripts\smart_terrain.script:1016: attempt to index global 'task_manager' (a nil value)

Честно говоря коментарии вставлять уже немного надоело... Предсталяю как надоело вам эту мою грусную историю читать.
такое впечатление, что ругается при вылете на все скрипты со случайным выбором квестов. Причину сам установить не могу, так что помогите пожалуйста :unsure:
Ghazhsh
 
Сообщения: 13
Зарегистрирован: 14 сен 2012, 10:41

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение XiaNi » 02 апр 2014, 13:39

ошибка гдето в файле task_manager.script

возможно гдето около:
Код: Выделить всё
local parent_by_story = {
........
[9888] = "agr_soldier_commander2"
}
local story_by_parent = {
........
agr_soldier_commander2 = 9888
}
Um... has anyone seen a floating sarcastic skull around here?
Аватара пользователя
XiaNi
shaman
 
Сообщения: 1710
Зарегистрирован: 01 сен 2008, 18:37

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение Ghazhsh » 02 апр 2014, 21:39

откатил назад изменения в task_manager.script. Другие не трогал.
Игра загружается, но при попытке поговорить с персонажем идет вылет либо без лога, либо ругается на строку 1001 в task_manager.script (строка выделена)
[Показать] Спойлер:
--' Создается диалог актера, в котором будут выдаваться задания.
function CRandomTask:init_task_dialog(dlg, parent)
local phr = dlg:AddPhrase("tm_seek_new_job","0","",-10000)
local phrase_script = phr:GetPhraseScript()

phr = dlg:AddPhrase("tm_"..parent.."_list_job","1","0",-10000)
phrase_script = phr:GetPhraseScript()
phrase_script:AddAction("task_manager.action_task_show")
phrase_script:AddPrecondition("task_manager.precondition_vendor_can_task")

phr = dlg:AddPhrase("tm_"..parent.."_has_no_job","2","0",-10000)
phrase_script = phr:GetPhraseScript()
phrase_script:AddPrecondition("task_manager.precondition_vendor_cannot_task")

for k,v in pairs(self.task_id_by_parent[parent]) do
phr = dlg:AddPhrase(self.task_info[v].name, tostring(self.task_info[v].init_phrase_id), "1", -10000)
phrase_script = phr:GetPhraseScript()
phrase_script:AddPrecondition("task_manager.precondition_task_avail")

phr = dlg:AddPhrase(self.task_info[v].text, tostring(self.task_info[v].desc_phrase_id), tostring(self.task_info[v].init_phrase_id), -10000)

phr = dlg:AddPhrase("tm_seek_job_yes", tostring(self.task_info[v].yes_phrase_id), tostring(self.task_info[v].desc_phrase_id), -10000)
phrase_script = phr:GetPhraseScript()
phrase_script:AddAction("task_manager.action_give_task")

phr = dlg:AddPhrase("tm_seek_job_no", tostring(self.task_info[v].no_phrase_id), tostring(self.task_info[v].desc_phrase_id), -10000)
end

dlg:AddPhrase("tm_seek_job_abandon","3","1",-10000)
end


Если убрать диалоги из профиля персонажа - игра идет, персонаж контактен. Т.о. в синтаксисе dialogs.xml, task_manager.ltx, stable_task_manager.xml, game_story_ids.ltx, game_tasks_by_vendor.xml - проблем быть не должно.

Еще вот на что обратил внимание: в файле npc_profile.xml прописано
[Показать] Спойлер:
<character id="agr_soldier_commander">
<class>agr_Soldier_commander</class>

А в character_desc_agroprom.xml есть персонажи:
[Показать] Спойлер:
<specific_character id="agr_soldier_commander1" team_default = "1">
<name>Подполковник Блашкун</name>
<icon>ui_npc_u_soldier_beret</icon>
<map_icon x="2" y="0"></map_icon>
<bio>sim_soldier_commander_bio</bio>
<class>agr_Soldier_commander</class>
.......
<specific_character id="agr_soldier_commander2" team_default = "1">
<name>Подполковник Шемет</name>
<icon>ui_npc_u_soldier_beret_3</icon>
<map_icon x="2" y="0"></map_icon>
<bio>sim_soldier_commander_bio</bio>
<class>agr_Soldier_commander</class>

при этом отображается только второй
не может быть это как-то связано с возникшими проблемами?
Ghazhsh
 
Сообщения: 13
Зарегистрирован: 14 сен 2012, 10:41

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение Ghazhsh » 02 апр 2014, 23:03

Раз уж типовой квест прикрепить вышеуказанному персонажу не получается - нужна помощь для создания диалога на выдачу квеста и собственно скриптового квеста, т.к. сам ранее подобным не занимался.
набросал диалог, вопросы в самом диалоге выделил
[Показать] Спойлер:
<dialog id="agr_commander_clear_und">
<phrase_list>
<phrase id="0">
<text>agr_commander_clear_und_0</text> <!---Задания есть?---->
<next>1</next>
</phrase>
<phrase id="1">
<text>agr_commander_clear_und_1</text> <!---Для опытного бойца задачи всегда есть. В подземных коммуникациях под комплексом замечены мутанты и неучтеные лица. Надо оказать помощь моему отделению, которое занимается зачисткой--->
<next>11</next>
<next>12</next>
</phrase>
<phrase id="11">
<text>agr_commander_clear_und_11</text> <!---Есть оказать помощь. Выдвигаюсь--->
<has_info>eliminate_lager_agr_u_bandits_quest_have</has_info>
<! – что нужно прописывать, чтобы выдался квест, с указателем и т.п.?>
<next>111</next>
</phrase>
<phrase id="12">
<text>agr_commander_clear_und_12</text> <!---Не, это вы без меня----->
<action>dialogs.break_dialog</action> <!---Будет ли это работать как окончание диалога=отказ от квеста----->
</phrase>
<phrase id="111">
<text>agr_commander_clear_und_111</text> <!--- Возьми боекомплект (4 пачки 5,45х39, 1 РГД-5, 1 Ф1, 1 армейская аптечка) ---->
<! – что прописывать для выдачи ГГ вышеуказанных предметов>? нужно ли еще раз вставлять <action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>
Ghazhsh
 
Сообщения: 13
Зарегистрирован: 14 сен 2012, 10:41

Re: Pls help в ковырянии FPS 1.2.1(ТЧ)

Сообщение XiaNi » 03 апр 2014, 09:26

насколько я помню задачи в диалогах выдаются через выдачу инфопоршня в котором есть задача
например задача на флешку, возможно это моя модифицированная для ФС версия задачи но суть та же
[Показать] Спойлер: info_l01escape.xml
<info_portion id="esc_fleshka_task_start">
<task>esc_flash_task</task>
</info_portion>


а в диалоге нужно делать проверку наоборот
[Показать] Спойлер:
<phrase id="11">
<text>agr_commander_clear_und_11</text> <!---Есть оказать помощь. Выдвигаюсь--->
<dont_has_info>eliminate_lager_agr_u_bandits_quest_have</dont_has_info>
<!–- эта ветка диалога с выдачей доступна если нет информации о выдаче -->
<next>111</next>
</phrase>


вообще, я не уверен где конкретно нужно ставить эту проверку, так давно с диалогами не возился
тут просто нужно логику диалога продумать, например если ты уже взял задачу то отвечать чтото в духе "пока эту выполняй" а если взял и закончил то "заданий нет" или не показывать вообще ничего

насчет <action>dialogs.break_dialog</action>
это стоит использовать в случае когда действительно нужно прервать общение, прерывание диалога после того как взял квест мне не очень нравится если есть еще о чем поговорить с НПЦ, например взять другой квест или купить чтото еще нужно
пример когда необходимо такое - берем задание помочь отбивать АТП и Волк должен сообщить по рации своим, для этого нужно прервать разговор и отыграть информацию
а если мы просто взяли один из нескольких квестов и НПЦ ничего такого делать не должен(к примеру Сидоровичь, сидит себе и всё) то и выкидывать из диалога не стоит - мало ли о чем еще с ним поговорить можно
Um... has anyone seen a floating sarcastic skull around here?
Аватара пользователя
XiaNi
shaman
 
Сообщения: 1710
Зарегистрирован: 01 сен 2008, 18:37

След.

Вернуться в Моды (Mods)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

cron