Набор предметов для проекта Последняя Надежда.
Предметы
Молот Стражника Света: При использовании любой способности с целью, есть шанс 10% исцелить союзную цель на 100 ед или нанести 50 ед урона враждебной нежити. Каждый предмет в инвентаре увеличивает шанс, объём исцеления или урона.
Код: Hammer of Light Guardian
do
local InitGlobalsOrigin = InitGlobals
function InitGlobals()
InitGlobalsOrigin()
local ITEM = FourCC('IHLG') -- равкод предмета
local CHANCE = 10 -- шанс срабатывания
local HEAL = 100 -- количество излеченного здоровья
local DAMAGE = HEAL / 2 -- количество нанесённого урона
local EFFECT = { 'Abilities/Spells/Human/HolyBolt/HolyBoltSpecialArt.mdl', 'origin' } -- эффект
local SpellEffectTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
TriggerRegisterPlayerUnitEvent(SpellEffectTrigger, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
end
TriggerAddAction(SpellEffectTrigger, function()
local caster = GetTriggerUnit()
local casterOwner = GetOwningPlayer(caster)
local target = GetSpellTargetUnit()
if not IsUnitType(caster, UNIT_TYPE_HERO) or target == nil then return end
local count = 0
for i = 0, bj_MAX_INVENTORY do
local item = UnitItemInSlot(caster, i)
if GetItemTypeId(item) == ITEM then
count = count + 1
end
end
if count == 0 or math.random(0, 100) > CHANCE * count then return end
if IsUnitEnemy(target, casterOwner) and IsUnitType(target, UNIT_TYPE_UNDEAD) then
DestroyEffect(AddSpecialEffectTarget(EFFECT[1], target, EFFECT[2]))
UnitDamageTarget(caster, target, DAMAGE * count, false, true, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
end
if IsUnitAlly(target, casterOwner) and not IsUnitType(target, UNIT_TYPE_UNDEAD) then
DestroyEffect(AddSpecialEffectTarget(EFFECT[1], target, EFFECT[2]))
SetWidgetLife(target, GetWidgetLife(target) + HEAL * count)
end
end)
end
end
Браслет Мага: Наносит урон юнитам в области в размере интеллект * количество предметов. Если юнит при этом умирает, то восстанавливает ману герою в размере нанесённого урона.
Код: Brace of Mage
do
local InitGlobalsOrigin = InitGlobals
function InitGlobals()
InitGlobalsOrigin()
local ITEM = FourCC('IBoM') -- равкод предмета
local ABILITY = FourCC('ABoM') -- равкод способности предмета
local MISSILE = 'Effect/Spell/BraceOfMage/Missile.mdx' -- модель снаряда hiveworkshop.com/threads/blizzard.315713
local EXPLOSIVE = 'Effect/Spell/BraceOfMage/Explosive.mdx' -- модель взрыва hiveworkshop.com/threads/pillar-of-flame.315281
local EXPLOSIVE_DELAY = 0.7 -- задержка перед взрывом
local EFFECT_DAMAGE = { 'Abilities/Weapons/SpiritOfVengeanceMissile/SpiritOfVengeanceMissile.mdl', 'chest' } -- эффект урона
local EFFECT_MANA = { 'Abilities/Spells/Items/AIma/AImaTarget.mdl', 'chest' } -- эффект восстановления маны
local GROUP = CreateGroup()
local SpellEffectTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
TriggerRegisterPlayerUnitEvent(SpellEffectTrigger, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
end
TriggerAddAction(SpellEffectTrigger, function()
if GetSpellAbilityId(GetSpellAbility()) ~= ABILITY then return end
local caster = GetTriggerUnit()
local casterOwner = GetOwningPlayer(caster)
local count = 0
for i = 0, bj_MAX_INVENTORY do
local item = UnitItemInSlot(caster, i)
if GetItemTypeId(item) == ITEM then
count = count + 1
end
end
if count == 0 then return end
local damage = GetHeroInt(caster, true) * count
local x, y = GetSpellTargetX(), GetSpellTargetY()
local ability = BlzGetUnitAbility(caster, ABILITY)
local range = BlzGetAbilityRealLevelField(ability, ABILITY_RLF_AREA_OF_EFFECT, 0)
AddSpecialEffect(MISSILE, x, y)
TimerStart(CreateTimer(), EXPLOSIVE_DELAY, false, function()
AddSpecialEffect(EXPLOSIVE, x, y)
GroupEnumUnitsInRange(GROUP, x, y, range + 256)
local mana = 0
for index = 1, BlzGroupGetSize(GROUP) do
local target = BlzGroupUnitAt(GROUP, index - 1)
if UnitAlive(target)
and IsUnitInRangeXY(target, x, y, range)
and IsUnitEnemy(target, casterOwner)
and not IsUnitType(target, UNIT_TYPE_FLYING)
and not IsUnitType(target, UNIT_TYPE_MAGIC_IMMUNE)
then
DestroyEffect(AddSpecialEffectTarget(EFFECT_DAMAGE[1], target, EFFECT_DAMAGE[2]))
local life = GetWidgetLife(target)
UnitDamageTarget(caster, target, damage, false, true, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
if not UnitAlive(target) then
mana = mana + life
end
end
end
GroupClear(GROUP)
if mana > 0 then
DestroyEffect(AddSpecialEffectTarget(EFFECT_MANA[1], caster, EFFECT_MANA[2]))
SetUnitState(caster, UNIT_STATE_MANA, GetUnitState(caster, UNIT_STATE_MANA) + mana)
end
return DestroyTimer(GetExpiredTimer())
end)
end)
end
end
Ред. Берги
При использовании любой способности с целью, есть шанс 10% исцелить союзную цель на 100 ед или нанести 50 ед урона враждебной нежити.
Каждый предмет в инвентаре увеличивает шанс, объём исцеления и урона
Ред. nazarpunk
Ред. BladeInDoom
BladeInDoom: Это да). Меня эти переменые мозок ломают.
Ред. BladeInDoom