1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  3. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still havn't received your rank award? Then please contact the administration.
    Dismiss Notice
  4. The Lich King demands your service! We've reached the 19th edition of the Icon Contest. Come along and make some chilling servants for the one true king.
    Dismiss Notice
  5. The 4th SFX Contest has started. Be sure to participate and have a fun factor in it.
    Dismiss Notice
  6. The poll for the 21st Terraining Contest is LIVE. Be sure to check out the entries and vote for one.
    Dismiss Notice
  7. The results are out! Check them out.
    Dismiss Notice
  8. Don’t forget to sign up for the Hive Cup. There’s a 555 EUR prize pool. Sign up now!
    Dismiss Notice
  9. The Hive Workshop Cup contest results have been announced! See the maps that'll be featured in the Hive Workshop Cup tournament!
    Dismiss Notice
  10. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

[v]JASS - Acrane Bubble v0.7a

Submitted by Thanathos
This bundle is marked as approved. It works and satisfies the submission rules.
Description

Summons a huge bubble wich lifts all enemys within it into the air. After a short period of time the bubble disappears and all enemys fall onto the ground and get damaged.



Level 1:
Damage: 100
Additional Time in Air: 2.25 Seconds

Level 2:
Damage: 160
Additional Time in Air: 2.75 Seconds

Level 3
Damage: 220
Additional Time in Air: 3.25 Seconds

This spell needs New Gen to be edited. Download it from here

Code
Code (vJASS):

scope ArcaneBubble initializer Init

    globals
        private     constant    integer SID = 'Abbs'
        //The spell rawcode
       
        private     constant    integer DID = 'acbd'
        //The bubble´s rawcode (the upper part)
       
        private     constant    integer DID2 = 'acb2'
        //Also the bubble´s rawcode but the lower part
       
        private     constant    boolean AFFECT_AIR = false
        //Should the bubble also pick up flying units ? (yes = true; no = false)
       
        private     constant    real      BUBBLE_HEIGHT = 750
        //How far should the bubble raise in the air ?
       
        private     constant    real      BUBBLE_FLY_SPEED     = 250
        //How fast should the bubble raise ?
       
        private     constant    real      TARGET_MIN_HEIGHT = 600
        //The minimal height of an enemy which is in the bubble.
        //The target height is any random number between the the bubble height and this value
       
        private     constant    real      TARGET_FLY_SPEED    = 200
        //How fast should a target raise ?
       
        private     constant    real      TARGET_FALL_SPEED = 2300
        //How fast sould a unit fall back to the ground ?
       
        private     constant    real      LIFT_OFF_RANGE = 400
        //The AoE range of the spell
       
        private     constant    real      CRATER_RADIUS = 190
        //When a unit falls back onto the ground it creates a small crater. How large shall the radius be ?
       
        private     constant    real      CRATER_DEPTH   = 120
        //Self explaining
       
        private     constant    real      CRATER_DUR       = 0.55
        //How long should the create being displayed ?
       
        private     constant    real       BUBBLE_SIZE        = 4
        //You may want to change the size of the bubble
               
        private     constant    string   IMPACT_SFX = "Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl"
        //The special effect being displayd when a unit hits the ground
       
        //_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-
        //_-=-_-=-_-=-_-=-_-=-Spell Privates. Please don´t touch !!_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=
        //_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-
        private     constant    real      UPDATE_INTER    = 0.1
        private     constant    real      EFFECT_DELAY    = BUBBLE_HEIGHT/BUBBLE_FLY_SPEED - 0.4
        private     constant    real      INNER_DIAMETER = 250
        private     constant    timer   TIM = CreateTimer()
        private     constant    group  SAFE_GROUP = CreateGroup()
        private                       filterfunc LIFT_OFF
        private                       integer TEMP_STRUCT
        //_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-
        //_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-_-=-
    endglobals
   
    //How long should the units stay in the air ? (based on the level ofc)
    private constant function StayInAir takes real level returns real
        return level * 1.5 + 0.75
    endfunction
   
    //How much damage should a unit recieve when it´s hitting the ground ? (based on the level too ofc)
    private constant function GetImpactDamage takes real level returns real
        return level * 60 + 40
    endfunction
   
    //The main struct
    private struct Bubble
   
        static thistype array Index
        static integer Total = 0
        //Static member used for the indexing method
       
        unit caster
        unit bubble
        unit bubble2
        group targets
        boolean freeze
        real timeout
       
        //Destructor method
        method onDestroy takes nothing returns nothing
       
            call RemoveUnit(.bubble)
            call RemoveUnit(.bubble2)
            call DestroyGroup(.targets)
           
        endmethod
       
        //Creator method
        static method create takes unit ca, location loc returns thistype
       
            local thistype this = thistype.allocate()
           
            set .caster = ca
            set .bubble = CreateUnit(GetOwningPlayer(ca),DID,GetLocationX(loc),GetLocationY(loc),0)
            set .bubble2 = CreateUnit(GetOwningPlayer(ca),DID2,GetLocationX(loc),GetLocationY(loc),0)
            set .targets = CreateGroup()
            set .timeout = StayInAir(GetUnitAbilityLevel(ca,SID)) + BUBBLE_HEIGHT/BUBBLE_FLY_SPEED
            set .freeze = true
            set TEMP_STRUCT = this
            call GroupEnumUnitsInRange(.targets,GetLocationX(loc),GetLocationY(loc),LIFT_OFF_RANGE,LIFT_OFF)
            call SetUnitFlyHeight(.bubble,BUBBLE_HEIGHT,BUBBLE_FLY_SPEED)
            call SetUnitFlyHeight(.bubble2,BUBBLE_HEIGHT - INNER_DIAMETER,BUBBLE_FLY_SPEED)
            call SetUnitScale(.bubble,BUBBLE_SIZE,BUBBLE_SIZE,BUBBLE_SIZE)
            call SetUnitScale(.bubble2,BUBBLE_SIZE,BUBBLE_SIZE,BUBBLE_SIZE)
           
            set thistype.Index[thistype.Total] = this
            set thistype.Total = thistype.Total + 1
           
            return this
           
        endmethod
       
    endstruct
   
    //The struct holds the data which is necessary for hitting the ground
    private struct Fall
   
        static thistype array Index
        static integer Total = 0
        //Again some static members for struct indexing
       
        unit target
        unit caster
        real  timeout
       
        //Another Destructor
        method onDestroy takes nothing returns nothing
       
            call UnitRemoveAbility(.target,'Amrf')
            call PauseUnit(.target,false)
            call UnitDamageTarget(.caster,.target,GetImpactDamage(GetUnitAbilityLevel(.caster,SID)),false,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_UNKNOWN,WEAPON_TYPE_WHOKNOWS)
            call DestroyEffect(AddSpecialEffect(IMPACT_SFX,GetUnitX(.target),GetUnitY(.target)))
            call TerrainDeformCrater(GetUnitX(.target),GetUnitY(.target),CRATER_RADIUS,CRATER_DEPTH,R2I(CRATER_DUR * 1000),false)
            call GroupRemoveUnit(SAFE_GROUP,.target)
           
        endmethod
       
        //...And another Creator
        static method create takes unit ca, unit ta returns thistype
       
            local thistype this = thistype.allocate()
           
            set .target = ta
            set .caster = ca
            set .timeout = (GetUnitFlyHeight(ta) - GetUnitDefaultFlyHeight(ta)) / TARGET_FALL_SPEED
            call SetUnitFlyHeight(ta,GetUnitDefaultFlyHeight(ta),TARGET_FALL_SPEED)
           
            set thistype.Index[thistype.Total] = this
            set thistype.Total = thistype.Total + 1
           
            return this
       
        endmethod
       
    endstruct
   
    //Functions which sends all unit (even flying ones) into the air
    private function LiftOffAll takes nothing returns boolean
   
        local unit u = GetFilterUnit()
        local Bubble this = TEMP_STRUCT
       
        if IsUnitEnemy(u,GetOwningPlayer(this.caster)) and IsUnitInGroup(u,SAFE_GROUP) != true and GetWidgetLife(u) > 0 and IsUnitType(u,UNIT_TYPE_STRUCTURE) !=true and IsUnitType(u, UNIT_TYPE_MECHANICAL) != true and IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) != true and IsUnitType(u, UNIT_TYPE_ANCIENT) != true then
            call PauseUnit(u,true)
            call UnitAddAbility(u,'Amrf')
            call SetUnitFlyHeight(u,GetRandomReal(TARGET_MIN_HEIGHT,BUBBLE_HEIGHT),TARGET_FLY_SPEED)
            call GroupAddUnit(SAFE_GROUP,u)
            set u = null
           
            return true
        endif
       
        set u = null
        return false
       
    endfunction
   
    //This function won´t send flying units into the air
    private function LiftOffGround takes nothing returns boolean
   
        local unit u = GetFilterUnit()
        local Bubble this = TEMP_STRUCT
       
        if IsUnitEnemy(u,GetOwningPlayer(this.caster)) and IsUnitInGroup(u,SAFE_GROUP) != true and IsUnitType(u,UNIT_TYPE_FLYING) != true and GetWidgetLife(u) > 0 and IsUnitType(u,UNIT_TYPE_STRUCTURE) !=true and IsUnitType(u, UNIT_TYPE_MECHANICAL) != true and IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) != true and IsUnitType(u, UNIT_TYPE_ANCIENT) != true then
            call PauseUnit(u,true)
            call UnitAddAbility(u,'Amrf')
            call SetUnitFlyHeight(u,GetRandomReal(TARGET_MIN_HEIGHT,BUBBLE_HEIGHT),TARGET_FLY_SPEED)
            call GroupAddUnit(SAFE_GROUP,u)
            set u = null
           
            return true
        endif
       
        set u = null
        return false
       
    endfunction
       
    //Lets all units fall down
    private function InitFallDown takes nothing returns nothing
       
        local Bubble this = TEMP_STRUCT
        local Fall that = Fall.create(this.caster,GetEnumUnit())
       
    endfunction
 
    //This function is used for the timing...It loops through both structs
    private function WaitLoop takes nothing returns nothing
   
        local Bubble bub
        local Fall fa
        local integer inst = 0
       
        //Looping through the main struct
        loop
            exitwhen inst == Bubble.Total
            set bub = Bubble.Index[inst]
           
            if bub.timeout > 0 then
                set bub.timeout = bub.timeout - UPDATE_INTER
               
                if bub.freeze and bub.timeout <= EFFECT_DELAY + StayInAir(GetUnitAbilityLevel(bub.caster,SID)) then
                    call SetUnitTimeScale(bub.bubble,0)
                    call SetUnitTimeScale(bub.bubble2,0)
                    set bub.freeze = false
                endif
               
            else
                set TEMP_STRUCT = bub
                call ForGroup(bub.targets,function InitFallDown)
                call bub.destroy()
                set Bubble.Total = Bubble.Total - 1
                set Bubble.Index[inst] = Bubble.Index[Bubble.Total]
                set inst = inst - 1
            endif
           
            set inst = inst + 1
        endloop
       
        //Looping through the Fall struct
        set inst = 0
       
        loop
            exitwhen inst == Fall.Total
            set fa = Fall.Index[inst]
           
            if fa.timeout > 0 then
                set fa.timeout = fa.timeout - UPDATE_INTER
            else
                call fa.destroy()
                set Fall.Total = Fall.Total - 1
                set Fall.Index[inst] = Fall.Index[Fall.Total]
                set inst = inst -1
            endif
           
            set inst = inst + 1
        endloop
       
        //If BOTH structs are not running we pause the timer
        if Bubble.Total == 0 and Fall.Total == 0 then
            call PauseTimer(TIM)
        endif
       
    endfunction
   
    //The remains of GUI
    private function Actions takes nothing returns nothing
       
        call Bubble.create(GetTriggerUnit(),GetSpellTargetLoc())
       
        if Bubble.Total - 1 == 0 then
            call TimerStart(TIM,UPDATE_INTER,true,function WaitLoop)
        endif
       
    endfunction

    //Checking the spell rawcode
    private function Conditions takes nothing returns boolean
        return GetSpellAbilityId() == SID
    endfunction

    //Prevents leak upon trigger creation
    private constant function AntiLeak takes nothing returns boolean
        return true
    endfunction

    //The Initializer
    private function Init takes nothing returns nothing
   
        local trigger t = CreateTrigger()
        local filterfunc f = Filter(function AntiLeak)
        local integer i = 0
       
        if AFFECT_AIR then
            set LIFT_OFF = Filter(function LiftOffAll)
        else
            set LIFT_OFF = Filter(function LiftOffGround)
        endif
       
        loop
            call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,f)
            exitwhen i == 15
            set i = i + 1
        endloop
       
        //Preloading....
        call RemoveUnit(CreateUnit(Player(15),DID,0,0,0))
        call Preload(IMPACT_SFX)
        call PreloadStart()
       
        call TriggerAddCondition(t,Condition(function Conditions))
        call TriggerAddAction(t,function Actions)
        call DestroyFilter(f)
        set t = null
        set f = null
       
    endfunction

