Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Создание и редактирование квестов
denis2000Дата: Пн, 10.10.2011, 21:25 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Создание и редактирование квестов

Создание новых квестов и редактирование существующих

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


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]

[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...)
                       local reason = string.format(fmt, ...)
                       error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Code
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Code
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


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


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
9vova8Дата: Пн, 07.01.2013, 19:19 | Сообщение # 91
Новичок
Пользователи
Сообщений: 91
Награды: 2
Репутация: [ 6 ]

При таком условии получается такая ошибка
[cut noguest=ошибка]stack trace:

001B:0387105B lua.JIT.1.1.4.dll[/cut]

[cut=условие] <precondition>actor_has_item("jup_b217_quest_item")</precondition>[/cut]

В диалогах невозможно использование аргументов функций. Создавайте новую функцию в скриптах и используйте ее. XOBAH


 
prohodchikДата: Вс, 17.02.2013, 15:50 | Сообщение # 92
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

Цитата (denis2000)
zat_b101_logic.ltx

у меня нет такого файла в чистой gamedata


Проект в разработке – "Болотные легенды"
 
АазДата: Вс, 17.02.2013, 17:40 | Сообщение # 93
Хозяин Зоны
Зомби
Награды: 30
Репутация: [ 0 ]

Я делаю квест на чистый Зов Припяти 1.6.02, тип квеста: "убить сталкера", при этом возникло несколько казусов:
- при убийстве сталкера не выдается инфопоршень, квест висит.
- проблемы с описанием задания
- не получается сделать метки в задании на НПСа, которого требуется убить и после убийства метка должна переходить на квестодателя (в моём случае убиваемый НПС и НПС-квестодатель спавнятся скриптами).
Ниже привожу все изменения в файлах.
[cut noguest=Файл zat_stalkers.ltx (инклуд прописан в spawn_sections.ltx)][zat_demiurg]:stalker_trader
$spawn = "respawn\zat_demiurg"
character_profile = zat_demiurg
spec_rank = master
community = stalker
custom_data = scripts\zaton\zat_demiurg.ltx

[zat_renegat]:stalker
$spawn = "respawn\zat_renegat"
character_profile = zat_renegat
spec_rank = veteran
community = stalker
story_id = zat_renegat
custom_data = scripts\zaton\zat_renegat.ltx[/cut]

[cut noguest=character_desc_zaton_new.xml (зарегистрирован в system.ltx)]<?xml version='1.0' encoding="windows-1251"?>

<xml>

<specific_character id="zat_demiurg" team_default="1">
<name>zat_demiurg</name>
<icon>ui_inGame2_neutral_1</icon>
<map_icon x="1" y="0">
</map_icon>
<bio>Опытный сталкер. Детальная информация отсутствует.</bio>
<class>zat_demiurg</class>
<community>stalker</community>
<terrain_sect>stalker_terrain</terrain_sect>
<snd_config>characters_voice\human_01\stalker\</snd_config>
<rank>635</rank>
<reputation>10</reputation>
<money min="15000" max="18000" infinitive="0" />
<visual>actors\stalker_neutral\stalker_neutral_nauchniy</visual>

<supplies>
[spawn] \n
wpn_sig550 \n
ammo_5.56x45_ss190 = 1 \n

#include "gameplay\character_items_nd_nl.xml"
#include "gameplay\character_food.xml"
#include "gameplay\character_drugs.xml"
</supplies>

<actor_dialog>zat_renegat_kill</actor_dialog>
<actor_dialog>zat_renegat_kill_complete</actor_dialog>

<actor_dialog>actor_break_dialog</actor_dialog>

#include "gameplay\character_criticals_4.xml"
</specific_character>

<specific_character id="zat_renegat" team_default="1">
<name>zat_renegat</name>
<icon>ui_inGame2_bandit_2</icon>
<map_icon x="1" y="0">
</map_icon>
<bio>Опытный сталкер. Детальная информация отсутствует.</bio>

<class>zat_renegat</class>
<community>stalker</community>
<terrain_sect>stalker_terrain</terrain_sect>
<snd_config>characters_voice\human_02\bandit\</snd_config>

<rank>310</rank>
<reputation>-5</reputation>

<visual>actors\stalker_bandit\stalker_bandit_2</visual>
<supplies>

