Trigger Help Please (Syntax Error ATM)

MasterRofl

New Member
Reaction score
8
Yeah.. hey. I just started learning JASS today, and I've been trying to make this spell work for quite a while. Right now, I have a syntax error with these lines:

location TargetLocation = GetUnitLoc( TargetUnit )
location KnifeLocation = GetUnitLoc( Knife )


P.S. How can I optimize this? >_>

JASS:
scope ThrowKnife

function Actions takes nothing returns nothing
    globals
        unit TargetUnit = GetSpellTargetUnit()
        unit Caster = GetTriggerUnit()
        location CasterLocation = GetUnitLoc( GetTriggerUnit() )
        integer SlowLevel = GetUnitAbilityLevelSwapped( 'A01U', Caster )
    endglobals
    CreateUnitAtLoc( GetOwningPlayer( Caster ), 'n00N', CasterLocation, 0 )
    globals
        unit Knife = GetLastCreatedUnit()
    endglobals
    call EnableTrigger( KnifeMovement )
endfunction

function Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A01U'
endfunction

public function InitTrig takes nothing returns nothing
    local trigger ThrowKnife = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( ThrowKnife, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( ThrowKnife, Condition( function Conditions ) )
    call TriggerAddAction( ThrowKnife, function Actions )
endfunction

endscope


JASS:
scope KnifeMovement

private function Actions takes nothing returns nothing
    location TargetLocation = GetUnitLoc( TargetUnit )
    location KnifeLocation = GetUnitLoc( Knife )
    SetUnitPositionLocFacingLocBJ( Knife, PolarProjectionBJ( KnifeLocation, 36, AngleBetweenPoints( KnifeLocation, TargetLocation ) ), TargetLocation )
    if ( DistanceBetweenPoints( KnifeLocation, TargetLocation ) < 36 ) then
        call SetUnitAbilityLevel( Knife, 'A026', SlowLevel )
        call IssueTargetOrder( Knife, "slow", TargetUnit )
        call KillUnit( Knife )
        call UnitDamageTargetBJ( Caster, TargetUnit, 300, ATTACK_TYPE_HERO, DAMAGE_TYPE_FIRE )
        call DisableTrigger( KnifeMovement )
    endif
endfunction

//===========================================================================
function InitTrig takes nothing returns nothing
    globals
        trigger KnifeMovement = CreateTrigger()
    endglobals
    call DisableTrigger( KnifeMovement )
    call TriggerRegisterTimerEventPeriodic( KnifeMovement, 0.03 ) 
    call TriggerAddAction( KnifeMovement, function Actions )
endfunction

endscope
 

Emu.Man00

New Member
Reaction score
41
Or the jass forums :S
i just started learning jass today too, are the syntax errors supposed to be local varriables?
if so the correct usage would be
JASS:
local location TargetLocation = GetUnitLoc( TargetUnit)
 

trb92

Throwing science at the wall to see what sticks
Reaction score
142
JASS:
function Actions takes nothing returns nothing
    globals
        unit TargetUnit = GetSpellTargetUnit()
        unit Caster = GetTriggerUnit()
        location CasterLocation = GetUnitLoc( GetTriggerUnit() )
        integer SlowLevel = GetUnitAbilityLevelSwapped( 'A01U', Caster )
    endglobals
    CreateUnitAtLoc( GetOwningPlayer( Caster ), 'n00N', CasterLocation, 0 )
    globals
        unit Knife = GetLastCreatedUnit()
    endglobals
    call EnableTrigger( KnifeMovement )
endfunction


You cannot put a globals block within a function. It should look more like this
JASS:

    globals
    unit TargetUnit
    unit Caster
    location CasterLocation
    integer SlowLevel
    unit Knife
endglobals
function Actions takes nothing returns nothing
    set TargetUnit =  = GetSpellTargetUnit()
    set Caster =  = GetTriggerUnit()
    set CasterLocation = GetUnitLoc( GetTriggerUnit() )
    set SlowLevel = GetUnitAbilityLevelSwapped( 'A01U', Caster )
    call CreateUnitAtLoc( GetOwningPlayer( Caster ), 'n00N', CasterLocation, 0 )
    set Knife = GetLastCreatedUnit()
    call EnableTrigger( KnifeMovement )
endfunction

And then this still won't work, because CreateUnitAtLoc does not set the last created unit. It should really be
JASS:
set knife = CreateUnitAtLoc( GetOwningPlayer( Caster ), 'n00N', CasterLocation, 0 )


>P.S. How can I optimize this? >_>
Alot of ways. Getting rid of BJ function would be a start. You use quite a few of them in the KnifeMovement trigger.
 
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