Fatal Error when using spell.

H

Hjalle

Guest
SO im making my first spell and I went over a fatal error problem.

May anyone check out what wrong with this code? It keeps giving me an fatal error.

JASS:
function Spell_Conditions takes nothing returns boolean
    if ( GetSpellAbilityId() != 'AEfk' ) then
        return false
    endif
    return true
endfunction

function Spell_Filter takes nothing returns boolean
    local unit u = GetTriggerUnit()
    if ( GetFilterUnit() == u ) then
        return false
    endif

    if ( GetUnitAbilityLevel( GetFilterUnit(),'Bvul' ) > 0 ) then
        return false
    endif

    if ( GetUnitState( u,UNIT_STATE_LIFE ) <= 0 ) then
        return false
    endif

    if ( IsUnitEnemy( GetFilterUnit(),GetOwningPlayer(u) ) == false ) then
        return false
    endif
    return true     
endfunction

function Spell_LifeDrain takes location ul, player p returns nothing
 //   local unit e = GetEnumUnit()
  //  local unit d = CreateUnitAtLoc(p, 'hfoo', ul, 0.00)

 //   call SetUnitMoveSpeed( e, 0.00 )
 //   call UnitAddAbility(d, 'ANdr')
 //   call IssueTargetOrder(d,"drain",e)
 //   call UnitApplyTimedLife(d,'BTLF',8.00)
 //   call SetUnitFlyHeight(e, 200.00, 200.00) 
    
//    set e = null 
 //   set d = null      
endfunction 

function Spell_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local location ul = GetUnitLoc(u)
    local effect ue = AddSpecialEffectTarget("Doodads\\Cinematic\\EyeOfSargeras\\EyeOfSargeras.mdl", u, "overhead") 
    local group g = GetUnitsInRangeOfLocMatching(512.00,ul, Condition(function Spell_Filter))
    local integer gn = CountUnitsInGroup(g)
    local player p = GetOwningPlayer(u)
    
    call SetUnitInvulnerable(u,true)  
    if ( gn == 0 ) then
        call SetUnitInvulnerable(u,false)
        call DestroyEffect(ue)
        call DestroyGroup(g)
        set gn = 0
        call RemoveLocation(ul)
        set u = null
        set p = null
        return
    endif
    
    call ForGroup(g, function Spell_LifeDrain)
    
    call TriggerSleepAction( 8.00 )
    
    call SetUnitInvulnerable(u,false)
    call DestroyEffect(ue)
    call DestroyGroup(g)
    set gn = 0
    call RemoveLocation(ul)
    set u = null
    set p = null
    
endfunction

function InitTrig_Spell takes nothing returns nothing
    set gg_trg_Spell = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Spell, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Spell, Condition( function Spell_Conditions ) )
    call TriggerAddAction( gg_trg_Spell, function Spell_Actions )
endfunction

When i comment out the call ForGroup() it doesn't crash, and I spawn the special effect like i wanted.

Also, may you be kind to tell what i can improve with the code since I am not very good with JASS.
 

Arkan

Nobody rides for free
Reaction score
92
JASS:
function Spell_LifeDrain takes location ul, player p returns nothing

must be:
JASS:
function Spell_LifeDrain takes nothing returns nothing


That's how ForGroup() work.

Looks like you got rid of most BJs, the next step would be to reduce the code size by efficiently using operators, for example

JASS:
    if ( GetSpellAbilityId() != 'AEfk' ) then
        return false
    endif
    return true


can simply be:
JASS:
return GetSpellAbilityId() == 'AEfk'
 
H

Hjalle

Guest
Isn't there a way of sending over the locals "p" and "ul" to Spell_LifeDrain?
ty for helping :)
 

SFilip

Gone but not forgotten
Reaction score
634
And don't worry, using globals with ForGroup won't cause any problems when it comes to your spell being MUI or anything.
 
H

Hjalle

Guest
hm, I think I just stick with using GetTriggerUnit() instead :)

But is there anyway of merging my 2 triggers into one using loops?
And how can I acomplish that?
It seems more efficiant(spelling? :p) for what i am doing here.
 
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