Syntax problem

Nerfpl

New Member
Reaction score
53
on way of learning JASS with try&fail method i have another problem. this time weird because i thought its ok.

i have syntax error here
JASS:
function FrostWaveMissileHit takes nothing returns nothing
    if IsUnitEnemy(GetTriggerUnit(), GetOwningPlayer(FrostWaveCaster)) == true then
    call UnitDamageTargetBJ( FrostWaveCaster, GetTriggerUnit(), ( 0.50 * I2R(FrostWaveInt) ) * I2R(GetHeroStatBJ(bj_HEROSTAT_INT, FrostWaveCaster, true)), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    endif
endfunction

function Trig_Frost_Wave_Actions takes nothing returns nothing
    local unit FrostWaveCaster = GetSpellAbilityUnit()
    local integer FrostWaveInt = GetUnitAbilityLevelSwapped('A00U', GetSpellAbilityUnit())
    local location FrostWavePos = GetUnitLoc(FrostWaveCaster)
    local location FrostWavePos2 = GetSpellTargetLoc()
    local integer x = 1
    local real value = 0
    local integer help = 1
    if ModuloInteger(FrostWaveInt, 2)==1 then
    call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, (AngleBetweenPoints(FrostWavePos, FrostWavePos2), 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
    loop exitwhen x > FrostWaveInt
        set value = value + help * 9 * x
        set help = 0 - help
        call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, (AngleBetweenPoints(FrostWavePos, FrostWavePos2) + value, 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
        set FrostWaveReal = ( FrostWaveReal + ( 90.00 / I2R(FrostWaveInt) ) )
        set x = x + 1
    endloop
    else
    loop exitwhen x > FrostWaveInt
        set value = value + help * 11.25 * x
        set help = 0 - help
        call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, (AngleBetweenPoints(FrostWavePos, FrostWavePos2) + value, 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
        set FrostWaveReal = ( FrostWaveReal + ( 90.00 / I2R(FrostWaveInt) ) )
        set x = x + 1
    endloop
    endif
    call RemoveLocation(FrostWavePos)
    call RemoveLocation(FrostWavePos2)
    set FrostWavePos = null
    set FrostWavePos2 = null
    set FrostWaveCaster = null
endfunction


also i want to ask if my func "FrostWaveMissileHit" can be under actions trigger? or it dosent matter? (because i use it in actions but event of hit which calls it happen after actions)

and last question is if i need to really use I2R here?
set FrostWaveReal = ( FrostWaveReal + ( 90.00 / I2R(FrostWaveInt) ) )
 

Kenny

Back for now.
Reaction score
202
also i want to ask if my func "FrostWaveMissileHit" can be under actions trigger? or it dosent matter? (because i use it in actions but event of hit which calls it happen after actions)

It still has to be above.

and last question is if i need to really use I2R here?
set FrostWaveReal = ( FrostWaveReal + ( 90.00 / I2R(FrostWaveInt) ) )

No not really, integer and real comparisons are okay for most circumstances. In your case it is fine.

JASS:
function FrostWaveMissileHit takes nothing returns nothing
    if IsUnitEnemy(GetTriggerUnit(), GetOwningPlayer(FrostWaveCaster)) == true then
    call UnitDamageTargetBJ( FrostWaveCaster, GetTriggerUnit(), ( 0.50 * I2R(FrostWaveInt) ) * I2R(GetHeroStatBJ(bj_HEROSTAT_INT, FrostWaveCaster, true)), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    endif
endfunction


FrostWaveCaster does not exist in that function, you will probably need to trasnfer it using a global unit. Also that UnitDamageTargetBJ() can become UnitDamageTarget() and that GetheroStatBJ() can become GetHeroInt(Hero,true).
 

Nerfpl

New Member
Reaction score
53
ok thanks for tips, but i still have syntax error :/ i think something with if, because syntax error always point 1 line after

about caster:
so can i simply use wait now about 5 seconds, and then null caster? or local keeps info per function?
(i baicly converted whole spell from global to local just to make it MUI -_-)
 

Kenny

Back for now.
Reaction score
202
so can i simply use wait now about 5 seconds, and then null caster? or local keeps info per function?

Local variables can only be accessed in the function they were created, therefore FrostWaveCaster does not exist at all, and never will, unless you use a global unit.

Do you have NewGen?
 

Builder Bob

Live free or don't
Reaction score
249
so what with the if? or wheres syntax error? everything seems fine for me

all your CollisionMissile_CreateLoc have a ( which doesn't belong before AngleBetweenPoints.
exitwhen must be placed on a line below loop

Fixed:
JASS:
function FrostWaveMissileHit takes nothing returns nothing
    if IsUnitEnemy(GetTriggerUnit(), GetOwningPlayer(FrostWaveCaster)) == true then
    call UnitDamageTargetBJ( FrostWaveCaster, GetTriggerUnit(), ( 0.50 * I2R(FrostWaveInt) ) * I2R(GetHeroStatBJ(bj_HEROSTAT_INT, FrostWaveCaster, true)), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    endif
endfunction

function Trig_Frost_Wave_Actions takes nothing returns nothing
    local unit FrostWaveCaster = GetSpellAbilityUnit()
    local integer FrostWaveInt = GetUnitAbilityLevelSwapped('A00U', GetSpellAbilityUnit())
    local location FrostWavePos = GetUnitLoc(FrostWaveCaster)
    local location FrostWavePos2 = GetSpellTargetLoc()
    local integer x = 1
    local real value = 0
    local integer help = 1
    if ModuloInteger(FrostWaveInt, 2)==1 then
    call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, AngleBetweenPoints(FrostWavePos, FrostWavePos2), 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
    loop
	    exitwhen x > FrostWaveInt
        set value = value + help * 9 * x
        set help = 0 - help
        call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, AngleBetweenPoints(FrostWavePos, FrostWavePos2) + value, 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
        set FrostWaveReal = ( FrostWaveReal + ( 90.00 / I2R(FrostWaveInt) ) )
        set x = x + 1
    endloop
    else
    loop
	    exitwhen x > FrostWaveInt
        set value = value + help * 11.25 * x
        set help = 0 - help
        call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, AngleBetweenPoints(FrostWavePos, FrostWavePos2) + value, 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
        set FrostWaveReal = ( FrostWaveReal + ( 90.00 / I2R(FrostWaveInt) ) )
        set x = x + 1
    endloop
    endif
    call RemoveLocation(FrostWavePos)
    call RemoveLocation(FrostWavePos2)
    set FrostWavePos = null
    set FrostWavePos2 = null
    set FrostWaveCaster = null
endfunction
 

Nerfpl

New Member
Reaction score
53
exactly this code have somewhere syntax error. after i delete it, Jhelper dont report errors
JASS:
if ModuloInteger(FrostWaveInt, 2) == 1 
    then
        call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, AngleBetweenPoints(FrostWavePos, FrostWavePos2), 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
        loop exitwhen x > FrostWaveInt
            set value = value + help * 9 * x
            set help = 0 - help
            call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, AngleBetweenPoints(FrostWavePos, FrostWavePos2) + value, 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
            set FrostWaveReal = ( FrostWaveReal + ( 90.00 / I2R(FrostWaveInt) ) )
            set x = x + 1
        endloop
    else
        loop exitwhen x > FrostWaveInt
            set value = value + help * 11.25 * x
            set help = 0 - help
            call CollisionMissile_CreateLoc("war3mapImported\\FrozenOrb.MDX", FrostWavePos, AngleBetweenPoints(FrostWavePos, FrostWavePos2) + value, 800, 0, ( 200 + (FrostWaveInt * 80)), 30, false, 50, function FrostWaveMissileHit)
            set FrostWaveReal = ( FrostWaveReal + ( 90.00 / I2R(FrostWaveInt) ) )
            set x = x + 1
        endloop
    endif

btw. is there way to store global variable of type code?

edit: ok i removed brackets but still have error syntax... even if i make "IF 1 == 1"
 

Builder Bob

Live free or don't
Reaction score
249
yes i did now it works. what you did? i thought like it dosent matter if exitwhen is at begining or even at end :/

exitwhen can be anywhere within the loop, that is correct. Just not on the same line as loop or endloop.
 
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