• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!

[JASS] Knockback Script Errors

Status
Not open for further replies.
Level 4
Joined
Jun 8, 2007
Messages
89
So, i was following Silvenon's knockback script tutorial, and I couldn't get my code to work. If i try to check for errors in JassCraft, the program will just sit there telling me it is searching for errors. I have left it this way overnight, and it still has not come up with anything. When i try copying the code into my map header, saving yields an error on almost every line, mostly: "<line>: Expected end of line" or "<line>: Expected code statement".

Here is my code (Copied exactly from the tutorial).
JASS:
library Knockback
struct Knockback_Data
    unit u
    real d1 
    real d2 
    real sin 
    real cos 
    real r 
    string s = ""  
    effect e = null 
endstruct 
globals  
    timer Tim = CreateTimer()  
    Knockback_Data array Ar 
    integer Total = 0 
    item I = CreateItem('ciri', 0, 0)  
    boolexpr Filter 
endglobals 
function CheckPathabilityTrickGet takes nothing returns nothing  
    set bj_rescueChangeColorUnit = bj_rescueChangeColorUnit or GetEnumItem() != I
endfunction function CheckPathabilityTrick takes real x, real y returns boolean
    local integer i = 30 
    local real X 
    local real Y 
    local rect r 
    call SetItemPosition(I, x, y)  
    set X = GetItemX(I) - x 
    set Y = GetItemY(I) - y 
    if X * X + Y * Y <= 100 then  
        return true  
    endif  
    set r = Rect(x - i, y - i, x + i, y + i)  
    set bj_rescueChangeColorUnit = false  
    call EnumItemsInRect(r, null, function CheckPathabilityTrickGet)  
    call RemoveRect(r)  
    set r = null  
    return bj_rescueChangeColorUnit 
endfunction 
function CheckPathability takes real x, real y returns boolean  
    local boolean b = CheckPathabilityTrick(x, y)  
    call SetItemVisible(I, false) 
    return b 
endfunction 
function Knockback_TreeFilter takes nothing returns boolean  
    local integer d = GetDestructableTypeId(GetFilterDestructable())  
    return d == 'ATtr' or d == 'BTtw' or d == 'KTtw' or d == 'YTft' or d == 'JTct' or d == 'YTst' or d == 'YTct' or d == 'YTwt' or d == 'JTwt' or d == 'JTwt' or d == 'FTtw' or d == 'CTtr' or d == 'ITtw' or d == 'NTtw' or d == 'OTtw' or d == 'ZTtw' or d == 'WTst' or d == 'LTlt' or d == 'GTsh' or d == 'Xtlt' or d == 'WTtw' or d == 'Attc' or d == 'BTtc' or d == 'CTtc' or d == 'ITtc' or d == 'NTtc' or d == 'ZTtc'
endfunction 
constant function Interval takes nothing returns real  
    return 0.04 
endfunction 
function Knockback_Execute takes nothing returns nothing  
    local Knockback_Data kd 
    local integer i = 0 
    local real x 
    local real y 
    local rect r 
    local boolexpr b 
    loop  
        exitwhen i >= Total 
        set kd = Ar[i]  
        if kd.s != null and kd.s != null then  
            set x = GetUnitX(kd.u)  
            set y = GetUnitY(kd.u)  
            call DestroyEffect(AddSpecialEffect(kd.s, x, y)  
            set x = x + kd.d1 * kd.cos 
            set y = y + kd.d1 * kd.sin 
        else  
            set x = GetUnitX(kd.u) + kd.d1 * kd.cos 
            set y = GetUnitY(kd.u) + kd.d1 * kd.sin 
        endif  
        if kd.r != 0 then  
            set r = Rect(x - kd.r, y - kd.r, x + kd.r, y + kd.r)  
            set b = Filter(function Knockback_TreeFilter)  
            call EnumDestructablesInRect(r, b, function Knockback_KillTree)  
            call RemoveRect(r)  
            call DestroyBoolExpr(b) 
        endif  
        if CheckPathability(x, y) then  
            call SetUnitX(kd.u, x)  
            call SetUnitY(kd.u, y)  
        endif  
        set kd.d1 = kd.d1 - kd.d2 
        if kd.d1 <= 0 or not CheckPathability(x, y) then  
            if kd.e != null then  
                call DestroyEffect(kd.e)  
            endif  
            call PauseUnit(kd.u, false)  
            set Ar[i] = Ar[Total - 1]  
            set Total = Total - 1 
            call kd.destroy()  
        endif 
        set i = i + 1 
    endloop  
    if Total == 0 then  
        call PauseTimer(Tim) 
    endif 
endfunction 
function Knockback takes unit u, real d, real a, real w, real r, integer t, string s, string p returns Knockback_Data 
    local Knockback_Data kd = Knockback_Data.create()  
    local integer q = R2I(w / Interval())  
    set kd.u = u 
    set kd.a = a 
    set kd.d1 = 2 * d / (q + 1) 
    set kd.d2 = kd.d1 / q 
    set kd.sin = Sin(a)  
    set kd.cos = Cos(a)  
    set kd.r = r 
    if s != "" and s != null then  
        if t == 2 then  
            if p != "" and p != null then  
                set kd.e = AddSpecialEffectTarget(s, u, p)  
            else  
                set kd.e = AddSpecialEffectTarget(s, u, "chest")  
            endif  
        elseif t == 1 then  
            set kd.s = s 
        endif  
    endif  
    call SetUnitPosition(u, GetUnitX(u), GetUnitY(u))  
    call PauseUnit(u, true)  
    if Total == 0 then  
        call TimerStart(Tim, Interval(), true, function Knockback_Execute)  
    endif  
    set Total = Total + 1 
    set Ar[Total - 1] = kd 
    return kd 
endfunction 
endlibrary
 
Level 4
Joined
Jun 8, 2007
Messages
89
Oh wow. That makes me feel really smart... Hehe... To think i was running the basic World Editor too...
Thanks though. =)
 
Status
Not open for further replies.
Top