|
I was going to do the build yesterday but I had a crazy bad headache last night, so I postponed it. I'll keep fixing some more bugs today and do a build late late tonight.
Here is the current changelog:
Build 49 * Optimize token move clipping on player view * General rendering optimizations * Toggle to show "light" icon on tokens that have a light source * Fix bug: attempt to auto correct when loading a campaign with blank token z-order * Fix bug: two-image health bars are not scaling their image Contributed by applekor * Fix bug: Clear Macro Group issue * Clarification: Two or more tokens with a common macro now add that macro to the common macro groups. * Bug Fix: Common macros in the Selection panel now function as they did in b41. If you execute a common macro, it looks for the macro of the same name on each selected token and only executes those matching individual macros against their respective tokens. Tokens without a matching macro are not executed against. If any matching individual macro has "Apply to Selected Tokens" checked, it should still execute against ALL selected tokens. * New Feature: An "Options" tab has been added to the macro editor dialog. The macro details now appear on a "Details" tab. * New Feature: The criteria for comparing macro details when determining similarity for populating common macros on the Selection panel and for drag-and-drop operations are no longer strictly hard coded. The user can choose to have individual macros ignore Group, Sort Prefix, Command, Include Label, Auto Execute, and/or Apply to Selected Tokens when comparing against other macros by clearing respective check boxes on the new "Options" tab of the macro's editor dialog. * New Feature: GM's can designate any individual macro as player editable/non-editable by setting/clearing a new check box in the new "Options" tab of the macro's editor dialog. Certain popup menu items are also made unavailable to players when this check box is set. * New/Returning Feature: Common macro buttons/groups now have popup menus on right-clicks. Through this interface change, macros can be added/removed to all selected tokens simultaneously. Additionally, macro import/export features have been extended to common macros. * New Feature: When hovering over a macro button, tokens that would be affected by execution of the macro are now highlighted with a new, thicker, red & green selection border. This feature isn't fully implemented yet for the Impersonate panel. The Global, Campaign, and Selection panels appear to have full functionality. Contributed by Craig Wisniewski Bug fixes * Several fixes for line parser quote issues in [ ] * Removed the [] {} [option: ] matching regex and coded the search in java (the regex had errors and correcting it was getting ridiculas. * Previously doing something like [a = "[" + "1d6" + "]"] [r:a] would work but on certain strings or if variables were unresolved the whole macro would die with an exception. Now it works, and is the string is not able to be resolved the string itself is returned. This is also only able to be done with full formating in a trusted macro to discourage cheating. * setProperty()/setLibProperty() no longer causes exceptions in token property dialog * calling abort() from a macro link catches the abort exception correctly so there will be no message in chat anymore. * input and temporary meta tags should work in all cases now. * Frames that are updated because of selection/impersonation/token change will no longer maximise. * Removed a few cheating expliots that provided easy means of faking rolls. * onChangeToken call back for dialog works but is discourage where you can find another method of doing it. * Much improved error messages when trying to call undefied macros on lib:tokens or trying to call a macro on a lib:token that does not exist.
New Functions. * Functions to help build html * evalMacro()/execMacro() can be used to execute macros and get the resultant html since it is a lot easier to use macro output to generate html than building a string. There are some tool tip gotchyas to look out for which are described in the detaled notes. These are a trusted macro only function so players can not call them directly.
* Retrieving token lists * getVisibleTorkens()/getVisibleTokenNames() gets a list of the tokens that are visible to the client when vision is taken into account.
* Frame/Dialog related functions isDialogVisible() isFrameVisible() closeDialog()
* String startsWith()/endsWith()
* Auto executeable macro links. If a macro link points to a trusted macro and that macro has the autoexec flag selected then the macro will be automactically run (i.e. MapTool will run the macro without the user having to click on the links). The GM gets to define exactly what can be auto run so this should head off any player shenanigans.
* All output target available in macro links (works like say)
* String Property/String List compliment. Since String properties and string lists have many limitations which people have been running into there is now a third option. Macros can create and manipulate json objects (they are just objects no javascript is ever ever executed at any point, infact as far as macros are concered they are just strings with special formatting). JSON was selected as the method for storing the data to provide you with a way to store your data that can be easily manipulated in the future and for its convenience.
* The following functions will return a json array or object if the optional delim argument is "json". getPropertyNames(delim]), getAllPropertyNames(type [, delim]), getOwners(delim), getLights(type [, delim]), getMacros(delim), getMacroProps(index, [, delim]), getMacroIndexes(name [, [delim]]), getTokens([delim]), getTokenNames([delim]), getSelected([delim]), getSelectedNames([delim]), getPCs([delim]), getPCNames([delim]), getNPCs([delim]), getNPCNames([delim]), getExposedTokens([delim]), getExposedTokenNames([delim]), getVisibleTokens([delim]), getVisibleTokenNames([delim]), getWithState(state [,delim]), getWithStateNames(state [,delim]), getOwned(name [,delim]), getOwnedNames(state [,delim]), getSpeechNames([delim])
* [foreach(): ] works with json objects and arrays (there is no need to tell foreach() which type of string you are passing it is able to determine this.
* setMacroProps(button, props) Accepts a json object with the properties for props, as with foreach() the function is able to determine if you are passing a json object or string property list.
* See the detailed post for more information on the functions for manipulating json object strings.
* You can catch calls to non defined macros on a lib:Token in a macro called !!unknown-macro!!. getMacroName() can be used to detrmine the name of the macro that was called. You can use this to provide help for your lib:token or macros that take arguments from their name, such as. getWeaponsFromInvetory() addLongswordToWeapons() (etc.)
* Start of support for "fully" trusted macros, where only the GM can edit the buttons, hoping to complete this for next build.
_________________ Dreaming of a 1.3 release
|