Призыв медведя . Неполная абилка.

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,149
196
www.dotabuff.com
Проект
Roshan defense
Взял абилку из SpellLibrary и оказалось , что она не полная . То есть когда перепризываешь медведя , то все предметы , которые ты в него передавал исчезают !
Плюс у медведя еще должна быть какой-то дизармяший модификатор , который включается при удалении от хозяина , но это уже совсем другая история . . .
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,149
196
www.dotabuff.com
Проект
Roshan defense
В общем самолично решил эту проблему , получилось довольно таки неплохо , оказывается кулдаун предмета привязывается к его индексу и передается вместе с ним!
Lua:
function SpiritBearSpawn( event )
    local caster = event.caster
    local player = caster:GetPlayerID()
    local ability = event.ability
    local level = ability:GetLevel()
    local origin = caster:GetAbsOrigin() + RandomVector(100)

    -- Set the unit name, concatenated with the level number
    local unit_name = event.unit_name
    unit_name = unit_name..level

    -- Synergy Level. Checks both the default and the datadriven Synergy
    local synergyAbility = caster:FindAbilityByName("lone_druid_synergy_datadriven")
    if synergyAbility == nil then
        synergyAbility = caster:FindAbilityByName("lone_druid_synergy")
    end

    -- Check if the bear is alive, heals and spawns them near the caster if it is
    if caster.bear  and IsValidEntity(caster.bear) and caster.bear:IsAlive() then
        FindClearSpaceForUnit(caster.bear, origin, true)
        caster.bear:SetHealth(caster.bear:GetMaxHealth())
    
        -- Spawn particle
        local particle = ParticleManager:CreateParticle("particles/units/heroes/hero_lone_druid/lone_druid_bear_spawn.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster.bear)   

        -- Re-Apply the synergy buff if we found one
        if caster.bear:HasModifier("modifier_bear_synergy") then
            caster.bear:RemoveModifierByName("modifier_bear_synergy")
            synergyAbility:ApplyDataDrivenModifier(caster, caster.bear, "modifier_bear_synergy", nil)
        end
        
    else
        -- Create the unit and make it controllable
        caster.bear = CreateUnitByName(unit_name, origin, true, caster, caster, caster:GetTeamNumber())
        caster.bear:SetControllableByPlayer(player, true)

        -- Apply the backslash on death modifier
        if ability ~= nil then
            ability:ApplyDataDrivenModifier(caster, caster.bear, "modifier_spirit_bear", nil)
        end

        -- Apply the synergy buff if the ability exists
        if synergyAbility ~= nil then
            synergyAbility:ApplyDataDrivenModifier(caster, caster.bear, "modifier_bear_synergy", nil)
        end

        -- Learn its abilities: return lvl 2, entangle lvl 3, demolish lvl 4. By Index
        LearnBearAbilities( caster.bear, 1 )
    end

end

Lua:
function SpiritBearSpawn( event )
    local caster = event.caster
    local player = caster:GetPlayerID()
    local ability = event.ability
    local level = ability:GetLevel()
    local origin = caster:GetAbsOrigin() + RandomVector(100)

    -- Set the unit name, concatenated with the level number
    local unit_name = event.unit_name
    unit_name = unit_name..level

    -- Synergy Level. Checks both the default and the datadriven Synergy
    local synergyAbility = caster:FindAbilityByName("lone_druid_synergy_datadriven")
    if synergyAbility == nil then
        synergyAbility = caster:FindAbilityByName("lone_druid_synergy")
    end

    -- Check if the bear is alive, heals and spawns them near the caster if it is
    if  caster.bear and IsValidEntity(caster.bear) and caster.bear:IsAlive() then
        FindClearSpaceForUnit(caster.bear, origin, true)
        caster.bear:SetHealth(caster.bear:GetMaxHealth())
    
        -- Spawn particle
        local particle = ParticleManager:CreateParticle("particles/units/heroes/hero_lone_druid/lone_druid_bear_spawn.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster.bear)   

        -- Re-Apply the synergy buff if we found one
        if caster.bear:HasModifier("modifier_bear_synergy") then
            caster.bear:RemoveModifierByName("modifier_bear_synergy")
            synergyAbility:ApplyDataDrivenModifier(caster, caster.bear, "modifier_bear_synergy", nil)
        end
        
    else
        
        if caster.bear then     
            local unit = caster.bear
            item_table = {}
            for i = 0, 5 do
                local item = unit:GetItemInSlot( i )

                if item ~= nil then         
                    table.insert(item_table , item)
                end
                
            end
            

            
        end

        -- Create the unit and make it controllable
        caster.bear = CreateUnitByName(unit_name, origin, true, caster, caster, caster:GetTeamNumber())
        caster.bear:SetControllableByPlayer(player, true)
            local items = item_table or {}
             for _,item in pairs(items) do   
                 caster.bear:AddItem(item)
             end
        -- Apply the backslash on death modifier
        if ability ~= nil then
            ability:ApplyDataDrivenModifier(caster, caster.bear, "modifier_spirit_bear", nil)
        end

        -- Apply the synergy buff if the ability exists
        if synergyAbility ~= nil then
            synergyAbility:ApplyDataDrivenModifier(caster, caster.bear, "modifier_bear_synergy", nil)
        end

        -- Learn its abilities: return lvl 2, entangle lvl 3, demolish lvl 4. By Index
        LearnBearAbilities( caster.bear, 1 )
    end

end
 
  • Нравится
Реакции: Pancer и Илья

Илья

Друзья CG
25 Сен 2015
2,348
41
По поводу разоружения - просто сделай таймер (или IntervalThink), в котором проверяешь наличие героя/медведя по близости (как удобнее). Ну и навешивай модификатор разоружения. Можно и свой написать, но и от алебарды отлично подходит для таких целей. Тут можешь найти.
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,149
196
www.dotabuff.com
Проект
Roshan defense
Это по сути как-то сильно на баланс игры не влияет , поэтому нету необходимости это делать )!
По поводу разоружения - просто сделай таймер (или IntervalThink), в котором проверяешь наличие героя/медведя по близости (как удобнее). Ну и навешивай модификатор разоружения. Можно и свой написать, но и от алебарды отлично подходит для таких целей. Тут можешь найти.
 
Реклама: