Восстановление Сидоровича

Материал из MODFAQ.RU — моддинг игр серии S.T.A.L.K.E.R., The Elder Scrolls и Fallout
Перейти к: навигация, поиск

Восстановление Сидоровича

Автор aka_sektor
Тип статьи руководство
Актуальность ЗП
Необходимый софт Текстовый редактор, X-Ray SDK 0.7
Необходимые файлы m_person.ltx, stalkers.ltx, class_registrator.script, se_stalker.script, game_story_ids.ltx, npc_profile.xml, system.ltx, character_desc_*.xml

Как известно, персонаж Сидоровича в Зове Припяти отсутствует. Если вы хотите его вернуть, просто так добавить его не получится, т.к. после Чистого Неба он был вырезан. Однако, при должных знаниях, восстановить его не составляет особого труда.

Если поковыряться в ресурсах игры, можно понять, что вырезан Сидорович был лишь частично: модель, текстуры и анимации — остались, а вот в конфигах и скриптах его удалили.

Конфиги

Для начала, скопируйте из игровых архивов ЧН, файл m_person.ltx

Путь: gamedata\configs\creatures

И поместите по тому же пути, но уже в директории ЗП.

Далее, необходимо подключить файл m_person.ltx к игре.

Для этого в той же папке откройте файл stalkers.ltx любым текстовым редактором, и запишите в него строчку:

#include "m_person.ltx"

Скрипты

Восстановить секцию в конфигах недостаточно. Если попробовать заспавнить Сидоровича в LE, произойдет ошибка: Can't create entity

Причина в том, что в секции Сидоровича [m_trader], в параметре class указан несуществующий скриптовый класс AI_TRD_S.

Не существует он потому, что в ЗП был вырезан из скриптов.

Откройте файл class_registrator.script, и запишите в него следующую строку:

	cs_register	(object_factory, "CAI_Trader", 					"se_stalker.se_trader",					"AI_TRD_S", 		"script_trader")

Далее, откройте файл se_stalker.script, и запишите в него следующую функцию:

class "se_trader" (cse_alife_trader)
function se_trader:__init (section) super (section)
end
function se_trader:keep_saved_data_anyway()
	return true
end

Готово! Теперь Сидорович будет спавниться.

X-Ray SDK

По поводу того, как правильно заспавнить Сидоровича в Level Editor, нужно пояснить некоторые моменты.

7760b78e7af9eab.png
Настройки спавна Сидоровича в X-Ray SDK CS

В графе Custom Data задается путь к файлу с логикой Сидоровича (воспроизведение анимаций и звука; торговля и т.д.). Например:

[logic]
cfg = scripts\escape\esc_trader.ltx

Путь указывается относительно директории gamedata\configs

В графе Story ID задается имя идентификатора из gamedata\configs\game_story_ids.ltx

В графе npc profile задается имя секции из файла gamedata\configs\gameplay\npc_profile.xml

Эта секция выглядит так:

  <character id="escape_trader">
	<class>Trader</class>
	<specific_character>escape_trader</specific_character>
  </character>

Если указать неверно, может произойти 1-ый вариант вылета: xml_str_id_loader.h


Строка:

<specific_character>escape_trader</specific_character>

Указывает имя секции, в файле character_desc_escape.xml, который подключен в параметре specific_characters_files, секции [profiles], файла gamedata\configs\system.ltx.

Эта секция выглядит так:

  <specific_character id="escape_trader" no_random = "1">
    <name>escape_trader_name</name>
    <icon>ui_npc_u_trader_1</icon>
    <bio>escape_trader_bio</bio>

    <class>trader</class>
    <community>trader</community>
    <visual>actors\stalker_trader\stalker_trader_1</visual>

    <rank>330</rank>
    <reputation>23</reputation>
    <money min="100000" max="100000" infinitive="1"/>
    <supplies>
      [spawn] \n
    </supplies>
#include "gameplay\character_criticals_4.xml"
    <start_dialog>esc_trader_meet</start_dialog>
<!-- #include "gameplay\character_dialogs.xml" -->
    <!-- <actor_dialog>esc_trader_about_zone</actor_dialog> -->
    <actor_dialog>esc_trader_community</actor_dialog>
    <actor_dialog>esc_trader_about_you</actor_dialog>
    <actor_dialog>esc_trader_about_situation</actor_dialog>
    <actor_dialog>esc_trader_about_questions</actor_dialog>
    <actor_dialog>esc_trader_about_other</actor_dialog>
    <actor_dialog>treasure_dialog</actor_dialog>
  </specific_character>

Если указать неверно, может произойти 2-ой вариант вылета: xml_str_id_loader.h