| 
	
		
		
			| Модостроение. Создание и редактирование квестов |  | 
				
			 |  | 
| denis2000 | Дата: Пн, 10.10.2011, 21:25 | Сообщение # 1 |  |  Полевой исследователь Ученые сталкеры Сообщений: 2399 | Создание и редактирование квестов 
 Создание новых квестов и редактирование существующих 
 Если у вас появились вопросы по созданию и редактированию квестов, изменению существующих и добавлению новых в игру. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
 
 Много интересного материала здесь (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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
 возможно Ваш вопрос уже рассматривался.
 
 
 Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
 
 "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
 (Чугунный всадник)
 
   |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |  |  |  | 
| sergej5500 | Дата: Пн, 09.04.2012, 01:05 | Сообщение # 31 |  |  Полевой Исследователь Ученые сталкеры Сообщений: 3793 | Всем Добрый вечер! Так как ссылка на Сборник модостроения ЗП v10.10.11 (автор: XOBAH) в шапке этой темы, то пишу сюда!
 Решил попробовать спавн базы Чапая на Затоне после помощи группе Спартака. Сделал все как написано в сборнике.
 Запустил SGM 1.7. На лесничестве пусто. Взял квест на Шевченко, перебил группу Кастета. Вернулся к Бороде. В разговоре он упомянул о лесничестве. На слова Дегтярева: "Я помогу разобраться с бандитами" Борода говорит, что пока лесничество под контролем бандитов, сделать ничего нельзя. Но Чапай и его банда появятся только после сдачи КПК Моргана. Квест не запускается, Морган не спавнится и его КПК тоже. Возникает логический тупик. Возможно, эта тема когда-то ранее поднималась, но я ничего не нашел.
 |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |  |  |  | 
| denis2000 | Дата: Ср, 11.04.2012, 11:23 | Сообщение # 32 |  |  Полевой исследователь Ученые сталкеры Сообщений: 2399 | sergej5500, Мешает отсутствие инфопорции zat_lesnichestvo_svobodno [cut]В файле sgm_tasks.script в функции task_update() вместо
 
 Code if has_alife_info("zat_bandit_base_leader_death") and has_alife_info("zat_bandit_base_bodyguard_1_death") and has_alife_info("zat_bandit_base_bodyguard_2_death") and has_alife_info("zat_bandit_base_bodyguard_3_death") and has_alife_info("zat_bandit_base_bodyguard_4_death") then if not has_alife_info("zat_lesnichestvo_svobodno") then
 give_info("zat_lesnichestvo_svobodno")
 end
 else
 if has_alife_info("zat_lesnichestvo_svobodno") then
 disable_info("zat_lesnichestvo_svobodno")
 end
 end
 ставь
 
 [/cut]Code if not has_alife_info("zat_lesnichestvo_svobodno") then give_info("zat_lesnichestvo_svobodno")
 end
 "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
 (Чугунный всадник)
 
   |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |  |  |  | 
| sergej5500 | Дата: Сб, 14.04.2012, 21:34 | Сообщение # 33 |  |  Полевой Исследователь Ученые сталкеры Сообщений: 3793 | Всем Добрый Вечер. У Вано, Зулуса и Бродяги при нормальном прохождении игры флешки получить невозможно.
 Возникла мысль подредактировать квесты таким образом, чтобы эти персонажи сами отдали свои флешки в качестве награды за оказанные им услуги.
 [cut=Квест Долги Вано][jup_a10_actor_agree_back_vano_duties]
 icon = ui_inGame2_Dolgi
 prior = 1
 storyline = false
 title = {+jup_a10_back_vano} jup_a10_actor_back_vano_duties_name, {+jup_a10_kill_all_bandit} jup_a10_kill_all_bandit_name, jup_a10_actor_agree_back_vano_duties_name
 descr = {+jup_a10_back_vano} jup_a10_actor_back_vano_duties_text, {+jup_a10_kill_all_bandit} jup_a10_kill_all_bandit_text, jup_a10_actor_agree_back_vano_duties_text
 target = {+jup_a10_back_vano} jup_a10_stalker_vano, {+jup_a10_death_0 =squad_exist(jup_a10_bandit_squad_3)} jup_a10_bandit_squad_3, {+jup_a10_kill_all_bandit =squad_exist(jup_a10_bandit_squad_3)} jup_a10_bandit_leader, {=squad_exist(jup_a10_bandit_squad_3)} jup_a10_bandit_leader
 ;target = {+jup_a10_back_vano} jup_a10_stalker_vano, {+jup_a10_kill_all_bandit}jup_a10_bandit_leader
 condlist_0 = {+jup_a10_vano_give_task_end} complete
 ;condlist_1 = {+jup_a10_fals} fail
 После этого дописал:
 reward_money = 10000
 reward_item = dv_stalker_vano_case[/cut]
 Получилось все правильно. Вано при разговоре с ним дал флешку и деньги.
 [cut=Квест Бродяги][jup_b4_monolith_squad_help]
 icon = ui_inGame2_Vizhivshiy_monolit
 prior = 2
 storyline = false
 title = {+jup_b4_duty_redy_go_to_monolit_squad} jup_b4_stalkers_come_name, {+jup_b4_freedom_redy_go_to_monolit_squad} jup_b4_stalkers_come_name, jup_b4_monolith_squad_help_name
 descr = {+jup_b4_duty_redy_go_to_monolit_squad} jup_b4_stalkers_come_duty_text, {+jup_b4_freedom_redy_go_to_monolit_squad} jup_b4_stalkers_come_freedom_text, jup_b4_monolith_squad_help_text
 target = {+jup_b4_duty_redy_go_to_monolit_squad} jup_a6_duty_leader, {+jup_b4_freedom_redy_go_to_monolit_squad} jup_a6_freedom_leader, jup_a6_smart_id
 condlist_0 = {+jup_b4_monolith_squad_in_duty} complete %+jup_b4_monolith_squad_redy_go_yanov%
 condlist_1 = {+jup_b4_monolith_squad_in_freedom} complete %+jup_b4_monolith_squad_redy_go_yanov%
 condlist_2 = {+jup_b4_monolith_squad_out} fail %+jup_b4_task_end%
 on_complete = %=add_actor_rank(2) +jup_b4_task_end%[/cut]
 При добавлении в квест Бродяги фрагмента:
 reward_money = 10000
 reward_item = dv_monolit_brodiaga_case
 в тот момент, когда монолитовцев принимают в Долг или Свободу, приходит сообщение о том, что получен соответствующий бронекостюм, флешка и деньги. Флешку и деньги, таким образом, дает принимающая группировка.
 Что и где нужно прописать, чтобы флешку дал Бродяга при первом разговоре с ним после вступления в группировку
 [cut=В файле dialogs.scripts нашел диалог]function monolith_leader_is_alive(first_speaker, second_speaker)
 if not (has_alife_info("jup_b4_monolith_squad_in_freedom") or has_alife_info("jup_b4_monolith_squad_in_duty")) then
 return xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_monolith_skin"})
 end
 
 if has_alife_info("jup_b4_monolith_squad_in_freedom") then
 return xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_freedom_skin"})
 elseif has_alife_info("jup_b4_monolith_squad_in_duty") then
 return xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_duty_skin"})
 end
 
 return false
 end
 
 function monolith_leader_dead_or_hired(first_speaker, second_speaker)
 if has_alife_info("jup_b218_soldier_hired") then
 return true
 end
 
 if not (has_alife_info("jup_b4_monolith_squad_in_freedom") or has_alife_info("jup_b4_monolith_squad_in_duty")) then
 return not xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_monolith_skin"})
 end
 
 if has_alife_info("jup_b4_monolith_squad_in_freedom") then
 return not xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_freedom_skin"})
 elseif has_alife_info("jup_b4_monolith_squad_in_duty") then
 return not xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_duty_skin"})
 end
 
 return true
 end[/cut]
 [cut=Попробовал в эту функцию дописать]function monolith_leader_is_alive(first_speaker, second_speaker)
 if not (has_alife_info("jup_b4_monolith_squad_in_freedom") or has_alife_info("jup_b4_monolith_squad_in_duty")) then
 return xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_monolith_skin"})
 end
 
 if has_alife_info("jup_b4_monolith_squad_in_freedom") then
 return xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_freedom_skin"})
 dialogs.relocate_item_section_to_actor(second_speaker, first_speaker, "dv_monolit_brodiaga_case")
 elseif has_alife_info("jup_b4_monolith_squad_in_duty") then
 return xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_duty_skin"})
 dialogs.relocate_item_section_to_actor(second_speaker, first_speaker, "dv_monolit_brodiaga_case")
 end
 
 return false
 end
 
 function monolith_leader_dead_or_hired(first_speaker, second_speaker)
 if has_alife_info("jup_b218_soldier_hired") then
 return true
 end
 
 if not (has_alife_info("jup_b4_monolith_squad_in_freedom") or has_alife_info("jup_b4_monolith_squad_in_duty")) then
 return not xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_monolith_skin"})
 end
 
 if has_alife_info("jup_b4_monolith_squad_in_freedom") then
 return not xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_freedom_skin"})
 dialogs.relocate_item_section_to_actor(second_speaker, first_speaker, "dv_monolit_brodiaga_case")
 elseif has_alife_info("jup_b4_monolith_squad_in_duty") then
 return not xr_conditions.is_alive(nil,nil,{"jup_b4_monolith_squad_leader_duty_skin"})
 dialogs.relocate_item_section_to_actor(second_speaker, first_speaker, "dv_monolit_brodiaga_case")
 end
 
 return true
 end[/cut]
 После такой правки при попытке заговорить с Локи о приеме монолитовцев игра вылетела с ошибкой: update_game_loaded.
 Возможно, что я неправильно вставил флешку. В каком файле прописан первый диалог с Бродягой после вступления в группировки. Заранее благодарен за любые советы.
 
 
 Сообщение отредактировал sergej5500 - Сб, 14.04.2012, 21:37 |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |  |  |  | 
| denis2000 | Дата: Вс, 15.04.2012, 12:42 | Сообщение # 34 |  |  Полевой исследователь Ученые сталкеры Сообщений: 2399 | sergej5500, Сделайте отдельный диалог и выдайте награду в нем. 
 "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
 (Чугунный всадник)
 
   |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |  |  |  | 
| sergej5500 | Дата: Ср, 18.04.2012, 13:10 | Сообщение # 35 |  |  Полевой Исследователь Ученые сталкеры Сообщений: 3793 | Всем Добрый День. Решил переделать квест Чапая по убийству Шакала. Переместил точку спавна Шакала и его команды в здание, где находится прототип гаусса, около аномалии "Железный Лес". Сделал нужные поправки в файлах. Неписи стоят там, где нужно. Проблема в том, что после уничтожения Шакала Тесак и его команда становятся враждебными. Как отключить враждебность Тесака? Заранее благодарен за советы.
 
 Убирай выдачу инфопорции zat_b103_merc_fight из логики Шакала и компании. denis2000
 |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |  |  |  | 
| fauone | Дата: Ср, 18.04.2012, 16:55 | Сообщение # 36 |  | Гражданский Пользователи Сообщений: 19 | ребят подскажите как увидеть гамедату в зп и чн?? 
 КМБ. Инструкция 1. denis2000
 
 если кто знает-где взять плагины на фотошоп DDS-скиньте ссыли!
 
 Для этого есть тема Программы для модинга STALKER'а. denis2000
 |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили fauone за это полезное сообщение: |  |  |  | 
| sergej5500 | Дата: Сб, 05.05.2012, 22:19 | Сообщение # 37 |  |  Полевой Исследователь Ученые сталкеры Сообщений: 3793 | Добрый вечер. На основе урока 33 из КМБ (автор GEONEZIS) сделал квест для Вано.
 [cut=Сам квест][jup_a10_stalker_vano_artefact_quest]
 icon = ui_inGame2_Kontrakt_s_uchenimi
 prior = 2
 storyline = false
 title = {=actor_has_item(af_ice) =actor_has_item(af_fire)} jup_a10_stalker_vano_artefact_quest_title_3, {=actor_has_item(af_ice) !actor_has_item(af_fire)} jup_a10_stalker_vano_artefact_quest_title_2, {!actor_has_item(af_ice) =actor_has_item(af_fire)} jup_a10_stalker_vano_artefact_quest_title_1, jup_a10_stalker_vano_artefact_quest_title_0
 descr = {=actor_has_item(af_ice) =actor_has_item(af_fire)} jup_a10_stalker_vano_artefact_quest_text_3, {=actor_has_item(af_ice) !actor_has_item(af_fire)} jup_a10_stalker_vano_artefact_quest_text_2, {!actor_has_item(af_ice) =actor_has_item(af_fire)} jup_a10_stalker_vano_artefact_quest_text_1, jup_a10_stalker_vano_artefact_quest_text_0
 target = {=actor_has_item(af_ice) =actor_has_item(af_fire)} jup_a10_stalker_vano_id, nil
 condlist_0 = {+jup_a10_stalker_vano_quest_end} complete[/cut]
 [cut=Диалоги]<dialog id="jup_a10_stalker_vano_artefact_quest_begin">
 <dont_has_info>jup_a10_stalker_vano_artefact_quest_init</dont_has_info>
 <dont_has_info>jup_a10_stalker_vano_artefact_quest_no_quest</dont_has_info>
 <precondition>dialogs_jupiter.jup_a10_stalker_vano_not_have_arts</precondition>
 <phrase_list>
 <phrase id="0">
 <text>jup_a10_stalker_vano_artefact_quest_0</text>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>jup_a10_stalker_vano_artefact_quest_1</text>
 <next>2</next>
 <next>3</next>
 </phrase>
 <phrase id="2">
 <text>jup_a10_stalker_vano_artefact_quest_2</text>
 <give_info>jup_a10_stalker_vano_artefact_quest_no_quest</give_info>
 </phrase>
 <phrase id="3">
 <text>jup_a10_stalker_vano_artefact_quest_3</text>
 <action>dialogs_zaton.zat_b30_owl_stalker_trader_give_quest</action>
 <next>4</next>
 </phrase>
 <phrase id="4">
 <text>jup_a10_stalker_vano_artefact_quest_4</text>
 <give_info>jup_a10_stalker_vano_artefact_quest_init</give_info>
 </phrase>
 </phrase_list>
 </dialog>
 <dialog id="jup_a10_stalker_vano_artefact_quest_end">
 <has_info>jup_a10_stalker_vano_artefact_quest_init</has_info>
 <dont_has_info>jup_a10_stalker_vano_artefact_quest_end</dont_has_info>
 <precondition>dialogs_jupiter.jup_a10_stalker_vano_have_arts</precondition>
 <phrase_list>
 <phrase id="0">
 <text>jup_a10_stalker_vano_artefact_quest_5</text>
 <give_info>jup_a10_stalker_vano_artefact_quest_end</give_info>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>jup_a10_stalker_vano_artefact_quest_6</text>
 <next>2</next>
 </phrase>
 <phrase id="2">
 <text>jup_a10_stalker_vano_artefact_quest_7</text>
 <action>dialogs_jupiter.jup_a10_stalker_vano_relocates_arts</action>
 <next>3</next>
 </phrase>
 <phrase id="3">
 <text>jup_a10_stalker_vano_artefact_quest_8</text>
 <action>dialogs_jupiter.jup_a10_stalker_vano_relocates_money_to_actor</action>
 <next>4</next>
 </phrase>
 <phrase id="4">
 <text>jup_a10_stalker_vano_artefact_quest_9</text>
 <action>dialogs.break_dialog</action>
 </phrase>
 </phrase_list>
 </dialog> [/cut]
 [cut=Задания]<string id="jup_a10_stalker_vano_artefact_quest_title_0">
 <text>Поручение Вано: найти артефакты Снежинка и Пламя</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_text_0">
 <text>Сыч попросил найти для него два арта- Снежинка и Пламя.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_title_1">
 <text>Поручение Вано: найти артефакт Снежинка</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_text_1">
 <text>Артефакт Пламя найден. Найдите Снежинку.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_title_2">
 <text>Поручение Вано: найти артефакт Пламя</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_text_2">
 <text>Артефакт Снежинка найден. Найдите Пламя.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_title_3">
 <text>Поручение Вано: передайте найденные артефакты Вано.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_text_3">
 <text>Оба артефакта найдены. Отдайте их Вано, и заберите награду.</text>
 </string> [/cut]
 [cut=Русификация диалогов]<string id="jup_a10_stalker_vano_artefact_quest_0">
 <text>Есть какое дело?</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_1">
 <text>Нужны артефакты Пламя и Снежинка. Достанешь, хорошо заплачу.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_2">
 <text>Нет, друг- сам ищи.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_3">
 <text>Сделаю.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_4">
 <text>Вот и отлично.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_5">
 <text>Я нашел артефакты, наш уговор в силе?</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_6">
 <text>Да, отличная работа, давай артефакты сюда.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_7">
 <text>Держи.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_8">
 <text>Вот твои деньги.</text>
 </string>
 <string id="jup_a10_stalker_vano_artefact_quest_9">
 <text>Бывай.</text>
 </string> [/cut]
 [cut=Инфопорции]<info_portion id="jup_a10_stalker_vano_artefact_quest_no_quest"></info_portion>
 <info_portion id="jup_a10_stalker_vano_artefact_quest_init"></info_portion>
 <info_portion id="jup_a10_stalker_vano_artefact_quest_end"></info_portion>[/cut]
 [cut=Скриптовые функции]function jup_a10_stalker_vano_give_quest()
 task_manager.get_task_manager():give_task("jup_a10_stalker_vano_artefact_quest")
 end
 function jup_a10_stalker_vano_have_arts(first_speaker, second_speaker)
 return ((db.actor:object("af_ice") ~= nil) and (db.actor:object("af_fire") ~= nil))
 end
 function jup_a10_stalker_vano_not_have_arts(first_speaker, second_speaker)
 return ((db.actor:object("af_ice") == nil) and (db.actor:object("af_fire") == nil))
 end
 function jup_a10_stalker_vano_relocates_arts(first_speaker, second_speaker)
 dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_ice")
 dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_fire")
 end
 function jup_a10_stalker_vano_relocates_money_to_actor(first_speaker, second_speaker)
 dialogs.relocate_money_to_actor(first_speaker, second_speaker, 30000)
 end [/cut]
 Запустил игру и сразу побежал на Янов проверять. Диалоги у Вано появились, артефакты он берет и дает деньги. Скрипты работают отлично. Не работают инфопорции. Задания не появляются в ПДА и не обновляются. Что я пропустил или не дописал? Заранее благодарен за советы.
 
 Ты выдаешь в диалоге совсем другой квест. denis2000
 
 Добавлено (19.04.2012, 08:38)
 ---------------------------------------------
 Доброе утро!
 Спасибо denis2000 за подсказку. Квест запустился и работает. Как ввести дополнительное условие для взятия квеста?
 Он должен быть доступен после решения проблемы с долгом Вано. Заранее благодарен за советы.
 
 В диалоге проверяй наличие инфопорций которые выдаються в случае завершения указанного квеста. denis2000
 Добавлено (05.05.2012, 22:19)---------------------------------------------
 Всем Добрый Вечер!
 Создал нового НПС на Кордоне. Прописал ему квест на поиск 10 АК-74 и 10 Абаканов.
 За основу взял квест от Geonezis для Тремора на поиск анабиотиков и щупалец.
 [cut=Сделал диалог]<dialog id="esc_rasvet_001_quest_begin_dialog">
 <dont_has_info>esc_rasvet_001_quest_started</dont_has_info>
 <phrase_list>
 <phrase id="0">
 <text>esc_rasvet_001_quest_begin_0</text>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>esc_rasvet_001_quest_begin_1</text>
 <next>2</next>
 </phrase>
 <phrase id="2">
 <text>esc_rasvet_001_quest_begin_2</text>
 <next>3</next>
 </phrase>
 <phrase id="3">
 <text>esc_rasvet_001_quest_begin_3</text>
 <next>4</next>
 <next>44</next>
 </phrase>
 <phrase id="4">
 <text>esc_rasvet_001_quest_begin_4</text>
 <next>5</next>
 </phrase>
 <phrase id="5">
 <text>esc_rasvet_001_quest_begin_5</text>
 <give_info>esc_rasvet_001_quest_started</give_info>
 <action>sgm_dialogs.give_esc_rasvet_001_quest</action>
 </phrase>
 <phrase id="44">
 <text>esc_rasvet_001_quest_begin_6</text>
 <next>444</next>
 </phrase>
 <phrase id="444">
 <text>esc_rasvet_001_quest_begin_7</text>
 </phrase>
 </phrase_list>
 </dialog>
 <dialog id="esc_rasvet_001_quest_end_dialog">
 <dont_has_info>esc_rasvet_001_quest_done</dont_has_info>
 <has_info>esc_rasvet_001_quest_started</has_info>
 <precondition>sgm_dialogs.actor_has_first_esc_rasvet_001_quest_item</precondition>
 <precondition>sgm_dialogs.actor_has_second_esc_rasvet_001_quest_item</precondition>
 <phrase_list>
 <phrase id="0">
 <text>esc_rasvet_001_quest_end_0</text>
 <next>1</next>
 <action>sgm_dialogs.transfer_esc_rasvet_001_quest_object</action>
 <give_info>esc_rasvet_001_quest_done</give_info>
 </phrase>
 <phrase id="1">
 <text>esc_rasvet_001_quest_end_1</text>
 <next>2</next>
 <next>3</next>
 </phrase>
 <phrase id="2">
 <text>esc_rasvet_001_quest_end_2</text>
 <next>22</next>
 </phrase>
 <phrase id="22">
 <text>esc_rasvet_001_quest_end_4</text>
 <next>11111</next>
 <action>sgm_dialogs.money_esc_rasvet_001_quest</action>
 </phrase>
 <phrase id="3">
 <text>esc_rasvet_001_quest_end_3</text>
 <next>33</next>
 </phrase>
 <phrase id="33">
 <text>esc_rasvet_001_quest_end_5</text>
 <next>11111</next>
 <action>sgm_dialogs.medcomplect_esc_rasvet_001_quest</action>
 </phrase>
 <phrase id="11111">
 <text>esc_rasvet_001_quest_end_6</text>
 </phrase>
 </phrase_list>
 </dialog>[/cut]
 [cut noguest=Сделал скрипт]function actor_has_first_esc_rasvet_001_quest_item(first_speaker, second_speaker)
 local cnt = 0
 local function esc_001_count(npc, item)
 --printf("item:section: %s", item:section())
 if item:section() == "wpn_ak74" then
 cnt = cnt + 1
 end
 end
 db.actor:iterate_inventory(esc_001_count, nil)
 if cnt > 9 then
 return true
 end
 return false
 end
 
 function actor_has_second_esc_rasvet_001_quest_item(first_speaker, second_speaker)
 local cnt = 0
 local function esc_001_count(npc, item)
 --printf("item:section: %s", item:section())
 if item:section() == "wpn_abakan" then
 cnt = cnt + 1
 end
 end
 db.actor:iterate_inventory(esc_001_count, nil)
 if cnt > 9 then
 return true
 end
 return false
 end
 
 function transfer_esc_rasvet_001_quest_object(first_speaker, second_speaker)
 dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "wpn_ak74", 10)
 dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "wpn_abakan", 10)
 end
 
 function money_esc_rasvet_001_quest(first_speaker, second_speaker)
 local amount = 15000
 dialogs.relocate_money_to_actor(first_speaker, second_speaker, amount)
 end
 
 function medcomplect_esc_rasvet_001_quest(first_speaker, second_speaker)
 dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "bag_medkit_2", 5)
 end
 
 function give_esc_rasvet_001_quest()
 task_manager.get_task_manager():give_task("esc_rasvet_001_quest")
 end [/cut]
 Прописал в стартовый набор эти стволы и запустил игру. Квест берется, но не сдается. Видимо, не работает счетчик предметов в инвентаре. В чем я ошибся? И еще вопрос: как можно прописать проверку качества этих стволов? В игре придется подбирать трофейные стволы. Нужно, чтобы НПС брал только отремонтированное оружие. Заранее благодарен за советы.
 
 
 Сообщение отредактировал sergej5500 - Ср, 18.04.2012, 23:30 |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |  |  |  | 
