Форум HeroesWorld-а - Показать сообщение отдельно - помогите создать героя из этого юнита
Показать сообщение отдельно
#4
Старый 16.07.2024, 22:53
  #4
^
fktifzobr@mail.ru
 
Аватар для fktifzobr@mail.ru
📖
Регистрация: 15.04.2014
Сообщения: 3457
Регистрация: 15.04.2014
Сообщения: 3457
По умолчанию
Re: помогите создать героя из этого юнита

так, поехали, как сделать существо героем?

этап 1
сделать так что-бы существо перестало быть существом... 

вот скачал мод на существо из семерки, открыл его, внутри папки

bin
Cameras
GameMechanics
MapObjects
new_creatures
Sounds

красные папки влияют на существ

1) в папке Cameras находится файл меняющий камеру в окне найма, по хорошему этот файл надо оставить и переименовать чтобы использовать камеру для героя

заходишь в \Cameras\Interface\HireCreatures - внутри файл Vampire.xdb - переименуй в VampireHero.xdb

2) папку GameMechanics можно удалить, там файл соединяющий существо и модель, можно сказать что это корень

3) MapObjects можно удалять сразу, потому что там находится файл для редактора карт (с большой вероятностью он сломан)

этап 2
нужно подключить модель к герою

скорее всего тебе надо заменить какого-нибудь некроманта
надо взять его из data.pak

в папке \MapObjects\Necropolis лежат все некроманты, существа некрополиса и здания, некроманты имеют пометку .(AdvMapHeroShared)

имена по большей части не совпадают с названиями 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>

так герой научится стрелять и колдовать 


всё) я спать
fktifzobr@mail.ru вне форума
Ответить с цитированием