Spell Help

_whelp

New Member
When I cast it, it works, but the unit is still stunned and gets damaged until they die.

I don't know what's wrong with it, but I'm guessing it's because I'm using T32 wrong?
JASS:
scope spell initializer onInit

    globals
        private integer ABILITY_ID = 'A000'
        private integer STUN_ID = 'Tstn'
        private integer STUN_BUFF = 'BPSE'
        private string STUN_ORDER = "thunderbolt"
        private integer DUMMY_ID = 'Tdmy'
        private string HOLD_EFFECT = "Objects\\Spawnmodels\\Other\\HumanBloodCinematicEffect\\HumanBloodCinematicEffect.mdl"
        private attacktype ATTACK_TYPE = ATTACK_TYPE_CHAOS
        private damagetype DAMAGE_TYPE = DAMAGE_TYPE_UNIVERSAL
        private weapontype WEAPON_TYPE = WEAPON_TYPE_WHOKNOWS
        private real TIMER_PERIOD = 0.03125
        private integer CROW_FORM = 'Amrf'
        private real HEIGHT_DIFFERENCE = 25
    endglobals
    
    private function AIR_HEIGHT takes integer lvl returns real
        return 250 * I2R(lvl) + 25
    endfunction
    
    private function AIR_DURATION takes integer lvl returns real
        return 5 + I2R(lvl)
    endfunction
    
    private function SPELL_DAMAGE takes integer lvl, integer phase returns real
        if (phase == 0) then
            return I2R(lvl) * 2
        elseif (phase == 1) then
            return I2R(lvl) * AIR_HEIGHT(lvl) - 50
        endif
        
        return 0.
    endfunction

//The naming convention is changed in this part of the code for no reason.

    native UnitAlive takes unit u returns boolean

    globals
        private trigger trig = CreateTrigger()
        private group grp = CreateGroup()
        private unit dummy = CreateUnit(Player(15), DUMMY_ID, 0, 0, 0)
    endglobals
    
    private struct data
        unit caster
        unit victim
        effect fx
        integer phase = 0
        real height = 0
        real time = 0
        
        private method periodic takes nothing returns nothing
            local integer lvl = GetUnitAbilityLevel(this.caster, ABILITY_ID)
            local real height = GetUnitFlyHeight(this.victim)
            
            call BJDebugMsg("hello")
            
            if(height < AIR_HEIGHT(lvl) and time < AIR_DURATION(lvl)) then
                call UnitAddAbility(this.victim, CROW_FORM)
                call SetUnitFlyHeight(this.victim, height + HEIGHT_DIFFERENCE, 100000)
                call UnitRemoveAbility(this.victim, CROW_FORM)
            elseif(time >= AIR_DURATION(lvl)) then
                if(height == 0) then
                    set phase = 1
                endif
                call UnitAddAbility(this.victim, CROW_FORM)
                call SetUnitFlyHeight(this.victim, height - HEIGHT_DIFFERENCE, 100000)
                call UnitRemoveAbility(this.victim, CROW_FORM)
            endif
            
            call UnitDamageTarget(this.caster, this.victim, SPELL_DAMAGE(lvl, phase), false, false, ATTACK_TYPE, DAMAGE_TYPE, WEAPON_TYPE)

            if(not(UnitAlive(this.caster) or UnitAlive(this.victim)) or phase == 1) then
                call this.stopPeriodic()
                call UnitRemoveAbility(this.victim, STUN_ID)
                call DestroyEffect(this.fx)

                set this.caster = null
                set this.victim = null
                set this.fx = null
                call this.destroy()
            endif
            set this.time = this.time + TIMER_PERIOD
        endmethod
        
        implement T32x
    endstruct
    
    private function actions takes nothing returns nothing
        local data d = data.create()
        set d.caster = GetTriggerUnit()
        set d.victim = GetSpellTargetUnit()
        set d.fx = AddSpecialEffectTarget(HOLD_EFFECT, d.victim, "chest")
        
        call IssueTargetOrder(dummy, STUN_ORDER, d.victim)
        
        call d.startPeriodic()
    endfunction
    
    private function conditions takes nothing returns boolean   
        if(GetSpellAbilityId() == ABILITY_ID) then
            call actions()
        endif
        
        return false
    endfunction
    
    private function onInit takes nothing returns nothing
        local integer i = 0
        
        loop
            exitwhen i == 16
            call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
            set i = i + 1
        endloop
        
        call TriggerAddCondition(trig, Condition(function conditions))
    endfunction
endscope
 

Sickle

New Member
He is using the T32x module, which provides the startPeriodic and stopPeriodic methods.

Try replacing [lJASS]height == 0[/lJASS] with [lJASS]height <= 0[/lJASS] and see if that works. It might, it might not. Real values in Warcraft III are inaccurate and act eccentrically when compared to other values. If that doesn't work, try [lJASS]height <= 1[/lJASS]. You should really be using an integer that counts the amount of ticks that the spell lasts.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Varine Varine:
    Good luck to the hurricane path people. Is TH still in Houston?
  • Ghan Ghan:
    I think so
    +1
  • The Helper The Helper:
    Yeah we got nothing here did not even rain
  • Ghan Ghan:
    We could use some rain.
  • The Helper The Helper:
    I am not complaining though Hurricanes are not fun I have been through alot of them
  • Blackveiled Blackveiled:
    I evacuated for it just incase since I live in La Porte pretty much right on the water (in Houston area). Didn't see anything. It's a good thing for me anyways.
  • Ghan Ghan:
    It's too bad that Blizzard messed up so terribly with Reforged.
  • Ghan Ghan:
    Still has a 0.6 user metacritic score.
  • Ghan Ghan:
    (Out of 10)
  • Varine Varine:
    I haven't even tried it yet because everyone said it sucked. How do you get .6 out of ten?
  • The Helper The Helper:
    I am waiting for Dwarf Fortress to come out on Steam then I am on it.
  • Accname Accname:
    I play Dwarf Fortress from time to time.
  • Accname Accname:
    Its Okay.
  • Accname Accname:
    But the performance is sub-par. Does not seem to be well optimized.
  • Varine Varine:
    Is the Steam version coming with a graphical overlay or is it using the ASCII graphics still?
  • tom_mai78101 tom_mai78101:
    Steam version has the graphical overlay.
  • The Helper The Helper:
    Steam Version has graphics, a new interface and will be integrated in the steam mod stuff
  • Blackveiled Blackveiled:
    I didn't think WC3 Reforged was that bad. It pretty much did what it stated (to me at least), but then again I can care less about reforged campaigns and all that. I just care about gameplay.
  • Varine Varine:
    I think people were hoping for a resurgence in mod support. I have little interest in the actual game tbh
  • Varine Varine:
    Plus I know they added that Dota precedent clause where Blizzard can steal your shit which isn't cool.
  • Ghan Ghan:
    They sold Reforged to the community as primarily a huge graphical uplift with high res textures and redone cinematics.
  • Ghan Ghan:
    They even showed one of the redone cinematics at Blizzcon and that very cinematic wasn't even in the released game.
  • Ghan Ghan:
    So I think folks were angry about that.
  • Varine Varine:
    Didn't the backwards compatability have issues too?
  • Accname Accname:
    I never had any hopes for that. Blizzard is not the same company it was 10 years ago.

    Members online

    No members online now.

    Affiliates

    Hive Workshop
    Top