//! 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 BULLETS = {}
local TIMER_PERIOD = 0.03125 --> 1/32
local SPEED = 600
local SPEED_INC = SPEED/(1/TIMER_PERIOD)
-- Настройки
local ABILITY_ID = AbilityId('SIWh')
local ARC = 0.3
local EFFECT = 'Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl'
-- Код
local GetTerrainZ_location = Location(0, 0)
local function GetTerrainZ(x,y)
MoveLocation(GetTerrainZ_location, x, y);
return GetLocationZ(GetTerrainZ_location);
end
local function InMapXY(x, y)
return
x > GetRectMinX(bj_mapInitialPlayableArea)
and
x < GetRectMaxX(bj_mapInitialPlayableArea)
and
y > GetRectMinY(bj_mapInitialPlayableArea)
and
y < GetRectMaxY(bj_mapInitialPlayableArea)
end
TimerStart(CreateTimer(), TIMER_PERIOD, true, function()
if #BULLETS == 0 then return end
for i=#BULLETS, 1, -1
do
BULLETS[i].x = BULLETS[i].x + SPEED_INC*BULLETS[i].cos
BULLETS[i].y = BULLETS[i].y + SPEED_INC*BULLETS[i].sin
if InMapXY(BULLETS[i].x, BULLETS[i].y)
then
BlzSetSpecialEffectX(BULLETS[i].effect, BULLETS[i].x)
BlzSetSpecialEffectY(BULLETS[i].effect, BULLETS[i].y)
else
DestroyEffect(BULLETS[i].effect)
table.remove(BULLETS, i)
end
end
end)
local trigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1, 1 do
TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
end
--TriggerAddCondition(trigger, Condition(function() return true end))
TriggerAddAction(trigger, function()
TimerStart(CreateTimer(), 0.5, true, function()
local caster = GetTriggerUnit()
local x = GetUnitX(caster)
local y = GetUnitY(caster)
local angle = GetUnitFacing(caster)
table.insert(BULLETS, {
effect = AddSpecialEffect('units\\nightelf\\Wisp\\Wisp.mdl', x, y),
x = x,
y = y,
angle = angle,
cos = Cos(angle),
sin = Sin(angle)
})
end)
end)
end
//! endusercode
Bergi_Bear, всё никак немогу привыкнуть, что в новом патче эффекты можно в трёх плокостях вращать. Можно ещё оптимизировать и икать столкновения таймером помедленнее, держа координаты эффектов в таблице.
Из детекта, мне тоже больше нравится аура жара
А таймеры я бы создавал на группу снарядов, например: кольцо снарядов, линия снарядов, змейка и т.д. Так меньше мороки с кодом и по хэндлу таймера например, можно менять поведение всей группе, не заморачиваясь с лишними переборами.
PornoMishka, это я себе шпаргалку оставляю, как напримерс приказами. А так сам подумал о фрэймворке, который бы реализовал нужный функционал. Но пока нет IDE, которая бы из него подтягивала справку.
//! 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('AEev')
-- Код
local trigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1, 1 do
TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_HERO_SKILL)
end
TriggerAddAction(trigger, function()
local caster = GetTriggerUnit()
TimerStart(CreateTimer(), 1, true, function()
if
not UnitAlive(caster)
or
BlzGetUnitMaxHP(caster) == GetWidgetLife(caster)
then return end
local hp = 0.01 * GetUnitAbilityLevel(caster, ABILITY_ID) * GetHeroStr(caster, true) * (100 - GetWidgetLife(caster)/BlzGetUnitMaxHP(caster)*100)
SetWidgetLife(caster, GetWidgetLife(caster) + hp)
end)
end)
end
//! endusercode
Ред. nazarpunk
» WarCraft 3 / Самый производительный Bullet Hell
Ред. nazarpunk
» WarCraft 3 / Заклинание: Вихрь Иллюзий
» WarCraft 3 / как создать свой GetUnitUserData
Ред. nazarpunk
» WarCraft 3 / Заклинание: Вихрь Иллюзий
» WarCraft 3 / как создать свой GetUnitUserData
» WarCraft 3 / Заклинание: Вихрь Иллюзий
Ред. nazarpunk
» WarCraft 3 / Заклинание: Вихрь Иллюзий
» WarCraft 3 / Самый производительный Bullet Hell
» WarCraft 3 / Самый производительный Bullet Hell
» WarCraft 3 / Самый производительный Bullet Hell
А таймеры я бы создавал на группу снарядов, например: кольцо снарядов, линия снарядов, змейка и т.д. Так меньше мороки с кодом и по хэндлу таймера например, можно менять поведение всей группе, не заморачиваясь с лишними переборами.
» WarCraft 3 / Как найти наибольшее из нескольких чисел?
» WarCraft 3 / Способности в редакторе
» WarCraft 3 / Подсветка синтаксиса 1.31
» WarCraft 3 / как создать свой GetUnitUserData
» WarCraft 3 / Заклинание: Вихрь Иллюзий
» WarCraft 3 / [lua] Математические функции
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Как найти наибольшее из нескольких чисел?
» WarCraft 3 / Способности и алгоритмы на заказ
PT153:
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Способности и алгоритмы на заказ
Zikok247:
Ред. nazarpunk
» WarCraft 3 / Способности и алгоритмы на заказ