General Server

Websockets support added to the builtin HTTP server used by OpenSimulator. This allows experiments with using Websockets to communicate with an OpenSimulator instead of UDP and long-poll mechanisms such as the HTTP event queue used in the Linden Lab protocol.

Region modules and other codes (though not scripts) can now expose JSON-RPC handlers for external calls.

Internal HTTP server reliability improved.

Number of allowed simultaneous HTTP requests from OpenSimulator to other simulators or services vastly increased. This may have an impact on simulator behaviour in high traffic situations (e.g. where there are a large number of avatars logged into the simulator or on neighbouring simulators)

General Simulator

New functions added to JsonStore Module, which allows scripts and region modules to share structured data between themselves.

A dynamic attributes facility was added to scene objects where arbitrary data can be stored. This is currently undocumented but is used by the Materials module.

The admin_exists_user XmlRpcAdmin call now properly returns the last user login time in the lastlogin field rather than a jumble of unspecified fields.

OpenSimulator can now specify to a compatible viewer if extra viewer menu options should be added for a grid, via the OpenSimulator-specific SimulatorFeatures capability.

Some exceptions seen on startup of heavily loaded simulators were fixed.

On user logout, there is no longer a delay if any neighbouring simulators are unresponsive.

RemoteAdmin admin_save_heightmap and admin_load_heightmap commands now correctly work if region_id is specified in the request, not only if both regionid and region_id parameters are given.

Configuration

No significant changes in this release.

Services

Version 3 style Destination guide and avatar picker URLs can now be sent to the viewer on login. Full V3-like avatar picker implementation is a work in progress. This is set in the [LoginService] section of bin/Robust.ini or bin/config-include/StandaloneCommon.ini

Added experimental “show grid users online” console command to GridUser Robust service. This will show the approximate number of users online in the grid (including Hypergrid visitors) at any particular time. This is not guaranteed to be 100% accurate as it will not count users that have been continuously online for 5 days, and may miscount users who did not cleanly log off (e.g. because of viewer or simulator crash) in the past 5 days.

Hypergrid

There is now a [Hypergrid] configuration section in bin/config-include/*.ini files for standalone and grid. Here, a HomeUri and GatekeeperURI can be set which will apply to all other sections unless specifically overriden. The previous configuration arrangements where these settings were made separately in all relevant sections will continue to work. See Installing and Running Hypergrid for more details.

Hypergrid agent teleport efficiency improved.

Stricter checks now made on HG inventory giving and object taking if OutboundPermission is set to false in config.

Assets used in light projection, particle projection and collisions sounds now gathered when transferring objects across the Hypergrid.

Added DefaultHGRegion flag for regions in [GridService] config sections. This allows one to specify different default regions for incoming Hypergrid users and local logins.

Viewer avatar picker will now find foreign Hypergrid users.

Objects

Experimental export transfer permission which will indicate whether a creator has given permission to export an item from a grid. This work is ongoing and also requires viewer changes to provide a checkbox for this new permission. The Singularity viewer is carrying out this prototype work.

Mesh/Sculpt

Mesh upload now correctly rotates the constituent parts of the mesh object to match the preview.

Mesh upload no longer fails if another user has entered and exited the region.

Avatars

Avatars can now have more than one attachment per attachment point (multi attachments).

Changing the running flag in scripts in attachments is now correctly saved without having to detach the attachment.

A worn item no longer becomes invalid if is renamed after being edited in the same viewer session.

Editing the root prim of an attached linkset will no longer send the child prims to extremely remote locations on reattach. Such editing is still imperfect since the root prim location is not preserved properly.

Exceptions no longer sometimes generated when an attachment with active sensors is removed.

Experimental feature added to throttle rezzing of avatar attachments when a user logs in or changes outfit. This is to avoid CPU spikes on busy sims for avatars with a large number of high prim attachments. This is controlled via the ThrottlePer100PrimsRezzed attribute in [Attachments] in OpenSim.ini or via the “debug attachments throttle <ms>” console command line. This is not active by default.

Avatars now roll when flying.

Avatars can now hear chat that originates from neighbouring regions if they are within range.

Added avatar picker search HTTP capability.

Console “kick user” command now only kicks the user if the name is an exact match, rather than a fuzzy match (e.g. “kick user tiny tom” will no longer also kick user “tiny atomic”.

Added “sit user name” and “stand user name” console commands to sit avatars on available explicit seats in the scene and stand them. This is mainly for debugging purposes though could be useful in some scenarios, such as conferences or teaching.

A request for the name of a user with a zero UUID will now always return "Unknown User". This is to avoid spamming the logs with invalid request notices where a user ID is not available. No valid user should have a zero UUID.

Teleport

New teleport protocol version "SIMULATION/0.2" introduced and active by default. This is significantly different from the old "SIMULATION/0.1" version and should be more efficient. Simulators providing the "SIMULATION/0.2" protocol will automatically fallback to "SIMULATION/0.1" if the destination simulator does not support "SIMULATION/0.2" (i.e. OpenSimulator 0.7.5 and before). If necessary, the simulator can be forced to provide only "SIMULATION/0.1" when it's a destination by setting the ConnectorProtocolVersion in the [SimulationService] config setting of StandaloneCommon.ini or GridCommon.ini, and request "SIMULATION/0.1" of destinations when it is a source by setting MaxOutgoingTransferVersion in the [EntityTransfer] section of OpenSim.ini.

Fixed problems on some meshes never being seen on the destination region after a teleport.

Reduced the incidence of an avatar losing its appearance when teleporting between regions.

Teleport cancellation improved.

Teleport failure information to viewer improved.

Physics

A very large number of improvements were made to the BulletSim physics engine plugin, including improvements to avatar movement, collision detection, integration with relevant LSL script functions, linksets, megaregion support, mesh, physical objects, physical properties, terrain, vehicles and volume detect. It should general perform better than the OpenDynamicsEngine plugin and has much better behaviour in many situations (e.g. vehicles). In this release it is not yet default and has to be switched to explicitly in config.

The land_collision LSL event is now also triggered on physics collisions as well as land_collision_start and land_collision_end.

An osGetPhysicsEngineType() OSSL function to allow scripts to determine what physics engine they are running under.

Sound

llSetSoundQueueing() implemented.

Voice

Voice distance attenuation settings are now correctly passed on to the Vivox voice server.

Requests to a Vivox voice server are now done serially rather than concurrently when an avatar logs in. This may improve the login experience if Vivox is being used.

Region/Estates/Parcels

Performance of the simulator with respect to the number of clients connected very greatly improved.

The region should no longer freeze momentarily for other users when someone logs on, as long as performance is not constrained by a server limitation.

Some client UDP requests throttled to improve simulator performance.

Fixed a bug where UDP packets received from avatars with a “00″ in the first part of their UUID were not handled.

Terrain editing performance greatly improved.

New regions are now by default rated General (PG) rather than Mature. This means that viewers will now hear scripted object sounds from such regions by default rather than having to raise their content settings to Mature in their viewer.

Added command “set water height” to slow the water height of a region to be set directly from the console.

Estate settings and operations (e.g. teleport all users home) will now work across all the simulators on an estate, not just in the simulator in which the command was executed.

Administrators and estate owners are no longer blocked from entering a region with a misconfigured telehub.

Estate settings are now obeyed for sun position on a region.

Taking and re-rezzing coalesced objects in a megaregion now works correctly.

The IRC module will now alert users when they enter a region where it is active.

Map

Different regions on a single simulator can now use different fixed map tiles. This is specified using the MaptileStaticUUID optional setting in the region configuration file.

Instant Messaging

OpenSimulator now comes with a core message save and redelivery system for offline avatars. This is not currently enabled by default.

Friends/Profiles

The previously external osprofile module is now an optional module in the OpenSimulator distribution. This provides viewer 1-like user profile support and also adds some further changes to make it more Hypergrid friendly. Currently, this is configured by setting a ProfileServiceURL in the [UserProfiles] section of OpenSim.ini which points to either the standalone server or to a robust grid service. See OpenSim.ini.example for more information.

Friendship termination fixed where the terminatee is in the same simulator as the terminator.

Archiving

Inventory Archive (IAR) loads will now skip corrupted coalesced objects rather than terminating the load.

Specifying "/" as the inventory path in the "save iar" command will now save just the root folders instead of also saving the parent "My Inventory" folder. This makes it easier to restore entire avatar inventories. Previously, this could also be done by specifying the path "/*".

Assets used in light projection, particle projection and collisions sounds now correctly recorded in OpenSimulator Archives (OARs) and IARs.

NPC

No significant changes in this release.

Inventory

A user that declines an inventory offer and subsequently empties their trash will no longer cause the givers original item or folder to become invalid.

Copies of objects taken from a scene are no longer sometimes be placed in the lost + found inventory folder.

Objects rezzed from the trash or lost + found inventory folders are no longer wrongly placed back there if the object or a copy is retaken.

Throttling of HTTP inventory requests added. This should improve performance for viewers using HTTP inventory.

Fixed issues with giving items between users on different simultators where the regions are not neighbours.

Groups

A groups service was added directly to the OpenSimulator core distribution. This has been reliable but is not yet enabled by default. External documentation is also scarce - please see the [Groups] section in the OpenSim.ini config file and in other relevant config files for instructions on how to enable it.

Monitoring

For the "debug http out <level>" command, level 5 will now log the first 80 characters of the body of an outgoing HTTP request and level 6 will log the full message body. This matches existing logging levels for incoming HTTP data (47b6e78).

"show stats” console command and infrastructure available from the ROBUST console as well as from the simulator console. This means that ROBUST can now display statistical information for debug and monitoring purposes.

For stats which show the change over time, “show stats” now displays the last delta as well as the average delta. This is rather cryptic at the moment and needs documentation.

Added “show caps stats by user” and “show caps stats by cap” console commands to show number of requests by viewers for different HTTP capabilities.

Added the experimental ability to dump out the output of the “show stats all” command) to the file OpenSimStats.log (or RobustStats.log) every 5 seconds. This can only currently be controlled with the commands “debug stats record start” and “debug stats record stop”.

Added raw inbound (IncomingUDPReceivesCount) and outbound (OutgoingUDPSendsCount) UDP client stack packet counts to show exactly how many packets were being processed and transmitted by the simulator.

Added an experimental framework for posting warnings to the log if certain checks fail (e.g. handling less than 5 inbound UDP packets per minute for each logged in avatar). This framework is not currently in use by any part of the OpenSimulator distribution.

Test

Added a "none" behaviour for bots in the pCampbot testing facility, to test load where bots are not moving.

Added ability to specify certain settings in a pCampbot.ini file, ability to specify start location on the command line

Added pCampbot ability to disconnect and [re]connect bots during operation.

Added pCampbot ability to change bot parameters during operation.

Added ability to change login delay for pCampbot bots.

Added ability to dynamically and remove behaviours from bots whilst logged in. This allows one to test bots that are still and then the same bots that are moving.

Scripting

Scripts can now run with co-operative termination rather than forced. This should be more stable since it does not rely on thread aborts where there is a non-zero chance that the Mono/.NET virtual machine will be left in an inconsistent state. However, this feature is still considered experimental. See the ScriptStopStrategy in the [XEngine] config section of OpenSimDefaults.ini for more details.

Issue fixed where scripts would occasionally not run on startup on all regions of a multi-region simulator.

C# scripts now correctly return error line and column numbers.

llSetSoundQueueing() implemented.

llSetKeyframedMotion() implemented.

llSetContentType() implemented.

llTransferLindenDollars() made available. However, any action on money transfers still has to be performed by a third-party module.

llCastRay() significantly improved.

llAxisAngle2Rot() now better matches the implementation seen on the Linden Lab grid.

llRot2Axis() and llRot2Angle() now no longer wrongly return NaN (not a number) for very small rotations. This should match the behaviour of these functions on the Linden Lab grid.

llGetObjectDetails() now correctly returns the world rotation of a sitting avatar rather than its local rotation with respect to the seat.

llGetLinkPrimitiveParams() and llGetPrimitiveParams() now correctly return data for avatars seated on the linkset. The equivalent set LSL functions do not yet work for seated avatars.

llGetLinkPrimitiveParams() now returns the list of parameters fetched so far if it is given an invalid link number, rather than throwing an internal scripting exception. This matches behaviour seen on the LL grid, though a script warning is not yet generated.

llGetLinkPrimitiveParams() fixed so that it correctly works if a single parameter request is given after specifying a different linked prim via the PRIM_LINK_TARGET property.

llGetNotecardLine() and llGetNumberOfNotecardLines() will no longer occasionally lose dataserver calls if the same notecard is read simultaneously by different scripts.

Sensors, llGetRootRotation(), and scripting *Param() functions now correctly use or return the avatar’s world rotation if it’s sitting rather than it’s local rotation with respect to the seat.

Objects removed with llDie() will now also disappear for users looking in from neighbouring regions.

llGetNumberOfPrims() no longer returns the wrong number when avatars are sitting on certain prims of a cloned object before the simulator is restarted.

llGetObjectDetails() can now be used with the OBJECT_CHARACTER_TIME, OBJECT_ROOT, OBJECT_ATTACHED_POINT, OBJECT_PATHFINDING_TYPE, OBJECT_PHYSICS, OBJECT_PHANTOM and OBJECT_TEMP_ON_REZ constants. Those associated with pathfinding currently returns dummy values since OpenSimulator currently has no pathfinding implementation.

Default particle count (PSYS_SRC_BURST_PART_COUNT) on calling llParticleSystem() is now 1 instead of 0.

llSetPrimParams() can now correctly disable flexi.

llSetPayPrice() no longer changes the prices on both the original and cloned object before a simulator restart.

osGetPrimitiveParams() now works correctly for prims with the same owner as the executing script, rather than for prims with different owners.

PRIM_TEMP_ON_REZ or PRIM_PHANTOM with osSetPrimitiveParams() will now set these on the target prim rather than the prim containing the script.

osCauseHealing() no longer terminates the script event if called with the ID of an avatar that was not present in the region.

osMakeNotecard() no longer fails if given an LSL list containing vectors or quaternions.