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

SoC. Логіка NPC. Частина 3


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

Створюємо мод

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

 

Постановка задачі

Отже, ми хочемо, щоб дружні NPC нарешті почали приносити користь. Для цього навчимо їх лікувати РР під час бою. Розпишемо за пунктами:

1. Потрібно додати дружнім NPC гілку в діалозі з проханням доглядати ГГ і лікувати його, якщо в цьому виникне необхідність.

2. Додати NPC модель поведінки, що реалізує виконання цього прохання.

2.1. NPC повинен діяти згідно з цією моделлю тільки якщо ГГ знаходиться недалеко від нього.

2.2. NPC не повинен далеко відходити від ГР під час бою.

2.3. Якщо здоров'я ГГ впало нижче певної позначки, NPC повинен підійти/підбігти та вилікувати ГГ.

 

Що потрібно для реалізації

Нам доведеться змінювати діалоги для деяких NPC, для цього потрібно буде змінити файли config\gameplay\character_dialogs.xml (діалоги для всіх NPC), config\localization.ltx і config\system.ltx (докладніше див. статтю BAC9-FLCL або Fr3nzy ) . Ми змінимо діалоги для всіх NPC, але для невідповідних NPC діалог буде відсікатися за допомогою передумови. Також потрібно додати файли з текстами діалогів та функції для перевірки умов, які використовуються у діалогах.

Для включення нової моделі поведінки NPC потрібно буде внести зміни до скриптів scripts\modules.script (реєстрація моделей поведінки) та scripts\xr_motivator.script (для встановлення високого пріоритету нашої моделі). Модифікації файлу xr_logic.script , у якому відбувається встановлення загальних моделей поведінки, не буде потрібно, оскільки ми активуватимемо нашу схему поведінки під час вибору певної гілки у діалозі.

Тепер вирішимо, які умови та оператори нам знадобляться.

Умови:

1. Стан головного героя. Якщо воно нижче за певний поріг, то умова стане істинною. Призначимо йому ідентифікатор property_actor_is_wounded та евалуатор evaluator_actor_is_wounded . Далі я вказуватиму ідентифікатор і евалуатор у дужках через кому.

2. Чи є NPC досить близько, щоб вилікувати ГГ ( property_ready_to_heal, evaluator_ready_to_heal ).

3. Чи є у NPC аптечки ( property_has_medkit , evaluator_has_medkit ).

4. Чи не відійшов NPC занадто далеко від РР або РР від NPC ( property_faraway , evaluator_faraway ).

5. Чи знаходиться ГГ досить близько, щоб мало сенс допомагати йому ( property_near_enough , evaluator_near_enough ).

Оператори:

1. Лікувати ГГ ( act_heal , action_heal ).

2. Підбігти до РР на дистанцію, достатню для лікування ( act_run_to_actor , action_run_to_actor ).

3. Крикнути, що аптечки скінчилися ( act_no_medkit , action_no_medkit ).

4. Підібратися ближче до РР, щоб бути під рукою ( act_stay_close , action_stay_close ).

 

Реалізація

Я писатиму цю статтю паралельно з розробкою мода, вказуючи всі знайдені помилки. Сподіваюся, це допоможе іншим моддерам. Щоб відокремити результати тестування від опису процесу розробки мода, я виділятиму свої коментарі іншим шрифтом.


   
Цитата