Улучшение строений и юнитов

invoker1337

Новичок
16 Июл 2018
5
0
Проект
custom maps
Как сделать улучшение строений и юнитов?
Например я хочу сделать казарму которую можно будет улучшать
Пример на картинке
А с этих казарм будут выходить крипы так же будут улучшаться с прокачкой казарм1.png
 

00zveroboi

Активный
14 Июл 2015
103
17
Создать юнита (казарму) создать функцию ручное событие на лвлап, в ней менять модель или размер, так же задавать свойство для юнита, в зависимости от свойства юнита спавнить соответствующих юнитов других. Тут нужно понимать как работает дота на луа, тогда все легко.
 

invoker1337

Новичок
16 Июл 2018
5
0
Проект
custom maps
Есть кто дело это и может объяснить более углубленно
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Есть кто дело это и может объяснить более углубленно
Мб быстро уничтожать казарму после чего сразу спавнить на этом месте новую с другим уровнем,а юнитов спавнить при условиях уровня казармы,особо обьяснить не смогу,так как не шарился по данной теме.
 

00zveroboi

Активный
14 Июл 2015
103
17
Я могу объяснить, но может еще видео запилить? может курс гайд устроить по механике? проспонсируете - легко :D
Домой приду - напишу все как сделать, подожди
 

00zveroboi

Активный
14 Июл 2015
103
17
Но начинать естественно буду тогда с основ, а не сразу то, что тебе нужно, насчет этого уже распишу сегодня чуть позже
P.S. мои основы это уже далеко не то, что умеет каждый сейчас ;):cool:
 

00zveroboi

Активный
14 Июл 2015
103
17
Если кратко: можно реализовать самым разным способом, на примере покажу такую механику: 1 казарма, у нее 2 скилла: 1-ый спавнит юнита лвла казармы, 2-ой апгрейдит казарму, у казармы и у юнитов максимальный лвл, который сами задаем, стандартно 25, юниты будут различаться по стандартным статам.
Создаем юнитов и казарму: npc_units_custom.txt
Код:
"monster"   
    {
        // General
        //----------------------------------------------------------------
        "Model"                        "models/creeps/neutral_creeps/n_creep_gnoll/n_creep_gnoll_frost.vmdl"    // Model.
        "BaseClass"                    "npc_dota_creature"
        "Level"                        "1"
        "ModelScale"                 ".7"

        // Armor
        //----------------------------------------------------------------
        "ArmorPhysical"                "2"            // Physical protection.

        // Attack
        //----------------------------------------------------------------
        "AttackCapabilities"        "DOTA_UNIT_CAP_MELEE_ATTACK"
        "AttackDamageMin"            "2"        // Damage range min.
        "AttackDamageMax"            "3"        // Damage range max.
        "AttackRate"                "1"        // Speed of attack.
        "AttackAnimationPoint"        "0.5"        // Normalized time in animation cycle to attack.
        "AttackAcquisitionRange"    "400"        // Range within a target can be acquired.
        "AttackRange"                "100"        // Range within a target can be attacked.         

        // Bounty
        //----------------------------------------------------------------
        "BountyXP"                    "1"        // Experience earn.
        "BountyGoldMin"                "2"        // Gold earned min.
        "BountyGoldMax"                "4"        // Gold earned max.

        // Movement
        //----------------------------------------------------------------
        "MovementCapabilities"        "DOTA_UNIT_CAP_MOVE_GROUND"
        "MovementSpeed"                "150"        // Speed.           

        // Status
        //----------------------------------------------------------------
        "StatusHealth"                "60"        // Base health.
        "StatusHealthRegen"            "1"            // Health regeneration rate.
        "StatusMana"                "0"            // Base mana.
        "StatusManaRegen"            "0.0"        // Mana regeneration rate.         
        
        // Vision
        //----------------------------------------------------------------
        "VisionDaytimeRange"        "500"        // Range of vision during day light.
        "VisionNighttimeRange"        "300"        // Range of vision at night time.

        // Team
        //----------------------------------------------------------------
        "TeamName"                    "DOTA_TEAM_NEUTRALS"                        // Team name.
        "CombatClassAttack"            "DOTA_COMBAT_CLASS_ATTACK_BASIC"
        "CombatClassDefend"            "DOTA_COMBAT_CLASS_DEFEND_BASIC"
        "UnitRelationshipClass"        "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT"

        // Creature Data
        //----------------------------------------------------------------
        "Creature"
        {
            //Level Up
            "HPGain"                    "10"
            "DamageGain"                "2"
            "ArmorGain"                    "0.5"
            "MagicResistGain"            "0"
            "MoveSpeedGain"                "1"
            "BountyGain"                "1"
            "XPGain"                    "2"
        }
    }
Код:
"barrack"   
    {
        // General
        //----------------------------------------------------------------
        "Model"                        "models/props_structures/radiant_melee_barracks001.vmdl"    // Model.
        "BaseClass"                    "npc_dota_creature"
        "Level"                        "1"
        "ModelScale"                 ".6"

        // Armor
        //----------------------------------------------------------------
        "ArmorPhysical"                "0"            // Physical protection.

        // Attack
        //----------------------------------------------------------------
        "AttackCapabilities"        "DOTA_UNIT_CAP_NO_ATTACK"
        "AttackDamageMin"            "0"        // Damage range min.
        "AttackDamageMax"            "0"        // Damage range max.
        "AttackRate"                "1"        // Speed of attack.
        "AttackAnimationPoint"        "0.5"        // Normalized time in animation cycle to attack.
        "AttackAcquisitionRange"    "400"        // Range within a target can be acquired.
        "AttackRange"                "100"        // Range within a target can be attacked.         

        // Bounty
        //----------------------------------------------------------------
        "BountyXP"                    "0"        // Experience earn.
        "BountyGoldMin"                "0"        // Gold earned min.
        "BountyGoldMax"                "0"        // Gold earned max.

        // Movement
        //----------------------------------------------------------------
        "MovementCapabilities"        "DOTA_UNIT_CAP_MOVE_NONE"
        "MovementSpeed"                "0"        // Speed.           

        // Status
        //----------------------------------------------------------------
        "StatusHealth"                "500"        // Base health.
        "StatusHealthRegen"            "0"            // Health regeneration rate.
        "StatusMana"                "0"            // Base mana.
        "StatusManaRegen"            "0.0"        // Mana regeneration rate.         
        
        // Vision
        //----------------------------------------------------------------
        "VisionDaytimeRange"        "1000"        // Range of vision during day light.
        "VisionNighttimeRange"        "1000"        // Range of vision at night time.

        // Team
        //----------------------------------------------------------------
        "TeamName"                    "DOTA_TEAM_NEUTRALS"                        // Team name.
        "CombatClassAttack"            "DOTA_COMBAT_CLASS_ATTACK_BASIC"
        "CombatClassDefend"            "DOTA_COMBAT_CLASS_DEFEND_BASIC"
        "UnitRelationshipClass"        "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT"

        // Creature Data
        //----------------------------------------------------------------
        "Creature"
        {
            //Level Up
            "HPGain"                    "250"
            "DamageGain"                "0"
            "ArmorGain"                    "0"
            "MagicResistGain"            "0"
            "MoveSpeedGain"                "0"
            "BountyGain"                "0"
            "XPGain"                    "0"
        }
    }
Успех!

Далее ловим ушастых
Lua:
ListenToGameEvent( "npc_spawned", Dynamic_Wrap( Game, "OnNPCSpawned" ), self )

Словили - чекаем на первый спавн нашего героя:
Lua:
local Unit = EntIndexToHScript( event.entindex )
if Unit:IsRealHero() and Unit:GetPlayerID == 0 and Unit.FirstSpawn == nil then
    Unit.FirstSpawn = true;
    local Barrack = CreateUnitByName(
        "barrack",
        Vector(0, 0, 128),
        true,
        Unit,
        Unit,
        DOTA_TEAM_BADGUYS
    )
    Barrack:SetOwner(Unit)
    Barrack:SetControllableByPlayer(Unit:GetPlayerID(), false)
