[JASS] Function inside JASS trigger couldn't be found

Status
Not open for further replies.
Level 12
Joined
Sep 24, 2007
Messages
283
Function inside JASS trigger couldn't be found.
Well i am working on my map over about 1 month. On the third day i added Multiboard system. I worked perfectly. And today isave the map and i have that error: "Can't find the name of the function". Well i didnt undestand that but i checked the JASS trigger with that function. It was there and is the same as old version's of my map, trigger.

so here is my native to make the icon in multiboard to be setted depends on your char.

JASS:
call mb_SetHeroIcon(0, GetUnitTypeId(udg_hero[1]))

The whole code of Multiboard trigger. It worked but now something is wrong. I am using 1.20 patch.


JASS:
constant function mb_ColumnWidth takes integer id returns real
    if id == 1 then
        return 0.13
    elseif id == 2 then
        return 0.05
    elseif id == 3 then
        return 0.06
    endif
    return 0.045
endfunction

constant function mb_Team1 takes nothing returns integer
    return 10 
endfunction
constant function mb_Team2 takes nothing returns integer
    return 11 
endfunction

function mb_PlayerFilter takes integer i returns boolean
    return GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController(Player(i)) != MAP_CONTROL_COMPUTER
endfunction

function mb_String takes integer id returns string
    if id == 1 then
        return "|cffFF8040Map Name"
    elseif id == 2 then
        return "Players"
    elseif id == 3 then
        return "Dead?"
    elseif id == 4 then
        return "Kills"
    elseif id == 5 then
        return "Deathes"
    elseif id == 6 then
        return "Time Left"
    elseif id == 7 then
        return "Towers Lost"
    endif
    return ""
endfunction

function mb_GetColor takes string s, integer id returns string
    if id == 1 then
        return "|cFFD2D200" + s + "|r"
    elseif id == 2 then
        return "|cFFFF0000" + s + "|r"
    elseif id == 3 then
        return "|cFF0039DD" + s + "|r"
    endif
    return s
endfunction

function mb_GetHeroIcon takes integer id returns string
    if id == 'H005' then
        return "ReplaceableTextures\\CommandButtons\\BTNicon1.blp"
    elseif id == 'H014' then
        return "ReplaceableTextures\\CommandButtons\\BTNicon2.blp"
    endif
    return "ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp"
endfunction

//===========================================================================
function mb_SetItem takes integer row, integer col, string text, string icon returns nothing
    local multiboarditem mbi = MultiboardGetItem(udg_mb, row - 1, col - 1)
    call MultiboardSetItemValue(mbi, text)
    call MultiboardSetItemWidth(mbi, mb_ColumnWidth(col))
    if icon == "" then
        call MultiboardSetItemStyle(mbi, true, false)
    else
        call MultiboardSetItemIcon(mbi, icon)
        call MultiboardSetItemStyle(mbi, true, true)
    endif
    call MultiboardReleaseItem(mbi)
    set mbi = null
endfunction

function mb_SetHeroIcon takes integer p, integer id returns nothing
    call mb_SetItem(udg_mb_pos, 1, GetPlayerNameColored(p), mb_GetHeroIcon(id))
endfunction

function mb_SetPlayerKills takes integer id returns nothing
    if id > 11 or id < 0 or udg_mb_pos[id] == 0 then
        return
    endif
    call mb_SetItem(udg_mb_pos[id], 3, mb_GetColor("    " + I2S(udg_kills[id]), 2), "")
endfunction

function mb_SetPlayerDeaths takes integer id returns nothing
    if id > 11 or id < 0 or udg_mb_pos[id] == 0 then
        return
    endif
    call mb_SetItem(udg_mb_pos[id], 4, mb_GetColor("    " + I2S(udg_deaths[id]), 3), "")
endfunction

function mb_GetTime takes nothing returns string
    return I2S(udg_mb_min) + ":" + iif(udg_mb_sec < 10, "0" + I2S(udg_mb_sec), I2S(udg_mb_sec))
endfunction

function mb_SetTime takes nothing returns nothing
    set udg_mb_sec = udg_mb_sec + 1
    if udg_mb_sec == 60 then
        set udg_mb_sec = 0
        set udg_mb_min = udg_mb_min + 1
    endif
    call mb_SetItem(udg_mb_pos[100], 3, mb_GetTime(), "")
