|
|
Модератор форума: tupi857 |
Форум » Видоизменение » Технологии » Первые шаги в моддинге |
Первые шаги в моддинге |
# 112:35 05/06/2019
Мы не можем обсудить все детали в этом коротком туре - только самые важные аспекты. Но, надеюсь, будет достаточно иметь первый обзор. Остальное как всегда сделай сам. Изучение и понимание файлов данных намного эффективнее, чем выполнение всех шагов после руководства.
Папка «data» содержит три наиболее часто используемых файла данных для моддинга: proto.xml, techtree.xml и stringtable.xml. Они также подходят для новичков, чтобы получить больше опыта в «обучении на практике» или также «методом проб и ошибок». Одновременно с этими файлами уже могут быть сделаны наиболее часто необходимые изменения. Эти три файла не нужно преобразовывать в .xmb - они также принимаются как необработанные XML-файлы. Версия .xmb берется только в том случае, если исходный файл .xml отсутствует или, возможно, поврежден. Так что - если не трогать - .xmb можно рассматривать как «аварийное резервное копирование». Stringtable Мы начинаем наше путешествие с самых простых и простых для понимания данных: файл data \ stringtable.xml содержит все отображаемые тексты - будь то внутри самой игры, для пользовательского интерфейса, для ESO, для редактора сценариев и т. Д. . Таким образом, тексты , все вместе в одном файле, это легко адаптировать версию на другой язык - только stringtable должен быть заменен (кроме голосовых файлов). Базовая структура строковой записи: <String _locID = "{number}"> {text} </ String> Она может быть расширена некоторыми дополнительными атрибутами, например, например. символ = , символ игры = ,, но это не интересно в целом. Для нас важен только идентификатор строки, на который ссылаются все остальные файлы. Обратите внимание! Будьте осторожны при редактировании таблицы строк: многие записи очень длинные - некоторые строки содержат более 1000 символов. Нежелательное переформатирование может разрушить файл. Пример: изменение отображаемого имени устройства Чтобы изменить имяигрового устройства, вы должны найти соответствующий идентификатор в прото (см. Ниже). Затем найдите этот идентификатор в stringtable и измените следующий текст в соответствии со своими пожеланиями. Подсказка: Если вы, возможно, позже захотите опубликовать, распространите мод: это не самая плохая идея, если вы оставите исходный контент без изменений и добавите только файл для вставки в stringtable - вручную или с помощью установщика. Таким образом, оригинальный языковой файл сохраняется. Файл прототипа Файл прототипаdata \ proto.xml содержит описания и характеристики всех подразделений, зданий и других объектов. Каждый объект имеет свою собственную запись прототипа в формате <Unit id = '{number}' name = '{notation}'> ... {теги данных} ... </ Unit> В качестве примера мы рассмотрим типичный прототип для модуля - Мушкетер: <Unit id = '214' name = 'Мушкетер'> Уникальный UnitID и имя. На юниты в игре ссылаются только по названию. UnitID используется в сохраненных играх, сценариях и в целях отладки. <DBID> 3 </ DBID> Идентификатор базы данных, очевидно, только для внутреннего использования Ensemble. Комментарий: я никогда не видел этот DBID, на который ссылаются другие файлы, и он работает также без этого тега. Но, возможно, для будущей совместимости тег следует сохранить. <DisplayNameID> 22805 </ DisplayNameID> Текстовый идентификатор для отображения имени устройства. Ссылаясь на stringtable. <EditorNameID> 25023 </ EditorNameID> То же, что и выше, но для обозначения в редакторе сценариев. <PopulationCount> 1 </ PopulationCount> Количество слотов населения, которое занимает единица. <ObstructionRadiusX> 0,4900 </ ObstructionRadiusX> <ObstructionRadiusZ> 0,4900 </ ObstructionRadiusZ> Размер, экстент единицы измерения для обнаружения столкновений. <FormationCategory> Ranged </ FormationCategory> В зависимости от этого флага блок располагается в формации. <MaxVelocity> 4.0000 </ MaxVelocity> Это нормальная скорость движения для юнита. <MaxRunVelocity> 6.0000 </ MaxRunVelocity> Некоторые действия могут временно увеличить базовую скорость до этого значения. <MovementType> land </ MovementType> Куда движется юнит. Может быть «земля», «вода» или «воздух». <TurnRate> 18,0000 </ TurnRate> <AnimFile> unit \ infantry_ranged \ musketeer \ musketeer.xml </ AnimFile> Соответствующий файл анимации в папке «art». Файл anim содержит всю информацию о модели для внешнего вида , вложений, анимации действий, текстур и т. Д. <ImpactType> Flesh </ ImpactType> <PhysicsInfo> dude </ PhysicsInfo> В основном описания физического движка и системы повреждений. <Icon> unit \ infantry_ranged \ musketeer \ musketeer_icon_64x64 </ Icon> Значок отряда, который появляется, например. в очереди поезда здания. Находится в папке "art". <PortraitIcon> unit \ infantry_ranged \ musketeer \ musketeer_portrait </ PortraitIcon> Портрет юнита для пользовательского интерфейса. Находится в " <ShortRolloverTextID> 25669 </ ShortRolloverTextID> Описание текста, который появляется при наведении курсора мыши на устройство или значок. <InitialHitpoints> 150.0000 </ InitialHitpoints>Точки попадания, которые имеет юнит, когда он только что обучен / построен. <MaxHitpoints> 150.0000 </ MaxHitpoints> Базовые максимальные Hitpoints единицы. Обычно оба значения HP равны, но для спецэффектов начальные HP могут отличаться. <LOS> 16.0000 </ LOS> Линия обзора устройства. <ProjectileProtoUnit> InvisibleProjectile </ ProjectileProtoUnit> Снаряд (ы) для дальних юнитов. Возможно более одного попадания снаряда. <UnitAIType> RangedCombative </ UnitAIType> Определяет «искусственный интеллект» поведение объекта. <TrainPoints> 30.0000 </ TrainPoints> Сколько времени занимает обучение (или построение) юнита. <Bounty> 10,0000 </ Bounty> Количество очков опыта, которое получает противник при уничтожении отряда. <BuildBounty> 10.0000 </ BuildBounty> XP указывает игроку при сборке юнита. <Cost resourcetype = 'Food'> 75.0000 </ Cost> <Cost resourcetype = 'Gold'> 25.0000 </ Cost> Затраты на обучение / строительство объекта. Обычно из типа «Еда», «Дерево», «Золото». Но также «Корабли» (= поставки) используется для наемников. <AllowedAge> 1 </ AllowedAge> <Armor type = 'Hand' value = '0.2000'> </ Armor> Сопротивление атакам. Может быть типа «Рука», «Дальний» или «Осада». Можно определить только один тип - больше игнорируются. Значение варьируется от 0,00 до 1,00 (0% - 100%). Тип «Осада» может быть определен, но значение игнорируется. Теперь идет набор строк из формата <UnitType> .... </ UnitType> Эти флаги типов в основном «пассивны», они назначают единицу определенным категориям единиц. Флаги 'LogicalType ...' используются для проверки нескольких действий. Флаги «Аннотация ...», например. используется для улучшения целого класса единиц или для отображения и статистики. <UnitType> LogicalTypeValidSharpshoot </ UnitType> <UnitType> LogicalTypeNeededForVictory </ UnitType> <UnitType> LogicalTypeHandUnitsAutoAttack </ UnitType> <UnitType> LogicalTypeLandMilitary </ UnitType> <UnitType> LogicalTypeScout </ UnitType> <UnitType> LogicalTypeValidSPCUnitsDeadCondition </ UnitType> <UnitType > LogicalTypeGarrisonInShips </ UnitType> <UnitType> LogicalTypeRangedUnitsAutoAttack </ UnitType> <UnitType> LogicalTypeVillagersAttack </ UnitType> <UnitType> LogicalType << UnitTyTyTypeTypeTypeTypeTepeTepeTepeTepeTepeTepeTTepeTTepeTTepeTTepeTeTTepeTeTTR <UnitType> LogicalTypeMinimapFilterMilitary </ UnitType> <UnitType> Военный </ UnitType> <UnitType> UnitClass </ UnitType> <UnitType> Unit </ UnitType> <UnitType> AbstractGunpowderTrooper </ UnitType> <UnitType> AbstractInfantry </ UnitType> <UnitType> AbstractHeavyInfantry </ UnitType> <UnitType > HasBountyValue </ UnitType> <UnitType> Ranged </ UnitType> <UnitType> AbstractCavalryInfantry </ UnitType> <UnitType> CountsTowardMilitaryScore </ UnitType> <UnitType> AbstractRangedInfantry </ UnitType> <UnitType> <UnitType> <UnitType>> В соответствии с вышеизложенным следующие строки из формата <Flag> .... </ Flag> В основном это касается инструкций для самого игрового движка - также в большинстве случаев говорит само за себя. <Flag> CollidesWithProjectiles </ Flag> <Flag> ApplyHandicapTraining </ Flag> <Flag> CorpseDecays </ Flag> <Flag> ShowGarrisonButton </ Flag> <Flag> DontRotateObstruction </ Flag> <Flag> ObscuredByUnits </ Flag> <Flag > Отслеживаемый </ Flag> <Command page = '10 'column =' 1 '> Стоп </ Command> <Command page = '10' column = '0'> Гарнизон </ Command> <Command page = '10 'столбец = '2'> Удалить </ Command> Здесь также обычно определяются специальные способности и кнопки build / train. <Tactics> musketBayonet.tactics </ Tactics> Ссылка на файл тактики отряда, расположенный в «data \ tactics». Файл тактики содержит подробные технические описания для каждого действия юнита. Это можно рассматривать как связующее звено между прото и anim-файлом. Наконец, все характеристики прото-действий юнита определены. Помимо режимов атаки также можно собирать, строить, лечить способности здесь. <ProtoAction> <Name> BuildingAttack </ Name> <Damage> 20.000000 </ Damage> <DamageType> Siege </ DamageType> <ROF> 3.000000 </ ROF> <Name> DefendHandAttack </ Name> <Damage> 13,000000 </ Damage> <DamageType> Hand </ DamageType> <ROF> 1.500000 </ ROF> <DamageBonus type = 'AbstractCavalry'> 3.000000 </ DamageBonus> </ ProtoAction> < / ProtoAction> </ ProtoAction> < / ProtoAction> </ ProtoAction> < / ProtoAction> </ ProtoAction> < / ProtoAction> </ ProtoAction> < / ProtoAction> </ ProtoAction> < ProtoAction> <Name> DefendRangedAttack </ Name> <Damage> 23.000000 </ Damage> <DamageType> Ranged </ DamageType> <MaxRange> 12.000000 </ MaxRange> <ROF> 3.000000 </ ROF> </ ProtoAction> <ProtoAction> <Name> MeleeHandAttack </ Name> <Damage> 13.000000 </ Damage> <DamageType> Hand </ DamageType> <ROF> 1.500000 </ ROF> <DamageBonus type = 'AbstractCavalry'> 3.000000 </ DamageBonus> </ ProtoAction> <ProtoAction> <Имя> StaggerHandAttack </ Name> <Damage> 13.0000 </ Урон> <DamageType> Рука </ DamageType> <ROF> 1.500000 </ ROF> <DamageBonus type = 'AbstractCavalry'> 3.000000 </ DamageBonus> </ ProtoAction> <ProtoAction> <Имя> StaggerRangedAttack </ Name> <Damage> 23.000000 </ Damage> <DamageType> Ranged </ DamageType> <MaxRange> 12.000000 </ MaxRange> <ROF> 3.000000 </ ROF> </ ProtoAction> <ProtoAction> <Name> VolleyHandAttack </ Name> <Damage> 13.000000 </ Damage> <DamageType> Hand </ DamageType> <ROF> 1.500000 </ ROF> <DamageBonus type = 'AbstractCavalry'> 3.000000 </ DamageBonus> </ ProtoAction> <ProtoAction> <Имя> VolleyRangedAttack </ Name> <Damage> 23.000000 </ Damage> <DamageType> Ranged </ DamageType> <MaxRange> 12.000000 </ MaxRange> <ROF> 3.000000 </ ROF> </ ProtoAction> Общий формат для атаки: <Name> {AttackName} </ Name> имя относится к действию в файле тактики <Damage> {value} </ Damage> базовый урон <DamageType> {type} </ DamageType > может быть «Рука», «Дальний», «Осада» <ROF> {значение} </ ROF>, «Скорострельность» = «Время перезарядки» <DamageBonus type = '{category}'> {value } </ DamageBonus> множитель урона DamageBonus также может быть <1, чтобы уменьшить урон определенным типам. Эффективный урон рассчитывается как (базовый урон) * (бонусное значение) Единицы с площадью, <DamageFlags> {category} </ DamageFlags> важный: определяет, что затронуто повреждением области. Здесь также можно переопределить значения, обычно используемые в файле тактики, с помощью <MaxRange> или <MinRange> максимальной или минимальной дальности атаки <DamageCap> ограничителя ущерба <Projectile> специальный снаряд, если он еще не определен в другом месте. В самом конце у нас есть завершающий прототег </ Unit> Вопрос новичка, который часто появляется: как мне найти определенный юнит в файле прото? Вы можете использовать функцию поиска вашего редактора и ввести несколько ключевых букв, а затем искать, пока не найдете нужный прото. В Интернете также есть списки прототипов - просто используйте веб-поиск, например, Google. Или вы помещаете единицу в редакторе сценариев - меню «Объекты» -> «ObjectInfo» предоставляет имя прото. Изменение прото-файла Изменить существующий прото-файл довольно просто: отредактируйте соответствующее значение прото-тега до желаемого - сохраните файл - готово. При следующем запуске игры юнит имеет измененные характеристики. Но часто желательно сохранить оригинальный блок и добавить новый, модифицированный. Для этого вы копируете прототип подходящего устройства и вставляете (вставляете) его в конец файла, но перед завершением </ Proto> Здесь устройство получает новый уникальный идентификатор и имя. Затем отредактируйте статистику единицы к желаемым значениям. Чтобы сделать новый юнит доступным в игре, мы должны включить его в techtree. Techtree В файле data \ techtree.xml содержатся все специфические для цивилизации технологии, улучшения и описания для домашних перевозок. Он включает / отключает определенные техники, юниты и здания в определенном возрасте. В противоположность прото - что справедливо для всех - изменение в techtree влияет в основном только на конкретного игрока. Все технические средства также могут вызываться в редакторе сценариев с помощью триггерного эффекта «Установить техническое состояние». В общем, каждая цивилизация начинается с описания «Age0 {Civ}», где большинство вещей определяется или предопределено. Каждый возрастной прогресс называет другую технологию '{Age} {Civ}' (Age = Colonialize .., Fortressize .., Industrialize .., Imperialize ..), например, например. FortressizeBritish или IndustrializeSpanish. Также все улучшения юнитов определяются в techtree обычно в следующем порядке: «VeteranUnit», «GuardUnit», «ImperialUnit». Также здесь указаны улучшения, доступные в Market, Church, Arsenal, Capitol. И, наконец, важные аспекты поставок в города определяются в techtree - они всегда начинаются с «HC ...», отгрузки единиц обычно с «HCShip ...». Techtree - мощный инструмент, гораздо более гибкий, чем фиксированные структуры данных Proto. Это уже немного характер скриптового языка. У техников могут быть условия, они могут вызывать других техников, даже самих себя, и могут (теоретически) иметь неограниченное количество эффектов. Базовая структура технологии: <Tech name = '....' type = 'Normal'> <DBID> .... </ DBID> <Status> UNOBTAINABLE </ Status> <Effects> .... < / Эффекты> </ Tech> Кроме того, технологии идентифицируются и на них ссылаются по имени, поэтому имя технологии должно быть уникальным. (Уникальный) DBID, очевидно, предназначен для внутреннего использования Ensemble. Флаг состояния обычно устанавливается игровой логикой и изначально всегда НЕОБХОДИМ. Необязательные возможные дополнительные теги: Значок : значок, появляющийся в пользовательском интерфейсе. DisplayNameID : идентификатор строковой таблицы для отображаемой нотации технологии. RolloverTextID : идентификатор строковой таблицы для отображения описания, например. при наведении курсора мыши на значок ResearchPoints : бонусные баллы при исследовании этой технологии. Cost resourcetype = .... : может быть 'Еда', 'Дерево', 'Золото', 'Корабли' (поставки). Флаг: различные флаги. HomeCityLevel : is уже условие, технология доступна только на определенном уровне HC Prereq: предварительные условия для включения технологии, в основном определенного возраста или уже активной технологии. К несчастью, у технологий нет назначенного идентификатора, как у протосов. Они автоматически нумеруются непрерывно при запуске игры. Однако для некоторых целей, таких как триггеры RM, необходим технический идентификатор. Есть списки по всему Интернету или используйте простой трюк: создайте фиктивный сценарий, добавьте триггер с нужной технологией, быстро запустите сцену. и изучите USERDIR: trigger \ trigtemp.xs - это выдаст технический идентификатор. Автоматическая нумерация также является причиной, по которой никогда не следует вставлять новую технологию - всегда добавляйте в конце techtree. Эффекты Эффект всегда имеет структуру <Effect type = '..' .. {attribute} ..> {target} </ Effect> Порядок атрибутов не важен. Возможные комбинации атрибутов внутри тега «Эффект» практически бесконечны. Поэтому мы должны ограничиться некоторыми наиболее часто используемыми типами эффектов. Рекомендуется изучить techtree для примеров других эффектов. <Effect type = 'TechStatus' status = '..'> {tech name} </ Effect> Этот эффект включает / отключает другие технологии. Статус может быть «активным» : технология немедленно активируется, и связанный код выполняется «доступным» : технология может быть исследована игроком «недоступно» : сбрасывает статус, запрещает технологию - но изменения данных не производятся, технология не регрессирует <Тип эффекта = 'Тип данных' подтип = '..' [другие атрибуты] количество = '{значение}' релятивность = '{режим}'> <Тип цели = 'ProtoUnit'> {прототип блока} </ Target> </ Эффект> Это общий формат для изменения данных любого вида. Сумма всегда является (подписанным) числом с плавающей точкой. Относительность определяет, как обрабатывать значение: «Абсолют» представляет собой изменение +/- относительно базового значения. «Назначить» напрямую перезаписывает базовое значение. «BasePercent» означает: сумма является множителем для базового значения (например, 2,00 удваивается , 0,50 половинки). Подтип - это тип данных, которые необходимо изменить. Когда эффект изменяет значение proto, подтип ссылается на тег proto и часто именуется одинаково, но не всегда! Целью может быть единица / объект или тип / класс единицы, например. 'Hero' или 'AbstractInfantry', как определено в прототипах 'UnitType'. Но не все эффекты работают должным образом на целых классах. Обратите внимание! Многие технологии зависят от своих предшественников, поэтому все технологии эпохи и улучшения юнитов. Если вы выполняете, например. «IndustrializeBritish» из Age0, улучшения предыдущего возраста пропускаются - они не включаются автоматически и некоторые важные вещи могут отсутствовать. То же самое относится и к апгрейдам юнитов - всегда апгрейдируйте по шагам Ветеран -> Страж -> Империал. Наконец, есть некоторые технологии PostAge .., которые вызываются, когда игрок начинает в более позднем возрасте. В этом случае несколько предыдущих технологий / улучшений будут пропущены, и если вы вставите туда что-то, они никогда не будут выполнены. Примеры Ниже приведены некоторые шаблоны эффектов для наиболее распространенных проблем. Код может быть помещен в любую техническую структуру - конечно, соответствующая технология должна называться (активной), чтобы изменения работали. Для зависящей от возраста инициализации поместите его в технику 'Age0 {Civ}' или '{Age} {Civ}'. Но, конечно, он может быть вставлен также в поставку HC или в технологию улучшения. Изменение хитпоинтов юнита <Тип эффекта = 'Тип данных' подтип = 'Точки попадания' сумма = '{num}' относительность = 'Абсолют'>> <Target type = 'ProtoUnit'> {proto unit} </ Target> </ Effect> Это добавляет количество HP к базовому значению юнита. Изменение атаки единицы <тип Effect = подтипа 'Data' = 'Damage' allactions = '1' сумма = '{фактор}' относительности = 'BasePercent'> <Целевой тип = 'ProtoUnit'> {прото единица / класс} </ Target> </ Effect> Это умножает базовый урон на коэффициент для всех режимов атаки. Дополнительный бонус к урону можно установить с помощью <Effect type = 'Data' subtype = 'DamageBonus' allactions = '1' unittype = '{эффективная единица / класс}' amount = '{factor}' относительность = 'Assign'> < Бонус урона действует только на указанный тип юнита и является множителем базового урона. Если вы хотите изменить урон только для определенного режима атаки, вы должны заменить « .. allactions = '1' .. " на " .. action = '{proto action}' .. " " Изменение стоимости юнита <Тип эффекта = 'Тип данных' подтип = 'Стоимость' ресурс = '{тип}' сумма = '{num}' относительность = 'Назначить'> <Тип цели = 'ProtoUnit'> {прототип блока} </ Target> </ Эффект> Устанавливает стоимость для указанного типа ресурса на определенную сумму. Типом может быть «Еда», «Древесина», «Золото» - «Корабли» (= отгрузки) используются для наемников. <Тип эффекта = 'Тип данных' подтип = 'PopulationCount' сумма = '{значение}' относительность = 'Назначить'> <Тип цели = 'ProtoUnit'> {прототип блока} </ Target> </ Effect> Включение недоступного unit <Effect type = 'Data' subtype = 'Enable' amount = '1.00' относительность = 'Assign'> <Target type = 'ProtoUnit'> {proto unit} </ Target> </ Effect> Также отключение возможно с помощью " ... сумма = '0,00' относительность = 'Назначить' ... 'или' ... сумма = '- 1,00' относительность = 'Абсолют' ... ". Для стандартных единиц это достаточно - местоположения поездов (здания) в основном заранее определены. Иначе сделайте следующий шаг: <Тип эффекта = 'Тип данных' подтип = 'AddTrain' unittype = '{прототип юнита / здание}' количество = '1,00' относительность = 'Назначить'> <тип цели = 'ProtoUnit'> {целевое здание / единица} </ Target > </ Effect>К сожалению, это не делает различий между юнитами и зданиями, поэтому он всегда добавляется в первую строку поезда / сборки. Включение специальной способности отряда Некоторые действия отряда (например, специальные атаки) доступны только после явного разрешения их: <тип эффекта = 'тип данных' подтип = 'действиеEnable' действие = '{протодействие}' количество = '1,00' относительность = ' Назначьте '> <Target type =' ProtoUnit '> {proto unit} </ Target> </ Effect> Получение бесплатных юнитов, например. отгрузкой <Effect type = 'Data' subtype = 'FreeHomeCityUnit' unittype = '{proto unit}' amount = '{num}' относительность = 'Absolute'> <Target type = 'Player'> </ Target> </ Effect> The единицы будут выглядеть как обычные грузы. Обучение наемников в зданиях Мы включаем юнит с подтипом <Effect type = 'Data' = 'Enable' amount = '1.00' относительность = 'Assign'> <Target type = 'ProtoUnit'> {mercenary} </ Target> </ Effect > Мы назначаем место обучения с помощью <Effect type = 'Data' subtype = 'AddTrain' unittype = '{mercenary}' amount = '1.00' относительность = 'Assign'> Наконец, мы должны отрегулировать стоимость «Корабли» до нуля, иначе каждая единица потребует одну отправку <Тип эффекта = «Тип данных» подтип = «Стоимость» ресурс = «Корабли» количество = «0,00» относительность = «Назначить»> < Target type = 'ProtoUnit'> {mercenary} </ Target> </ Effect> Заключительные слова Не все можно объяснить здесь подробно, иначе это руководство легко заполнило бы 200 страниц. Но, надеюсь, этого достаточно для первой ориентации. Теперь вы можете расширить свои знания, попробовав и протестировав. Изучение и понимание описанных файлов имеет важное значение для собственного моддинга. Вы не можете ожидать от всех проблем готового к использованию рецепта. Но просматривая форумы, После первых шагов с этими основными файлами данных вы, возможно, захотите углубиться в «пропасть моддинга», возможно, работая над тактикой или файлами анимации. Это требует хорошего знания согласованности файлов. Изучите файлы ансамбля по умолчанию. Посмотрите, как другие люди сделали это, загрузив и изучив примеры. Моддинг = Изучение + Размышления + Делая выводы + Реализация + Тестирование LOVEAOE
|
| |||
| |||