Problem with: MultiboardSetItemWidthBJ

darkbeer

Beer is Good!
Reaction score
84
Hey,
as i already mentioned i got a problem with the function MultiboardSetItemWidthBJ, i'm creating a different multiboard for every player, so i loop through all to set them up. However when integer i reaches 7 i get an error message: "Hit op limit in function MultiboardSetItemWidthBJ( One really large number, 1, 15, 6)"

this is my code:

JASS:
private function Actions takes nothing returns nothing
    local integer i = 0
    local UnitData dat
    
    loop
        exitwhen i >= 12
        
        set PlayerBoard<i> = CreateMultiboard()
        call MultiboardSetColumnCount(PlayerBoard<i>, 5)
        call MultiboardSetRowCount(PlayerBoard<i>, 15)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>,0, 0, 8)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>,5, 0, 0)
        call MultiboardSetItemsStyle(PlayerBoard<i>, true, false)
        call MultiboardSetTitleTextColor(PlayerBoard<i>, 255, 255, 255, 255)
        call MultiboardSetTitleText(PlayerBoard<i>, Color(&quot;Character Status:&quot;, i)) 
        
        //Name
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 1, &quot;|cffffcc00&quot; + &quot;Name: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 1, 3)
        
        //Kills
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 3, 1, &quot;|cffffcc00&quot; + &quot;Kills: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 3, 1, 3)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 3, 2, &quot;|cffffcc00&quot; + &quot;Damage dealt: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 3, 2, 7)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 2, &quot;|cffffcc00&quot; + &quot;Score: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 2, 3)      
        
        //Equipment
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 12, &quot;|cffffcc00&quot; + &quot;Weapon: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 12, 6)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 13, &quot;|cffffcc00&quot; + &quot;Health: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 13, 6)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 14, &quot;|cffffcc00&quot; + &quot;Damage Bonus: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 14, 6)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 15, &quot;|cffffcc00&quot; + &quot;Effect: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 15, 6)
        
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 3, 12, &quot;|cffffcc00&quot; + &quot;Armor: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 3, 12, 6)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 3, 13, &quot;|cffffcc00&quot; + &quot;Health: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 3, 13, 6)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 3, 14, &quot;|cffffcc00&quot; + &quot;Armor Bonus: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 3, 14, 6)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 3, 15, &quot;|cffffcc00&quot; + &quot;Effect: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 3, 15, 6)
        
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 4, &quot;|cffffcc00&quot; + &quot;Health: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 4, 5)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 5, &quot;|cffffcc00&quot; + &quot;Mana: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 5, 5)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 6, &quot;|cffffcc00&quot; + &quot;Experience: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 6, 7)
        
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 1, 8, &quot;|cffffcc00&quot; + &quot;Gold: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 1, 8, 4)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 3, 8, &quot;|cffffcc00&quot; + &quot;Items: &quot; + &quot;|r&quot;)
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 2, 8, 6)
        
        set dat = UnitData.Get(Hero<i>)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 2, 1, Color(GetHeroProperName(dat.whichunit), i))
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 2, 1, 11)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 2, 2, Color(R2S(dat.score), i))
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 2, 2, 11)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 4, 1, Color(I2S(dat.kills), i))
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 4, 1, 10)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 4, 2, SubString(Color(R2S(dat.damagedealt), i), 0, StringLength(Color(R2S(dat.damagedealt), i)) - 4))
        //call MultiboardSetItemWidthBJ(PlayerBoard<i>, 4, 2, 5)
        call MultiboardSetItemValueBJ(PlayerBoard<i>, 2, 8, I2S(GetPlayerState(GetOwningPlayer(dat.whichunit),PLAYER_STATE_RESOURCE_GOLD)))
        call MultiboardSetItemWidthBJ(PlayerBoard<i>, 2, 8, 8)
        
        call BJDebugMsg(&quot;Index: &quot; + I2S(i))
        
        if GetLocalPlayer() == Player(i) then
            call MultiboardDisplay(PlayerBoard<i>, true)
        endif
        
        set i = i + 1
    endloop
    
endfunction</i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i>


I wonder why it only appears after integer i reaches 7, since the function MultiboardSetItemWidthBJ itself should have nothing to do with the loop.

EDIT: Strange, if i remove the problem causing line, another starts to give me nearly the same error.
 

phyrex1an

Staff Member and irregular helper
Reaction score
447
You're hitting the op limit, i.e your function does to much so the wc3 engine terminates it after 10k+ instructions.

If you look at MultiboardSetItemWidthBJ you'll see that is does a lot of unnecessary looping. Either avoid MultiboardSetItemWidthBJ and use MultiboardGetItem, MultiboardSetItemWidth and MultiboardReleaseItem directly or make use of the "special" feature of MultiboardSetItemWidthBJ: 0 means "all cells in this column/row". I haven't figured out your multiboard layout so it might not be possible to use the 0 feature.

You can also a TriggerSleepAction in the loop to reset the "instructions counter" in wc3.
 

darkbeer

Beer is Good!
Reaction score
84
allright, ill try the wait thx :)

omg, should've noticed that myself -.- very much loops indeed^^

worked thx (cant give rep -.-)
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top