[spawn] \n
wpn_ak74 \n
ammo_5.45x39_fmj = 1 \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
grenade_rgd5 = 2 \n

#include "gameplay\character_items_nd.xml"
#include "gameplay\character_drugs.xml"
#include "gameplay\character_drugs_mil.xml"
</supplies>
#include "gameplay\character_criticals_4.xml"
</specific_character>

</xml>[/cut]

[cut noguest=dialogs_zaton_new.xml (зарегистрирован в system.ltx)]<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>
<dialog id="zat_renegat_kill">
<dont_has_info>zat_renegat_kill_done</dont_has_info>
<dont_has_info>zat_renegat_kill_give</dont_has_info>
<phrase_list>
<phrase id="0">
<text>Привет, работа есть?</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>Да, работа для тебя будет. Но прежде спрошу: ты знаешь что-нибудь о Ренегатах?</text>
<next>2</next>
<next>21</next>
</phrase>
<phrase id="2">
<text>Нет, впервые слышу, а что?</text>
<next>3</next>
</phrase>
<phrase id="21">
<text>Ну слышал кое-что от сталкеров. А в чем собственно проблема?</text>
<next>3</next>
</phrase>
<phrase id="3">
<text>Вообщем, я тебе вот что скажу - я Демиург, один из оставшихся в живых чистонебовцев. Ренегаты - наши заклятые враги. С ними мы, чистонебовцы, воевали в 2011 году. Однако после боя на ЧАЭС, когда почти весь клан погиб, я думал, что они успокоятся и не станут искать оставшихся в живых. Однако я ошибался.
Один из Ренегатов находится сейчас здесь, на Затоне. Не иначе, как по мою душу явился, гад смердячий, а ведь я подозревал, что за мной непременно будет слежка. Поэтому нашел прикид, в котором меня хрен кто раскусит. Ну а тебя я попрошу расправиться с идущим по моему следу противником. Оплату гарантирую. Как вернешься, побеседуем обстоятельнее. Берешься?</text>
<next>4</next>
</phrase>
<phrase id="4">
<text>Берусь.</text>
<give_info>zat_renegat_kill_give</give_info>
<action>dialogs_zaton.zat_renegat_kill_quest</action>
<action>renegat_spawn.spawn_zat_renegat</action>
</phrase>
</phrase_list>
</dialog>

<dialog id="zat_renegat_kill_complete">
<has_info>zat_renegat_kill_give</has_info>
<dont_has_info>zat_renegat_kill_done</dont_has_info>
<has_info>zat_renegat_mertv</has_info>
<phrase_list>
<phrase id="0">
<text>Ренегата я устранил, от греха подальше.</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>Вот спасибо, выручил ты меня. Я уж думал, что всё - кирдык тебе...</text>
<give_info>zat_renegat_kill_done</give_info>
</phrase>
</phrase_list>
</dialog>
</game_dialogs>[/cut]

Добавлено (17.02.2013, 17:28)
---------------------------------------------
[cut noguest=info_zaton.xml]<info_portion id="zat_renegat_kill_done"></info_portion>
<info_portion id="zat_renegat_kill_give"></info_portion>
<info_portion id="zat_renegat_mertv"></info_portion>[/cut]

[cut noguest=zat_profiles.xml (зарегистрирован в system.ltx)]<?xml version='1.0' encoding="windows-1251"?>

<xml>

<character id="zat_demiurg">
<class>zat_demiurg</class>
</character>

<character id="zat_renegat">
<class>zat_renegat</class>
</character>

</xml>[/cut]

[cut noguest=tm_zaton.ltx][zat_renegat_kill]
icon = ui_inGame2_Bezopasnoe_mesto
storyline = false
title = zat_renegat_kill_quest_name
descr = zat_renegat_kill_quest_text
target = zat_demiurg
condlist_0 = {+zat_renegat_kill_done} complete
on_complete = %=inc_faction_goodwill_to_actor(stalker:40)%
reward_money = 4500[/cut]

[cut noguest=st_quests_zaton.xml]<string id="zat_renegat_kill_quest_name">
<text>Ренегат: убрать сталкера из группировки Ренегаты.</text>
</string>
<string id="zat_renegat_kill_quest_text">
<text>Убить ренегата, который расположился где-то неподалеку от Скадовска, после чего доложить Демиургу о выполнении задания.</text>
</string>[/cut]

[cut noguest=demiurg_spawn.script]function spawn_demiurg()
if not has_alife_info("spawn_demiurg_complite") then
local p=vector(),lv,gv
p.x = 113.776520
p.y = -7.348208
p.z = 186.347198
lv = 1162412
gv = 316
alife():create("zat_demiurg",p,lv,gv)
give_info("spawn_demiurg_complite")
end
end[/cut]

[cut noguest=renegat_spawn.script]function spawn_zat_renegat()
if not has_alife_info("spawn_renegat_complite") then
local p=vector(),lv,gv
p.x = 173.417191
p.y = 11.494859
p.z = -264.904175
lv = 1262839
gv = 23
alife():create("zat_renegat",p,lv,gv)
give_info("spawn_renegat_complite")
end
end[/cut]

[cut noguest=dialogs_zaton.script]function zat_renegat_kill_quest()
task_manager.get_task_manager():give_task("zat_renegat_kill_give")
end[/cut]

Добавлено (17.02.2013, 17:40)
---------------------------------------------
[cut noguest=zat_demiurg.ltx][logic]
active = remark@trader

[remark@trader]
invulnerable = true
on_combat = combat
meet = meet_trader

[combat]
combat_type =

[meet_trader]
abuse = false
use = true
allow_break = false
meet_on_talking = true[/cut]

[cut noguest=zat_renegat.ltx][logic]
on_death = death
active = remark1
danger = danger_ignore

[danger_ignore]
ignore_distance = 5

[death]
on_info = %+zat_renegat_mertv%

[remark1]
no_move = true
anim = sit_ass
on_actor_dist_le = 2| remark@hello
meet = meet_guide

[meet_guide]
abuse = false
use = false
allow_break = false
meet_on_talking = false

[remark@hello]
no_move = true
meet = meet_guide
on_actor_dist_le = 10| remark1[/cut]


 
sergej5500Дата: Вс, 17.02.2013, 20:19 | Сообщение # 94
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Ааз,
Я бы подправил квест таким образом.

[cut=Квест]Файл tm_zaton.
target = zat_demiurg -- это квестовая метка. Она у Вас постоянно висит на квестодателе.
Надо писать так:
target = {+zat_renegat_mertv} zat_demiurg, zat_renegat
Метка повиснет на ренегате, после смерти перескочит на квестодателя.

Секцию
title = zat_renegat_kill_quest_name
descr = zat_renegat_kill_quest_text
лучше писать так:
title = {+zat_renegat_mertv} zat_renegat_kill_quest_name1, zat_renegat_kill_quest_name
descr = {+zat_renegat_mertv} zat_renegat_kill_quest_text1, zat_renegat_kill_quest_name


Текстовое содержание квеста:
<string id="zat_renegat_kill_quest_name">
<text>Ренегат: убрать сталкера из группировки Ренегаты.</text>
</string>
<string id="zat_renegat_kill_quest_text">
<text>Убить ренегата, который расположился где-то неподалеку от Скадовска.</text>
</string>
<string id="zat_renegat_kill_quest_name1">
<text>Ренегат: получить награду.</text>
</string>
<string id="zat_renegat_kill_quest_text1">
<text>Доложить Демиургу о выполнении задания.</text>
</string>
[/cut]


Сообщение отредактировал sergej5500 - Вс, 17.02.2013, 20:28
 
АазДата: Вс, 17.02.2013, 20:57 | Сообщение # 95
Хозяин Зоны
Зомби
Награды: 30
Репутация: [ 0 ]

sergej5500, внёс исправления, начал новую игру, отметил опять отсутствие описания, при убийстве НПС задание естественно опять не обновилось. Я уж не знаю, как и быть-то...

 
sergej5500Дата: Вс, 17.02.2013, 21:05 | Сообщение # 96
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Ааз,
Может, это не имеет значения, но у всех НПС, логику которых я просматривал, on_death = death пишется под ссылкой на активную секцию логики. Попробуй первый абзац в логике ренегата написать так:

[logic]
active = remark1
danger = danger_ignore
on_death = death
 
АазДата: Вс, 17.02.2013, 21:46 | Сообщение # 97
Хозяин Зоны
Зомби
Награды: 30
Репутация: [ 0 ]

