Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретическая часть.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
450.05 Кб
Скачать

Урок 9. Создание квеста с добавлением дополнительных внутри этапных заданий. Особенности - отсутствие диалогов, добавление тайников в качестве квестовых предметов.

Данный урок практически полностью аналогичен тому, что был изложен ранее. Его основной отличительной особенностью от предыдущего является только то, что выполнение внутренних подквестов будет завязано на исследовании тайников (взятие квестовых предметов из них). Будет показан принцип добавление в игру тайников определенных отдельным классом и их заполнение различными предметами. Поэтому урок будет приведен по максимуму сокращенно, с указанием только основных особенностей и списком всех используемых файлов. Полностью просмотреть вносимые изменения вы сможете скачав пример с отработанным заданием или же изучив материал из предыдущего урока. 

Используемые файлы:

1. конфигурационные в (gamedata\configs\gameplay\)  -info_zaton.xml  2. конфигурационные в (gamedata\configs\misc\)  - tm_zaton.ltx  - quest_items.ltx  3. конфигурационные в (gamedata\configs\text\rus\)  - st_quests_zaton.xml  4. конфигурационные в (gamedata\configs\scripts\zaton\)  - файлы логик рестрикторов и объектов  6. скриптовый в (gamedata\scripts\)  - bind_stalker.script  - new_tasks.script  7. all.spawn. (gamedata\spawns\)  - alife_zaton.ltx 

Определим в файле quest_items.ltx две родительские секции для создания предмета нового класса "квестовый рюкзак". 

Code

[default_inventory_box]  GroupControlSection    = spawn_group  discovery_dependency    =  $spawn    = "devices\default_inventory_box"  class   = O_INVBOX  cform   = skeleton  visual   = dynamics\devices\dev_rukzak\dev_rukzak.ogf  script_binding          = bind_physic_object.init  radius                  = 3  inv_grid_width  = 2  inv_grid_height  = 2  inv_grid_x  = 0  inv_grid_y  = 38  cost   = 3500  can_take  = true  inv_weight  = 1.14  description  =    inv_name  =    inv_name_short  =    [quest_rukzak]:default_inventory_box  $spawn    = "devices\quest_rukzak"  visual   = dynamics\devices\dev_rukzak\dev_rukzak.ogf 

В дальнейшем нами будет использоваться переопределенный класс quest_rukzak с определенным визуалом dynamics\devices\dev_rukzak\dev_rukzak.ogf. В классе default_inventory_box определяются другие основные параметры. 

Вся остальная структура добавляемых изменений аналогично указанным ранее. По другом задается только основной квестовый скрипт в файле new_tasks.script 

Code

--/Квест Example  function task_spec()  local level_name=level.name()     if level_name=="zaton" then        if has_alife_info("zat_test_quest_begin") and not has_alife_info("zat_test_quest_spawn_items") then                   alife():create("zat_test_stalker_container_1_spot",vector():set(210.996811,15.980440,480.381104),1323235,6)           alife():create("zat_test_stalker_container_2_spot",vector():set(267.914307,17.374102,483.001709),1424536,6)           alife():create("zat_test_stalker_container_3_spot",vector():set(305.260254,18.979174,532.515625),1484018,287)               news_manager.send_tip(db.actor, "Для начала займи указанную точку", nil, nil, 14000)           db.actor:give_info_portion("zat_test_quest_spawn_items")                    end        if has_alife_info("zat_test_quest_rest_main_come") and not has_alife_info("zat_test_quest_spawn_items_2") then                 local x1_cell=alife():create("quest_rukzak",vector():set(210.996811,15.980440,480.381104),1323235,6)                  parse_table=utils.parse_spawns("zat_test_quest_item_info_1,af_medusa,wpn_ak74,stalker_outfit,wpn_pm")                    for k,v in pairs(parse_table) do                      for i=1,v.prob do                      alife():create(v.section,vector(),0,0,x1_cell.id)                    end           end           local x2_cell=alife():create("quest_rukzak",vector():set(267.914307,17.374102,483.001709),1424536,6)                  parse_table=utils.parse_spawns("zat_test_quest_item_info_2,af_ice,wpn_abakan,dolg_outfit,wpn_pm")                    for k,v in pairs(parse_table) do                      for i=1,v.prob do                      alife():create(v.section,vector(),0,0,x2_cell.id)                    end           end           local x3_cell=alife():create("quest_rukzak",vector():set(305.260254,18.979174,532.515625),1484018,287)                  parse_table=utils.parse_spawns("zat_test_quest_item_info_3,af_fire,wpn_lr300,svoboda_light_outfit,wpn_pm")                    for k,v in pairs(parse_table) do                      for i=1,v.prob do                      alife():create(v.section,vector(),0,0,x3_cell.id)                    end           end                      news_manager.send_tip(db.actor, "Чтобы выполнить тестовое задание необходимо исследовать все тайники.", nil, nil, 14000)           db.actor:give_info_portion("zat_test_quest_spawn_items_2")                    end     if (not has_alife_info("zat_test_quest_item_1_used")) and has_alife_info("zat_test_quest_spawn_items_2") and    db.actor:object("zat_test_quest_item_info_1") then                      db.actor:give_info_portion("zat_test_quest_item_1_used")                  end     if (not has_alife_info("zat_test_quest_item_2_used")) and has_alife_info("zat_test_quest_spawn_items_2") and db.actor:object("zat_test_quest_item_info_2") then              db.actor:give_info_portion("zat_test_quest_item_2_used")                   end      if (not has_alife_info("zat_test_quest_item_3_used")) and has_alife_info("zat_test_quest_spawn_items_2") and db.actor:object("zat_test_quest_item_info_3") then              db.actor:give_info_portion("zat_test_quest_item_3_used")                   end      if has_alife_info("zat_test_quest_item_1_used") and has_alife_info("zat_test_quest_item_2_used") and has_alife_info("zat_test_quest_item_3_used") and        not has_alife_info("zat_test_quest_all_item_used") then      db.actor:give_info_portion("zat_test_quest_all_item_used")     end     end  end 

Особенности:  - при старте задания создаются квестовые метки  - при достижении позиции актора внутри основного рестриктора происходит создание трех квестовых тайников quest_rukzak по заданным координатам и их заполнение различными предметами.  - при обыски тайника и взятии ГГ квестового предмета из него происходит выдача инфопоршеней на завершение внутренних подзаданий.  - после обыска всех трех тайников выдается основной инфопоршень на обновление основного задания.