• 🏆 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!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

myBoard v1.1

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
  • Like
Reactions: Cokemonkey11
JASS:
//================================================================================
    struct myBoard
//
// :: F E A T U R E S :: 
//
// - Gives full control of the values inside the multiboard.
// - Allows to change the values for only one concrete player.
// - Leakless, safe and easy control of any parameter.
// - Counts the letter amount that can fit in this item[col;row].
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// == H O W    T O    U S E ==
//
// I will give the method explanations below.
// 
    static method create takes integer cols, integer rows, string title returns thistype
// This method creates the multiboard. Usage:
// myBoard.create(columnCount,rowCount,"This is my title")
// It will create the multiboard with a title 'This is my title'.
//
    method setColCount takes integer cols returns nothing
    method setRowCount takes integer rows returns nothing
// Those methods allow you to adjust column and row amounts.
// Usage example: mainBoard.setColCount(8)
//                mainBoard.setRowCount(4)
// where mainBoard is the variable of type myBoard.
//
    method display  takes boolean doDisplay  returns nothing
    method minimize takes boolean doMinimize returns nothing
// Toggles display and minimization of the multiboard.
// Usage examples: mainBoard.display(true)
//                 mainBoard.minimize(true)
// where mainBoard is the variable of type myBoard.
    method displayIcon  takes integer col, integer row, boolean doDisplay returns nothing
    method displayValue takes integer col, integer row, boolean doDisplay returns nothing
    method setIcon      takes integer col, integer row, string  newIcon   returns nothing
    method setValue     takes integer col, integer row, string  newValue  returns nothing
    method setWidth     takes integer col, integer row, real    width     returns nothing
// Those methods are able to change the settings of the given multiboard.
// displayIcon    : This determines if the icon in the selected item[column;row] will be displayed.
//                  true is 'enable', false is 'disable' icon displaying.
// displayValue   : This determines if the text value in the selected item[column;row] will be displayed.
//                  true is 'enable', false is 'disable' value displaying.
// setIcon        : This sets the new icon path for the selected item[column;row].
// setValue       : This sets the new text value for the selected item[column;row].
// setWidth       : This sets the new width for the selected item[column;row].
//                  Please note that the width is the percent from the current screen width!
//                  For example, if you need 14% width then set it as 0.14.
    method displayLocalIcon  takes player whichPlayer, integer col    , integer row, boolean doDisplay returns nothing
    method displayLocalValue takes player whichPlayer, integer col    , integer row, boolean doDisplay returns nothing
    method setLocalIcon      takes player whichPlayer, integer col    , integer row, string  newIcon   returns nothing
    method setLocalValue     takes player whichPlayer, integer col    , integer row, string  newValue  returns nothing
    method setLocalWidth     takes player whichPlayer, integer col    , integer row, real    width     returns nothing
    method setLocalTitleText takes player whichPlayer, string newTitle                                 returns nothing
// Same as above, but they set these parameters only for one concrete player.
// This also works with title text.
// GET API works correct with these functions and always will return exact value.
    method getCharCount takes integer col, integer row returns integer
    method getWidth     takes integer col, integer row returns real
    method getIconPath  takes integer col, integer row returns string
    method getValue     takes integer col, integer row returns string
    method getItem      takes integer col, integer row returns multiboarditem
    method isValueShown takes integer col, integer row returns boolean
    method isIconShown  takes integer col, integer row returns boolean
// This is the GET API of myBoard. It allows to get any value you want easily.
// getCharCount returns the maximal amount of characters that can be placed in this multiboard's item[column;row].
//
// Examples of usage: mainBoard.getCharCount(8,4)
//                    mainBoard.getWidth(8,4)
//                    mainBoard.getIconPath(8,4)
//                    mainBoard.getValue(8,4)
//                    mainBoard.getItem(8,4)
//                    mainBoard.isValueShown(8,4)
//                    mainBoard.isIconShown(8,4)
// where mainBoard is the variable of type myBoard.
//
// To get the multiboard, use                      : mainBoard.board
// where mainBoard is the variable of type myBoard.
// Note that this variable cannot be reassigned.
//
// This system also features some operators for the user to control everything easier.
// Dedicated to lazy typers. :)
    method operator title    takes nothing returns string
    method operator columns  takes nothing returns integer
    method operator rows     takes nothing returns integer
    method operator show     takes nothing returns boolean
    method operator suppress takes nothing returns boolean
// These ones are used easily. See by yourself!
// To get the current title of the multiboard, use         : mainBoard.title
// To get the current column count of the multiboard, use  : mainBoard.columns
// To get the current row count of the multiboard, use     : mainBoard.rows
// To discover if the board is shown or hidden, use        : mainBoard.show
// To discover if the board is minimized or not, use       : mainBoard.suppress
//
// To set the current title of the multiboard, use         : set mainBoard.title = "My awesome title!"
// To set the current column count of the multiboard, use  : set mainBoard.columns = myColumnCount
// To set the current row count of the multiboard, use     : set mainBoard.rows = myColumnCount
// To show or hide the multiboard, use                     : set mainBoard.show = trueOrFalse
// To minimize or maximize the multiboard, use             : set mainBoard.suppress = trueOrFalse
//
// where mainBoard is the variable of type myBoard.
//
// Please credit bowser499 aka [DUOS] for the system.
// Thank you!
//================================================================================
// Importing this system is easy! Just copy and paste MyBoardSystem trigger
// to your map and enjoy!
//================================================================================

JASS:
library MyBoardSystem
    globals
        private          boolean    DEBUG_MODE           = false
        private constant integer    MAX_ROW_COUNT        = 100
        private constant integer    MAX_COLUMN_COUNT     = 30
        private constant integer    MAX_ARRAY_SIZE       = MAX_ROW_COUNT*MAX_COLUMN_COUNT
        private constant real       AVERAGE_LETTER_WIDTH = .01484375
    endglobals
    
    struct myBoard
        readonly multiboard           board        = null
        private  integer              colCount     = 0
        private  integer              rowCount     = 0
        private  boolean              isMinimized  = false
        private  boolean              isShown      = false
        private  string               titleText    = ""
        private  integer        array charCnt [MAX_ARRAY_SIZE]
        private  real           array width   [MAX_ARRAY_SIZE]
        private  boolean        array showVal [MAX_ARRAY_SIZE]
        private  boolean        array showIcon[MAX_ARRAY_SIZE]
        private  string         array curIcon [MAX_ARRAY_SIZE]
        private  string         array curValue[MAX_ARRAY_SIZE]
        private  multiboarditem array brdItem [MAX_ARRAY_SIZE]
        
        // Getting the correct values from arrays.
        
        method getCharCount takes integer col, integer row returns integer
            return .charCnt[MAX_COLUMN_COUNT*col + row]
        endmethod
        
        method getWidth takes integer col, integer row returns real
            return .width[MAX_COLUMN_COUNT*col + row]
        endmethod
        
        method getIconPath takes integer col, integer row returns string
            return .curIcon[MAX_COLUMN_COUNT*col + row]
        endmethod
        
        method getValue takes integer col, integer row returns string
            return .curValue[MAX_COLUMN_COUNT*col + row]
        endmethod
        
        method getItem takes integer col, integer row returns multiboarditem
            return .brdItem[MAX_COLUMN_COUNT*col + row]
        endmethod
        
        method isValueShown takes integer col, integer row returns boolean
            return showVal[MAX_COLUMN_COUNT*col + row]
        endmethod
        
        method isIconShown takes integer col, integer row returns boolean
            return showIcon[MAX_COLUMN_COUNT*col + row]
        endmethod
        
        // Local parameter changes.
        method displayLocalIcon takes player whichPlayer, integer col, integer row, boolean doDisplay returns nothing
            local integer arrIndex = MAX_COLUMN_COUNT*col + row
            
            if GetLocalPlayer() == whichPlayer then
                set .showIcon[arrIndex] = doDisplay
            endif
            
            call MultiboardSetItemStyle(.brdItem[arrIndex],.showVal[arrIndex],.showIcon[arrIndex])
        endmethod
        
        method displayLocalValue takes player whichPlayer, integer col, integer row, boolean doDisplay returns nothing
            local integer arrIndex = MAX_COLUMN_COUNT*col + row
            
            if GetLocalPlayer() == whichPlayer then
                set .showVal[arrIndex] = doDisplay
            endif
            
            call MultiboardSetItemStyle(.brdItem[arrIndex],.showVal[arrIndex],.showIcon[arrIndex])
        endmethod
        
        method setLocalIcon takes player whichPlayer, integer col, integer row, string newIcon returns nothing
            local integer arrIndex = MAX_COLUMN_COUNT*col + row
            
            if GetLocalPlayer() == whichPlayer then
                set .curIcon[arrIndex] = newIcon
            endif
            
            call MultiboardSetItemIcon(.brdItem[arrIndex],.curIcon[arrIndex])
        endmethod
        
        method setLocalValue takes player whichPlayer, integer col, integer row, string newValue returns nothing
            local integer arrIndex = MAX_COLUMN_COUNT*col + row
            
            if GetLocalPlayer() == whichPlayer then
                set .curValue[arrIndex] = newValue
            endif
            
            call MultiboardSetItemValue(.brdItem[arrIndex],.curValue[arrIndex])
        endmethod
        
        method setLocalWidth takes player whichPlayer, integer col, integer row, real width returns nothing
            local integer arrIndex = MAX_COLUMN_COUNT*col + row
            
            if GetLocalPlayer() == whichPlayer then
                set .width[arrIndex] = width
                set .charCnt[arrIndex] = R2I(width/AVERAGE_LETTER_WIDTH)
            endif
            
            call MultiboardSetItemWidth(.brdItem[arrIndex],.width[arrIndex])
        endmethod
        
        method setLocalTitleText takes player whichPlayer, string newTitle returns nothing
            if GetLocalPlayer() == whichPlayer then
                set .titleText = newTitle
            endif
            
            call MultiboardSetTitleText(.board,.titleText)
        endmethod
        
        // Global parameter changes.
        
        method displayIcon takes integer col, integer row, boolean doDisplay returns nothing
            call .displayLocalIcon(GetLocalPlayer(),col,row,doDisplay)
        endmethod
        
        method displayValue takes integer col, integer row, boolean doDisplay returns nothing
            call .displayLocalValue(GetLocalPlayer(),col,row,doDisplay)
        endmethod
        
        method setIcon takes integer col, integer row, string newIcon returns nothing
            call .setLocalIcon(GetLocalPlayer(),col,row,newIcon)
        endmethod
        
        method setValue takes integer col, integer row, string newValue returns nothing
            call .setLocalValue(GetLocalPlayer(),col,row,newValue)
        endmethod
        
        method setWidth takes integer col, integer row, real width returns nothing
            call .setLocalWidth(GetLocalPlayer(),col,row,width)
        endmethod
        
        // General stuff.
        
        method minimize takes boolean doMinimize returns nothing
            if .isShown then
                call MultiboardMinimize(.board,doMinimize)
            endif
            set .isMinimized = doMinimize
        endmethod
        
        method display takes boolean doDisplay returns nothing
            set .isShown = doDisplay
            call MultiboardDisplay(.board,doDisplay)
            if doDisplay then
                // Unbug the minimization - known issue.
                call .minimize(not .isMinimized)
                call .minimize(not .isMinimized)
                call .minimize(not .isMinimized)
                call .minimize(not .isMinimized)
            endif
        endmethod
        
        method setRowCount takes integer rows returns nothing
            local integer colLoop  = 0
            local integer rowLoop  = 0
            local integer arrIndex = 0
            // No actions if it's same.
            if rows != .rowCount then
                // Here's the anti-lag snippet: remove unneeded multiboard items from memory.
                // (or add new!)
                if rows < .rowCount then
                    set rowLoop = rows
                    loop
                        exitwhen rowLoop > .rowCount
                        set colLoop = 0
                        loop
                            exitwhen colLoop > .colCount
                            set arrIndex = MAX_COLUMN_COUNT*colLoop + rowLoop
                            call MultiboardReleaseItem(.brdItem[arrIndex])
                            set .brdItem[arrIndex] = null
                            set colLoop = colLoop + 1
                        endloop
                        set rowLoop = rowLoop + 1
                    endloop
                else
                    set rowLoop = .rowCount
                    loop
                        exitwhen rowLoop > rows
                        set colLoop = 0
                        loop
                            exitwhen colLoop > .colCount
                            set arrIndex = MAX_COLUMN_COUNT*colLoop + rowLoop
                            set brdItem [arrIndex] = MultiboardGetItem(.board,rowLoop,colLoop)
                            set width   [arrIndex] = .01
                            set showVal [arrIndex] = true
                            set showIcon[arrIndex] = true
                            set curValue[arrIndex] = ""
                            set curIcon [arrIndex] = ""
                            set colLoop = colLoop + 1
                        endloop
                        set rowLoop = rowLoop + 1
                    endloop
                endif
                
                set .rowCount = rows
                call MultiboardSetRowCount(.board,.rowCount)
            endif
        endmethod
        
        method setColCount takes integer cols returns nothing
            local integer colLoop  = 0
            local integer rowLoop  = 0
            local integer arrIndex = 0
            // No actions if it's same.
            if cols != .colCount then
                // Here's the anti-lag snippet: remove unneeded multiboard items from memory.
                // (or add new!)
                if cols < .colCount then
                    set colLoop = cols
                    loop
                        exitwhen colLoop > .colCount
                        set rowLoop = 0
                        loop
                            exitwhen rowLoop > .rowCount
                            set arrIndex = MAX_COLUMN_COUNT*colLoop + rowLoop
                            call MultiboardReleaseItem(.brdItem[arrIndex])
                            set .brdItem[arrIndex] = null
                            set rowLoop = rowLoop + 1
                        endloop
                        set colLoop = colLoop + 1
                    endloop
                else
                    set colLoop = .colCount
                    loop
                        exitwhen colLoop > cols
                        set rowLoop = 0
                        loop
                            exitwhen rowLoop > .rowCount
                            set arrIndex = MAX_COLUMN_COUNT*colLoop + rowLoop
                            set brdItem [arrIndex] = MultiboardGetItem(.board,rowLoop,colLoop)
                            set width   [arrIndex] = .01
                            set showVal [arrIndex] = true
                            set showIcon[arrIndex] = true
                            set curValue[arrIndex] = ""
                            set curIcon [arrIndex] = ""
                            set rowLoop = rowLoop + 1
                        endloop
                        set colLoop = colLoop + 1
                    endloop
                endif

                set .colCount = cols
                call MultiboardSetColumnCount(.board,.colCount)
            endif
        endmethod
        
        method setTitleText takes string newTitle returns nothing
            set .titleText = newTitle
            call MultiboardSetTitleText(.board,.titleText)
        endmethod
        
        // Operator API.
        
        method operator title takes nothing returns string
            return .titleText
        endmethod
        
        method operator title= takes string newTitle returns nothing
            call .setTitleText(newTitle)
        endmethod
        
        method operator columns takes nothing returns integer
            return .colCount
        endmethod
        
        method operator columns= takes integer cols returns nothing
            call .setColCount(cols)
        endmethod
        
        method operator rows takes nothing returns integer
            return .rowCount
        endmethod
        
        method operator rows= takes integer cols returns nothing
            call .setRowCount(cols)
        endmethod
        
        method operator show takes nothing returns boolean
            return .isShown
        endmethod
        
        method operator show= takes boolean doDisplay returns nothing
            call .display(doDisplay)
        endmethod
        
        method operator suppress takes nothing returns boolean
            return .isMinimized
        endmethod
        
        method operator suppress= takes boolean doMinimize returns nothing
            call .minimize(doMinimize)
        endmethod
        
        // Initializer.
        
        static method create takes integer cols, integer rows, string title returns thistype
            local thistype this     = thistype.allocate()
            local integer  colLoop  = 0
            local integer  rowLoop  = 0
            local integer  arrIndex = 0
            
            set .board         = CreateMultiboard()
            set .colCount      = cols
            set .rowCount      = rows
            set .isMinimized   = false
            set .isShown       = false
            set .titleText     = title
            
            call MultiboardSetColumnCount(.board,cols)
            call MultiboardSetRowCount(.board,rows)
            call MultiboardSetTitleText(.board,title)
            
            // Pre-initializing board items.
            // This is needed to drastically reduce function calls afterwards.
            loop
                exitwhen colLoop > cols
                set rowLoop = 0
                loop
                    exitwhen rowLoop > rows
                    set arrIndex = MAX_COLUMN_COUNT*colLoop + rowLoop
                    set .brdItem [arrIndex] = MultiboardGetItem(.board,rowLoop,colLoop)
                    set .width   [arrIndex] = .01
                    set .charCnt [arrIndex] = 4
                    set .showVal [arrIndex] = true
                    set .showIcon[arrIndex] = true
                    set .curValue[arrIndex] = ""
                    set .curIcon [arrIndex] = ""
                    set rowLoop = rowLoop + 1
                endloop
                set colLoop = colLoop + 1
            endloop
            
            return this
        endmethod
    endstruct
endlibrary

Version 1.1:
  • The struct members are now protected from editing outside of the struct.
  • Added minimize method for adjusting the minimization.
  • Added setLocalTitleText method for setting the title locally.
  • Added operators:
    • title (for getting/setting multiboard's title)
    • columns (for getting/setting multiboard's column count)
    • rows (for getting/setting multiboard's row count)
    • show (for getting/setting multiboard's visibility)
    • suppress (for getting/setting multiboard's suppression)

Version 1.0:
  • First public version.

This is the system that allows full featured control of multiboard. It is simple to use even for GUI lovers and it's possible to extend their possibilities.
Simple multiboard example is present in this map aswell.
Credit bowser499 aka [DUOS] for the system and enjoy!
Any questions? Ask them below!

Keywords:
multiboard, myboard, bowser499, duos, system, nice, compact, functional, board, manipulation
Contents

Еще одна карта (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. 20:39, 2nd Mar 2014 Magtheridon96: In all honesty, answer this question: Do you really think myBoard is a good name for a multiboard object? Is it really the best name?

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.

20:39, 2nd Mar 2014
Magtheridon96: In all honesty, answer this question:

Do you really think myBoard is a good name for a multiboard object? Is it really the best name?
 
Level 22
Joined
Sep 24, 2005
Messages
4,821
Great, this was the one on another thread right? Thanks for sharing man. This is useful indeed.
 
Level 31
Joined
Jul 10, 2007
Messages
6,306
Ok, in order for this to be approved


1. change myBoard to either Multiboard or MultiboardEx (it can be another valid name, even MyBoard if you really want, but those are the two recommended names)

2. fix argument order on your methods

compare

method getItem takes integer col, integer row returns multiboarditem

vs

native MultiboardGetItem takes multiboard lb, integer row, integer column returns multiboarditem

your argument order for row, column is backwards


You are missing some functionality from the natives, but it's ok if you don't have this functionality. It would be good if you added the functionality in, but not required.

As per minimal approval requirements, those are the only necessary changes.

Once those things are fixed, it can be approved.

edit
One final thing. Remove your DEBUG constant and just use the DEBUG_MODE variable. It has never been acceptable in the past to define your own DEBUG constant, and it won't be acceptable in the future, lol.

Otherwise gj. I don't personally like this resource, but w/e ; p, Spells section is a lot less strict than JASS section ;).
 
If you really wanna use that feature why not simply create a 50 line long wrapper around board and make it save the values in a table?

This way you could even return the real type (integer/string/whatever) and return the values with new functions. Shouldn't be too hard. This is just reinventing the wheel without 70% of the features but having 1 more that you really don't need.

I'm sorry if I sound harsh, but we don't need more board systems imho.
 
In my humble opinion, almost everything that you (Nes and Anachron) wrote above is a subjective crap. If you are looking for a proof...
  • Arguments in native functions are swapped, that's true. But it's also true that native functions can't dictate the way of the overall system programming. It is simply bad to just stick to one way of programming without experimenting with something another. The only thing that can dictate us the way on how to code is the syntax of the programming/scripting language we use. Nothing else, seriously. It is very bad to limit your creativity because of some stupid rules in JASS section, sometimes you need to compare the outgoing codes aswell in order to make it fast and objective.
  • You care about the users or about yourself? Users want it to be simple and useful, just like this one. And you made the stuff complicated doing the separate struct for multiboarditems, tons of keywords etc. And you think people who use GUI will even look at your systems? No, of course not. Cause you made it "specially for jasscoders". I was the JASS2 fanatic and I've started to code using vJASS just because it had a bit more useful features that can make users' lives simplier. It all depends on how you use the things Vexorian gave to you.
  • Man, what you say "we don't need more board systems" while having a favorite one you sound very selfish and subjective. Imagine that you have a wife you love very much. If she gives birth to two or three children when you wanted only one, will you throw away other ones saying: "we don't need more children"?
  • One must reinvent the wheel to get really different result from the ones somebody had before. Do you think that the wheel can't take other forms than circle? Look at different geometry systems. You will understand that you think somewhat one-sided.
 
Level 31
Joined
Jul 10, 2007
Messages
6,306
I don't want to sounds stupid or something -> You aren't moderator Nes AFAIK :)

But those are still the rules, regardless :p

A moderator would be abusing their power if they approved this. I would report them. If nothing was done, I'd leave the site because that would tell me that corruption is running rampant and everyone's playing favorites (not something I want to be a part of).

I personally think that we shouldn't have an approval system, we should just let people submit stuff and have the more popular and new stuff float to the top, that way new things always have a chance to be popular ;). Someone could also do searches for various scripts/systems or w/e and find stuffs. The only thing that moderators would be there for is to delete improper threads (like spam and questions) and delete threads that blatantly copy someone else (just cnp'ing code, putting your name on it, and hitting submit). I also believe in automatic updating and a ticket system.
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
But those are still the rules, regardless :p

A moderator would be abusing their power if they approved this. I would report them. If nothing was done, I'd leave the site because that would tell me that corruption is running rampant and everyone's playing favorites (not something I want to be a part of).

I agree with you.

I personally think that we shouldn't have an approval system, we should just let people submit stuff and have the more popular and new stuff float to the top, that way new things always have a chance to be popular ;). Someone could also do searches for various scripts/systems or w/e and find stuffs. The only thing that moderators would be there for is to delete improper threads (like spam and questions) and delete threads that blatantly copy someone else (just cnp'ing code, putting your name on it, and hitting submit). I also believe in automatic updating and a ticket system.

I do like the approval system it keeps junk from getting posted and lessens the chance of spammers.
The newer stuff should be first though to allow them as you have said to be able to become more popular.

I also think that mods should go through old spells and systems and ask the people to fix the newly found bugs and stuff. (Like spells with integer A/B)
But once it is approved you have free rain to do whatever you want to it.

I don't want to sounds stupid or something -> You aren't moderator Nes AFAIK :)

This is pointless Malhorne. Not everyone here is a mod ( like myself) but i still go around and look over systems and stuff to tell the TO how to improve it to get it approved. We do have rules on here and having everyone try to enforce them even if they aren't mods makes everything a lot better.
 
Level 19
Joined
Mar 18, 2012
Messages
1,716
I personally think that we shouldn't have an approval system, we should just let people submit stuff and have the more popular and new stuff float to the top, that way new things always have a chance to be popular ;)

The quality in the spell section is significantly worse than in the JASS section.
20% of the submissions are total crap. 70% of them have major flaws and the rest leave room for improvement, aswell.
I think the approval system is pretty useful, at least in the spell section to get rid of useless trash and/or improve it. This way we do provide a minimum of quality to a third person.

edit:
I also think that mods should go through old spells and systems and ask the people to fix the newly found bugs and stuff. (Like spells with integer A/B)
But once it is approved you have free rain to do whatever you want to it.

I've already considered to update old (pre-patch 1.24b) spell resources in GUI and vJass and re-upload them. And ofc improve their quality (if possible).
 
Last edited:
Level 31
Joined
Jul 10, 2007
Messages
6,306
The quality in the spell section is significantly worse than in the JASS section.
20% of the submissions are total crap. 70% of them have major flaws and the rest leave room for improvement, aswell.
I think the approval system is pretty useful, at least in the spell section to get rid of useless trash and/or improve it. This way we do provide a minimum of quality to a third person.

This is primarily because the JASS section is much more strict than the Spells section. Not only are basic things enforced, but design patterns and stuff are also enforced. Your code is literally torn apart in that section. Many people have come out of there crying :(
 
Level 19
Joined
Mar 18, 2012
Messages
1,716
Nothing really new, but I would still like to remind you:

Remove private boolean DEBUG_MODE. It is part of the Debug preprocessor and defined as a constant boolean DEBUG_MODE, which is automatically set to true or false by the JassHelper.

Edit:
- I have to agree with Nestharus and Anarchon that we already have multiboard systems, even ones with a decent API. New resources should also be innovative or "better" (I know this one is very subjective) than existing ones.
Imagine that you have a wife you love very much. If she gives birth to two or three children when you wanted only one, will you throw away other ones saying: "we don't need more children"?
Consider your resources as your babies, if you wish so, but don't draw comparisons to the greatest gift of life.

- You don't support all features (natives) for multiboards.
- Imo names like myBoard and myBoardSystem could be changed into board, multiboard, etc ...

The coding itself looks good, as expected from an experienced user.
 
Last edited:
Top