Another new OSSL function for returning the name of the script engine
currently running, osGetScriptEngineName, added to both DotNet and XEngine
OSSL API.
* This means that we will no longer pointlessly repersist all the prims in the scene when OpenSim first starts up
* This also means that force-update on the console will not trigger repersistence.
* Also, in other places persistence is no longer done where it wasn't actually necessary
* I think I changed the code for all instances correctly, but it's not possible that I missed some and some things which did persist properly have stopped
* Please patch or mantis if this is the case
Fixes:
- Wearable icon and name sreset to default on copy/paste
- Cache is not updated when renaming/moving folders
- Partial refactor to make inventory less dependen on AssetBase having a "Name" field
- Add llGiveInventoryList() function
Currently LSL code such as below does not compile on OpenSim, but compiles fine in Second Life:
list mylist = [];
mylist += [1, 2, 3];
mylist += "four";
list newlist = mylist + 5.0;
The problem is that the LSL_Types.list class does not have an operator for adding a string to a list.
I am including a patch which implements adding a string, integer or float to a list.
I am also including tests. The file LSL_TypesTestList.cs belongs in
OpenSim/Tests/OpenSim/Region/ScriptEngine/Common/.
the function that reports errors in event handling is not computing the
line numbers correctly for windows paths (and probably linux paths).
As a result, the conversion to int throws an exception.
note... i'm not sure why we extract the line number, convert it to an int,
then convert it back to a string... but hey... :-)
LSL scripts in which a float type is cast to a string or a string type
is cast to a float do not compile. When the script is translated from
LSL to C#, the LSL float type is translated into double. There is no
string <-> double cast in C#, so compilation fails.
There is a LSLFloat type, however it seems unfinished and is not used.
I am attaching a patch that implements the LSLFloat type. I have also
added two methods to the LSLString type to facilitate float <-> string casts.
* Unfortunately, there's some kludges with the Async manager and the llDetected functions that I have yet to decipher... so llDetected functions don't work with collision events at the moment....
llKey2Name fix to show avatar name instead of "Basic Entity"
One line fix. Replaces "presence.Name" =>
"presence.ControllingClient.Name" to return avatar's name.
- volume doesn't change with a new llLoopSound(same sound, new volume);
- SendFullUpdateToClients sends 0's in all sound related fields when
there's no sound on the prim, thereby improving the amount of data being
sent out on these prims (fixes zeropack)
- Removed some code duplication between llStartSound, llLoopSound and llParticleSystem() calls
There appears to be a problem with the mapping of scripts when an llHTTPRequest completes.
CheckHttpRequests() looks for a function that maps to the localID associated with the http
request. However, the only context in which it looks is that of the first region. That is,
m_CmdManager.m_ScriptEngine.m_ScriptManager is the same no matter where the script executed
that initiated the llHTTPRequest. Since scripts appear to be loaded into a region specific
scriptmanager on startup, the event handler is only found for requests coming from the first region.
Attached is an initial implementation of llGetNotecardLine and
llGetNumberOfNotecardLines. I decided to go ahead an send these out for
comment while I continue to work on the second part of the proper
implementation. These functions work and return the values requested, as
initially defined in the code, but should be properly implemented to return
the requested information via a dataserver event. This
event will be added and these functions fixed and included in a second
patch shortly.
llLoopSound sends out one packet to clients in view, so it doesn't work anymore
when clients enter later on, or the prim is modified in any way.
Solution: Stored sound data on prim, send full update instead.
llStartSound and llLoopSound now accept both LLUUIDs to a sound as well as object
inventory sound names. llStopSound clears prim data and sends full update.
This patch proposes a new function : osOpenRemoteDataChannel(key channeID)
that allow to open an XMLRPC channel for remote_data event. The difference
is that the channelID can be customized instead of being randomly generated.
Copying, reseting, dragging scripts cause unnecessary recompilation,
slowing down the simulator and filling up the ScriptEngines directory
with compiled .dll and misc. files.
This patch keeps track of compiled assets since the last simulator restarts,
and only recompiles new assets. (editing a script generates a new asset,
so no problems there).
* small patch that fixes a compiler warning (struct comparison against
null again, my favourites) in LSL_BuiltIn_Commands. LSL_Types.key has a
Boolean operator that can be used here.
* Added shell of new Python scripting engine. Similar in design to the one used by Rex, but will be structured at a region rather than object level, also is a region module.
* Moved script errors to the debug channel.
* Typing '/2147483647 OK' results in a debug_channel message.
* Expanded the available parameters that are send-able through IClientAPI
* Currently if you apply that to only one or two axis you get unpredictable and sometimes explosive results.
* Three axis works well enough to play with it anyway. More work is needed here.
* Fixed an incorrectly named method in ODE.NET
Attached is a patch for adding the llGetSunDirection functionality. It was implemented by adding a parameter to estate settings for storing the sun position. The sun position is calculated and stored via the sun module everytime the client's sun position is updated. It was tested with several different srcipts on Linux and Windows
* I expanded upon his patch just a bit to incorporate the following.
* if the avatar is sitting on this object, then we can unsit them.
* If the object owner also owns the parcel or if the land is group owned and the object is group owned by the same group or if the object is owned by a person with estate access, then we can unsit them.
* All objects are not touchable by default now
* When a script listens for one of the touch events in the state, an object becomes touchable.
* All LSL scripts report which events they consume now
** This uses semi-complicated Regex to discover the events, stick them in a dictionary, and then write a method call into each script state's state_entry() event.
** Tedd may figure out a better way to do this in the future. For now, this works for LSL.
Robust implementations of GetSubString, InsertString, and
DeleteSubstring. The existing implementations only worked for arguments
consistent with the underlying .Net implementation and did not
accomodate LL's negative indices.
Implements llGetInventoryKey with perms checking.
Adds perms checking to llGetTexture, adds type checking to llStartSound,
allows llSetTexture to reference textures by name
This provides fixed implementations for llListReplaceList and llList2CSV.
llListReplaceList was broken except for simple indices. llList2CSV did not handle processing of an empty list.
* Yet more script function cleanup - Patch fixes many different script functions: NotImplemented that weren't there at all, redundant or unneeded m_host.AddScriptLPS, etc
* Re-applied Tedd's patch that got overwritten.
* Replaced (state)\s+([^;\n\r]+)([\r\n\s];) with (state)\s+([^;\n\r]+)(;[\r\n\s])
* Added a state(string) method to BuiltIn_Commands_BaseClass
and llDetectedOwner is called on the script, the current implementation attempts to
find the detected avatar as a SceneObjectPart and return the owner of that part.
* Renamed plugin console message, to send a message to a plugin, use either "plugin <message>", or any unrecognised message will be sent ("plugin" sends explicitly) This replaces the old "script <message>".
* Terrain commands - "terrain <command>" now works again. "Script terrain <command>" does not. Many of the commands have now been reimplemented, eg load-tile. However some have new syntax.
* New console command handler, you can now use things like "terrain help" or "terrain save help". See TerrainModule.cs for an example of how to use the new "Commander" class.
* Commander class - advanced processing of console input and also enables a script API to be generated from registered console commands.
This patch implements llMessageLinked.
I had to make a change to llGetLinkNumber to return m_host.LinkNum + 1 for
link sets of more than 1 prim, or 0 for a single object, since according
to:
http://rpgstats.com/wiki/index.php?title=LlMessageLinked
linksets with 2 or more prims start the link numbering at 1, but a single
prims link number is 0.