| denis2000 | Дата: Сб, 05.05.2012, 23:11 | Сообщение # 38 |  |  Полевой исследователь Ученые сталкеры Сообщений: 2399 | sergej5500, Диалоги вроде рабочие. Скрипт проверки наличия определенного количества предметов тоже рабочий (древний код еще GSС-овский). Проверяй дальше видимо проблема не здесь. Для проверки состояния предметов делай так:
 
 Code if (item:section() == "wpn_ak74") and (item:condition()>0.9) thenТо есть не только секция предмета "wpn_ak74", но и состояние не хуже 0,9.
 К тому же придется переделать скрипт переноса предметов от ГГ к НПС с учетом состояния предметов.
 
 "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
 (Чугунный всадник)
 
   |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |  |  |  | 
| ALEKS58 | Дата: Вс, 06.05.2012, 13:16 | Сообщение # 39 |  |  Новичок Пользователи Сообщений: 66 | В прохождении Geonezis Addon + Sigerous Mod 2.0 уже несколько игровых суток прошло , а антенна ещё не отремонтирована (в квесте за монолит ) . Подскажите в чём ошибка , и как её исправить ? 
 
 
 ALEKS58
 |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили ALEKS58 за это полезное сообщение: |  |  |  | 
| sergej5500 | Дата: Вс, 06.05.2012, 20:05 | Сообщение # 40 |  |  Полевой Исследователь Ученые сталкеры Сообщений: 3793 | Добрый День! Сделал несколько новых НПС на Кордоне! Уникальных НПС, на которые завязаны квесты, спавню в отдельных сквадах.
 Как спавнить сквады по определенному условию, разобрался. Если я дописываю в конфиг сквада Медведева фразу
 online_cond = {+esc_rasvet_002_quest_done} true,
 спавн сталкеров на блокпосту происходит по завершению соответстующего квеста.
 Вопрос, как по этому-же инфопоршню удалить другой сквад с НПС, квест с которым завершен, что бы они не тормозили игру. Не просто их убить, нужно что бы они просто исчезли. Заранее благодарен за подсказки.
 |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |  |  |  | 
