Full Conservative ChangeLog

4 December 2015

  • Release 7.122 - backports from progressive.
  • Ported the wearables and attachments subsystem for both RLV and the changeappearance command.
  • Switched to the grid resolution functions that progressive is using.
  • Used the same system that progressive is using for finding primitives.

15 August 2015

  • Release 7.121 - back ported performance improvements from progressive.
  • The same group handling mechanism from progressive 8.37 has been used to speed up commands and requests.
  • The download and upload commands have been fixed to allow for a format.
  • Changed service dependencies to Netman and eventlog for compatibility.

4 August 2015

  • Release 7.120 - fixes.
  • Upgraded the Uri-escape functions.
  • Fixed issues with group invites not being sent (thanks CatalinaHunter).

31 May 2015

  • Release 7.119 - hotfix for setparceldata to allow setting parcel flags (please see the API on the setparceldata command).
  • The setparceldata was unable to set parcel flags and this release adds the parcel flags structure to the function responsible for setting data. Note that you can set the parcel flags by supplying a CSV list of flags or you can also supply an integer with the values of the flags ORed.
  • Added requirement for minimal supported runtime.
  • Icon changed. :-)

30 May 2015

  • Release 7.118 - hotfix for finding parcels.
  • The parcel search has been amended to find the closest matching parcel.
  • The setparceldata command no longer checks for estate rights since it is irrelevant.
  • Corrade now properly logged to its own source when installed under Windows.

12 May 2015

  • Release 7.117 - performance optimizations and bug fixes.
  • Lowered the priority of all threads.
  • Re-add forcible exit which should fix issues with Corrade not terminating.

1 May 2015

  • Release 7.116 - stability enhancements.
  • Unix specifics were removed since they caused segmentation faults on various systems. Corrade now logs to its own log-file found in the logs directory on Unix and benefits from the implementation of mono-service to perform clean shutdowns. This stability fix should prevent random SEGVs on Unix - apparently, mono wrappers are still unstable.

29 April 2015

  • Release 7.115 - this release marks the end of Corrade 7 (at revision 156).
  • Remove dynamic event handlers and treat them separately in the configuration.
  • Eliminated a SEGV stemming from early logins before structures were initialized.

29 April 2015

  • Release 7.114 - addendum to 7.113, the radar notification has been split in avatars and primitives sub-notifications.

29 April 2015

  • Release 7.113 - feature additions.
  • Added the radar notification which can be turned on or off in Corrade's configuration file Corrade.ini.

29 April 2015

  • Release 7.112 - fixed crash on mono on Unix platforms.
  • A random bug has been found and addressed that would make Corrade crash on Unix platforms when running under mono-service.

29 April 2015

  • Release 7.111 - small feature additions.
  • Corrade now saves the notification state on every notify command to make sure that the state is kept up-to-date.
  • Some settings read from the configuration file are now loaded dynamically: notably the login-timeout related settings and Corrade's draw distance.

27 April 2015

  • Release 7.110 - feature additions and fixes.
  • The AIML component now saves state data that is collected while the bot runs. A new file will be created on shutdown called AIMLbot.session and will be loaded once the bot restarts.
  • Corrade now also listens to itself when it sends messages - this is useful for logging and for notifications that process chat which should have Corrade's own talk included.
  • Corrade now prevents forcefully exiting the program and waits for the threads to terminate (left up to the OS).

25 April 2015

  • Release 7.109 - feature additions and code cleanups.
  • Corrade now supports compressing the data output when using the built-in HTTP web-server; currently providing support for deflate, gzip and no compression. This setting is configurable in Corrade.ini under server->compression and by default no compression is used.
  • The service-point idle time (the time to wait before closing sockets) is now set to 15m by default and configurable in Corrade.ini under limits->client->idle.
  • A mistake concerning improper avatar first name and last name handling has been addressed.
  • Several clean-ups to the internal HTTP web-server have been made - particularly those pertaining to disposition of resources.
  • Corrade now enforces the usage of keep-alive HTTP1.1 connections by default in order to make sure that it benefits from connection pooling which, under many circumstances, should speed-up the callback response times.

25 April 2015

  • Release 7.108 - fixes and performance enhancements.
  • The CSV handling functions have been corrected which should eliminate issues with Corrade's data-related functions. This affects commands such as getprofiledata, getregiondata, etc...
  • Stopped flushing logs and left it up to the OS to handle it since logs are not time-critical.

25 April 2015

  • Release 7.107 - feature additions and corrections.
  • Some commands dealing with group invites such as invite had a flaw that prevented them from working when a role was not specified. This has now been addressed with fixes to the CSV implementation (thanks Sidius.
  • The Everyone role is now treated as a valid zero-UUID.

22 April 2015

  • Release 7.106 - additions to the AIML brain (almost double in size).

21 April 2015

  • Release 7.105 - feature additions and performance enhancements.
  • Corrade now stores installed notifications and restores them on startup thus making notifications persistent. Although, Second Life URLs are very volatile, it may be the case that Corrade is meant to send the notifications to a persistent web-server, in which case this feature will spare the need to re-install a notification each and every time the bot is started. Notifications are now stored in the state sub-directory in the release version in a file named Notifications.state.
  • Corrade now caches the UUIDs of current groups which should speed-up commands slightly. The current group cache is not saved persistently across restarts but will act as a buffer whenever the current groups have to be retrieved.
  • A problem has been eliminated that prevented Corrade from logging group chat after the bot has been freshly invited to a group by a master. Corrade now joins the group chat as soon as it is invited to the group.
  • The local notification has been upgraded to include the source type, the audible level and the volume.
  • Instant messages that were sent while Corrade was offline are now retrieved and processed at the next log-in.

21 April 2015

  • Release 7.104 - more work on implementing RFC 4180; please note that this upgrade may break scripts that use llList2CSV in order to get the scripts working again, please use wasListToCSV and wasCSVToList which are RFC 4180 compliant parser implementations (or write your own).
  • The CSV RegEx matching has been replaced by a more powerful CSV parser that should produce RFC 4180-compliant CSV strings.
  • All input and output should now be RFC 4180 compliant which should provide a much more convenient way of parsing CSV data for people using Corrade's output.
  • Multiple cleanups.

17 April 2015

  • Release 7.103 - small but essential fix for CSV.

16 April 2015

  • Release 7.102 - fixes for getgridregiondata and getmapavatarpositions
  • Previous releases did not check the name returned by the grid region search which sometimes returned a wrong region, ie: “Milky Way” instead of “Milky Way Inc”.

16 April 2015

  • Release 7.101 - all CSV output produced by Corrade now complies to RFC 4180; this may affect some scripts handling Corrade's data return.
  • Previously, Corrade would send a flat CSV of any queried parameter without escaping the individual values. This lead to confusion when having to interpret the data return from certain commands. For example, if an avatar would be querried for BornOn and Flags, the data return would have been something like: BornOn, 04/12, Flags, Transacted, Online, Presence. While 04/12 clearly belongs to BornOn, it is not clear that the flags Transacted, Online and Presence all belong to Flags in the output. By following RFC 4180, the new data return would be something like: BornOn, 04/12, Flags, “Transacted, Online, Presence”. Where the extra double quotes are used to escape a single CSV cell which makes Corrade's data return unambiguous to interpret.

16 April 2015

  • Release 7.100 - Corrade is now fully RFC 4180 compliant.
  • The CSV data handling semantics of Corrade have been adapted to be fully adapted to respect RFC 4180. This means that Corrade now properly handles escaped CSV data passed to it. Please see the scripting considerations page for more details.

15 April 2015

  • Release 7.99 - corrections for group powers checking and enhancements to already existing functionality.
  • Some group-power checks were using the data-timeout instead of the service-timeout which made the check time out and Corrade would return that there are no group powers for a command. This affects commands such as invite when specifying a role.
  • The invite command now allows inviting people to multiple roles. Quite simply, the role parameter now takes a CSV list of role names or role-UUIDs and invites the agent directly to those roles.
  • The CSV RegEx has been amended which makes Corrade's CSV handling somewhat closer to RFC 4180. This affects all the commands that receive CSV data.

9 April 2015

  • Release 7.98 - feature additions and corrections.
  • Corrade now allows you to specify the ID0 in addition to the MAC address in Corrade.ini.
  • Added a new setting in Corrade.ini that allows you to specify to which network address Corrade will bind to when connecting to the grid. Note that this setting is completely different from the integrated HTTP server provided by Corrade which can bind to an entirely different adapter.
  • Turned on the setting to store land patches by default in order to make the getterrainheight command work properly again.
  • Turned on a few settings that should make data-related commands more actual.

9 April 2015

  • Release 7.97 - code maintenance.
  • Fixes to dynamically enabling and disabling events from Corrade.ini.
  • Parallelised some loops for the membership notification.
  • Minor changes.

5 April 2015

  • Release 7.96 - hotfix for tell command leaking command messages in reply (thanks MsLarah)

5 April 2015

  • Release 7.95 - corrections to logging, bot messages logging (thanks MsLarah) and region message logging added.
  • Corrade now additionally logs its own messages while using the tell command.
  • Fixes to logging group messages for non-configured groups.
  • Added region message logging (configurable from Corrade.ini->logs->region).
  • Minor aesthetic changes.

4 April 2015

  • Release 7.94 - feature additions and cleanup of the release package (changes to Corrade.ini required).
  • Corrade now supports logging instant messages it receives and local chat messages. This can be configured (and enabled or disabled) in Corrade.ini in the new logs section.
  • Corrade's logging has been moved to the new logs section in Corrade.ini and can now be disabled.
  • Group chat logging can now be disabled from Corrade's configuration file Corrade.ini.
  • Script errors do not show up anymore as part of the local notification. Instead, this release adds a debug notification for detecting script errors.
  • All the DLLs now reside in the libs sub-directory.

2 April 2015

  • Release 7.93 - feature additions.
  • The configuration command does not require a previous Base64 encoding for its parameters anymore. Additionally, the configuration command now benefits from two extra actions set and get which are able to set, respectively get nodes by an user-supplied XML Path (XPath). While the former read and write actions still act upon an entire configuration file, the set and get commands act upon a branch of the XML tree which allows for dynamic partial updates to the configuration file without restarting Corrade.
  • The AIML component is now loaded dynamically after processing the configuration file.
  • Workaround for double-loading of the configuration file on modification.
  • Workaround for double-loading of the AIML configuration file on modification.
  • Added locks to appearance changes and setting of the current active group.
  • Small aesthetic changes to the code.

1 April 2015

  • Release 7.92 - performance improvements for getrolemembers and getrolesmembers commands (thanks Alexandrea).
  • The getrolemembers and getrolesmembers commands will now first resolve the role to an UUID and then establish the map.
  • Inventory and AIML updates are now backgrounded.

31 March 2015

  • Release 7.91 - fixes issues with Corrade not finding prims (regression from 7.89) - thanks MsLarah.
  • Corrade now properly sets the camera to its current position which should solve issues with commands such as touch not finding some primitives.
  • The sethome command's permission changed from movement to grooming since it pertains more to Corrade itself rather than its movement.
  • Small cleanups.

31 March 2015

  • Release 7.90 - performance improvements and major fixes.
  • Corrade does not create the current outfit folder at all anymore (unanimous decision) - in case you are using an ancient version of OpenSim or viewer, the default outfit folder should first be created on startup.
  • Corrade can now dynamically bind and unbind from notifications by enabling or disabling them from Corrade.ini or through the configuration command. This change can improve performance in many cases where many notifications are not used.
  • A new configuration key was added in Corrade.ini, which can be found at limits->logout->timeout, that is responsible for shutting down the network in case the logout procedures take too long.
  • Corrade now takes configured groups into consideration when sending group message notifications.
  • Some functions with per-defined behaviour have been removed and other minor improvements.

30 March 2015

  • Release 7.89 - hotifx, block creation of current outfit folder until the inventory is fully updated.

30 March 2015

  • Release 7.88 - maintenance release.
  • Extended some locks, check names again for consistency in instant-message handler, switch to arithmetic decay in code as default and allow none as a parameter for decay.

30 March 2015

  • Release 7.87 - cleanups and fixes.
  • The decay functions have been corrected and arithmetic is now the safe default.
  • Corrade now uses plain threads to spawn background tasks.
  • Other minor cleanups.

28 March 2015

  • Release 7.86 - feature additions.
  • Corrade now supports 1 URL per notification type instead of 1 URL per group. This means that a group can bind to multiple notifications by using multiple URLs. For example, for a certain group, you can bind an inventory notification to an URL and a membership notification to a different URL. This is performed transparently and already existing scripts will be compatible with the change.
  • The notify command has a new action added called clear that clears all the installed notifications for the calling group.
  • Added the actions cp (copy an item), mv (move an item), ln (create an item link) to the inventory command.

27 March 2015

  • Release 7.85 - reintroduced the timer alarm decays.
  • Removed from previous releases, Corrade now uses adaptive timers again in order to hopefully speed-up queries - particularly those related to data-related functions. The default is again harmonic with the other possible values being arithmetic and geometric. You can configure the timer alarm decays in Corrade.ini by modifying the documented key limits->data->decay.

27 March 2015

  • Release 7.84 - overhaul of the inventory offer, accept and decline system (thanks Liz).
  • The inventory offer and reply system has been overhauled. As a consequence, the inventory notification has been changed: in case an inventory offer comes from an agent, then the firstname, lastname will be present in the return keys. Otherwise, the name of the object will be passed to the name key. Furthermore, the item name is passed along for inventory offers in the key item. Please see the API page for the details.
  • Removed the parallel queue implementation for inventory updates.

25 March 2015

  • Release 7.83 - minor bug-fixes and feature additions.
  • The inventory received notification is sent now regardless whether the item is sent by the master or not. The bot still accepts the inventory item automatically if that item is sent by the master.
  • Addition of the inventory command with actions ls (list items), cwd (list current directory), cd (change directory), mkdir (create a directory), chmod (set item permissions), rm (delete inventory item) which manipulates inventory items similar to UNIX commands (please see the API page for in-depth documentation on how to use these commands).
  • Minor cleanups.

10 March 2015

  • Release 7.82 - hotfix for the animation command.
  • Corrade is now able to successfully play and stop animations (thanks Toxie).

5 March 2015

  • Release 7.81 - performance enhancements.
  • Corrade now only starts the group membership update thread if the membership notification is set for any configured group. This can lead to performance improvements in case group membership does not need to be tracked.
  • The configuration is now locked on reload - this is necessary for the configuration command to load the settings dynamically without invalidating old data.
  • The inventory update has been branched-in after logging-in to eliminate some globals.
  • Used the GetCurrentGroups function from the previous release.
  • Several minor code cleanups.

5 March 2015

  • Release 7.80 - added ownersay, regionsayto, objectim and rlv message notifications.
  • Added the ownersay notification that can relay messages from the llOwnerSay LSL function. Note that RLV will take precedence and that RLV messages will not pass through to the ownersay notification.
  • Added the regionsayto notification that relays messages sent to Corrade via the llRegionSayTo LSL function. Corrade commands will take precedence and will not be posted to the regionsayto notification.
  • Added the objectim notification that will relay LSL llInstantMessage notifications. Corrade commands will take precedence and will not be posted to the objectim notification.
  • Added the rlv notification that will send a notification when a RLV command is processed by Corrade.
  • A position parameter was added to the local notification that gives the position of the talking avatar.

29 February 2015

  • Release 7.79 - fixed services problems under Windows, added the ability to specify a group by UUID when sending a command (thanks MsLarah).

28 February 2015

  • Release 7.78 - finalized the viewer effect commands.
  • Fixed the color for the getviewereffects command.
  • Corrade now logs the logo (including the version, compile date and copyright) regardless on whether it is in interactive mode or not. This means it will be logged on the console, to the log-file and to OS logging services.

28 February 2015

  • Release 7.77 - generalize offset parameter and colors for viewer effects.

28 February 2015

  • Release 7.76 - hotfix for viewer effect cleanup delay.
  • Added the Beam viewer effect type for the viewer effect commands.
  • Fixed the delay hogging the CPU on effect cleanup.
  • Fixed alpha parameter for Beam and Sphere viewer effects.

28 February 2015

  • Release 7.75 - addition of viewer effect capabilities (thanks Evie).
  • Added the command setviewereffect that is capable of creating LookAt, PointAt or Sphere effects.
  • Added the command getviewereffects that lists the currently active viewer effects.
  • Added the command deleteviewereffect that removes a viewer effect.
  • Removed wasOutput from the output of the getinventoryoffers command.

27 February 2015

  • Release 7.74 - the addition of AIML A.L.I.C.E. chatter bot functionality.
  • Corrade now incorporates an AIML A.L.I.C.E. based chatter bot which can be accessed using the ai command. The ai command takes as input an action that can be process to process and respond to a message, enable to enable the AIML chatter bot, disable to disable the AIML chatter bot and rebuild which rebuilds the AIML brain. By passing a message parameter along with the action set to process, Corrade will return a response to the passed message via the callback. For more information, please see the corresponding wiki pages on artificial intelligence and Corrade's API page for the ai command.
  • Moved the output of the logo and version before Corrade starts reading the configuration files.
  • Various other cleanups and generalisations of bare strings.

25 February 2015

  • Release 7.73 - hotfix for group message notifications.

21 February 2015

  • Release 7.72 - code maintenance, removed data decay for alarm timeouts.
  • The timeout decay has been removed in favor of the standard decay.
  • An additional null check for objects has been added to protect commands such as getprofiledata or getavatardata.
  • The default range of 4096m has been decreased to 64m in Corrade.ini.

20 February 2015

  • Release 7.71 - code maintenance, minor command changes, optimizations and feature additions.
  • Contracted settitle command into a tag command with action either set or get to set, respectively get the current group title.
  • Added a gettitles command that returns a CSV list of: title names, by title key, by role name, by role UUID.
  • Added support for sending llLoadURL notifications via the url notification in Corrade.ini.
  • Changed user-agent and copyright to the same values used for HTTP processing.
  • Corrected adding and removing RLV rules that Corrade tracks.
  • Other minor cleanups.

19 February 2015

  • Release 7.70 - code fixes and optimizations.
  • Switched the server GC off (this is the second attempt, no more) which should bring Corrade's memory usage back within acceptable bounds.
  • Corrections to the group joined and parted event handler which lowers the memory usage even more.
  • Fixed a strange crash occurring on some OSes concerning the RequestCurrentGroups function. The function has been renamed to GetCurrentGroups and uses an enumerator instead which should fix the crashes.
  • Removed some artefact's from previous voice attempts.
  • Added a limited password (16 characters) warning to Corrade.ini.

16 February 2015

  • Release 7.69 - minor feature additions.
  • Corrade's viewing range has been parametrized and can now be set in the configuration file Corrade.ini under the limits->range setting. The default view range is the maximal view range of 4096m.
  • Hopefully fixed a spurious bug in Corrade's group handling on instant messages.

12 February 2015

  • Release 7.68 - hotfix for setrot RLV behavior (thanks Dave).
  • The setrot RLV behavior now correctly rotates Corrade.

12 February 2015

  • Release 7.67 - minor code maintenance.

10 February 2015

  • Release 7.66 - code maintenance.
  • Reintroduced threaded IMs and used tight locking. This is now configurable in Corrade's configuration file Corrade.ini with a default of 10 concurrent instant messages.
  • Removed a possible deadlock in the teleport command.
  • Added a check for teleports less than 1m away from the destination.

8 February 2015

  • Release 7.65 - code maintenance.
  • Increased draw distance to maximum.
  • Fixed teleport command to return fast even if the teleport has failed.
  • Enabled multiple simulator support in libopenmetaverse.

8 February 2015

  • Release 7.64 - code maintenance and added overrides to libopenmetaverse in order to support ARM architectures without recompiling libopenjpeg. This means that RaspberryPi and BannanaPi should be directly supported (thank you United Actor).

5 February 2015

  • Release 7.63 - abstraction of IO handling and the addition of cryptographic functions.
  • An abstraction around Corrade's input and output handling has been added that now allows the stacking of input and output filters either dynamically, or through Corrade's configuration file. This allows us to perform operations such as encrypting the data passed through Corrade seamlessly as well as alter the data that Corrade handles. By default, RFC398 is selected as the single IO filter in order to preserve compatibility with key-value data syntax.
    • Added ENIGMA cypher.
    • Added VIGENERE cypher.
    • Added ATBASH cypher.
    • Added RFC3986 encoder / decoder.
    • Added BASE64 encoder / decoder.
  • Based on the above, a filter command has been added that can be used to change filters dynamically at run-time as well as retrieve the currently enabled filters. The filter command corresponds to the new permission filter that must be enabled for the group that is allowed to alter Corrade's IO filters.
  • Fixed some parallelism issues in the directorysearch command that may have lead to an error being thrown.
  • Eliminated the new thread creation on received IM since it caused problems and did not bring anything new to the program.
  • Increased data timeout to 10 seconds still using harmonic decay.
  • Removed default MAC configuration since most people will be using the same one... O:-)

4 February 2015

  • Release 7.62 - code maintenance and optimizations.
  • In order to further prevent DoS attacks, Corrade's workers are back and can be configured individually per group in Corrade.ini. The default is 5 queued commands per group, after which Corrade ignores other commands if the queue is full.
  • Some locks have been removed or replaced with the Wizardry and Steamworks alarm class. This affects the getprofiledata, getestatelist and directorysearch commands.
  • The directorysearch now returns the full list of matches based on the supplied criteria - the old behavior is that only the first most relevant (based on a scoring system) match would be returned. This means that the directorysearch command can now be used to return a list of matches instead of a single match. The results are still sorted in the order of relevant with most relevant being returned first. Since the results can now be rather large depending on the search criteria, it is recommended to use sifting to return only partial results.

27 January 2015

  • Release 7.61 - more fixes to attachments and detachments.
  • Item links should now be properly resolved for both RLV behaviors and Corrade commands.
  • Corrected release version.

24 January 2015

  • Release 7.60 - Hotfix for handle Corrade commands instead of RLV through llRegionSayTo.

23 January 2015

  • Release 7.59: code maintenance.
  • Organized the various threads that Corrade uses into a large separated and self-managed thread pool structure.
  • Used generics to avoid type clutter and introduced a wrapper for resolving strings as UUIDs or strings.
  • Moved the permission auto-accept from the RLV behaviors after sending the Corrade notification to allow capturing even the permission requests that go through RLV through the Corrade notification system.
  • Organized and used pre-compiled regular expressions for instances where the regular expressions were identical.
  • Turned off naggle in the source as default as well.

23 January 2015

  • Release 7.58 - performance enhancements and DoS protections (thanks FizikPony). Corrade.ini needs and update for the new features.
  • Corrade now implements thread limitations for commands, RLV and notifications. This is meant to protect Corrade in the event of an attack in-world.
  • Corrade now implements a decay mechanism through which the various installed alarms gradually decrease such that results are returned faster without being incomplete. The currently supported algorithms are: arithmetic, geometric, harmonic, heronian and quadratic with the default being harmonic.

23 January 2015

  • Release 7.57 - feature additions and performance improvements.
  • Rebake and Group activation are now scheduled perpetually in order to avoid multiple calls when the calls are queued.
  • Added handling of base types - this fixes commands such as getavatardata when the VisualParameters are queried.
  • Resolving an agents UUID to a name is now accomplished without an alarm - due to the fact that only one result is expected. This should speed-up commands that take an avatar name as parameter.
  • Added the relax command that will make Corrade sit “on the ground” - or rather sit anywhere.
  • Added the run command with enable and disable actions that will toggle always run thereby making Corrade run whenever it moves.
  • Cleaned up some type boxing that were unnecessary.

21 January 2015

  • Release 7.56 - major performance improvements and additions to teleport and getgridregiondata commands.
  • Several global state locks have been merged into a single client instance lock. This should provide a major speed benefit given that Corrade now only locks in the context of client instance resources. As a consequence, all locking function wrappers have been removed except those where Corrade also updates the Corrade cache.
  • The inventory cache now benefits again from parallel queues and will make reading the inventory much faster on startup.
  • A bug concerning the protection level of the Cache structure added from the last release has been addressed.
  • In the absence of a region parameter, the getgridregiondata command will now assume that the current region is to be queried.
  • The teleport command has been amended to support invariant casing on region names. This means that you can now supply a lowercase-named region and Corrade will find it regardless what casing the real region name has (thanks Renae).

21 January 2015

  • Release 7.55 - feature additions and optimizations.
  • Corrade now spawns a thread for each message in order to not block event handlers. This should speed-up Corrade's responsiveness even though commands are executed sequentially.
  • This release introduces data sifting which can be used to overcome the 2048 bytes limitation of data received by the http_request LSL event handler. All commands now support the new key sift which takes as argument a regular expression using capture groups and replaces the output data with the capture groups. This process occurs before Corrade sends the reply and, in many cases, can eliminate the need to query data through Corrade and process the result using a web-service.

20 January 2015

  • Release 7.54 - major, multiple code fixes, deadlock elimination.
  • Commands and RLV behaviors have been linearized again from previous releases. This is mainly due to the instance-based services that a client in Second Life may access. This eliminates some nasty deadlocks in Corrade's command handling.
  • Item links are resolved now without the need to search the inventory for the real item.
  • Data functions now atomize dictionaries and correctly handle indexer values for arrays. This means that the data functions can be used to query dictionary contents.
  • Corrade now implements its own variation of alarms which will make sure that results are properly received from the grid services. A setting has been added to the configuration file Corrade.ini that allows this value to be changed (by default, 5 seconds). The result is, for example, that querying profile data of an avatar will now correctly return the number of results (thanks Desdemona).
  • The RLV command getinvworn now supports links and should make most RLV devices compatible with Corrade (thanks MsLarah).
  • The getprofiledata now supports querying Picks and Classifieds in addition to the rest of the avatar data.
  • Changed the protection level on some methods.

