> Production
> Neptune
2025-04-12 04:31
deb36c89
Not logged in
Index

Documentation
Change Log

     
DateComponentChange
2025‑01‑07CoreFixed incorrect use of TreeMap over HashMap in KVs causing some conveyance values to be lost, notably titler configuration if using a custom attribute 'titlertext', which the default playbook uses.

2025‑01‑04CoreAdded Transport module - used for importing and exporting configuration data

2024‑12‑23ScriptingFixed gsGetExperience to use the fabricated state for the target character, rather than the caller's state

2024‑10‑26ScriptingAdded gsGetExperience(char,poolname) function to get a current experience value

2024‑10‑06APIRemoved console and scripting access to GPHUDClient.offerWebsite - this command only ever works if the user directly calls this from the HUD
2024‑10‑06HUDResolved a race condition on reboot calls to the HUD, e.g. GPHUDClient.Reboot, where the HUD would reconnect instantly and may end up logging its self out. HUD now waits for logout to complete before reconnecting. Requires region server update.
2024‑10‑06ScriptingAdded gsOfferWebsite which properly formate a GPHUDClient.offerWebsite response and forwards it to the player's HUD

2024‑10‑05ScriptingAdded functions gsListFind and gsListFindFrom, for efficient list searching ; see introspection, gsFunctions, Utility for details

2024‑09‑29CoreFixed caching issue in Object definitions (as in inworld objects) that could create a duplicate cache entry resulting in a split-brain between the website and the objects behaviour.

2023‑04‑03CoreCharacter renames are now checked against the name filtering policy

2023‑03‑28GSVMDoubled script instruction count limit from 10K to 20K instructions as scripting does not seem to be the primary CPU load on the server and recent optimisations in other areas have made this seem safe to relax.

2023‑03‑26CoreVarious performance improvements, little visible from an end user client but CPU spikes reduced by 80%

2023‑02‑27CoreRequire the permission Characters.ViewAll to actually display other users character sheets (rather than only blocking access via the main characters list)
2023‑02‑27RegionServerModified dispenser component to store persistent user list in object storage rather than script memory, in an attempt to enable the dispenser to track past 100 concurrent users.

2023‑02‑04CoreAltered error from conflicting group memberships to properly report a fixable condition to the user

2023‑01‑26DatabaseSchemaDrop Audit table history from more than 1 year ago automatically

2023‑01‑14CoreFixed issue in reporting, guarding against any errors during a report generation. This will now report EXCEPTION in the output CSV rather than aborting the whole report run.

2022‑04‑25CoreSupport for JSON enumerating permissions groups, allowing commands like PermissionsGroups.Invite to be used on a HUD menu

2022‑04‑24ObjectDriverPhantom/Volume Detect/Collision object driver only detects avatar collisions.
2022‑04‑24RegionServerServer emits warnings if there are insufficient prims before attempting to rez a HUD, and warns if a HUD rez doesn't succeed.

2022‑04‑23CorePreserve the leveltext conveyance through the normal logon wipe, preventing the HUD from always reporting XP/level, now only reporting it at login if it has changed.
2022‑04‑23CoreMenu descriptions are now conveyed to the HUD and displayed, also editable. Note that main menu description support requires a HUD upgrade
2022‑04‑23HUDTruncated general version startup messages
2022‑04‑23HUDRemoved HUD's personal version startup message
2022‑04‑23ObjectDriverTeleporters no longer send a blank 'teleporter says' message which triggers poor HUD behaviour (says 's')
2022‑04‑23ProtocolHUD Protocol version 5 expects the mainmenu payload to be prefixed with a description.
2022‑04‑23ProtocolBlock empty messages from being sent in a JSON payload (a secondary fix for things saying 's' in blank contexts etc)

2022‑04‑22CoreRegions are now automatically retired after two weeks of being offline (configurable for cluster)
2022‑04‑22CoreInstances now delete automatically when this one month warning period has lapsed (configurable for cluster)
2022‑04‑22CoreStatus updater no longer exceptions failing to find the running version at instances with no active regions (harmless silent error)
2022‑04‑22CoreInstances now start a 1 month deletion warning, with a 2 week secondary warning, if they have no active regions attached (configurable for cluster)
2022‑04‑22DatabaseSchemaAdded retireat/retirewarn to instance table

2022‑04‑21ProtocolRe-enable purging of disconnected URLs, but only on 404/Malformed, not on all IO errors

2022‑04‑04CoreChange error when a KV is mass set via scripting to report properly an unknown KV rather than an internal error.

2022‑03‑31GSVMLog warnings for type mismatch on variable assignment, and also assignment to a non-defined variable. NOTE THESE WILL EVENTUALLY BE ERRORS. Merged for review.
2022‑03‑31GSVMAdded BCDiscard, pops a value from the stack and discards it
2022‑03‑31ScriptingNew top level language construct, the DiscardExpression. No longer must every expression have an assignment, e.g. 'Response discard=gsAPI(Stuff)', but can just be written as gsAPI(Stuff), the result will now be automatically discarded.

2022‑03‑28CoreMoved to Version-Number-Less architecture
2022‑03‑28CoreImproved cache performance of other deep lists e.g. on the menus page
2022‑03‑28CoreMigrated to Java 17
2022‑03‑28CoreSwitched to MySQL native Database driver

2022‑03‑23CoreImproved performance of Configuration Hierarchy (KV management) page for large numbers of groups and scripted commands. Note that excessively large configuration sets may still generate large generation or download times due to this page containing 'groups X commands' configuration items on it, for some instances this now passes 100,000 elements generating a web page larger than a Windows 95 install media.
2022‑03‑23CoreDoubled the allowed depth of KV calculations (that is, the number of chained templates in KVs)

2022‑03‑19CorePaged view pages now left align the search box
2022‑03‑19CoreMariaDB driver replaced with MySQL driver ; now fully MySQL 8.x
2022‑03‑19CoreNew command GPHUDClient.Reboot that will send a reboot message to the caller.
2022‑03‑19CoreNew commands Groups.AddSilently and Groups.RemoveSilently that do not send notifications to the targetted user.
2022‑03‑19ScriptingNew functions to get item's descriptions and weights.

2021‑11‑27CorePerformance improvement on the 'View Characters' SQL queries.
2021‑11‑27CoreView Characters now only shows characters active in the last three months, use '(including retired)' for a full list.
2021‑11‑27ScriptingScripts now have an alias which they can be called by, either via scripting.alias or in scripts as a 'function call'; mostly useful for scripts that have unusable symbols in their name e.g. the - symbol means subtract to the scripting language and thus can not be used as a function name.
2021‑11‑27ScriptingNew function gsDefined - returns 1 if you pass it the string of a variable that exists, 0 otherwise.