sergej5500, и даже так не помогает...Квест-то делался на основе тутора от Johann, но неточностей там хватает...По идее нужен новый тутор...

Добавлено (17.02.2013, 21:46)
---------------------------------------------
Да и кстати, меток на персонажах так и не появилось. Ни на НПСе, которого требуется убить, ни на квестодателе после убийства НПС.


 
sergej5500Дата: Вс, 17.02.2013, 22:17 | Сообщение # 98
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Ааз,
Нашел у Вас одну ошибку. В скрипте вы запускаете квест zat_renegat_kill_give, а в tm_zaton квест называется zat_renegat_kill. Поэтому метки не появляются. Квест не активируется. Я поправил у себя эту ошибку и попробовал запустить квест. Всё получилось. Метки перескочили и диалоги отработали нормально.

Добавлено (17.02.2013, 22:17)
---------------------------------------------
Ааз,
В варианте
[cut=квест][zat_renegat_kill]
icon = ui_inGame2_Bezopasnoe_mesto
storyline = false
title = {+zat_renegat_mertv} zat_renegat_kill_quest_name1, zat_renegat_kill_quest_name
descr = {+zat_renegat_mertv} zat_renegat_kill_quest_text1, zat_renegat_kill_quest_name
target = {+zat_renegat_mertv} zat_demiurg, {-zat_renegat_mertv} zat_renegat
condlist_0 = {+zat_renegat_kill_done} complete
on_complete = %=inc_faction_goodwill_to_actor(stalker:40)%
reward_money = 4500
[/cut]
квест вполне рабочий. Нужно вызывать его так:
[cut=скрипт]function zat_renegat_kill_quest()
task_manager.get_task_manager():give_task("zat_renegat_kill")
end
[/cut]


Сообщение отредактировал sergej5500 - Вс, 17.02.2013, 22:19
 
АазДата: Вс, 17.02.2013, 22:31 | Сообщение # 99
Хозяин Зоны
Зомби
Награды: 30
Репутация: [ 0 ]

sergej5500, огромное спасибо за помощь. Квест я протестировал. В общем-то всё ок, только метка почему-то на квестодателя не переходит и при взятии задания оно сразу же обновляется. А потом обновляется еще раз, когда НПС погибает.

 
sergej5500Дата: Пн, 18.02.2013, 00:06 | Сообщение # 100
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Ааз,
Метку можно поставить только на объект, имеющий story_id.
Добавь в zat_stalkers.ltx в секцию [zat_demiurg]:stalker_trader
строку story_id = zat_demiurg.
 
sapfirДата: Чт, 04.04.2013, 15:54 | Сообщение # 101
Боец резерва
Долг
Сообщений: 635
Награды: 9
Репутация: [ 537 ]

Вот я установил атмосфер для sgm 2.2. И (как мне объяснили) при начале псишторма, у меня появляется задание "TITLE DOESNT EXIST". Если по русски, то "Названия не существует". Как я понял, это задание не закончили. Подскажете, где файл, который отвечает за описание задание, и что надо сделать в этом задании(тоже файл)?


КПК Сапфира
 
FantomICWДата: Чт, 04.04.2013, 16:06 | Сообщение # 102
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

sapfir1998, название и описание обычно прописывается в configs/text/rus/st_quests_.


 
sapfirДата: Чт, 04.04.2013, 16:42 | Сообщение # 103
Боец резерва
Долг
Сообщений: 635
Награды: 9
Репутация: [ 537 ]

FantomICW, странно, там все прописано...


КПК Сапфира
 
mizabrikДата: Чт, 04.04.2013, 18:03 | Сообщение # 104
Почетный инженер «Свободы»
Свобода
Сообщений: 360
Награды: 10
Репутация: [ 216 ]

sapfir1998, возможно неправильно написан идентификатор строки. Проверьте совпадает ли с идентификатором строки параметр title в секции [sgm_pri_zone_cleaning] файл gamedata/config/misc/tasks/tm_pripyat.ltx.

 
FantomICWДата: Чт, 04.04.2013, 20:55 | Сообщение # 105
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

Здравствуйте! Создавал квест на убийство нпс, столкнулся с вылетом. Не могу понять в чем проблема.
[cut=Лог]stack trace:

0023:060A105B lua.JIT.1.1.4.dll[/cut]

