One Tiny Leap For Kershbob

Kershbob

New Member
Reaction score
30
Yay me! It may have included a lot of change to custom text and tinkering but I made a big old working JASS trigger. I'm so proud.

Code:
function Trig_DragonSpell_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A000' ) ) then
        return false
    endif
    return true
endfunction

function Trig_DragonSpell_Func007Func006001003001 takes nothing returns boolean
    return ( IsPlayerAlly(GetOwningPlayer(GetSpellAbilityUnit()), GetOwningPlayer(GetFilterUnit())) == false )
endfunction

function Trig_DragonSpell_Func007Func006001003002 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_DragonSpell_Func007Func006001003 takes nothing returns boolean
    return GetBooleanAnd( Trig_DragonSpell_Func007Func006001003001(), Trig_DragonSpell_Func007Func006001003002() )
endfunction

function Trig_DragonSpell_Func007Func006A takes nothing returns nothing
    call UnitAddAbilityBJ( 'A004', GetEnumUnit() )
endfunction

function Trig_DragonSpell_Func007C takes nothing returns boolean
    if ( not ( udg_TempInt <= 2 ) ) then
        return false
    endif
    return true
endfunction

function Trig_DragonSpell_Func008Func003001002001 takes nothing returns boolean
    return ( IsPlayerAlly(GetOwningPlayer(GetSpellAbilityUnit()), GetOwningPlayer(GetFilterUnit())) == false )
endfunction

function Trig_DragonSpell_Func008Func003001002002001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL) == false )
endfunction

function Trig_DragonSpell_Func008Func003001002002002 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_UNDEAD) == false )
endfunction

function Trig_DragonSpell_Func008Func003001002002 takes nothing returns boolean
    return GetBooleanAnd( Trig_DragonSpell_Func008Func003001002002001(), Trig_DragonSpell_Func008Func003001002002002() )
endfunction

function Trig_DragonSpell_Func008Func003001002 takes nothing returns boolean
    return GetBooleanAnd( Trig_DragonSpell_Func008Func003001002001(), Trig_DragonSpell_Func008Func003001002002() )
endfunction

function Trig_DragonSpell_Func008Func003A takes nothing returns nothing
    local location TempPoint3 = GetUnitLoc(GetSpellAbilityUnit())
    local location TempPoint = GetUnitLoc(GetSpellTargetUnit())
    local location TempPoint2 = PolarProjectionBJ(TempPoint3, 120.00, GetUnitFacing(GetSpellAbilityUnit()))
    set udg_TempPoint = GetUnitLoc(GetEnumUnit())
    call CreateNUnitsAtLocFacingLocBJ( 1, 'n006', GetOwningPlayer(GetSpellAbilityUnit()), TempPoint2, udg_TempPoint )
    call IssueTargetOrderBJ( GetLastCreatedUnit(), "deathcoil", GetEnumUnit() )
    call RemoveLocation( udg_TempPoint )
endfunction

function Trig_DragonSpell_Func008C takes nothing returns boolean
    if ( not ( udg_TempInt == 3 ) ) then
        return false
    endif
    return true
endfunction

function Trig_DragonSpell_Func009C takes nothing returns boolean
    if ( not ( udg_TempInt == 4 ) ) then
        return false
    endif
    return true
endfunction

function Trig_DragonSpell_Func010C takes nothing returns boolean
    if ( not ( udg_TempInt == 5 ) ) then
        return false
    endif
    return true
endfunction

function Trig_DragonSpell_Actions takes nothing returns nothing
    local unit dragon = GetSpellAbilityUnit()
    local location TempPoint3 = GetUnitLoc(GetSpellAbilityUnit())
    local location TempPoint = GetUnitLoc(GetSpellTargetUnit())
    local location TempPoint2 = PolarProjectionBJ(TempPoint3, 120.00, GetUnitFacing(GetSpellAbilityUnit()))
    local location TempPoint4 = PolarProjectionBJ(TempPoint3, -120.00, GetUnitFacing(GetSpellAbilityUnit()))
    set udg_TempInt = GetRandomInt(1, 5)
    if ( Trig_DragonSpell_Func007C() ) then
        call CreateNUnitsAtLocFacingLocBJ( 1, 'n005', GetOwningPlayer(GetSpellAbilityUnit()), TempPoint2, TempPoint )
        call IssuePointOrderLocBJ( GetLastCreatedUnit(), "silence", TempPoint2 )
        set bj_wantDestroyGroup = true
        set udg_TempPoint = GetUnitLoc(GetSpellAbilityUnit())
        call ForGroupBJ( GetUnitsInRangeOfLocMatching(700.00, udg_TempPoint, Condition(function Trig_DragonSpell_Func007Func006001003)), function Trig_DragonSpell_Func007Func006A )
        call RemoveLocation( udg_TempPoint )
        return
    else
    endif
    if ( Trig_DragonSpell_Func008C() ) then
        set bj_wantDestroyGroup = true
        call ForGroupBJ( GetUnitsInRectMatching(gg_rct_BossAreaDragon, Condition(function Trig_DragonSpell_Func008Func003001002)), function Trig_DragonSpell_Func008Func003A )
        return
    else
    endif
    if ( Trig_DragonSpell_Func009C() ) then
        set udg_TempUnit = GetSpellAbilityUnit()
        call TriggerExecute( gg_trg_Rage_Up )
        call CreateNUnitsAtLocFacingLocBJ( 1, 'n007', GetOwningPlayer(GetSpellAbilityUnit()), TempPoint2, TempPoint3 )
        call IssueTargetOrderBJ( GetLastCreatedUnit(), "bloodlust", GetSpellAbilityUnit() )
        return
    else
    endif
    if ( Trig_DragonSpell_Func010C() ) then
            call PauseUnitBJ( true, dragon )
            call SetUnitAnimation( GetLastCreatedUnit(), "spell slam" )
            call TriggerSleepAction( 0.50 )
            call CreateNUnitsAtLoc( 1, 'n008', GetOwningPlayer(dragon), TempPoint4, bj_UNIT_FACING )
            call IssueImmediateOrderBJ( GetLastCreatedUnit(), "creepthunderclap" )
            call TriggerSleepAction( 0.75 )
            call PauseUnitBJ( false, dragon )
        return
    else
    endif
endfunction

//===========================================================================
function InitTrig_DragonSpell takes nothing returns nothing
    set gg_trg_DragonSpell = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_DragonSpell, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_DragonSpell, Condition( function Trig_DragonSpell_Conditions ) )
    call TriggerAddAction( gg_trg_DragonSpell, function Trig_DragonSpell_Actions )
endfunction

Someone please tell me all the stuff wrong with it if there is anything.
 

AceHart

Your Friendly Neighborhood Admin
Reaction score
1,495
For starters:

Code:
function Trig_DragonSpell_Func008C takes nothing returns boolean
    if ( not ( udg_TempInt == 3 ) ) then
        return false
    endif
    return true
endfunction

    if ( Trig_DragonSpell_Func008C() ) then

Should be:
Code:
If udg_TempInt == 3 then

Given the "Temp" part of that variable, wouldn't it be better to use a local?
 
C

CryptWizard

Guest
You should take advantages of the advantages JASS has over GUI:
- Understandable function names
- Logical conditions (No bullshit like "if (not(this)) return false else return true") (you already have this in your first function, replace it with "return (GetSpellAbilityId() == 'A000')" (no quotes))
- No need to use globals
 

SFilip

Gone but not forgotten
Reaction score
634
also take note that all handle locals leak if not set to null.
for example your main function should contain these lines at the end:
Code:
    set dragon = null
    set TempPoint3 = null
    set TempPoint = null
    set TempPoint2 = null
    set TempPoint4 = null
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top