Добавлен nazarpunk,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Способность
Версия Warcraft:
Reforged
Герой становится невосприимчив к урону и восстанавливает здоровье ближайшим союзникам.
Скриншот
Технические подробности
Перенос в свою карту
Триггеры
- Bless
Способности
- Благословение 'SBls'
- Благословение (бафф) 'ABls'
- Благословение (аура) 'PBls'
Заклинания
- Благословение 'BBls'
Импорт
- Effect\Spell\Bless_Caster.mdx
- ReplaceableTextures\CommandButtons\BTNSpellBless.blp
- ReplaceableTextures\CommandButtonsDisabled\DISBTNSpellBless.blp
- ReplaceableTextures\PassiveButtons\PASSpellBless.blp
- ReplaceableTextures\CommandButtonsDisabled\DISPASSpellBless.blp
Настройка
local ABILITY_ID = AbilityId('SBls')
local BUFF_ABILITY_ID = AbilityId('ABls')
local BUFF_ID = AbilityId('BBls')
local AURA_ID = AbilityId('PBls')
local DURATION = {10, 15, 20}
Код
//! 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('SBls')
local BUFF_ABILITY_ID = AbilityId('ABls')
local BUFF_ID = AbilityId('BBls')
local AURA_ID = AbilityId('PBls')
local DURATION = {10, 15, 20}
-- Заклинание
local DAMAGE_TRIGGER = CreateTrigger()
local DAMAGE_GROUP = CreateGroup()
TriggerAddAction(DAMAGE_TRIGGER, function()
if GetUnitAbilityLevel(GetTriggerUnit(), BUFF_ID) == 0 then return end
BlzSetEventDamage(0)
end)
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
UnitAddAbility(caster, BUFF_ABILITY_ID)
if not IsUnitInGroup(caster, DAMAGE_GROUP) then
TriggerRegisterUnitEvent(DAMAGE_TRIGGER, caster, EVENT_UNIT_DAMAGING)
GroupAddUnit(DAMAGE_GROUP, caster)
end
UnitAddAbility(caster, AURA_ID)
SetUnitAbilityLevel(caster, AURA_ID, level)
TimerStart(CreateTimer(), DURATION[level], false, function()
UnitRemoveAbility(caster, BUFF_ID)
UnitRemoveAbility(caster, BUFF_ABILITY_ID)
UnitRemoveAbility(caster, AURA_ID)
DestroyTimer(GetExpiredTimer())
end)
end)
end
//! endusercode
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Например можно в форме: Jass (было) / Lua (стало)
Отредактирован PROSHELDOTU
Отредактирован PROSHELDOTU
Например, сделать чтобы эффекты не появлялись, если не прошло 0.5 сек с прошлого получения урона