19 January 2015

  • Release 7.53 - code maintenance and feature updates.
  • The invite command now no longer needs AssignRole permission in case no role is specified to invite to.
  • The initial inventory update has been linearised back from the previous revisions since it cluttered up the CPU and prevented Corrade to set appearance under certain resource constraints. This means that scanning the inventory initially will take longer than the previous release but it should be consistent now.
  • Corrade will now recursively reflect on types, supports list items and internal dictionary items. This change affects all the data commands which will now be capable of returning lists (thanks Desdemona), internal dictionaries, as well as recursing through reflection till primitive types are reached. Corrade now also prepends the name of the reflected item in the output CSV. For instance, were you now to send the command getregiondata with data set to AvatarPositions, Corrade will now return: data=AvatarPositions, Guid, <UUID>, X, <INT>, Y, <INT>, Z, <INT> - this makes it much easier to extract the desired values using the standard LSL API as well as making it clear what the returned data represents.
  • A change has been made to the getavatardata command which will now allow querying profile data as well as avatar data - note that the getavatardata command is meant to retrieve information about agents on that Corrade can currently see and if you want to query profile data of an avatar then you would use the getprofiledata command instead.

14 January 2015

  • Release 7.52 - more work on the RLV subsystem.
  • RLV can now be properly toggled on and off from the configuration file Corrade.ini - the previous releases were unable to properly set the RLV status from reading the configuration file.
  • Reverted folder names from previous release and escaped regexes (these glitches are due to the fact that the RLV specification does not mention that options and parameters must be lowercase however scripts usually send lowercase strings and Corrade is unable to locate items if the case does not match).
  • Changed getpath and getpathnew to properly find attachments when they are specified.
  • Changed instances of CORRADE_CONSTANTS to RLV_CONSTANTS for the RLV subsystem since Corrade may use its own specification independent of RLV.
  • Extended the getinv RLV behavior to properly handle both cases where folders are specified or not.
  • Slimmed the locks for getinvworn and used node-traversal instead of Corrade's implementation. This should make RLV behaviors related with the inventory work again.
  • RLV is now by default turned off and must be turned on from Corrade.ini.

14 January 2015

  • Release 7.51 - code maintenance.
  • Used own locking implementation for RLV commands.
  • Locked down RLV segments that deal with the inventory.
  • Changed the appearance command to also perform locking while retrieving the outfits.
  • Removed regexes to avoid clashes with user-input.

13 January 2015

  • Release 7.50 - code maintenance and parcel-related fixes.
  • A recurring bug has been fixed with parcel data management by removing some of the global Corrade settings. If you used Corrade for land management and sometimes got wrong output on the various parcels, then this update is for you.
  • The auto-activate group delay has been turned into a configurable variable in Corrade.ini in the limits section.

12 January 2015

  • Release 7.49 - hotfix for spurious teleport error messages (thanks Renae).
  • Switched to threads for rebaking.

12 January 2015

  • Release 7.48 - code maintenance and performance improvements.
  • Used a parallel queue for refreshing inventory items on restart.
  • Added an option to specify a delay before rebaking. In the current format it is unknown how much time after changing clothes a rebake should occur. Sometimes, if the rebake occurs too soon, then the rebake fails. In conclusion, this option is now settable with a default of 1 second delay before the rebake occurs.
  • Linearlized loading the inventory, updating the inventory and saving the result.
  • Merged two methods concerning creating inventory links into one.
  • Major rework of wearing, unwearing, attaching and detaching.
  • Removed general event handler that notifies when a rebake event occurred.
  • Switched to tree traversal for the “GetFolderContents” method.
  • Fixed the connection limit in the client section (was set to the services timeout).

10 January 2015

  • Release 7.47 - hotfix, removed a nasty artefact that prevented inventory-related commands to run.

9 January 2015

  • Release 7.46 - code maintenance, mostly improvements to inventory cache and inventory handling.

9 January 2015

  • Release 7.45: code maintenance.
  • Fix the unwear and wear commands (used a personal implementation).
  • Generalized the inventory update action.
  • Removed the inventory actions as threads and used B/Invoke instead.
  • Backgrounded many non-essential threads.
  • More work on the RLV commands, notably the deatch command.
  • Used threads for RLV commands as well as for commands processed through llRegionSayTo.

8 January 2015

  • Release 7.44 - feature additions, more work on RLV and code maintenance.
  • Added a rlv command with enable and disable action that is able to turn RLV behavior processing on, respectively off.
  • Corrade now benefits from a rlv key in Corrade.ini that will allow you to either enable or disable the RLV subsystem. RLV is on by default and, regardless of this setting, you can still use the rlv command added in this release to enable or disable Corrade's RLV subsystem.
  • Corrade now stores RLV rules that are send by scripts - however, Corrade does not enforce RLV rules over Corrade commands.
  • The RLV commands clear, accepttp, acceptpermission, getstatusall and getstatus have been implemented.
  • Loosened the locks on class-wide collections - although no bug reports have been received, these operations should be pedantically locked down (thanks Zed).
  • Several other minor code-wise aesthetic changes.

8 January 2015

  • Release 7.43 - fixes for RLV commands.
  • The getinvworn command now properly return the expected format.
  • The attach and detach RLV behaviors have been amended to work properly.
  • Although the RLV specification (http://wiki.secondlife.com/wiki/LSL_Protocol/RestrainedLoveAPI) does not mention that options and params should be lowercase like behaviors are, scripts seem to only accept lowercase and Corrade has been ammended to be compatible with scripts.
  • The getinventorypath command may have returned an empty value which has been addressed by checking whether there is data to return.
  • Corrade now locks all inventory operations until the inventory has been updated in order to guarantee that commands that deal with the inventory will not return outdated results. This will cause a delay at startup (depending on the previous cache size) but there will be no further delays after the inventory has been updated.
  • As a consequence of the former, the inventory update and inventory cache saving action has been split up into two different actions.

8 January 2015

  • Release 7.42 - feature additions.
  • This releases fixes issues with avatar names showing up with Resident as last name regardless if they had a last name or not.
  • Corrade now saves cache files inside a cache folder in the same directory as Corrade.exe.
  • The cache command can now save and load Corrade caches.
  • Some of the RLV commands now include empty responses as some scripts expect them to.
  • FindInventoryBase got renamed to FindInventory and both FindInventory and FindInventoryPath have been generalized to return both InventoryBase and InventoryNode depending on context using generics.
  • The getinvworn RLV behaviour has been added to the set of supported RLV commands.

7 January 2015

  • Release 7.41 - code maintenance and performance enhancements.
  • This is a maintenance release targeting commands (both Corrade commands and RLV behaviors) that deal with the client's inventory. Instead of fetching items folder by folder by requesting them from the simulator, Corrade now uses the internal caching system. Performance benefits range from 70% to 100% increase in speed when dealing with inventory-related operations.

6 January 2015

  • Release 7.40 - changes to return data of commands.
  • Merged several FindInventory function signatures using generics.
  • Fixed listening on local chat for RLV commands.
  • Fixed case sensitivity on RLV option and param.
  • Added the detachme RLV command.
  • Added the getpathnew and “getpath” RLV commands.
  • Added the findfolder RLV command.
  • Added the getinventorypath command that searches the entire inventory using a regex pattern and returns the full paths matching that regex.
  • All commands now return data in the data key - the previous behavior was that some commands returned different keys such as inventory, animations, etc... All of these have been removed now and Corrade returns the data key with the value set to the output of the command. This may break scripts, but overall it will prove beneficial since we always know what to expect from Corrade's output.
  • Fixed commited and credit keys - they appeared in uppercase.

5 January 2015

  • Release 7.39 - Corrade goes RestrainedLife (RLV).
  • Corrade now supports the RestrainedLife protocol version 1.23 with the exception of restrictions - which may be added later. At this point, Corrade supports the major commands, such as sitting, standing, following, teleporting, etc... Please see the RLV section on Corrade's API page for more details.
  • Full names are now properly converted from first name and last name. :-)
  • More work on attaching and detaching attachment and wearables.

4 January 2015

  • Release 7.38 - corrections to detach and attach commands; now hopefully successful on the first call.
  • Implemented an inventory cache to speed-up inventory lookups.
  • Corrade's cache for avatars and groups now gets stored in Avatar.cache, respectively Group.cache between launches.
  • Marked some threads as backgrounded to relax thread stress.
  • Implemented inventory and service locks for inventory operations.
  • Relaxed the group members thread.

4 January 2015

  • Release 7.37 - important bug hotfix for past 7.35 and 7.36 (thanks MsLarah).
  • The sluggishness due to the newly implemented membership notification has now been resolved and the membership tracking has been addressed.
  • Looking up current groups has been generalized and now implements services thin locks.
  • Console and log feedback for IMs, group invites, etc... Have now been removed since they can be obtained through the notification system.