end

Создали, Ура!

Так же нужны скиллы.
npc_abilities_custom.txt
Код:
"spawn_mob"
    {
        // General
        //-------------------------------------------------------------------------------------------------------------
        "BaseClass"                        "ability_lua"
        "AbilityBehavior"                "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
        "ScriptFile"                          "ability_spawn_mob"
        
        // Casting
        //-------------------------------------------------------------------------------------------------------------
        "AbilityCastRange"                "0"
        "AbilityCastPoint"                "0"

        // Time       
        //-------------------------------------------------------------------------------------------------------------
        "AbilityCooldown"                "5"

        // Cost
        //-------------------------------------------------------------------------------------------------------------
        "AbilityManaCost"                "0"

        // Special
        //-------------------------------------------------------------------------------------------------------------
        "AbilitySpecial"
        {
        }
    }
Код:
"self_upgrade"
    {
        // General
        //-------------------------------------------------------------------------------------------------------------
        "BaseClass"                        "ability_lua"
        "AbilityBehavior"                "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
        "ScriptFile"                          "ability_self_upgrader"
        
        // Casting
        //-------------------------------------------------------------------------------------------------------------
        "AbilityCastRange"                "0"
        "AbilityCastPoint"                "0"

        // Time       
        //-------------------------------------------------------------------------------------------------------------
        "AbilityCooldown"                "100"

        // Cost
        //-------------------------------------------------------------------------------------------------------------
        "AbilityManaCost"                "0"

        // Special
        //-------------------------------------------------------------------------------------------------------------
        "AbilitySpecial"
        {
        }
    }

Lua:
spawn_mob = class({})

function spawn_mob:OnSpellStart()
    local Monster = CreateUnitByName(
        "monster",
        self:GetOrigin(),
        true,
        self:GetCaster():GetOwner(),
        self:GetCaster():GetOwner(),
        self:GetCaster():GetTeamNumber()
    )
    Monster:SetControllableByPlayer(self:GetCaster():GetPlayerID(), false)
    Monster:SetOwner(self:GetCaster())
    Monster:SetLevel(self:GetCaster():GetLevel())
end

Lua:
self_upgrader = class({})

function self_upgrader:OnSpellStart()
    self:GetCaster():SetLevel(self:GetCaster():GetLevel() + 1)
end

Вуаля, вставляем все работает, живем, пока молодые...
 
  • Нравится
Реакции: invoker1337 и vulkantsk

00zveroboi

Активный
14 Июл 2015
103
17
Если нужны видео уроки по тому, как писать кастомки более углубленно, чем вот так поверхностно, используя только встроенные функции, пишите, лайкайте, будет хоть 5-10 голосов - сделаю
 
  • Нравится
Реакции: bleff и Chernobl

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Если нужны видео уроки по тому, как писать кастомки более углубленно, чем вот так поверхностно, используя только встроенные функции, пишите, лайкайте, будет хоть 5-10 голосов - сделаю
У тебя абилки активные,вопрос,как ты их будешь заставлять юзаться самим? Или с помощью SetOwner() и SetControllableByPlayer()? Это же бараки,они сами должны данные действия выполнять.
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Если нужны видео уроки по тому, как писать кастомки более углубленно, чем вот так поверхностно, используя только встроенные функции, пишите, лайкайте, будет хоть 5-10 голосов - сделаю
Разве юниты или бараки считаются RealHero()?
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,137
195
www.dotabuff.com
Проект
Roshan defense
У тебя абилки активные,вопрос,как ты их будешь заставлять юзаться самим? Или с помощью SetOwner() и SetControllableByPlayer()? Это же бараки,они сами должны данные действия выполнять.
Согласен , было бы неплохо таймер или синкер прикрепить , чтобы барак мобов спавнил через определенный интервал времени !
 

00zveroboi

Активный
14 Июл 2015
103
17
Я сказал сразу, что делаю так, через скиллы, а способов много, да, я забыл увеличение барака, но это тоже не сложно сделать.
 
Реклама: