Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Способность
Версия Warcraft:
1.26a
Очень легкие способности, но может кому-то нужно будет. Снизу будет описание способностей
Лаги: нет
MUI: да

Способности

код
scope KurdanQ initializer Init

globals
   private constant integer SPELL_ID = 'A001' //ID Способности
   private constant real RADIUS = 350. //Радиус
   private constant string MODEL = "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl" //Модель эффекта
   
   private real array MAX_DMG
   private real array DMG
endglobals

private function Start takes nothing returns nothing
   local unit u = GetTriggerUnit()
   local unit ut
   local group g = CreateGroup()
   local boolean b = false
   local player p = GetOwningPlayer(u)
   local integer l = GetUnitAbilityLevel(u, SPELL_ID)
   local real x = GetUnitX(u)
   local real y = GetUnitY(u)
   local effect e
   local real md = MAX_DMG[l]
   

   call GroupEnumUnitsInRange(g, x, y, RADIUS, null)
   loop
   set ut = FirstOfGroup(g)
   exitwhen ut == null or md <=0
   if IsUnitEnemy(ut, p) and IsUnitAliveBJ(ut) then
   set x = GetUnitX(ut)
   set y = GetUnitY(ut)
   set e = AddSpecialEffect(MODEL, x, y)
   if md > DMG[l] then
   call UnitDamageTarget( u, ut, DMG[l], true, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_LIGHTNING, WEAPON_TYPE_WHOKNOWS )
   set md = md - DMG[l]
   else
   call UnitDamageTarget( u, ut, md, true, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_LIGHTNING, WEAPON_TYPE_WHOKNOWS )
   set md = 0
   endif
   call DestroyEffect(e)
   set b = true
   endif
   call GroupRemoveUnit(g, ut)
   endloop

   call DestroyGroup(g)
endfunction


private function Init takes nothing returns nothing
    local trigger Q = CreateTrigger(  )
    call TriggerAddAction( Q, function Start )
    call TriggerRegisterAnyUnitEventBJ( Q, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    
    set DMG[1] = 125.
    set DMG[2] = 165.
    set DMG[3] = 225.
    set DMG[4] = 265.
    set MAX_DMG[1] = 2500.
    set MAX_DMG[2] = 4500.
    set MAX_DMG[3] = 6500.
    set MAX_DMG[4] = 8500.
    
endfunction

endscope
установка
  • скопировать триггер Q в свою карту
  • скопировать способность "Грозовые тучи" в свою карту
  • вставить нужный айди способности в: private constant integer SPELL_ID = 'A001'
настройка
изменить эффект:
поменять строку в
private constant string MODEL = "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl"
изменить урон:
поменять массивы реальных в функции init
set DMG[1] = 125.
изменить макс. урон:
поменять массивы реальных в функции init
set MAX_DMG[1] = 2500.
код
scope KurdanE initializer init

globals
   private constant integer SPELL_ID = 'A000' //ID Способности
   private constant real PERIODIC = 3.5 //Раз во сколько секунд
   private constant real RADIUS = 500. //Радиус

   private constant string MODEL = "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl" //Модель эффекта
   private real array DMG

   hashtable hash = InitHashtable()
endglobals

private function time takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local unit u = LoadUnitHandle(hash, GetHandleId(t), StringHash("unit"))
   local unit ut
   local group g = CreateGroup()
   local boolean b = false
   local player p = GetOwningPlayer(u)
   local integer l = GetUnitAbilityLevel(u, SPELL_ID)
   local real x = GetUnitX(u)
   local real y = GetUnitY(u)
   local effect e
   
   if IsUnitAliveBJ(u) and IsUnitPaused(u) != true then
   
   call GroupEnumUnitsInRange(g, x, y, RADIUS, null)
   loop
   set ut = FirstOfGroup(g)
   exitwhen b==true or ut == null
   if IsUnitEnemy(ut, p) and IsUnitAliveBJ(ut) then
   set x = GetUnitX(ut)
   set y = GetUnitY(ut)
   set e = AddSpecialEffect(MODEL, x, y)
   call UnitDamageTarget( u, ut, DMG[l], true, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_LIGHTNING, WEAPON_TYPE_WHOKNOWS )
   call DestroyEffect(e)
   set b = true
   endif
   call GroupRemoveUnit(g, ut)
   endloop
   
   endif
   set p = null
   set t = null
   set u = null
   call DestroyGroup(g)
   set g = null
endfunction

private function Start takes nothing returns nothing
   local timer t
   local unit u = GetTriggerUnit()
   if GetLearnedSkill() == SPELL_ID and GetUnitAbilityLevel(u, SPELL_ID) == 1 then
   set t = CreateTimer()
   call SaveUnitHandle(hash, GetHandleId(t), StringHash("unit"), u)
   call TimerStart(t, PERIODIC, true, function time)
   endif
   set u = null
endfunction


private function init takes nothing returns nothing
    local trigger E = CreateTrigger()
    
    call TriggerRegisterAnyUnitEventBJ( E, EVENT_PLAYER_HERO_SKILL )
    call TriggerAddAction( E, function Start )
    
    set DMG[1] = 100.
    set DMG[2] = 150.
    set DMG[3] = 200.
    set DMG[4] = 250.

    set E = null
endfunction

endscope
установка
  • скопировать триггер E в свою карту
  • скопировать способность "Разъяренное небо" в свою карту
  • вставить нужный айди способности в: private constant integer SPELL_ID = 'A000'
настройка
изменить эффект:
поменять строку в
private constant string MODEL = "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl"
изменить урон:
поменять массивы реальных в функции init
set DMG[1] = 100.
изменить перезарядку:
поменять число в
private constant real PERIODIC = 3.5
`
ОЖИДАНИЕ РЕКЛАМЫ...