Затронуто несколько файлов (все новые прописал через #include куда надо)
[cut=jup_b46_spatial_bubble_zone]
Код
[logic]
active = sr_idle@jup_b46_sos_sound

[sr_idle@jup_b46_sos_sound]
on_info  = {+jup_b46_spatial_bubble_started -jup_b46_task_gived -jup_b46_spatial_bubble_ruptured} %+jup_b46_task_gived =give_task(jup_b46_spatial_bubble)%    
on_info2 = {=distance_to_obj_le(jup_b46_spatial_bubble_zone:50)} %=play_sound(jup_b46_spatial_bubble_sos)%
on_info3 = {+jup_b46_spatial_bubble_ruptured} sr_idle@jup_b46_rupture %=stop_sound%
on_info4 = {+pila_quest_init -spawn_jup_killer_ross_squad} %=create_squad(jup_killer_ross_squad:jup_b46) +spawn_jup_killer_ross_squad%

[sr_idle@jup_b46_rupture]    
on_game_timer = 46 | {-jup_b46_duty_founder_squad_spawned} %+jup_b46_duty_founder_squad_spawned =spawn_object(wpn_ak74:jup_b46_corps_spawn) =spawn_corpse(jup_b46_duty_founder:jup_b46_corps_spawn) =spawn_object(wpn_ak74u:jup_b46_corps_spawn) =spawn_corpse(jup_b46_duty_founder_squad_01:jup_b46_corps_spawn) =spawn_object(wpn_ak74u:jup_b46_corps_spawn) =spawn_corpse(jup_b46_duty_founder_squad_02:jup_b46_corps_spawn) =spawn_object(wpn_ak74:jup_b46_corps_spawn) =spawn_corpse(jup_b46_duty_founder_squad_03:jup_b46_corps_spawn) =spawn_object(wpn_abakan:jup_b46_corps_spawn) =spawn_object(wpn_abakan:jup_b46_corps_spawn) =spawn_corpse(jup_b46_duty_founder_squad_04:jup_b46_corps_spawn) =spawn_object(medkit:jup_b46_corps_spawn)%
on_info = {-jup_b46_duty_founder_pda_start =actor_has_item(jup_b46_duty_founder_pda)} %+jup_b46_duty_founder_pda_start =play_sound(jup_b46_duty_founder_pda_diary) =give_task(jup_b46_duty_founder_pda)%
on_info2 = {+jup_b46_duty_founder_squad_spawned +jup_b46_duty_founder_pda_start} sr_idle@end    

[sr_idle@end]

Добавлена строка с on_info3[/cut]

[cut=icw_dialogs.xml (текст диалогов)]
Код
<?xml version="1.0" encoding="windows-1251" ?>
<string_table>
    <string id="pila_quest_dialog_1">
     <text>Привет, сталкер. Чего сидишь здесь?</text>
    </string>
           <string id="pila_quest_dialog_2">
     <text>Из каких из "этих"?</text>
    </string>
           <string id="pila_quest_dialog_3">
     <text>Из наёмников Росса?</text>
    </string>
           <string id="pila_quest_dialog_4">
     <text>Кого?</text>
    </string>
           <string id="pila_quest_dialog_5">
     <text>А, ясно. Слушай, мужик, хочешь подзаработать?</text>
    </string>
           <string id="pila_quest_dialog_6">
     <text>Ну допустим.</text>
    </string>
           <string id="pila_quest_dialog_7">
     <text>Да нет, спасибо.</text>
    </string>
           <string id="pila_quest_dialog_8">
     <text>Меня один мужик пресует, как раз сей Росс. Длинная история... В общем он там глава небольшой группы наёмников из человек 10-12. Вальнёшь его и его подручных, заплачу отменно. Ну чё, по рукам?</text>
    </string>
           <string id="pila_quest_dialog_9">
     <text>По рукам. Где мне их найти?</text>
    </string>
           <string id="pila_quest_dialog_10">
     <text>Спасибо, мужик, что согласился! Их минибаза недалеко от Янова, у градирни. Возьмёшь КПК Росса и отнесёшь мне. Буду ждать тебя на Янове. Идёт?</text>
    </string>
           <string id="pila_quest_dialog_11">
     <text>Идёт, идёт. Скорее бы уже пришёл... Ладно, готовь деньги.</text>
    </string>
    <?xml version="1.0" encoding="windows-1251" ?>
</string_table>
[/cut]

[cut=icw_info ]
Код
<?xml version='1.0' encoding="windows-1251"?>
<game_information_portions>
<!------------------------------------------------->
<info_portion id="pila_quest_no_quest"></info_portion>    
<info_portion id="pila_quest_init"></info_portion>    
<info_portion id="pila_quest_end"></info_portion>    
<info_portion id="jup_killer_ross_squad_death"></info_portion>
<info_portion id="spawn_jup_killer_ross_squad"></info_portion>     
</game_information_portions>
[/cut]

[cut=extended_dialogs.xml (модель диалога)]
Код
<dialog id="pila_quest_begin">                
           <dont_has_info>pila_quest_init</dont_has_info>    
           <dont_has_info>pila_quest_no_quest</dont_has_info>    
           <precondition>sgm_dialogs.actor_not_have_pda_ross</precondition>    
           <phrase_list>    
               <phrase id="0">    
                   <text>pila_quest_dialog_1</text>    
                   <next>1</next>    
                   </phrase>           
           <phrase id="1">    
                   <text>pila_quest_dialog_2</text>    
                   <next>2</next>    
                   <next>3</next>    
           </phrase>    
           <phrase id="2">    
                   <text>pila_quest_dialog_3</text>    
           </phrase>    
           <phrase id="3">    
                   <text>pila_quest_dialog_4</text>                        
                   <next>4</next>    
           </phrase>    
           <phrase id="4">    
                   <text>pila_quest_dialog_5</text>    
          <next>5</next>
          <next>6</next>
           </phrase>     
        <phrase id="5">    
                   <text>pila_quest_dialog_6</text>    
       <action>sgm_dialogs.pila_quest_give_quest</action>
                   <next>7</next>
           </phrase>
        <phrase id="6">    
                   <text>pila_quest_dialog_7</text>    
                   <give_info>pila_quest_no_quest</give_info>    
                   <action>dialogs.break_dialog</action>    
           </phrase>    
        <phrase id="7">    
                   <text>pila_quest_dialog_8</text>
                <give_info>pila_quest_init</give_info>                         
                <next>8</next>
           </phrase>
        <phrase id="8">    
                   <text>pila_quest_dialog_9</text>    
                   <next>9</next>                        
           </phrase>
     <phrase id="9">    
                   <text>pila_quest_dialog_10</text>    
                   <next>10</next>                       
           </phrase>
     <phrase id="10">    
                   <text>pila_quest_dialog_11</text>    
          <action>dialogs.break_dialog</action>    
           </phrase>
    </phrase_list>    
</dialog>    
</game_dialogs>
[/cut]

[cut=sgm_dialogs.script]
Код
function pila_quest_give_quest()         
task_manager.get_task_manager():give_task("pila_quest")            
end    

function actor_have_pda_ross(first_speaker, second_speaker)    
return db.actor:object("pda_ross") ~= nil    
end    

function actor_not_have_pda_ross(first_speaker, second_speaker)    
return db.actor:object("pda_ross") == nil    
end    

function pila_quest_give_pda(first_speaker, second_speaker)    
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "pda_ross")     
end         