2021‑10‑23CoreGPHUD Schema Version 12 - Scripts table how has a compiler version int, not null, default 0. Set to a well known static value on update (effectively).
2021‑10‑23GSVMBCBranchIfZero is hard deprecated - code remains to enable existing compiled scripts to continue to function but no new compilations will generate this bytecode assembly and code using this remains unable to be relocated.
2021‑10‑23GSVMScripts are now stored with a 'compiler version', which we can later use to distinguish between code quirks, e.g. use of relative/absolute jump code. Previously compiled code inherits compiler version 0, compiler version 1 generates relocatable code only.
2021‑10‑23GSVMGSVM now (badly) tracks the currently running script. There are bugs in this, but it's intended to assist in debugging.
2021‑10‑23GSVMAdded new bytecode operation 'BCBranchRelativeIfZero' - performs the same function as BCBranchIfZero but requires a relative modification to the PC rather than an absolute value. This operation code permits the compilation of relocatable bytecode.
2021‑10‑23GSVMAdd new byte code 'return' which will stack-juggle a return Data Type (any), and pop a vm-random canary and return PC (absolute).
2021‑10‑23ScriptingYou can call another script like you might call a function, note the 'gs' prefix is reserved for internal functions, and that script functions currently take no parameters. E.g. Integer number=otherScript(); See also [https://gphuddocs.coagulate.net/wiki/index.php/Scripting#Custom_Function_Calls Scripting Documentation Update]
2021‑10‑23ScriptingNew GS keyword (was always reserved but had no implementation) - 'Return' - takes an optional argument, e.g.'return; return 33; return 'a string'; etc. If you 'return', execution of your script stops (with the return value left on the stack...).

2021‑10‑17APIEffects.SetMetaData
2021‑10‑17APIEffects.RemoveByMetaData - removes all effects from a character where the metadata matches (either exact match or substring match) a supplied string.
2021‑10‑17APIEffects.RemoveByMetaDataShortestN / RemoveByMetaDataLongestN - Removes effects from a character that match metadata (see above), up to a maximum number of effects to remove. Prioritises the shortest/longest effects depending which method you call.
2021‑10‑17CoreThe web page now has appropriate linkage to the existing command Teleportation.DeleteLandmark, enabling deletion via the website.
2021‑10‑17CoreMenus can now be cloned via the Configuration page for the indvidual menu.
2021‑10‑17CoreDiscard any errors that happen from broadcasting messages during event startup/shutdown as this would prevent the event launching/ending properly.
2021‑10‑17CoreScripts can now be deleted from the Configuration page
2021‑10‑17CoreIf a region server checks in an avatar presence response without having a return URL, reboot the region server. This was a hotfix reaction to the previous change to cause all region servers to re-establish a connection and register a replacement URL for the one purged previously.
2021‑10‑17CoreVarious errors are suppressed (not mailed to developers)
2021‑10‑17CoreEnsure pool deletions are properly contained to a single instance (ouch).
2021‑10‑17CoreObject types can now be deleted through Objects.DeleteObjectType or through the web page.
2021‑10‑17CoreRemoved the auto-revocation of broken URLs from region servers - this is in response to the recent OVH network outage, whereupon all URLs became unreachable and were cleared. When service was resumed these URLs remained blank, leaving a uni directional connection and incorrect reports about servers being offline.
2021‑10‑17CoreScripts in the Configuration page are now sorted by script name rather than the nebulous row ID
2021‑10‑17CoreEffects now support a 'metadata' column which can be used to store information for programmatic interrogation without making it part of the name. This value can be set on new effects at creation time, edited on existing effects via Effects.SetMetaData and the web page.
2021‑10‑17CoreReturn a user error when a GET request is made to the external interface, rather than showing an 'internal error' (which implies an error at our end, which is not the case. Also if you follow the link from the wiki that mentions the API target URL your web browser will issue a GET request, which now has a meaningful response).
2021‑10‑17CoreSplit maintenance operations into 'primary only' and 'all nodes', such that racey tasks can be left to the primary only but e.g. statistics gathering can run on all nodes at all times.
2021‑10‑17CoreDon't throw an internal error if a command line string isn't properly terminated, instead report a string termination user error.
2021‑10‑17DatabaseSchemaGPHUD Schema version 11 adds metadata column to effects table.
2021‑10‑17RegionServerEnsure a different seeding is used for global broadcast channels etc to better separate DEV and PRODUCTION when both are installed on the same sim. Note ; this release is not being pushed with a requested in world server upgrade, you only need this version if you are also using DEV at a PRODUCTION instance.
2021‑10‑17ScriptingFunction gsGetEffectMetaData which can read the metadata from an effect into a String.
2021‑10‑17ScriptingNew function gsMemberOf which can tell if a character is a member of a specific group.
2021‑10‑17ScriptingDivision by zero now generates a trapped error of GSMathsError which will be reported as a script runtime, rather than the Java core exception which would cause an internal error report.
2021‑10‑17ScriptingEnsure that any API call that throws a UserException has it recast into a scripting execution error so it is properly reported.
2021‑10‑17ScriptingNew function gsInventoryList that returns the names of items in an inventory as a List.

2021‑03‑15CoreItems configuration, which shows the items list now requires any Items related permission to view.
2021‑03‑15CorePrevent Name API calls for the blank username.
2021‑03‑15CoreAdded Introspection.ViewStatus permission which is now required to view the Status page under Introspection.
2021‑03‑15CoreInternal API to add/remove group member only flusher character's 'member of groups' cache, it now also flushes the group's 'membership' cache. This would cause group updates to appear to take up to 5 minutes to happen.
2021‑03‑15CoreSuppress developer logging of Error Responses that have been converted to Exceptions via gsAPIX / gsElevatedAPIX
2021‑03‑15CorePurge expired script runs, to reduce database garbage accumulating.
2021‑03‑15CoreAll sorts of internal tweaks to support providing a CSV download (ContentType added to Page() from SLCore, GPHUD State supports suppressOutput() to prevent rendering html surrounding).
2021‑03‑15CorePermissions groups add/remove member commands lost their explicit permissions check. Presently they all check Instance.ManagePermissions, which is used to change the permissions assigned to a permissions group, and is a dangerous permission as it allows a user to add more permissions to a group they are a member of (i.e. consider people with this permission as having all permissions except Instance.Owner). The add/remove member code was also checking canInvite/canEject which makes two permissions checks, *either* you must be a member of the permissions group and have the canInvite/canKick permission assigned for that group, OR you have Instance.PermissionsMembers. The difference is, setting a user as canInvite/canKick on a particular group lets them only add or remove members from that specific group, Instance.PermissionsMembers is a high level override (for the few who admin even the admins of the admins) that lets users with this permission join ANY user to ANY group. Most of the time you'll want to allow people to add/remove from their own groups only, to avoid them joining people to your super-admin group, however, for a couple of people at a sim, being able to administer all groups is likely required, and for this reason alone (to save you having to join to every single group) there is Instance.PermissionsMembers. Changes to per-group invite/kick rights are made under the PermissionsGroups menu on the left hand side (go into a group and use 'Set Invite/Kick')
2021‑03‑15CoreAdded report generation via website or command, this requires Instance.Reporting and will cost one Reporting credit to generate. The system iterates users at 10 per second and will give an estimated duration for the generation phase.
2021‑03‑15CorePermissions checks added to various menu elements, e.g. Alias.View was required to look at aliases, but the configuration links were visible to all. These now check the relevant permissions and aren't links or aren't visible as appropriate.
2021‑03‑15CoreWhen an attribute was deleted, the cache of attributes was not properly flushed (incorrect key used) leading to internal errors as the outdated cached list of attributes would refer to a non existent attribute, until the cache naturally expired.
2021‑03‑15CoreExternal interface rejects blank checkavatarpermission rather than trying to look up the key and failing.
2021‑03‑15CoreAdded report downloading via website, same permission requirement and drains a Download credit. Downloads as a time/date stamped CSV file that is formatted for Excel and compatible parsers.
2021‑03‑15CoreMigrate the HUD's protocol version when character switching is activated, otherwise the legacy menu is probably assumed and corrupts the HUDs ability to draw the main menu.
2021‑03‑15CoreMenu configuration, External API access configuration, Publishing configuration, Scripting configuration (scripts list), Teleportation (list of landmarks) and Zoning require any related permission to view.
2021‑03‑15CoreAdded reporting/download credits, one is granted every 12 hours and you may store up to 10 in reserve.
2021‑03‑15RegionServerFixed issue with Region Server's being uncommunicative ; they now output response messages as local SAY messages, and report any Error messages similarly.

2021‑02‑13CoreSupport system protocol 4 for main menu cache conveyance, as well as maintain legacy support for previous protocols.
2021‑02‑13CoreReduced rate of Pings to active connections
2021‑02‑13CoreAdded delete buttons for Items and Item Actions (already released)
2021‑02‑13CoreAdded command GPHUDClient.setTitlerAttachPoint which takes an attachment point description to attach to (works better on a menu!), allowing users to set their character's preferred attachment point. Also added command GPHUDClient.resetTitler with predictable effect.
2021‑02‑13CoreRewritten database caching module
2021‑02‑13CoreAdded new KV GPHUDClient.TitlerAttachment that defines the attachment point for the titler, or None for no titler. There is also a protected KV 'GPHUDClient.TitlerAttachmentConverted' which contains the LSL integer attachment point index for the named attachment point ; this KV is used to convey the numeric form to the HUD (which then requests a Titler from the region server using this attachment point index).
2021‑02‑13HUDTitler no longer auto attaches along side the HUD, and is instead requested by the HUD. This allows the Titler to be disabled entirely or, on a group, character, etc basis, the Titler may be attached somewhere other than the Skull.
2021‑02‑13HUDSwitch to system protocol 4, decode compacted cached main menu back into UI ready format at the LSL end of the communications.
2021‑02‑13ObjectDriverSwitch to system protocol 4. (Main menu cache is not used by object driver but still forms part of the payload)
2021‑02‑13ProtocolBump protocol level to 4 ; alteration of main menu communications from a 'UI ready' JSON structure to a delimited list of options. This is to overcome the 2KB outbound transmission limit that some menu structures hit when doing 'instance wide updates' (i.e. the admin reconfigures the main menu).
2021‑02‑13ScriptingList variables no longer reverse themselves on a VM suspend/resume operation (which happens when you query a user for something).

2021‑01‑10CoreAdded commands Inventory.add, Inventory.destroyItem, Inventory.giveItem, Inventory.Interact, Inventory.InteractItem, Inventory.InteractItemVerb, Inventory.MoveItem, Inventory.set and Inventory.view, Items.Edit and Items.EditInventories - See the [https://sl.coagulate.net/GPHUD/introspection/api/ API introspection page] for more or [[Inventories]] for more details.
2021‑01‑10CoreAdded template TARGET:LEVEL
2021‑01‑10CoreAdded Inventory and Items modules and configuration, support for Items and INVENTORY as an attribute type. See [[Inventories]] for more details.
2021‑01‑10RegionServerAdded code to express terminate/suspend messages properly (lost in the refactoring of GPHUDHeader previously).
2021‑01‑10ScriptingFixed a bug in gsSetCharacterKVs that would not set values for KVs that had not previously had a value set.
2021‑01‑10ScriptingAdded functions gsInventoryAdd, gsInventoryCount, gsInventoryGet, gsInventoryQuantity and gsInventoryWeight, see [[Inventories]] and [https://sl.coagulate.net/GPHUD/introspection/gsfunctions the application's Introspection/GSFunctions] for more details

2020‑12‑21CoreNew command set 'Sets.*', see introspection/API for more information (Sets.Add, Sets.Set, Sets.View, Sets.Wipe)
2020‑12‑21CoreNew AttributeType 'SET' bound to the character directly.
2020‑12‑21CoreSets are displayed on the character view page, items can be added or removed (set quantity to zero) from here if you have the appropriate permission (Characters.Set''AttributeName'')
2020‑12‑21ScriptingSet related functions added - see introspection/GSFunctions for more details (gsSetAdd, gsSetCopy, gsSetCount, gsSetGet, gsSetList, gsSetMap, gsSetQuantity, gsSetSet, gsSetWipe)

2020‑12‑17CoreAdded support for suspending a user from the service at a cluster-wide level.
2020‑12‑17CoreExceptions that wrap another exception now inherit the 'Suppression' flag which prevents developers getting emailed about certain user generated errors ; this fixes that suppression flag getting lost and error emails getting generated for 'developmentally uninteresting' errors (such as typing in garbage into colour selectors, typing words into numeric inputs, failing char name validation etc etc)
2020‑12‑17CoreAdded KV Experience.MaxLevel which 'caps' the level characters can achieve. A character at maximum level no longer receives experience. This may cause some characters to display negative ability points if you reduce their current level by setting this.
2020‑12‑17CoreCharacter groups now have a 'KV Precedence' setting which affects their ordering ; this only affects the DELEGATING KV types (as CUMULATIVE cares not for the order as it adds them all up). Lower precedence groups appear 'higher' in the KV hierarchy and thus higher precedence numbered groups end up dominant (if set) in a DELEGATING hierarchy type KV. For AUTHORITATIVE KVs this behaviour would be reversed (not that any AUTHORITATIVE KVs exist presently). Precedence values are shown in parenthesis in the group type on the KV editor pages and should be in order here (DELEGATING prefers values further down this list). Default precedence level for all existing groups is 1. Range for precedence values is a signed 32 bit integer (approx +/- 2.1 billion). Negative numbers are permitted. For groups with the same precedence value the internal ID number of the group is a secondary level of ordering providing a consistent interpretation of KV orderings within groups. Precedence values may be edited via the Groups menu element.
2020‑12‑17CoreFixed a leak of available permissions between instances (though they have no effect either)
2020‑12‑17CoreClickable object types (ClickTeleporter, RunCommand, RunScript and NPC) can have a maximum interaction distance set in their object type, default is 10 meters for new objects, existing objects remain at unlimited range but can be changed via the web page.
2020‑12‑17HUDTitler/HUD now correctly recommunicate the titler's Z offset if the titler starts up after the HUD, or is otherwise reset.
2020‑12‑17ObjectDriverObject Driver supports a maximum click distance.
2020‑12‑17ScriptingAdded GPHUDClient.AllowManualByDefault which controls the behaviour of gsSelectCharacter's 'Manual Selection' option ; this KV is instance only and defaults to TRUE which is the legacy behaviour, setting this to false will remove the Manual Entry option from all gsSelectCharacter calls to the HUD. If no avatars are nearby the HUD emits an 'Unable to detect any nearby players' error and the script stops (or specifically fails to resume).
2020‑12‑17ScriptingNew function call gsSelectCharacterSpecifyManual which takes an integer value, 0 disables manual selection and 1 enables it, this function call overrides the GPHUDClient.AllowManualByDefault preference for this call (i.e. you can set the default and have specific exceptions either way with this function)
2020‑12‑17ScriptingTwo new function calls, gsGetPlayersName and gsGetPlayersUUID which can resolve a Character into the player's Avatar name or UUID, if the character is logged in.
2020‑12‑17ScriptingNew function call, gsGetCharacter which will resolve a String name into a Character type.

2020‑11‑29CorePurge any URL that fails all 5 retry connections (over 25 seconds), currently we only purge URLs that fail to validate as URLs or that generate 404's from the remote server, however, it also seems error 503's may be a permanent failure of the URL. So now we revoke any URL that fails all retries too.
2020‑11‑29CoreAlias editing page handles errors that can occur as a result of enabling generated commands aliasing
2020‑11‑29CoreAdded recursion protection to command execution.
2020‑11‑29CoreAliases may now invoke any other command, including generated ones (including other aliases, enjoy finding new ways to break things!)
2020‑11‑29CoreSuppressed developer emails for a variety of uninteresting errors (permission denied, filtered characters in name, character not online when messaging, health reset denied)
2020‑11‑29CoreAltered a parameter of the apache config (keepalive) ; seems there are occasional '502' errors from my service that report an issue with the upstream connection, suspicion is this relates to held open connections that expire at inopportune moments (race condition). Removing connection keepalive may solve this (in a not so great way), monitoring ongoing (Update: Issue which surfaced maybe twice per hour for 1 request has no longer shown up at all in 2.5 days).
2020‑11‑29CoreSome basic instrumentation for I/O indicating the nature of the request, the payloads transferred and run time ; to hopefully point the direction of some possible optimisations. (must be enabled in server's properties file)
2020‑11‑29CoreGPHUDClient quick button commands may be invoked from console/scripting
2020‑11‑29HUDSupport the new HUD messages protocol (v3).
2020‑11‑29ObjectDriverSupport the new HUD messages protocol (v3) (note: the OwnerSay method is intentionally unimplemented in the object driver ; OwnerSays will be silently discarded)
2020‑11‑29ProtocolAdded a new HUD 'message/say' protocol supported by HUD version 3, this format correctly orders outputs which mostly affects scripting.
2020‑11‑29Protocol'Protocol version' numbers are logged for region servers, characters (HUDs) and objects, this enables 'breaking changes' to be implemented for new versions while maintaining backwards compatability in some cases.
2020‑11‑29ProtocolFixed a bug with various uses of core GPHUD Libraries which emitted certain messages as 'local say' messages ; notably this caused broadcast messages such as event start messages to emit in nearby chat as well as the intended OwnerSay. Core GPHUD libraries are no longer allowed to emit text (and a replication of some code was made into the Object Driver as suitable).
2020‑11‑29ProtocolAll components communicate an arbitrary 'protocol' number to the server, assumed to be zero if unset, this value is increased when the protocol needs to fork one of two paths only.
2020‑11‑29ScriptingUses protocol versioned 'Say/SayAs/SayAsHud' messages ; new HUDs will correctly emit messages in the order the script queued them, rather than in 'blocks' by type.
2020‑11‑29ScriptingObjects of type 'RunScript' and 'PhantomScript' will introduce the variable CALLERUUID into the script which contains the SL Avatar's UUID for the interactor. NPC types also support this variable under the name of 'TARGETUUID' (as CALLER in an NPC script is the NPC its self)

2020‑11‑01CoreFixed a couple of places a null objecttype might error the application (again not quite the root cause fix)
2020‑11‑01CoreAdded new template --HEALTHMAX-- which shows the maximum (initial) health value for the character, or more specifically, what the health will be if 'resetHealth' is called.
2020‑11‑01CoreFixed a couple of places a deleted attribute might error the web application (this is a symptom fix, not a root cause fix, sadly)
2020‑11‑01CoreFixed issue with group eject page recursing the URL until it 404'ed
2020‑11‑01CorePrevent creation of ObjectTypes with no behaviour (which later causes an exception when 'materialising' the unknown object type)
2020‑11‑01CoreFix issue creating a currency coin that shares a short name with another currency.
2020‑11‑01CoreCharacter level KV updates now only trigger a re-check of the character's KVs rather than the whole instance.
2020‑11‑01CoreEmergency bugfix for incorrect permissions on flagging notecard in HUD...
2020‑11‑01HUDTitler now re-requests title from the HUD on reboots, this helps if the Titler starts up after, or is rebooted after, the HUD completes its initial login stages.
2020‑11‑01HUDNow contains an inert Object Driver for updating any objects this user might own.
2020‑11‑01ObjectDriverNow has an auto update mechanism, though you will have to manually update object driver scripts to the new version (which supports the auto update mechanism). As updates can only be applied by the object owner, there is now an inert Object Driver script in the Region Server and GPHUD its self, which beacons once every 15 minutes with its version number, and objects owned by the same owner will request updates from it.
2020‑11‑01ObjectDriverObject Driver types that invoke scripts pass on certain variables about the calling object, namely OBJECTNAME which contains the (last registered) name of the connecting object (reset the object or wait 15 minutes if you change this), OBJECTTYPE containing the name of the object type invoked, and OBJECTKEY which contains the Primitive's UUID that was interacted with. (This specifically only covers NPC types and ClickScript / PhantomScript - using the standard click/collision types will not pass on these OBJECT details if you indirectly invoke a script via the Scripting.* commands)
2020‑11‑01ObjectDriverSupport for emitting link messages from the object driver
2020‑11‑01ObjectDriverThe object driver will pass the description of the object to the server when checking in. This must contain a valid JSON structure and currently only supports one parameter - objecttype, e.g. {'objecttype':'Buff Wizard'} - note that setting this up with an NPC type will shut down other objects due to the invalidity of logging in a character more than once at a time.
2020‑11‑01ObjectDriverSupport of three new ObjectTypes - PhantomCommand that runs a standard command on collision, and PhantomScript/RunScript which are comparable to RunCommand and PhantomCommand but use the new interface described above to pass variables about the source object to the script.
2020‑11‑01ProtocolAllow for suppression of boot stage link messages, not very useful for single script solutions and just generates 'noise' for the Object driver script objects
2020‑11‑01RegionServerThe contained inert Object Driver (the same one given by getObjectDriver) will now beacon its version and auto update any objects owned by the same owner as the region server (probably the instance owner)
2020‑11‑01RegionServerFix a flaw with the console interface
2020‑11‑01ScriptingNew function gsObjectEmitLinkMessage which can be used to cause a given Object (via Object Driver) to emit a link message
2020‑11‑01ScriptingNew function gsSetCharacterKVs, for efficiently setting multiple character level KVs at once (this method triggers a single user update after all values are set, legacy behaviour recalculated every logged in user after every update, and even the more refined version in this patch above still recalculates the character every change, bulk setting provides significant speed boosts)
2020‑11‑01ScriptingFloat support properly added to GSScripting - please be aware of type inference (1/2 is the integer (whole number) 1 divided by the integer 2, with an integer result... of zero. 1.0/2.0 is the floating point 1 divided by floating point 2 which produces floating point 0.5. These same caveats apply to LSL)

2020‑10‑11Corebug selecting characters with long names in a group and one very minor addition.
2020‑10‑11HUDFix problem where selection of nearby character would often select the wrong character.
2020‑10‑11ScriptingAdded gsNewLine() which returns the new line character for use in dialog titles, gsSay etc

2020‑10‑06CoreAttempt to mitigate a few ConcurrentModificationExceptions observed during slowdowns.
2020‑10‑06CoreAdded display of online time in last 1 week and 4 weeks to character sheet.
2020‑10‑06CoreEnsure results from SL Name Lookup API are cached, and report duplicate queries (as this implies incorrect lookups)
2020‑10‑06CoreUnify the SL username format (and retroactively update existing usernames) to avoid flooding the SL Name Lookup API service and getting my key blocked.
2020‑10‑06CoreCharacters.Show and Characters.Look are now allowed to be called from scripting.
2020‑10‑06CoreAdded process to do name lookup on all known UUIDs to attempt to finally compensate for the SL name change process.
2020‑10‑06HUDPrevent a duplicate HUD element from removing ALL titlers (duplicate or otherwise). Dependant on race condition.
2020‑10‑06ScriptingAdded gsGetAbilityPoints(Character) which gets the available ability points for a character.

2020‑09‑20CoreEvent Queue mechanics (work in progress)
2020‑09‑20CoreDon't write blank values, or the website's internal 'okreturnurl' to the alias data structure.

2020‑09‑16CoreMove template wrapper caching into the connection's state only.
2020‑09‑16CoreInitial support for event queueing

2020‑09‑07CoreFix bug in packaging of zone information that would only include one area per zone
2020‑09‑07CoreEvent KV's are only included in calculation if the Character is in one of the Event's Zones
2020‑09‑07CoreFix bug breaking all links in Introspection/GSFunctions
2020‑09‑07CoreTotalXP column on characters view page did not include EventXP
2020‑09‑07HUDSupport for outputting RP channel messages without the Character Name prefix (see GPHUDClient.NamelessRPPrefix). Note there is no way of retroactively attributing who authored a message that has no prefix like this (I think).
2020‑09‑07HUDRetransmit zone information on login (as a zone transition may occur before a character is selected, and the server won't know where to store this information).
2020‑09‑07RegionServerSupport for altitude ranging for meter auto dispense/attach (see GPHUDServer.DispenserMinimumZ / GPHUDServer.DispenserMaximumZ)

2020‑08‑30CoreExperimental (functional) support for OSGrid (/opensim?) based regions.
2020‑08‑30CoreOpen sourced the GPHUD project, now on GitHub. - see [[Open Source]]
2020‑08‑30CorePurging of all secrets previously stored in the (private) repositories and purged from git history.
2020‑08‑30CoreRelease JSLBot-Bridge module and new package for GPHUD Module with JSLBotBridge support.
2020‑08‑30CoreSupport for alternative branding, for open source project.
2020‑08‑30CoreMove to Java-11.
2020‑08‑30CoreProvide packaged releases for SLCore (useless standalone) and GPHUD, as well as a private 'full stack' release.
2020‑08‑30CoreRebuild the URL and Page handling code (in SLCore), modified appropriate connectors for GPHUD services.
2020‑08‑30CoreAutomated builds/releases.
2020‑08‑30CoreSupport for external configuration file for Java systems and LSL scripts
2020‑08‑30CoreSplit software services into modules, of which GPHUD is one. There are other non-open source modules I use.
2020‑08‑30CoreCreated bug with region distribution servers, and fixed it
2020‑08‑30CoreRemove camera permissions request in GPHUD for now to permit OSGrid version of auto attachment.

2020‑07‑15CoreCommand types now have a notes field, which is displayed in Introspection under a command's description, but doesn't pollute the 'list of commands'
2020‑07‑15CoreMenu items can now have a permission, permissions group and character group associated with them. If any of these are set, the user must have one of these for the menu to show. Default behaviour (all values unset) shows the menu item to all
2020‑07‑15CoreAdded command 'Faction.Leave' which lets a player leave their current faction (unless they're the leader, who can only leave if they're the last person in the faction)
2020‑07‑15CoreAdded secondary characters list, one shows retired characters, one does not.
2020‑07‑15CoreAdded 'Groups.Leave' command which can be used to leave an open group, if the group has a type (maps to an attribute) then the attribute must be self modifiable.
2020‑07‑15CoreMain menu changed so it can be per user - rather than a static central definition with sneaky conveyance backdoors, it's now invoked via a template (dynamic per user values) templated into a conveyed KV to replace this functionality, which leads to:
2020‑07‑15CoreChange Data API for Characters login to *require* a valid set of arguments (seems some null URLs are leaking in to a login here)
2020‑07‑15CoreIncreased number of menu elements to (arbitarily) 40, Submit button moved to top of page :P
2020‑07‑15HUDNow display 10 elements on a paged menu, rather than 9 (which didn't translate into UIX designs very well).
2020‑07‑15HUDUIX Main Menu first page is generated by UI module rather than UIX as this then re-uses the multi-page code properly

2020‑06‑28CoreAdded template --CURRENCY:LONG-- which gives the long coin named version of the currency sum
2020‑06‑28CoreResolved an issue where the version checker would poll ALL regions version information, including retired regions, which could not be updated, thus generating false alerts about out of date versions.
2020‑06‑28CoreAdded commands Configuration.deltaCharInt and Configuration.deltaCharFloat which will adjust a character's KV. Handles delegating and cumulative types appropriately, see API description for more details.
2020‑06‑28CoreRemoved support for Login Protocol Version 1
2020‑06‑28CoreFixed an issue where certain templated paged tables (audit and pool logs) would break on 2nd plus pages.
2020‑06‑28Core'Fixed' length checking issues with username formatter
2020‑06‑28CoreFixes a bug where titler/hud text might fail to update on login. This was caused by setting KVs in a character initialisation script, which would trigger an 'immediate update' to the client which would load all the conveyances. The character login code would later on manually change these to 'Initialising character...' and such other things ; since this bypassed conveyances this would not then get dynamically updated as it should until the value was next changed or reloaded. Resolution is to purge the conveyance cache for titler/hud text+color attributes such that they'll be repopulated in the final response to logging in. Of note (to self), the setting of KVs during initialisation triggers a 'push Conveyances' via the region server to the characters HUD, thus bypassing the normal Login flow of not loading conveyances until the end. This may have other implications.
2020‑06‑28CoreFixed a problem where the permissions editing page would struggle with Currency based permissions (Due to currency module not following the lower casing standards)
2020‑06‑28CoreJSON Templating for CURRENCY inputs now correctly guides the HUD to a TEXTBOX.
2020‑06‑28CoreThe Effects icons (transparent by default) will no longer generate errors about Effects not being enabled on instances configured such, the API call will be aborted into a silent NO-OP.
2020‑06‑28CorePrevent creation of a currency coin with a value less than 2. Setting a coins value to 1 misses the point of base coins, and setting it to zero breaks the currency entirely.
2020‑06‑28CoreFixed the getAgentID caller to not break if a single word username is suffixed with a space - the space would normally indicate a 'two part' username but if the space is a trailing space this would 'array index out of bounds' getting the lastname.
2020‑06‑28CoreColor parser added to COLOR type fields, this accepts LSL format (float triplet between 0 and 1 optionally with <> around it), RGB triplet format (0-255), HTML format (6 char hex string with optional # at the front) or a list of W3C supported color names (e.g. blue, green, etc, see [https://www.w3schools.com/colors/colors_names.asp W3C list here])
2020‑06‑28CoreFix bug with currency transfer to an offline character.
2020‑06‑28CoreRemoved all support for the 'PrimaryCharacters' table whose functionality has been replaced by the more reliable mechanism of 'most recently used by this avatar at this instance' approach.
2020‑06‑28ScriptingMulti message support added to GSScripting - adding multiple gsSayToChar etc will now generate separate say's in the HUD rather than attempting to merge them into one post with newlines ; this allows longer messages to be transmitted overall. WARNING: There is a 4 kilobyte limit on the response from a script which will include some basic HUD overheads and any potential 'next action' the HUD might have to take (e.g. further input from the user), stacking too much text will result in a failure of the communications protocol entirely (most likely) as the LSL received is set to max input of 4KB (an upper limit is required at the LSL end to avoid hitting the 64KB limit that all scripts CODE and all DATA must fit within ; bearing in mind that due to the way LSL works we must assume a 4KB transmission requires 8KB of ram due to 'pass by value' to function calls etc).

2020‑05‑31CoreVarious internal extensions to Pools objects to avoid everything going through static methods.
2020‑05‑31CoreThe characters module exposes a dynamic set of permissions ; Currency.Create and Currency.Destroy for every type of currency configured.
2020‑05‑31CoreCurrencies are optionally transferable between players, with taxation being applyable. Two commands, currency.transfer(paytax)(currencyname) spawn, e.g. currency.transferPayTaxGold (see introspection for your instances details). the 'paytax' version causes the sender to pay extra to cover the tax, the other version assumes the tax is deducted from the recipients ammount.
2020‑05‑31CoreThe characters module exposes some administrative commands for creating/destroying currency ; Currency.Create and Currency.Destroy requiring the same named permission.
2020‑05‑31CoreCommands added for configuring currencies - setBaseCoinNames, addCoin and removeCoin, all exposed through typical API endpoints and the web interface.
2020‑05‑31CoreGS Functions are now assigned to a primitive 'category' which is used to order their arrangement in the Introspection module.
2020‑05‑31CoreAdded a new module, Currency
2020‑05‑31CoreTax can be paid to a central character by setting KV Currency.TransactionTaxRecipient . Note if this character does not exist, all transactions will be prevented until resolved.
2020‑05‑31CoreCharacter Pool page shows a cumulative total (useful for currency pools)
2020‑05‑31CoreAdded summary row to character sheet (in web page) displaying the currency totals, in short and long coin name formats.
2020‑05‑31CoreThe Character configuration page allows a new type of attribute to be created, CURRENCY, if the Currency module is enabled.
2020‑05‑31CoreTemplates are supported that match the attribute name and contain the short form text balance, e.g. --GOLD--
2020‑05‑31CoreCharacter attribute population (that which happens at login time) will assign the 'default' value of currency to characters as a starting balance, if and only if the character has no existing transactions for this currency type.
2020‑05‑31ScriptingFunction gsGetBalance for retrieving a users current balance (as a raw number of base coins)
2020‑05‑31ScriptingFunction gsParseCoin which will reverse the above, e.g. converting '1s 2copper' into an integer of 102 basecoins)
2020‑05‑31ScriptingFunctions gsFormatCoins and gsFormatCoinsLong for converting a balance into a textual format (e.g. 123 becomes 1s 23c / 1 silver 23 copper )

2020‑05‑26CoreFix regions reporting as stalled due to callback passing changes (new server only).
2020‑05‑26CoreVersion checking is performed against an 'end of life' schedule. Inspite of sending new region servers, and messages, to the instance owner every single time they log in a character, some instance owners haven't updated their region server in 6 months. As some changes are 'breaking changes' ; i.e. the communications between HUD and Server are changing in a way that isn't backwards compatible, it is NECESSARY to upgrade the Region Server for continued functionality (though this is not enforced for simply 'new features'). Now, versions can be marked as end of life. Messages will be sent out two weeks prior to their withdrawl time, every hour, to instance administrators (those set to receive messages). After the deadline expires, products will be met with a SHUTDOWN response when they attempt to communicate with the server.
2020‑05‑26CoreCluster database changed.
2020‑05‑26CoreMenus configuration now allows you to delete menus. Other than Main, which would make the HUD stuff unhappy.
2020‑05‑26CoreObject Type bindings (connecting an object to an object type) now correctly discovers region/URL from the object's data rather than trying to read it from the (NPC) character, which prior to it being connected (which is what we're trying to do) will generate errors about no region being set (appropriately).
2020‑05‑26CoreConvert InputStream reading code to all use Scanners.
2020‑05‑26CoreThe command channel (/1) can now be opened to listen to scripted objects (e.g. attachments) on channel one, it will check the owner of the scripted object is the same as you. Note this opens some security weaknesses if you rez random objects other people give you. This feature is controlled by a KV 'GPHUDClient.OpenListener'. The inspiring use was 'outfits' in Second Life for a character that includes an attachment which switches the logged in character automatically. Please let me know of any abuse of this feature, it could be secured further with e.g. passwords (that you set) if necessary.
2020‑05‑26HUDMulti-message support (more than one say/sayas/sayto per communication, rather than forcing newline formatting).
2020‑05‑26HUDSupports opening the command channel (1) without the Owner filter set, and then checks all command messages are either from the HUD's owner, or an object owned by the HUD owner, if 'open command channel' mode is set in the appropriate (conveyed) KV.
2020‑05‑26ScriptingScripting supports the unary negative operator, i.e. negative numbers, e.g. Integer a=-4;
2020‑05‑26ScriptingNew GS Function gsGetCharacterKV which returns only the character level value for a KV (rather than the result of the hierarchy). Note you usually want gsGetKV instead.
2020‑05‑26ScriptinggsSayAsChar / gsSayToChar / gsSayAsHUD reworked to use multi-message support in HUD. This feature will be deployed once Region Server (and thus HUD) upgrades have been completed.
2020‑05‑26ScriptingFix an issue with parameter ordering for binary operators

2020‑05‑17CoreFixed an issue with the HTML Interface (User web interface) that would truncate posts that came through the network in multiple chunks, this would truncate inputs and produce odd results or internal errors in the encoding-decoder code.
2020‑05‑17CoreLinks on the index page version of viewing yourself did not link properly.
2020‑05‑17CoreFixed an issue where viewing a character's page, who may have some former 'pool' allocations that are no longer valid, would crash the page by trying to instantiate non existent pools. getPoolNullable now works properly and such pools are silently ignored.
2020‑05‑17CoreEdit character level KV pages weren't working properly in the web site.
2020‑05‑17CoreChanged the argument type to 'CLEAN' text for groups.create to avoid a group being created with an unsupported character in the name.
2020‑05‑17CoreThe search field on the 'View Characters' main page now performs a substring search for characters name, so a fragment of a characters name can be used.
2020‑05‑17ScriptingAdded logical AND (&&), OR (||) and NOT (!) to the language. Note that these work on integers and use 0 for false, 1 for true, and anything else counts as true for inputs. E.g. (0 && 1) outputs 0 (FALSE), while (4 || 5) will output 1 (TRUE).
2020‑05‑17ScriptingOperator precedence implemented, this will only affect script (changed and) compiled AFTER this patch is deployed. E.g. 1+2*3 would have previously evaluated as 9 but now uses the correct mathematical ordering and evaluates as 7.
2020‑05‑17ScriptingAdded list concatenation. Beware that 'overloads' list + integer ; typically a list evaluated in an integer context returns its length (e.g. Integer size=list; returns list's size), however we're now adding that 'list+integer' adds integer to the list, rather than adding the constant number to the size of the list. If the list's length is required it's recommended to use a straight casting statement with no maths, e.g. the Integer size=list; line, then perform maths on that value afterwards to avoid triggering concatenation).

2020‑05‑12CoreMoved various detailed stuff from a characters page to sub pages
2020‑05‑12CoreInternal reworking about Pools and Experience based pools, attempting to unify everything ahead of adding more pools and pool views.
2020‑05‑12CoreAdded paged view to the audit tables
2020‑05‑12CoreAdded pools view to the character sheet
2020‑05‑12CoreRemoved the weird XP suffix from all Experience Pools
2020‑05‑12CoreAdded paged view to characters list
2020‑05‑12RegionServerTweaked a couple of places where DEV and Production are evaluated in the HUD to avoid it trying to connect to the wrong cluster sometimes.

2020‑05‑08CoreReworked the internal way Commands get executed (see below)
2020‑05‑08HUDPrototype new HUD repeated all local chat on the RP channel ; now it only repeats its owners.
2020‑05‑08ScriptingAdded three new functions (gsSayToCharIfOnline, gsSayAsHUDIfOnline, gsSayAsCharIfOnline) that relay messages and discard the message if they're offline, rather than erroring your script. NOTE this will NOT protect you against using the HUD to target a nearby avatar that is not wearing the HUD as avatars often have multiple characters, and an avatar without a HUD can't be traced to a particular character.
2020‑05‑08ScriptingAdded new function gsHasPermission to check if a character's driver has a particular permission.

2020‑05‑03CoreCharacters.login/logout now marked as deprecated.
2020‑05‑03CoreDowngraded a 'Unexpected EOF' error from the External interface from a System exception (as it is in the normal LSL interface) to User exception so that it is properly reported back to the caller, rather than the masked 'Sorry internal error' of System exceptions.
2020‑05‑03CoreCreate UIX driver in GPHUDClient module, responsible for driving the layout of the HUD UI
2020‑05‑03CoreAdded new KV to Effects - Effects.ShowEffect, if set to false the HUD will hide the effect entirely from its buff timers (UIX capable HUD only)
2020‑05‑03CoreAvatar name reservation has been removed ; formerly a character could not be named after an Avatar as that name would be reserved for that avatar. With the 'Name Change' changes this caused non-resident suffixed names to be resolved to avatars via the LL getAgentID service, thus was blocking a lot of character creations unnecessarily. Sim administration can handle any potential grief cases themselves and thus this check has been completely removed from Characters.Create at this time.
2020‑05‑03CoreFixed a typo in the Visit XP awarded message.
2020‑05‑03CoreAdded 'onUpdate' support to KVs allowing a method to be invoked on value change. This was considered as an alternative to conveying UI configuration but ultimately was not used. As the infrastructural code may be useful in the future the feature has been left in the code but is presently unused.
2020‑05‑03CoreFixed a bug in the Generic XPPool awarding code that would check if the 'character was the same as self' without accepting there might not be an active character (due to administrative awards)
2020‑05‑03CoreFixed a bug in adding to a pool that assumed a character was selected (pools e.g. xp can be awarded administratively without an active character)
2020‑05‑03CoreAdded new (conveyed) KV, 'GPHUDClient.UIXMenus', if set to true this enables use of UIX for choice based dialog boxes. This can be set on groups (so users can opt in or out), individual users, etc. Please test before engaging as performance may vary (untested at this time).
2020‑05‑03CoreIf a username is presented that is not known the Linden Labs name lookup service will be called ; if a valid avatar key is found the entry is either created in the database (if the key doesn't currently exist) or located by key, and the name updated if it doesn't match the current name. This handles LL name changes where some component only provides the new username and we have no previous record of it. It was anticipated to adopt names wherever Second Life told us names, but apparently it still sometimes tells us old names (..........)
2020‑05‑03CoreThe External interface now supports a new JSON parameter - 'checkavatarpermission', if set it will ensure the supplied avatar name/uuid has permission External.ConnectObjects otherwise it will reject the connection - this can be used to provide a simplistic permissions check to ensure a given avatar is authorised at a given instance (instance owners automatically pass such checks at their own instance).
2020‑05‑03CoreAdded new (conveyed) KV, 'GPHUDClient.UIXBalance', if set to true, this balances the layout of the quickbuttons, placing 3 on either side of the main HUD panel. This helps the UIX dialog choices look less unbalanced as everything is now more symmetric around the center point.
2020‑05‑03CoreAdded static utility class to call the Linden Labs 'getAgentID' lookup service and resolve usernames to a UUID.
2020‑05‑03CorePrevented 'Safe Mode' name get method from throwing unexpected exceptions
2020‑05‑03CoreFixed a bug in the old login process that wouldn't properly pass on state to a virtual machine running the character creation script in some circumstances leading to an internal error
2020‑05‑03CoreAdd 'status' introspection page that shows connected entities and various other real time data.
2020‑05‑03CoreAdded new KV to Effects - Effects.EffectIcon which defines the UUID of the texture for the icon. If not supplied will use a little Coagulate logo :P
2020‑05‑03CoreMax server response size increased to 4KB
2020‑05‑03CoreCommunicate Effects timers upon apply/unapply of the effect, and append this package to the response at connect time.
2020‑05‑03CoreNew login methodology, hooking existing characters.initialise/switch/create code, logins now performed through GPHUDClient.connect/disconnect/postconnect. Resumption of an existing session (e.g. on region transition within a multi region instance) now properly supported rather than the HUD being replaced and reinitialised.
2020‑05‑03CoreFixed a bug in character creation which wouldn't immediately connect the request to a newly created character, generating a deeper error about no character being selected.
2020‑05‑03CoreCharacter creation will skip attributes of Group type where there are no open groups of that type. This presently sends an empty list to the HUD which will cause a dialog box with a default 'OK' on it, which will then try join a group called OK. Now, this attribute will be ignored by the login sequence (both v1 and v2) if there are no available options (open groups of that type), even if the attribute is 'mandatory'.
2020‑05‑03HUDSupport for a balanced layout of quick buttons (GPHUDClient.UIXBalance).
2020‑05‑03HUDSupport for up to 3 effects timers and logos. Timer to update these uses diminishing intervals - per second for effects <60 seconds, per 5 seconds if below 2 minutes, per 15 seconds if under 5 minutes and so on. Slowest update interval is 60 seconds or on reception of a message updating these effects from the server.
2020‑05‑03HUDSupport for rebinding the HUD main button to pop up a menu rather than dialog (controlled by GPHUDClient.UIXMenus).
2020‑05‑03HUDAdded prims and control interfaces for presenting a menu of up to 12 parameters. This can be used in place of dialog boxes by setting the GPHUDClient.UIXMenus KV to true.
2020‑05‑03HUDHUD Titler now properly supports blank or short title texts ; in the Config supplying a 'space' as the TitlerText will now properly blank the Titler Text rather than breaking the display entirely.
2020‑05‑03HUDLogin and flow control rewritten to login protocol v2.
2020‑05‑03HUDAdded UIX script to process UIX control messages and modify prim parameters (sizes, positions, textures, text, etc). Prim Descriptions become the controlling name (which is converted into a block of #defines rather than looked up at runtime).
2020‑05‑03ObjectDriverDisable callback validation. Disable DIGEST and COOKIE inclusion.
2020‑05‑03RegionServerDisable callback validation. Disable DIGEST and COOKIE inclusion.
2020‑05‑03RegionServerCommand prefix changed to ** to make it less reactive to emotive text. ( DEV instances use prefix !!, not that anyone has these )
2020‑05‑03ScriptingAdded two new function calls, gsAPIX and gsElevatedAPIX, which are equivalent to gsAPI and gsElevatedAPI but will throw a script error if the API call fails. The non-X versions simply return a response that is 'an error' (see evaluating it as an integer etc). However since this boilerplate checking code is tedious it's often omitted, however in most cases the API call failing is significant and problematic. It is recommended you use gsAPIX / gsElevatedAPIX wherever possible, only using the non-X versions if you either intend to check for errors yourself, or truely don't care if the operation fails. Otherwise debugging becomes quite difficult.
2020‑05‑03ScriptingAdded new function call gsGetZone to get the current zone name a character is in.

2020‑04‑05CoreNew module 'External', must be enabled to allow External API access, and individual developers must be both allocated a developer key by Iain Maltz and enabled to allow them to connect to a particular instance.
2020‑04‑05CoreAdded a new Interface Access Type of External ; almost all commands are available to an External component, other than those which create strange things, or delete things. Changes may be made in response to reasonable request.
2020‑04‑05CoreAdmin/Developer commands ; User.(Dis|En)ableDeveloper (SuperAdmin only) to allow a user developer access at all / External.GetDeveloperKey / External.(De)Authorise to allow a developer to access a particular instance
2020‑04‑05CoreAdded various 'External' API calls for getting record format information (rather than the simple message format the HUD needs) - External.Status dumps information about the connection in JSON format, and External.LookupAvatar will get an information dump about the set avatar.

2020‑04‑02CoreReviewed and refactored the database driver core and the data object layer.
2020‑04‑02CoreFixed configuration.set* not properly allowing null values as target values.
2020‑04‑02CorePeriodic VisitXP checks would not properly apply to instances using the default Experience module enabled state, only working on instances that had disabled and re-enabled it. Resolved to now check all instances that are set or have never been changed.
2020‑04‑02CoreAdded gsSayAsHUD (requires new region server + HUD from it)
2020‑04‑02DatabaseSchemaNew table to store pairings of instance IDs and authorise developer IDs.

2020‑03‑29CoreWeb admin to create effects. Their effect is configured through normal KV methods (e.g. go to Characters and edit an attribute)
2020‑03‑29CoreNew commands Effects.Apply and Effects.Remove to provide /administrative/ commands to add/remove effects - this is not an in character action (for e.g. a spellcaster), this is logged as the avatar using administrative powers, use for admin only.
2020‑03‑29CoreEffects bring two KVs ; Effects.ApplyMessage and Effects.RemoveMessage, communicated to the user when the effect is added/removed.
2020‑03‑29CoreNew commands Effects.Create and Effects.Delete. Associated permissions exist.
2020‑03‑29CoreNew command Effects.Show which shows any effects acting upon your character.
2020‑03‑29CoreAdded command Configuration.SetEffect for setting a KV upon an Effect
2020‑03‑29CoreAdded Effects module.
2020‑03‑29DatabaseSchemaCreate KV store for effects
2020‑03‑29DatabaseSchemaCreate table 'effects' to bind a named effect to an instance
2020‑03‑29DatabaseSchemaTable to connect effects and characters, with expiration times.
2020‑03‑29ScriptingNew function gsGetEffects that returns a List of active effects on a character.
2020‑03‑29ScriptingNew function gsEffectDuration that returns the time remaining on a given effect on a character.
2020‑03‑29ScriptingNew functions gsApplyEffect and gsRemoveEffect that allow one character (or NPC Object) to buff another character (or themselves)
2020‑03‑29ScriptingAdded the ability to assign a List type to an Integer, which will place the size of the list in the integer (previously would produce an unsupported cast error).

2020‑03‑24CoreAdded TemplateWrapper module, creates KVs for configuring prefix / suffix characters and creates Wrapped forms (WRAPPED:) of all existing templates, wrapping them in the prefix / suffix if and only if they contain content.

2020‑03‑22CoreCookbooks no longer email developers with any implementation errors (such as running it multiple times).
2020‑03‑22CoreAn oddity in character switching would leave the 'callback URL' associated with the old, disconnected character. Ensured this isn't miss-re-populated. Probably doesn't have much effect on anything, but still an anomaly that I should fix.
2020‑03‑22CoreAdded some guard code to SL API parser to catch some broken requests better.
2020‑03‑22CoreKV Instance.FilteredNamingList provides a comma separated list of banned words in a characters name - their name is split into 'parts' (based on dash, dot, space) and compares against the words in this list, if any are found the name is rejected. Note this filter list does NOT apply to 'automatically named characters' (which are named after the avatar) as this would leave them unable to create an initial presence in the instance. Expected usages are a list like 'god,king,queen,emperor' or whatever other muses your players may have.
2020‑03‑22CoreSystem now invites instance owners to [secondlife:///app/group/34ead140-555f-42f9-2b54-bb887554b70f/about GPHUD Instance Owners] which is used for low volume high priority traffic, features or feedback requests. There is also the [secondlife:///app/group/2a6790d0-c594-7467-804b-c8e398970188/about GPHUD Updates and Notices] group which anyone can join/invite to and gets notification of every release. There's also an open/free invite mostly dead support group [secondlife:///app/group/3b4def47-e6a7-bac7-cd13-7e9428b41f6d/about GPHUD Support]
2020‑03‑22CoreRegion level KVs now have a red background and an advisory to normally use Instance level values, which is what most people should be doing. Region level settings only make sense if you have multiple regions and want them to behave differently. Instance level affects all regions, present and future.
2020‑03‑22CoreAdded Zoning.Delete and an associated HTML component for removing zones. Triggers zone definition updates to appropriate region(s).
2020‑03‑22CoreKV Instance.AllowedNamingSymbols which defines what symbols (characters) are allowed in the name of a character, by default A-Z, a-z and space are allowed with a few other characters added by the default template, add any additional desired symbols here, otherwise they are filtered. This is yet ANOTHER attempt to stop people entering non name stuff into their name (e.g. Scent: Smelly), which will now reject the characters people use to make a list items (e.g. the colon). Inspite of the LARGE ALL CAPITALS TEXT in the dialog box they enter a name into, some people are still doing this. Probably there will always be 'one'.
2020‑03‑22CoreAttribute creation now checks for conflicting template names. Notably this will prevent creating an attribute called 'Health' or 'Name' which are likely to cause unexpected issues at some point.
2020‑03‑22CoreRoller now enforces number of sides on the dice to be at least 1, gsRand(x,y) now requires that x <= y, avoiding a deeper exception in the Java API that then gets re-thrown as a masked System Exception
2020‑03‑22CoreRecently, Second Life has stopped sending the 'Object's Owners Name' information properly with the request (I guess name lookups can always be risky if the central services at LL fail), this would generate null exceptions and other undesirable behaviour. This was changed to fall back to using a local key->username mapping lookup if there is no information supplied by the grid. Changed in several places, all of which occur during early request processing.
2020‑03‑22HUDAvatar (character) selection types (SENSOR, CHARACTER, gsSelectCharacter, etc) will now properly display the description in the character-selection dialog box, not just the manual entry page.
2020‑03‑22RegionServerContains updated HUD component.
2020‑03‑22ScriptingAdded two new functions that return a List of Strings - gsGetGroupsByType and gsGetOpenGroupsByType.

2020‑03‑09CoreAdd ability to suppress various errors from being mailed to developers
2020‑03‑09CoreSuppress error mailout for avatar->char lookup failure (aka 'avatar xxx is not wearing the hud or not logged in')
2020‑03‑09CoreProduce a more meaningful error message if there is more than one attribute using a 'group type'.
2020‑03‑09CoreSome calls to methods, e.g. characters.initialise that chains characters.login require the JSON (originating request) to e.g. retrieve the callback URL (in this case). Calls made to gsAPI set up a fresh state since they can be invoked using a variety of 'initiators' (CALLER, TARGET etc), this would cause some issues with character initialisation and now the GS virtual machine allows an initial state to be supplied, if the invoker for the gsAPI is the same as the VM invoker then the JSON request object is copied to the new state allowing the retrieval of JSON request data by the deeper API. Essentially fixes some oddities around character initialisation.
2020‑03‑09CoreZone transitioning mistakenly had the 'new zone' parameter set to mandatory, however it is possible to leave all zones in an instance upon which this will be blank/null, and thus is now set to not mandatory.
2020‑03‑09CoreImproved the description of various KVs relating to experience awards to clarify the purpose and units used

2020‑02‑09CoreFix oversight with a region with no avatars on it.
2020‑02‑09CoreProvide a meaningful error if a user somehow calls zoning.deleteVolume with an invalid volumeID.
2020‑02‑09CoreScripting added function call gsElevatedAPI, the same as gsAPI but bypasses all permissions checks (except explicit instance owner checks, or cluster superuser checks)
2020‑02‑09CoreReboot remote Objects that provide no callback URL (workaround).
2020‑02‑09CorePublishing of a group returns a meaningful error if that group no longer exists.
2020‑02‑09CoreScripting now supports privileged operations, these can only be compiled by a user with permission Scripting.CompilePrivileged.
2020‑02‑09CoreScripting compilation is now State sensitive.
2020‑02‑09CoreFix the Scripting configuration page to only show your own instance's scripts rather than all (globally) scripts. Accessing another instances data, including scripts, causes an internal 'consistency violation' (Logon State / Data State mismatch), which is ultimately masked as an 'Internal Error' to end users.
2020‑02‑09CoreSwitch texture-service to use picture-service (LL change).
2020‑02‑09CoreProperly scale the logo's displayed on the website.

2020‑01‑05CoreReduce max size of 'disseminate' command to region server from 3KB to just under 2KB, this is because the region server will return the request as a response to us, but truncate it at 2K causing a JSON parsing exception. This is related to updating conveyances en mass, e.g. titler text changing.
2020‑01‑05CorePrevent aliases from calling quick buttons (to avoid another possible loop that hasn't been seen)
2020‑01‑05CoreEnsure menu contains an element for the called command, rather than simply JSON erroring and throwing a System level exception as a result.
2020‑01‑05CorePrevent quick buttons from calling quick buttons (someone wired a quick button to invoke its self, which just smashes the stack eventually)
2020‑01‑05CoreThe 'command argument is mandatory' checker wasn't working properly, which would cause internal errors later on if arguments that are mandatory were not supplied. Fixed.

2019‑12‑22CoreReverted domain name change due to lack of stability of TLD in new domain (?!)
2019‑12‑22Core*Instance.Login works near the GPHUD server (update required) and will IM you a login URL, useful if you cant get the HUD to start any more.
2019‑12‑22CoreWrite closure time to any event visits when avatar disconnects, or is disconnected
2019‑12‑22CoreRate limiting on error reporting emails ; emails are 'signatured' by the exception and location it originates and suppressed to 1 every 15 minutes. Getting a few thousand mails in a minute is something my infrastructure handles, but not my mail readers (android gmail reader crashes, thunderbird locks up ^^)
2019‑12‑22CoreFix a failure of login state to inherit the instance from the character, causing a weird 'no instance selected' despite a character selected, which would previously auto-resolve at next page load anyway...
2019‑12‑22CoreFix issue with events where visits would only be registered if there was an event entry message (both for zone transitions during event, as well as presence in zone when event starts)
2019‑12‑22CoreDrop regionserver/HUD ping interval to 5 minutes to improve accountability.
2019‑12‑22CoreRecursive templating no longer kills the server. You'll get a painfully long error about something recursing instead.
2019‑12‑22ObjectDriverObject driver no longer owner-says event related start/stop messages.
2019‑12‑22RegionServerAdded method to send IM to a given user on the sim ; used by instance.login, since the user maybe has no HUD to communicate with.

2019‑12‑19CoreDatabase interface changed ; no longer a single method with an 'optional' flag that permitted nulls versus exceptioned, there are now two separate calls, xxxNullable which may return nulls, and xxx which will exception on null data (this is inverted at the SQL level with 'nn' for 'nonnull' methods, as they are less 'pure' here). This enables proper analysis of Null flow as otherwise the methods are always ambiguous to static analysis.
2019‑12‑19CoreInternal reworking of nullable calls, nullable/nonnull annotation marking and code analysis as a result. May be some initial teething issues but code is of better quality now.
2019‑12‑19CoreCleared 2000+ code inspection notes, tightened things up, etc etc
2019‑12‑19CorePatch to fix issue with templater converting nulls into empty strings, which would cause various KVs to be not hierarchically processed properly, including the 'Name' conveyance that goes out to the HUD, which would break the RP Channel prefixing.
2019‑12‑19CoreConversion to StringBuilders (it pleases the IDE :P)

2019‑12‑12CoreCorrected an internal error when trying to assign an object behaviour type to an object
2019‑12‑12CoreFix issue with Objects NPC editing form
2019‑12‑12CoreRewrote 'User Interface' (web site) preamble to better log in and select characters and stuff. Likely no-one other than me will notice at this point.
2019‑12‑12CoreRebranded URLs to 'HTTPS://Coagulate.SL'
2019‑12‑12CoreCleaned up a bunch of compiler warnings, should have no effect on anything.
2019‑12‑12ScriptingSupport for zero argument GSFunctions
2019‑12‑12ScriptingAdded function gsGetUnixTime which works comparably to llGetUnixTime (which is a fairly universal standard called Unix time or Epoch time), it returns an Integer. As integers are 32bit, like Second Life, this implementation is prone to the 2038 bug [https://en.wikipedia.org/wiki/Year_2038_problem (Wikipedia:Year 2038 Problem)]

2019‑11‑21CoreObliterate developerkey in JSON responses and callbacks
2019‑11‑21CoreUpon login to the web interface (not via SSO from SL), if no instance or character is selected, assume the most recently active character/instance rather than prompting.
2019‑11‑21CorePrimitive support for NPCs, you can make a character and '/1characters.makeNPC' it which will reassign its ownership to the SYSTEM account, which can then be used by Objects. Conveyances and titler text work in general.
2019‑11‑21CorePrefix errors with >>> not *** which upsets nearby region servers
2019‑11‑21CoreSupport transmissions to objects
2019‑11‑21CoreFixed issue where events from scripts to people other than the caller weren't being dequeued properly, preventing cross character interactions.
2019‑11‑21CoreRemoved GPHUDClient.close, for closing the web panel, which escaped the purge.
2019‑11‑21CoreNew interface type 'Object' determining what calls an object can make
2019‑11‑21CoreObjects module - see [[Objects]]
2019‑11‑21DatabaseSchemaNew table ObjectTypes for configuring object behaviours
2019‑11‑21DatabaseSchemaNew table Objects for logging connecting objects
2019‑11‑21HUDRevised shutdown/terminate handlers, release URL on shutdown.
2019‑11‑21ObjectDriverOperating (interacting) modes: CLICK, NONE and PHANTOM (volume detect greeter style)
2019‑11‑21ObjectDriverNew feature (script) available from the region server
2019‑11‑21RegionServerRevised shutdown/terminate handlers, release URL on shutdown.
2019‑11‑21ScriptingAdded Scripting function gsIsANumber, which will tell you if a string->integer cast will succeed or crash your script, if attempted.

2019‑11‑15CoreScript create/save is audited, along with the compilation state (one of: parse failure, compilation failure, all ok)
2019‑11‑15CoreRemoved the HUD web panel code
2019‑11‑15CoreShorten release notes URL at login
2019‑11‑15CoreFixed issue with joininstance a new region that would give an error about no instance selected
2019‑11‑15CoreRecord region global co-ordinates on connection.
2019‑11‑15CoreEnsure module errors don't break a permissions group's display (such as disabling a module while permissions are assigned from it giving 'module x is not enabled')
2019‑11‑15CoreAdded (and removed from instance.owner bindings) permissions 'Instance.PermissionsMembers', 'Instance.CookBooks'
2019‑11‑15CoreAdded script function gsTeleport to teleport a user
2019‑11‑15CoreAdded KV Instance.RunOnLogin and permission Instance.SetLoginScript for causing players to run commands on login (e.g. teleporting to faction homes)
2019‑11‑15CoreCreated Teleportation module, see Introspection/API and Introspection/Permissions for new added stuff. Also gsTeleport for use in scripts.
2019‑11‑15CoreTransfer URL on character switch earlier, to avoid early logon scripts from failing with 'not online' errors
2019‑11‑15DatabaseSchemaExtend Region table to include global x,y co-ordinates.
2019‑11‑15DatabaseSchemaAdd landmarks table.
2019‑11‑15HUDSupport 'teleport' command to initiate teleport of wearer.
2019‑11‑15HUDSupport logon script

2019‑11‑11CorePermissions editing page is now a bunch of tickboxes. Individual permissions can still be added/removed through the appropriate 'COMMAND's.
2019‑11‑11CoreKV 'Instance.CharInitScript' which can define a script name which is called during early character logon ; see the [[Scripting]] documentation for more information!
2019‑11‑11CoreAbility to chain command calls into the GS VM exist state
2019‑11‑11CoreReworked permissions so less things are locked exclusively to the instance owner (instance.owner permission). Instance owner permission is now only used to protect a few fields that even the instance owner shouldn't change.
2019‑11‑11CoreWhole bunch of new permissions to cover off abilities formerly only available to the Instance Owner (instance.owner).
2019‑11‑11CoreRegion servers can now be deployed by any user with the appropriate permission (Instance.ServerOperator).
2019‑11‑11CorePermissions now have an attached 'power level', based on their ability to cause large scale disruption to an instance, or perform actions that are difficult/impossible to reverse.
2019‑11‑11CorePermissions pages now colour the permissions red/yellow/green based on their high/medium/low power ranking, this is an attempt to stop people just blindly assigning instance-destroying permissions without realising it.
2019‑11‑11ScriptingAdd gsGetGroupByType function to Scripting

2019‑11‑08DatabaseSchemaAdded 'scripts' and 'scriptruns' tables
2019‑11‑08HUDAllow message to contain both ownersay and localsay content
2019‑11‑08ScriptingAdded Scripting module. See the specific documentation here [[Scripting]]

2019‑10‑29CoreCommunicate URLs to open on a different keyword
2019‑10‑29HUDCorrectly pick up the URL to open and don't assume its our inbound URL.

2019‑10‑27CoreFix missing 'spend ability points' on login. Actual problem was HUD not internally relaying 'incoming' pushed messages from the HUD to UI module, thus 'pushed' UI elements would fail.

2019‑10‑23CoreFix a problem where printing state might struggle if there is no character selected
2019‑10‑23Core@URLs are now case insensitive
2019‑10‑23CoreAdded release date to info panel (top left) on website. Version and release date link to the release notes (this)
2019‑10‑23CoreFix a problem where unresolvable character/avatar might return an error about 'incorrect number of arguments' rather than explain what couldn't be found
2019‑10‑23CoreAvoid internal error if no name is given for new character.
2019‑10‑23CoreLogout command which the HUD will call during shutdowns (/1shutdown)
2019‑10‑23CoreBug in boolean parser of database information (incorrect equality test)
2019‑10‑23CoreCouple of race conditions where an item is removed by another actor while we are trying to view it
2019‑10‑23CoreFixed a bug in the 'input interface' checker - commands are now correctly restricted as listed in the API
2019‑10‑23CoreCharacter HUD ping checks now update the lastrx timer and only occur every ten minutes
2019‑10‑23CoreAdded 'health.set' command and KV 'health.allowSelfSet' which enables this command and simply lets health be set to a number, assuming it meets allowNegative and initialHealth range checks.
2019‑10‑23CoreFix an issue where module enablement checks took place before instance had been decoded and thus always returned false, when navigating to @URLs
2019‑10‑23CoreChanged State detection method during cluster node pre-startup checks
2019‑10‑23CoreDeparting Avatars code no longer does weird indirect lookups via character, this will prevent 'visits' from being left in the 'open' state and accumulating limitless visitation time, visits are now closed out for the avatar completely when the avatar is no longer reported as being on sim (by the region server)
2019‑10‑23CoreAdded 'Publishing' module which allows configuration of publicly published information about your instance, most likely for inclusion in your own web content.
2019‑10‑23CoreAdded Notes module, see introspection. Can make notes against characters, or avatars, they can be shared with the player or admin only. Notes.View permission to view others notes and admin only notes, Notes.Add permission to add notes. Commands *Notes.Avatar and *Notes.Character available to use, available in web page, notes summary appears in character summaries, main menu has 'View Admin Notes' button. Module is optional and must be enabled (defaults to disabled)
2019‑10‑23CorePing out to character connections when silent for 10 minutes, ensure they're still alive, or log out the character.
2019‑10‑23CoreFix problem where templated COLOR types would become surrounded twice, e.g. <<1,1,1>>, this causes a black HUD titler in SL as it's an invalid format.
2019‑10‑23DatabaseSchemaAdded tables to store notes against an avatar (per instance) and against a character.
2019‑10‑23HUDLogout command which the HUD will call during shutdowns (/1shutdown)
2019‑10‑23HUDCommunications library rewrite, now CommsV3 using a set of Virtual to Real host mappings randomly. Performance improvements likely. Loss of ability to retransmit failed messages, however, this should generally 'never' happen (and is being monitored). Comms will cycle virtual nodes if one fails, but the transmission will have been lost. Virtual nodes are remapped automatically prior to any planned outage of a particular node thus is transparent to the communications library.
2019‑10‑23RegionServerIncorporated CommsV3 into server code
2019‑10‑23RegionServerMerged Dispenser and Visitor module since they perform comparable tasks (regularly seeing 'who is on sim/parcel'). Upgraded to CommsV3.
2019‑10‑23RegionServerFixed the remote dispenser(?)

2019‑06‑22CoreSupport for populating INT/FLOAT/TEXT input types at character's login (i.e. first time). No longer exception loops and breaks the HUD.
2019‑06‑22CoreModified name input to contain lots of capitals pointing out that 'name' means 'name'
2019‑06‑22CoreAdded command groups.join which allows players to change groups connected to an attribute, provided the attribute allows self-change and the target group is open.
2019‑06‑22CoreLog failed 'transmission reply' parsing. This is probably people entering stuff with [] or {} surroundings and will be fixed by the changes to the HUD too.
2019‑06‑22CoreChanging to same owner would error when 'same' was 'no' owner
2019‑06‑22CoreProhibit names starting with > (used to imply dereferencing an avatar into a character field, used by dumb radar code)
2019‑06‑22CoreEscape substituted strings, prevents 'Has $20' producing various 'missing group' errors
2019‑06‑22CoreEnhance logging or close various Null exceptions, mostly caused by things being edited in two places at once or no value supplied.
2019‑06‑22CoreAdded Instance.GetServer command and Instance.GetDispenser
2019‑06‑22CoreCorrect JSON response encoding to preserve 'non standard' characters in e.g. titler text
2019‑06‑22DatabaseSchemaKV tables changed V column to binary rather than text, similarly auditing oldvalue/newvalue/notes. This allows them to store and preserve 'non standard' characters.
2019‑06‑22HUDIf registration fails, click the HUD for a new attempt (up to the max of 10), rather than just spam the server as fast as possible until the max is hit.
2019‑06‑22HUD/1shutdown command supported by HUD, mostly just for testing sake
2019‑06‑22HUDGPHUD emergency shutdown now works, preventing the HUD ultimately crashing into the 'spam control' when registration looped.
2019‑06‑22HUDBlock input surrounded by [ and ] as well as { and } due to bugs in LL's JSON implementation
2019‑06‑22HUDMinor tweaks to attachment/detachment routines to try make huds go away (some weird viewer glitch), as well as on region crossing
2019‑06‑22RegionServerSupports remote dispensers (see Instance.getDispenser)

2019‑06‑17CorePrevent issue with isAdmin for a permissions group where the check is against a non member
2019‑06‑17CoreGuard against null/empty attribute type during creation
2019‑06‑17CoreAdded healing module command healRollChance which enables pass/fail fronting to healing.
2019‑06‑17CoreBlock against adding permission that resolves to a null reference (no longer exists?)

2019‑04‑30CoreAdded new KV scope 'NONSPATIAL' which excludes region zone and event from calculations ; this is important for some things such as XP awards where the target character may not even be logged in, and thus only 'persistent' information such as groups, character and instance data should be taken into consideration.
2019‑04‑30Core'Faction.XPPerCycle' reduced from COMPLETE to NONSPATIAL
2019‑04‑30Core'Experience.GenericXPPeriod' (implements custom XP types) - KV scope reduced from COMPLETE to NONSPATIAL for the same reason.
2019‑04‑30CoreXP types now properly compute the limits from the /targets/ hierarchy not yours, which would create inconsistent results in awarding and the 'next available' timer.
2019‑04‑30Core'Faction.XPCycleLength' reduced from COMPLETE to NONSPATIAL
2019‑04‑30CoreThe following KV scopes have been altered ; their previous setting allowed some configurations that didn't make sense and wouldn't really be implementable, e.g. having different 'max XP per week' in different regions ; why would anyone do this, and what does this even mean for an offline character ; alternatively offline characters couldn't receive XP. Instead it makes sense to ignore the 'location' of an avatar when working out 'max XP'
2019‑04‑30CoreSetting an XP limit to zero prevents XP being awarded (this behaviour is not changed), however it now reports the next XP award is available 'NEVER' rather than 'NOW'.
2019‑04‑30Core'Experience.GenericXPLimit' (implements custom XP types) - KV scope reduced from COMPLETE to NONSPATIAL to remove dependance on location of character.
2019‑04‑30Core'Experience.AbilityPoints' (ability points available to character) - reduced from COMPLETE to NONSPATIAL.

2019‑04‑29CoreVarious sorting issues on the character summary page
2019‑04‑29CoreAllow unknown permissions in permissions groups without internal erroring (when an attribute has been deleted for example)
2019‑04‑29CoreGroups module has groups.invite and groups.eject, for admins/owners of character groups. Faction invite/eject is now a stub for this that just fills in the player's faction automatically. Note 'groups.invite' requires a group as the first parameter, faction.invite does not as it is implicit. You can alias these commands to use e.g. --FACTION-- (or more sensibly --GUILD-- etc) to use the invokers current group, where the group is of a 'type' (a character can only be in one group of a given type, e.g. race, class, guild, faction - groups with no type have no exclusivity)

2019‑04‑20CoreInstance Owners now get warned during HUD attach if their region server is out of date.
2019‑04‑20CoreAliases can now be deleted.
2019‑04‑20CoreGive the Instance Owner a new GPHUD Region Server if it is out of date, when they attach the HUD.
2019‑04‑20CoreRegistering region servers now get a warning message on connecting, which they say locally.
2019‑04‑20CoreAdded command 'GPHudClient.SetAltitude' which permits the player to define their per-character z-offset for the titler (height above head). (Requires GPHUD Region Server 3.6.2 on the sim)
2019‑04‑20CoreNow branded as 'GPHUD Cluster', the 'server' term is deprecated due to ambiguity between region servers (LSL scripts) and cluster servers (Linux virtual machines)
2019‑04‑20CoreAdded Cluster banner to startup sequence.
2019‑04‑20CoreAdded GPHUDClient.TitlerAltitude KV, a delegating float that defines the offset of the titler component from the avatar's head (vertically). This can be set globally, group, character, etc.
2019‑04‑20HUDInstance Owners now get warned during HUD attach if their region server is out of date.
2019‑04‑20HUDSupport dialog box options longer than 24 characters (as well as one can), this otherwise would cause issues for certain long character names and reducing name length to 24 causes issues with 'xxx resident' names
2019‑04‑20HUDReduced startup banner size
2019‑04‑20HUDAdded ability to move the titler up and down, based on delegating KV 'GPHUDClient.TitlerAltitude' (see server section above)
2019‑04‑20ItemGiverNow supports prefix matching for giving out items (not publicly usable feature presently)
2019‑04‑20ItemGiverNow shows what it gave, to who, and when, in floating text. Just for fun really.
2019‑04‑20RegionServerRebranded as 'Region Server' rather than 'Server'.
2019‑04‑20RegionServerReduced startup banner size
2019‑04‑20RegionServerEmits warning on startup if out of date

2019‑04‑15CoreEXPERIENCE attributes now support a 'group type', and owner/admin of those groups can award the xp to their group members through experience.award, without avatar level permissions. Like faction XP I guess. (hmm)

2019‑04‑05CoreSupport for custom EXPERIENCE attributes.

2019‑04‑01CoreRemove secondary and unpopulated MOTD login message ('Instance MOTD goes here')
2019‑04‑01CoreFix internal exception in Instance.sendAdmins (see Instance.admin command) which tried to use an unnecessarily and inappropriately sorted structure.
2019‑04‑01CoreDisable templating on character attributes ; they themselves become templates but should not be templatable at a character level.
2019‑04‑01CoreBroken links to factions in the factions page (side menu worked fine)
2019‑04‑01CoreUnited spelling of colour (British, as I am) to the American form color.
2019‑04‑01CoreCookbook to create 'Retire Self' setup, along with confirmation submenu
2019‑04‑01CoreValidation framework added to KV setting, e.g. UUIDs and Colors are checked as being of appropriate form. Unless they're a template.
2019‑04‑01CoreCookbooks give better error reports sometimes, added ability for Cookbooks to create a new menu.
2019‑04‑01CoreUpdated KV editor to be inline/javascript, particularly 'command' type KVs are now selected from dropdown.
2019‑04‑01CoreCookbook to configure a generic 'Multiple characters' setup
2019‑04‑01CoreCreated new command argument type TEXT_INTERNAL_NAME which enforces typable characters and no spacing, used for naming some things
2019‑04‑01CoreCreated new command argument type TEXT_CLEAN which enforces 'typable characters', used for setting names and stuff
2019‑04‑01CoreBroken links to create group from a 'type specific' group listing page

2019‑03‑27CorePossible exception caused by 'tick boxes' in pages ; added NPE guard to length-checking validation.
2019‑03‑27CoreOnly email developer on logged Exceptions if Exception is of severity INFO or higher ; 'errors' in the template introspection page were logged as 'FINE' (debug) level messages, but were filling my work queue to 'fix'

2019‑03‑24CoreLogos on pages, including instance selection
2019‑03‑24CoreAdded maximum-length attribute to arguments, implemented for all created commands.
2019‑03‑24CoreNames limited to 32 characters, to ensure they can be retired. If names are longer than 32 characters consider what's a name and what's a title :P
2019‑03‑24HUDMitigate against SL bug where input is surrounded by {}, which some people seem to surround names with.
2019‑03‑24HUDIf character fails registration/login (e.g. to a name too long), the process will be retried up to 10 times before the GPHUD shuts down.

2019‑03‑14CoreError in character login if experience/ability points module not enabled
2019‑03‑14CoreTighten pre-page filters to require an instance to be selected, to avoid crashing pages. Help and Logout are exempt.
2019‑03‑14CorePush GPHUDClient.widthmultiplier as conveyance 'sizeratio' to HUD
2019‑03‑14CoreCorrected user (to avatar) links on Audit page. Annotated SYSTEM avatar with 'explanation'.
2019‑03‑14CoreTypos in line when awarded Visit XP
2019‑03‑14CoreModified Titler Color cookbook to add an instance default value for characters.titlercolor as white
2019‑03‑14HUDDouble quotes (') will now work in titler text. Use proper escaping for JSON transmission to titler.
2019‑03‑14HUDHUD now accepts blank lines as inputs, so you can erase e.g titler text by entering no value.
2019‑03‑14HUD HUD will now resize/position its self in response to the GPHUDClient.widthmultiplier value

2019‑02‑25CoreAdded roller.rollOnly, essentially the same as roll but without bias or roll summation.
2019‑02‑25CoreRemoved GPHUD specific understanding of avatars
2019‑02‑25CoreCommand aliases may now override the description of wrapped commands
2019‑02‑25CoreServer code rolled into core cluster services.
2019‑02‑25CoreAdded Cookbooks - automatic configuration of GPHUD.
2019‑02‑25CoreAdded cookbooks to allow user to pick titler text / color
2019‑02‑25HUDHUD now detaches when you transition into an unsupported region (TERMINATE response now works). Unlikely to matter for experience/autoattach users.
2019‑02‑25ProtocolCommunications stub rewritten. Twice. Now faster and more reliable (TM)

2018‑11‑23CoreCoded work around to sim-stalling SEC-6284 (details not available).
2018‑11‑23CoreIntegrated remaining external services into cluster.
2018‑11‑23CoreDon't reset HUD on same-region teleportation.
2018‑11‑23CoreNew server mesh model.

2018‑10‑29CoreAdded template --HEALTH--
2018‑10‑29CoreAbility point spend loop is fired on login.
2018‑10‑29CoreUser error on unknown alias.
2018‑10‑29CoreWebsite links to active node to avoid outage issues.
2018‑10‑29CoreRun 'ItemGiver.getGiver', stock it, and alias 'ItemGiver.get'
2018‑10‑29CoreNew module 'ItemGiver'
2018‑10‑29CoreSpending ability points loops until all spent.
2018‑10‑29CoreSupport MAX for Character Attributes.
2018‑10‑29HUD HUD - correctly limits >12 sensor results to 11/12 nearest results.

2018‑10‑28CoreAdded support for nested aliases.
2018‑10‑28CoreFixed issue where char named after avatar would be targetted in preferences to whatever char the avatar is actually playing (eager 'character' lookup matching avatar name thus not falling back to indirect lookup via avatar). HUD now marks avatars with '>' prefix in character fields.
2018‑10‑28CoreAdded health module.
2018‑10‑28CoreUpdated RollAgainst command.
2018‑10‑28CoreAdded RollAttackAgainst command.

2018‑10‑25CoreAdded ability to link random 3rd party website to the user.
2018‑10‑25CoreMigrated architecture to fit on 3-node mariadb cluster; this is likely to be better exploited in the future.

2018‑09‑04CoreImprovements - retiring a character (self / admin)
2018‑09‑04CoreRemote reset of hud for forced character switching.
2018‑09‑04CoreGroups on 'view characters' page.

2018‑09‑01CoreBug fixes (Undefined BOOLEAN in Menu templating, incorrect check for INTEGER/FLOAT ability point expense types, exception handling esp with broken templates)

2018‑08‑22CoreFix bug that prevented zone transitioning to 'no zone'

2018‑08‑20CoreClean up a flawed permissions check in setting up permissions groups.
2018‑08‑20CoreSupport for RPChannel, defaults to /2
2018‑08‑20CoreFix issues with CHARACTER_PLAYABLE selection type, used by characters.switch command.

2018‑05‑19CoreRelease to support CharGroup selection and menus >12 elements

2018‑03‑08CoreInitial release