Сповіщення
Очистити все

Налаштування логіки. Частина 3


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
7 місяців тому
 

Скрипт logic

Скрипт logic керує перемиканням схем.
У custom_data будь-якого персонажа (крім вільних) має бути присутня секція [logic] .

Функції, на які посилається секція [logic] повинні знаходитись у файлах gamedata\scripts\xr_effects.script або gamedata\scripts\xr_conditions.script .

У секції має бути одне з полів:

  • active = <назва_схеми> - активна схема, що запускається першою.
  • cfg = <ім'я_ltx_файла_з_налаштуваннями> - спосіб задавати логіку персонажа, виносячи її у зовнішній файл (шлях враховується щодо папки gamedata\config\scripts ).

приклад. Налаштування простого walker :

[logic]
active = walker
 
[walker]
path_walk = walk1
path_look = look1

Перемикання схем виконується за допомогою додаткових умов схеми logic , які прописуються в секції активної поточної схеми. Існують такі умови перемикання:

  • on_actor_dist_le = <number>|<назва_схеми> - якщо дистанція в метрах до гравця менше або дорівнює number .
  • on_actor_dist_le_nvis = <number>|<назва_схеми> - якщо дистанція в метрах до гравця менше або дорівнює number без перевірки на видимість.
  • on_actor_dist_ge = <number>|<назва_схеми> - якщо дистанція в метрах до гравця більша за number .
  • on_actor_dist_ge_nvis = <number>|<назва_схеми> - якщо дистанція в метрах до гравця більша за number без перевірки на видимість.
  • on_signal = <ім'я_сигналу>|<назва_схеми> - спрацьовує після приходу сигналу ім'я_сигналу від поточної активної схеми.
  • on_info = <назва_схеми> - спрацьовує завжди.
  • on_timer = <number>|<назва_схеми> - спрацьовує через number мілісекунд після включення схеми.
  • on_game_timer = <number>|<назва_схеми> – спрацьовує через number секунд ігрового часу після включення схеми.
  • on_actor_in_zone = <ім'я_зони>|<назва_схеми> – якщо актор знаходиться у зазначеній зоні (вказується ім'я рестриктора).
  • on_actor_not_in_zone = <ім'я_зони>|<назва_схеми> - якщо актор не в зазначеній зоні (вказується ім'я рестриктора).
  • on_npc_in_zone = <number>|<ім'я_зони>|<назва_схеми> – якщо NPC зі story_id рівному number , у зазначеній зоні.
  • on_npc_not_in_zone = <number>|<ім'я_зони>|<назва_схеми> - якщо NPC зі story_id рівному number , не в зазначеній зоні.
  • on_actor_inside = <назва_схеми> - зона перевіряє, чи гравець всередині неї (використовується зі space_restrictor ).
  • on_actor_outside = <назва_схеми> - зона перевіряє, чи гравець її межами (використовується зі space_restrictor ).

Примітка : якщо відбувається перемикання між кількома однойменними схемами (наприклад декількома walker ), то їх можна нумерувати: walker1 , walker2 , хоча краще через символ ' @ ' давати більш інформативні назви: walker@day , walker@alarm і т.д.

З будь-якими з перерахованих вище параметрів можна працювати наступним чином:
on_info = {…} %…%
on_info2 = {…} %…%
on_info3 = {…} %…%
і так далі до посиніння

А також умови для перемикання на описані вище розділи.
combat_ignore_cond=
on_hit=
on_death=
on_combat=
on_use=

Синтаксис скрипта Logic

Для того, щоб персонаж ходив шляхом walk1 , а при наближенні гравця на дистанцію 5 метрів, перемикався на шлях walk2 (але лише за умови, що він бачить гравця), потрібно написати наступне:

[logic]
active = walker@first
 
[walker@first]
path_walk = walk1
path_look = look1
on_actor_dist_le = 5 | walker@second
 
[walker@second]
path_walk = walk2
path_look = look2

 

Вище розглянуто безперечне перемикання секцій.
Перед ім'ям секції у фігурних дужках {} можна задавати додаткові умови , а після імені секції - так звані " ефекти ", які укласти в знаки відсотка %% . Ефекти будуть застосовані тільки у разі виконання умов, якщо таких немає, то ефект виконається безумовно.
Можна не задавати перехід на іншу схему, вказуючи її ім'я, а задати лише умови та/або ефекти. Тоді активною залишиться діюча схема, але умови та ефекти будуть все одно опрацьовані. Якщо всі умови у фігурних дужках не виконуються, схема не буде активована.

Приклад :

on_actor_dist_le = 5 | { умова } walker@second %ефекти% 

Умови можуть бути такими:

  • + infoportion - потрібна наявність інфопорції " infoportion " в актора;
  • -infoportion - Потрібна відсутність інфопорції " infoportion " у актора;
  • =function - потрібно, щоб функція " function " повернула true ;
  • !function - потрібно, щоб функція " function " повернувся false ;
  • ~number - ймовірність виконання умови.

Ефекти можуть бути такими:

  • +infoportion - у разі включення секції у актора буде встановлено інфопорцію " infoportion ";
  • -infoportion - у разі включення секції у актора буде прибрано інфопорцію " infoportion ";
  • =function - у разі включення секції стартує функція " function ".

Примітка : для умови перемикання схеми {~number} визначено наступний розрахунок:

number порівнюється з випадковим числом в діапазоні від 1 до 100, якщо number більше, то вважається, що умова повернула істину, наприклад:
on_actor_in_zone = restrictor_name | {~30} walker@second

Якщо декілька умов, наприклад:

on_actor_dist_le = 5 | {~20} walker@second, {~55} walker@third, walker@fourth

У такому випадку, перехід на схему walker@second відбудеться з ймовірністю 20%, на схему walker@third з ймовірністю 55-20=35% і на схему walker@fourth з ймовірністю 100-55=45%.
Умови у разі необхідно виставляти виключно порядку зростання.
Невдалий приклад:
on_actor_dist_le = 5 | {~40} walker@second, {~25} walker@third, walker@fourth
Тут перехід на схему walker@third ніколи не буде визначений, а можливість переходу на схему walker@fourth складе 60%.

 

Примітка : кілька умов або ефектів розділяються пробілами:

on_actor_dist_le = 5 | { +info_1 -info_2 +info_3 } walker@second %+info_4 =func% 

Можна задавати відразу кілька секцій, розділених комами. Порядок обходу у своїй - зліва направо. Після спрацювання першої з умов обхід припиняється. У прикладі нижче, якщо встановлено info_1 , буде включено схему walker@second , інакше, якщо встановлено info_2 , буде включено схему walker@third , інакше буде включено walker@fourth :

on_actor_dist_le = 5 | {+info_1} walker@second, {+info_2} walker@third, walker@fourth

В описаному вище полі active секції logic можна також задавати умови, наприклад:

[logic]
active = {=actor_friend} walker@friendly, walker@enemy

У логічних умовах тепер приймається ключове слово never , яке означає, що умова є хибною. Наприклад:

combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %=gar_dm_bandits_fight%

Наведена вище конструкція включає ігнорування бою, якщо у NPC ворог гравець у костюмі, але відключить його, якщо ворогом є гравець, але без костюма, при цьому спрацюють ефекти (%%) секції never . Таким чином, вибір секції never рівносильний відсутності секції (неспрацьовування умови), але ефекти у знаках відсотка при цьому спрацьовують.

Приклад роботи із секцією nil .

Секція nil виводить з-під скриптових схем персонажа, монстра чи об'єкт і відпускає його під керування двигуном. Це потрібно якщо якась умова виконавшись один раз більше не потребує перевірки, при цьому економляться ресурси машини, які на кожному апдейті перевіряють цю умову. Наприклад:

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = nil %+esc_actor_inside%

Тобто, при вході актора до рестриктора видається інфопорція і рестриктор йде у секцію nil , більше не перевіряючи наявність гравця.

Примітка : назад із секції nil під скрипти об'єкт повернути вже неможливо! Зважайте на це, використовуючи її.

Приклад досить складної логіки

[logic]
active = walker
combat_ignore = combat_ignore
on_hit = hit
on_death = death
 
[hit]
on_info = %+alert%
 
[death]
on_info = %+alert +trup3%
 
[walker]
path_walk = walk_svoboda3
path_look = look_svoboda3
combat_ignore_cond = {-alert}
on_timer = 25000 | remark
 
[remark]
anim = idle
snd = stalker_talk_kampfire
no_move = true
no_rotate = true
combat_ignore_cond = {-alert}
 
[combat_ignore]

Розглянемо її покроково.
Спочатку сталкер працює за схемою walker . При цьому він ігнорує бій, доки не буде поставлений інфопоршн alert' . Він чекає 25 секунд, після чого переходить у схему remark . У ремарку він програє анімацію idle , говорить на зазначені теми, не повертається і не рухається і так само ігнорує бій. Якщо по ньому потраплять ( on_hit ) або уб'ють ( on_death ), буде поставлений інфопоршн alert і він перестане ігнорувати бій (зрозуміло, що якщо він буде трупом, то йому не допоможе, але їх у сценці троє, і тоді зірвуться в бій усі інші ). Якщо його вб'ють, то також буде поставлений інфопоршн trup3 , який повідомить про те, що цей NPC убитий.

А ось логіка його супротивника:

[logic]
active = walker
combat_ignore = combat_ignore
 
[walker]
path_walk = soldier_walk1
path_look = soldier_look1
combat_ignore_cond = always
team = assault_group
on_signal = assault | camper
 
[camper]
path_walk = soldier_walk1_2
path_look = soldier_look1_2
radius = 5
on_info = {+trup1 +trup2 +trup3} walker2
 
[walker2]
path_walk = soldier_walk1_3
path_look = soldier_look1_3
 
 
[combat_ignore]

Він йде у схемі walker , ігноруючи бій (причому ігноруючи у будь-якій ситуації). Йде у складі групи assault_group . Коли він приходить в кінцеву точку маршруту (там він синхронізується з рештою групи, це приписано в шляхах) і отримує сигнал assault , то переходить в схему camper . У цій схемі він не прописаний combat_ignore , тому він починає стріляти по противнику. Після того, як всі троє противників будуть убиті, кожен з них, помираючи, ставить інфопоршн trup1 , trup2 або trup3 і коли всі троє будуть убиті, то він перейде на схему walker2 (підійде до вогнища).

Схеми логіки space_restrictor

Щоб виключити ситуацію, коли актор проскакує через рестриктор і той не встигає спрацювати, намагайтеся ставити рестриктор так, щоб мінімальна ширина була більше 2 метрів .

Схема sr_idle

Призначення цієї схеми – включити іншу схему під час спрацьовування однієї зі стандартних умов логічної схеми.
Сама собою схема нічого не робить.

[sr_idle]
on_actor_inside = nil %+esc_actor_inside%

Зверніть увагу, що після спрацювання перевірки активна схема перемикається в nil , щоб не продовжувати марну перевірку на кожному апдейті. Можна не ставити nil .
Часто ця схема працює разом зі спавнером, рестриктор видає інфопоршн, при вході в зону, а спавнер по ньому вже когось спавнить.

Приклад використання схеми :

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = {+val_raid_start -esc_return -esc_trader_speak} nil %=esc_return_dv +esc_return +esc_trader_speak%

файл gamedata\scripts\sr_idle.script

Схема sr_no_weapon

Ця схема прибирає зброю у гравця під час входу до зони.

[sr_no_weapon]

Приклад використання схеми :

[logic]
active = sr_no_weapon
 
[sr_no_weapon]

файл gamedata\scripts\sr_no_weapon.script

Схема sr_sound

Схема призначена для відігравання звуку при вході актора до space_restrictor .

[sr_sound]
snd = <шлях_звукового_файлу> - перелік імен звуків розділених комами (шлях враховується щодо папки gamedata\sounds ).
type = <параметр> - типи звуків через коми. Для зручності введені типи наборів звуків у таблиці sound_types файлу, що управляє. Усього їх три:

  • floor_wooden ;
  • rats_panic ;
  • random .

delay = <number> - затримка перед відтворенням звуку в секундах реального часу, за умовчанням 0.
idle = <number> - довжина періоду ігнорування входу в зону після початку останнього програного звуку.

Щоб, наприклад, "завивання" було не частіше, ніж раз на кілька хвилин. Вказується у секундах ігрового часу. Типово 0.

rnd = <number> - ймовірність (у відсотках) те, що звук відіграється. 100.
position = <ім'я_шляху> - задає ім'я шляху, у вершинах якого може відігратися звук.

Є зарезервоване значення random . Воно означає випадкове місце у радіусі від 15 до 50 метрів від гравця. Якщо цей параметр не заданий, то мається на увазі позиція гравця.

slide_velocity = <number> - швидкість (м/с) пересування звуку по точках патрульного шляху. За промовчанням - 3.
slide_sound_once = true\false - у разі значення true - програти звук один раз, навіть якщо він не дійшов до останньої точки шляху,

інакше, якщо false – і якщо звук закінчився, а до останньої точки шляху не дійшов, запустити його ще раз. За промовчанням false .

play_at_actor = true/false - змушує звук грати від позиції актора постійно.

Якщо він дорівнюватиме true і буде заданий шлях переміщення звуку (або рандом), то ми тупо вилетимо.

Підтримується сигнал sound_end .

Обов'язково потрібно задати або snd , або type . Можна їх поставити разом. За підсумками цих параметрів складається список звуків. При вході актора до рестриктора відіграється випадковий звук із цього списку.

 

Приклад використання схеми :

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = sr_sound@shooting
 
[sr_sound@shooting]
snd = characters_voice\scenario\garbage\grey_grey_1
play_at_actor = true
on_signal = sound_end| nil
on_timer = 20000| nil

Є можливість зробити «ковзний звук». Необхідний патрульний шлях. Звук починає відіграватися з початку шляху і переміщається від однієї точки до іншої (у міру їх встановлення на патрульному шляху) зі швидкістю slide_velocity . Приклад:

[logic]
active = sr_sound
 
[sr_sound]
type = random
position = way
slide_velocity = 8
slide_sound_once = true

Файл gamedata\scripts\sr_sound.script

Схема sr_tip

Призначення цієї схеми – давати гравцеві повідомлення (підказку) під час входу в рестриктор.

[sr_tip]
name = <ім'я_тексу> - рядок з id тексту зареєстрованого в папці gamedata\config\text .
type = news/tips - параметр рудиментарний і ні на що не впливає.
sender = <параметр> - визначає умовний рядковий ідентифікатор іконки персонажа, від якого нібито надійшло повідомлення.

За промовчанням це іконка продавця. Можливі наступні значення: default, trader, dolg, freedom, ecolog, arena, stalker, krot, barman, wolf, o_soznanie, monolith, saharov, prizrak, killer .

cond = {+info -info =func !func ~number} - необхідні логічні умови, за яких підказка спрацює. За дефолтом спрацює при вході в зону.
single = true/false - якщо параметр true , то типс буде виданий лише один раз. За промовчанням false .
timeout = <number> – затримка виведення повідомлення в секундах. За замовчуванням – 0.
showtime = <number> – час показу повідомлення на екрані. Задається у мілісекундах. За замовчуванням – 5000.

Підтримується сигнал tip_sended лише у випадку встановленого параметра single .

Приклад використання схеми :

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = sr_tip
 
[sr_tip] 
name = rad_barman_spam
type = tips
cond = {+bar_deactivate_radar_done} 
sender = barman
on_actor_inside = nil
showtime = 25000

файл gamedata\scripts\sr_tip.script

Схема sr_light

Зона, що управляє ввімкн./відкл ліхтариків NPC.

[sr_light]
light_on = true/false - світло увімкнено/вимкнено.

Приклад використання схеми :

[logic]
active = sr_light
 
[sr_light]
light_on = true

Файл: gamedata\scripts\sr_light.script

Схема sr_territory

Займається ця схема тим, що відловлює будь-які події, що відбуваються всередині рестриктора. Поки що вона відловлює лише хіти та смерть NPC.

[sr_territory]
territory_hit = {+info -info =func !func ~number} %+info -info =func% - ефекти, які відбудуться при нанесенні хіта від актора, будучи в цій зоні.
territory_death = {+info -info =func !func ~number} %+info -info =func% - ефекти, які відбудуться при смерті від "рук" актора, будучи в цій зоні.

Оскільки схема працює тільки з гравцем – то хіти та смерть зараховуються лише від гравця.

Приклад використання схеми :

[logic]
active = sr_territory@1
 
[sr_territory@1]
territory_death = sr_idle@1 %+bar_arena_territory_death%

Файл: gamedata\scripts\sr_territory.script

Схема sr_mapspot

При вході до рестриктора він сам себе підсвічує на карті.

[sr_mapspot]
hint = <ім'я_тексу> - рядок з id тексту зареєстрованого в папці gamedata\config\text .
location = <ім'я_мітки> - ім'я типу мітки, зареєстроване у файлі config\ui\map_spots.xml і всіх, що в нього включені інклюдами. За замовчуванням crlc_small .

Приклад використання схеми :

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = sr_mapspot
 
[sr_mapspot]
hint = gar_swamp
location = crcl_big

Файл: gamedata\scripts\sr_mapspot.script

Схема sr_particle

Ця система відіграє партикли, як статичні, і рухомі, у зазначеному місці й у вказаний час.

[sr_particle]
name = <ім'я_партиклу> - шлях до партикла щодо файлу particles.xr .
path = <ім'я_шляху> - точки руху партикла. Можливі два випадки:

  1. Коли вказується шлях анімації камери (шлях враховується щодо папки gamedata\anims );
  2. Коли вказується ім'я патрульного шляху.

mode = <параметр> - параметр обов'язковий і має два значення:

  • 1 - встановлюється у разі вказівки анімації камери для параметра path ;
  • 2 - встановлюється у разі вказівки патрульного шляху параметра path .

looped = true/false – прапор зацикленості партиклів.

Примітка : Для руху партикла, коли встановлено анімацію руху камери, для імені файлу необхідно ставити розширення .anm (наприклад arena.anm ).

Підтримується сигнал particle_end .

У вейпоінтах патрульного шляху можна задавати прапори:

  • s=<назва_звукової_теми> - звук, що програється під час руху;
  • d=<number> - час затримки перед програванням, задається в мілісекундах. За замовчуванням – 0.

При looped = true , після закінчення програвання партиклів, вони запускатимуться спочатку, але вже без затримок. Сигнал particle_end не буде видаватися.
При looped = false сигнал буде видано, коли всі джерела партиклів відіграють.

Дана схема відстежує партикли і немає жодної необхідності щоб гравець в нього заходив.

Приклад використання схеми :

[logic]
active = sr_idle
 
[sr_idle]
on_info = {+sar_mon_poltergeist_1_spawn} sr_particle
 
[sr_particle]
name = anomaly2\gravity_blast_03      
path = sar_poltergeist_1_way                  
mode = 2 				
looped = false               
on_signal = particle_end | sr_idle@2

Файл: gamedata\scripts\sr_particle.script

Схема sr_sound_act

Схема грає звук у голові актора. Будь-які там переговори щодо ПДА та інші фейки.

[sr_sound_act]
snd = <шлях_звукового_файлу> - ім'я звукового файлу щодо папки gamedata\sounds .
delay = <number> – затримка перед програванням. За промовчанням - 0.
delay_max = <number> - між програванням звуку буде взято випадковий проміжок між delay та delay_max .
theme = <назва_звукової_теми> - ім'я теми з файлу sound_theme.script .
stereo = true/false - при встановленні цього параметра файлу, який заданий параметром snd або в звуковій темі,

автоматично додаватимуться суфікси _r та _l для завантаження лівого та правого каналів і, відповідно, все це програватиметься.

Підтримується сигнал sound_end .

Якщо вказується тема, то звук гратиме зациклено, випадково вибираючи одне із звуків прописаних у темі, якщо вказується звук, він відіграється один раз.

Приклад використання схеми :

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = sr_sound_act
 
[sr_sound_act]
theme = sar_monolith_call
delay = 10000
delay_max = 15000
stereo = true
on_info = {+sar2_monolith_miracle} sr_idle@end

Файл: gamedata\scripts\sr_sound2d.script

Схема sr_timer

Схема використовуватиме для виробництва будь-яких дій залежно стану таймера.

[sr_timer]
type = dec/inc – тип лічильника.

  • dec – декриментуючий, тобто. Зворотній відлік;
  • inc - що інременує, тобто. звіт за зростанням.

start_value = <number> - початкове значення лічильника у реальних мілісекундах.

Для декриментуючих лічильників ставити обов'язково. Для інкриментуючих, якщо не поставлено, то зважає на 0.

on_value = <number>|%+info -info =func% <назва_схеми> - робить дію залежно від стану лічильника.
string = <ім'я_тексу> - рядок з id тексту зареєстрованого в папці gamedata\config\text .

Приклад використання схеми :

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = sr_timer@1
 
[sr_timer@1]
type = dec
start_value = 1000000
on_value = 5 | %=play_snd(characters_voice\scenario\radar\rad_hat_2)% | 0 | nil %=aes_kill_actor%
on_actor_outside = sr_idle
on_info = {+bar_deactivate_radar_done} nil
string = st_helmet_countdown

Файл: gamedata\scripts\sr_timer.script

Схема sr_psy_antenna

Зони з такою секцією дозволяють керувати ефектами від псі-дії (на Янтарі та Радарі). Зараз можна керувати інтенсивністю випромінювання та інтенсивністю отримання пошкоджень.

[sr_psy_antenna]
eff_intensity = <number> - збільшення/зменшення у відсотках від базового значення інтенсивності випромінювання.
hit_intensity = <nymber> - збільшення/зменшення у відсотках від базового значення пошкодження, що наноситься.
phantom_prob=<nymber> - ймовірність прояву фантомів у відсотках. За умовчанням - 0.
postprocess = <ім'я_постефекту> - файл постефекту, щодо папки gamedata\anims . Розширення ставити обов'язково! За замовчуванням - psy_antenna.ppe .
mute_sound_threshold = <number> - межа до якої можна занижувати звук рівня. 0 – глушить повністю, стоїть за замовчуванням.

Приклад використання схеми :

[logic]
active = sr_psy_antenna@good_helmet
 
[sr_psy_antenna@good_helmet]
eff_intensity = -10
hit_intensity = 0
phantom_prob = 45

Файл: gamedata\scripts\sr_psy_antenna.script

Схема sr_teleport

Схема дозволяє телепортувати актора у межах локації.

[sr_teleport]

point = <ім'я_шляху> - патрульний шлях з однієї точки, куди переміститься актор.
look = <ім'я_шляху> - патрульний шлях з однієї точки, куди дивитися актор після переміщення.
prob = <number> - можливість переміщення в задану точку. За замовчуванням - 100.
timeout = <number> - затримка спрацьовування телепорту мілісекундах. За замовчуванням – 900.

Телепорти бажано ставити разом із особливою аномальною зоною (партиклом). Зона додасть візуалізацію та створить ефект втягування.

Приклад використання схеми :

[logic]
active = sr_teleport
 
[sr_teleport]
point1 = aes2_teleport_walk_exit1
look1 = aes2_teleport_look_exit1
prob1 = 10
point2 = aes2_teleport_walk_exit2
look2 = aes2_teleport_look_exit2
prob2 = 20
timeout = 0

Файл: gamedata\scripts\sr_teleport.script

Схема sr_sleep

З'явилася можливість задавати зони сну.

[sr_sleep]
cond = {+info -info =func !func ~number} - умови, у яких сон буде можливий.
type = nightmare/normal/happy/all - задає тип сну дозволений у цій зоні (за замовчуванням all ). Впливає (групує) тільки на сценарні сни. dream_prob = <number> - можливість перегляду не сценарних сновидінь у цій зоні (за замовчуванням 80). Інакше буде лише чорний екран.

Необов'язкове поле cond задає умову(я), коли в цій зоні можна спати. Наразі проводиться індикація зон, де дозволено сон. У нижньому лівому куті відображається маленька іконка легень при вході в таку зону. Ймовірно, пізніше буде змінено на іншу.
Сновидіння тепер поділяються на сценарні та звичайні. Сценарні сновидіння відіграються один раз під час виконання необхідних умов. Звичайні сновидіння програються, якщо немає сценарних або жодна умова виконання сценарних не спрацювала. Можна ставити можливість відігравання традиційних сновидінь загалом, і навіть ставити можливість спрацьовування кожного конкретного сновидіння окремо. Звичайним сновидінням можна задавати тип і потім обмежувати по ньому сни, що відтворюються в керованому файлі.

У файлі misc\dream.ltx задаються параметри снів.

Секція відео .
Полями задаються шляхи до відео файлів зі снами.

Секція dreams . Поля:
regular_probability = <number> - ймовірність програвання звичайних сновидінь загалом;
regular = <секції> - список секцій із налаштуваннями для звичайних сновидінь;
scene = <секції> - список секцій із налаштуваннями для сценарних сновидінь.

Налаштування звичайних сновидінь:
dream = <назва> - ім'я поля з секції videos ;
probability = <number> - що більше, то більше ймовірність програвання сну;
type = nightmare/normal/happy – тип сну.

Налаштування сценарних сновидінь:
dream = <назва> - ім'я поля із секції videos ;
cond = {+info -info =func !func ~number} - умови спрацьовування;
to_regular=<number>,<тип> - необов'язкове поле. Дає можливість переводити сценарний сон після першого відіграшу до розряду звичайних. < number >, < тип > аналогічні probability і type з налаштувань звичайних сновидінь відповідно.

Примітка : до релізу дана схема дійшла сильно порізаною, всі параметри в файлі, що управляє, були закоментовані, тому дана схема не працює, якщо бути точніше, то нічого не робить.

Файл: gamedata\scripts\sr_sleep.script

Схема sr_cutscene

Ця схема призначена для проведення анімації камери з деяким ефектом ( pp_effector ). Послідовність дій, що здійснюються схемою, складається з миттєвого переміщення гравця на початок шляху point та орієнтації його погляду на початок шляху look , втрати управління гравцем та початку анімації камери cam_effector після завершення якої гравець знову отримує керування.

[sr_cutscene]
point = <ім'я_шляху> - шлях до першої точки якого переноситься гравець.
look = <ім'я_шляху> - шлях до першої точки якого дивиться гравець.
pp_effector = <ім'я_постефекту> - файл, розташований у папці gamedata\anims\ і містить ефект (ім'я файлу пишеться без розширення).
cam_effector = <ім'я_анімації_камери> - файл, розташований у папці gamedata\anims\camera_effects\ і містить анімацію камери (ім'я файлу пишеться без розширення).

Підтримується сигнал cameff_end .

Приклад використання схеми :

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = sr_cutscene
 
[sr_cutscene]
point = agr_cutscene_walk
look = agr_cutscene_look
cam_effector = agroprom_demo
on_signal = cameff_end | nil

Файл: gamedata\scripts\sr_cutscene.script


   
Цитата
Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
7 місяців тому

   
ВідповіcтиЦитата