function function pila_quest_give_reward(first_speaker, second_speaker)    
dialogs.relocate_money_to_actor(first_speaker, second_speaker, 7500)    
end
[/cut]

[cut=character_desc_icw]
Код
<specific_character id="jup_stalker_pila" team_default = "1">
                   <name>Пила</name>
                   <icon>ui_inGame2_neutral_2</icon>
                   <map_icon x="1" y="0"></map_icon>
                   <bio>Опытный сталкер. Детальная информация отсутствует.</bio>
                   <class>jup_stalker_pila</class>
                   <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
                   <snd_config>characters_voice\human_03\stalker\</snd_config>
                   <rank>200</rank>
            <money min="3500" max="8500" infinitive="0"/>
                   <reputation>0</reputation>
                   <visual>actors\stalker_neutral\stalker_neutral_13</visual>
                   <supplies>
                   [spawn] \n
       wpn_lr300 = 1 \n
     ammo_5.45x39_ap = 1 \n
           wpn_beretta \n
     ammo_9x19_pbp = 1 \n
           grenade_rgd5 = 2 \n
#include "gameplay\character_items_2.xml"
#include "gameplay\character_food.xml"
#include "gameplay\character_drugs_2.xml"
     </supplies>
     <actor_dialog>pila_quest_begin</actor_dialog>
     <actor_dialog>actor_break_dialog</actor_dialog>
