6.66 triggers

Discussion in 'Advanced Mechanics' started by antiweltteilchen, Jan 14, 2010.

  1. antiweltteilchen

    antiweltteilchen Well-Known Member

    i start again with some new triggers for 6.66 have a look here and there i'll add stuff with more time.

    scream of pain [A04a] based on fan of knives

    func1
    when a spell goes into effect and the spell is [A04a] call func2

    func2
    group all visible enemy,nondummy,nonstructure,nonancient except spiritbear units in 400+25*lvl aoe around source and for all of them call func3

    func3
    save the damage amount dependant on lvl in real1
    create a dummy unit at the position of source and every 0.03 seconds move it 21 units in direction of the target.
    if the distance before the movement is less than 21 call func4 and destroy teh shizzle

    func4
    deal real1 damage to the target using attack type spells damage type magic.





    devour [A10R] based on channel

    func1
    when a spell is cast or a spell goes into effect call func2

    func2
    if the spell is [A10R] and the event was the spell is cast call func6
    else if the spell is [A10R] and the event was the spell went into effect call func5
    else if the casting unit is doombringer call func 3

    func3
    if the ability is one of the abilities neutrals posess call func4 when source died or after 1 second

    func4
    destroy the trigger and flush saved vars...boring

    func5
    if the targeted unit isn't sentinel owned and the unit isn't scourge owned and the lvl requirement is broken
    pause source, order it to stop, unpause source and display "that creature is too powerful"

    func6
    show the lightning effect between source and target for 0.5 seconds
    call func8
    set devour ability to unavailable
    add the ability showing the "you are devouring shizzle"
    call func7 every 0.05 seconds or when source died
    hide the target remove all buffs from it and deal 100mio physical damage to it

    func7
    if max(life-triggercount,0)=0 add 20+20*lvl gold to source
    if max(life-triggercount,0)=0 or source died set the devour ability to available and remove the other ability and destroy the trigger

    func8
    if the devoured unit got an ability call func9
    add all it's abilities to source (the ability checks are all done sperately, the abilities aren't the exact same like on the neutrals but were adapted to fit luci. for example the frost arrow ability of ghost will give an orb of frost ability to luci)
    this is how it actually looks like
    Code:
    function Func2470 takes unit loc_unit01,unit loc_unit02 returns nothing
      local integer loc_integer01=GetUnitTypeId(loc_unit02)
      local integer loc_integer02=0
      local integer loc_integer03=0
      if loc_integer01=='n0HX' then
        set loc_integer02='A1OQ'
      elseif loc_integer01=='nomg' then
        set loc_integer02='A1OR'
      elseif loc_integer01=='nfpu' then
        set loc_integer02='A1OS'
      elseif loc_integer01=='nstl' then
        set loc_integer02='A1OT'
      elseif loc_integer01=='nsat' then
        set loc_integer02='A1OU'
      elseif loc_integer01=='nsth' then
        set loc_integer02='A1OV'
        set loc_integer03='A1OW'
      elseif loc_integer01=='n00S' then
        set loc_integer02='A1OX'
        set loc_integer03='A1OY'
      elseif loc_integer01=='nkol' then
        set loc_integer02='S00M'
      elseif loc_integer01=='nfsh' then
        set loc_integer02='A1OZ'
      elseif loc_integer01=='ncnk' then
        set loc_integer02='S00N'
        set loc_integer03='A1P0'
      elseif loc_integer01=='ngns' then
        set loc_integer02='A1P1'
      elseif loc_integer01=='ngh1' then
        set loc_integer02='A1P7'
        set loc_integer03='A1PA'
      elseif loc_integer01=='nowe' then
        set loc_integer02='A1P3'
        set loc_integer03='A1P4'
      elseif loc_integer01=='ndtw' then
        set loc_integer02='A1P5'
        set loc_integer03='A1P6'
      elseif loc_integer01=='nwlg' then
        set loc_integer02='A1OY'
      endif
      if loc_integer02!=0 then
        call Func2469(loc_unit01)
        call UnitAddAbility(loc_unit01,loc_integer02)
      endif
      if loc_integer03!=0 then
        call UnitAddAbility(loc_unit01,loc_integer03)
      endif
    endfunction

    func9
    remove all abilities neutrals posess from source.




    Ice Blast [A1MI] based on channel

    HP=hero Hp
    real1=time the unit was affected by ice blast
    counter=0
    source=ancient apparition
    target=the point ice blast was casted on
    angle=angle between target and source
    timediff
    newpos= position of the first created dummy, later the target point of the second created dummy
    newangle
    AoE
    dist

    func1
    when Ancient Apparition was picked call func2 every 0.1 seconds
    for every player set the spellbook ability containing the ice blast visual to unavailable

    func2
    for every player's hero do:
    [if real1+7+lvl>gametime and the hero is alive
    if the hero is near the fountain
    set HP=hero Hp

    else set HP= hero Hp
    if hero Hp<HP set Hp to hero Hp

    set the hero's Hp to HP
    increase counter by 1

    if counter=10 set counter to 0 and make source deal 12.5/20/32 damage to the hero using attack type spells damage type magic depending on the lvl of iceblast
    ]

    else if real1+7+lvl>gametime and the hero is dead set HP=9999

    if the hero is affected by the iceblast buff and real1+7+lvl<gametime
    remove the spellbook abilities containing the visual and the slow aura ability providing the ice blase buff and the buff itself

    func3
    if a spell goes into effect call func4

    func4 if the spell is [A1MI] call func5

    func5
    create a dummy [H0B8] at the position of source facing angle
    call func6 every 0.02 seconds, a spell of source went into effect or source died
    set [A1MI] to unavailable for the player owning source
    set [A1MN] to available for the player owning source
    add [A1MN] to source

    func6
    set newpos=position of dummy +30 unit away in direction of angle
    set timediff=the time difference between the time the spell went into effect and the actual game time (multiples of 0.02)
    set the position of the dummy to newpos
    if the trigger was called because source died ot source used [A1MN] or the dummy went out of the playable map area
    destroy the trigger and remove the dummy

    remove Fog of war in 500 AoE around dummy and call func7

    func7
    set newangle to be the angle between source and newpos of the dummy
    create a dummy [h0B6] at the position of source facing newangle
    set AoE to be minimum of (225+50*timediff,1000)
    set dist to be the distance between the dummy and newpos
    call func8 every minimum(60/dist,0.04) seconds
    set [A1MI] to available for the player owning source
    set [A1MN] to unavailable for the player owning source

    func8
    calculate the new position of the dummy (30 units in direction to newpos).
    if it's less than 35 units away from newpos or exceedig the playable map area
    set the dummies coordinates newpos
    destroy the fog modifier providint the 500 AoE vision
    destroy the trigger and the dummy
    group all enemy nondummy nonstructure alive nonancient units or spiritbear in AoE+25 units around newpos
    all for all of them call func9

    else set the dummy position to the new position, group all enemy nondummy nonstructure alive nonancient units or spiritbear in 300 AoE around the new position
    for each of them call func10

    func9
    call func11
    make source deal the unit with 150+100*lvl damage using attack type spell damage type magic

    func10
    saving some vars
    call func11

    func11
    if lvl>0 the unit is a nonillusion nonmeepoclone hero
    call func12 when the unit is damaged
    add [A1JA] and [A1LD] to the unit which are spellbook abilities containing the visual and slow aura for the buff
    set real1 to gametime

    func12
    if the affected hero doesn't have the slow aura buf destroy the trigger

    if the damage source isn't owned by the player controlling the affected hero the hero is not affected by shallow grave and the heros currect hp is less than (0.09+0.01*lvl)maxhp
    destroy the trigger, remove [A1JA] and [A1LD] from the affected hero and remove the slow aura buff
    create a dummy unit e00E at the center of the map
    remove all buffs from the affected hero
    make the dummy deal 100mio physical damage to the affected hero

    note: just some number tweaks.
    purgeability is triggered like for some other spells as well, easy 2liner.






    charge of darkness [A1p8] based on channel

    func1
    when [A1p8] goes into effect call func2

    func2
    make the targeted unit share vision with the player owning source
    save in dependancy of lvl an unholy aura ability in abil1 (a0ge,a0gf,a0gg,a0gh)
    create a dummy [e00C] at the position of source add it locust, abil1 and [a0gj] which is a faerie fire based ability.
    remove source's pathing
    call func3 every 1 second,when the target is attacked, source died, target died, source issued an order, or source finished casting a spell
    set animation to the second and timescale to 2.5
    set [A179] to unavailable (the spell immunity)
    save 1 in int1
    save 0 in int2
    save 0 in int3

    func3
    if it was called because a unit died or source issued an order{
    if int1!=1 [
    if int2=1 or the unit died destroy the trigger, unshare vision, remove the faerie fire debuff from the target and the endurance aura buff from source and remove the spell immunity from source]
    [else if int2=0 set int2 to 1 and call source to attack the target]}
    else if it was called because source finished casting a spell{
    save some vars
    if int2=0[
    set timescale to 2.75 save 1 in int2 call source to attack the target, and if gametime-time at casting point>3.8/2.7/1.2/0 set the endurance aura ability on the dummy to lvl 4/3/2/1]}
    if it was called because target was attacked and the attacker is source{
    set timescale to 1 for source
    destroy the trigger
    move the dummy to the position of target
    add it [A0GS], a stormbolt based ability, set the level to the same as CoD and use it on the target
    remove the dummy, remove the faerie fire and endurance aura buff from target/source
    unshare vision and remove spell immunity from source and restore source'2 pathing}
    else if int2>0{
    if source is null or target is dead or source isn't spiritbreaker or target is etheral or cycloned[
    unshare vision, set timescale to 1, destroy the trigger,...the same like above]
    else [
    call source to attack target increase int3 by 1
    if the target hasn't the faerie fire debuff and the distance between it and source is less than 2500 call the dummy to use faerie fire on it
    if the endurance aura lvl on the dummy is 4 and source doesn't have the spell immunity ability add it to source.]}
     
    Last edited: Jan 14, 2010
  2. antiweltteilchen

    antiweltteilchen Well-Known Member

    place holder
     
  3. SNOW37

    SNOW37 Well-Known Member

    how did you get the new trigger so quickly anit?
    Great job btw, interesting that ice used a triggered projectile for scream of pain, instead of just a dummy spell.
     
  4. Ajen

    Ajen Member

    One more question concerning Qop now: Now that I realised that the projectile is triggered now and the damage is also dealt via a trigger shouldn't the newly coded Scream of Pain be able to hit units who turn invisible while the projectile is flying ? Meaning that when the trigger initially checks for them beeing visible, they are but then during the time the projectile takes to reach them they turn invisible, they should take the damage because the trigger does not check again if they are visible. Seems to me very smilar how Spirit Lance is coded which is stated to deal damage to targets turning invisible during the time the projectile flies. (Taken from your guide to Invisibility) This would be a slight buff to QoP in eg. killing Clinks or other windwalkers :)

    Is this correct ? If not please enlighten me :)

    Ajen
     
  5. antiweltteilchen

    antiweltteilchen Well-Known Member

    yes, that'S correct.
     
  6. BBQ

    BBQ Well-Known Member

    [A1OP] Scorched Earth

    The base spell is Fan of Knives which provides the ability icon and the targeting function.

    Variables
    • Source //Lucifer
    • Level //The level of Scorched Earth ability
    Abilities
    • [A1OP] //Scorched Earth (Cast by Lucifer)
    • [A1OL] //Spellbook ability used for level 1 Scorched Earth which provides the burning effect, movement speed and regeneration bonus
    • [A1ON] //Spellbook ability used for level 2 Scorched Earth which provides the burning effect, movement speed and regeneration bonus
    • [A1OO] //Spellbook ability used for level 3 Scorched Earth which provides the burning effect, movement speed and regeneration bonus
    • [A1OM] //Spellbook ability used for level 4 Scorched Earth which provides the burning effect, movement speed and regeneration bonus
    Functions
    • Function 1
      If [note=If the spell which went into effect was A1OP ...]Condition 1[/note] is satisfied then
      Call Function 2

    • Function 2
      Store the triggering unit as Source
      Store the level of the [A1OP] ability as Level

      If [Level = 1] then
      Add the [A1OL] ability to Source
      Set the [A1OL] ability to be unavailable to Source
      Else if [Level = 2] then
      Add the [A1ON] ability to Source
      Set the [A1ON] ability to be unavailable to Source
      Else if [Level = 3] then
      Add the [A1OO] ability to Source
      Set the [A1OO] ability to be unavailable to Source
      Else if [Level = 4] then
      Add the [A1OM] ability to Source
      Set the [A1OM] ability to be unavailable to Source
      Create a timer which runs out after 6+2*Level seconds
      Call Function 3 when the timer runs out​
      If [note=If Source died ...]Condition 2[/note] is satisfied then
      Call Function 3

    • Function 3
      Remove the [A1OL] ability from Source
      Remove the [A1ON] ability from Source
      Remove the [A1OO] ability from Source
      Remove the [A1OM] ability from Source
      Remove the [B04J] ability from Source //This is the buff ID of the Unholy Aura abilities
      Destroy this trigger
    Conditions
    • Condition 1
      If the spell which went into effect was [A1OP] ...

    • Condition 2
      If Source died ...
    Notes
    The Spellbook abilities given to Lucifer contain the following abilities:
    • The [A1OJ]/[A1OH]/[A1OK]/[A0FF] Unholy Aura based abilities which provide the 20% movement speed increase and 10/20/25/30 HP/sec regeneration bonus.
    • The [A1OE]/[A1OF]/[A1OG]/[A1OD] Building Damage Aura (Tornado) based abilities which provide the burning effect.
    • The buff ID of the Unholy Aura abilities is [B04J] with "self" as allowed targets.
    • The buff ID of the Building Damage Aura (Tornado) abilities is [B04K].
     
    Last edited: Jul 7, 2010
  7. BBQ

    BBQ Well-Known Member

    Slark, the Murloc Nightcrawler

    [A1IM] Dark Pact

    The base spell is Fan of Knives which provides the targeting function and the ability icon.

    Variables
    • Source //Murloc Nightcrawler
    • Level //The level of the Dark Pact ability
    • SourceX //The X-coordinate of Slark
    • SourceY //The Y-coordinate of Slark
    • DarkPactFX //The [h0B2] dummy unit usedwhich provides the visuals
    • Modifier //The value used to calculate the self-damage
    • EnumUnit //The unit which is currently being processed
    • Group1 //The group to be damaged
    Abilities
    • [A1IM] //Dark Pact (cast by Murloc Nightcrawler)
    Functions
    • Function 1
      If [note=If the spell which went into effect was A1IM ...]Condition 1[/note] is satisfied then
      Call Function 2

    • Function 2
      Store the triggering unit as Source
      Store the level of the [A1IM] ability as Level
      Set Modifier to Level*75/2
      Create a timer which runs out after 2 seconds
      Call Function 3 when the timer runs out
      If [Source died] then
      Call Function 3
      If [GetUnitState(Source,UNIT_STATE_LIFE) ≤ Modifier*0.75] then
      Set Modifier to GetUnitState(Source,UNIT_STATE_LIFE)/0.75-10
      Make Source damage Source for Modifier magic damage //ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE

    • Function 3
      Get the X-coordinate of Source and store it as SourceX
      Get the Y-coordinate of Source and store it as SourceY
      If [this function was called because Source died] then
      Destroy this trigger​
      Else
      If [TriggerCalls=1] then​
      Create a [h0B2] dummy unit for the owner of Source at (SourceX, SourceY) and store this unit as DarkPactFX
      Apply a timed life of 1 second to DarkPactFX
      Create a timer which runs at a 0.1 second interval​
      Else
      If [TriggerCalls=6] then​
      Destroy this trigger​
      Group all units which satisfy [note=
      Is a living enemy non-dummy non-structure non-ancient (except Spirit Bear) unit ...]Condition 2[/note] within 350 AoE around (SourceX, SourceY) and store them as Group1
      For Group1
      Call Function 4 for each interval​
      For Source
      Call Function 5 for each interval​

    • Function 4
      Make Source damage EnumUnit for Level*75/5 magic damage //ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE

    • Function 5
      Remove the following buffs from Source:
    • [B06Z]-Quillbeast Poison
    • [BPSE]-Hellfire Blast, War Stomp, Light Strike Array, Magic Missile, Headshot, Chaos Bolt, Reverse Polarity, Split Earth, Shuriken Toss, MKB's Bash, Hoof Stomp, Basher's Bash, Sunder Stun, Troll's Bash, Assassinate Stun, Fireblast, Ravage, Reaper's Scythe's Stun, Dragon Tail, Aftershock, Craggy Exterior, Avalanche, Mana Void's Stun, Charge of Darkness' Stun, Slardar's Bash, Malefice's Stun...
    • [B06Q]-Primal Roar's Slow
    • [BSTN]-Expulsion's Ministun, Dream Coil's Stuns (both), Fissure, Cold Snap's Ministun
    • [BHtc]-Thunder Clap's Slow
    • [B0BM]-Echo Stomp
    • [B0BR]-Earth Splitter slow
    • [B0C1]-Spirit Bear's Entangle
    • [BEer]-Overgrowth's Entangle
    • [B02U]-Viscous Nasal Goo
    • [B07E]-Poison Touch's Stun, Poison Touch's Slow
    • [B0CF]-Cold Feet Stun
    • [B06M]
    • [B07N]-Meat Hook's Ministun
    • [B08S]
    • [B00Q]
    • [B072]-Unstable Concoction's Stun
    • [BUan]
    • [B095]-Battery Assault
    • [B083]-Life Break's Slow
    • [B02V]-Epicenter's Slow
    • [B01Y]-Charge of Darkness' Faerie Fire
    • [BNab]-Gush
    • [B08R]-Open Wounds' Slow
    • [B066]-Frostmourne's Slow
    • [B03I]-Dismember
    • [B063]-Slithereen Crush's Slow
    • [Bena]-Ensnare
    • [Beng]-Ensnare
    • [B03C]-Spirit Lance's Slow
    • [B00L]-Track
    • [BHca]-Frost Arrows / Frost Attack
    • [Bcsd]-Frost Arrows 2nd position / Frost Attack 2nd position
    • [B079]-Geostrike
    • [B0BQ]-Stone Gaze's Purge
    • [B0B9]
    • [Bprg]-Many other Purges
    • [B08M]-Psionic Trap's Slow
    • [B02G]-Earthshock
    • [B01X]-Bloodrage
    • [B01D]-Drunken Haze level 1, Incapacitating Bite
    • [B092]-Stifling Dagger's Slow
    • [B0AQ]-Venomous Gale
    • [BEsh]-Many other Shadow Strikes
    • [B001]-Viper Strike
    • [B017]-Frostbite
    • [B0AE]-Electric Vortex
    • [B0AD]-Electric Vortex 2nd position
    • [B08O]-Waning Rift Silence
    • [Bfro]-Eye of Skadi (both Melee and Ranged), Frost Breath, Crystal Nova, Frost Armor, Frost Attack (Lucy), Frost Nova, Chain Frost, Dual Breath's slow
    • [B027]
    • [B028]-Poison Nova's Phoenix Fire
    • [B05H]-Penitence Slow
    • [B0BS]-Sticky Napalm
    • [Bcri]-Grave Chill
    • [B0BF]-Flaming Lasso
    • [B0BE]-Flaming Lasso 2nd position
    • [B090]-Shackles
    • [B008]-Shackles 2nd position
    • [B06W]
    • [B04B]-Fiend's Grip
    • [B02F]-Nightmare
    • [BUsp]
    • [Bust]
    • [B0CC]-Cold Feet
    • [BCri]
    • [B03J]-Ignite
    • [BEsh]-Shadow Strike
    • [B001]-Viper Strike
    • [B0AQ]-Venomous Gale
    • [Bena]-Ensnare
    • [Beng]-Ensnare
    • [B078]-Earthbind
    • [Bdet]-Dust of Appearance
    • [A1LD]-Ice Blast's FX
    • [B0CD]-Ice Blast
    • [A1JA]-Ice Blast's Slow Aura
    • [Bslo]-Enchant Slow
    • [B00T]-Amplify Damage
    • [BNdh]-Drunken Haze level 2/3/4
    • [B07V]-Traxex's Silence
    • [B07U]-Global Silence
    • [B0C8]
    • [B01X]-Bloodrage
    • [BNsi]-Krobelus' Silence, Last Word's Soul Burn
    • [BNso]
    • [B031]-Orchid's Silence
    • [B08O]-Waning Rift's Silence
    Conditions
    • Condition 1
      If the spell which went into effect was [A1IM] ...

    • Condition 2
      Is a living enemy non-dummy non-structure non-ancient (except Spirit Bear) unit ...
    Notes
    The [h0B2] dummy unit has the following model path: war3mapImported\SuperDarkFlash

    [A1J7] Pounce

    The base spell is Channel which provides the targeting function and the ability icon.

    Variables
    • Source //Murloc Nightcrawler
    • Level //The level of the Pounce ability
    • FinalLoc //The maximum range of Pounce
    • DistanceRemainder //The remaining distance for Slark to travel
    • FacingAngle //The angle Slark is facing when Pounce goes into effect
    • StartX //The X-coordinate of Slark at the moment Pounce goes into effect
    • StartY //The Y-coordinate of Slark at the moment Pounce goes into effect
    • FinalLocX //The X-coordinate of the farthest point Slark can jump to
    • FinalLocY //The Y-coordinate of the farthest point Slark can jump to
    • EvalCount //The number of times Function 3 has been called
    • MoveDistanceX //The X value for which Slark is moved each iteration
    • MoveDistanceY //The Y value for which Slark is moved each iteration
    • MaxHeight //A value used to modify the fly height of Slark while pouncing
    • HeightModifier //A value used to modify the fly height of Slark while pouncing
    • Group1 //The group from which the target is picked
    • Target //The leashed enemy
    • Lightning //The lightning visual
    • EndX //The X-coordinate of Slark at the moment of impact
    • EndY //The Y-coordinate of Slark at the moment of impact
    • TargetX1 //The X-coordinate of the leashed enemy
    • TargetY1 //The Y-coordinate of the leashed enemy
    • TargetX2 //The X-coordinate of the leashed enemy compared to the previous one
    • TargetY2 //The Y-coordinate of the leashed enemy compared to the previous one
    • Distance //The distance which the leashed enemy has moved between two checks
    • Angle //The angle between the leashed enemy and the point of impact
    • ReturnX //The X value to which the leashed enemy will be returned when it moves more than 325 distance
    • ReturnY //The Y value to which the leashed enemy will be returned when it moves more than 325 distance
    Abilities
    • [A1J7] //Pounce
    • [Amrf] //Crow Form
    • [A1J6] //Ability containing the visuals of Pounce
    Functions
    • Function 1
      If [note=If the spell which went into effect was A1J7 ...]Condition 1[/note] is satisfied then
      Call Function 2

    • Function 2
      Store the triggering unit as Source
      Store the level of the [A1J7] ability as Level
      Set FinalLoc to 300+100*Level
      Store the angle Source is facing as FacingAngle
      Get the X-coordinate of Source and store it as StartX
      Get the Y-coordinate of Source and store it as StartY
      Set FinalLocX to be StartX + FinalLoc in FacingAngle direction
      Set FinalLocY to be StartY + FinalLoc in FacingAngle direction
      Add the [Amrf] ability to Source
      Remove the [Amrf] ability from Source
      Set the pathing of Source to False
      Add the [A1J6] ability to Source
      Create a timer which runs at a 0.03 second interval
      Call Function 3 for each interval​

    • Function 3
      Store the number of times this function has been called as EvalCount
      Set MoveDistanceX to StartX+(30*(20+Level*2)/30)*EvalCount in FacingAngle direction
      Set MoveDistanceY to StartY+(30*(20+Level*2)/30)*EvalCount in FacingAngle direction
      Calculate the distance between (MoveDistanceX, MoveDistanceY) and (FinalLocX, FinalLocY) and store it as DistanceRemainder
      Set MaxHeight to 175
      Set HeightModifier to (1-DistanceRemainder/FinalLoc)*MaxHeight*2
      If [EvalCount = 1] then
      Set the Animation of Source to 5
      Set the Time Scale of Source to 1.5​
      If [HeightModifier > MaxHeight] then
      Set the Animation of Source to 5
      Set HeightModifier to MaxHeight*2-HeightModifier
      Set the Fly Height of Source to HeightModifier
      Set the X-coordinate of Source to MoveDistanceX
      Set the X-coordinate of Source to MoveDistanceY
      Make Source face FacingAngle
      Group all units which satisfy [note=
      Is a living enemy non-dummy non-structure non-ancient (except Spirit Bear) unit ...]Condition 2[/note] in 110 AoE around (MoveDistanceX, MoveDistanceY) and store them as Group1
      Pick the first unit from Group1 and store it as Target
      If [DistanceRemainder < 30] or [EvalCount > 75] or [Target != null] then
      Set the Fly Height of Source to 0
      Set the Time Scale of Source to 1
      Make Source play its "Stand" animation
      Set the pathing of Source to True
      Remove the [A1J6] ability from Source
      Destroy destructables in a 200x200 rectangle around Source
      If [Target != null] and [Target is not magic immune] then
      Call Function 4

    • Function 4
      Add the PONC lightning visual between the coordinates of Source and Target and store its handle as Lightning
      Get the X-coordinate of Source and store it as EndX
      Get the Y-coordinate of Source and store it as EndY
      Get the X-coordinate of Target and store it as TargetX1
      Get the Y-coordinate of Target and store it as TargetY1
      Create a timer which runs at a 0.03 second interval
      Call Function 5 for each interval
      If [Target died] then
      Call Function 5
      Make Source damage Target for 25+25*Level magic damage //ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE
      Order Source to attack Target

    • Function 5
      Get the X-coordinate of Target and store it as TargetX2
      Get the Y-coordinate of Target and store it as TargetY2
      Calculate the distance between (TargetX1, TargetY1) and (TargetX2, TargetY2) and store it as Distance
      Set TargetX1 to TargetX2
      Set TargetY1 to TargetY2
      If [Distance > 100] or [TriggerCalls > 3.5/0.03] or [Target is magic immune] then
      Destroy Lightning
      Destroy this trigger​
      Else
      Move Lightning to (EndX, EndY, TargetX2, TargetY2)​
      If [the distance between (EndX, EndY) and (TargetX2, TargetY2) is greater than 325] then
      Calculate the angle between (TargetX2, TargetY2) and (EndX, EndY) and store it as Angle
      Set ReturnX to EndX + 325 in Angle direction
      Set ReturnY to EndY + 325 in Angle direction
      Set the X-coordinate of Target to ReturnX
      Set the Y-coordinate of Target to ReturnY
    Conditions
    • Condition 1
      If the spell which went into effect was [A1J7] ...

    • Condition 2
      Is a living enemy non-dummy non-structure non-ancient (except Spirit Bear) unit ...

    [A1HR] Essence Shift

    The base spell is Evasion which provides the ability icon.

    Variables
    • Source //Slark
    • Level //The level of the Essence Shift ability
    • Modifier //The value used to determine the main attribute of the attacked hero
    • Target //The attacked unit
    • EssenceShiftCooldown //An integer used to determine whether Essence Shift is on cooldown
    • ModifierAgi //The value used to determine the amount of "stolen" Agility
    • ModifierStr //The value used to determine the amount of "stolen" Strength
    • ModifierInt //The value used to determine the amount of "stolen" Intelligence
    • Boolean1 //A Boolean used to control the restoration of the stats
    • Boolean2 //A Boolean used to control the restoration of the stats
    Abilities
    • [A1HR] //Essence Shift (possessed by Murloc Nightcrawler)
    Functions
    • Function 1
      If [note=
      If the A1HR ability was learned for the first time and the learning unit was not an illusion ...]Condition 1[/note] is satisfied then
      Call Function 2

    • Function 2
      Store the triggering unit as Source
      If [an attack started and [note=If the attacker has the A1HR ability and the attacked unit is an enemy non-Roshan non-structure hero unit and the attacker is Source ...]Condition 2[/note] is satisfied] then
      Call Function 3

    • Function 3
      If [(EssenceShiftCooldown = 1) = False] then
      Call Function 10
      Call Function 4

    • Function 4
      Store the triggering unit as Target //This is basically the unit you started the attack against
      Store the attacker as Source
      Create a timer which runs out after 1 seconds
      Call Function 5 when the timer runs​
      If [Target was damaged] then
      Call Function 5

    • Function 5
      If [this function was called because Target was damaged] then
      If [Source = GetEventDamageSource()] then
      Create a timer which runs out after 0.01 second
      Call Function 6 when the timer runs out​
      If [Source died] then
      Call Function 6
      If [Target died] then
      Call Function 6
      Else
      Destroy this trigger​

    • Function 6
      If [this function was not called because a unit died] then
      Call Function 7

    • Function 7
      Store the level of the [A1HR] ability as Level
      For Target
      Call Function 8
      If [Modifier=2] then
      Set ModifierAgi=Min(GetHeroAgi(Target,NoBonuses)-1,2)
      If [(GetHeroAgi(Target,NoBonuses)-1) < 2] then
      Set ModifierAgi=GetHeroAgi(Target,NoBonuses)-1
      Else
      Set ModifierAgi=2 //This is how the 'IMinBJ' function works. All the other Stat Modifiers are assigned according to it and explaining every single one of them would be rather annoying, so refer to this one
      If [Modifier=2] then
      Set ModifierStr=Min(GetHeroStr(Target,NoBonuses)-1,1)
      Set ModifierInt=Min(GetHeroInt(Target,NoBonuses)-1,1)
      If [Modifier=3] then
      Set ModifierAgi=Min(GetHeroAgi(Target,NoBonuses)-1,1)
      Set ModifierStr=Min(GetHeroStr(Target,NoBonuses)-1,2)
      Set ModifierInt=Min(GetHeroInt(Target,NoBonuses)-1,1)
      If [Modifier=1] then
      Set ModifierAgi=Min(GetHeroAgi(Target,NoBonuses)-1,1)
      Set ModifierStr=Min(GetHeroStr(Target,NoBonuses)-1,1)
      Set ModifierInt=Min(GetHeroInt(Target,NoBonuses)-1,2)
      Set the agility of Source to GetHeroAgi(Source,NoBonuses) + ModifierAgi + ModifierInt + ModifierStr
      Set the agility of Target to GetHeroAgi(Target,NoBonuses) - ModifierAgi
      Set the strength of Target to GetHeroStr(Target,NoBonuses) - ModifierStr
      Set the intelligence of Target to GetHeroInt(Target,NoBonuses) - ModifierInt
      Set Boolean1 to False
      Set Boolean2 to False
      Create a timer which runs out after 15*Level seconds
      Call Function 9 when the timer runs out
      If [Source died] then
      Call Function 9
      If [Target died] then
      Call Function 9

    • Function 8
      If [the main attribute of Target is Agility] then
      Set Identifier to 2​
      If [the main attribute of Target is Strength] then
      Set Identifier to 3​
      If [the main attribute of Target is Intelligence] then
      Set Identifier to 1​
      If [the unit ID of Target is [Eevm] or [N02B] or [N017] or [N013] or [N014] or [N015] or [H08D] or [H08C] or [H084] or [H08B]] then
      Set Identifier to 2​
      If [the unit ID of Target is [N01H] or [N01T] or [N01J] or [H00E] or [H00G] or [H00F] or [H07I] or [E015]] then
      Set Identifier to 3​
      If [the unit ID of Target is [H06X] or [H06Y] or [H06W] or [H0BC] or [O017]] then
      Set Identifier to 1​

    • Function 9
      If [this function was called because a unit died] then
      If [Boolean1 = False and the unit which died is Source] then​
      Set Boolean1 to True
      Set the agility of Source to GetHeroAgi(Source,NoBonuses) - ModifierAgi - ModifierInt - ModifierStr
      Else if [Boolean2 = False and the unit which died is Target] then​
      Set Boolean2 to True
      Set the agility of Target to GetHeroAgi(Target,NoBonuses) + ModifierAgi
      Set the strength of Target to GetHeroStr(Target,NoBonuses) + ModifierStr
      Set the intelligence of Target to GetHeroInt(Target,NoBonuses) + ModifierInt
      Else
      If [Boolean1 = False] then​
      Set Boolean1 to True
      Set the agility of Source to GetHeroAgi(Source,NoBonuses) - ModifierAgi - ModifierInt - ModifierStr
      If [Boolean2 = False] then​
      Set Boolean2 to True
      Set the agility of Target to GetHeroAgi(Target,NoBonuses) + ModifierAgi
      Set the strength of Target to GetHeroStr(Target,NoBonuses) + ModifierStr
      Set the intelligence of Target to GetHeroInt(Target,NoBonuses) + ModifierInt

    • Function 10
      Set EssenceShiftCooldown to 1
      Create a timer which runs out after 0.45 - Level*0.05 seconds
      Call Function 11 when the timer runs out​

    • Function 11
      Set EssenceShiftCooldown to 2

    Conditions
    • Condition 1
      If the [A1HR] ability was learned for the first time and the learning unit was not an illusion ...
    • Condition 2
      If the attacker has the [A1HR] ability and the attacked unit is an enemy non-Roshan non-structure hero unit and the attacker is Source ...
    Notes
    The 0.01 second delay is used in order to fix the "issue" with Shallow Grave

    [A1IN] Shadow Dance


    The base spell is Wind Walk which provides the projectile dodging property, the ability icon and the targeting function.

    Variables
    • Source //Murloc Nightcrawler
    • Level //The level of the Shadow Dance ability
    • ShadowDanceFX //The [h0B1] dummy unit used which provides the visual effects of the active part
    • Duration //The duration of the active part
    • Time //The time of the game
    • DisabledTime //The time during which the Spellbook abilities are removed after being damaged by a neutral unit
    • Counter1 //A counter used to control the addition and the removal of the Spellbook abilities
    • Counter2 //A counter used to control the addition and the removal of the Spellbook abilities
    Abilities
    • [A1IN] //Shadow Dance (used by Murloc Nightcrawler)
    • [A1HW] //Permanent Invisibility ability
    • [A1HX] //Permanent Invisibility ability
    • [B0C9] //The buff ID of the Slow Aura (Tornado) abilities
    • [A1IE] //Spellbook ability used for level 1 which has the following abilities:

    1. [A1IC] //Healing Ward Aura ability providing the heal
    2. [A1I8] //Slow Aura (Tornado) ability providing the speed increase
    3. [A1I7] //Ability providng the visual effects of the passive part
    • [A1IF] //Spellbook ability used for level 2 which has the following abilities:

    1. [A1ID] //Healing Ward Aura ability providing the heal
    2. [A1I9] //Slow Aura (Tornado) ability providing the speed increase
    3. [A1I7] //Ability providng the visual effects of the passive part
    • [A1IG] //Spellbook ability used for level 3 which has the following abilities:

    1. [A1IB] //Healing Ward Aura ability providing the heal
    2. [A1IA] //Slow Aura (Tornado) ability providing the speed increase
    3. [A1I7] //Ability providng the visual effects of the passive part
    Functions

    • Function 1
      If [note=If the A1IN ability was learned for the first time and the learning unit was not an illusion ...]Condition 1[/note] is satisfied then
      Call Function 2

    • Function 2
      Store the triggering unit as Source
      Set Counter1 to 0
      Set Counter2 to 0
      Create a timer which runs at a 0.1 second interval
      Call Function 3 for each interval
      If [Source was damaged] then
      Call Function 3
      Set the [A1IE] ability to be unavailable to Source
      Set the [A1IF] ability to be unavailable to Source
      Set the [A1IG] ability to be unavailable to Source

    • Function 3
      Store the level of the [A1IN] ability as Level
      Store the current game time as Time
      If [Source is dead] then
      Set Source to null
      If [this function was called because Source was damaged and GetEventDamageSource() is a neutral unit] then
      If [the level of the [A1IE] ability is greater than 0] then​
      Remove the [A1IE] ability from Source
      Remove the [B0C9] ability from Source
      If [the level of the [A1IF] ability is greater than 0] then​
      Remove the [A1IF] ability from Source
      Remove the [B0C9] ability from Source
      If [the level of the [A1IG] is greater than 0] then​
      Remove the [A1IG] ability from Source
      Remove the [B0C9] ability from Source
      Set DisabledTime to Time + 2
      If [DisabledTime > Time] then
      Set Source to null //This is done so that when Slark is damaged by a neutral unit there will be no additional buff addition and removal for 2 seconds. Source is retrieved from the hashtable each time this function is called, so there aren't any unwanted effects either
      If [Source is visible to the enemy or Source has the [BNdo] buff] then
      Set Counter2 to 0
      If [the level of the [A1IE] ability is greater than 0] or [the level of the [A1IF] ability is greater than 0] or [the level of the [A1IG] ability is greater than 0] then​
      Set Counter1 to Counter1+0.1
      If [Counter1 > 0.6] then ​
      Set Counter1 to 0​
      If [the level of the [A1IE] ability is greater than 0] then​
      Remove the [A1IE] ability from Source
      Remove the [B0C9] ability from Source
      If [the level of the [A1IF] ability is greater than 0] then​
      Remove the [A1IF] ability from Source
      Remove the [B0C9] ability from Source
      If [the level of the [A1IG] ability is greater than 0] then​
      Remove the [A1IG] ability from Source
      Remove the [B0C9] ability from Source
      If [Source is not visible to the enemy] then
      Set Counter1 to 0
      If [Level = 1 and the level of the [A1IE] ability equals 0] or [Level = 2 and the level of the [A1IF] ability equals 0] or [Level = 3 and the level of the [A1IG] ability equals 0] then​
      Set Counter2 to Counter2+0.1
      If [Counter2 > 0.6] then​
      Set Counter2 to 0
      If [Level = 1] then​
      If [the level of the [A1IE] ability equals 0] then​
      Add the [A1IE] ability to Source
      If [Level = 2] then​
      If [the level of the [A1IE] ability is greater than 0] then​
      Remove the [A1IE] ability from Source
      Remove the [B0C9] ability from Source
      If [the level of the [A1IF] ability equals 0] then​
      Add the [A1IF] ability to Source
      If [Level = 3] then​
      If [the level of the [A1IE] ability is greater than 0] then​
      Remove the [A1IE] ability from Source
      Remove the [B0C9] ability from Source
      If [the level of the [A1IF] ability is greater than 0] then ​
      Remove the [A1IF] ability from Source
      Remove the [B0C9] ability from Source
      If [the level of the [A1IG] ability equals 0] then​
      Add the [A1IG] ability to Source

    • Fucntion 4
      If [note=If the spell which went into effect was A1IN ...]Condition 2[/note] is satisfied then
      Call Function 5

    • Function 5
      Set Duration to 5.5
      Create a [h0B1] dummy unit for the owner of Source at the position of Source and store it as ShadowDanceFX
      Add the [A1HW] and the [A1HX] abilities to Source for Duration seconds or until Source dies
      Create a timer which runs at a 0.03 second interval
      Call Function 6 for each interval​

    • Function 6
      If [TriggerCalls > 5.5/0.03] then
      Kill ShadowDanceFX
      Destroy this trigger​
      Else
      Set the X-coordinate of ShadowDanceFX to GetUnitX(Source)
      Set the Y-coordinate of ShadowDanceFX to GetUnitY(Source)
    Conditions
    • Condition 1
      If the [A1IN] ability was learned for the first time and the learning unit was not an illusion ...
    • Condition 2
      If the spell which went into effect was [A1IN] ...
    Notes
    The [h0B1] dummy unit has the following model path: war3mapImported\SmokescreenBlack5
     
    Last edited: Jun 26, 2010
  8. Küken

    Küken Well-Known Member

    Scorched Earth uses Tornado Damage Aura? So it does not stack with radiance? Interesting.
     
  9. BBQ

    BBQ Well-Known Member

    The IDs are different, so it stacks.
    e: By the way, if you haven't noticed, level 1 Scorched Earth provides 10 HP/sec regeneration instead of 15. (stupid tooltip)
     
    Last edited: Jan 14, 2010
  10. GuardiANgel

    GuardiANgel Well-Known Member

    Even though I don't know anything about JASS, coding and stuff, ^THIS is easy-moderate to read and easy to understand.

    TY and gj.
     
  11. antiweltteilchen

    antiweltteilchen Well-Known Member

    any request from your side?
     
  12. myashssi

    myashssi Well-Known Member

    What were the changes for Slarks Pounce? Did icefrog just reduce the 1500 distance after which the link would break or anything else?
     
  13. antiweltteilchen

    antiweltteilchen Well-Known Member

    the 1500 condition was removed and instead the link will be broken if the target moved more than 100 units in 0.03 seconds. more to this will be provided by BBQ soon
     
  14. antiweltteilchen

    antiweltteilchen Well-Known Member

    bump for BBQ adding teh murloc triggers. have a look
     
  15. Fulvian

    Fulvian Member

    Just a little question, about Dark Pact and "[B01Y]-Charge of Darkness Faerie Fire"
    Does Dark Pact remove Charge of Darkness only when Spiritbreaker is about to hit Slark (when the buff icon is visible)?
     
  16. SN0W37

    SN0W37 Well-Known Member

    Correct, if slark doesnt have the buff at the time dark pact goes into effect, or the buff is added after dark pact goes into effect then it is not removed, same with everyother buff on the list.