Does this still even work?

Discussion in 'JASS Zone' started by Naga'sShadow, Sep 2, 2015.

  1. Naga'sShadow

    Naga'sShadow Ultra Cool Member

    Ratings:
    +49 / 0 / -0
    I have admittedly not messed with this stuff in a very long time. I know that most of my code is from before the patch that added hashtables and broke all my stuff. So I have started on something new and as far as I know it should work. Jass NG saves fine but the game drops me to the opening page when I attempt to test it. So some unknown trigger error. Here is the trigger in question.

    Code:
    scope InnerFire initializer init
    
    globals
        private constant integer SPELLID = 'A002' //Spell's Rawcode
        private constant integer HIDID = 'A004' //The hidden Inner Fire's Rawcode
        private constant integer DUMMYID = 'h001' //The hidden caster unit
        private constant string SFX = "Abilities\\Spells\\Human\\MarkOfChaos\\MarkOfChaosTarget.mdl"
    endglobals
    
    private function targeting takes nothing returns boolean
        local unit u = GetFilterUnit()
        return GetWidgetLife(u) >= .45 and IsUnitAlly(u, GetOwningPlayer(GetTriggerUnit())) == true
    endfunction
    
    private function actions takes unit u returns nothing
        local unit caster = u
        local unit dummy
        local location target = GetSpellTargetLoc()
        local group targets = CreateGroup()
        local unit fog
        local integer i = GetUnitAbilityLevel(u, SPELLID)
       
        call AddSpecialEffectLoc(SFX,target)
       
        call GroupEnumUnitsInRangeOfLoc(targets, target, 200, Filter( function targeting))
    
        loop
            set fog = FirstOfGroup(targets)
            exitwhen fog == null
            set dummy = CreateUnitAtLoc(GetOwningPlayer(u), DUMMYID, target, 0)
            call UnitAddAbility(dummy, HIDID)
            call SetUnitAbilityLevel(dummy, HIDID, i)
            call IssueTargetOrder(dummy, "innerfire", fog)
            call UnitApplyTimedLife(dummy, 'BHwe', 1)
            call GroupRemoveUnit(targets, fog)
            set fog = null
        endloop
       
    endfunction
    
    private function conditions takes nothing returns boolean
        if GetSpellAbilityId() == SPELLID then
            call actions(GetTriggerUnit())
        endif
        return false
    endfunction
    
    //===========================================================================
    private function init takes nothing returns nothing
        local trigger t = CreateTrigger( )
        call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
        call TriggerAddCondition( t, Condition( function conditions) )
    endfunction
    
    endscope
    I'm currently using JNGP 5d. The only link to 2.0 I can find requires me signing up to a site. Is my problem solvable by upgrading or is it in the code itself? Please don't point out the inefficient group setup unless you know a superior way.
     
  2. jonas

    jonas Well-Known Member

    Ratings:
    +42 / 4 / -0
    Are you sure that GetWidgetLife can be used on a unit in the new JASS?
     
  3. Naga'sShadow

    Naga'sShadow Ultra Cool Member

    Ratings:
    +49 / 0 / -0
    It's worked fine for me. I managed to get it working so considered the issue solved but thanks for the help.
     
  4. Royce

    Royce New Member

    Ratings:
    +0 / 0 / -0
    Last edited: May 16, 2017
  5. MyPad

    MyPad Member

    Ratings:
    +0 / 0 / -0
    JASS:
    scope InnerFire initializer init
    
    //Added AI function...
    native UnitAlive takes unit id returns boolean
    
    globals
       private constant integer SPELLID = 'A002' //Spell's Rawcode
       private constant integer HIDID = 'A004' //The hidden Inner Fire's Rawcode
       private constant integer DUMMYID = 'h001' //The hidden caster unit
       private constant string SFX = "Abilities\\Spells\\Human\\MarkOfChaos\\MarkOfChaosTarget.mdl"
    endglobals
    
    //Delimited the targeting conditionfunc
    /*
    private function targeting takes nothing returns boolean
       local unit u = GetFilterUnit()
       return GetWidgetLife(u) >= .45 and IsUnitAlly(u, GetOwningPlayer(GetTriggerUnit())) == true
    endfunction
    */
    
    private function actions takes unit u returns nothing
       //local unit caster = u
       local unit dummy
    
       //Reals
       local real target_x = GetSpellTargetX()
       local real target_y = GetSpellTargetY()
       //local location target = GetSpellTargetLoc()
    
       local group targets = CreateGroup()
       local unit fog
       local integer i = GetUnitAbilityLevel(u, SPELLID)
       
       call AddSpecialEffect(SFX, target_x, target_y)
       
       call GroupEnumUnitsInRange(targets, target_x, target_y, 200, null)
       loop
           set fog = FirstOfGroup(targets)
           exitwhen fog == null
           if /*GetWidgetLife(fog) >= .45*/ UnitAlive(fog) and IsUnitAlly(fog, GetOwningPlayer(u)) then
               set dummy = CreateUnitAtLoc(GetOwningPlayer(u), DUMMYID, target, 0)
               call UnitAddAbility(dummy, HIDID)
               call SetUnitAbilityLevel(dummy, HIDID, i)
               call IssueTargetOrder(dummy, "innerfire", fog)
               call UnitApplyTimedLife(dummy, 'BHwe', 1)
           endif
           call GroupRemoveUnit(targets, fog)
           set fog = null
       endloop
       
       call DestroyGroup(targets)
       
       set dummy = null
       set fog = null
       set targets = null
    endfunction
    
    private function conditions takes nothing returns /*boolean*/ nothing
       if GetSpellAbilityId() == SPELLID then
           call actions(GetTriggerUnit())
       endif
    endfunction
    
    //===========================================================================
    private function init takes nothing returns nothing
       local trigger t = CreateTrigger( )
       call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
       call TriggerAddCondition( t, Condition( function conditions) )
       //set t = null
    endfunction
    
    endscope


    Just optimized it! But, I didn't realize it was already solved so ignore this at your discretion :)
     

Share This Page