#include "gameplay\character_criticals_4.xml"
                   #include "gameplay\character_dialogs.xml"
</specific_character>

<specific_character id="jup_killer_ross" team_default = "1">
                   <name>Росс</name>
                   <icon>ui_inGame2_killer_4</icon>
                   <map_icon x="1" y="0"></map_icon>
                   <bio>Опытный сталкер. Детальная информация отсутствует.</bio>
                   <class>jup_killer_ross</class>
                   <community>killer</community> <terrain_sect>stalker_terrain</terrain_sect>
                   <snd_config>characters_voice\human_03\stalker\</snd_config>
                   <rank>200</rank>
            <money min="3500" max="8500" infinitive="0"/>
                   <reputation>0</reputation>
                   <visual>actors\stalker_merc\stalker_merc_4</visual>
                   <supplies>
                   [spawn] \n
       wpn_groza = 1 \n
     ammo_5.45x39_ap = 1 \n
           wpn_beretta \n
     ammo_9x19_pbp = 1 \n
           grenade_rgd5 = 2 \n
     pda_ross = 1 \n
#include "gameplay\character_items_2.xml"
#include "gameplay\character_food.xml"
#include "gameplay\character_drugs_2.xml"
     </supplies>
#include "gameplay\character_criticals_4.xml"
#include "gameplay\character_dialogs.xml"
</specific_character>
[/cut]

[cut=spawn_sections_icw]
Код
[jup_stalker_pila]:quest_stalker_heavy
$spawn            = "respawn\jup_stalker_pila"
character_profile = jup_stalker_pila
spec_rank         = master
community         = stalker
story_id          = jup_stalker_pila
custom_data       = scripts\bonus\jup_stalker_pila.ltx

[jup_killer_ross]:stalker
$spawn            = "respawn\jup_killer_ross"
character_profile = jup_killer_ross
spec_rank         = master
community         = killer
story_id          = jup_killer_ross
[/cut]

[cut=Логика нпс, выдающего задание]
Код
[logic]
active = move@pila

[move@pila]
move_dest_number       = 621603
move_look_vertex       = 623801
move_state_when_center = sit_ass
move_state_when_move   = walk
move_combat_disable    = true
meet                   = meet
invulnerable           = true
combat_ignore_cond     = true
combat_ignore_keep_when_attacked = true
on_info                = {+pila_quest_end =dist_to_actor_ge(90)} nil %=release_npc%

[meet]
abuse           = false
use             = true
allow_break     = false
meet_on_talking = false
trade_enable    = false
[/cut]

[cut=squad_descr_icw]
Код
[jup_killer_ross_squad]:online_offline_group
faction = killer
npc = jup_killer_ross, sim_default_killer_1, sim_default_killer_1, sim_default_killer_2, sim_default_killer_2, sim_default_killer_1, sim_default_killer_2, sim_default_killer_3, sim_default_killer_3, sim_default_killer_2, sim_default_killer_4
story_id = jup_killer_ross_squad
target_smart = jup_b46
on_death = %+jup_killer_ross_squad_death%
[/cut]

[cut=tm_extended]
Код
[pila_quest]    
icon = ui_inGame2_Shustriy_Find_1
prior = 2    
storyline = false    
title = {=actor_has_item(pda_ross)} pila_quest_title_3,  pila_quest_title_0    
descr = pila_quest_text_0    
target = {=actor_has_item(pda_ross)} jup_stalker_pila, {+jup_killer_ross_squad_death} pda_ross, jup_killer_ross    
condlist_0 = {+pila_quest_end} complete
[/cut]

В sgm_spawner.script добавил
Код
create("jup_stalker_pila",-58.588,3.764,155.301,621603,453)
в секции заселения Юпитера.


Новый квестовый нпс, который выдает квест спавнится нормально. При разговоре вылет с выше указанным логом.
Не подскажете, в чем проблема?





Сообщение отредактировал FantomICW - Чт, 04.04.2013, 20:57
 
Поиск: