[cut=Разбор character_desc]Все описание и характеристики каждого персонажа (нпс) хранятся в xml файлах в папке
gamedata/configs/gameplay в файлах типа
character_desc. Если точнее:
character_desc_zaton - персонажи Затона
character_desc_jupiter - персонажи Окрестностей Юпитера
character_desc_pripyat - персонажи Припяти
character_desc_general - главный герой, а также обычные персонажи для симуляции.
Давайте проведем разбор описания на примере Шустрого из файла
character_desc_zaton.
Файл большой, так-что, можно искать Шустрого текстом
zat_a2_stalker_nimble.
Вот, собственно, и его описание. Через "-" я даю описание кадой секции.
Код
<specific_character id="zat_a2_stalker_nimble" team_default="1"> - id персонажа
<name>st_zat_a2_stalker_nimble_name</name> - id имени персонажа
<icon>ui_inGame2_neutral_1</icon> - код иконки
<map_icon x="1" y="0"> - иконка на карте (не менять)
</map_icon>
<bio>Опытный сталкер. Детальная информация отсутствует.</bio> - биография (отключена)
<class>zat_a2_stalker_nimble</class> - класс перса
<community>stalker</community> группировка (здесь Вольные сталкеры)
<terrain_sect>stalker_terrain</terrain_sect> - не менять
<snd_config>characters_voice\human_01\stalker\</snd_config> - голос
<rank>40</rank> - ранг (без СГМ он не работает)
<reputation>0</reputation> - репутация (тоже самое)
<money min="10000" max="10000" infinitive="0" /> - деньги (здесь у НПС 10000 руб.)
<visual>actors\stalker_neutral\stalker_neutral_1</visual> - модель НПС
<supplies> - начало секции, в которой список всех предметов, оружия персонажа
[spawn] \n
device_torch \n
wpn_ak74u \n
ammo_5.45x39_fmj = 1 \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
#include "gameplay\character_items_nd.xml"
#include "gameplay\character_food.xml"
#include "gameplay\character_drugs_2.xml"
</supplies> - конец секции
#include "gameplay\character_criticals_4.xml" - один из факторов критического ранения
<start_dialog>zat_b51_stalker_nimble_start</start_dialog> - отсюда начинается список диалогов
<actor_dialog>zat_b51_stalker_nimble_b52_about_gun_questions</actor_dialog>
<actor_dialog>zat_b51_stalker_nimble_place_order</actor_dialog>
<actor_dialog>zat_b51_stalker_nimble_get_order</actor_dialog>
<actor_dialog>shustriy_available_finds_dialog</actor_dialog>
<actor_dialog>zat_b51_stalker_nimble_about</actor_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>
Теперь разберем детально некоторые секции.
<start_dialog> - начальный диалог приветствия нпс
<actor_dialog>
- это все остальные диалоги
#include "gameplay\character_items_nd.xml" и прочие такого-же плана - это ссылка на файл генерирования предметов нпс
<visual> - если открыть папку gamedata/meshes мы увидим несколько папок. В них находятся модели предметов, существ. Персонажи, получается, в папке actors. В строке visual указывать путь к модели надо от нее. Открыв папку
actors, мы увидим множество других папок, модели распределены по группировкам. В данном случае, путь указывает к папке
stalker_neutral, модели
stalker_neutral_1. Надеюсь, с этим все понятно.
<class> - это отсылка к секции данного персонажа в файле
npc_profile.xml. Но об этом потом. Скажу только, у каждого персонажа должен быть свой "класс".
<supplies> - вот здесь стоит разобраться. В принципе, вообще ничего сложного. Достаточно знать кодовое названия предмета. Что здесь что:
[spawn] - начало секции, всегда так и остается
device_torch - фонарик
wpn_ak74u - АКСУ
ammo_5.45x39_fmj - патроны 5.45х39
wpn_pm - ПМ
ammo_9x18_fmj - патроны, думаю, какие именно, понятно. [/cut]
[cut=Поиск персонажа в файлах описания]Вот, представьте, нам надо найти id персонажа в файлах описания character_desc. Как это сделать? Опытные модмейкеры могут это делать легко, ведь есть множество факторов в описание, которые сами гласят о персонаже. Но давайте мы попробуем более надежный способ. Итак, откроем
configs/text/rus. Мы уже знаем, что тут лежат почти все тексты игры. Представим, что нам надо найти Бороду. Открываем файл
st_characters, и там ищем "Борода" (без скобок). Видим следующее
Код
<string id="zat_a2_stalker_barmen_name">
<text>Борода</text>
</string>
zat_a2_stalker_barmen_name - это id имени. Как мы знаем, id имени указывается в описание нпс. Тогда в файле
character_desc_zaton мы вставляем в строку поиска этот id, и ищем. Находим
Код
<specific_character id="zat_a2_stalker_barmen" team_default="1">
<name>zat_a2_stalker_barmen_name</name>
<icon>ui_inGame2_Boroda</icon>
<map_icon x="1" y="0">
</map_icon>
<bio>Опытный сталкер. Детальная информация отсутствует.</bio>
<class>zat_a2_stalker_barmen</class>
<community>stalker</community>
<terrain_sect>stalker_terrain</terrain_sect>
<snd_config>characters_voice\human_02\stalker\</snd_config>
<rank>60</rank>
<reputation>300</reputation>
<money min="480000" max="480000" infinitive="1" />
<visual>actors\stalker_neutral\stalker_neutral_3_face_1</visual>
<supplies>
[spawn] \n
wpn_sig550 \n
ammo_5.56x45_ap = 1 \n
wpn_beretta \n
ammo_9x19_fmj = 1 \n
grenade_rgd5 = 3 \n
#include "gameplay\character_items_3_nl.xml"
#include "gameplay\character_food.xml"
#include "gameplay\character_drugs_3.xml"
</supplies>
#include "gameplay\character_criticals_4.xml"
<start_dialog>zat_a2_stalker_barmen_start_dialog</start_dialog>
<actor_dialog>zat_boroda_storyline_dialog</actor_dialog>
<actor_dialog>zat_boroda_find_drink_beylis_dialog</actor_dialog>
<actor_dialog>zat_boroda_reward_drink_beylis_dialog</actor_dialog>
<actor_dialog>zat_a2_linker_b14_quest_init</actor_dialog>
<actor_dialog>zat_a2_linker_b14_quest_done</actor_dialog>
<actor_dialog>zat_a2_linker_b14_quest_strange_item</actor_dialog>
<actor_dialog>zat_a2_linker_b14_quest_sell_artefact</actor_dialog>
<actor_dialog>zat_a2_linker_b14_quest_wrong</actor_dialog>
<actor_dialog>zat_b57_barmen_about_bloodsucker_lair_dialog</actor_dialog>
<actor_dialog>zat_b57_barman_reward_dialog</actor_dialog>
<actor_dialog>zat_b22_barmen_about_vampire_actor1</actor_dialog>
<actor_dialog>zat_b22_barmen_about_vampire_actor2</actor_dialog>
<actor_dialog>zat_b22_barmen_about_vampire_actor3</actor_dialog>
<actor_dialog>zat_b22_barmen_about_vampire_actor4</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b7_actor_start</actor_dialog>
<actor_dialog>zat_b22_barmen_b5_daring_quest_stalkers</actor_dialog>
<actor_dialog>zat_b22_barmen_about_after_quest_b5_dealer_actor4</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b30_about_new_detector</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b30_about_compass</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b30_compass_give_dialog</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b30_compass_double_dialog</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b30_compass_revert_dialog</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b30_take_business_actor_dialog</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_army</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_about_sci_guards</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_about_sci_helpers</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b30_about_halfart_jup_b1</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_oasis_art_sell</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b52_about_snag</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b52_about_nimble</actor_dialog>
<actor_dialog>zat_a2_linker_b29_actor_info</actor_dialog>
<actor_dialog>zat_a2_linker_b29_actor_get_adv_task</actor_dialog>
<actor_dialog>zat_a2_linker_b29_actor_give_adv_task</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_b30_take_money_actor_dialog</actor_dialog>
<actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog>
<actor_dialog>zat_barmen_radio_switch_off_dialog</actor_dialog>
<actor_dialog>zat_barmen_radio_switch_on_dialog</actor_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>
[/cut]
[cut=Описании папок геймдаты]Геймдата делится на несколько больших папок. У каждой свое назначение. Многие делятся на другие папки. Общее назначение каждой папки мы сейчас и разберем.
[cut=ai]Тут прописаны определенные функции alife. Зацикливаться здесь не будем.[/cut]
[cut=anims]Анимации и эффекты аномалий, вертолетов, ПНВ и прочего.[/cut]
[cut=configs]Самая большая папка. Здесь лежат конфигурационные файлы описания, логики, текста и многое другое.
В самой папке
configs лежат несколько ltx документов., которые отвечают за общую систему.
Рассмотрим другие папки в
configs.
creatures - файлы классификации и урона всех живых и неживых созданий, как нпс, так и монстров
environment - разные факторы погоды
gameplay - описания, классы предметов и нпс, а также разные инфопоршни
misc - секции всех предметов, логика отрядов нпс, файлы торговли нпс
models - текстовое описание моделей предметов
mp - всякие данные для сетевой игры
prefetch - непонятная дребедень. Там лежат списки некоторых предметов
scripts - логика нпс, смарт террейны, "умные предметы"
text/rus - все тексты игры, не считая некоторых слов в меню
ui - описания разных меню в игре, включая прицелы
weapons - секции оружия, апгрейдов
weather - секции погоды
zones - разные зоны (аномалии, базы, костры)
[/cut]
[cut=levels]Папка, где лежат все локации игры. И мультиплеерные, и сингл. В папке
jupiter, соответственно, локация Окрестностей Юпитера.[/cut]
[cut=meshes]Весомая папка во всех отношениях. Здесь находятся все модели игры.
actors - модели персонажей
dm - погодная динамика, дождь, например
dynamics - физические объекты
monsters - мутанты[/cut]
[cut=scripts]Здесь файлы напрямую связаны с конфигами. Если говорить просто, тут прописываются "условия" игры и выдача различных инфопоршней.[/cut]
[cut=shaders]Очередные погодные динамические эффекты, например, движения воды при выстреле в нее.[/cut]
[cut=sounds]Все игровые звуки. Думаю, комментариев не надо.[/cut]
[cut=spawns]Одна из самых важных вещей в игре. Здесь прописано 99% заселения локаций, спавна персонажей и объектов.
all.spawn распаковывается с помощью
acdc perl[/cut]
[cut=textures]Все текстуры в игре. Полностью связаны с моделями. Папок много, изучайте сами. Скажу только, текстуры нпс и монстров находятся в папке
act.[/cut] [/cut]
[cut=Как найти название/описание оружия по его id]У нас есть оружие. Как найти id его названия/описания?
Открываем файл конфигурации оружия (я открою
w_abakan.ltx) и найдем строки
inv_name и
description.
inv_name - название
description - описание
Смотрим, что там написано
Код
;-----------[Главные параметры]----------------;
inv_weight = 4.0
inv_name = st_wpn_abakan
inv_name_short = st_wpn_abakan
description = st_wpn_abakan_descr
Выходит, id название оружия -
st_wpn_abakan, а описание -
st_abakan_descr.
Теперь открываем
configs/text/rus/st_items_weapons и ищем по найденным нами id.
Ищем по
st_wpn_abakan и находим
Код
<string id="st_wpn_abakan">
<text>АН-94</text>
</string>
Ищем по
st_abakan_descr и находим
Код
<string id="st_wpn_abakan_descr">
<text>Современный автомат, разработанный на замену устаревающему АКМ-74. Одна из главных особенностей - возможность ведения огня очередями по 2 патрона с высокой точностью (на расстоянии ста метров обе пули ложатся в одну точку). Это существенно увеличивает шансы поразить цель благодаря совокупному останавливающему и пробивающему действию пуль.</text>
</string>
Это достаточно надежный способ. Если знаете главную часть id на память (
abakan точно легко запомнить), то в файлах описания можно с помощью этой части и искать. Опять-же, я попробовал искать тегом
abakan, и нашел те-же имена.
Также хочу заметить, что такой способ можно использовать и для других предметов. [/cut]
[cut=Вылеты]Вылеты. Самая мучительная часть модостроительского процесса. А разбираться в этом надо. Воспользуемся материалом, который был предоставлен нам товарищем Хованом, ему за это огромное "Спасибо!".
[table][tr][td]Лог[/td][td]Проблема[/td][td]Решение[/td][/tr][tr]Can't open section[td]Игра не может найти секцию оружия предмета, или чего-то другого.[/td][td]Часто возникает при добавление нового предмета в игру.[/td][td]Ошибка банальная, по этому стоит проверить написание названия секции.[/td][/tr][tr][td]Duplicate section '*' found.[/td][td]Игра нашла две одинаковые секции предмета[/td][td]Найти и удалить/изменить лишнюю секцию.[/td][/tr][tr][td]attempt to call global * (a nil value)[/td][td]Игра хочет вызвать функцию из _g.script, однако найти ее не может[/td][td]Добавить несуществующую функцию.[/td][/tr][tr][td]can't find include file[/td][td]Где-то был прописан файл через форму include, но игра файл не находит.[/td][td]Следует добавить отсутствующий файл, либо же проверить путь к нему, а также его название. Можно еще просто удалить на него ссылку.[/td][/tr][tr][td]motion not found
[/td][td]В конфиге какой-то модели прописана анимация, но она отсутствует.[/td][td]Надо изменить анимацию в конфиге, или добавить ее к модели.[/td][/tr][tr][td]can't find variable in [/td][td]Отсутствует параметр в секции.[/td][td]Нужно добавить параметр.[/td][/tr][tr][td]can't find texture *[/td][td]Не может найти какую-то текстуру.[/td][td]Добавить текстуру с таким именем.[/td][/tr][tr][td]Can't open wave file[/td][td]Отсутствует звуковой файл.[/td][td]Добавить звуковой файл или убрать его из описания.[/td][/tr][tr][td]LUA error: No such operator defined [/td][td]Ошибка при написании кода.[/td][td]Проверить написание.[/td][/tr][tr][td]there is no specified level in the game graph[/td][td]Допущена ошибка в геймграфе (часто при добавлении новых уровней).[/td][td]Проверить геймграф.[/td][/tr][tr][td]Smart_terrain * population can't be less than zero!!! [/td][td]В логике смарта параметр max_population меньше 0.[/td][td]Сделать параметр равным,больше нуля.[/td][/tr][tr][td]XML file:*.xml value: errDescr:Error reading end tag. [/td][td]В xml документе пропущен закрывающий тег.[/td][td]Надо его закрыть.[/td][/tr][tr][td]Out of memory. Memory request *[/td][td]Не хватает памяти для движка.[/td][td]Очистить систему от лишних процессов.[/td][/tr][tr][td]Incorrect next point * for squad[/td][td]Не корректная точка пути сквада. Они ходят только по смарт-террейнам.[/td][td]Изменить точку пути.[/td][/tr][tr][td]xr_logic: scheme 'sr_universal' is not registered in modules.script.[/td][td]В логике используется незарегистрированная схема sr_universal[/td][td]Исправить схему.[/td][/tr][tr][td]XML not found[/td][td]Отсутсвует нода описанная в Argument 0 в файле Argument 1[/td][td]Стоит добавить ноду.[/td][/tr][tr][td]any vertex in patrol path [*_walk] in inaccessible for object [/td][td]Недоступный вейпоинт[/td][td]Спойлер в теории[/td][/tr][tr][td]wrong size for table in section [/td][td]Неправильный размер xml таблицы[/td][td]Исправить значения размеров таблицы[/td][/tr][tr][td]Particle effect or group doesn't exist [/td][td]Найден не существующий партикл или группа[/td][td]Добавить партикл, или убрать его из описания предмета.[/td][/tr][tr][td]Нет лога[/td][td]Неизвестная причина.[/td][td]Убедится в правильности версии мода, обратится к автору за техподдержкой[/td][/tr][tr][td]Can't find motion file *[/td][td]Не найден omf файл с анимацией.[/td][td]Добавить файл.[/td][/tr][tr][td]m_object.get_door_vectors( m_closed_vector, m_open_vector )[/td][td]Проблема с механикой дверей[/td][td]Не исправлено.[/td][/tr][/table][/cut]