так, поехали, как сделать существо героем?
этап 1сделать так что-бы существо перестало быть существом...
вот скачал мод на существо из семерки, открыл его, внутри папки
bin
CamerasGameMechanicsMapObjectsnew_creatures
Sounds
красные папки влияют на существ
1) в папке
Cameras находится файл меняющий камеру в окне найма, по хорошему этот файл надо оставить и переименовать чтобы использовать камеру для героя
заходишь в \Cameras\Interface\HireCreatures - внутри файл Vampire.xdb - переименуй в VampireHero.xdb
2) папку
GameMechanics можно удалить, там файл соединяющий существо и модель, можно сказать что это корень
3)
MapObjects можно удалять сразу, потому что там находится файл для редактора карт (с большой вероятностью он сломан)
этап 2нужно подключить модель к герою
скорее всего тебе надо заменить какого-нибудь некроманта
надо взять его из data.pak
в папке \MapObjects\Necropolis лежат все некроманты, существа некрополиса и здания, некроманты имеют пометку .(AdvMap
HeroShared)
имена по большей части не совпадают с названиями Aberrar.(AdvMapHeroShared) это золтан, Berein.(AdvMapHeroShared) - маркел, Effig.(AdvMapHeroShared) - равена...
строение файла на примере золтана, я напишу обо всем, но нужное нам выделю красным
Aberrar
<?xml version="1.0" encoding="UTF-8"?>
<AdvMapHeroShared ObjectRecordID="60">
<Model/> - это не используется
<AnimSet href="/_(AnimSet)/Heroes/Necromancer-arena.(AnimSet).xdb#xpointer(/AnimSet)"/> - эта строчка обычно не используется
<blockedTiles/>
<holeTiles/>
<activeTiles>
<Item>
<x>0</x>
<y>0</y>
</Item>
</activeTiles>
<passableTiles/>
<PossessionMarkerTile>
<x>0</x>
<y>0</y>
</PossessionMarkerTile>
<Effect/>
<EffectWhenOwned/>
<messagesFileRef/>
<WaterBased>false</WaterBased>
<ApplyHeroTrace>true</ApplyHeroTrace>
<SoundEffect/>
<flybyMessageFileRef href=""/>
<ObjectTypeFileRef href="/Text/Visibility_Types/Units.txt"/>
<TerrainAligned>false</TerrainAligned>
<FlyPassable>true</FlyPassable>
<AdventureSoundEffect/>
<RazedStatic/>
<Icon128/>
<InternalName>Aberrar</InternalName> - ни в коем случае не меняй имя в этой строчке, а то скрипты в кампаниях могут сломаться
<Class>HERO_CLASS_NECROMANCER</Class> - это класс героя
<Specialization>HERO_SPEC_MIND_CLEANER</Specialization> - это специализация (влияет ТОЛЬКО на эффект, не влияет на иконку и описание специализации)
<PrimarySkill>
<Mastery>MASTERY_BASIC</Mastery> - уровень навыка
<SkillID>HERO_SKILL_NECROMANCY</SkillID> - расовая способность
</PrimarySkill>
<SpecializationNameFileRef href="/Text/Game/Heroes/Specializations/Necropolis/Mind_Cleaner/Name.txt"/> - название специализации
<SpecializationDescFileRef href="/Text/Game/Heroes/Specializations/Necropolis/Mind_Cleaner/Description.txt"/> - описание специализации
<SpecializationIcon href="/Textures/HeroScreen/Specializations/Necropolis/Mind_Cleaner.xdb#xpointer(/Texture)"/> - иконка специализации //вообще это неплохо, можно одну и ту же спецу разным расам выдавать с разными названиями и иконками, я так например сделал гнома со спецой сюзерен, но он из-за отсутствия "переподготовки" просто деньги приносил, назвал я его казначеем, такие герои в тройке были
<FaceTexture href="/Textures/Icons/Heroes/Necropolis/Necropolis_Zoltan_128x128.(Texture).xdb#xpointer(/Texture)"/> - это иконка
<FaceTextureSmall href="/Textures/Icons/Heroes/Necropolis/Necropolis_Zoltan_128x128_64.(Texture).xdb#xpointe r(/Texture)"/> это маленькая иконка,в последнем аддоне от них отказались, можно в этой строчке писать просто <FaceTextureSmall/>
<HeroCharacterArena href="/Characters/Heroes/Necromancer.(Character).xdb#xpointer(/Character)"/>
<HeroCharacterArenaMelee/>
<HeroCharacterAdventure href="/Characters/Heroes/Necromancer_LOD.(Character).xdb#xpointer(/Character)"/>
<HeroIndividualCamera/>
<CombatVisual href="/GameMechanics/CreatureVisual/Heroes/Necromancer.xdb#xpointer(/CreatureVisual)"/>
<TownType>TOWN_NECROMANCY</TownType> - это раса героя
<Editable>
<NameFileRef href="/Text/Game/Heroes/Persons/Necropolis/Aberrar/Name.txt"/> - имя героя
<BiographyFileRef href="/Text/Game/Heroes/Persons/Necropolis/Aberrar/Bio.txt"/> -биография героя
<Offence>0</Offence> - атака
<Defence>1</Defence> - защита
<Spellpower>3</Spellpower> - сила магии
<Knowledge>1</Knowledge> - знание
<skills> - навыки
<Item>
<Mastery>MASTERY_BASIC</Mastery> - мастерство (базовое)
<SkillID>HERO_SKILL_LEARNING</SkillID> - навык образование
</Item>
</skills>
<perkIDs> - вторичные навыки
<Item>HERO_SKILL_EAGLE_EYE</Item> - орлиный взор
</perkIDs>
<spellIDs> - заклинания
<Item>SPELL_ANIMATE_DEAD</Item> - поднятие мертвых
</spellIDs>
<Ballista>false</Ballista> - баллиста
<FirstAidTent>false</FirstAidTent> - палатка первой помощи
<AmmoCart>false</AmmoCart> - обоз
<FavoriteEnemies/> - заклятый враг
</Editable>
<ArrowButtonState>0</ArrowButtonState> - хз
<Decal/> - хз
<Selection href="/_(Model)/Heroes/Necromancer_Path/Symbol.xdb#xpointer(/Model)"/> - круг под героем
<Trace href="/MapObjects/_(AdvMapHeroTraceSet)/Necropolis.xdb#xpointer(/AdvMapHeroTraceSet)"/> - след большой армии
<RaceTraitIcon/> - хз
<RaceTraitDescFileRef href=""/> - хз
<ScenarioHero>false</ScenarioHero> - это блокировка героя для мультиплеерных карт, здесь он разблокирован
<AdventureMusic/> - музыкальная тема героя, она есть почти у всех героев кампаний
<HideInEditor>false</HideInEditor> - хз, лучше не трогать
</AdvMapHeroShared>
важные для нас строчки
<HeroCharacterArena href="/Characters/Heroes/Necromancer.(Character).xdb#xpointer(/Character)"/> - это боевая модель, допустим у рыцаря это всадник с знаменосцем
<HeroCharacterArenaMelee/> - это модель ближней атаки, есть далеко не у всех, тут такой нет... нам тоже не понадобится, потому что нет анимации
<HeroCharacterAdventure href="/Characters/Heroes/Necromancer_LOD.(Character).xdb#xpointer(/Character)"/> - это модель для карты
сперва по этим трем строчкам, нужно вписать путь к файлу character от существа из мода, выглядеть всё будет так
<HeroCharacterArena href="
/new_creatures/Necro/Vamplord/creature.(Character).xdb#xpointer(/Character)"/>
<HeroCharacterArenaMelee/>
<HeroCharacterAdventure href="
/new_creatures/Necro/Vamplord/creature.(Character).xdb#xpointer(/Character)"/>
все существа из семерки имеют один шаблон, так что путь будет отличаться только названием юнита и фракции
теперь об оставшихся строчках
<HeroIndividualCamera/> - это уникальная камера, такая есть у аграила, биары, властелина... у нас тоже есть, надо написать <HeroIndividualCamera
href="/Cameras/Interface/HireCreatures/VampireHero.xdb#xpointer(/Camera)"/>
следующая строчка отвечает за снаряд, трогать ее не будем, потому что у вампира нет снаряда
<CombatVisual href="/GameMechanics/CreatureVisual/Heroes/Necromancer.xdb#xpointer(/CreatureVisual)"/>
ПОЛ ДЕЛА СДЕЛАНО
герой отображается, НО В Т-ПОЗЕ
Этап 3
починка героя
строение файлов существ немного отличается от строения файлов героев, надо это поправить
тот файл который мы прописывали для внешнего вида - /new_creatures/Necro/Vamplord/creature.(Character).xdb с него надо начать
открой его, и увидишь
creature.(Character)
<?xml version="1.0" encoding="UTF-8"?>
<Character>
<Model href="creature.(Model).xdb#xpointer(/Model)"/>
<ArenaAnimSet href="animset/creature.(AnimSet).xdb#xpointer(/AnimSet)"/>
<AdvMapAnimSet/>
<ColourModels/>
</Character>
<AdvMapAnimSet/> - анимации для карты, тут ничего не записано!
благо чуть выше есть строчка с анимациями для боя, скопируй кусок href="animset/creature.(AnimSet).xdb#xpointer(/AnimSet)"/> и вставь в строчку карты так
<AdvMapAnimSet href="animset/creature.(AnimSet).xdb#xpointer(/AnimSet)"/>
ГЕРОЙ БОЛЬШЕ НЕ СТОИТ В Т-ПОЗЕ
но он не умеет стрелять....
лезем в файл с анимациями - тот что animset/creature.(AnimSet).xdb
creature.(AnimSet)
<?xml version="1.0" encoding="UTF-8"?>
<AnimSet ObjectRecordID="52">
<animations>
<Item> - это анимации, эта например смерть
<Kind>death</Kind>
<Anim href="death.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
<Item>
<Kind>hit</Kind>
<Anim href="hit.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
<Item>
<Kind>idle00</Kind>
<Anim href="idle00.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
<Item>
<Kind>move</Kind>
<Anim href="move.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
<Item>
<Kind>attack00</Kind>
<Anim href="attack00.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
<Item>
<Kind>specability</Kind>
<Anim href="specability.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
<Item>
<Kind>happy</Kind>
<Anim href="happy.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
<Item>
<Kind>stir00</Kind>
<Anim href="stir00.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
</animations>
<ExpSrcScene href="/models/Creatures/Castle/Peasant.mb"/>
<ExpSrcClipFolder href="/Animations/Creatures/Peasant/Clip/"/>
<ExpRootTransform>Global</ExpRootTransform>
</AnimSet>
как видно это список анимаций, скопируй некоторые и поменяй "значение", например атаку замени на дальнюю атаку, а абилку на заклинание
<Item>
<Kind>rangeattack</Kind>
<Anim href="attack00.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
<Item>
<Kind>cast</Kind>
<Anim href="specability.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"/>
</Item>
так герой научится стрелять и колдовать
всё) я спать