Случайная подборка модов
Autumn Aurora 2
4.1
OGSE 0.6.9.2
4.1
Old Episodes. Episode 2. War of Zone.
3.1
Krovosos mod v. 3.8
4.0
Ветер времени
4.5
Dead City Breakthrough
3.7
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
  • Страница 1 из 2
  • 1
  • 2
  • »
Архив - только для чтения
[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
Российская Федерация  KupuJLJL25
Четверг, 08.09.2011, 21:49 | Сообщение # 2
Статус:
Новичок:
Сообщений: 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
Российская Федерация  Gunslinger_1
Воскресенье, 25.09.2011, 14:06 | Сообщение # 5
Статус:
Бывалый:
Сообщений: 676
Награды: 1
Регистрация: 29.07.2011

сделал всё так как написано, теперь как только разговариваю с Волком, выбираю "есть для меня работа" и вылет sad
  Злобная реклама
Воскресенье, 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
Статус:
Ветеран:
Сообщений: 4356
Награды: 6
Регистрация: 25.10.2010

Gunslinger_1, Не правильно что-то потому-что у меня все получилось с 1 раза!Единственное что тут не написано так это при убийстве выдавателя задания(Волк)при его убийстве квест не проваливался а так все работает вообще-то.Внимательней будь. smile
  Злобная реклама
Понедельник, 26.09.2011, 16:45
Статус:
Сообщений: 666
Регистрация: 25.10.2010
Российская Федерация  strelok200
Суббота, 01.10.2011, 10:28 | Сообщение # 9
Под прикрытием смерти (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
Статус:
Ветеран:
Сообщений: 4356
Награды: 6
Регистрация: 25.10.2010

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

Хех. Квесты поговорить делаются элементарно. Можно было не писать сюда бред.
  Злобная реклама
Вторник, 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
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: