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

Система сюжетної інформації (InfoPortions)


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

Вступ

Система сюжетної інформації (ССІ) потрібна для забезпечення походження та запам'ятовування сюжетних подій у грі. З допомогою ССИ можна створювати порції сюжетної інформації (info portions).

За допомогою скриптових функцій можна давати або забирати інформацію у об'єктів Inventory Owner у грі.

 

Функції скриптового game_object

  • give_info_portion(info_id) - отримати інформацію щодо ідентифікатора(рядкового).
  • give_info_portion_via_pda(info_id, who) - отримати інформацію щодо ідентифікатора від зазначеного об'єкта.
  • disable_info_portion(info_id) – прибрати інформацію.
  • has_info(info_id) – чи є інформація.
  • dont_has_info(info_id) - відсутня інформація.

Кожна з таких порцій має унікальний текстовий ID і є просто прапорцем у реєстрі, який автоматично завантажується та зберігається.

До можливостей info portion належить:

  • запуск функції по відношенню до персонажа при отриманні info_portion (action);
  • додавання локацій на карту (location);
  • можливість ініціювання діалогів актором (dialog);
  • можливість ініціювання діалогів у актора (при розмові з персонажем, який має info_portion) (actor_dialog);
  • додавання статей до енциклопедії (article);
  • додавання завдань та в меню завдань (task);
  • видалення з реєстру відомих info_portions (disable).

 

Структура Info Portion у XML-файлі

 
<info_portion  id = "actor_start" >
 
      <!-- скриптові функції, які будуть викликані при отриманні info_portion персонажем, аргументом скриптовий об'єкт персонажа --> 
      <action > info_test1.test_task1 </action >
       <action > ... </action >
 
      <!-- локації, які будуть показані на карті --> 
      <location  > 
            <level > 0 </level >
             <x > -250 </x >
             <y > -127 </y >
             <icon  name = "Dealer"  x = "2"  y = "2"  width = "1"  height = "1" > </icon >
             <text > Bring artefacts to dealer </text > 
       </location >
       <location  > ..... < /location >
 
      <!-- список діалогів, який може ініціювати Info Portion безпосередньо в актора--> 
      <dialog > trader_job </dialog >
       <dialog > trader_talk_about </dialog >
       <dialog > stalker_talk_about </dialog >
 
      <!-- список діалогів, який може ініціювати персонаж з Info Portion у актора--> 
      <actor_dialog > trader_job </actor_dialog >
       <actor_dialog > trader_job </actor_dialog >
 
      <!-- список id, що деактивуються info_portions у персонажа при отриманні даної--> 
      <disable > actor_start01 </disable >
       <disable > actor_start02 </disable >
 
      <!-- список id статей в енциклопедії, які будуть додані --> 
      <article > boar </article >
       <article > flesh </article >
 
      <!-- завдання --> 
      <task >
 
            <!-- перше завдання у списку є основним і виділяється великим шрифтом --> 
            <objective >
                   <text > test task primary </text >
 
                  <!--
                        Скриптова функція повертає поточний стан завдання, використовуючи константи
                        task.completed - завдання (мета виконана) task.in_progress - у стадії виконання task.fail - провалено
                  --> 
                        <script_condition > info_test1.test_task1 </script_condition > 
             </objective >
 
            <!-- решта завдань - другорядні --> 
            <objective >
                   <text > test task secondary 01 </text >
                   <script_condition > info_test1.test_task2 </script_condition > 
             </objective >
 
            <objective >
                   <text > test task secondary 01 </text >
                   <script_condition > info_test1.test_task3 </script_condition > 
             </objective > 
 
      </task > 
 
</info_portion >

   
Цитата