endfunction

//===========================================================================
function mb_InitMultiBoard takes nothing returns nothing
    local integer i = 0
    local integer i2 = 1
    local integer rows = 6
    call TriggerSleepAction(0.)
    set udg_mb = CreateMultiboard()
    call MultiboardDisplay(udg_mb, true)
    call MultiboardSetTitleText(udg_mb, mb_String(1))
    call MultiboardSetRowCount(udg_mb, 16)
    call MultiboardSetColumnCount(udg_mb, 4)
    call mb_SetItem(1, 1, mb_String(2), "")
    call mb_SetItem(1, 2, mb_GetColor(mb_String(3), 1), "")
    call mb_SetItem(1, 3, mb_GetColor(mb_String(4), 2), "")
    call mb_SetItem(1, 4, mb_GetColor(mb_String(5), 3), "")
    set i2 = i2 + 1
    call mb_SetItem(i2, 1, GetPlayerNameColored(mb_Team1()), "")
    set udg_mb_pos[mb_Team1()] = i2
    call mb_SetItem(i2, 2, "", "")
    call mb_SetItem(i2, 3, mb_GetColor("    0", 2), "")
    call mb_SetItem(i2, 4, mb_GetColor("    0", 3), "")
    loop
        if mb_PlayerFilter(i) and IsPlayerAlly(Player(i), Player(mb_Team1())) and Player(i) != Player(mb_Team1()) and Player(i) != Player(mb_Team2()) then
            set i2 = i2 + 1
            call mb_SetItem(i2, 1, GetPlayerNameColored(i), mb_GetHeroIcon(0))
            call mb_SetItem(i2, 2, "", "")
            call mb_SetItem(i2, 3, mb_GetColor("    0", 2), "")
            call mb_SetItem(i2, 4, mb_GetColor("    0", 3), "")
            set udg_mb_pos[i] = i2
            set rows = rows + 1
        endif
        set i = i + 1
        exitwhen i == 12
    endloop
    set i = 0
    set i2 = i2 + 1
    call mb_SetItem(i2, 1, GetPlayerNameColored(mb_Team2()), "")
    set udg_mb_pos[mb_Team2()] = i2
    call mb_SetItem(i2, 2, "", "")
    call mb_SetItem(i2, 3, mb_GetColor("    0", 2), "")
    call mb_SetItem(i2, 4, mb_GetColor("    0", 3), "")
    loop
        if mb_PlayerFilter(i) and IsPlayerAlly(Player(i), Player(mb_Team2())) and Player(i) != Player(mb_Team2()) and Player(i) != Player(mb_Team1()) then
            set i2 = i2 + 1
            call mb_SetItem(i2, 1, GetPlayerNameColored(i), mb_GetHeroIcon(0))
            call mb_SetItem(i2, 2, "", "")
            call mb_SetItem(i2, 3, mb_GetColor("    0", 2), "")
            call mb_SetItem(i2, 4, mb_GetColor("    0", 3), "")
            set udg_mb_pos[i] = i2
            set rows = rows + 1
        endif
        set i = i + 1
        exitwhen i == 12
    endloop
    set i2 = i2 + 1
    call mb_SetItem(i2, 1, mb_String(6), "")
    call mb_SetItem(i2, 2, "", "")
    call mb_SetItem(i2, 3, "0:00", "")
    call mb_SetItem(i2, 4, "", "")
    set udg_mb_pos[100] = i2
    set i2 = i2 + 1
    call mb_SetItem(i2, 1, SetTextWithPlayerColor(mb_Team1(), mb_String(7)), "")
    call mb_SetItem(i2, 2, "", "")
    call mb_SetItem(i2, 3, SetTextWithPlayerColor(mb_Team1(), "    0"), "")
    call mb_SetItem(i2, 4, "", "")
    set udg_mb_pos[101] = i2
    set i2 = i2 + 1
    call mb_SetItem(i2, 1, SetTextWithPlayerColor(mb_Team2(), mb_String(7)), "")
    call mb_SetItem(i2, 2, "", "")
    call mb_SetItem(i2, 3, SetTextWithPlayerColor(mb_Team2(), "    0"), "")
    call mb_SetItem(i2, 4, "", "")
    set udg_mb_pos[102] = i2
    call MultiboardSetRowCount(udg_mb, rows)
endfunction

//===========================================================================
function mb_CheckTimerId takes timer tm returns integer
    if tm == udg_mb_timer[1] then
        return 1
    elseif tm == udg_mb_timer[2] then
        return 2
    elseif tm == udg_mb_timer[3] then
        return 3
    elseif tm == udg_mb_timer[4] then
        return 4
    elseif tm == udg_mb_timer[5] then
        return 5
    elseif tm == udg_mb_timer[7] then
        return 7
    elseif tm == udg_mb_timer[8] then
        return 8
    elseif tm == udg_mb_timer[9] then
        return 9
    elseif tm == udg_mb_timer[10] then
        return 10
    elseif tm == udg_mb_timer[11] then
        return 11
    endif
    return 0
endfunction

function mb_Revive_Child takes nothing returns nothing
    local timer tm = GetExpiredTimer()
    local integer id = mb_CheckTimerId(tm)
    set udg_mb_timer_time[id] = udg_mb_timer_time[id] - 1
    call mb_SetItem(udg_mb_pos[id], 2, mb_GetColor("     " + I2S(udg_mb_timer_time[id]), 1), "")
    if udg_mb_timer_time[id] == 0 then
        call mb_SetItem(udg_mb_pos[id], 2, "", "")
        set udg_mb_pos[99] = id
        call TriggerExecute(gg_trg_Revive_Hero)
        call PauseTimer(tm)
    endif
    set tm = null
endfunction

function mb_StartRevive takes integer p, integer time returns nothing
    if udg_mb_pos == 0 then
        return
    endif
    if p == mb_Team1() or p == mb_Team2() or p > 11 then
        return
    endif
    set udg_mb_timer_time = time + 1
    call TimerStart(udg_mb_timer, 1.0, true, function mb_Revive_Child)
endfunction

//===========================================================================
function InitTrig_MultiBoard takes nothing returns nothing
    call ExecuteFunc("mb_InitMultiBoard")
    set udg_mb_timer[1] = CreateTimer()
    set udg_mb_timer[2] = CreateTimer()
    set udg_mb_timer[3] = CreateTimer()
    set udg_mb_timer[4] = CreateTimer()
    set udg_mb_timer[5] = CreateTimer()
    set udg_mb_timer[7] = CreateTimer()
    set udg_mb_timer[8] = CreateTimer()
    set udg_mb_timer[9] = CreateTimer()
    set udg_mb_timer[10] = CreateTimer()
    set udg_mb_timer[11] = CreateTimer()

    set udg_mb_timer[100] = CreateTimer()
    call TimerStart(udg_mb_timer[100], 1.0, true, function mb_SetTime)
endfunction

Here is the exactly function i have problem with:

JASS:
function mb_SetHeroIcon takes integer p, integer id returns nothing
    call mb_SetItem(udg_mb_pos, 1, GetPlayerNameColored(p), mb_GetHeroIcon(id))
endfunction

Also here is my MAP SCRIPT requered to for this multiboard system:

JASS:
function SetTextWithPlayerColor takes integer id, string s returns string
    if id <= 11 then
        return "|c00" + SubString("FF03030042FF1CE6B9540081FFFC01FE8A0E20C000E55BB09596977EBFF11062464E2A04", id * 6, (id + 1) * 6) + s + "|r"
    else
        return "00282828" + s + "|r"
    endif
endfunction

function GetPlayerNameColored takes integer id returns string
    return SetTextWithPlayerColor(id, GetPlayerName(Player(id)))
endfunction

function iif takes boolean b, string s1, string s2 returns string
    if b then
        return s1
    endif
    return s2
endfunction

function dm takes string s returns nothing
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, s)
endfunction

- Nahm , thx
 
Level 3
Joined
Sep 11, 2004
Messages
63
Maybe you used function before the actual function body?

For example:
Code:
call mb_SetHeroIcon(0, GetUnitTypeId(udg_hero[1]))

function mb_SetHeroIcon takes integer p, integer id returns nothing
    call mb_SetItem(udg_mb_pos, 1, GetPlayerNameColored(p), mb_GetHeroIcon(id))
endfunction

Will produce the error you described.
 
Status
Not open for further replies.
Top