• 💀 Happy Halloween! 💀 It's time to vote for the best terrain! Check out the entries to Hive's HD Terrain Contest #2 - Vampire Folklore.❗️Poll closes on November 14, 2023. 🔗Click here to cast your vote!
  • 🏆 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!
  • 🏆 HD Level Design Contest #1 is OPEN! Contestants must create a maze with at least one entry point, and at least one exit point. The map should be made in HD mode, and should not be openable in SD. Only custom models from Hive's HD model and texture sections are allowed. The only exceptions are DNC models and omnilights. This is mainly a visual and design oriented contest, not technical. The UI and video walkthrough rules are there to give everyone an equal shot at victory by standardizing how viewers see the terrain. 🔗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