Страница 1 из 212»
Архив - только для чтения
Форум » Архив » Моддинг - Архив » [SoC] Создание квеста "Найти-принести" (создание квеста найти принести)
[SoC] Создание квеста "Найти-принести"
Российская Федерация  RICK
Четверг, 08.09.2011, 17:28 | Сообщение # 1
Статус:
Бывалый:
Сообщений: 1183
Награды: 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
Российская Федерация  KupuJLJL25
Четверг, 08.09.2011, 21:49 | Сообщение # 2
Статус:
Новичок:
Сообщений: 329
Награды: 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)
---------------------------------------------
Все у меня получилось....слу а как сделать квест с нахождением другой вещи или изменить на убийство кого либо?

Российская Федерация  supei-sa
Пятница, 09.09.2011, 17:54 | Сообщение # 3
Статус:
Ветеран:
Сообщений: 4356
Награды: 6
Регистрация: 25.10.2010

Спасибо за статейку.
Сообщение отредактировал supei-sa - Пятница, 09.09.2011, 18:09
Российская Федерация  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оздадим,
Можно было обойтись одним скриптом.
Российская Федерация  Gunslinger_1
Воскресенье, 25.09.2011, 14:06 | Сообщение # 5
Статус:
Бывалый:
Сообщений: 676
Награды: 1
Регистрация: 29.07.2011

сделал всё так как написано, теперь как только разговариваю с Волком, выбираю "есть для меня работа" и вылет sad
Российская Федерация  RICK
Воскресенье, 25.09.2011, 16:44 | Сообщение # 6
Статус:
Бывалый:
Сообщений: 1183
Награды: 4
Регистрация: 10.05.2011

ну а лог ?
Российская Федерация  Resheto
Понедельник, 26.09.2011, 08:06 | Сообщение # 7
Статус:
Зевака:
Сообщений: 14
Награды: 0
Регистрация: 23.03.2011

Хорошая статья!
Российская Федерация  supei-sa
Понедельник, 26.09.2011, 16:45 | Сообщение # 8
Статус:
Ветеран:
Сообщений: 4356
Награды: 6
Регистрация: 25.10.2010

Gunslinger_1, Не правильно что-то потому-что у меня все получилось с 1 раза!Единственное что тут не написано так это при убийстве выдавателя задания(Волк)при его убийстве квест не проваливался а так все работает вообще-то.Внимательней будь. smile
Российская Федерация  strelok200
Суббота, 01.10.2011, 10:28 | Сообщение # 9
Под прикрытием смерти (Cop Level addon)
Статус:
Бывалый:
Сообщений: 1189
Награды: 7
Регистрация: 24.09.2011

Смысла от статьи нету. Лучше бы написали как создавать квестов поинтереснее. Не типа принести, уничтожить, поговорить ну и т.д.
Украина  kaizer96
Суббота, 01.10.2011, 12:38 | Сообщение # 10
Статус:
Неопытный:
Сообщений: 575
Награды: 2
Регистрация: 25.12.2010

strelok200, квесты типа принеси и поговори делаются еще проще!
Российская Федерация  supei-sa
Воскресенье, 02.10.2011, 08:26 | Сообщение # 11
Статус:
Ветеран:
Сообщений: 4356
Награды: 6
Регистрация: 25.10.2010

strelok200, Знаешь человек старался писал а ты вот еще статью оскорбляешь нехорошо dry
  Nikitos817
Вторник, 04.10.2011, 16:02 | Сообщение # 12
Статус:
:
Сообщений:
Регистрация:

Хех. Квесты поговорить делаются элементарно. Можно было не писать сюда бред.
Российская Федерация  DarkFace
Среда, 02.05.2012, 16:03 | Сообщение # 13
Let it be
Статус:
Бывалый:
Сообщений: 1126
Награды: 2
Регистрация: 26.03.2012

Renson, а как одним скриптом?

Добавлено (02.05.2012, 16:03)
---------------------------------------------
Так может мне обьяснить, как эти 3 скрипта в 1 адаптировать, и что бы всё нормально работало?

Российская Федерация  RICK
Среда, 02.05.2012, 22:02 | Сообщение # 14
Статус:
Бывалый:
Сообщений: 1183
Награды: 4
Регистрация: 10.05.2011

сдесь и так все нормально работает

aln_quest.alife() где aln_quest сылка на скрипт
Российская Федерация  DarkFace
Четверг, 03.05.2012, 09:55 | Сообщение # 15
Let it be
Статус:
Бывалый:
Сообщений: 1126
Награды: 2
Регистрация: 26.03.2012

Если много делать. То вся папка скрипт окажется забита(
Форум » Архив » Моддинг - Архив » [SoC] Создание квеста "Найти-принести" (создание квеста найти принести)
Страница 1 из 212»
Поиск: