Перейти к содержанию
Авторизация  
NikolasRedArrow

Как создавать новые предметы в S.T.A.L.K.E.R. 2

Рекомендуемые сообщения

 

Это — перевод гайда пользователя Exicide с Discord-сервера S.T.A.L.K.E.R. G.A.M.M.A.. За предоставление черновой версии гайда для перевода огромное ему спасибо! На самом же сервере сейчас идёт активная работа по исследованию файлов и созданию различных модов. Например, именно здесь обсуждаются правки Grok'a и был создан мод на лут с мутантов.

Перевод: 

Спойлер

S2HOC: Как создавать предметы

ДИСКЛЕЙМЕР

Этот гайд покажет вам, как создать новые предметы и UITextures (их отображение в инвентаре). Здесь нет информации о редактировании мэшей или материалов. Этот гайд подразумевает, что вы умеете использовать FModel и знаете основы UE5.

 

Требуемые программы:

• FModel
• Unreal Engine 5.1
• Notepad++
• Графический редактор для изменения текстур

Гайды, рекомендуемые к ознакомлению (от переводчика):

Работа с FModel и создание правок
• Замена текстур через UE5

 

Шаг 1: Придумайте предмет, который хотите создать

В моём случае, я хочу создать «Вазелиновую мазь» из Escape from Tarkov. Так как эта мазь — расходный предмет, мне нужно перейти в директорию “Stalker2/Content/GameLite/GameData/ItemPrototypes/ConsumablePrototypes.cfg” в FModel, которая находится в pakchunk0-Windows.pak.

Если вы хотите создать предмет, который предназначен только для продажи торговцам, вам следует перейти в “Stalker2/Content/GameLite/GameData/ItemPrototypes/QuestItemPrototypes.cfg”
 

Шаг 2: Найдите предмет, максимально схожий по свойства с создаваемым предметом

В моём случае, у предмета нет обезболивающего эффекта (насколько я знаю), так что я буду использовать Аптечку в качестве основы в ConsumablePrototypes.cfg. Теперь кликните на выбранный для редактирования .cfg, а после на “Export Raw Data (.uasset)”.

Для предметов на продажу сделайте то же самое с QuestItemPrototypes.cfg.

 

Шаг 3: Перейдите в директорию “Stalker2/Content/GameLite/GameData/ItemGeneratorPrototypes.cfg” и таким же образом извлеките его.

 

Шаг 4: Откройте .cfg файл(ы) и ItemGeneratorPrototypes.cfg в Notepad++ (или WordPad)

 

Шаг 5: Продолжаем

Отлично, теперь начинается утомительная часть
Для расходуемых предметов:

Редактируем ConsumablePrototypes.cfg
Найдите предмет, который наиболее близок по свойствам к предмету, который вы хотите создать. Скопируйте всю запись этого предмета, начиная с его названия и заканчивая строкой “struct.end” прямо перед записью и вставьте его после скопированного фрагмента (п.п.: в оригинале — «в новый проект»).

Замените имя предмета и его SID на имя нужного вам предмета БЕЗ ПРОБЕЛОВ. Пока не обращайте внимания на Texture Path, мы разберём это ниже.
Cost — это стоимость предмета
Weight — это вес предмета.
ItemGridHeight/Width — это его размер в предметной сетке: как много клеток по высоте и ширине он занимает в инвентаре.

Для предметов на продажу:

Скопируйте и вставьте эту заготовку-код в отредактированный cfg, но обязательно замените $ITEMNAME$ на имя вашего предмета и исправьте $TEXTUREPATH$ на путь к созданной вами текстуре. О том, как это сделать я расскажу ниже. Обязательно прочитайте комментарии внизу заготовки!

Спойлер


