На этот раз я решил сделать полностью с нуля героя на Wurst Script. Это пока что демо версия, т.к. он немного не доработан в качестве визуала и возможно задумки. Так же есть небольшие утечки, которые я не смог найти.
Способности
Пассивно - Пламя Феникса
Все способности Телеандора дополнительно наносят урон равный 100% от его интелекта
Код способности
import AbilityObjEditing
import HeroesID
let BURNING_OUT_GROUP = CreateGroup()
@compiletime function burningOut()
new AbilityDefinitionArchMageBrillianceAura(BURNING_OUT_ID)
..setHeroAbility(false)
..setLevels(1)
..setArtCaster("")
..setArtEffect("")
..setArtSpecial("")
..setArtTarget("")
..presetButtonPosNormal(1, 1)
..presetTargetsAllowed(lvl -> "")
..presetIcon("ReplaceableTextures\\PassiveButtons\\PASPhoenixClaw")
..presetTooltipNormal(lvl -> "|cffff7300Пламя Феникса|r")
..presetTooltipNormalExtended(lvl -> "Способности Телеандора дополнительно наносят (|cffffcc00100|r% от |cff008cffинтелекта|r) ед. урона.")
Q - Рывок Феникса
Телеандор обращается в феникса и делает рывок вперёд, нанося противникам 100/200/300 урона
Если у кого есть идеи как более точно высчитать урон при движении, буду рад.
Если у кого есть идеи как более точно высчитать урон при движении, буду рад.
Код способности
import ChannelAbilityPreset
import HeroesID
import RegisterEvents
import ClosureTimers
import SecondaryFunction
import UnitIds
import Units
let PHOENIX_JERK_DUMMY_ID = compiletime(UNIT_ID_GEN.next())
@compiletime function _PhoenixJerk_()
new ChannelAbilityPreset(PHOENIX_JERK_ID, 3, true)
..presetTargetTypes(Targettype.PASSIVE)
..presetButtonPosResearch(0, 0)
..presetButtonPosNormal(0, 2)
..presetBaseOrderID(lvl -> "AImove")
..presetDisableOtherAbilities(lvl -> false)
..presetFollowThroughTime(lvl -> 0.)
..setHotkeyLearn("Q")
..setHotkeyNormal("Q")
..setName("Рывок Феникса")
..setTooltipLearn("Рывок Феникса (|cffffcc00Q|r)")
..presetTooltipNormal(lvl -> "Рывок Феникса, |cffffcc00Уровень [" + lvl.toString() + "|r] (|cffffcc00Q|r)")
..setTooltipLearnExtended("Телеандор совершает рывок вперёд и наносит 100/200/300 ед. урона всем противникам на пути.")
..presetTooltipNormalExtended(lvl -> "Телеандор совершает рывок вперёд и наносит |cffffcc00" + (100 * lvl).toString() + "|r ед. урона всем противникам на пути.")
..presetCooldown(lvl -> 5.)
..presetManaCost(lvl -> 50)
..presetCastRange(lvl -> 900)
..presetIcon("ReplaceableTextures\\CommandButtons\\BTNPhoenixWings")
..setAnimationNames("")
@compiletime function _PhoenixJerkDummy_()
new UnitDefinition(PHOENIX_JERK_DUMMY_ID, UnitIds.forceofnature)
..setNormalAbilities("Avul,Aloc")
..setSpeedBase(1)
..setMovementHeight(100.)
..setMovementType(MovementType.Fly)
..setUpgradesUsed("")
..setGoldBountyAwardedBase(0)
..setGoldBountyAwardedNumberofDice(0)
..setGoldBountyAwardedSidesperDie(0)
..setSightRadiusDay(1800)
..setSightRadiusNight(800)
..setRace(Race.Human)
..setShadowImageUnit("")
..setIconGameInterface("ReplaceableTextures\\CommandButtons\\BTNPhoenixWings")
..setModelFile(Units.phoenix)
..setAttacksEnabled(0)
..setName("Рывок Феникса")
init
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_SPELL_EFFECT) ->
let caster = GetTriggerUnit()
if caster.getTypeId() == TELEANDOR_ID and GetSpellAbilityId() == PHOENIX_JERK_ID
caster.pause()
caster.hide()
let dummy = createUnit(caster.getOwner(), PHOENIX_JERK_DUMMY_ID, caster.getPos(), caster.getFacingAngle())
let a = GetUnitFacing(dummy) * bj_DEGTORAD
let x1 = dummy.getX() + 700. * Cos(a)
let y1 = dummy.getY() + 700. * Sin(a)
caster.setPos( vec2(x1, y1) )
doPeriodically(0.02) cb ->
let x0 = dummy.getX()
let y0 = dummy.getY()
let d = SquareRoot( (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0) )
if d == 0.
destroy cb
caster.unpause()
caster.show()
caster.select()
dummy.remove()
let g = CreateGroup()
g.enumUnitsInRange(dummy.getPos(), 100.)
for u from g
if u.isEnemyNew(caster.getOwner())
caster.damageTarget(u, 25. * caster.getAbilityLevel(PHOENIX_JERK_ID) + caster.getInt(true), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
g.clear()
g.destr()
let newX = x0 + 25. * Cos(a)
let newY = y0 + 25. * Sin(a)
dummy.setPos( vec2(newX, newY) )
W - Шар Феникса
Телеандор наполняет перед собой шар энергии, который летит в указанного противника по пути увеличивая свою скорость, размер и урон.
Код способности
import ChannelAbilityPreset
import HeroesID
import UnitIds
import Icons
import RegisterEvents
import ClosureTimers
let PHOENIX_BOLT_DUMMY_ID = compiletime(UNIT_ID_GEN.next())
@compiletime function _PhoenixJerk_()
new ChannelAbilityPreset(PHOENIX_BOLT_ID, 3, true)
..presetTargetTypes(Targettype.UNIT)
..presetButtonPosResearch(1, 0)
..presetButtonPosNormal(1, 2)
..presetBaseOrderID(lvl -> "acidbomb")
..presetDisableOtherAbilities(lvl -> false)
..presetFollowThroughTime(lvl -> 1.2)
..setHotkeyLearn("W")
..setHotkeyNormal("W")
..setName("Шар Феникса")
..setTooltipLearn("Шар Феникса (|cffffcc00W|r)")
..presetTooltipNormal(lvl -> "Шар Феникса, |cffffcc00Уровень [" + lvl.toString() + "|r] (|cffffcc00W|r)")
..setTooltipLearnExtended("В течении секунды Телеандор заряжает шар, который летит в указанного противника и с каждой секундой увеличивается в размерах. " +
"Чем большее расстояние пройдёт шар , тем больше урона получит противник. " +
"|n|n|cff7c7c7cДальность применения 700/1400/2100|r")
..presetTooltipNormalExtended(lvl ->"В течении секунды Телеандор заряжает шар, который летит в указанного противника и с каждой секундой увеличивается в размерах. " +
"Чем большее расстояние пройдёт шар , тем больше урона получит противник. " +
"|n|n|cff7c7c7cДальность применения|r |cffffffff" + (700 * lvl).toString() + "|r |cff7c7c7c.|r")
..presetCooldown(lvl -> 15.)
..presetManaCost(lvl -> 50)
..presetCastRange(lvl -> 700. * lvl)
..presetIcon(Icons.bTNFireBolt)
..setAnimationNames("spell")
@compiletime function _PhoenixJerkDummy_()
new UnitDefinition(PHOENIX_BOLT_DUMMY_ID, UnitIds.forceofnature)
..setNormalAbilities("Avul,Aloc")
..setSpeedBase(1)
..setMovementHeight(75.)
..setMovementType(MovementType.Fly)
..setUpgradesUsed("")
..setGoldBountyAwardedBase(0)
..setGoldBountyAwardedNumberofDice(0)
..setGoldBountyAwardedSidesperDie(0)
..setSightRadiusDay(0)
..setSightRadiusNight(0)
..setRace(Race.Human)
..setShadowImageUnit("")
..setIconGameInterface(Icons.bTNFireBolt)
..setModelFile("Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl")
..setAttacksEnabled(0)
..setName("Шар Феникса")
..setScalingValue(0.0)
init
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_SPELL_EFFECT) ->
if GetSpellAbilityId() == PHOENIX_BOLT_ID
let caster = GetTriggerUnit()
let target = GetSpellTargetUnit()
let x = caster.getX() + 50. * Cos(GetUnitFacing(caster) * bj_DEGTORAD )
let y = caster.getY() + 50. * Sin(GetUnitFacing(caster) * bj_DEGTORAD )
let z = caster.getFlyHeight() + 75.
let dummy = createUnit(caster.getOwner(), PHOENIX_BOLT_DUMMY_ID, vec3(x, y, z), caster.getFacingAngle())
real svp = .0
doPeriodically(0.048) cb ->
svp += .02
dummy.setScale(svp)
if svp == .3
destroy cb
doPeriodically(0.02) cb ->
let x1 = target.getX()
let y1 = target.getY()
let z1 = target.getFlyHeight() + 75.
let x0 = dummy.getX()
let y0 = dummy.getY()
let z0 = dummy.getFlyHeight()
let d = SquareRoot( (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0) )
let a = bj_RADTODEG * Atan2(y1 - y0, x1 - x0)
real newZ = 0
if z0 > z1
newZ = z0 + d / z0 / 10.
else if z0 == z1
newZ = z0
else if z0 < z1
newZ = - (z1 + d / z0 / 10.)
svp += .01
dummy.setScale(svp)
let newX = x0 + (svp * 10) * Cos(a * bj_DEGTORAD)
let newY = y0 + (svp * 10) * Sin(a * bj_DEGTORAD)
if d > 16.
dummy.setPosFly( vec3(newX, newY, newZ) )
else
destroy cb
dummy.kill()
caster.damageTarget(target, 100. * svp + caster.getInt(true), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
Пассивно - Гнев Феникса
Когда Телеандор убивает противника, из него вырывается пламя, которое устремляется к Телеандору и начинает вращаться вокруг него. После 5 секунд пламя, летит в одного из ближайших противников и наносит ему (5 * интелект) ед. урона.
Код способности
import ChannelAbilityPreset
import HeroesID
import UnitIds
import RegisterEvents
import ClosureTimers
import Teleandor
import SecondaryFunction
let PHOENIX_FLAME_DUMMY_ID = compiletime(UNIT_ID_GEN.next())
let PHIH = InitHashtable()
let PHOENIX_FLAME_GROUP_MOVE_ID = CreateGroup()
let PHOENIX_FLAME_GROUP_CIRCLE_ID = CreateGroup()
let PHOENIX_FLAME_GROUP_DAMAGE_ID = CreateGroup()
@compiletime function _WrathOfThePhoenix_()
new AbilityDefinitionArchMageBrillianceAura(PHOENIX_FLAME_ID)
..setLevels(3)
..setArtCaster("")
..setArtEffect("")
..setArtSpecial("")
..setArtTarget("")
..presetButtonPosResearch(2, 0)
..presetButtonPosNormal(2, 2)
..presetHotkey("E")
..presetTargetsAllowed(lvl -> "")
..setIconResearch("ReplaceableTextures\\CommandButtons\\BTNPhoenixFire.blp")
..setIconNormal("ReplaceableTextures\\PassiveButtons\\PASPhoenixFire.blp")
..presetTooltipLearn(lvl -> "Гнев Феникса (|cffffcc00E|r)")
..setTooltipLearnExtended("Когда Телеандор убивает противника из него вырывается сгусток пламени, который устремляется к герою и начинает вращатся вокруг него. Спустя |cffffcc005|r секунд сгустки летят в ближайших противников и наносят им (25/50/75 + |cff008cffинтелект|r) ед. урона.")
..presetTooltipNormal(lvl -> "Гнев Феникса, |cffffcc00Уровень [" + lvl.toString() + "|r] (|cffffcc00E|r)")
..presetTooltipNormalExtended(lvl -> "Когда Телеандор убивает противника из него вырывается сгусток пламени, который устремляется к герою и начинает вращатся вокруг него. Спустя |cffffcc005|r секунд сгустки летят в ближайших противников и наносят им (|cffffcc00" + (25 * lvl).toString() + " |r + |cff008cffинтелект|r) ед. урона.")
@compiletime function _WrathOfThePhoenixDummy_()
new UnitDefinition(PHOENIX_FLAME_DUMMY_ID, UnitIds.forceofnature)
..setNormalAbilities("Avul,Aloc")
..setSpeedBase(1)
..setMovementHeight(0.)
..setMovementType(MovementType.Fly)
..setUpgradesUsed("")
..setGoldBountyAwardedBase(0)
..setGoldBountyAwardedNumberofDice(0)
..setGoldBountyAwardedSidesperDie(0)
..setSightRadiusDay(0)
..setSightRadiusNight(0)
..setRace(Race.Human)
..setShadowImageUnit("")
..setIconGameInterface("ReplaceableTextures\\CommandButtons\\BTNPhoenixFire")
..setModelFile("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile_mini.mdl")
..setAttacksEnabled(0)
..setName("Гнев Феникса")
..setScalingValue(1.)
init
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_DEATH) ->
let killer = GetKillingUnit()
if killer.getTypeId() == TELEANDOR_ID and killer.getAbilityLevel(PHOENIX_FLAME_ID) > 0
let target = GetTriggerUnit()
let dummy = createUnit(killer.getOwner(), PHOENIX_FLAME_DUMMY_ID, target.getPos3Fly(), killer.getFacingAngle())
PHOENIX_FLAME_GROUP_MOVE_ID.addUnit(dummy)
doPeriodically(1.) cb ->
for dummy in PHOENIX_FLAME_GROUP_CIRCLE_ID
let time = PHIH.loadInt(dummy.getHandleId(), 'time')
if time > 0
PHIH.saveInt(dummy.getHandleId(), 'time', time - 1)
doPeriodically(0.02) cb ->
let x0 = teleandor.getX()
let y0 = teleandor.getY()
let z0 = teleandor.getFlyHeight() + 150.
for dummy in PHOENIX_FLAME_GROUP_MOVE_ID
let x1 = dummy.getX()
let y1 = dummy.getY()
let z1 = dummy.getFlyHeight()
let a = bj_RADTODEG * Atan2(y0 - y1, x0 - x1)
let d = SquareRoot( (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0) )
if d > 100.
let newX = x1 + 15. * Cos(a * bj_DEGTORAD)
let newY = y1 + 15. * Sin(a * bj_DEGTORAD)
let newZ = z1 + d / z0 / 10.
dummy.setPosFly( vec3(newX, newY, newZ) )
else
PHOENIX_FLAME_GROUP_MOVE_ID.removeUnit(dummy)
PHOENIX_FLAME_GROUP_CIRCLE_ID.addUnit(dummy)
dummy.setFlyHeight(z0, 0.)
PHIH.saveInt(dummy.getHandleId(), 'time', 5)
for dummy in PHOENIX_FLAME_GROUP_CIRCLE_ID
let x1 = dummy.getX()
let y1 = dummy.getY()
let id = dummy.getHandleId()
int ds = PHIH.loadInt(id, 'DegC')
if ds == 60
ds = 0
else
ds = ds + 1
PHIH.saveInt(id, 'DegC', ds)
let x2 = x0 + 100 * Cos( (6. * ds) * bj_DEGTORAD )
let y2 = y0 + 100 * Sin( (6. * ds) * bj_DEGTORAD )
let a = bj_RADTODEG * Atan2(y2 - y1, x2 - x1)
let newX = x1 + 10 * Cos(a * bj_DEGTORAD)
let newY = y1 + 10 * Sin(a * bj_DEGTORAD)
dummy.setPos( vec2(newX, newY) )
let d = SquareRoot( (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0) )
if d > 150.
PHOENIX_FLAME_GROUP_CIRCLE_ID.addUnit(dummy)
PHOENIX_FLAME_GROUP_MOVE_ID.removeUnit(dummy)
let g = CreateGroup()
g.enumUnitsInRange(teleandor.getPos(), 600.)
let test = g.next()
if test != null
let t = g.getRandomUnit()
if t != null and PHIH.loadInt(dummy.getHandleId(), 'time') == 0 and t.isEnemyNew(teleandor.getOwner())
PHOENIX_FLAME_GROUP_CIRCLE_ID.removeUnit(dummy)
PHOENIX_FLAME_GROUP_DAMAGE_ID.addUnit(dummy)
PHIH.saveUnitHandle(dummy.getHandleId(), 'targ', t)
g.clear()
g.destr()
for dummy in PHOENIX_FLAME_GROUP_DAMAGE_ID
let t = PHIH.loadUnitHandle(dummy.getHandleId(), 'targ')
let x1 = t.getX()
let y1 = t.getY()
let z1 = t.getFlyHeight() + 50.
let x2 = dummy.getX()
let y2 = dummy.getY()
let z2 = dummy.getFlyHeight()
let a = bj_RADTODEG * Atan2(y1 - y2, x1 - x2)
let d = SquareRoot( (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) )
let newX = x2 + 15. * Cos(a * bj_DEGTORAD)
let newY = y2 + 15. * Sin(a * bj_DEGTORAD)
real newZ = 0
if z1 > z2
newZ = z2 + d / z1 / 10.
else if z1 == z2
newZ = z1
else if z1 < z2
newZ = - (z2 + d / z1 / 10.)
if d > 16.
dummy.setPosFly( vec3(newX, newY, newZ) )
else
PHOENIX_FLAME_GROUP_DAMAGE_ID.removeUnit(dummy)
teleandor.damageTarget(t, 25. * teleandor.getAbilityLevel(PHOENIX_FLAME_ID) + teleandor.getInt(true) * 2, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
PHIH.flushChild(dummy.getHandleId())
dummy.kill()
R - Сверхновый
В течении 5 секунд Телеандор наполняется силой, с каждой секундой увеличивая дальность способности на 250, урона на 100 и количество восспоняемого здоровья и маны на 10%. Спустя 5 секунд Телеандор перерождается и наносит накопленный урон в накопленной области вокруг себя и восстанавливает накопленное количество маны и здоровья.
Код способности
import ChannelAbilityPreset
import HeroesID
import UnitIds
import Units
import RegisterEvents
import ClosureTimers
import Teleandor
import SecondaryFunction
let SUPERNOVA_DUMMY_ID = compiletime(UNIT_ID_GEN.next())
let IGNITION_ID = compiletime(ABIL_ID_GEN.next())
let DESCRIPTION = "Телеандор в течении |cffffcc005|r секунд накапливает силу. Каждую секунду область действия увеличивавется на |cffffcc00250|r, " +
"урон на |cffffcc00100|r, а количество восполняемого здороья и маны на |cffffcc0010|r%. " +
"По истечению времени Телеандор наносит накопленный урон и перерождается с накопленным запасом здоровья и маны." +
"|n|n|cff7c7c7cСпустя|r |cffffffff1|r |cff7c7c7cсекунду можно использовать способность|r |cffffffffВозжигание|r|cff7c7c7c, " +
"которая позволит использовать способность до её полного накопления.|r"
@compiletime function _Supernova_()
new ChannelAbilityPreset(SUPERNOVA_ID, 1, true)
..presetTargetTypes(Targettype.PASSIVE)
..presetButtonPosResearch(3, 0)
..presetButtonPosNormal(3, 2)
..presetBaseOrderID(lvl -> "absorb")
..presetDisableOtherAbilities(lvl -> false)
..presetFollowThroughTime(lvl -> 5.)
..setHotkeyLearn("R")
..setHotkeyNormal("R")
..setName("Сверхновый")
..setTooltipLearn("Сверхновый (|cffffcc00R|r)")
..presetTooltipNormal(lvl -> "Сверхновый (|cffffcc00R|r)")
..setTooltipLearnExtended(DESCRIPTION)
..presetTooltipNormalExtended(lvl -> DESCRIPTION)
..presetCooldown(lvl -> 60.)
..presetManaCost(lvl -> 200)
..presetCastRange(lvl -> 900)
..presetIcon("ReplaceableTextures\\CommandButtons\\BTNPhoenixBeam")
@compiletime function _Ignition_()
new ChannelAbilityPreset(IGNITION_ID, 1, true)
..presetTargetTypes(Targettype.PASSIVE)
..setHeroAbility(false)
..presetButtonPosNormal(2, 1)
..presetBaseOrderID(lvl -> "shockwave")
..presetDisableOtherAbilities(lvl -> false)
..presetFollowThroughTime(lvl -> 0.)
..setHotkeyNormal("F")
..setName("Возгорание")
..presetTooltipNormal(lvl -> "Возгорание (|cffffcc00F|r)")
..presetTooltipNormalExtended(lvl -> "Использовать |cffffcc00Сверхновый|r немедленно.")
..presetCooldown(lvl -> 0.)
..presetManaCost(lvl -> 0)
..presetIcon("ReplaceableTextures\\CommandButtons\\BTNPhoenixBeam")
@compiletime function _SupernovaDummy_()
new UnitDefinition(SUPERNOVA_DUMMY_ID, UnitIds.forceofnature)
..setNormalAbilities("Avul,Aloc")
..setSpeedBase(1)
..setMovementHeight(0.)
..setMovementType(MovementType.Fly)
..setUpgradesUsed("")
..setGoldBountyAwardedBase(0)
..setGoldBountyAwardedNumberofDice(0)
..setGoldBountyAwardedSidesperDie(0)
..setSightRadiusDay(1800)
..setSightRadiusNight(800)
..setRace(Race.Human)
..setShadowImageUnit("")
..setIconGameInterface("ReplaceableTextures\\CommandButtons\\BTNPhoenixBeam")
..setModelFile(Units.phoenix)
..setAttacksEnabled(0)
..setName("Сверхновый")
int time = 0
int time2 = 0
function _SupernovaAction_()
teleandor.hide()
let dummy = createUnit(teleandor.getOwner(), SUPERNOVA_DUMMY_ID, teleandor.getPos3Fly(), teleandor.getFacingAngle())
dummy.pause()
DestroyEffect( AddSpecialEffect("Abilities\\Spells\\Human\\MarkOfChaos\\MarkOfChaosTarget.mdl", teleandor.getX(), teleandor.getY()) )
dummy.setAnimation("Birth")
doAfter(0.3) ->
dummy.setAnimation("Morph")
doAfter(2.5) ->
dummy.setAnimation("Morph Alternate")
DestroyEffect( AddSpecialEffect("Abilities\\Spells\\Human\\MarkOfChaos\\MarkOfChaosTarget.mdl", teleandor.getX(), teleandor.getY()) )
doAfter(0.1) ->
dummy.setAnimation("Birth")
doAfter(0.3) ->
if time > 5
time = 5
let range = 250. * time
let damage = 100. * time + teleandor.getInt(true)
let state = 0.1 * time
let g = CreateGroup()
g.enumUnitsInRange(teleandor.getPos(), range)
for u from g
if u.isEnemyNew(teleandor.getOwner())
teleandor.damageTarget(u, damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
DestroyEffect( AddSpecialEffect("Abilities\\Spells\\Human\\MarkOfChaos\\MarkOfChaosTarget.mdl", u.getX(), u.getY()) )
g.clear()
g.destr()
teleandor.addHP( teleandor.getHP() * state )
teleandor.addMana( teleandor.getMana() * state )
dummy.remove()
teleandor.show()
teleandor.unpause()
teleandor.issueImmediateOrder("Stop")
teleandor.select()
time = 0
time2 = 0
init
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_SPELL_CAST) ->
if GetSpellAbilityId() == SUPERNOVA_ID
let caster = GetTriggerUnit()
let x = caster.getX()
let y = caster.getY()
doPeriodically(1.) cb ->
if time < 5
time += 1
DestroyEffect( AddSpecialEffect("Abilities\\Spells\\Items\\AIam\\AIamTarget.mdl", x, y) )
if time == 5
destroy cb
caster.removeAbility(IGNITION_ID)
_SupernovaAction_()
else if time == 1
caster.addAbility(IGNITION_ID)
if time2 == 1
destroy cb
else if GetSpellAbilityId() == IGNITION_ID
_SupernovaAction_()
GetTriggerUnit().removeAbility(IGNITION_ID)
time2 = 1
Послесловие
Если у вас есть иде, как оптимизировать код или улучшить визуальную составляющую способностей, пишите.
Должен так же отметить, что Wurst Script накладывает небольшую защиту от взлома на вашу карту (особенно, если прогнать её через w3x2lni.exe дополнительно), пример прилагается, поэтому почитать нормальный код в стандартном редакторе крайне затруднительно. Из-за этого я прикреплю архив со всем Wurst проектом.
Должен так же отметить, что Wurst Script накладывает небольшую защиту от взлома на вашу карту (особенно, если прогнать её через w3x2lni.exe дополнительно), пример прилагается, поэтому почитать нормальный код в стандартном редакторе крайне затруднительно. Из-за этого я прикреплю архив со всем Wurst проектом.