3 January 2015

  • Release 7.36: code maintenance and feature additions.
  • Added the membership notification that will send notifications when an agent joins or leaves a group configured for Corrade. This requires changes to Corrade.ini, to both the respective notifications section and the limits section which allows you to set a sweep interval for indexing group members (by default 1 second).
  • Changed the commands getgroupinvites, getscriptdialogs, getscriptpermissionrequests, getteleportlures and getinventoryoffers so they include the name of the returned value before the value. Before this change, the only way to access the returned data from the aforementioned commands was to rely on their index. With this change, you can now grab a value by finding its name in the CSV list and then adding one to the index.
  • Fixed full name handling for the entire code: up to now the code may have failed due to agent names being returned without a last name. Now, the code correctly appends Resident as the last name.
  • More work on making sure that Corrade terminates properly by changing the handling of the various threads that Corrade spawns.
  • Many cleanups and performance enhancements to the overall code flow.

1 January 2015

  • Release 7.35 - code maintenance and feature additions.
  • Slimmed the command lock to a service lock allowing more concurrency for issued commands.
  • Generalised money balance requests.
  • Added the economy notification that allows Corrade to send notifications when money is paid or our paid in.

21 December 2014

  • Release 7.34 - structural changes to notification system (this release may require a revision of LSL scripts due to the fact that some commands have been renamed).
  • All group operations are now protected by the group permission. This allows you to delegate group-agnostic commands to certain scripts whilst limiting group access.
  • Added the typing notification that will send typing start / stop notifications on instant messages.
  • Added the invite notification that will send group invites notifications received by Corrade.
  • The inventory notification has been extended to send accept and decline responses as well as inventory offers.
  • The friendship notification now passes the action key set to update on information events such as online / offline status changes and permissions being granted or revoked.
  • The group notice notification has been extended to also send inventory accepted / declined messages when Corrade is sending a notification with an attachment.
  • The effect notification now passes the value generic to the action key, point on point-at and lookat on lookat effects.
  • The cross notification now also sends notifications on region changed (such as teleports) and sets action to crossed in case a region-cross occurred or sets action to changed in case of a teleport.
  • The replytogroupinvite command can now be used in tandem with the invite notification to make Corrade accept or decline joining groups when Corrade receives a group invite.
  • The getgroupinvites command has been added which lists the current pending group invitations.
  • A getmemberroles command has been added which allows listing all the roles for a specified member (the converse of getrolemembers command).
  • The join command for joining groups has now been altered to require the economy Corrade permission in case joining a group requires a membership fee. Corrade now performs a balance check and returns an error in case the current balance is lower than the required fee to join the designated group.
  • The replytolure command has been renamed to replytoteleportlure (this may break scripts!).
  • A getteleportlures command has been added that allows browsing the current pending teleport lures received by Corrade.
  • The replytopermission command has been renamed to replytoscriptpermissionrequest (this may break scripts!).
  • A getscriptpermissionrequests command has been added that allows browsing the current pending permission request received by Corrade.
  • The replytodialog command has been renamed to replytoscriptdialog (this may break scripts!).
  • A getscriptdialogs command has been added that allows browsing the current pending script dialogs received by Corrade.
  • The cache for group roles has been removed.

19 December 2014

  • Release 7.33 - performance enhancements (before upgrading please check the new Corrade.ini configuration file).
  • Corrade now uses slimmer locks and processes commands on their own threads.
  • The configuration file structure has changed to include the following additions:
    • Ability to set the number of concurrent outbound connections for callbacks and notifications (limits->client->connections).
    • The HTTP server has been moved to its own tree server along with the prefix.
    • A new tree network has been added that allows you to specify MAC as the former configuration key for the MAC address override, the ability to turn the naggle algorithm on and off as well as use Expect-100-Continue for Corrade's communication with the rest of the world.

