| [SoC] Создание квеста "Найти-принести" | 
| 
				
			 | 
|  
|  |   
|  
 
 
 Четверг, 08.09.2011, 17:28 | Сообщение # 1 RICK  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1205 |   
 | Награды: | 4 |   
 | Регистрация: | 10.05.2011 |  | всем привет для вас kail сегодня я научу вас создавать квесты типа найти принести сегодня мы создадим квест для волка найти и вернуть динамит 
 1.
 ---------------------------------------------------------[[
 список файлов которые понадобятся
 
 gamedata/scripts/aln_quest --создадим,
 gamedata/scripts/quest -- cоздадим,
 gamedata/scripts/quest_aln --- cоздадим,
 gamedata/config/gameplay/character_decs_escape,
 gamedata/config/gameplay/info_l01escape,
 gamedata/config/gameplay/dialogs_escape,
 gamedata/config/gameplay/storyline_info_escape,
 gamedata/config/gameplay/tasks_escape,
 gamedata/config/text/rus/stable_dialogs_escape
 ---------------------------------------------------------]]
 
 2. вот все файлы которые нужны и так приступаем
 
 создаем скрипит в папке gamedata/scripts/aln_quest
 
 в скрипт пишим функцию
 ----------------------------------------------------------------------]]
 function spawn_item(spawn_item, pos, gv,lv)
 if gv==nil then gv=db.actor:game_vertex_id() end
 if lv==nil then lv=db.actor:level_vertex_id() end
 return alife():create(spawn_item, pos, lv, gv)
 end
 function remove_item_from_inventory(remove_item,npc)
 if npc==nil then npc=db.actor end
 if remove_item~=nil then
 --npc:mark_item_dropped(remove_item)
 alife():release(alife():object(remove_item:id()), true)
 return true
 end
 return false
 end
 ----------------------------------------------------------------------]]
 
 скрипт готов
 
 p.s то-что я обвожу пунктиром и квадратными скобками в скрипт это невписываем иначе игра небудет видеть нашу функцию
 
 3. теперь создаем скрипт quest в папке gamedata/scripts
 
 в него пишим
 
 ------------------------------------------------------------------------[[
 local items_count=0
 local itemin=nil
 function have_item_namber(itm,need_namber)
 local actor=db.actor
 items_count=0
 itemin=itm
 actor:iterate_inventory(cheking_item,actor)
 if items_count>=need_namber then
 return true
 else
 return false
 end
 end
 function cheking_item(actor,item)
 local items=item:section()
 if items==itemin then
 items_count=items_count+1
 end
 end
 function create_items(npc,section,number)
 for i=1,number do
 alife():create(section,
 npc:position(),
 npc:level_vertex_id(),
 npc:game_vertex_id(),
 npc:id())
 end
 end
 local reloc_params={}
 local stalk
 function out_item_namber(itm_section,need_number)
 reloc_params.itm_section=itm_section
 reloc_params.itm_cnt=need_number
 reloc_params.itm_cnt_found =0
 db.actor:iterate_inventory(checkout_items_count,db.actor)
 reloc_params.itm_cnt_found=0
 if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then
 db.actor:iterate_inventory(out_items_count,db.actor)
 end
 news_manager.relocate_item(db.actor, "out", itm_section)
 reloc_params={}
 end
 function relocate_item_namber(stalker,itm_section,need_number)
 stalk=stalker
 reloc_params.itm_section=itm_section
 reloc_params.itm_cnt=need_number
 reloc_params.itm_cnt_found=0
 db.actor:iterate_inventory(checkout_items_count,db.actor)
 reloc_params.itm_cnt_found=0
 if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then
 db.actor:iterate_inventory(reloc_items_count,db.actor)
 end
 news_manager.relocate_item(db.actor, "out", itm_section)
 reloc_params={}
 end
 function checkout_items_count(actor,item)
 if item.section and item:section()==reloc_params.itm_section then
 reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1
 end
 end
 function reloc_items_count(actor,item)
 if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found<reloc_params.itm_cnt then
 db.actor:transfer_item(item, stalk)
 reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1
 end
 end
 function out_items_count(actor,item)
 if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found<reloc_params.itm_cnt then
 aln_quest.remove_item_from_inventory(item, actor)
 reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1
 end
 end
 
 ------------------------------------------------------------------------]]
 
 готово
 
 4.создаем скрипт quest_aln в папке gamedata/scripts
 
 в него пишим скелет квеста
 
 --------------------------------------------------------------------------[[
 
 ---------------------------квест волка найти динамит------------------------------
 function spawn_dynamite()
 aln_quest.alife():create("dynamite",vector():set(106.24745178223,-7.1400456428528,2.6464221477509),407116,119)
 end
 function esc_wolf_dynamite_have()
 return quest.have_item_namber("dynamite",1) ~= false
 end
 function give_esc_wolf_dynamite(first_speaker, second_speaker)
 quest.out_item_namber("dynamite",1)
 end
 function complete_esc_wolf_quest(first_speaker, second_speaker)
 dialogs.relocate_money(second_speaker, 2000, "in")
 dialogs.relocate_item_section(second_speaker, "ammo_9x18_fmj", "in")
 dialogs.relocate_item_section(second_speaker, "ammo_5.45x39_fmj","in")
 end
 --------------------------------------------------------------------------]]
 
 готово
 
 ps корды можите неменять динамит при взятие квеста будет лежать на атп где еще шустрый сидит
 
 в награду за квест дадут 2000 руб
 патроны к пм и патроны к ак
 
 5.идем дальше
 
 создание диалога для волка
 идем сюда
 
 gamedata/config/gameplay/character_decs_escape
 
 ищим волка и вставляем ему новые диалоги ,а точнее сылки на диалоги вотак
 ------------------------------------------------------------------------------------------]]
 
 <actor_dialog>esc_wolf_dynamite_quest</actor_dialog>
 <actor_dialog>esc_wolf_dynamite_quest_completed</actor_dialog>
 ------------------------------------------------------------------------------------------[[
 
 6.готово создадим скелет диалога
 
 идем сюда
 
 gamedata/config/gameplay/dialogs_escape
 
 открываем и пишим два скелета диалога один для выдачи квеста второй для завершения и получения награды вообщем
 
 пишим после тага </dialog>
 
 пишим
 ----------------------------------------------------------------------[[
 <dialog id="esc_wolf_dynamite_quest">
 <dont_has_info>esc_wolf_dynamite_start</dont_has_info>
 <phrase_list>
 <phrase id="0">
 <text>esc_wolf_dynamite_quest_0</text>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>esc_wolf_dynamite_quest_1</text>
 <next>2</next>
 <next>3</next>
 </phrase>
 <phrase id="2">
 <text>esc_wolf_dynamite_quest_2</text>
 <give_info>esc_wolf_dynamite_start</give_info>
 <action>quest_aln.spawn_dynamite</action>
 </phrase>
 <phrase id="3">
 <text>esc_wolf_dynamite_quest_3</text>
 <action>dialogs.break_dialog</action>
 </phrase>
 </phrase_list>
 </dialog>
 <dialog id="esc_wolf_dynamite_quest_completed">
 <precondition>quest_aln.esc_wolf_dynamite_have</precondition>
 <has_info>esc_wolf_dynamite_have</has_info>
 <dont_has_info>esc_wolf_dynamite_done</dont_has_info>
 <phrase_list>
 <phrase id="0">
 <text>esc_wolf_dynamite_quest_completed_0</text>
 <next>1</next>
 </phrase>
 <phrase id="1">
 <text>esc_wolf_dynamite_quest_completed_1</text>
 <next>2</next>
 </phrase>
 <phrase id="2">
 <text>esc_wolf_dynamite_quest_completed_2</text>
 <action>quest_aln.complete_esc_wolf_dynamite_quest</action>
 <give_info>esc_wolf_dynamite_done</give_info>
 <action>quest_aln.give_esc_wolf_dynamite</action>
 <next>3</next>
 </phrase>
 <phrase id="3">
 <text>esc_wolf_dynamite_quest_completed_3</text>
 <action>quest_aln.complete_esc_wolf_quest</action>
 </phrase>
 </phrase_list>
 </dialog>
 
 ----------------------------------------------------------------------------]]
 
 7.готово запишим русский текст идем сюда
 
 gamedata/config/text/rus/stable_dialogs_escape
 
 открыли и после тага </string>
 
 пишим
 
 ------------------------------------------------------------[[
 
 <string id="esc_wolf_dynamite_quest_0">
 <text>Привет Волк работа есть для меня?</text>
 </string>
 <string id="esc_wolf_dynamite_quest_1">
 <text>да как раз найдется для тебя работенка тут такое дело наши ребята нашли динамит но попути когда они тащили динамит сюда в лагерь на них бандиты на пали и динамит забрали ты немог бы вернуть динамит ребята сказали что видели что бандиты динамит всторону атп тащили, вообщем верни динамит ,а я отблагадарю. ну что согласен?</text>
 </string>
 <string id="esc_wolf_dynamite_quest_2">
 <text>Хорошо попробую найти динамит</text>
 </string>
 <string id="esc_wolf_dynamite_quest_3">
 <text>в другой раз</text>
 </string>
 <string id="esc_wolf_dynamite_quest_completed_0">
 <text>привет Волк</text>
 </string>
 <string id="esc_wolf_dynamite_quest_completed_1">
 <text>ну как нашол?</text>
 </string>
 <string id="esc_wolf_dynamite_quest_completed_2">
 <text>да. нашол тяжелый немного держи</text>
 </string>
 <string id="esc_wolf_dynamite_quest_completed_3">
 <text>спасибо меченый ,а вот и награда как я и обещал</text>
 </string>
 <string id="tex_esc_wolf_dynamite">
 <text>Волк попросил найти динамит который украли бандиты</text> -- это запись будет отображатся в пда в кладке подробно о задании
 </string>
 -----------------------------------------------------------------]]
 
 8.создадим инфопоршни в папке gamedata/config/gameplay/ info_l01escape
 
 открыли пишим после тага </info_portion>
 
 ----------------------------------------------------[[
 
 <!--квест Волка найти динамит-->
 <info_portion id="esc_wolf_dynamite_start">
 <task>esc_wolf_dynamite</task>
 </info_portion>
 <info_portion id="esc_wolf_dynamite_have">
 </info_portion>
 <info_portion id="esc_wolf_dynamite_done">
 </info_portion>
 
 ---------------------------------------------------]]
 
 9. cоздаем историю квеста в папке gamedata/config/gameplay/storyline_info_escape
 
 открыли пишим после тага </article>
 
 <!--квест волка найти динамит-->
 <article id="tex_esc_wolf_dynamite" name="найти и вернуть динамит волку" article_type="task"> -- cылка на запись из stable_dialogs_escape мы уже написали что волк просит найти динами
 <texture x="200" y="900" width="100" height="100">ui\ui_icon_equipment</texture> -- определяем иконку
 <text>tex_esc_wolf_dynamite</text> -- текст задания
 </article>
 
 ------------------------------------------------------[[
 
 10.финиш создаем в gamedata/config/gameplay/tasks_escape
 
 открыли пишим после тага </game_task>
 
 -------------------------------------------------------------------[[
 
 <game_task id="esc_wolf_dynamite">
 <title>Найти украденый бандитами динамит</title> -- текст первого подзадания найти динами
 <objective>
 <text>Найти украденый бандитами динамит</text>
 <icon>ui_iconsTotal_lost_thing</icon>
 <infoportion_complete>esc_wolf_dynamite_done</infoportion_complete>
 <article>tex_esc_wolf_dynamite</article>
 </objective>
 <objective>
 <text>Найти украденый бандитами динамит</text>
 <function_complete>quest_aln.esc_wolf_dynamite_have</function_complete>
 <infoportion_set_complete>esc_wolf_dynamite_have</infoportion_set_complete>
 </objective>
 <objective>
 <text>вернуть динамит Волку</text> -- текст второго подзадания гг нашол динамит отнести волку
 <map_location_type hint="Волк">blue_location</map_location_type>
 <object_story_id>Escape_novice_lager_volk</object_story_id>
 <infoportion_complete>esc_wolf_dynamite_done</infoportion_complete>
 </objective>
 </game_task>
 
 -----------------------------------------------------------------------------------------]]
 
 ну вот и все квест по типу найти принести готов
 
 сильно то неругайте я старался вроде и так все ражевал ,а в рот вы уже сами положите )) незабудьте плюснуть если все увас получится желаю удачи
 
 ps: последнее исправление небольшое дополнение если квестодатель погибает то квест остается сегодня мы исправим что бы квест проваливался
 
 значит так в скрипте quest_aln
 
 в конце пишим
 
 function fail_volk_story_quest()
 if has_alife_info("esc_wolf_dynamite_start") and
 has_alife_info("esc_wolf_dead") then
 return true
 else
 return false
 end
 end
 
 все написали в тело таска дописать
 
 <function_fail>quest_aln.fail_volk_story_quest</function_fail>
 
 <game_task id="esc_wolf_dynamite">
 <title>Найти украденый бандитами динамит</title> -- текст первого подзадания найти динами
 <objective>
 <text>Найти украденый бандитами динамит</text>
 <icon>ui_iconsTotal_lost_thing</icon>
 <function_fail>quest_aln.fail_volk_story_quest</function_fail>--сюда
 <infoportion_complete>esc_wolf_dynamite_done</infoportion_complete>
 
 все да еще одно если у вас новый персонаж то ему в логику нада дописать
 
 [logic] ваша логика
 active = walker@hid_pavel_ranen
 on_death = death@hid_stalker_pavel --вот тот что нужно
 
 [death@hid_stalker_pavel]
 on_info = %+pavel_story_dead% -- если нпс умер выдаем поршень
 
 [walker@hid_pavel_ranen]
 path_walk = hid_pavel_walk
 path_look = hid_pavel_look
 wounded = wounded@hid_pavel_wounded
 
 если это увас новый нпс если увас волк то ничего дописывать ненадо у него стоит уже инфопоршень на смерть esc_wolf_dead
 Сообщение отредактировал Kail - Суббота, 07.07.2012, 15:00 |  
    |  Четверг, 08.09.2011, 17:28   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 10.05.2011 |  |  |  |  | 
|  
|  |   
|  
 
  
  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Новичок: |  |   
 | Сообщений: | 330 |   
 | Награды: | 2 |   
 | Регистрация: | 01.06.2011 |  | 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: ...Приморская Солянка\gamedata\scripts\quest_aln.script:5: attempt to index global 'quest' (a nil value)
 Добавлено (08.09.2011, 21:49)---------------------------------------------
 Все у меня получилось....слу а как сделать квест с нахождением другой вещи или изменить на убийство кого либо?
 |  |  Четверг, 08.09.2011, 21:49   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 01.06.2011 |  |  |  |  | 
|  
|  |   
|  
 
 
 Пятница, 09.09.2011, 17:54 | Сообщение # 3 supei-sa  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Ветеран: |  |   
 | Сообщений: | 4356 |   
 | Награды: | 6 |   
 | Регистрация: | 25.10.2010 |  | Спасибо за статейку. Сообщение отредактировал supei-sa - Пятница, 09.09.2011, 18:09 |  |  Пятница, 09.09.2011, 17:54   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.10.2010 |  |  |  |  | 
|  
|  |   
|  
 
 
 Вторник, 13.09.2011, 20:02 | Сообщение # 4 Renson  
  
 | 
 
 
 
 
 
[Genesis mod]  
  
 | Статус: |  |   
 | Бывалый: |  |   
 | Сообщений: | 1053 |   
 | Награды: | 2 |   
 | Регистрация: | 03.07.2010 |  | Можно было обойтись одним скриптом.Quote gamedata/scripts/aln_quest --создадим, gamedata/scripts/quest -- cоздадим,
 gamedata/scripts/quest_aln --- cоздадим,
 |  |  Вторник, 13.09.2011, 20:02   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 03.07.2010 |  |  |  |  | 
| Воскресенье, 25.09.2011, 14:06   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 29.07.2011 |  |  |  |  | 
|  
|  |   
|  
 
 
 Воскресенье, 25.09.2011, 16:44 | Сообщение # 6 RICK  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1205 |   
 | Награды: | 4 |   
 | Регистрация: | 10.05.2011 |  | ну а лог ? |  |  Воскресенье, 25.09.2011, 16:44   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 10.05.2011 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 26.09.2011, 08:06 | Сообщение # 7 Resheto  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Зевака: |  |   
 | Сообщений: | 14 |   
 | Награды: | 0 |   
 | Регистрация: | 23.03.2011 |  | Хорошая статья! |  |  Понедельник, 26.09.2011, 08:06   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 23.03.2011 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 26.09.2011, 16:45 | Сообщение # 8 supei-sa |  Понедельник, 26.09.2011, 16:45   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.10.2010 |  |  |  |  | 
|  
|  |   
|  
 
  
  
  
 | 
 
 
 
 
 
Под прикрытием смерти (Cop Level addon)  
  
 | Статус: |  |   
 | Бывалый: |  |   
 | Сообщений: | 1189 |   
 | Награды: | 7 |   
 | Регистрация: | 24.09.2011 |  | Смысла от статьи нету. Лучше бы написали как создавать квестов поинтереснее. Не типа принести, уничтожить, поговорить ну и т.д. |  |  Суббота, 01.10.2011, 10:28   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 24.09.2011 |  |  |  |  | 
|  
|  |   
|  
 
 
 Суббота, 01.10.2011, 12:38 | Сообщение # 10 kaizer96  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Неопытный: |  |   
 | Сообщений: | 575 |   
 | Награды: | 2 |   
 | Регистрация: | 25.12.2010 |  | strelok200, квесты типа принеси и поговори делаются еще проще! |  |  Суббота, 01.10.2011, 12:38   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.12.2010 |  |  |  |  | 
|  
|  |   
|  
 
 
 Воскресенье, 02.10.2011, 08:26 | Сообщение # 11 supei-sa |  Воскресенье, 02.10.2011, 08:26   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.10.2010 |  |  |  |  | 
|  
|  |   
|  
 
  
  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | : |  |   
 | Сообщений: |  |   
 | Регистрация: |  |  | Хех. Квесты поговорить делаются элементарно. Можно было не писать сюда бред. |  |  Вторник, 04.10.2011, 16:02   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: |  |  |  |  |  | 
|  
|  |   
|  
 
 
 Среда, 02.05.2012, 16:03 | Сообщение # 13 DarkFace  
  
 | 
 
 
 
 
 
Let it be  
  
 | Статус: |  |   
 | Бывалый: |  |   
 | Сообщений: | 1169 |   
 | Награды: | 2 |   
 | Регистрация: | 26.03.2012 |  | Renson, а как одним скриптом?Добавлено (02.05.2012, 16:03)---------------------------------------------
 Так может мне обьяснить, как эти 3 скрипта в 1 адаптировать, и что бы всё нормально работало?
 |  |  Среда, 02.05.2012, 16:03   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 26.03.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Среда, 02.05.2012, 22:02 | Сообщение # 14 RICK  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1205 |   
 | Награды: | 4 |   
 | Регистрация: | 10.05.2011 |  | сдесь и так все нормально работает 
 aln_quest.alife() где aln_quest сылка на скрипт
 |  |  Среда, 02.05.2012, 22:02   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 10.05.2011 |  |  |  |  | 
|  
|  |   
|  
 
 
 Четверг, 03.05.2012, 09:55 | Сообщение # 15 DarkFace  
  
 | 
 
 
 
 
 
Let it be  
  
 | Статус: |  |   
 | Бывалый: |  |   
 | Сообщений: | 1169 |   
 | Награды: | 2 |   
 | Регистрация: | 26.03.2012 |  | Если много делать. То вся папка скрипт окажется забита( |  |  Четверг, 03.05.2012, 09:55   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 26.03.2012 |  |  |  |  |