[SoC] Создание квеста "Найти-принести"
|
|
|
RICK
Четверг, 08.09.2011, 17:28 | Сообщение # 1
Статус: |
|
Опытный: |
|
Сообщений: |
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 |
|
|
|
|
|
supei-sa
Пятница, 09.09.2011, 17:54 | Сообщение # 3
Статус: |
|
Ветеран: |
|
Сообщений: |
4356 |
Награды: |
6 |
Регистрация: |
25.10.2010 |
|
Спасибо за статейку.
Сообщение отредактировал supei-sa - Пятница, 09.09.2011, 18:09
|
|
Пятница, 09.09.2011, 17:54
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
25.10.2010 |
|
|
|
|
|
Renson
Вторник, 13.09.2011, 20:02 | Сообщение # 4
[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 |
|
|
|
|
|
RICK
Воскресенье, 25.09.2011, 16:44 | Сообщение # 6
Статус: |
|
Опытный: |
|
Сообщений: |
1205 |
Награды: |
4 |
Регистрация: |
10.05.2011 |
|
ну а лог ?
|
|
Воскресенье, 25.09.2011, 16:44
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
10.05.2011 |
|
|
|
|
|
Resheto
Понедельник, 26.09.2011, 08:06 | Сообщение # 7
Статус: |
|
Зевака: |
|
Сообщений: |
14 |
Награды: |
0 |
Регистрация: |
23.03.2011 |
|
Хорошая статья!
|
|
Понедельник, 26.09.2011, 08:06
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
23.03.2011 |
|
|
|
|
|
supei-sa
Понедельник, 26.09.2011, 16:45 | Сообщение # 8
|
Понедельник, 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 |
|
|
|
|
|
kaizer96
Суббота, 01.10.2011, 12:38 | Сообщение # 10
Статус: |
|
Неопытный: |
|
Сообщений: |
575 |
Награды: |
2 |
Регистрация: |
25.12.2010 |
|
strelok200, квесты типа принеси и поговори делаются еще проще!
|
|
Суббота, 01.10.2011, 12:38
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
25.12.2010 |
|
|
|
|
|
supei-sa
Воскресенье, 02.10.2011, 08:26 | Сообщение # 11
|
Воскресенье, 02.10.2011, 08:26
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
25.10.2010 |
|
|
|
|
|
Статус: |
|
: |
|
Сообщений: |
|
Регистрация: |
|
|
Хех. Квесты поговорить делаются элементарно. Можно было не писать сюда бред.
|
|
Вторник, 04.10.2011, 16:02
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
|
|
|
|
|
|
DarkFace
Среда, 02.05.2012, 16:03 | Сообщение # 13
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 |
|
|
|
|
|
RICK
Среда, 02.05.2012, 22:02 | Сообщение # 14
Статус: |
|
Опытный: |
|
Сообщений: |
1205 |
Награды: |
4 |
Регистрация: |
10.05.2011 |
|
сдесь и так все нормально работает
aln_quest.alife() где aln_quest сылка на скрипт
|
|
Среда, 02.05.2012, 22:02
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
10.05.2011 |
|
|
|
|
|
DarkFace
Четверг, 03.05.2012, 09:55 | Сообщение # 15
Let it be
Статус: |
|
Бывалый: |
|
Сообщений: |
1169 |
Награды: |
2 |
Регистрация: |
26.03.2012 |
|
Если много делать. То вся папка скрипт окажется забита(
|
|
Четверг, 03.05.2012, 09:55
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
26.03.2012 |
|
|
|
|