Skip to content
Home
Post Code
Jass (Warcraft III)
Wurst
GUI (Warcraft III)
Galaxy (StarCraft II)
GUI (StarCraft II)
C++
Java
Delphi
Text
Search Code
Compare Code
Uploads
Draw
Create New Drawing
View Drawings
Graph
Log in
<pre class="jasscode"><span class="style_keyword">package</span> GuardDevilUnbreakable <span class="style_keyword">import</span> DamageType <span class="style_keyword">import</span> StructuredDD <span class="style_keyword">import</span> ClosureTimers <span class="style_keyword">import</span> Players <span class="style_keyword">import</span> Invulnerable <span class="style_keyword">constant</span> <span class="style_type">int</span> ID_GUARD_DEVIL <span class="style_symbol">=</span> <span class="style_int">'h03B'</span> <span class="style_keyword">constant</span> <span class="style_type">int</span> ID_GUARD_DEVIL_GREATER <span class="style_symbol">=</span> <span class="style_int">'h03C'</span> <span class="style_keyword">constant</span> <span class="style_type">int</span> ID_ABILITY_UNBREAKABLE <span class="style_symbol">=</span> <span class="style_int">'A01W'</span> <span class="style_keyword">constant</span> <span class="style_type">int</span> ID_ABILITY_UNBREAKA_CD <span class="style_symbol">=</span> <span class="style_int">'A01X'</span> <span class="style_keyword">constant</span> <span class="style_type">int</span> ID_INVULNERABLE <span class="style_symbol">=</span> <span class="style_int">'Avul'</span> <span class="style_keyword">constant</span> <span class="style_type">real</span> RADIUS <span class="style_symbol">=</span> <span class="style_int">600</span>. <span class="style_keyword">constant</span> <span class="style_type">real</span> DURATION <span class="style_symbol">=</span> <span class="style_int">1</span>. <span class="style_keyword">constant</span> <span class="style_type">real</span> COOLDOWN <span class="style_symbol">=</span> <span class="style_int">60</span>. <span class="style_keyword">constant</span> <span class="style_type">string</span> SHIELD_FX <span class="style_symbol">=</span> <span class="style_string">"Abilities\\Spells\\Human\\DivineShield\\DivineShieldTarget.mdl"</span> <span class="style_type">group</span> grp <span class="style_symbol">=</span> <a class="style_function" href="http://www.mappedia.de/wiki/Jass:CreateGroup">CreateGroup</a><span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">function</span> isGuardDevil<span class="style_symbol">(</span><span class="style_type">unit</span> u<span class="style_symbol">)</span> <span class="style_keyword">returns</span> bool <span class="style_keyword">return</span> u.getTypeId<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">=</span><span class="style_symbol">=</span> ID_GUARD_DEVIL <span class="style_keyword">or</span> u.getTypeId<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">=</span><span class="style_symbol">=</span> ID_GUARD_DEVIL_GREATER <span class="style_keyword">end</span> <span class="style_keyword">function</span> findUnbreakable<span class="style_symbol">(</span><span class="style_type">unit</span> u<span class="style_symbol">)</span> <span class="style_keyword">returns</span> <span class="style_type">unit</span> <span class="style_type">unit</span> guard <span class="style_symbol">=</span> <span class="style_keyword">null</span> <span class="style_type">unit</span> iter grp.enumUnitsInRange<span class="style_symbol">(</span>vec2<span class="style_symbol">(</span>u.getX<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">,</span> u.getY<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span><span class="style_symbol">,</span> RADIUS<span class="style_symbol">)</span> <span class="style_keyword">loop</span> iter <span class="style_symbol">=</span> <a class="style_function" href="http://www.mappedia.de/wiki/Jass:FirstOfGroup">FirstOfGroup</a><span class="style_symbol">(</span>grp<span class="style_symbol">)</span> <span class="style_keyword">exitwhen</span> iter <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_keyword">null</span> <span class="style_keyword">if</span> iter.isAlive<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">and</span> isGuardDevil<span class="style_symbol">(</span>iter<span class="style_symbol">)</span> <span class="style_keyword">and</span> iter.hasAbility<span class="style_symbol">(</span>ID_ABILITY_UNBREAKABLE<span class="style_symbol">)</span> guard <span class="style_symbol">=</span> iter <span class="style_keyword">end</span> grp.removeUnit<span class="style_symbol">(</span>iter<span class="style_symbol">)</span> <span class="style_keyword">end</span> <span class="style_keyword">return</span> guard <span class="style_keyword">end</span> <span class="style_keyword">function</span> h<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_type">unit</span> tU <span class="style_symbol">=</span> <a class="style_function" href="http://www.mappedia.de/wiki/Jass:GetTriggerUnit">GetTriggerUnit</a><span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_type">real</span> damage <span class="style_symbol">=</span> <a class="style_function" href="http://www.mappedia.de/wiki/Jass:GetEventDamage">GetEventDamage</a><span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">if</span> tU.getOwner<span class="style_symbol">(</span><span class="style_symbol">)</span>.getId<span class="style_symbol">(</span><span class="style_symbol">)</span> < Players.COUNT <span class="style_keyword">and</span> DamageType.get<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">=</span><span class="style_symbol">=</span> DamageType.ATTACK <span class="style_keyword">and</span> <span class="style_symbol">(</span>tU.getHP<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span> damage < <span class="style_int">1</span>.<span class="style_symbol">)</span> <span class="style_keyword">and</span> <span class="style_keyword">not</span> tU.hasAbility<span class="style_symbol">(</span>ID_INVULNERABLE<span class="style_symbol">)</span> <span class="style_type">unit</span> unbreakableSource <span class="style_symbol">=</span> findUnbreakable<span class="style_symbol">(</span>tU<span class="style_symbol">)</span> <span class="style_keyword">if</span> unbreakableSource <span class="style_symbol">!</span><span class="style_symbol">=</span> <span class="style_keyword">null</span> Invulnerable.apply<span class="style_symbol">(</span>tU<span class="style_symbol">,</span> DURATION<span class="style_symbol">)</span> unbreakableSource.removeAbility<span class="style_symbol">(</span>ID_ABILITY_UNBREAKABLE<span class="style_symbol">)</span> unbreakableSource.addAbility<span class="style_symbol">(</span> ID_ABILITY_UNBREAKA_CD<span class="style_symbol">)</span> <span class="style_type">effect</span> shield <span class="style_symbol">=</span> tU.addEffect<span class="style_symbol">(</span>SHIELD_FX<span class="style_symbol">,</span> <span class="style_string">"origin"</span><span class="style_symbol">)</span> doAfter<span class="style_symbol">(</span>DURATION<span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> <span class="style_keyword">begin</span> shield.destr<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">end</span><span class="style_symbol">)</span> doAfter<span class="style_symbol">(</span>COOLDOWN<span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> <span class="style_keyword">begin</span> unbreakableSource.addAbility<span class="style_symbol">(</span> ID_ABILITY_UNBREAKABLE<span class="style_symbol">)</span> unbreakableSource.removeAbility<span class="style_symbol">(</span>ID_ABILITY_UNBREAKA_CD<span class="style_symbol">)</span> <span class="style_keyword">end</span><span class="style_symbol">)</span> <span class="style_keyword">end</span> <span class="style_keyword">end</span> <span class="style_keyword">end</span> <span class="style_keyword">init</span> StructuredDD.addHandler<span class="style_symbol">(</span><span class="style_keyword">function</span> h<span class="style_symbol">)</span> <span class="style_keyword">end</span> </pre>
select language
jass
java
delphi
C++
php
GSL
galaxy
visualBasic
> wurst
Text
Markdown
select style
default
bbcode - default
Jasscraft
> jasscraft html
visual
lightweight
lightweightNr
goto line:
Compare with:
text copy window
edit this code
post new code
package GuardDevilUnbreakable import DamageType import StructuredDD import ClosureTimers import Players import Invulnerable constant int ID_GUARD_DEVIL = 'h03B' constant int ID_GUARD_DEVIL_GREATER = 'h03C' constant int ID_ABILITY_UNBREAKABLE = 'A01W' constant int ID_ABILITY_UNBREAKA_CD = 'A01X' constant int ID_INVULNERABLE = 'Avul' constant real RADIUS = 600. constant real DURATION = 1. constant real COOLDOWN = 60. constant string SHIELD_FX = "Abilities\\Spells\\Human\\DivineShield\\DivineShieldTarget.mdl" group grp = CreateGroup() function isGuardDevil(unit u) returns bool return u.getTypeId() == ID_GUARD_DEVIL or u.getTypeId() == ID_GUARD_DEVIL_GREATER end function findUnbreakable(unit u) returns unit unit guard = null unit iter grp.enumUnitsInRange(vec2(u.getX(), u.getY()), RADIUS) loop iter = FirstOfGroup(grp) exitwhen iter == null if iter.isAlive() and isGuardDevil(iter) and iter.hasAbility(ID_ABILITY_UNBREAKABLE) guard = iter end grp.removeUnit(iter) end return guard end function h() unit tU = GetTriggerUnit() real damage = GetEventDamage() if tU.getOwner().getId() < Players.COUNT and DamageType.get() == DamageType.ATTACK and (tU.getHP() - damage < 1.) and not tU.hasAbility(ID_INVULNERABLE) unit unbreakableSource = findUnbreakable(tU) if unbreakableSource != null Invulnerable.apply(tU, DURATION) unbreakableSource.removeAbility(ID_ABILITY_UNBREAKABLE) unbreakableSource.addAbility( ID_ABILITY_UNBREAKA_CD) effect shield = tU.addEffect(SHIELD_FX, "origin") doAfter(DURATION, () -> begin shield.destr() end) doAfter(COOLDOWN, () -> begin unbreakableSource.addAbility( ID_ABILITY_UNBREAKABLE) unbreakableSource.removeAbility(ID_ABILITY_UNBREAKA_CD) end) end end end init StructuredDD.addHandler(function h) end