19 December 2014

  • Release 7.32 - retouches.
  • The execute command, governed by the separate execute permission has been added and allows Corrade to execute programs on the host system that it runs on. The command takes a file and a parameter and executes the file with the parameters in parameter and returns stdout in the output key and stderr in the error key.
  • Corrade now sets the user-agent to Corrade/VERSION (http://grimore.org/) when making web-requests. This will allow a better filtering by user agent con the receiving end.
  • All HTTP requests are now pipelined.
  • All HTTP requests now follow redirects.
  • Added the terse notification since it was mistakenly left out of Corrade.ini in the previous release.

18 December 2014

  • Release 7.31 - major changes.
  • This release introduces a caching system that will speed-up commands: agents, groups and roles always have to be looked-up using the grid's directory services, which will slow down a command considerably. Now Corrade, caches these replies.
    • A cache command has been added with the action purge that allows you to erase Corrade's cache.
  • This release adds queues for callbacks and notifications. This change requires the configuration file to be updated and the new limits section added. By using queues, you are now able to control how fast callbacks and notifications are sent to registered URLs. The previous behavior has been to send them as fast as possible, however, that may have resulted in the receiver being overwhelmed and messages being dropped. By using queues, we can now ensure that the messages are sent and that no message is lost.
  • The login and logout procedures have been upgraded to allow for a clean exit of Corrade even in overloaded circumstances.
  • A new notification terse has been added which allowed you to receive terse object update notifications (avatars and objects moving) around.
  • A new command getgridregiondata has been added that is able to poll a remote (or local) region for data following the GridRegion structure.

17 December 2014

  • Release 7.30 - added getregionparcelsboundingbox command that retrieves the extremities of all parcels on the current region. This command is helpful in combination with the other parcel-related commands in order to process parcel-related data.

17 December 2014

  • Release 7.29 - feature additions.
  • Added the searchinventory command that takes an input pattern as well as an optional asset type and searches Corrade's inventory for assets and returning the asset type and the name of the found asset.
  • Added the getterrainheight that takes as parameter a vector southwest and a vector southeast whose $x$ and $y$ components describe a rectangle (by default, the entire region) and returns a list of altitudes in meters at every determined point of the encompassing rectangle.

14 December 2014

  • Release 7.28 - upload and download assets and change configuration file dynamically.
  • The “deleterole” command now additionally requires “RemoveMember” group permissions.
  • The “sethome” command now properly checks for success or failure.
  • The “parcelmusic” command has been removed and left up to the more powerful “setparceldata” command.
  • A “setparceldata” command has been added that allows Corrade to set various properties of a parcel by following the Parcel class of libopenmetaverse.
  • A “download” command has been added that is able to download mesh, textures, landmarks, gestures, animations, sounds, clothing, bodyparts by UUID (in case they are not in Corrade's inventory) and scripts and notecards from Corrade's inventory.
  • A symmetric “upload” command has been added that is able to create assets based on the data obtained from the “download” command.
  • When interacting with a primitive's inventory via the “updateprimitiveinventory”, a new action “take” has been added that can move items from a primitive's inventory and place it in Corrade's inventory.
  • The “terrain” command no longer uploads the terrain via POST on “get” - instead it returns the downloaded terrain as a base64 encoded string as the value of the “data” key. Similarly, on “set” the “terrain” command expects a base64 string, which contains the terrain in raw format, to be passed to its “data” key.
  • A new command “configuration” has been added that requires “system” permission and with the actions “read” and “write” and is able to return Corrade's configuration file as well as write Corrade's configuration file. The configuration file can only be read and written as a whole.
  • The collision notification has been changed to return “entity” instead of “collision” for the type parameter of a mean collision.

3 December 2014

  • Release 7.27 - hotfix for move command that now no longer requires a position parameter for the stop action.

29 November 2014

  • Release 7.26 - additions to notification system.
  • Added the ability to receive a notification when an object or agent collides with Corrade.
  • Added the ability to receive a notification when Corrade crosses regions.
  • Made some methods static.

26 November 2014

  • Release 7.25 - feature additions.
  • Added the createnotecard command that takes a parameter name, an optional parameter description and an optional parameter text and creates a notecard. Note that adding attachments to notecards is not yet supported (does not work in libopenmetaverse).
  • Added the nudge command that takes as parameter direction - which can either be back, forward, left, right, up or down and nudges Corrade in that direction (in Corrade's local frame). This command can be combined with Corrade's HTTP server and (carefully) with llRegionSayTo in order to move Corrade around. Note that llRegionSayTo has undefined cap limits such that scripts will stop working.
  • Added the turnto command that takes as parameter position (an LSL vector) and turns the bot to face that position.
  • Added the command crouch with a parameter action - either start or stop and makes Corrade crouch.
  • Added the command jump with a parameter action - either start or stop and makes Corrade jump.
  • Added the command playgesture that takes a parameter item (either a name or UUID) and plays the gesture corresponding to that item if the item is found in Corrade's inventory.

16 November 2014

  • Release 7.24 - code maintenance.

14 November 2014

  • Release 7.23 - hotfix for attach and detach command (thanks Larah!).

13 November 2014

  • Release 7.22 - feature additions and corrections to the
  • replytoinventoryoffer command.
  • Corrade now is able to correctly accept inventory items via the
  • replytoinventoryoffer command. Additionally, the
  • replytoinventoryoffer command also optionally takes a folder
  • parameter to accept the item in a given folder.
  • The derez command can take a folder and a de-rez destination
  • type type parameter that will allow to take, copy, or return objects
  • to different folders other than the default ones.
  • The rez command has been changed to make the rotation parameter
  • optional - the default rotation is ZERO_ROTATION.

12 November 2014

  • Release 7.21 - added the ability to specify the agent key to act on with
  • the new agent parameter in cases where firstname and
  • lastname had to be specified to refer to an agent.
  • Updated the notification code to also pass the agent ID where
  • firstname and lastname was sent.
  • These changes are added to facilitate scripting with Corrade given the
  • limitations of LSL which is unable to reliably resolve an agent key to
  • an agent name and vice-versa.

11 November 2014

  • Release 7.20 - added the ability to accept inventory offers by expanding
  • on the inventory notification and by adding the command
  • replytoinventoryoffer.
  • Added the ability to access a group by UUID as well as name - this fixes
  • problems where the group contains too few or special characters.
  • Revised the “SearchInventoryItem” function and changed appropriately to
  • conform to the above.
  • The friendshipoffer command has been renamed to
  • replytofriendshipoffer.
  • Added the getinventoryoffers command that returns pending inventory
  • offers.

10 November 2014

  • Hotfix, the changeappearance command now allows multiple attachments
  • on the same slot.

8 November 2014

  • Release 7.18 - major code revision.
  • libopenmetaverse has been downgraded which resulted in various issues
  • being fixed.
  • Major rework of the wear, unwear, attach and detach
  • commands.
  • The wearfolder command has been renamed changeappearance to
  • reflect the meaning of the command.
  • Sending group notices with attachments now works fine.

7 November 2014

  • Release 7.17 - feature additions.
  • Added the ability to receive viewer effects notifications (LookAt /
  • PointAt / ViewerEffect).
  • Added the terrain command that is able to upload and download
  • terrains - it does so by sending / retrieving the binary data to and
  • from an URL via POST.
  • Added the ability to specify the service name when installing Corrade as
  • a service. This will allow you to create copies of Corrade's directory
  • and run multiple Corrades on the same machine as services (for Windows,
  • only).
  • Redesigned the wasPOST by consequence.

30 October 2014

  • Release 7.16 feature additions and code maintenance.
  • Corrade now uses just major and minor numbers to differentiate releases.
  • Permissions for group-land actions have been fixed.
  • Added a new command version that returns the current Corrade
  • version.
  • Added a new command updateprimitiveinventory that takes an item
  • parameter as a primitive, entity as an inventory item and depending
  • on the action parameter can add or remove objects from a primitive's
  • inventory.
  • Generalised some strings and other fixes.

16 October 2014

  • Release 7.14.2 feature additions.
  • The getrolemembers command has been added that takes a role by name supplied by the role key and returns the avatar names and UUIDs of the members assigned to the specified role.
  • The getrolesmembers command now additionally returns the UUIDs of the members after the avatar name.

15 October 2014

  • Release 7.14.1 - marks the end of the 14 revisions.
  • The workers functionality has been dropped.
  • Corrade now accepts commands through llRegionSayTo which can be used to avoid the 2s delay of llInstantMessage.
  • Protection for several commands returning malformed key-value data.
  • Contraption of variables for performance.
  • Overall speed and performance enhancements.

29 September 2014

  • Release 7.11.6 hotfix for program termination under mono when the HTTP server is enabled.

28 September 2014

  • Release 7.11.5 feature additions.
  • Added the wearfolder command that takes as parameter a folder and attempts to wear all the items in that folder.
  • Added the getwearables command that returns a list of wearable types by name.
  • Added the wear command that takes as parameter wearables as a CSV list of wearable types by name and attempts to wear the items.
  • Added the unwear command that takes as parameter a list of wearables by name and un-wears them.

Note that due to various bugs in the libopenmetaverse code, the added features for this release do not work very well for certain wearable types. Nevertheless, they have been added with the thought that some day libopenmetaverse will fix their bugs. For references, please see the Known Issues section. 27 September 2014

  • Release 7.11.4 code maintenance.

26 September 2014

  • Release 7.11.3 code optimisation and feature additions.
  • The setobjectrotation command has been added to set the rotation of a primitive or object.
  • The setobjectdescription command has been added to set the description of a primitive or object.
  • The setobjectname command has been added to set the name of a primitive or object.
  • The setobjectposition command has been added to set the position of a primitive or object.
  • The setobjectsaleinfo command has been added and allows setting objects for sale.
  • The setobjectgroup command has been added and allows setting an object to the issuing group.
  • The deedobject command has been added and allows to deed an object to a group.
  • The setobjectpermissions command has been added that allows setting permissions on in-world objects.
  • Various compatibility and optimisation options throughout the code.

21 September 2014

  • Release 7.11.2 code maintenance, optimisations and feature additions.
  • The keys and values are now escaped using Wizardry and Steamworks' custom escape functions.
  • Branched out the field and properties getter for data-related functions.
  • The restartregion command now takes an optional parameter delay (measured in seconds) that delays the region restart.
  • The command getprimitives' has been added that takes as parameter an entity (either region, parcel or avatar) and returns a CSV list of primitive names by UUID within the current region.
  • The command getavatarpositions takes as parameter an entity (either region or parcel) and returns a CSV list of avatars by UUID by local positions within the current region.

19 September 2014

  • Release 7.11.1 hotfix for friendship notification.

19 September 2014

  • Release 7.10.9 feature additions, mainly concerning friendship management.
  • Added the getgroupaccountsummarydata command that follows the GroupAccountSummary structure and allows the user to query it.
  • Added the setregiondebug command with the parameters scripts, collisions and physics set to either true or false will allow to toggle the estate debug flags to enable or disable these features.
  • Added the getmapavatarpositions command that is supplied a single parameter region as the region name of the region to query and returns clusters of avatars and where they are position. This command is able to remotely poll a region and return avatar positions.
  • All friend-commands now work under the permission friendship.
  • Added the getfriendslist command that returns the names and UUIDs of friends.
  • Added the getfrienddata command that allows the user to query the FriendInfo structure.
  • Added the offerfriendship command that takes as parameter firstname and lastname and sends friendship requests.
  • Added the terminatefriendship command that takes as parameter firstname and lastname and terminates a friendship.
  • Added the grantfriendrights command that takes as parameter rights, a comma-separated list of FriendRights and sets the rights for a friend.
  • Added the getfriendshiprequests command that returns a CSV list of avatar names by UUIDs of pending friendship requests.
  • Added the friendshiprequest command, taking as parameter action set to accept or decline and the firstname and lastname of the avatar to accept or decline the friendship for.
  • Added the mapfriend command that takes as parameter the firstname and lastname of a friend and, given mapping rights, returns their location as a CSV list of simulator name and position.
  • Added the friendship notification that will trigger when a friend goes online, offline, grants rights, responds to friendship requests as well as displaying a notifications when other avatars offer friendship.
  • Added the inventory notification that will trigger when inventory is offered by an avatar.

18 September 2014

  • Release 7.10.8 feature additions.
  • Added the command getselfdata that follows the AgentManger structure and returns data pertaining to the bot.
  • Added the addclassified command that is able to add or update a classified.
  • Added the deleteclassified command that is able to delete a classified.

9 September 2014

  • Release 7.10.7 fixes to make Corrade log-out properly once the simulators have been disconnected. This should fix auto-restarters that had a problem getting Corrade to restart after version 7.10.1.

9 September 2014

  • Release 7.10.6, rollback.

9 September 2014

  • Release 7.10.5, hotfix for agent ID display in feedback.

9 September 2014

  • Release 7.10.4, hotfix for getprimitiveowners and returnprimitives command to request all the parcels (thanks to Tad Carlucci) before operations in case the position parameter is not specified.

8 September 2014

  • Release 7.10.3, hotfix for the displayname command.

8 September 2014

  • Release 7.10.2, feature additions and code maintenance.
  • The logout command has been added under the new system permission in the configuration file that allows scripts (or HTTP requests) to shutdown Corrade remotely.
  • Corrade now supports both Windows console close events and Unix signals in order to cleanly shutdown and disconnect from the grid. This is very useful due to the fact that the abrupt termination of the program does not immediately log Corrade out of the grid which clashes with further launches of Corrade.
  • Some of the commands have been revised (without behavioural changes) in order to check and account for permissions where they are applicable.
  • All timeout-functions now returns errors containing the timeout keyword in the description in order to be able to better separate them from the other types of potential failures.
  • A new parameter called autoactivategroup has been added to the configuration in the client section that will make Corrade attempt to automatically set the group tag to the land group after a teleport event.
  • A new command displayname has been added, with actions get and set that allows setting and getting the display name of the bot.

5 September 2014

  • Release 7.10.1 added the ability to send command to Corrade via HTTP. Corrade now has a built-in HTTP server that accepts commands if they are sent using POST.
  • Fixed conflict between money-balance and alert notifications.

5 September 2014

  • Release 7.10.1 added the ability to send command to Corrade via HTTP. Corrade now has a built-in HTTP server that accepts commands if they are sent using POST.
  • Fixed conflict between money-balance and alert notifications.

5 September 2014

  • Release 7.9.24 hotfix for the notification system.

1 September 2014

  • Release 7.9.23 feature additions.
  • Added the returnprimitives command that is able to return primitives of given avatars either estate-wide, on the region or on a selected parcel.

1st September 2014

  • Release 7.9.22 feature additions.
  • Added the getgroupdata command that allows you to query fields and properties of the current group by following the Group structure.
  • Added the getprimitiveowners command that allows you to get the number of primitives and the owners of the primitives on a parcel or in the entire region.

27 August 2014

  • Release 7.9.21 hotfix for data functions.

27 August 2014

  • Release 7.9.20 hotfix for data functions.

27 August 2014

  • Release 7.9.19 added the getavatardata command that takes as parameter the first and last-name of an avatar and a data parameter following the Avatar structure and returns the requested fields or properties to the callback URL. In the same manner as all other data-commands, this powerful command allows you to query data about the avatars in the current region, amongst which, it is possible to determine an avatar's sex based on their shape and visual parameters. For more details, please see the API on how to accomplish this.

26 August 2014

  • Release 7.9.18 code-maintenance.
  • Fixed configuration file sample: idlejoinchattime -> idlejoingroupchatttime.

26 August 2014

  • Release 7.9.17 fixed setting partial permissions and notifications (thanks Melisa!).

21 August 2014

  • Release 7.9.16 added the ability to specify a position for the getparceldata command to retrieve properties of a remote parcel.

21 August 2014

  • Release 7.9.15 feature additions, minor corrections.
  • A rez command has been added that takes as parameter a position, rotation (in quaternions), an item (either by name or UUID) and rezzes the object in-world. Objects will be rezzed with the group set to the command the group acts for.
  • A derez command has been added that takes as parameter an item (either by name or UUID), a range to find the item in and attempts to de-rez the object to inventory.
  • A getscriptrunning command has been added that takes an item (either by name or UUID) representing a primitive, the range to find the primitive in, an entity as the script name or script UUID in the primitive's inventory and returns the running state of the script specified by entity.
  • A setscriptrunning command has been added that takes an item (either by name or UUID) representing a primitive, the range to find the primitive in, an entity as the script name or script UUID in the primitive's inventory, an action - either start or stop and set the script running state based on the action parameter.
  • A getprimitiveinventory command has been added that takes an item (either by name or UUID) representing a primitive, the range to find the primitive in and returns inventory to the callback URL with a CSV list of inventory item names by UUIDs.
  • A getprimitiveinventorydata command has been added that takes an item (either by name or UUID) representing a primitive, the range to find the primitive, a parameter named entity (either a name or UUID) representing an inventory item, a data parameter as a field or property in the InventoryItem structure and return the data as a CSV list of field or property name by value. In short, this command lets you query the primitive's inventory items.
  • A getinventorydata command has been added that takes an item (either by name or UUID) representing an item in inventory and a CSV list of field or properties in the InventoryItem structure and returns a CSV list of fields or properties names by values of the inventory item.
  • A getparceldata command has been added that takes data as a CSV list of fields or properties in the Parcel structure and returns a CSV list of fields or properties names by values of the current parcel that Corrade is on.
  • All “data”-commands now properly return data only if there is a key-value pair. The former behaviour is that keys would be added to the CSV data even if they did not reference any value.

18 August 2014

  • Release 7.9.14 code maintenance and code reductions.
  • setestatelist now takes target instead of entity as parameter.
  • Fixed the give command to properly transfer inventory items.
  • The give command now takes a parameter called entity set to either agent or object and allows placing an inventory item in a primitive's inventory.

18 August 2014

  • Release 7.9.13 code maintenance.
  • Values are now properly unescaped on key-retrieval.
  • Fixes to the sit command.
  • The item parameter now can be an UUID or the name of an object.
  • Generalisations on error values for various commands.
  • Code reductions.

12 August 2014

  • Release 7.9.12 fixes for the message notification and a better way to handle group and instant messages. No changes needed to the configuration file and no API changes.

12 August 2014

  • Release 7.9.11 hotfix for message notification.

12 August 2014

  • Release 7.9.10 feature additions and API changes.
  • The getregiontop command now returns the data in top.
  • The getestatelist command now returns the data in estatelist.
  • The directorysearch command now returns the data in search.
  • The getparticlesystem command now returns the data in particlesystem.
  • Added an animation command that takes action as parameter set to either start or stop and an item parameter being either an UUID or the name of an item in Corrade's inventory.
  • Added getanimations that returns all animations currently playing on Corrade and returns them as a list of animations and priority in the parameter animations.
  • Added the local notification for relaying local chat to a primitive.
  • Added the dialog notification for relaying script dialogs to a primitive.
  • Added the replytodialog command with permission interact that takes a channel, button index, button name and the UUID of the item to answer to.
  • This update requires changes to Corrade's configuration file Corrade.ini.

11 August 2014

  • Release 7.9.8 feature additions.
  • The move command now takes an action parameter which can be start or stop. This change was added in order o be able to cancel the current movement.
  • Added a regionrestart command with the action settable to restart, in order to start a region restart, or to cancel in order to cancel a region restart.
  • The tell command has been changed so that the entity parameter can be set to estate or region in order to send messages to the entire estate or just to the region Corrade is in.
  • Added a getregiontop command that takes as parameter type, settable to either scripts or colliders in order to get the region's top scripts, respectively colliders.
  • Added a command getestatelist with the parameter type set to ban, group, manager or user in order to get the current estate lists.
  • Added a command setestatelist that can add or remove entities from the ban, group, manager or user types of the current estate.

10 August 2014

  • Release 7.9.7 hotfix for the directorysearch command.

9 August 2014

  • Release 7.9.6 hotfix for the directorysearch command.

9 August 2014

  • Release 7.9.5 added the directorysearch command that allows users to search classifieds, events, groups, land, people and places. The command functions similar to the data-commands where filtering can be performed by any of the structure's fields or properties. The configuration file has to be changed in order to add the directory permission to the groups allowed to perform directory searches.

8 August 2014

  • Release 7.9.4 hotfix for setting interests using the setprofiledata command.

8 August 2014

  • Release 7.9.3 the commands getprofiledata and setprofiledata can now handle interests as well.

6 August 2014

  • Release 7.9.2 feature additions.
  • getprofiledata can be used to query the data of an avatar profile.
  • Corrade now supports relaying notice data such as the subject and the message to a primitive via the notice notification. For this to work, Corrade's configuration file Corrade.ini has to be modified to add the notice to the notificiations tag of the groups allowed to relay notice data.
  • The tell command now requires the special talk permission in Corrade's permissions section of each configured group.

6 August 2014

  • Release 7.9.1 minor fixes, messages permission renamed to message.
  • By default group creation creates the configured group.
  • Code aesthetics.

5 August 2014

  • Release 7.8.10 feature additions and generalisations introducing the setprofiledata, getprimitivedata, getregiondata, updategroupdata and creategroup commands.
  • The command profile is now named setprofiledata and takes as parameter in data the fields and properties to set.
  • The getprimitivefields command has been renamed to getprimitivedata.
  • The getregionfields command has been renamed to getregiondata.
  • The update has been renamed to updategroupdata and takes as parameter in data the fields and properties to set.
  • The create has been renamed to creategroup and takes as parameter in data the fields and properties to set.
  • Corrade's configuration file Corrade.ini now has a message notification setting that allows users to relay instant messages received by Corrade and send them to an URL.

4 August 2014

  • Release 7.8.9 minor fix for getprimitivefields and getregionfields to not return types that are not enumerable.

4 August 2014

  • Release 7.8.8 major rework of getting primitive data and region data.
  • The getprimitivetext has been eliminated in favour of getprimitivefields which is a more general function that allows the user to query primitive details directly following the libomv API.
  • The previous regionmetrics command is eliminated in favour of getregionfields which allows the user to directly query region details following the libomv API.
  • All the commands that act on primitives must now supply a range parameter in meters. This affects the commands that act on in-world objects: sit, touch, getprimitivefields and getparticlesystem.
  • A notification for balance events has been introduced and requires the addition of the balance notification in the configuration file Corrade.ini.
  • Several bugs have been fixed with finding primitives (including long timeout times that were eliminated).
  • A command has been introduced getparticlesystem that can dump an LSL list of particles of a primitive supplied by the item parameter.

3 August 2014

  • Release 7.8.7 feature additions and fixes.
  • A notification system has been added that can relay group chat, region messages and system alerts to primitives via the notify command. The change requires editing Corrade's configuration file Corrade.ini.
  • Changed CSV separator so it is now compatible with Linden's llList2CSV: Linden's CSV separator is “, ”, counting the trailing space so now Corrade uses the same separator when processing CSV data.
  • url is now URL in LSL scripts.
  • Used exceptions for reading the configuration file.
  • Added GET and SET to ScriptKeys instead of using the Database structure.

23 July 2014

  • Release 7.8.6 code optimisations and various fixes.
  • Fixed the getattachment commands to work for multiple attachments.
  • General code optimisations.

22 July 2014

  • Release 7.8.5 code optimisations.

21 July 2014

  • Release 7.8.4 code maintenance, optimisations and minor feature additions.
  • The configuration file now supports specifying a group UUID. This will make lookups faster and allow you to refer to groups that cannot be found using the directory search. For example, if you created a group named .:: 8E ::., the directory search was unable to find it but by adding an UUID, the group can now properly be resolved. This is due to the poor implementation of the directory searches in SecondLife which allows you to create groups with small names or decorative characters that are then unable to be found in searches.
  • Used structures for configuration groups and for masters.
  • Used HashSets for Lists where applicable.
  • Fixed a bug that did not allow masters with the same first name.
  • Corrade's database file handling has been changed to properly use key-value data: key-value pairs are now delimited by the ampersand (&) sign and are written in one single line. If you were using Corrade's database features, simply open up the database files and replace the newlines with ampersands. The reason for this change is that the old format of the database with newlines as delimiter inserted an extra delimiter to the ampersand and equal sign which were already used by the key-value data functions.

16 July 2014

  • Release 7.8.2 code maintenance and enhanced the primitive finding algorithm.
  • The calls that make Corrade search for a primitive will now also account for the primitives worn by avatars as well as child primitives. For example, before this release, Corrade could only find primitives that are root primitives and not attached. Now, Corrade searches attached primitives, child primitives and in-world primitives.

30 June 2014

  • Release 7.8.1 maintenance release.

28 June 2014

  • Release 7.8 code cleanups, performance and optimisations (downgraded OpenMetaverse library to 0.9.2; the lib directory should be replaced with the lib directory from the download).
  • The commands deleterole, deletefromrole, addtorole, getrolepowers now support supplying an UUID to the role parameter.
  • Changed the code to strongly-typed variables since, apparently, they do not work well with the OpenMetaverse library.
  • Fixed finding primitives - should now correctly find all the primitives in the vicinity.
  • Downgraded the OpenMetaverse library to version 0.9.2 from trunk.
  • Removed setting the maturity level since it is unsupported on version 0.9.2 of the OpenMetaverse library.
  • Used strongly typed event handlers instead of lambda expressions in order to decouple from events after a command.
  • Fixed the settitle command so it works properly.

26 June 2014

  • Release 7.7 code cleanups and performance optimisations.
  • The update command can now take insignia as a parameter to set the group image. The same applies to the create command.
  • The profile command has been updated to also accept UUIDs for setting the second and first life image.
  • The data format has been changed to day-month-year.
  • Added consistency checks for group-role operations.

25 June 2014

  • Release 7.6 code cleanups and performance optimisations and adding the ability to set Corrade's maturity rating.
  • Updated logo.

24 June 2014

  • Release 7.5, code cleanups and incorporated a key-value database into Corrade.
    • You can now store keys and values persistently using the database command, with actions set and get for each configured group. This will require you to grant the database permission for every group allowed to query its database as well as setting the database file-path in Corrade's configuration file.

24 June 2014

  • Release 7.4, code cleanups and added the ability to mute and unmute avatars or in-world objects.
  • Muting avatars and objects can now be preformed via the mute command that requires mute permissions to be defined in the configuration file.
  • Added the ability to request a list of muted agents via the getmutes command.

24 June 2014

  • Release 7.3, code cleanups, feature additions and merges.
  • startfly and stopfly have been merged into a single command fly with action set to either start or stop.
  • Used Linden standards for CSV delimiters (command and space).
  • Added settitle command requiring grooming permissions with title parameter to set the current title of Corrade.
  • Added startproposal command with duration, majority, quorum and text to allow starting a proposal.
  • The activate command now requires grooming permissions.

23 June 2014

  • Release 7.2.3.
    • Removed the idle teleport home and idle sit because the same can now be accomplished via commands.
  • Release 7.2.2.
    • Renamed move parameter target to position.
  • Release 7.2.1.
    • Fixed permissions for multiple groups.

18 June 2014

  • Added the move command to make the bot walk to a target.
  • Code maintenance.
  • Fixed spurious error on callback return.

17 June 2014

  • Fixed talking in group using the tell command.
  • Added the activate command to set a group as active.
  • Code maintenance.

16 June 2014

Documentation is being written for Corrade 7 - work in progress.

This makes the end of the Corrade 6 series and the first release of Corrade version 7. Corrade version 7 includes major changes to the code-base, some changes to the way parameters are passed and handled, changes to some commands and their output and addition of several commands. If you are using Corrade 6, please see the outdated documentation and please consider updating to Corrade version 7 since there will be little support provided for outdated releases. We will still maintain a downloadable copy of Corrade version 6 in the downloads section.

Corrade version 7 comes with the following changes and additions to its predecessor:

  • The afterburn feature is now implicit. Instead of returning an afterburn key, like in the previous versions, you can now directly pass key-value data to Corrade that will be passed through. For example, to pass owner and the value of llGetOwner() on the afterburner, you would issue:
                    "command", "stand",
                    "group", GROUP,
                    "password", PASSWORD,
                    "owner", llGetOwner(),
                    "callback", llEscapeURL(URL)

Corrade will then serialise “owner”, llGetOwner() to a key-value data pair that will be echoed back to the specified callback URL. The afterburn key will then be posted to Corrade's callback URL. For the example above, we would receive the following:


Note the owner=e01784ff-ca77-479d-8ffe-00b3d5d56e7d which is Corrade's implicit afterburn.

  • A shortcoming of the version 6 Corrade is that groups could not contain the ampersand (&) or the equal (=) sign in a group name or a role name. If you have a group, such as Milk & Chocolate, you will have to define it in Corrade.ini as:
      <name>Chocolate &amp; Milk</name>

Where you use HTML escape codes for the ampersand. Whenever you want to send some data from LSL to Corrade that must contain the ampersand (&) or the equal (=) sign, you can use llEscapeURL on that data before sending it to Corrade. For example, suppose that GROUP is defined as Milk & Chocolate, in which case we have to escape the group name before sending it to Corrade:

                    "command", "stand",
                    "group", llEscapeURL(GROUP),
                    "password", PASSWORD,
                    "owner", llGetOwner(),
                    "callback", llEscapeURL(URL)
  • All callback data will now be sent to the callback URL in llEscapeURL format and must thus be decoded with llUnescapeURL. Following the previous example, we use llUnescapeURL on the group parameter to get the literal name of the group:
    http_request(key id, string method, string body) {
        llHTTPResponse(id, 200, "Ok");
        string group = llUnescapeURL(wasKeyValueGet("group", body));
  • Corrade now passes only the command, the group name and the success value (either True or False) when a command is executed to the callback URL. However, Corrade still logs the agent-name that sent the command and the UUID of the object sending the command. Due to the implicit afterburn, it is no longer needed to selectively pass the agent UUID and so on, since these keys can be passed now manually if needed.
  • The following script commands have been added:
    • parceluserprimitives, given parcel permssions, it will return the number of primitives on the current parcel for a given agent.
    • parcelprimtivies, given parcel permissions, it will return the a CSV string of agents to the number of primitives they have on the current parcel.
    • getprimitivetext will return the overhead text of a primitive that has been set via llSetText.
  • Many code improvements and enhancements to the overall performance.


secondlife/scripted_agents/corrade/changelog/conservative_changelog.txt · Last modified: 2017/11/27 11:02 by Wizardry and Steamworks

Access website using Tor

For the copyright, license, warranty and privacy terms for the usage of this website please see the license and privacy pages.