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

Реклама:

invoker1337

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

00zveroboi

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

invoker1337

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

Pupok

Продвинутый
14 Авг 2017
279
10
18
Проект
War of comics vs anime
Реакции
12 0 0
#5
Есть кто дело это и может объяснить более углубленно
Мб быстро уничтожать казарму после чего сразу спавнить на этом месте новую с другим уровнем,а юнитов спавнить при условиях уровня казармы,особо обьяснить не смогу,так как не шарился по данной теме.
 

00zveroboi

Активный
14 Июл 2015
99
9
8
17
Реакции
11 0 1
#6
Я могу объяснить, но может еще видео запилить? может курс гайд устроить по механике? проспонсируете - легко :D
Домой приду - напишу все как сделать, подожди
 

invoker1337

Новичок
16 Июл 2018
5
0
1
Проект
custom maps
Реакции
0 0 0
#7
Я могу объяснить, но может еще видео запилить? может курс гайд устроить по механике? проспонсируете - легко :D
Домой приду - напишу все как сделать, подожди
Сколько хочешь? :)
 

00zveroboi

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

invoker1337

Новичок
16 Июл 2018
5
0
1
Проект
custom maps
Реакции
0 0 0
#10
Хороший вопрос, я могу начать, а потом уже можно поддержать, в зависимости от того как понравится
ну попробуй сделать то о чем я писал , если сможешь напиши обговорим
 

00zveroboi

Активный
14 Июл 2015
99
9
8
17
Реакции
11 0 1
#11
Если кратко: можно реализовать самым разным способом, на примере покажу такую механику: 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

Вуаля, вставляем все работает, живем, пока молодые...
 

00zveroboi

Активный
14 Июл 2015
99
9
8
17
Реакции
11 0 1
#12
Если нужны видео уроки по тому, как писать кастомки более углубленно, чем вот так поверхностно, используя только встроенные функции, пишите, лайкайте, будет хоть 5-10 голосов - сделаю
 

Pupok

Продвинутый
14 Авг 2017
279
10
18
Проект
War of comics vs anime
Реакции
12 0 0
#13
Если нужны видео уроки по тому, как писать кастомки более углубленно, чем вот так поверхностно, используя только встроенные функции, пишите, лайкайте, будет хоть 5-10 голосов - сделаю
У тебя абилки активные,вопрос,как ты их будешь заставлять юзаться самим? Или с помощью SetOwner() и SetControllableByPlayer()? Это же бараки,они сами должны данные действия выполнять.
 

Pupok

Продвинутый
14 Авг 2017
279
10
18
Проект
War of comics vs anime
Реакции
12 0 0
#14
Если нужны видео уроки по тому, как писать кастомки более углубленно, чем вот так поверхностно, используя только встроенные функции, пишите, лайкайте, будет хоть 5-10 голосов - сделаю
Разве юниты или бараки считаются RealHero()?
 

vulkantsk

Друзья CG
21 Июн 2017
529
43
28
17
www.dotabuff.com
Steam
Проект
Roshan defense
Реакции
33 0 2
#15
У тебя абилки активные,вопрос,как ты их будешь заставлять юзаться самим? Или с помощью SetOwner() и SetControllableByPlayer()? Это же бараки,они сами должны данные действия выполнять.
Согласен , было бы неплохо таймер или синкер прикрепить , чтобы барак мобов спавнил через определенный интервал времени !
 

00zveroboi

Активный
14 Июл 2015
99
9
8
17
Реакции
11 0 1
#16
Я сказал сразу, что делаю так, через скиллы, а способов много, да, я забыл увеличение барака, но это тоже не сложно сделать.
 

Pupok

Продвинутый
14 Авг 2017
279
10
18
Проект
War of comics vs anime
Реакции
12 0 0
#18
Реклама: