llAxes2Rot now implemented. Important note: quaternion <x,y,z,s>
is equal to <-x,-y,-z,-s>. The result may be different from LSL
output, but it is correct. A problem of rounding caused an error
of square rooting of zero as negative number, corrected by squaring
again. Function tested 360° along 3 axes. Vector fwd, left and up
have to be normalized.
Implements additional unlink modes (unlink root prim from link set, some
multi-set operations). Linking (single and mutiple) fully implemented.
Consistent numbering of links while in world. Link/delink with predictable
link numbering. Correct link numbers in LSL.
Not all multi-set ops implemented. Link numbers still change when taken and
re-rezzed.
llRot2Left and llRot2Up functions modified, using fast algebric
calculations instead of vectors and quaternions products.
The accuracy is the same. Normalization is now implemented.
llRot2Fwd function modified, using fast algebric calculations
instead of vectors and quaternions products. The accuracy is
the same. Normalization is now implemented.
The previous implementation of llEuler2Rot was not mathematically
incorrect, but it was an awkward way of posing the problem that
led to a few degenerate cases which were not handled correctly -
for example, PI rotations around X and Z axes were wrong. I put
some comments in the source about how I arrived at the current
implementation, which I think is easier to read, and gives
results that match SL.
When using math operators +,-,*,/ in an LSL script with an LSLFloat
and an integer literal the wrong result is returned. This patch
adds operators to the LSLFloat type to handle this case.
I needed to apply the patch a little better then last night
for: Dot product operator in LSL_Types.cs incorrectly returns
a component-wise vector multiplication; it should return a
scalar dot product. Thanks to M. Igarashi for the patch.
Dot product operator in LSL_Types.cs incorrectly returns a
component-wise vector multiplication; it should return a scalar
dot product. Thanks to M. Igarashi for the patch.
Patch 7 of the region patches. Finish off the region parts of the estate dialog. Full user functionality. Terrain textures, heights, water, avatar counts, prim bonus, debug settings and region toggles can now be set from the dialog on a per-region basis. Estate stuff defaults to sane values where there are no defaults, to estate_settings.xml otherwise. Sun still b0rked :(
This patch limits the maximum size of prims that can be created using libsl bots
or modified clients to 65536mper side. It also limits LSL functions to that size.
If a prim is already physical, the enforced constraint is 10m.
A prim that is larger than 10m cannot be turned physical, either via script or UI.
Linksets are handled correctly, so scaling of physical linksets is constrained by
the size of it's largest component prim. Also, turning linksets physical is based
on the size of it's largest ptim.
LSLInteger + literal integer is not an LSLInteger.
The included patch fixes the issue: LSLInteger + literal
integer is not an LSLInteger (also fixed for -,*,/)
added void osSetParcelMediaTime(double time) command to script engines.
which sets the position of the media that is playing. Time is in seconds.
Doesn't do any security checking (should be checking that the object/script is owned by the parcel owner). So could be abused, if it is then we should remove it, or add the security.
Only tested in dotnet scripting engine, but should work in XEngine too.
This patch adds the ability to set the prim type using llSetPrimitiveParams().
Seems to work ok, but there are a staggering number of cases to test,
so I have not yet tested them all.
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).