создание квеста найти принести для сталкер тч
всем привет для вас 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>
<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>
-----------------------------------------------------------------------------------------]]
ну вот и все квест по типу найти принести готов
сильно то неругайте я старался вроде и так все ражевал ,а в рот вы уже сами положите )) незабудьте плюснуть если все увас получится желаю удачи
#модостроение
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Комментарии 2