$ITEMNAME$ : struct.begin {refkey=[0]}
   SID = $ITEMNAME$
   IsQuestItemProtoype = false
   // Flag marking item as quest item in terms of logical operations, eg can not be Dropped, Used or Sold
   IsQuestItem = false
   ShouldTriggerAnomalies = false
   Type = EItemType::Other
   RequireWeight = false
   Icon = Texture2D'/Game/GameLite/FPS_Game/UIRemaster/UITextures/Inventory/$TEXTUREPATH$
   MeshProtoypeSID = Sausage
   ItemGridWidth = 1
   ItemGridHeight = 1
   Cost = $COST$
   Weight = $WEIGHT$
struct.end
 
// "MeshProtoype" points to "Stalker2/Content/GameLite/GameData/MeshPrototypes.cfg" and contains the SIDs for all meshes in the game, the one in the example above points to the SID that is for Sausage, this means that if you load this item in your game, it will look like Sausage in the 3D world, but when you have it in your inventory, it will be whatever your newly created texture is.
 
// Cost is the value of the item.
 
// Weight is the weight of the item.
 
// ItemGridHeight/Width are how many tiles the item takes up in your inventory.

 

Перевод комментария кода-заготовки:

// "MeshProtoype" указывает на "Stalker2/Content/GameLite/GameData/MeshPrototypes.cfg" и содержит SID для всех сеток в игре, та, что в примере выше, указывает на SID, который относится к Sausage, это означает, что если вы загрузите этот предмет в свою игру, он будет выглядеть как Sausage в 3D-мире, но когда он будет у вас в инвентаре, он будет выглядеть так, как выглядит ваша вновь созданная текстура.

// Cost — это стоимость предмета.

// Weight — это вес предмета.

// ItemGridHeight/Width — это количество плиток, которые предмет занимает в вашем инвентаре.

 

Шаг 6: Текстуры

Для обоих типов предметов:

В FModel кликните по строке «Multiple» в «Loading Mode» на вкладке «Archives» и выберите «All», чтобы загрузить содержимое всех .pak-архивов. Затем зажмите CTRL + Shift + F и вбейте в поиск UITextures/Inventory. Теперь найдите папку предмета, который имеет такой же размер сетки, как и тот, что вы хотите создать. Так, если размер 1х1, найдите текстуру предмета 1х1 в этой папке (UITextures/Inventory/)

Например:

“Stalker2/Content/GameLite/FPS_Game/UIRemaster/UITextures/Inventory/Consumable/T_cns_healthbox_01.uasset” — это текстура инвентаря для аптечки.

Если ваш предмет имеет размер 1x2 (ширина x высота) вы можете использовать текстуру “Stalker2/Content/GameLite/FPS_Game/UIRemaster/UITextures/Inventory/Consumable/T_cns_water.uasset”. Это текстура бутылки воды.

Как только вы найдете текстуру, которая вам подходит, кликните ПКМ на .uasset и выберите Export Raw Data.

После того, как ваша текстура(ы) экспортируются, скопируйте их в другое место (запомнив его, конечно же) и откройте любым графическим редактором. Запишите размеры текстур, например: Вода — 200x400, Аптечка — 128x128.

Создайте новое PNG изображение с прозрачным фоном соответствующих размеров и создайте новую текстуру для вашего предмета. Если у вас уже есть изображение, вы можете вставить его, но обязательно СОХРАНЯЙТЕ ТОЧНЫЕ РАЗМЕРЫ (не увеличивайте и не уменьшайте размеры самого PNG-файла).

После того, как вы создали новую текстуру, сохранив размеры, в рамках работы с гайдом я рекомендую назвать его как-нибудь так: “T_cns_ItemNameHere_01” (без “”)

Шаг 7: Unreal Engine

(п. п.: более подробно процесс запаковки текстур мы разобрали в другом гайде, там больше скриншотов. Я рекомендую прочитать его и вернуться к этому шагу, чтобы лучше понимать мысль автора)

Переходим к ещё более раздражающим вещам. Создайте новый проект без шаблона, обязательно назовите его "Stalker2" и кликните “Edit > Project Settings > Кликните на “Packaging“ слева > Отметьте “Use pak file”,  “Use io store”, “Generate chunks”, пролистните вниз и отметьте пункт “Cook everything in the project content directory (ignore list of…)”

Теперь, ради руководства, перейдите в папку Content (которая находится в папке Stalker 2, которая находится в папке Unreal Projects) для Unreal Engine и воссоздайте следующий путь: “...\Content\GameLite\FPS_Game\UIRemaster\UITextures\Inventory\Consumable”

Поместите новую текстуру/текстуры в папку Consumable и верните с UE5. В правом нижнем углу может появиться запрос на импорт. Согласитесь с ним, если нет, то посмотрите в Content Drawer и убедитесь, что там есть путь к файлы через созданные папки. Затем найдите, где находятся ваши текстуры.

Когда вы найдёте свои текстуры в Content Drawer, дважды кликните по одной, затем посмотрите справа и измените “Texture Group” с “World” на “UI” чтобы включить прозрачность.

ЕСЛИ У ВАС НЕСКОЛЬКО ТЕКСТУР И ВЫ НЕ ХОТИТЕ МЕНЯТЬ ИХ ПО ОДНОЙ, СЛЕДУЙТЕ СЛЕДУЮЩИМ ШАГАМ:

Кликните по одной текстуры, нажмите CTRL+A, кликните по той же текстуре, выберите “Asset Actions > Bulk Edit via Property Matrix”, вы увидите список своих текстур, нажмите на первую, CTRL+A, затем справа вы увидите вкладку “Property Editor”, щёлкните на неё, смените “Texture Group” с “World” на “UI”

После того, как вы сделаете свою текстуру часть UI-группы текстур, кликните правой кнопкой на пустое место в папке с вашей текстурой, выберите “Miscellaneous > Data Asset”. Назовите свой Data Asset “Label_НАЗВАНИЕМОДА” и введите название мода вместо “НАЗВАНИЕМОДА”. Затем нажмите Enter. Дважды кликните на Data Asset, смените параметр “Priority” на “1” и “chunk ID” на число между 1010-10000 (это самый безопасный диапазон), измените “Cook Rule” на “Always Cook” и поставьте галочку на “Label Assets in My Directory”.

После того, как вы закончите с этим, кликните на “Platforms” в верхней части UE5, выберите пункт “Windows”, смените “Binary Configuration” на “Shipping” (не уверен, что это обязательно, но так советовали на форуме). После того, как вы сделаете это, кликните на “Package Project” прямо над тем местом, где вы меняли Binary Configuration и выберите директорию, в которую скомпилируется проект.

ДА ЗАПАКУЕТСЯ ВСЁ ЭТО!.

 

Шаг 8: Возвращаемся к вашим CFG файлам.

После того, как вы запакуете текстуры (процесс не быстрый, особенно в первый раз), возвращаемся в .cfg-файл вашего предмета. Помните Texture Path, который я попросил временно проигнорировать? Мы собираемся заполнить его сейчас, если вы точно следовали гайду, это будет очень-очень просто.

Например, вот ванильный путь текстур:


Icon = Texture2D'/Game/GameLite/FPS_Game/UIRemaster/UITextures/Inventory/Consumable/T_cns_sausage_02.T_cns_sausage_02’

Вот что вы сделаете с путём к текстурам, чтобы он указывал на ваш предмет:


Icon = Texture2D'/Game/GameLite/FPS_Game/UIRemaster/UITextures/Inventory/Consumable/T_cns_ItemNameHere_01.T_cns_ItemNameHere_01’

Там, где у меня T_cns_ItemNameHere_01, вы заполните то, как вы назвали свою  текстуру, учитывая правильное написание заглавных букв, не пропустите ничего. Да, вам нужно сохранить символ ‘ в конце строки.

Повторите эти шаги для других предметов, которые вы сделали, если они у вас есть.

 

Шаг 9: Добавляем предметы в таблицу/генератор лута

После того как мы успешно создали наш предмет в соответствующем файле “Prototypes” .cfgs, вам нужно отредактировать конфиг ItemGeneratorPrototypes.cfg

Например: Если вы хотите чтобы ваш предмет появлялся в продаже у Торговца, вам нужно изменить один из используемый им “ItemGeneratorPrototypeSID”s. В моём случае я создал расходуемый лечебный предмет и добавил его в“SimpleMedkitGenerator”. Сейчас я подробнее расскажу, как это сделать.

В ItemGeneratorPrototypes.cfg, найдите  “SimpleMedkitGenerator” и убедитесь, что вы находитесь на его SID, а не на записи, касающейся торговца, использующего его SID.

Кликните на последнюю строку этого SID, где СНАЧАЛА написано “struct.end” и нажмите Enter. 

ВАЖНО: В NOTEPAD++, НАЖМИТЕ VIEW > SHOW SYMBOL > SHOW SPACE AND TAB

Это создаст новую строку прямо под “struct.end”, но вы должны увидеть стрелки, ведущие к вашей строке. Это потому, что Notepad++ автоматически делает отступы с помощью Tab и вы должны очистить их и нажать пробел до конца, пока не вернетесь на свою позицию в строке.

Tab нарушает форматирование файла конфигурации, поэтому для отступа нужны пробелы.

Скопируйте и вставьте запись выше, заканчивающуюся на “MaxCount” в строку, которую вы только что создали. 

Измените число внутри скобок на следующее число в последовательности. В моём случае число был [1], так что моё число должно быть [2], измените ItemPrototypeSID на SID вашего предмет БЕЗ ПРОБЕЛОВ.

Другие параметры:

Weight — это параметр, отвечающий за вероятность появления предмета в ассортименте (насколько я понял).
MinCount — минимальное количество предметов, которые будут присутствовать, если он появится.
MaxCount — максимальное количество предметов, которые будут присутствовать, если он появится.

 

Шаг 10: Сохраните как ваш .cfg файл с предметом, так и  ваш ItemGeneratorProtoypes.cfg

Создайте папку с названием вашего мода, воссоздайте структуру файлов внутри этой папки, начиная со Stalker2 и заканчивая полным путём до ConsumablePrototypes.cfg и ItemGeneratorProtoypes.cfg. Результат должен выглядеть так:

“…\$MODNAME$\Stalker2\Content\GameLite\GameData\ItemGeneratorPrototypes.cfg”
и
“...\$MODNAME$\Stalker2\Content\GameLite\GameData\ItemPrototypes\ConsumablePrototypes.cfg”

Запакуйте папку с модом, используя repak или аналогичный инструмент, затем переименуйте .pak в “$MODNAME$_1_P” где $MODNAME$ — это название вашего мода без $.

Шаг 11: Настройте ваш пакет текстур
Вернитесь в папку, в которую вы экспортировали (запаковали) файлы текстур через UE5,  возмите “pakchunkxxxx-Windows.pak” и соответствующие .utoc и .ucas, где xxxx это Chunk ID, которые вы выставили в UE5 Data Asset. Переименуйте  предметы по принципу “$MODNAME$_2_P” где $MODNAME$ — это название мода без $.

 

Шаг 12: Установка

Если вы неотступно следовали каждому шагу этого гайда и не испортили форматирование, используя Tab в Notepad++ или неправильный регистр букв, у вас получится перетащить и ваш Pak_1_P, и ваш Pak_2_P в папку ~mods и это БУДЕТ работать.

ВАЖНОЕ ЗАМЕЧАНИЕ:
Название предмета не будет таким, как вы думаете. Вам придётся отредактировать файл глобальной локализации с помощью другого инструмента моддинга, который я пока не знаю, как использовать. Но в моём случае название предмета выглядит как “sid_items_NorkaVaseline_Name”. Но мне удалось создать его с помощью консольной команды (это отдельный мод) “XSpawnItemNearPlayerBySID ItemPrototypeSID”
В моём случае команда выглядела как “XSpawnItemNearPlayerBySID NorkaVaseline”.

Спасибо, что следовали моему руководству!

 

 

  • Лайк 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   1 пользователь онлайн