Windows should no longer lose their alpha settings upon being hidden and re-shown. In addition, the performance hit for rapidly hiding and re-showing windows should be reduced.
A new tag, VersionSettings, has been added to the .mod file options; it allows setting a number of parameters that provide info about the versions of various parts of the mod to the game. The syntax looks like this:
<VersionSettings gameVersion="1.2.1" windowsVersion="1.0" savedVariablesVersion="1.0" />
Each of the parameters serves a different purpose:
gameVersion is monitored by the client, and when a new WAR patch is released will automatically disable addons whose gameVersions do not match the new version (but will prompt the user with which mods were disabled and ask if they wish to re-enable them anyways).
windowsVersion defines the version of the saved window data for an addon; if it is set, window positions will no longer reset whenever the addon's main version is changed, but instead only when the windowsVersion value changes.
savedVariablesVersion defines the version of the saved Lua variable data for an addon; if it is set, the value of SVs will no longer reset whenever the addon's main version is changed, but instead only when the savedVariablesVersion changes.
WAR will now load the highest version of any addon it finds in the Interface\Addons directory tree, rather than just loading whatever copy it found first and ignoring any others. "Highest" is defined by a string comparison of the values for the main "version" fields in each copy's .mod file - "1.6" is higher than "1.5", but keep in mind that "Beta 1.2" is higher than "1.4" (because B is higher than 1 in string comparisons).
The Dependency tag now has two additional (and optional) parameters that can be specified:
<Dependency name="RandomModHere" optional="true" forceEnable="true" />
optional specifies whether the dependency must be present in order for this addon to load. If the specified mod isn't present, this dependency will be ignored; if it is present, it will be loaded before the current addon.
forceEnable specifies whether or not the dependency should be automatically enabled if it is found to exist in the Interface\Addons path - if this is true, even if the dependency was explicitly turned off, it will be enabled by the client automatically and loaded before the current addon. If it's false, then it will not be. Note: This defaults to true. For optional dependencies, you should probably set this explicitly to false.
A new UI profiles system has been implemented, which allows saving of multiple settings profiles per character. If a character does not have a profile, the user will be prompted to create one (and optionally import the settings from another profile). UI profiles can be switched between at any time, but require a UI reload to do so. Settings can be imported from one profile to another.
The SavedVariable tag now has an additional, optional attribute named "global". If set to true, this saved variable will be available to all characters and profiles. If it is false (the default), it will only be available to the current profile. Example syntax:
<SavedVariable name="MyTestAddon.Settings" global="true" />
The PartyUtils Lua object has been fixed to properly report entityIds (aka worldObjNum) and main assist flags immediately, as opposed to not updating until other events forced a refresh. Also, entity Ids should now update immediately when a warband member moves in/out of rendering range.
The variables GameData.Player.career.tier and GameData.Player.career.rank have been removed; use GameData.Player.career.level instead.
The table of constants SystemData.ChapterHubService has been renamed to SystemData.HubService (no more "Chapter"). All of the individual constant names within that table (like CAREER_TRAINER) are the same; only the table name has been changed.
The table of constants GameData.TargetObjectTypes no longer exists. It was redundant with the table SystemData.TargetObjectType, and the latter should be used in its place. The names of the constants vary slightly between the two tables, but all of the same constants are present. Here are the translations (it's pretty straightforward):
GameData.TargetObjectTypes. => SystemData.TargetObjectType.
TARGET_OBJECT_NONE => NONE
TARGET_OBJECT_SELF => SELF
TARGET_OBJECT_ALLY_PLAYER => ALLY_PLAYER
TARGET_OBJECT_ALLY_NON_PLAYER => ALLY_NON_PLAYER
TARGET_OBJECT_ENEMY_PLAYER => ENEMY_PLAYER
TARGET_OBJECT_ENEMY_NON_PLAYER => ENEMY_NON_PLAYER
TARGET_OBJECT_STATIC => STATIC
TARGET_OBJECT_STATIC_ATTACKABLE => STATIC_ATTACKABLE
The WindowResizeOnChildren() function will no longer include hidden child windows in its consideration of how to resize the parent, only visible ones. DoesWindowExist() will now properly return false if a window is pending deletion due to having been DestroyWindow()'d but not yet fully removed if currently processing an event handler for that window. TimeUtils.FormatSeconds and TimeUtils.FormatRoundedSeconds should now properly round their values instead of just flooring them - any fraction of a minute above 29 seconds will now be rounded up, 29 and below will be rounded down. Also, if the flag to return a string value is set (the default value for the flag is now true), the numeric values for minutes and seconds will no longer be returned, only the string. If the flag is false, then only the numeric values will be returned.
Added 4/16/2009: GetMapPointTypeName() appears to have been removed. Not sure whether this is intentional or not, but it can be replaced with GetStringFromTable("MapPointTypes", mapPinType).
DialogManager.MakeTextEntryDialog() now takes 5 arguments - a wstring argument has been added after the 'title' argument to specify a line of text prompt that can be displayed. Order of arguments is now title, prompt, defaultvalue, okFunction, cancelFunction.