Добавлен nazarpunk,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Способность
Версия Warcraft:
Reforged
Длань Господня, способность, которую могли освоить лишь Истинные Паладины. В их руках, эта сила не только излечивала любые раны и болезни. Но и искореняла любое зло, ставшее на пути Паладина.
Божественная вспышка, не знающая пощады для врагов, и дарующая Благодать союзникам.
И самое главное теперь, Паладин может восстановить себе утерянную жизнь, в ровном размере излеченного здоровья или нанесенного урона.
- Лечит живых или наносит урон андедам в размере "Базовый урон героя * уровень способности".
- Восстанавливает здоровье кастеру в количестве восстановленного здоровья или нанесённого урона.
Скриншот
Технические подробности
Перенос в свою карту
Триггеры
- 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
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован PT153
NazarPunk, это не костыли, а весьма удобный способ править функции config и main. Без инжекта тебе после каждого нового сохранения придётся править war3map.lua или war3map.j заново, потому что редактор эти файлы перезаписывает.
Отредактирован DarkLigthing
Главный вопрос - зачем править руками конфиг и мейн? Какие задачи решаются правкой этих двух функций и не могут быть решены другими способами?