Сповіщення
Очистити все
15.10.2023 23:50
Важлива інформація
Не знаю, як у ЧН та ЗП, але пробував цей спосіб на ТЧ, і переконався, що він не працює. При спробі використовувати рандомну прив'язку візуалів виліт: не може знайти вказану модель.
Ну, в такому разі дякую тобі за урок, який викликає виліт! Це приголомшливо! Навіщо все це тут написано тобою? Фагот.
Теорія
У цій статті я розповім про те, як призначити кільком профілям неписів різні візуали, які рандомно розподілятимуться для кожного профілю.
Наприклад візьмемо село новачків із ТЧ. Знаходимо у файлі gamedata/config/gameplay/character_desc_escape.xml профілі новачків, що мешкають у селі біля бункера Сидоровича:
<!-- - - - - - - - STALKER NOVICE - - - - - - - -->
<specific_character id="esc_stalker_novice_default1" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>ui_npc_u_green_stalker_2</icon>
<bio>esc_stalker_novice_bio</bio>
<class>esc_stalker_novice</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>140</rank>
<reputation>12</reputation>
<money min="200" max="600" infinitive="0"/>
<snd_config>characters_voice\human_01\newbie\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\novice\green_stalker_2</visual>
<supplies>
[spawn] \n
wpn_bm16 \n
ammo_12x70_buck \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
<!-- - - - - - - - - - - - - - - -->
<specific_character id="esc_stalker_novice_default2" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>ui_npc_u_green_stalker_2</icon>
<bio>esc_stalker_novice_bio</bio>
<class>esc_stalker_novice</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>127</rank>
<reputation>-8</reputation>
<money min="200" max="600" infinitive="0"/>
<snd_config>characters_voice\human_01\newbie\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\novice\green_stalker_2</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
device_torch \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
<!-- - - - - - - - - - - - - - - -->
<specific_character id="esc_stalker_novice_default3" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>ui_npc_u_green_stalker_3</icon>
<bio>esc_stalker_novice_bio</bio>
<class>esc_stalker_novice</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>214</rank>
<reputation>9</reputation>
<money min="200" max="600" infinitive="0"/>
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\novice\green_stalker_3</visual>
<supplies>
[spawn] \n
wpn_bm16 \n
ammo_12x70_buck \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
<!-- - - - - - - - - - - - - - - -->
<specific_character id="esc_stalker_novice_default4" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>ui_npc_u_green_stalker_3</icon>
<bio>esc_stalker_novice_bio</bio>
<class>esc_stalker_novice</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>175</rank>
<reputation>8</reputation>
<money min="200" max="600" infinitive="0"/>
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\novice\green_stalker_3</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
<!-- - - - - - - - - - - - - - - -->
<specific_character id="esc_stalker_novice_default5" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>ui_npc_u_green_stalker_4</icon>
<bio>esc_stalker_novice_bio</bio>
<class>esc_stalker_novice</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>268</rank>
<reputation>-10</reputation>
<money min="200" max="600" infinitive="0"/>
<snd_config>characters_voice\human_02\newbie\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\novice\green_stalker_4</visual>
<supplies>
[spawn] \n
wpn_bm16 \n
ammo_12x70_buck \n
device_torch \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
<!-- - - - - - - - - - - - - - - -->
<specific_character id="esc_stalker_novice_default6" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>ui_npc_u_green_stalker_4</icon>
<bio>esc_stalker_novice_bio</bio>
<class>esc_stalker_novice</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>133</rank>
<reputation>6</reputation>
<money min="200" max="600" infinitive="0"/>
<snd_config>characters_voice\human_02\newbie\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\novice\green_stalker_4</visual>
<supplies>
[spawn] \n
wpn_bm16 \n
ammo_12x70_buck \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_drugs.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
<!-- - - - - - - - - - - - - - - -->
<specific_character id="esc_stalker_novice_default9" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>ui_npc_u_green_stalker_5</icon>
<bio>esc_stalker_novice_bio</bio>
<class>esc_stalker_novice</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>224</rank>
<reputation>18</reputation>
<money min="200" max="600" infinitive="0"/>
<snd_config>characters_voice\human_02\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\novice\green_stalker_5</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_drugs.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
<!-- - - - - - - - - - - - - - - -->
<specific_character id="esc_stalker_novice_default10" team_default = "1">
<name>GENERATE_NAME_stalker</name>
<icon>ui_npc_u_green_stalker_5</icon>
<bio>esc_stalker_novice_bio</bio>
<class>esc_stalker_novice</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>58</rank>
<reputation>-2</reputation>
<money min="200" max="600" infinitive="0"/>
<snd_config>characters_voice\human_02\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\novice\green_stalker_5</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
device_torch \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_drugs.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
Нас цікавлять теги <visual> </visual> - у них вказується назва профілю. Як видно з наведених вище профілів, кожному окремому профілю суворо надано свій візуал. Чи завжди доречна така точність? У нас є група профілів НПС і кілька візуалів відповідних цій групі профілів, можна припустити, що не важливо якому саме НПС присвоється певний візуал. Простіше кажучи, у грі, всі новачки в селі однакові, тільки різні куртки у них і нам не важливо яка саме куртка буде на тому чи іншому мужику. Ми вибираємо потрібні нам візуали для якоїсь групи НПС (з gamedata/meshes/actors) даємо візуалам будь-яке однакове ім'я, після імені ставимо знак підкреслення і цифру чи число. Приклад:
name_1.ogf
name_2.ogf
mame_24.ogf
Потім у потрібних профілях НПС у тегах <visual> </visual> пишемо ім'я, яке задавали нашим візуалам. У прикладі вище ім'я візуалів було name , в цьому випадку теги заповнюються приблизно так: <visual>actors\novice\name</visual> . Таким чином, візуали рандомно розподіляться по кожному профілю.
Відпрацьований приклад на селі новачків.
Знаходимо профілі новачків у файлі gamedata/config/gameplay/character_desc_escape.xml (їх профілі були винесені, в цьому уроці вище). І ми, наприклад, завантажили 5 нових візуалів, які прив'яжемо до новачків. Нам би довелося щоразу прописувати окремий візуал у кожному профілі, але ми зробимо інакше, для початку ми перейменуємо завантажені візуали таким чином:
esc_novichok_1.ogf
esc_novichok_2.ogf
esc_novichok_3.ogf
esc_novichok_4.ogf
esc_novichok_5.ogf
Закидаємо ці візуали, наприклад сюди: gamedata\meshes\actors\novice Прописуємо у всіх профілях новачків візуал таким чином: <visual>actors\novice\esc_novichok</visual> зберігаємо, починаємо нову гру, приходимо в село, бачимо наших новачків у нових візуалах.
Кілька слів
Можливо хтось створював подібну статтю, я не бачив навіть схожого, якщо що сильно не лайте. Таким чином можна задавати кілька візуалів не тільки групі, а й одному НПС, факт у тому що розподіл візуалів рандомно і на початку нової гри НПС швидше за все поміняють візуал. Це може стати в нагоді для сюжетних модів, які мають розгалужений сюжет і розраховані не на одне проходження, проходячи такий мод другий раз з початку, гравець не тільки дізнається альтернативну гілка розвитку сюжету, але й зустрічає знайомих НПС в інших візуалах, що посилює відчуття альтернативності - фактично грає в новий мод. Таке явище я перевіряв у ТЧ в інших аддонах, не гарантую роботу. У майбутньому можливо перевірю такий ефект на іменах предметів, зброї та ін.