У меня есть пустышка на основе спеллбука. Если я дам ее юниту, кодом добавлю в нее способность предмета, например, на скорость атаки от перчаток, могу ли я изменить значение скорости конкретно этой способности, чтобы оно не изменилось у всех способностей с этим ID? Т.е. у тех, кто в данный момент будет иметь в инвентаре перчатки скорости, бонус должен остаться прежним.
Патч текущий (1.32+).

Принятый ответ

Я проверю с атакой. В единицах будет сразу понятно, но уже видно, что не у всех перчаток меняется как минимум, что хорошо.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
8
3 года назад
Отредактирован build
1
Вызываю эксперта Bergi_Bear
2
26
3 года назад
Отредактирован Extremator
2
Ну дак не общие данные меняй, а данные конкретного объекта (абилки).
Тип ability не просто так же дан, не?)
3
27
3 года назад
3
build, берги удалил варкрафт 3.
0
23
3 года назад
0
и я удалил раньше пока берги познал луа
1
32
3 года назад
1
МрачныйВорон, ну он же за рефаунд, как так?

Но насколько помню этого не завезли в рефаун, могу ошибатся, за последними патчами пристально не слежу, скоро анрайз свой доделает, там будет.
4
28
3 года назад
4
build, сможешь, но не факт, что смена именно этого поля пашет. Учти, что в этих функциях уровень начинается с 0, а не с 1.
1
27
3 года назад
1
Надо изучить нативки по ability. Если там не работает. Мб есть нативки для юнитов (реген скорость итд)? При получкении итема прибавляешь характеристики, а при дропе убавляешь
0
8
3 года назад
0
В общем, накидал я такой код. В спеллбук добавляется способность, да, но вот на счет скорости способности от предмета не могу понять. "На глаз" проверить как-то не очень эффективно, а функция BlzGetAbilityRealLevelField возвращает 0. Мало что понятно, короче :(
код
do
    function FourCC(id)
		return string.unpack(">I4", id)
	end

    local f = InitGlobals -- записываем InitGlobals в переменную
    function InitGlobals() -- заменяем оригинальную InitGlobals своей
        f() -- вызываем оригинальную InitGlobals из переменной

        local spellId = FourCC("A000") -- id кастуемой способности
        local sbId = FourCC("A001") -- id спеллбука
        local bonusId = FourCC("AIsx") -- id способности перчаток скорости

        local trgAttackSpeed = CreateTrigger()
        TriggerRegisterPlayerUnitEvent(trgAttackSpeed, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT)
        TriggerAddAction(trgAttackSpeed, function()
            local u = GetTriggerUnit()
            local lvl = GetUnitAbilityLevel(u, spellId)
            local speedBonusValue = 250 + (50 * lvl) -- 300/350/400 скорости атаки от уровня
            local duration = 12.0
            UnitAddAbility(u, sbId)
            UnitMakeAbilityPermanent(u, true, sbId)

            -- получаем абилку спеллбука и добавляем бонус перчаток
            local sbAbil = BlzGetUnitAbility(u, sbId)
            BlzSetAbilityStringLevelField(sbAbil, ABILITY_SLF_SPELL_LIST, 1, "AIsx") -- ID именно строкой

            -- получаем абилку бонуса и меняем значение скорости атаки на нужное
            local bonusAbil = BlzGetUnitAbility(u, bonusId)
            BlzSetAbilityRealLevelField(bonusAbil, ABILITY_RLF_ATTACK_SPEED_INCREASE_ISX1, 1, speedBonusValue)
            print('Ability speed bonus: ' .. BlzGetAbilityRealLevelField(bonusAbil, ABILITY_RLF_ATTACK_SPEED_INCREASE_ISX1, 1))

            TimerStart(CreateTimer(), duration, false, function()
                UnitMakeAbilityPermanent(u, false, sbId)
                UnitRemoveAbility(u, sbId)
            end)
        end)
    end
end
0
8
3 года назад
0
build, сможешь, но не факт, что смена именно этого поля пашет. Учти, что в этих функциях уровень начинается с 0, а не с 1.
Стоп, возможно в этом дело, надо проверить.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.