CoP. Создание квеста на уничтожение отряда — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
ZeeK (обсуждение | вклад) (Новая страница: «Здравствуйте, уважаемые фанаты модинга ЗП, сегодня я попробую объяснить создание квеста н...») |
(<<< aka_sektor) |
||
(не показаны 3 промежуточных версий 2 участников) | |||
Строка 7: | Строка 7: | ||
Создаем там отряд, к примеру, псевдогиганта | Создаем там отряд, к примеру, псевдогиганта | ||
− | [zat_giant_for_quest]:online_offline_group | + | ''[zat_giant_for_quest]:online_offline_group'' |
− | story_id = zat_b52_giant_for_quest_squad -- важно дать id, чтобы по квесту отслеживать отряд по метке | + | |
− | faction = monster_predatory_day | + | ''story_id = zat_b52_giant_for_quest_squad'' -- важно дать id, чтобы по квесту отслеживать отряд по метке |
− | npc = gigant_normal | + | |
− | on_death = %+zat_giant_for_quest_death% -- необходимая инфа, чтобы засчитать квест, после гибели отряда и для перезапуска | + | ''faction = monster_predatory_day'' |
+ | |||
+ | ''npc = gigant_normal'' | ||
+ | |||
+ | ''on_death = %+zat_giant_for_quest_death%'' -- необходимая инфа, чтобы засчитать квест, после гибели отряда и для перезапуска | ||
'''Второе, распаковываем all.spawn и создаем секцию-рестриктор для логики квеста''' | '''Второе, распаковываем all.spawn и создаем секцию-рестриктор для логики квеста''' | ||
− | [1868] | + | ''[1868] |
; cse_abstract properties | ; cse_abstract properties | ||
+ | |||
section_name = space_restrictor | section_name = space_restrictor | ||
+ | |||
name = zat_giant_quest_logic -- название рестриктора | name = zat_giant_quest_logic -- название рестриктора | ||
+ | |||
position = 150.076538085938,1.77096498012543,94.8425521850586 | position = 150.076538085938,1.77096498012543,94.8425521850586 | ||
+ | |||
direction = 0.00209100008942187,3,-0.00126799999270588 | direction = 0.00209100008942187,3,-0.00126799999270588 | ||
+ | |||
; cse_alife_object properties | ; cse_alife_object properties | ||
+ | |||
game_vertex_id = 0 | game_vertex_id = 0 | ||
+ | |||
distance = 0 | distance = 0 | ||
+ | |||
level_vertex_id = 293223 | level_vertex_id = 293223 | ||
+ | |||
object_flags = 0xffffff3e | object_flags = 0xffffff3e | ||
+ | |||
custom_data = <<END | custom_data = <<END | ||
+ | |||
[logic] | [logic] | ||
+ | |||
cfg = scripts\zaton\zat_giant_quest_logic.ltx -- ! логика задания, которая будет обрабатывать инфопоршни и запускать таймер | cfg = scripts\zaton\zat_giant_quest_logic.ltx -- ! логика задания, которая будет обрабатывать инфопоршни и запускать таймер | ||
+ | |||
END | END | ||
+ | |||
; cse_shape properties | ; cse_shape properties | ||
+ | |||
shapes = shape0 | shapes = shape0 | ||
+ | |||
shape0:type = sphere | shape0:type = sphere | ||
+ | |||
shape0:offset = 0,0,0 | shape0:offset = 0,0,0 | ||
+ | |||
shape0:radius = 1 | shape0:radius = 1 | ||
+ | |||
; cse_alife_space_restrictor properties | ; cse_alife_space_restrictor properties | ||
− | restrictor_type = 3 | + | |
+ | restrictor_type = 3'' | ||
+ | |||
'''Третье, пишем логику''' | '''Третье, пишем логику''' | ||
[logic] | [logic] | ||
+ | |||
active = sr_idle -- думаю понятно, логика ждет активации | active = sr_idle -- думаю понятно, логика ждет активации | ||
− | |||
[sr_idle] | [sr_idle] | ||
+ | |||
on_info = {+zat_b52_giant_quest_give('''это выданный в диалоге инфопоршень старта, который запускает логику!''')} sr_idle2 %=create_squad(zat_stalker_for_quest:zat_sim_13)(ну тут понятно - мы создали только что отряд для квеста на точке zat_sim_13, можно бежать и валить))% | on_info = {+zat_b52_giant_quest_give('''это выданный в диалоге инфопоршень старта, который запускает логику!''')} sr_idle2 %=create_squad(zat_stalker_for_quest:zat_sim_13)(ну тут понятно - мы создали только что отряд для квеста на точке zat_sim_13, можно бежать и валить))% | ||
[sr_idle2] | [sr_idle2] | ||
+ | |||
on_info = {+zat_b52_giant_quest_done} sr_idle@timer -- тоже понятно, в диалоге, после получения инфопоршня '''zat_giant_for_quest_death''' от убитого отряда, я просто выдал еще один поршень, который "выключает квест", пока не пройдет таймер | on_info = {+zat_b52_giant_quest_done} sr_idle@timer -- тоже понятно, в диалоге, после получения инфопоршня '''zat_giant_for_quest_death''' от убитого отряда, я просто выдал еще один поршень, который "выключает квест", пока не пройдет таймер | ||
Строка 58: | Строка 85: | ||
Добавлю, что в логике можно играться с поршнями создавать отряды в помощь, убивать отряды, давать им разные цели после\во время квеста и т.д., все зависит от вашей фантазии и грамотности в написании диалога и выдаче инфопоршней с помощью логики\скриптов | Добавлю, что в логике можно играться с поршнями создавать отряды в помощь, убивать отряды, давать им разные цели после\во время квеста и т.д., все зависит от вашей фантазии и грамотности в написании диалога и выдаче инфопоршней с помощью логики\скриптов | ||
− | П.С. Можно создавать квест и на убийство отдельного сталкера, без регистрации в squad_descr и создания логики, просто создав НПС с '''story_id''' в '''spawn_sections''', чтобы можно было вешать метку и спавнить его через диалог путем скрипта '''alife():create'''(через таблицу кординат можно создать иллюзию рандом-спавна путем команды math.random | + | П.С. Можно создавать квест и на убийство отдельного сталкера, без регистрации в '''squad_descr''' и создания логики, просто создав НПС с '''story_id''' в '''spawn_sections''', чтобы можно было вешать метку и спавнить его через диалог путем скрипта '''alife():create'''(через таблицу кординат можно создать иллюзию рандом-спавна путем команды '''math.random''' |
− | Нужно только тоже прописать ему on_death = %+инфопоршень о смерти% и играть с таймером и поршнем в диалоге, так можно не трогать алл.спавн | + | Нужно только тоже прописать ему '''on_death = %+инфопоршень о смерти%''' и играть с таймером и поршнем в диалоге, так можно не трогать '''алл.спавн''' |
'''Автор: ZeeK''' | '''Автор: ZeeK''' | ||
+ | |||
+ | Добавлю: функция create_squad из xr_effects.script работает только в том случае, если у смарт-террейна в котором вы собираетесь спанить сквад, есть точка спавна way_point, котороя прописана в конфиге смарта. Ну и для просто спавна сквада, не обязательно создавать рестриктор в аллспавне, можно вызвать эту функцию из своей, которая вызывается через action диалога: | ||
+ | xr_effects.create_squad(zat_stalker_for_quest:zat_sim_13) | ||
+ | |||
+ | by Clayman. | ||
+ | |||
+ | '''Дополнение к тексту от Clayman.''' | ||
+ | Насколько я помню в ЗП отсутствуют скриптовые таймеры, в результате спавна функцией '''xr_effects.create_squad(zat_stalker_for_quest:zat_sim_13)''' | ||
+ | модер столкнется с тем, что квест будет одноразовый(т.к. файла логики с таймером), либо невозможно будет отключать квест на время, так что этот способ подходит для единичного квеста, без повторов. | ||
+ | [[Категория:Неоформленные статьи]] |
Текущая версия на 23:19, 19 марта 2014
Здравствуйте, уважаемые фанаты модинга ЗП, сегодня я попробую объяснить создание квеста на уничтожение отряда в ЗП на основе моего способа. Способ предполагает, что вы умеете хоть немного работать с логикой\скриптами игры. Итак, я не буду описывать все подробно, в обычных местах, таких, как "создадим диалог и прочее". Я надеюсь это вы итак писать умеете. Просто отмечу, что в диалог нужно будет повесить активатор скрипта для выдачи задания и немного поколдовать с инфопоршнями, чтобы, когда выдан инфопоршень(на выдачу квеста или, что квест выполнен, и работает "таймер перезапуска квеста"), квест нельзя было брать повторно.
Первое, создадим отряд на который будет вестись охота. Идем например в squad_descr_zaton.ltx(если отряд будет на Затоне, можете добавить в другие секции squad_descr_название локации или создать отдельный squad_descr файл для мода(я так и сделал)) Создаем там отряд, к примеру, псевдогиганта
[zat_giant_for_quest]:online_offline_group
story_id = zat_b52_giant_for_quest_squad -- важно дать id, чтобы по квесту отслеживать отряд по метке
faction = monster_predatory_day
npc = gigant_normal
on_death = %+zat_giant_for_quest_death% -- необходимая инфа, чтобы засчитать квест, после гибели отряда и для перезапуска
Второе, распаковываем all.spawn и создаем секцию-рестриктор для логики квеста
[1868]
- cse_abstract properties
section_name = space_restrictor
name = zat_giant_quest_logic -- название рестриктора
position = 150.076538085938,1.77096498012543,94.8425521850586
direction = 0.00209100008942187,3,-0.00126799999270588
- cse_alife_object properties
game_vertex_id = 0
distance = 0
level_vertex_id = 293223
object_flags = 0xffffff3e
custom_data = <<END
[logic]
cfg = scripts\zaton\zat_giant_quest_logic.ltx -- ! логика задания, которая будет обрабатывать инфопоршни и запускать таймер
END
- cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 1
- cse_alife_space_restrictor properties
restrictor_type = 3
Третье, пишем логику
[logic]
active = sr_idle -- думаю понятно, логика ждет активации
[sr_idle]
on_info = {+zat_b52_giant_quest_give(это выданный в диалоге инфопоршень старта, который запускает логику!)} sr_idle2 %=create_squad(zat_stalker_for_quest:zat_sim_13)(ну тут понятно - мы создали только что отряд для квеста на точке zat_sim_13, можно бежать и валить))%
[sr_idle2]
on_info = {+zat_b52_giant_quest_done} sr_idle@timer -- тоже понятно, в диалоге, после получения инфопоршня zat_giant_for_quest_death от убитого отряда, я просто выдал еще один поршень, который "выключает квест", пока не пройдет таймер
[sr_idle@timer] on_game_timer = 6000 | %-zat_giant_quest_target1 -zat_b52_giant_quest_give -zat_b52_giant_quest_done -zat_giant_for_quest_death -zat_giant_quest_begin% -- здесь видно, что после отработки таймера, все инфопоршни обнулились и неизвестны игроку, а значит квест вновь свободен для выполнения on_info = {-zat_b52_giant_quest_give} sr_idle -- автоматическое возвращение на начало логики
Добавлю, что в логике можно играться с поршнями создавать отряды в помощь, убивать отряды, давать им разные цели после\во время квеста и т.д., все зависит от вашей фантазии и грамотности в написании диалога и выдаче инфопоршней с помощью логики\скриптов
П.С. Можно создавать квест и на убийство отдельного сталкера, без регистрации в squad_descr и создания логики, просто создав НПС с story_id в spawn_sections, чтобы можно было вешать метку и спавнить его через диалог путем скрипта alife():create(через таблицу кординат можно создать иллюзию рандом-спавна путем команды math.random Нужно только тоже прописать ему on_death = %+инфопоршень о смерти% и играть с таймером и поршнем в диалоге, так можно не трогать алл.спавн
Автор: ZeeK
Добавлю: функция create_squad из xr_effects.script работает только в том случае, если у смарт-террейна в котором вы собираетесь спанить сквад, есть точка спавна way_point, котороя прописана в конфиге смарта. Ну и для просто спавна сквада, не обязательно создавать рестриктор в аллспавне, можно вызвать эту функцию из своей, которая вызывается через action диалога: xr_effects.create_squad(zat_stalker_for_quest:zat_sim_13)
by Clayman.
Дополнение к тексту от Clayman. Насколько я помню в ЗП отсутствуют скриптовые таймеры, в результате спавна функцией xr_effects.create_squad(zat_stalker_for_quest:zat_sim_13) модер столкнется с тем, что квест будет одноразовый(т.к. файла логики с таймером), либо невозможно будет отключать квест на время, так что этот способ подходит для единичного квеста, без повторов.