Fixed llGetObjectDetails(), OBJECT_ROT for sitting avatars case, plus 'cosmetics' and added some parts costs information.

avinationmerge
UbitUmarov 2012-06-13 01:51:22 +01:00
parent b4ab9a7350
commit 4027c8e9c9
1 changed files with 23 additions and 9 deletions

View File

@ -11800,6 +11800,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
LSL_List ret = new LSL_List(); LSL_List ret = new LSL_List();
UUID key = new UUID(); UUID key = new UUID();
if (UUID.TryParse(id, out key)) if (UUID.TryParse(id, out key))
{ {
ScenePresence av = World.GetScenePresence(key); ScenePresence av = World.GetScenePresence(key);
@ -11817,13 +11819,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
ret.Add(new LSL_String("")); ret.Add(new LSL_String(""));
break; break;
case ScriptBaseClass.OBJECT_POS: case ScriptBaseClass.OBJECT_POS:
ret.Add(new LSL_Vector((double)av.AbsolutePosition.X, (double)av.AbsolutePosition.Y, (double)av.AbsolutePosition.Z)); Vector3 avpos = av.AbsolutePosition;
ret.Add(new LSL_Vector((double)avpos.X, (double)avpos.Y, (double)avpos.Z));
break; break;
case ScriptBaseClass.OBJECT_ROT: case ScriptBaseClass.OBJECT_ROT:
ret.Add(new LSL_Rotation((double)av.Rotation.X, (double)av.Rotation.Y, (double)av.Rotation.Z, (double)av.Rotation.W)); Quaternion avrot = av.Rotation;
if(av.ParentID != 0 && av.ParentPart != null)
{
avrot = av.ParentPart.GetWorldRotation() * avrot;
}
ret.Add(new LSL_Rotation((double)avrot.X, (double)avrot.Y, (double)avrot.Z, (double)avrot.W));
break; break;
case ScriptBaseClass.OBJECT_VELOCITY: case ScriptBaseClass.OBJECT_VELOCITY:
ret.Add(new LSL_Vector(av.Velocity.X, av.Velocity.Y, av.Velocity.Z)); Vector3 avvel = av.Velocity;
ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z));
break; break;
case ScriptBaseClass.OBJECT_OWNER: case ScriptBaseClass.OBJECT_OWNER:
ret.Add(new LSL_String(id)); ret.Add(new LSL_String(id));
@ -11883,13 +11892,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
ret.Add(new LSL_String(obj.Description)); ret.Add(new LSL_String(obj.Description));
break; break;
case ScriptBaseClass.OBJECT_POS: case ScriptBaseClass.OBJECT_POS:
ret.Add(new LSL_Vector(obj.AbsolutePosition.X, obj.AbsolutePosition.Y, obj.AbsolutePosition.Z)); Vector3 opos = obj.AbsolutePosition;
ret.Add(new LSL_Vector(opos.X, opos.Y, opos.Z));
break; break;
case ScriptBaseClass.OBJECT_ROT: case ScriptBaseClass.OBJECT_ROT:
ret.Add(new LSL_Rotation(obj.RotationOffset.X, obj.RotationOffset.Y, obj.RotationOffset.Z, obj.RotationOffset.W)); Quaternion orot = obj.RotationOffset;
ret.Add(new LSL_Rotation(orot.X, orot.Y, orot.Z, orot.W));
break; break;
case ScriptBaseClass.OBJECT_VELOCITY: case ScriptBaseClass.OBJECT_VELOCITY:
ret.Add(new LSL_Vector(obj.Velocity.X, obj.Velocity.Y, obj.Velocity.Z)); Vector3 ovel = obj.Velocity;
ret.Add(new LSL_Vector(ovel.X, ovel.Y, ovel.Z));
break; break;
case ScriptBaseClass.OBJECT_OWNER: case ScriptBaseClass.OBJECT_OWNER:
ret.Add(new LSL_String(obj.OwnerID.ToString())); ret.Add(new LSL_String(obj.OwnerID.ToString()));
@ -11927,17 +11939,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// The value returned in SL for normal prims is prim count // The value returned in SL for normal prims is prim count
ret.Add(new LSL_Integer(0)); ret.Add(new LSL_Integer(0));
break; break;
// costs below may need to be diferent for root parts, need to check
case ScriptBaseClass.OBJECT_SERVER_COST: case ScriptBaseClass.OBJECT_SERVER_COST:
// The value returned in SL for normal prims is prim count // The value returned in SL for normal prims is prim count
ret.Add(new LSL_Float(0)); ret.Add(new LSL_Float(0));
break; break;
case ScriptBaseClass.OBJECT_STREAMING_COST: case ScriptBaseClass.OBJECT_STREAMING_COST:
// The value returned in SL for normal prims is prim count * 0.06 // The value returned in SL for normal prims is prim count * 0.06
ret.Add(new LSL_Float(0)); ret.Add(new LSL_Float(obj.StreamingCost));
break; break;
case ScriptBaseClass.OBJECT_PHYSICS_COST: case ScriptBaseClass.OBJECT_PHYSICS_COST:
// The value returned in SL for normal prims is prim count // The value returned in SL for normal prims is prim count
ret.Add(new LSL_Float(0)); ret.Add(new LSL_Float(obj.PhysicsCost));
break; break;
default: default:
// Invalid or unhandled constant. // Invalid or unhandled constant.