Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Способность
Версия Warcraft:
Reforged
» MUI: да
» Импорт: иконка
» Утечки: нет
» Требования: нет
Длань Господня, способность, которую могли освоить лишь Истинные Паладины. В их руках, эта сила не только излечивала любые раны и болезни. Но и искореняла любое зло, ставшее на пути Паладина.
Божественная вспышка, не знающая пощады для врагов, и дарующая Благодать союзникам.
И самое главное теперь, Паладин может восстановить себе утерянную жизнь, в ровном размере излеченного здоровья или нанесенного урона.
  • Лечит живых или наносит урон андедам в размере "Базовый урон героя * уровень способности".
  • Восстанавливает здоровье кастеру в количестве восстановленного здоровья или нанесённого урона.

Скриншот

Технические подробности

Перенос в свою карту
Триггеры
  • HolyFist
Способности
  • Длань Господня 'SHoF'
Импорт
  • ReplaceableTextures\CommandButtons\BTNSpellHolyFist.blp
  • ReplaceableTextures\CommandButtonsDisabled\DISBTNSpellHolyFist.blp
Настройка
local ABILITY_ID = AbilityId('SHoF')
local EFFECT = "Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl"
local EFFECT_ATTACH = "origin"
Код
//! beginusercode
do
    -- На момент патча 1.31 эта функция всегда возвращает 0. Поэтому создадим её локальный аналог.
    local function AbilityId(id)
        return id:byte(1) * 0x1000000 + id:byte(2) * 0x10000 + id:byte(3) * 0x100 + id:byte(4)
    end

    -- Настройки
    local ABILITY_ID = AbilityId('SHoF')
    local EFFECT = "Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl"
    local EFFECT_ATTACH = "origin"
    
    -- Заклинание
    local t = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1, 1 do
        TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
    end
    TriggerAddCondition(t, Condition(function()
        return GetSpellAbilityId() == ABILITY_ID
    end))
    TriggerAddAction(t, function()
        local caster = GetTriggerUnit()
        local target = GetSpellTargetUnit()
        local level = GetUnitAbilityLevel(caster, ABILITY_ID)
        local damage = BlzGetUnitBaseDamage(caster, 1) * level
        local hp_caster = 0

        DestroyEffect(AddSpecialEffectTarget(EFFECT, target, EFFECT_ATTACH))

        if IsUnitType(target, UNIT_TYPE_UNDEAD)
        then
            hp_caster = math.min(damage, GetUnitState(target, UNIT_STATE_LIFE))
            UnitDamageTarget(caster, target, damage, true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS);
        else
            local hp = GetWidgetLife(target)
            SetWidgetLife(target, hp + damage)
            hp_caster = math.min(damage, GetUnitState(target, UNIT_STATE_MAX_LIFE) - hp)
        end
        
        if hp_caster > 0
        then
            SetWidgetLife(caster, GetWidgetLife(caster) + hp_caster)
            DestroyEffect(AddSpecialEffectTarget(EFFECT, caster, EFFECT_ATTACH))
        end
    end)
end
//! endusercode
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
5 лет назад
0
Не совсем понял что делает спелл, пока не посмотрел в код. Делай описание по точнее.
Реквестирую больше примеров на луа для чайников, как я.
0
29
5 лет назад
0
Не совсем понял что делает спелл, пока не посмотрел в код.
Описание способностей не моя сильная сторона. Исправил
Реквестирую больше примеров на луа для чайников
Понемногу буду переписывать свои старые заклинания для 1.26 и может новое что-то придумаю)
0
32
5 лет назад
0
NazarPunk, неее, давай сразу новые на луа, чтоб двойной профит..
И у меня вопросы по луа, почему триггер локальный?
И особо луа элементов не заметил, больше на CJ похоже, пропали call и then
а что делает строчка do она обязательна?
0
29
5 лет назад
0
еее, давай сразу новые на луа
Я только любимые перегоню)
больше на CJ похоже
На zinc ещё больше похоже, мой старый код перегонять одно удовольствие)
а что делает строчка do
Блок do end создаёт область видимости и переменные наружу не торчат. Поэтому и триггер локальный)
0
32
5 лет назад
0
Блок do end создаёт область видимости и переменные наружу не торчат. Поэтому и триггер локальный)
а что такое область видимости? то есть это не обязательно? а если ничего не написать всё будет глобально?
про я хз я не програмист
3
29
5 лет назад
3
а что такое область видимости?
Если в кратце изолирование переменных от других областей кода. Вот простейший пример из документации.
local a = 5
print(a) --> 5

do
  local a = 6 -- create a new local inside the do block instead of changing the existing a
  print(a) --> 6
end

print(a) --> 5
0
32
5 лет назад
0
я теперь всё понял, спасибо
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.