那么下次开始使用b49的了,请大家在开团前更新好。
本次更新日志:
1.3 DEVELOPMENT
Build 49 (12/29/08)
* Optimize selection of groups of tokens (with lots of macros)
* 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
* Fix bug: Revert Last Move does not update the token visible area
* Fix bug: Player chat throws error when no maps are visible
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 K.fan
* Fix bug: some list and StrProp functions were demanding or returning strings when a number was appropriate
* Fix bug: list functions had issues when using non-default list separators
* Fix bug: input() was failing to load icons the first time you tried
* New feature: list functions now accept multi-character non-default list separators
* New feature: StrProp functions have optional final argument to specify a non-default entry separator
* New feature: input() dialog boxes now scroll vertically (but not horizontally) when necessary
* New feature: multiple input() parameters can be packed into a single string, separated by "##".
* New feature: varsFromStrProp() can take a "suffixed" or "unsuffixed" second param to decorate the created variable names
* New feature: the SETVARS option of the input() PROPS type can be "suffixed" or "unsuffixed" as above (the old "true" is the same as "unsuffixed")
* New function: assert(condition, message) - prints error message if condition is zero
* New function: listSort(list, sortType) - sorts a list
* New function: listContains(list, target) - counts occurences of an item in a list
* New function: listFormat(list, listFormat, itemFormat, separator) - formats a list
* New function: formatStrProp(props, listFormat, entryFormat, separator) - formats a property string
* New function: strPropFromVars(varList) - creates a property string from existing variables
* New feature: input() function SPAN option - suppresses the label of an entry
* New feature: input() TAB inputType - tabbed dialog boxes
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.