endscope
 


Changelog
v0.1 -Initial Release
v0.2 - The dummy is now unpickable
- Improved comments to make the spell more userfriendly
- Nulled locals
- Improved the filterfunc
v0.3 - The Spell is now [v]JASS
- Completely reworked
- Should be leakless now
- Now uses timers instead of TriggerSleep
- Removed all BJ`s
- Added a globals block to make the spell more userfriendly
v0.4 -The Spell now requires JNGP and Kattanas Attatch System (included)
- Explicit credit to Ice Frog for the model and to Kattana for his Attatch System.
v0.5 - Removed the imported Icon
- Removed the (hopefully) last leak: GetSpellTargetLoc()
- Removed the useless timer start
- Removed a bug:
-> When a unit is inside a bubble i cannot be added to another bubble.
This is only valid when its the first and the second bubble spell are
created by the same script(Timer Utils version or Keygen version).
- The code was cleared up
- Adjusted the damage
- Testhero will respawn when killed
- There are 2 spell versions now:
1.is using Vexorians Timer Utils instead of Gamecache
2.is using Keygen (an algorithem created by myself to provide indexes)
v0.6 - The spell won´t crash JNGP any further !
- Removed the Keygen version because it caused an unknown bug:
->Whe
GenerateKey()
was called every other action was skipped.
- No major code changes were made
- Improved the Testmap
v0.7 - The spell is now compatible with ANY Warcraft III version.
- Code was completely reworked
- Now using Struct Indexing instead of Timer Utils
- Greatly improved efficiency
- Added more comments
v0.7a - Removed the custom model and replaced it with a dummy construction
- Adjusted the code to support the dummy construction


Keywords:
Arcane Bubble ,Bubble, AoE, Arcane, Air, Orb
Contents

Arcane Bubble Spell (Map)

Reviews
Moderator
14:35, 9th Aug 2009 Reapproved for removing the model hvo-busterkomo: Complete re-review. I'm glad you ending up fixing the complaints I had. You really shouldn't be using the gg_trg prefix for a local. There are a few other...
Thread Status:
Not open for further replies.
  1. 14:35, 9th Aug 2009


    Reapproved for removing the model


    hvo-busterkomo:
    Complete re-review.
    Review

    I'm glad you ending up fixing the complaints I had. You really shouldn't be using the gg_trg prefix for a local. There are a few other optimizations that could be made, but would require a lot of code re-writing. You could also preload the effects.
     
  2. calex3

    calex3

    Joined:
    Mar 2, 2009
    Messages:
    285
    Resources:
    3
    Spells:
    3
    Resources:
    3
    very nice but you can see dummy under that bubble...here is proof...and i cant rate it cause i dont understand jass :(
     

    Attached Files:

  3. Asgard_Ragna

    Asgard_Ragna

    Joined:
    Jan 14, 2006
    Messages:
    157
    Resources:
    1
    Spells:
    1
    Resources:
    1
    The model is awesome and the use of it, too. But the lightning effects look ugly, leave them out.
     
  4. QueenOfOblivion

    QueenOfOblivion

    Joined:
    Feb 21, 2009
    Messages:
    135
    Resources:
    1
    Maps:
    1
    Resources:
    1
    How did you get that model out of DotA
     
  5. Hanky

    Hanky

    Joined:
    Jan 15, 2007
    Messages:
    353
    Resources:
    4
    Maps:
    1
    Spells:
    3
    Resources:
    4
    There are some points you have to add or to improve:

    1.) Add constants to your spell. So it will be much more easier for users to configurate your spell.
    2.) Null locals if you don't need them anymore. For example like this:
    Code (vJASS):
    function bla takes unit a returns nothing
    local location loc=Location(0,0)
    local group g     =CreateGroup()
    local unit b        =a
    call RemoveLocation(loc)
    call DestroyGroup(g)
    set loc=null
    set g=null
    set b=null
    endfunction

    3.) Don't use any TSA functions in your script
    4.) Try to avoid to use BJ's and also try to make your spell script always so fast as possible.
    5.) If you would use vJASS (JassHelper, get it at Welcome to Wc3Campaigns), you could optimize the script much better. Also you could make the script much more readable.
    6.) You don't need to check twice if a boolean is true, just if you use IsUnitType. Else you must just write for example:
    Code (vJASS):
    function blub takes nothing returns boolean
    return IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetSpellAbilityUnit()))
    endfunction


    I think that's all for now.
     
  6. Deuterium

    Deuterium

    Joined:
    Mar 17, 2009
    Messages:
    1,301
    Resources:
    2
    Spells:
    1
    Tutorials:
    1
    Resources:
    2
    @ QueenOfOblivion:
    - it's really easy to remove the protection from some map (basically hacking it :p)... thus u'll be able to reach all the models from DotA. I'm totally against that cause if IceFrog wanted whatever is in his map public, he wouldnt have protected it first place. the important thing is that credit was given to IceFrog ;)
     
  7. calex3

    calex3

    Joined:
    Mar 2, 2009
    Messages:
    285
    Resources:
    3
    Spells:
    3
    Resources:
    3
    how can you enter map
     
  8. Deuterium

    Deuterium

    Joined:
    Mar 17, 2009
    Messages:
    1,301
    Resources:
    2
    Spells:
    1
    Tutorials:
    1
    Resources:
    2
    what do u mean? getting the hacked DotA map??
     
  9. Kingz

    Kingz

    Joined:
    Jun 5, 2008
    Messages:
    2,470
    Resources:
    6
    Spells:
    5
    Tutorials:
    1
    Resources:
    6
    That is not the only method to get a model, you could just search it here on some other wc3 site and find it like all normal people do...
    EDIT:
    This is almost a ripoff of Telekinesis spell we have here on the hive, the idea is the same, only thing difrent is the damage variable and the gfx.
     
  10. Thanathos

    Thanathos

    Joined:
    Aug 2, 2008
    Messages:
    202
    Resources:
    5
    Spells:
    5
    Resources:
    5
    1.Sorry but jass helper has a problem with my windows…dont know what that is.
    2.What are TSA functions ?
    3.I dident check the hive for compareable spells, i apologize if i made an almost ripoff of an other spell. If someone demands ill give credits, but dont delete this spell i put a lot of efforts in it. I created it by myslef just with WE and JC.
    4.I searched the model on WC3 stuff sites but couldn´t find it. I´ve extracted it with an MPQ editor and thought DOTA is a public map so using the stuff in it should be ok while giving credits to the creator.
     
  11. Kingz

    Kingz

    Joined:
    Jun 5, 2008
    Messages:
    2,470
    Resources:
    6
    Spells:
    5
    Tutorials:
    1
    Resources:
    6
    The spell is okay but the idea is already existing + the only thing that makes it good is the gfx, though that is only my opinion...
     
  12. Senseless

    Senseless

    Joined:
    Sep 21, 2008
    Messages:
    3
    Resources:
    0
    Resources:
    0
    i dont become its working^^ im to bad... i copied the dummy the skin the skill and the trigger... all its like in his map.. and in my map he only makes this sphere on the ground the units get green and burn.. ^^

    hu.. i am nearly done.. the skill works and does dmg ^^ but... no chronosphere spawns.. a defensetower of humans spawn^^
     
    Last edited: Apr 17, 2009
  13. Hanky

    Hanky

    Joined:
    Jan 15, 2007
    Messages:
    353
    Resources:
    4
    Maps:
    1
    Spells:
    3
    Resources:
    4
    TSA = [T]riggerleep[A]ction
     
  14. Thanathos

    Thanathos

    Joined:
    Aug 2, 2008
    Messages:
    202
    Resources:
    5
    Spells:
    5
    Resources:
    5
    @Senseless
    ok do it like this…create a new unit in the object editor, use a human worker as basic unit and call it dummy. Then change the dummies model in the object editor to the chronospehre model. Check if the rawcode of the dummy (you will see it when u press STRG+d in the objecteditor) is the same as in the script and make shure your dummy is just a simple unit. Buildings and tower cant fly anyway. Besides did the targetunits start to fly ?

    ok and now an other stupid question concerning the TSA…is look in JC´s native list for some kind of substitute for the lame TSA. I found something called call PolledWait(real)
    shuld i use that or not. if not say me please how i shuld time my script correctly.
     
  15. Hanky

    Hanky

    Joined:
    Jan 15, 2007
    Messages:
    353
    Resources:
    4
    Maps:
    1
    Spells:
    3
    Resources:
    4
    PolledWait would be much more bad than TSA. Well to make something timed just use timers.
     
  16. Thanathos

    Thanathos

    Joined:
    Aug 2, 2008
    Messages:
    202
    Resources:
    5
    Spells:
    5
    Resources:
    5
    Sorry guys but im still n00b…i tried it for some hours to stop my script with timers and then resume it when the timer fished but i cant figure that out. Can someone give me an example how to do it or post a link to a tutorial or somthing…The result of my experiments an research was a bit frustrating:angry:

    Code (vJASS):
    //Well here you can see what i tried in the end…
    function b takes nothing returns nothing
    local real s = 5
    local timer t = CreateTimer()
    local timerdialog d = CreateTimerDialog(t)
    //Creating a dialog to check if the timer spawns and is couting down
    call TimerStart(t,s,false,null)
    call TimerDialogDisplay(d,true)
    call DisplayTextToPlayer(Player(0),0,0,"Let´s get started")
    loop
    exitwhen TimerGetRemaining(t) <= 0
    endloop
    call DisplayTextToPlayer(Player(0),0,0,"Here should the be the proof that it works")
    call DestroyTimer(t)
    call DestroyTimerDialog(d)
    set t = null
    set d = null
    endfunction

    function InitTrig_timer_test takes nothing returns nothing
        local trigger gg_trg_timer_test = CreateTrigger(  )
        call TriggerRegisterPlayerChatEvent( gg_trg_timer_test, Player(0), "-a", true )
        call TriggerAddAction( gg_trg_timer_test, function b )
    endfunction


    I´ve needed that TSA to let the units in the bubble stay in the air for a short time (similar to a stun) and than wait a short moment until they are all back on the ground to deal the damage and do some other things. But i finally cleaned up all leaks. Please help me…
     
  17. Deuterium

    Deuterium

    Joined:
    Mar 17, 2009
    Messages:
    1,301
    Resources:
    2
    Spells:
    1
    Tutorials:
    1
    Resources:
    2
    just a little question... is TSA like "Wait" in GUI?
     
  18. Thanathos

    Thanathos

    Joined:
    Aug 2, 2008
    Messages:
    202
    Resources:
    5
    Spells:
    5
    Resources:
    5
    It´s exactly the same. Make a make a wait in the trigger editor an convert it to custom script.
     
  19. VoidLordXtreme

    VoidLordXtreme

    Joined:
    Mar 30, 2009
    Messages:
    250
    Resources:
    0
    Resources:
    0
    you can see the shadow of the dummy .. fix that!
     
Thread Status:
Not open for further replies.