| denis2000 | Дата: Вс, 06.05.2012, 21:19 | Сообщение # 41 |  |  Полевой исследователь Ученые сталкеры Сообщений: 2399 | sergej5500, Сделай рестриктор с логикой: 
 Code [logic] active = sr_idle
 
 [sr_idle]
 on_info = {+esc_rasvet_002_quest_done =squad_exist(<стори ид сквада для удаления>)} nil %=remove_squad(<стори ид сквада для удаления>)%
 
 "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
 (Чугунный всадник)
 
   |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |  |  |  | 
| sergej5500 | Дата: Пт, 11.05.2012, 15:12 | Сообщение # 42 |  |  Полевой Исследователь Ученые сталкеры Сообщений: 3793 | Всем Добрый Вечер! Делал квест на основе квеста от Geonezis для Тремора на поиск анабиотиков и щупалец. Квест полностью рабочий, выполняется без проблем, но не выдаются промежуточные инфопорции. Сейчас специально загрузил Geonezis Addon, там та же история. Промежуточные инфопорции не выдаются. Приведу здесь квест и скрипты.
 [cut=Квест][geonezis_zat_tremor_quest]
 icon = ui_inGame2_Kontrakt_s_uchenimi
 prior = 1
 storyline = false
 title = {+zat_tremor_quest_have_anabiotic +zat_tremor_quest_have_krovosos} zat_tremor_quest_title3, {+zat_tremor_quest_have_anabiotic -zat_tremor_quest_have_krovosos} zat_tremor_quest_title2, {+zat_tremor_quest_have_krovosos -zat_tremor_quest_have_anabiotic} zat_tremor_quest_title1, zat_tremor_quest_title0
 descr = {+zat_tremor_quest_have_anabiotic +zat_tremor_quest_have_krovosos} zat_tremor_quest_text3, {+zat_tremor_quest_have_anabiotic -zat_tremor_quest_have_krovosos} zat_tremor_quest_text2, {+zat_tremor_quest_have_krovosos -zat_tremor_quest_have_anabiotic} zat_tremor_quest_text1, zat_tremor_quest_text0
 target = {+zat_tremor_quest_have_anabiotic +zat_tremor_quest_have_krovosos} zat_b22_stalker_medic
 condlist_0 = {+zat_tremor_quest_done} complete
 condlist_1 = {+zat_b22_stalker_medic_death} fail
 on_complete = %=add_actor_rank(3) =inc_faction_goodwill_to_actor(stalker:50) =edit_counter(stat_kvestov:1:plus)%[/cut]
 [cut=Dialogs_zaton]function actor_has_first_tremor_quest_item(first_speaker, second_speaker)
 local cnt = 0
 local function zat_b30_count(npc, item)
 --printf("item:section: %s", item:section())
 if item:section() == "mutant_krovosos_booty" then
 cnt = cnt + 1
 end
 end
 db.actor:iterate_inventory(zat_b30_count, nil)
 if cnt > 2 then
 return true
 end
 return false
 end
 
 function actor_has_second_tremor_quest_item(first_speaker, second_speaker)
 local cnt = 0
 local function zat_b30_count(npc, item)
 --printf("item:section: %s", item:section())
 if item:section() == "drug_anabiotic" then
 cnt = cnt + 1
 end
 end
 db.actor:iterate_inventory(zat_b30_count, nil)
 if cnt > 1 then
 return true
 end
 return false
 end
 
 function transfer_zat_tremor_quest_object(first_speaker, second_speaker)
 dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "drug_anabiotic", 2)
 dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "mutant_krovosos_booty", 3)
 end
 
 function money_zat_tremor_quest(first_speaker, second_speaker)
 local amount = 15000
 dialogs.relocate_money_to_actor(first_speaker, second_speaker, amount)
 end
 
 function medcomplect_zat_tremor_quest(first_speaker, second_speaker)
 dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "medkit_elite", 10)
 end
 
 function give_tremor_quest()
 task_manager.get_task_manager():give_task("geonezis_zat_tremor_quest")
 end [/cut]
 [cut=sgm_tasks]--/Квест: Поручение Тремора
 if has_alife_info("zat_tremor_quest_started") and (not has_alife_info("zat_tremor_quest_have_anabiotic")) then
 local cnt = 0
 local function zat_b30_count(npc, item)
 --printf("item:section: %s", item:section())
 if item:section() == "drug_anabiotic" then
 cnt = cnt + 1
 end
 end
 db.actor:iterate_inventory(zat_b30_count, nil)
 if cnt > 1 then
 give_info("zat_tremor_quest_have_anabiotic")
 end
 end
 if has_alife_info("zat_tremor_quest_started") and (not has_alife_info("zat_tremor_quest_have_krovosos")) then
 local cnt = 0
 local function zat_b30_count(npc, item)
 --printf("item:section: %s", item:section())
 if item:section() == "mutant_krovosos_booty" then
 cnt = cnt + 1
 end
 end
 db.actor:iterate_inventory(zat_b30_count, nil)
 if cnt > 2 then
 give_info("zat_tremor_quest_have_krovosos")
 end
 end[/cut]
 Видимо, не работает функция в sgm_tasks. Как можно исправить данную функцию, что бы промежуточные инфопорции выдавались и задания обновлялись. Заранее благодарен за советы.
 
 Должно работать, видимо проверка состояния квестов вставлена не туда. denis2000
 
 Добавлено (11.05.2012, 00:34)
 ---------------------------------------------
 Добрый Вечер!
 Сделал квест на поиск 10 артефактов разных видов на примере квеста Тесака на поиск еды.
 Приведу детали квеста.
 [cut=sgm_dialogs]function sgm_dialogs.esc_rasvet_001_quests_1_have_arts(first_speaker, second_speaker)
 local item_sections	= {
 [1] = "af_baloon",
 [2] = "af_gravi",
 [3] = "af_ice",
 [4] = "af_glass",
 [5] = "af_fuzz_kolobok",
 [6] = "af_gold_fish",
 [7] = "af_fire"
 
 }
 local needed = 10
 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)
 --		printf("?sgm_dialogs.esc_rasvet_001_quests_1_have? : section [%s] count [%s]", tostring(v), tostring(count))
 end
 
 return count >= needed
 end
 function esc_rasvet_001_quests_1_relocates_arts(first_speaker, second_speaker)
 local npc = dialogs.who_is_npc(first_speaker, second_speaker)
 local actor = dialogs.who_is_actor(first_speaker, second_speaker)
 local i = 10
 local j = 0
 local section
 local item_sections	= {
 [1] = "af_baloon",
 [2] = "af_gravi",
 [3] = "af_ice",
 [4] = "af_glass",
 [5] = "af_fuzz_kolobok",
 [6] = "af_gold_fish",
 [7] = "af_fire"
 }
 
 local function transfer_object_item(temp, item)
 if (item:section() == section and i ~= 0) then
 actor:transfer_item(item, npc)
 i = i - 1
 end
 end
 
 for k,v in pairs(item_sections) do
 section = v
 j = i
 actor:iterate_inventory(transfer_object_item, nil)
 if ((j - i) ~= 0) then
 news_manager.relocate_item(actor, "out", section, j - i)
 end
 --		printf("?esc_rasvet_001_quests_1_relocates_arts? : section [%s] lasts [%s] from 6", tostring(v), tostring(i))
 end
 end
 function esc_rasvet_001_quests_1_relocates_money_to_actor(first_speaker, second_speaker)
 dialogs.relocate_money_to_actor(first_speaker, second_speaker, 120000)
 end[/cut]
 [cut=dialogs_escape]<dialog id="esc_rasvet_001_quests_1_begin">
 <dont_has_info>esc_rasvet_001_quests_1_init</dont_has_info>
 <phrase_list>
 <phrase id="0">
 <text>esc_rasvet_001_quests_1_0</text>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>esc_rasvet_001_quests_1_1</text>
 <next>2</next>
 </phrase>
 <phrase id="2">
 <text>esc_rasvet_001_quests_1_2</text>
 <next>3</next>
 </phrase>
 <phrase id="3">
 <text>esc_rasvet_001_quests_1_3</text>
 <next>4</next>
 <next>5</next>
 </phrase>
 <phrase id="4">
 <text>esc_rasvet_001_quests_1_4</text>
 <give_info>esc_rasvet_001_quests_1_no_quest</give_info>
 </phrase>
 <phrase id="5">
 <text>esc_rasvet_001_quests_1_5</text>
 <give_info>esc_rasvet_001_quests_1</give_info>
 <next>6</next>
 </phrase>
 <phrase id="6">
 <text>esc_rasvet_001_quests_1_6</text>
 <give_info>esc_rasvet_001_quests_1_init</give_info>
 <next>7</next>
 </phrase>
 <phrase id="7">
 <text>esc_rasvet_001_quests_1_61</text>
 <action>dialogs.break_dialog</action>
 </phrase>
 </phrase_list>
 </dialog>
 <dialog id="esc_rasvet_001_quests_1_end">
 <has_info>esc_rasvet_001_quests_1_init</has_info>
 <dont_has_info>esc_rasvet_001_quests_1_end</dont_has_info>
 <precondition>sgm_dialogs.esc_rasvet_001_quests_1_have_arts</precondition>
 <phrase_list>
 <phrase id="0">
 <text>esc_rasvet_001_quests_1_7</text>
 <give_info>esc_rasvet_001_quests_1_end</give_info>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>esc_rasvet_001_quests_1_8</text>
 <next>2</next>
 </phrase>
 <phrase id="2">
 <text>esc_rasvet_001_quests_1_9</text>
 <action>sgm_dialogs.esc_rasvet_001_quests_1_relocates_arts</action>
 <next>3</next>
 </phrase>
 <phrase id="3">
 <text>esc_rasvet_001_quests_1_10</text>
 <action>sgm_dialogs.esc_rasvet_001_quests_1_relocates_money_to_actor</action>
 <next>4</next>
 </phrase>
 <phrase id="4">
 <text>esc_rasvet_001_quests_1_11</text>
 <action>dialogs.break_dialog</action>
 </phrase>
 </phrase_list>
 </dialog>[/cut]
 [cut=tm_escape][esc_rasvet_001_quests_1]
 icon = ui_inGame2_Kontrakt_s_uchenimi
 prior = 1
 storyline = false
 title = {=esc_rasvet_001_quests_1_have_arts} esc_rasvet_001_quests_1_got_name, esc_rasvet_001_quests_1_bring_name
 descr = {=esc_rasvet_001_quests_1_have_arts} esc_rasvet_001_quests_1_got_text, esc_rasvet_001_quests_1_bring_text
 target = {=esc_rasvet_001_quests_1_have_arts} esc_rasvet_001
 condlist_0 = {+esc_rasvet_001_quests_1_end} complete [/cut]
 Изучив оригинальный квест, выяснил, что он запускается посредством инфопорции с названием квеста в диалоге. Вроде все сделал по образцу, но у меня инфопорция не срабатывает и квест не запускается. Скриптовые функции работают отлично. Артефакты можгно принести и получить за них награду.
 При добавлении в диалог <action>sgm_dialogs.esc_rasvet_001_quests_1</action> и функции
 function esc_rasvet_001_quests_1()
 task_manager.get_task_manager():give_task("esc_rasvet_001_quests_1")
 end происходит вылет. Если делать квест на основе урока от Geonezis на поиск артефактов Пламя и Снежинка, action нормально работает и квест запускается. Как сделать, чтобы квест запустился? Заранее благодарен за советы.
 
 Ожидаю ЛОГ! denis2000
 Лучше не именовать функции таким образом sgm_dialogs.esc_rasvet_001_quests_1_have_arts
 Ну и лог конечно-же...
 
 XOBAH 
 Добавлено (11.05.2012, 15:12)
 ---------------------------------------------
 Добрый День! Привожу проблемный квест. Задание найти 10 артефактов 7 разных видов. Сделан на основе квеста Тесака на поиск продуктов.
 [cut=Квест]<dialog id="esc_rasvet_001_quests_1_begin">
 <dont_has_info>esc_rasvet_001_quests_1_init</dont_has_info>
 <phrase_list>
 <phrase id="0">
 <text>esc_rasvet_001_quests_1_0</text>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>esc_rasvet_001_quests_1_1</text>
 <next>2</next>
 </phrase>
 <phrase id="2">
 <text>esc_rasvet_001_quests_1_2</text>
 <next>3</next>
 </phrase>
 <phrase id="3">
 <text>esc_rasvet_001_quests_1_3</text>
 <next>4</next>
 <next>5</next>
 </phrase>
 <phrase id="4">
 <text>esc_rasvet_001_quests_1_4</text>
 <give_info>esc_rasvet_001_quests_1_no_quest</give_info>
 </phrase>
 <phrase id="5">
 <text>esc_rasvet_001_quests_1_5</text>
 <action>sgm_dialogs.esc_rasvet_001_quests_1</action>
 <next>6</next>
 </phrase>
 <phrase id="6">
 <text>esc_rasvet_001_quests_1_6</text>
 <give_info>esc_rasvet_001_quests_1_init</give_info>
 <next>7</next>
 </phrase>
 <phrase id="7">
 <text>esc_rasvet_001_quests_1_61</text>
 <action>dialogs.break_dialog</action>
 </phrase>
 </phrase_list>
 </dialog>
 <dialog id="esc_rasvet_001_quests_1_end">
 <has_info>esc_rasvet_001_quests_1_init</has_info>
 <dont_has_info>esc_rasvet_001_quests_1_end</dont_has_info>
 <precondition>sgm_dialogs.esc_rasvet_001_quests_1_have_arts</precondition>
 <phrase_list>
 <phrase id="0">
 <text>esc_rasvet_001_quests_1_7</text>
 <give_info>esc_rasvet_001_quests_1_end</give_info>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>esc_rasvet_001_quests_1_8</text>
 <next>2</next>
 </phrase>
 <phrase id="2">
 <text>esc_rasvet_001_quests_1_9</text>
 <action>sgm_dialogs.esc_rasvet_001_quests_1_relocates_arts</action>
 <next>3</next>
 </phrase>
 <phrase id="3">
 <text>esc_rasvet_001_quests_1_10</text>
 <action>sgm_dialogs.esc_rasvet_001_quests_1_relocates_money_to_actor</action>
 <next>4</next>
 </phrase>
 <phrase id="4">
 <text>esc_rasvet_001_quests_1_11</text>
 <action>dialogs.break_dialog</action>
 </phrase>
 </phrase_list>
 </dialog>
 
 function esc_rasvet_001_quests_1()
 task_manager.get_task_manager():give_task("esc_rasvet_001_quests_1")
 end
 function sgm_dialogs.esc_rasvet_001_quests_1_have_arts(first_speaker, second_speaker)
 local item_sections	= {
 [1] = "af_baloon",
 [2] = "af_gravi",
 [3] = "af_ice",
 [4] = "af_glass",
 [5] = "af_fuzz_kolobok",
 [6] = "af_gold_fish",
 [7] = "af_fire"
 
 }
 local needed = 10
 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)
 --		printf("?sgm_dialogs.esc_rasvet_001_quests_1_have? : section [%s] count [%s]", tostring(v), tostring(count))
 end
 
 return count >= needed
 end
 function esc_rasvet_001_quests_1_relocates_arts(first_speaker, second_speaker)
 local npc = dialogs.who_is_npc(first_speaker, second_speaker)
 local actor = dialogs.who_is_actor(first_speaker, second_speaker)
 local i = 10
 local j = 0
 local section
 local item_sections	= {
 [1] = "af_baloon",
 [2] = "af_gravi",
 [3] = "af_ice",
 [4] = "af_glass",
 [5] = "af_fuzz_kolobok",
 [6] = "af_gold_fish",
 [7] = "af_fire"
 }
 
 local function transfer_object_item(temp, item)
 if (item:section() == section and i ~= 0) then
 actor:transfer_item(item, npc)
 i = i - 1
 end
 end
 
 for k,v in pairs(item_sections) do
 section = v
 j = i
 actor:iterate_inventory(transfer_object_item, nil)
 if ((j - i) ~= 0) then
 news_manager.relocate_item(actor, "out", section, j - i)
 end
 --		printf("?esc_rasvet_001_quests_1_relocates_arts? : section [%s] lasts [%s] from 6", tostring(v), tostring(i))
 end
 end
 function esc_rasvet_001_quests_1_relocates_money_to_actor(first_speaker, second_speaker)
 dialogs.relocate_money_to_actor(first_speaker, second_speaker, 120000)
 end
 
 [esc_rasvet_001_quests_1]
 icon = ui_inGame2_Kontrakt_s_uchenimi
 prior = 1
 storyline = false
 title = {=esc_rasvet_001_quests_1_have_arts} esc_rasvet_001_quests_1_got_name, esc_rasvet_001_quests_1_bring_name
 descr = {=esc_rasvet_001_quests_1_have_arts} esc_rasvet_001_quests_1_got_text, esc_rasvet_001_quests_1_bring_text
 target = {=esc_rasvet_001_quests_1_have_arts} esc_rasvet_001
 condlist_0 = {+esc_rasvet_001_quests_1_end} complete[/cut]
 При ативации <action>sgm_dialogs.esc_rasvet_001_quests_1</action> происходит вылет
 [cut=Лог вылета]FATAL ERROR
 [error]Expression : !m_error_code
 [error]Function : raii_guard::~raii_guard
 [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
 [error]Line : 748
 [error]Description : ...files 1\Зов Припяти\gamedata\scripts\xr_logic.script:478: attempt to index local 'npc' (a nil value)[/cut]
 При замене <action>sgm_dialogs.esc_rasvet_001_quests_1</action> на
 <give_info>esc_rasvet_001_quests_1</give_info> вылета не происходит, но квест не активируется. Скриптовые функции работают нормально, можно принести артефакты и получить деньги./text>
 
 
 Сообщение отредактировал sergej5500 - Пт, 11.05.2012, 15:14 |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |  |  |  | 
| denis2000 | Дата: Пт, 11.05.2012, 15:30 | Сообщение # 43 |  |  Полевой исследователь Ученые сталкеры Сообщений: 2399 | sergej5500, Функуция esc_rasvet_001_quests_1_have_arts в xr_conditions.script присутствует? 
 "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
 (Чугунный всадник)
 
   |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |  |  |  | 
| sergej5500 | Дата: Пт, 11.05.2012, 16:27 | Сообщение # 44 |  |  Полевой Исследователь Ученые сталкеры Сообщений: 3793 | Попробовал дописать функцию esc_rasvet_001_quests_1_have_arts в файл xr_conditions.script по аналогии с функцией zat_b103_actor_has_needed_food из оригигнального квеста. Ничего не изменилось. Квест по прежнему не берется. Функция esc_rasvet_001_quests_1_have_arts у меня работает нормально. Когда подхожу к НПС, не имея 10 артефактов, то соответствующая ветка диалога не появляется. |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |  |  |  | 
| denis2000 | Дата: Пт, 11.05.2012, 16:38 | Сообщение # 45 |  |  Полевой исследователь Ученые сталкеры Сообщений: 2399 | Quote (sergej5500) Ничего не изменилось. Квест по прежнему не берется.Тоесть тот же лог вылета? Тогда ты сделал это неправильно.
 
 "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
 (Чугунный всадник)
 
   |  |  |  |   
  
 | Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |  |  |  |