Ульта со свапом способностей

GooDDarK

Активный
27 Окт 2017
102
2
steamcommunity.com
Проект
Naruto Wars Reborn
Наткнулся на еще одну проблему...
В общем сделал герою ульту, при переходе в которую у него меняются два первых скилла, а при выходе из ульты эти скиллы меняются обратно.
Lua:
require('timers')

function ult(keys)
    local caster = keys.caster
    local ability = keys.ability

    ability0_level = caster:GetAbilityByIndex(0):GetLevel()
    ability0_cooldown = caster:GetAbilityByIndex(0):GetCooldownTimeRemaining()
    caster:AddAbility("ability1_new")
    caster:SwapAbilities("ability1", "ability1_new", false, true)
    caster:RemoveAbility("ability1")
    caster:GetAbilityByIndex(0):SetLevel(ability0_level)
    caster:GetAbilityByIndex(0):StartCooldown(ability0_cooldown)
   
    ability1_level = caster:GetAbilityByIndex(1):GetLevel()
    ability1_cooldown = caster:GetAbilityByIndex(1):GetCooldownTimeRemaining()
    caster:AddAbility("ability2_new")
    caster:SwapAbilities("ability2", "ability2_new", false, true)
    caster:RemoveAbility("ability2")
    caster:GetAbilityByIndex(1):SetLevel(ability1_level)
    caster:GetAbilityByIndex(1):StartCooldown(ability1_cooldown)
end

function ult_end(keys)
    local caster = keys.caster
    local ability = keys.ability
    local ability0_name = caster:GetAbilityByIndex(0)
    local ability1_name = caster:GetAbilityByIndex(1)
   
    ability0_level = caster:GetAbilityByIndex(0):GetLevel()
    ility0_cooldown = caster:GetAbilityByIndex(0):GetCooldownTimeRemaining()
    caster:AddAbility("ability1")
    caster:SwapAbilities("ability1", "ability1_new", true, false)
    caster:RemoveAbility("ability1_new")
    caster:GetAbilityByIndex(0):SetLevel(ability0_level)
    caster:GetAbilityByIndex(0):StartCooldown(ability0_cooldown)

    ability1_cooldown = caster:GetAbilityByIndex(1):GetCooldownTimeRemaining()
    ability1_level = caster:GetAbilityByIndex(1):GetLevel()
    caster:AddAbility("ability2")
    caster:SwapAbilities("ability2", "ability2_new", true, false)
    caster:RemoveAbility("ability2_new")
    caster:GetAbilityByIndex(1):SetLevel(ability1_level)
    caster:GetAbilityByIndex(1):StartCooldown(ability1_cooldown)

    if ability:IsCooldownReady() and ability:GetAutoCastState() and not caster:IsSilenced() and not caster:IsStunned() and caster:IsAlive() and caster:IsRealHero() and caster:GetMana() > ability:GetManaCost(ability:GetManaCost(ability:GetLevel() - 1)) then
        caster:CastAbilityImmediately(ability, caster:GetPlayerID())
    end
end

При этом эти два скилла должны сохранять уровень своей прокачки, но почему-то не сохраняют, хотя вроде написано всё правильно...
Может я всё-таки что-то не так написал? :confused:
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
Наткнулся на еще одну проблему...
В общем сделал герою ульту, при переходе в которую у него меняются два первых скилла, а при выходе из ульты эти скиллы меняются обратно.
Lua:
require('timers')

function ult(keys)
    local caster = keys.caster
    local ability = keys.ability

    ability0_level = caster:GetAbilityByIndex(0):GetLevel()
    ability0_cooldown = caster:GetAbilityByIndex(0):GetCooldownTimeRemaining()
    caster:AddAbility("ability1_new")
    caster:SwapAbilities("ability1", "ability1_new", false, true)
    caster:RemoveAbility("ability1")
    caster:GetAbilityByIndex(0):SetLevel(ability0_level)
    caster:GetAbilityByIndex(0):StartCooldown(ability0_cooldown)
  
    ability1_level = caster:GetAbilityByIndex(1):GetLevel()
    ability1_cooldown = caster:GetAbilityByIndex(1):GetCooldownTimeRemaining()
    caster:AddAbility("ability2_new")
    caster:SwapAbilities("ability2", "ability2_new", false, true)
    caster:RemoveAbility("ability2")
    caster:GetAbilityByIndex(1):SetLevel(ability1_level)
    caster:GetAbilityByIndex(1):StartCooldown(ability1_cooldown)
end

function ult_end(keys)
    local caster = keys.caster
    local ability = keys.ability
    local ability0_name = caster:GetAbilityByIndex(0)
    local ability1_name = caster:GetAbilityByIndex(1)
  
    ability0_level = caster:GetAbilityByIndex(0):GetLevel()
    ility0_cooldown = caster:GetAbilityByIndex(0):GetCooldownTimeRemaining()
    caster:AddAbility("ability1")
    caster:SwapAbilities("ability1", "ability1_new", true, false)
    caster:RemoveAbility("ability1_new")
    caster:GetAbilityByIndex(0):SetLevel(ability0_level)
    caster:GetAbilityByIndex(0):StartCooldown(ability0_cooldown)

    ability1_cooldown = caster:GetAbilityByIndex(1):GetCooldownTimeRemaining()
    ability1_level = caster:GetAbilityByIndex(1):GetLevel()
    caster:AddAbility("ability2")
    caster:SwapAbilities("ability2", "ability2_new", true, false)
    caster:RemoveAbility("ability2_new")
    caster:GetAbilityByIndex(1):SetLevel(ability1_level)
    caster:GetAbilityByIndex(1):StartCooldown(ability1_cooldown)

    if ability:IsCooldownReady() and ability:GetAutoCastState() and not caster:IsSilenced() and not caster:IsStunned() and caster:IsAlive() and caster:IsRealHero() and caster:GetMana() > ability:GetManaCost(ability:GetManaCost(ability:GetLevel() - 1)) then
        caster:CastAbilityImmediately(ability, caster:GetPlayerID())
    end
end

При этом эти два скилла должны сохранять уровень своей прокачки, но почему-то не сохраняют, хотя вроде написано всё правильно...
Может я всё-таки что-то не так написал? :confused:
Так ты ремуваешь абилку, а потом добавляешь новую, естественно ничего не сохраняется
 

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
Зачем свапать, а потом еще и удалять?
 

GooDDarK

Активный
27 Окт 2017
102
2
steamcommunity.com
Проект
Naruto Wars Reborn
Так ты ремуваешь абилку, а потом добавляешь новую, естественно ничего не сохраняется
Зачем свапать, а потом еще и удалять?
Ой, лул, во я даю... Спасиб :D


Используй FindAbilityByName вместо GetAbilityByIndex
Лень, и так работает пока что :p


Надеюсь, в коде не так
Не понял, о чем ты?..
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Всё намного проще,просто юзай так примерно:
Код:
    caster:SwapAbilities("какой спелл меняем",               ""спелл на какой меняем", false, true)
Главное,чтобы скилл на который меняешь был у героя в ability1-999 прописал типо такого:
Код:
         "Ability1"        "меняемый скилл"

        "Ability2"        "на какой меняем"
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Чтобы лвл спэлла был такой же как и у твоей ульты нужно прописать так:
Код:
            "OnUpgrade"
        {
            "LevelUpAbility"
            {
                "Target"         "CASTER"
                "AbilityName"    "скилл который должен быть такого же уровня"
            }
        }
P.S Я пишу на DD в большинстве случаев,если у тебя скилл через Lua,не могу сказать будут ли все эти способы работать,но в теории могут.
 
Реклама: