• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

===[NEW] Spell Workshop [NEW]===

Status
Not open for further replies.
Level 11
Joined
Sep 12, 2008
Messages
657
Recycling Groups?

I didnt use 1 group yet.. except the 1 i forgot to uncall.. heres a better code:

JASS:
library ShieldSystem initializer OnInit requires IntuitiveDamageSystem
    
    function interface ShieldTakesDamage takes unit wielder, real shieldLifeLeft, real dealtDamage returns nothing
    
    globals
        public constant real loopSpeed = 0.032
    endglobals
    
    struct ShieldSystemData
        public unit wielder
        public string shieldSFX
        public effect sEffect
        
        public real shieldCurrentLife
        public real shieldMaximumLife
        public real damageReduction
        public real currentDamage
        public real damageHoldoff
        
        public real explosionDamageReduction
        public real explosionRadius
        public boolexpr explosionBer
        public group explosionGroup
        
        public ShieldTakesDamage eventFunction
        
        public static method create takes unit shieldWielder, string shieldSFX, real shieldMaxLife, real damageReduction returns thistype
            local thistype t = allocate()
                set t.wielder = shieldWielder
                set t.shieldSFX = shieldSFX
                
                set t.shieldCurrentLife = shieldMaxLife
                set t.shieldMaximumLife = shieldMaxLife
                set t.damageReduction = damageReduction
                set t.currentDamage = 0
                set t.explosionRadius = 0
                
                set t.sEffect = AddSpecialEffectTarget(t.shieldSFX, t.wielder, "origin")
                //set t.explosionGroup = CreateGroup()
            return t
        endmethod
        
        public method allowExplosion takes real explosionDamageReduction, real explosionRange, boolexpr groupFilter returns nothing
            set this.explosionDamageReduction = damageReduction
            set this.explosionRadius = explosionRange
            set this.explosionBer = groupFilter
        endmethod
        
        public method registerDamageEvent takes ShieldTakesDamage func returns nothing
            set eventFunction = func
        endmethod
        
        public method isShieldAlive takes nothing returns boolean
            return .shieldCurrentLife > 0
        endmethod
        
        public method damage takes real damage returns nothing
            if isShieldAlive() then
                set shieldCurrentLife = shieldCurrentLife - damage
                set currentDamage = currentDamage + damage
                call eventFunction.execute(wielder, shieldCurrentLife, currentDamage)
                if isShieldAlive() == false then
                    call DestroyEffect(sEffect)
                    //Explode It Here
                    
                    //call DestroyGroup(explosionGroup)
                endif
                
            endif
        endmethod
    endstruct
    
    globals
        public trigger sTrigger = CreateTrigger()
        
        public ShieldSystemData array shieldData
        public integer ShieldSystemCount = 0
    endglobals
    
    function createShield takes ShieldSystemData data returns integer
        set ShieldSystemCount = ShieldSystemCount + 1
        set shieldData[ShieldSystemCount] = data
        return ShieldSystemCount
    endfunction
    
    public function UnitUnderAttack takes nothing returns nothing
        local integer count = 0
        local real equation = 0
        loop
        set count = count + 1
        if GetTriggerUnit() == shieldData[count].wielder then
            if shieldData[count].isShieldAlive() then
                set equation = (GetEventDamage() * (shieldData[count].damageReduction / 100))
                call shieldData[count].damage(equation)
                call SetWidgetLife(GetTriggerUnit(), GetWidgetLife(GetTriggerUnit()) + (GetEventDamage() - equation))
            endif
        endif
        exitwhen count >= ShieldSystemCount
        endloop
    endfunction
    
    public function OnInit takes nothing returns nothing
        call TriggerRegisterDamageEvent(sTrigger, 1)
        call TriggerAddAction(sTrigger, function UnitUnderAttack)
    endfunction
endlibrary

tell me what i can improve before i go into the explosion equations plz =]
 
Level 11
Joined
Sep 12, 2008
Messages
657
Hmm why is IDDS bad? ;/
I'm thinking about that if i replace IDDS, i wont have table, and then AutoIndex, and just get the triggering unit id, then use it instead.. (never liked timer codes xD)
And whats a struct interface?

edit:
what about this:
JASS:
library DamageEvent initializer Init requires optional DamageModifiers, optional LightLeaklessDamageDetect, optional IntuitiveDamageSystem, optional xedamage

//*****************************************************************
//*  DAMAGE EVENT LIBRARY
//*
//*  written by: Anitarf
//*  supports: -DamageModifiers
//*
//*  This is a damage detection library designed to compensate for
//*  the lack of a generic "unit takes damage" event in JASS.
//*
//*  All functions following the Response function interface that
//*  is defined at the end of the calibration section of this
//*  library can be used to respond to damage events. Simply add
//*  such functions to the system's call list with the
//*  RegisterDamageResponse function.
//*
//*  function RegisterDamageResponse takes Response r returns nothing
//*
//*  DamageEvent fully supports the use of DamageModifiers. As
//*  long as you have the DamageModifiers library in your map
//*  DamageEvent will use it to modify the damage before calling
//*  the response functions.
//*
//*  If the map contains another damage detection library,
//*  DamageEvent will interface with it instead of creating
//*  it's own damage event triggers to improve performance.
//*  Currently supported libraries are LightLeaklessDamageDetect
//*  and IntuitiveDamageSystem.
//*
//*  DamageEvent is also set up to automatically ignore dummy
//*  damage events sometimes caused by xedamage when validating
//*  targets (only works with xedamage 0.7 or higher).
//*****************************************************************

    globals
        // In wc3, damage events sometimes occur when no real damage is dealt,
        // for example when some spells are cast that don't really deal damage,
        // so this system will only consider damage events where damage is
        // higher than this threshold value.
        private constant real DAMAGE_THRESHOLD = 0.0
        
    // The following calibration options are only used if the system uses
    // it's own damage detection triggers instead of interfacing with other
    // damage event engines:

        // If this boolean is true, the damage detection trigger used by this
        // system will be periodically destroyed and remade, thus getting rid
        // of damage detection events for units that have decayed/been removed.
        private constant boolean REFRESH_TRIGGER = true

        // Each how many seconds should the trigger be refreshed?
        private constant real TRIGGER_REFRESH_PERIOD = 300.0
    endglobals

    private function CanTakeDamage takes unit u returns boolean
        // You can filter out which units need damage detection events with this function.
        // For example, dummy casters will never take damage so the system doesn't need to register events for them,
        // by filtering them out you are reducing the number of handles the game will create, thus increasing performance.
        //return GetUnitTypeId(u)!='e000' // This is a sample return statement that lets you ignore a specific unit type.
        return true
    endfunction

    // This function interface is included in the calibration section
    // for user reference only and should not be changed in any way.
    public function interface Response takes unit damagedUnit, unit damageSource, real damage returns nothing

// END OF CALIBRATION SECTION    
// ================================================================

    globals
        private Response array responses
        private integer responsesCount = 0
    endglobals

    function RegisterDamageResponse takes Response r returns nothing
        set responses[responsesCount]=r
        set responsesCount=responsesCount+1
    endfunction
    
    private function Damage takes nothing returns nothing
        // Main damage event function.
        local unit damaged=GetTriggerUnit()
        local unit damager=GetEventDamageSource()
        local real damage=GetEventDamage()
        local integer i = 0
        
        loop
            exitwhen not (damage>DAMAGE_THRESHOLD)
          static if LIBRARY_xedamage then
            exitwhen xedamage.isDummyDamage
          endif

          static if LIBRARY_DamageModifiers then
            set damage=RunDamageModifiers()
          endif
            
            loop
                exitwhen i>=responsesCount
                call responses[i].execute(damaged, damager, damage)
                set i=i+1
            endloop
            exitwhen true
        endloop

        set damaged=null
        set damager=null
    endfunction
    
    private function DamageC takes nothing returns boolean
        call Damage() // Used to interface with LLDD.
        return false
    endfunction

// ================================================================

    globals
        private group g
        private boolexpr b
        private boolean clear
        
        private trigger currentTrg
        private triggeraction currentTrgA
        private trigger oldTrg = null
        private triggeraction oldTrgA = null
    endglobals

    private function TriggerRefreshEnum takes nothing returns nothing
        // Code "borrowed" from Captain Griffen's GroupRefresh function.
        // This clears the group of any "shadows" left by removed units.
        if clear then
            call GroupClear(g)
            set clear = false
        endif
        call GroupAddUnit(g, GetEnumUnit())
        // For units that are still in the game, add the event to the new trigger.
        call TriggerRegisterUnitEvent( currentTrg, GetEnumUnit(), EVENT_UNIT_DAMAGED )
    endfunction
    private function TriggerRefresh takes nothing returns nothing
        // The old trigger is destroyed with a delay for extra safety.
        // If you get bugs despite this then turn off trigger refreshing.
        if oldTrg!=null then
            call TriggerRemoveAction(oldTrg, oldTrgA)
            call DestroyTrigger(oldTrg)
        endif
        // The current trigger is prepared for delayed destruction.
        call DisableTrigger(currentTrg)
        set oldTrg=currentTrg
        set oldTrgA=currentTrgA
        // The current trigger is then replaced with a new trigger.
        set currentTrg = CreateTrigger()
        set currentTrgA = TriggerAddAction(currentTrg, function Damage)
        set clear = true
        call ForGroup(g, function TriggerRefreshEnum)
        if clear then
            call GroupClear(g)
        endif
    endfunction

// ================================================================

    private function DamageRegister takes nothing returns boolean
        local unit u = GetFilterUnit()
        if CanTakeDamage(u) then
            call TriggerRegisterUnitEvent( currentTrg, u, EVENT_UNIT_DAMAGED )
            call GroupAddUnit(g, u)
        endif
        set u = null
        return false
    endfunction

    private function Init takes nothing returns nothing
        local rect rec
        local region reg
        local trigger t
        
      static if LIBRARY_IntuitiveDamageSystem then

        // IDDS initialization code
        set t=CreateTrigger()
        call TriggerAddAction(t, function Damage)
        call TriggerRegisterDamageEvent(t, 0)

      else
      static if LIBRARY_LightLeaklessDamageDetect then

        // LLDD initialization code
        call AddOnDamageFunc(Condition(function DamageC))

      else
        
        // DamageEvent initialization code
        set rec = GetWorldBounds()
        set reg = CreateRegion()
        set t = CreateTrigger()
        call RegionAddRect(reg, rec)
        call TriggerRegisterEnterRegion(t, reg, Condition(function DamageRegister))
        
        set currentTrg = CreateTrigger()
        set currentTrgA = TriggerAddAction(currentTrg, function Damage)

        set g = CreateGroup()
        call GroupEnumUnitsInRect(g, rec, Condition(function DamageRegister))
        
        if REFRESH_TRIGGER then
            call TimerStart(CreateTimer(), TRIGGER_REFRESH_PERIOD, true, function TriggerRefresh)
        endif
        
        call RemoveRect(rec)
        set rec = null
        set b = null
        
      endif
      endif
    endfunction
endlibrary
 
Level 11
Joined
Sep 12, 2008
Messages
657
Well.. ill take a look on AIDS, and Infiniate,
does FFA_Point exist with the correct name? (including the caps)
and another thing, never use for integer A, just use a custom integer, and then do udg_your_integer.. alot easier
other then that, cant see anything..

edit: fails, its RemoveLocation, not DestroyLocation
 
Level 17
Joined
Jun 17, 2010
Messages
2,275
i know that lmao, once i use both integer a and b, then ill use globals

Btw this sytem is harder then i imagined, ill post a preview, i finished FFA already because well, its the easiest lol.

  • Numb of Players
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set DummyGroup = (All players)
      • Player Group - Pick every player in DummyGroup and do (Actions)
        • Loop - Actions
          • Set PlayerGroup[0] = (All players matching ((((Picked player) controller) Equal to User) and (((Picked player) slot status) Equal to Is playing)))
          • Set NumbofPlayers = (Number of players in PlayerGroup[0])
      • Custom script: call DestroyForce(udg_DummyGroup)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • NumbofPlayers Less than or equal to 3
        • Then - Actions
          • Set RandomNumberRange = 1
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • NumbofPlayers Less than or equal to 4
            • Then - Actions
              • Set RandomNumberRange = 2
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • NumbofPlayers Less than or equal to 6
                • Then - Actions
                  • Set RandomNumberRange = 3
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • NumbofPlayers Less than or equal to 8
                    • Then - Actions
                      • Set RandomNumberRange = 4
                    • Else - Actions
      • Trigger - Add to (This trigger) the event (Player - (Random player from PlayerGroup[0]) leaves the game)
  • Duel
    • Events
      • Time - Every 60.00 seconds of game time
    • Conditions
    • Actions
      • Set Mode = (Random integer number between 1 and RandomNumberRange)
      • For each (Integer A) from 1 to NumbofPlayers, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Mode Equal to 1
            • Then - Actions
              • Custom script: set bj_wantDestroyGroup = true
              • Set FFA_Point[(Integer A)] = (Random point in (Playable map area))
              • Unit Group - Pick every unit in (Units in (Playable map area) owned by (Player((Integer A)))) and do (Actions)
                • Loop - Actions
                  • Unit - Move (Picked unit) instantly to FFA_Point[(Integer A)]
            • Else - Actions
      • For each (Integer A) from 1 to NumbofPlayers, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Mode Equal to 2
            • Then - Actions
            • Else - Actions
 
Level 11
Joined
Sep 12, 2008
Messages
657
lol base, 4 players in map = number max is 4
2 leaves, 2 players in map.
number max is still 4, 1vs1, that would work.
1 leaves, 3 players in map.
number max is still 4, so its gonna be 2vs1, that would be insanely hard for the solo player :p
 
Level 2
Joined
Jun 3, 2009
Messages
19
Hey,back with another request. I have been making gui spells myself now but my knowledge is so limited I need help with this. Thanks in advance =)

Spellname: Antimagic Field
Only 1 level.

The hero targets an area and once cast the area that was targeted has its tile changed and spells cannot be cast in this area. So basically all units in it are silenced once they walk in it.
The field lasts for 20 seconds. Units are silenced when they are in the field. When they walk out of it they are un-silenced.
(My inspiration for this was an old game called Exile, I grew up playing it)
 
Level 11
Joined
Sep 12, 2008
Messages
657
Wow, that actually looks quite cool, but Defskull, you can remove 1 dummy unit,
and makethe field itself have no rotation allowed, and face the center of his body at the minute hes created, then make him cast silence every loop.
 
Level 33
Joined
Mar 27, 2008
Messages
8,035
If I make it cast silence every loop, every unit has its own Casting Animation which probably f*cked up the trigger
The only way is to order that unit to "Stop" before making a further spell (I don't wanna risk using this action order)
Because every unit needs approximately at least 0.7 seconds or so to re-cast any spell (this condition applied to a stationary units that are given order by trigger/player order event and does not interrupt its current order such as Move or Stop)

Situation A:
Try cast Chain Lightning and do nothing
You will see a "highlight" appear from the border of the spell icon in UI List, is it ?

Situation B:
Try cast Chain Lightning and order the unit to either Move or Stop
You can see the "highlight" effect disappears immediately after ordering the unit to Stop or Move
 
Level 6
Joined
Feb 24, 2011
Messages
197
Need a system, for reloading, using ammo boxes/magazines/bullets, that will reload the weapon we're currently holding(in the inventory) , and make the trigger check if the unit has a weapon

make it MPI, not mui, so it would not take your time to much, as i've seen that many people requested things from you, (100++ pages!)

i will never forget to rep anyone who deserves it and anyone who wasted their time for me
 
Level 17
Joined
Jun 17, 2010
Messages
2,275
make it MPI, not mui, so it would not take your time to much, as i've seen that many people requested things from you, (100++ pages!)

Lol...... MUI comes before MPI. U cant have MPI Unless MUI is involved. For example, if you have 2 units of a different player, theres 2 units, so MUI is needed, and once MUI is figured out, u have to make it MPI. And if you search this thread, you will find i already did this for somebody, i think it was around the 60s idk.... i think searching bullet system might work
 
Level 11
Joined
Sep 12, 2008
Messages
657
Okay, finnaly mastered my shield system.. if any 1 needs it here it is =]

Code:

JASS:
library ShieldSystem initializer OnInit requires DamageEvent, AutoIndex, GroupUtils
    
    function interface ShieldTakesDamage takes unit wielder, real shieldLifeLeft, real dealtDamage, real dealtDamageTotal returns nothing
    
    struct ShieldSystemData
        public unit wielder
        public string shieldSFX
        public effect sEffect
        
        public real shieldCurrentLife
        public real shieldMaximumLife
        public real damageReduction
        public real currentDamage
        public real damageHoldoff
        
        public real explosionDamageReduction
        public real explosionRadius
        public boolexpr explosionBer
        public group explosionGroup
        
        public ShieldTakesDamage eventFunction
        
        public static method create takes unit shieldWielder, string shieldSFX, real shieldMaxLife, real damageReduction, string shieldAttachPoint returns thistype
            local thistype t = allocate()
                set t.wielder = shieldWielder
                set t.shieldSFX = shieldSFX
                
                set t.shieldCurrentLife = shieldMaxLife
                set t.shieldMaximumLife = shieldMaxLife
                set t.damageReduction = damageReduction
                set t.currentDamage = 0
                set t.explosionRadius = 0
                
                set t.sEffect = AddSpecialEffectTarget(t.shieldSFX, t.wielder, shieldAttachPoint)
                set t.explosionGroup = NewGroup()
            return t
        endmethod
        
        public method allowExplosion takes real explosionDamageReduction, real explosionRange, boolexpr groupFilter returns nothing
            set this.explosionDamageReduction = damageReduction
            set this.explosionRadius = explosionRange
            set this.explosionBer = groupFilter
        endmethod
        
        public method registerDamageEvent takes ShieldTakesDamage func returns nothing
            set eventFunction = func
        endmethod
        
        public method isShieldAlive takes nothing returns boolean
            return .shieldCurrentLife > 0
        endmethod
        
        public method damage takes real damage returns nothing
            local unit enemy = null
            local real equation = 0
            if isShieldAlive() then
                set shieldCurrentLife = shieldCurrentLife - damage
                set currentDamage = currentDamage + damage
                call eventFunction.execute(wielder, shieldCurrentLife, damage, currentDamage)
                if isShieldAlive() == false then
                    call DestroyEffect(sEffect)
                    //Explode It Here
                    call GroupEnumUnitsInArea(explosionGroup, GetUnitX(wielder), GetUnitY(wielder), explosionRadius, explosionBer)
                    //function GroupEnumUnitsInArea takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing
                    loop
                    set enemy = FirstOfGroup(explosionGroup)
                    exitwhen enemy == null
                        set equation = currentDamage * explosionDamageReduction / 100
                        call UnitDamageTarget(wielder, enemy, equation, false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL, null)
                        call GroupRemoveUnit(explosionGroup, enemy)
                    endloop
                    call ReleaseGroup(explosionGroup)
                endif
                
            endif
        endmethod
    endstruct
    
    globals
        public ShieldSystemData array shieldData
    endglobals
    
    function createShield takes ShieldSystemData data returns nothing
        set shieldData[GetUnitId(data.wielder)] = data
    endfunction
    
    public function UnitUnderAttack takes unit damagedUnit, unit damageSource, real damage returns nothing
        local integer count = 0
        local real equation = 0
        set count = GetUnitId(damagedUnit)
            if shieldData[count].isShieldAlive() then
                set equation = damage * shieldData[count].damageReduction / 100
                call shieldData[count].damage(equation)
                call SetWidgetLife(damagedUnit, GetWidgetLife(damagedUnit) + equation)
            endif
    endfunction
    
    public function OnInit takes nothing returns nothing
        call RegisterDamageResponse(UnitUnderAttack)
    endfunction
    
endlibrary

Test map: [Mui proved with garena]

http://www.hiveworkshop.com/forums/pastebin.php?id=ilmxz9

Give me ideas how to improve this code please =]
Thanks in advance.
 
Level 2
Joined
Jun 3, 2009
Messages
19
@wakawl
Your spell request is done, I name it, Forbidden Ground
I didn't use "region/tile transformation" but I did something with dummy unit
It's still up to you if you still wants the tile to be changed

Hey thanks, works perfectly, and you made it very fast! I'll remember to give you some rep after I "spread some around."
The dummy unit "effect" is good to.
 
Last edited:
Level 2
Joined
Aug 7, 2010
Messages
16
So here's a bit more unordinary request:

Unshackled Fury (Passive): Upon attacking or being attacked there's a 15% chance that the hero releases his inner rage, gaining a buff that empowers his next ability and returns 10% of hero's maximum mana.

Heroic Cleave: Hits every enemy in front of hero for attack damage + 1/2/3 * Strength. Cooldown 10 sec. Mana cost 70/90/110 Unshackled Fury bonus: Also heals the hero for 25% of the damage done.

Unrelenting Strike: Deals 60/140/220 damage to single-target. If used on an enemy with less than 35% of HP deals additional 100/225/350 damage. Cooldown 30/25/20 sec. Mana cost 60/75/90 Unshackled Fury bonus: Also gives hero a 20% attack speed and movement speed buff for 4 seconds.

Dash: Hero dashes towards target location. Hits all enemies in the way for attack damage. Cooldown 20/16/12 sec. mana cost 40/50/60 Unshackled Fury bonus: Also stuns all enemies hit for 1.5 sec.

Aegis of Justice (Ultimate): Creates a shield around the hero that absorbs Strength * 5 damage. While the shield holds hero attacks deals 50 bonus damage.


Whew. Sounds like a lot to ask but if you could try to do at least some of them I'd appreciate it a lot. Basically Unshackled fury is a buff that instantly returns 10% of hero mana and the buff is consumed when an ability is used. It could use the bloodlust animation. Also ultimate could use divine shield animation. Thanks in advance.
 
Level 33
Joined
Mar 27, 2008
Messages
8,035
So here's a bit more unordinary request:

Unshackled Fury (Passive): Upon attacking or being attacked there's a 15% chance that the hero releases his inner rage, gaining a buff that empowers his next ability and returns 10% of hero's maximum mana.

Heroic Cleave: Hits every enemy in front of hero for attack damage + 1/2/3 * Strength. Cooldown 10 sec. Mana cost 70/90/110 Unshackled Fury bonus: Also heals the hero for 25% of the damage done.

Unrelenting Strike: Deals 60/140/220 damage to single-target. If used on an enemy with less than 35% of HP deals additional 100/225/350 damage. Cooldown 30/25/20 sec. Mana cost 60/75/90 Unshackled Fury bonus: Also gives hero a 20% attack speed and movement speed buff for 4 seconds.

Dash: Hero dashes towards target location. Hits all enemies in the way for attack damage. Cooldown 20/16/12 sec. mana cost 40/50/60 Unshackled Fury bonus: Also stuns all enemies hit for 1.5 sec.

Aegis of Justice (Ultimate): Creates a shield around the hero that absorbs Strength * 5 damage. While the shield holds hero attacks deals 50 bonus damage.


Whew. Sounds like a lot to ask but if you could try to do at least some of them I'd appreciate it a lot. Basically Unshackled fury is a buff that instantly returns 10% of hero mana and the buff is consumed when an ability is used. It could use the bloodlust animation. Also ultimate could use divine shield animation. Thanks in advance.

Accepted.
Questions will be asked later if I don't understand the mechanics of the spell, be sure to be active over here, to check out my questions, okay ?

Unshackled Fury: If the unit already has the buff, do the "+10% based on max Mana" occurs ?
Or occur ONLY when the unit is not affected by the buff yet ?
 
Level 2
Joined
Aug 7, 2010
Messages
16
Accepted.
Questions will be asked later if I don't understand the mechanics of the spell, be sure to be active over here, to check out my questions, okay ?

Sure thing, thanks a lot! :)

Unshackled Fury: If the unit already has the buff, do the "+10% based on max Mana" occurs ?
Or occur ONLY when the unit is not affected by the buff yet ?

Only when unit doesn't have the buff yet.
 
Last edited:
Level 9
Joined
Dec 26, 2010
Messages
475
Can i request a MULTIBOARD? :)
Here's the blueprints.
blueprints-1.jpg

the box is the heroes icons when pick and can you please put the total kills
and can you please put the total team kills too :D thanks
 
Last edited:
Level 12
Joined
Apr 26, 2008
Messages
830
Here is a request i hope someone can do it!..

Giant Water Wave:
The user of this move creates a giant water wave (use waterfall model) and sends it towards the direction of the target point of abillity and the wave moves until a range of 1200, every unit it encounters will be knocked back with the wave (like the wave catch them and force them to come "along" with the wave until it reaches 1200 range) the unit will be damaged each time a knockback happens and the damage is (INT X 0.20 of caster).

GUI MUI please
 
Last edited:
Status
Not open for further replies.
Top