Добавлен under11,
опубликован
ОГНЕННЫЙ ШАР
Моя способность, Огненный шар летящий в точку, который при попадание куда-либо взрывается и наносит урон в радиусе взрыва. Имеет 3 уровня прокачки, в зависимости от прокачки меняются разные характеристики способности. Так же способность имеет небольшой шанс нанести критический взрыв, который нанесет больше урона.
Урон: 90/140/190
Скорость шара: 600/750/900
Радиус взрыва: 250/325/410
Максимальное расстояние: 1100
Шанс большого взрыва: 20%
Дополнительный урон от большого взрыва: 1.5
Перезарядка: 12/9/7
Стоимость маны: 50/70/90
Скорость шара: 600/750/900
Радиус взрыва: 250/325/410
Максимальное расстояние: 1100
Шанс большого взрыва: 20%
Дополнительный урон от большого взрыва: 1.5
Перезарядка: 12/9/7
Стоимость маны: 50/70/90
Писал способность на Jass, использовал в ней структуры. Размер летящего шара зависит от уровня способности. Описания для способностей старался делать как в доте. Карту со способностью приложил.
Код:
function filter takes nothing returns boolean
return IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(bj_lastCreatedUnit)) and not IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD)
endfunction
function move takes nothing returns nothing
local timer t = GetExpiredTimer()
local fireball S = LoadInteger(hash,GetHandleId(t),1)
local real x1 = GetUnitX(S.dummy)
local real y1 = GetUnitY(S.dummy)
local real x2 = x1 + S.speed * Cos(S.angle)
local real y2 = y1 + S.speed * Sin(S.angle)
call SetUnitPosition(S.dummy,x2,y2)
call SetUnitFacing(S.dummy,S.angle)
set S.dist = S.dist - S.speed
set bj_lastCreatedUnit = S.caster
call GroupEnumUnitsInRange(TempG,x2,y2,S.radius2,function filter)
if S.dist <= 0 or FirstOfGroup(TempG) != null then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl",x2,y2))
call GroupEnumUnitsInRange(TempG,x2,y2,S.radius1,function filter)
loop
set bj_lastCreatedUnit = FirstOfGroup(TempG)
exitwhen bj_lastCreatedUnit == null
call UnitDamageTarget(S.caster,bj_lastCreatedUnit,S.damage,false,false,null,null,null)
call GroupRemoveUnit(TempG,bj_lastCreatedUnit)
endloop
set bj_lastCreatedUnit = null
call KillUnit(S.dummy)
set S.dummy = null
set S.caster = null
call S.destroy()
call FlushChildHashtable(hash,GetHandleId(t))
call GroupClear(TempG)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t = null
endfunction
struct fireball
unit caster
unit dummy
real speed
real damage
real radius1
real radius2
real dist
real angle
real sc
endstruct
function create takes nothing returns nothing
local timer t = CreateTimer()
local fireball S = fireball.create()
local integer random = GetRandomInt(1,500)
local integer lvl
local real x1
local real y1
local real x2 = GetSpellTargetX()
local real y2 = GetSpellTargetY()
set S.caster = GetSpellAbilityUnit()
set lvl = GetUnitAbilityLevel(S.caster,'A000')
set x1 = GetUnitX(S.caster)
set y1 = GetUnitY(S.caster)
set S.angle = Atan2(y2-y1,x2-x1)
set S.dummy = CreateUnit(GetOwningPlayer(S.caster),'u000',x1,y1,bj_RADTODEG * S.angle)
call UnitAddAbility(S.dummy,'Arav')
if lvl == 1 then
set S.damage = 90
set S.speed = 600
set S.radius1 = 250
set S.radius2 = 100
set S.sc = 1.10
elseif lvl == 2 then
set S.damage = 140
set S.speed = 750
set S.radius1 = 325
set S.radius2 = 125
set S.sc = 1.30
elseif lvl == 3 then
set S.damage = 190
set S.speed = 900
set S.radius1 = 410
set S.radius2 = 150
set S.sc = 1.50
endif
if random < 100 then
set S.damage = S.damage * 1.50
endif
call SetUnitScale(S.dummy,S.sc,S.sc,S.sc)
set S.dist = 1100
set S.speed = S.speed * 0.01
call SaveInteger(hash,GetHandleId(t),1,S)
call TimerStart(t,0.01,true,function move)
set t = null
endfunction
function cond takes nothing returns boolean
if GetSpellAbilityId() == 'A000' then
call create()
endif
return false
endfunction
function InitTrig_Spell takes nothing returns nothing
set gg_trg_Spell = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(gg_trg_Spell,Player(0),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerAddAction(gg_trg_Spell,function cond)
endfunction
globals
hashtable hash = InitHashtable()
group TempG = CreateGroup()
endglobals
`
ОЖИДАНИЕ РЕКЛАМЫ...
4
rsfghd
3 года назад
4
Неплохо, но можешь лучше, пофантазируй с эффектами и динамичностью
Чтобы оставить комментарий, пожалуйста, войдите на сайт.