Does this still even work?

Naga'sShadow

Ultra Cool Member
Reaction score
49
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.
 

jonas

You can change this now in User CP.
Reaction score
63
Are you sure that GetWidgetLife can be used on a unit in the new JASS?
 

Naga'sShadow

Ultra Cool Member
Reaction score
49
It's worked fine for me. I managed to get it working so considered the issue solved but thanks for the help.
 

MyPad

Member
Reaction score
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 :)
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top