diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 774 |
1 files changed, 384 insertions, 390 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index a72d4e9..f103de2 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -12963,33 +12963,34 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
12963 | m_host.SetForceMouselook(mouselook != 0); | 12963 | m_host.SetForceMouselook(mouselook != 0); |
12964 | } | 12964 | } |
12965 | 12965 | ||
12966 | public LSL_Float llGetObjectMass(string id) | 12966 | public LSL_Float llGetObjectMass(LSL_Key id) |
12967 | { | 12967 | { |
12968 | m_host.AddScriptLPS(1); | 12968 | m_host.AddScriptLPS(1); |
12969 | UUID key = new UUID(); | 12969 | UUID key = new UUID(); |
12970 | if (UUID.TryParse(id, out key)) | 12970 | if (!UUID.TryParse(id, out key)) |
12971 | { | 12971 | return 0; |
12972 | // return total object mass | ||
12973 | SceneObjectPart part = World.GetSceneObjectPart(key); | ||
12974 | if (part != null) | ||
12975 | return part.ParentGroup.GetMass(); | ||
12976 | 12972 | ||
12977 | // the object is null so the key is for an avatar | 12973 | // return total object mass |
12978 | ScenePresence avatar = World.GetScenePresence(key); | 12974 | SceneObjectPart part = World.GetSceneObjectPart(key); |
12979 | if (avatar != null) | 12975 | if (part != null) |
12976 | return part.ParentGroup.GetMass(); | ||
12977 | |||
12978 | // the object is null so the key is for an avatar | ||
12979 | ScenePresence avatar = World.GetScenePresence(key); | ||
12980 | if (avatar != null) | ||
12981 | { | ||
12982 | if (avatar.IsChildAgent) | ||
12980 | { | 12983 | { |
12981 | if (avatar.IsChildAgent) | 12984 | // reference http://www.lslwiki.net/lslwiki/wakka.php?wakka=llGetObjectMass |
12982 | { | 12985 | // child agents have a mass of 1.0 |
12983 | // reference http://www.lslwiki.net/lslwiki/wakka.php?wakka=llGetObjectMass | 12986 | return 1; |
12984 | // child agents have a mass of 1.0 | 12987 | } |
12985 | return 1; | 12988 | else |
12986 | } | 12989 | { |
12987 | else | 12990 | return avatar.GetMass(); |
12988 | { | ||
12989 | return (double)avatar.GetMass(); | ||
12990 | } | ||
12991 | } | 12991 | } |
12992 | } | 12992 | } |
12993 | |||
12993 | return 0; | 12994 | return 0; |
12994 | } | 12995 | } |
12995 | 12996 | ||
@@ -14197,18 +14198,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
14197 | return ret; | 14198 | return ret; |
14198 | } | 14199 | } |
14199 | 14200 | ||
14200 | public LSL_Integer llGetObjectPrimCount(string object_id) | 14201 | public LSL_Integer llGetObjectPrimCount(LSL_Key object_id) |
14201 | { | 14202 | { |
14202 | m_host.AddScriptLPS(1); | 14203 | m_host.AddScriptLPS(1); |
14203 | SceneObjectPart part = World.GetSceneObjectPart(new UUID(object_id)); | 14204 | UUID id; |
14205 | if(!UUID.TryParse(object_id, out id)) | ||
14206 | return 0; | ||
14207 | |||
14208 | SceneObjectPart part = World.GetSceneObjectPart(id); | ||
14204 | if (part == null) | 14209 | if (part == null) |
14205 | { | ||
14206 | return 0; | 14210 | return 0; |
14207 | } | 14211 | |
14208 | else | 14212 | return part.ParentGroup.PrimCount; |
14209 | { | ||
14210 | return part.ParentGroup.PrimCount; | ||
14211 | } | ||
14212 | } | 14213 | } |
14213 | 14214 | ||
14214 | public LSL_Integer llGetParcelMaxPrims(LSL_Vector pos, int sim_wide) | 14215 | public LSL_Integer llGetParcelMaxPrims(LSL_Vector pos, int sim_wide) |
@@ -14265,406 +14266,399 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
14265 | return ret; | 14266 | return ret; |
14266 | } | 14267 | } |
14267 | 14268 | ||
14268 | public LSL_String llStringTrim(string src, int type) | 14269 | public LSL_String llStringTrim(LSL_String src, LSL_Integer type) |
14269 | { | 14270 | { |
14270 | m_host.AddScriptLPS(1); | 14271 | m_host.AddScriptLPS(1); |
14271 | if (type == (int)ScriptBaseClass.STRING_TRIM_HEAD) { return src.TrimStart(); } | 14272 | if (type == (int)ScriptBaseClass.STRING_TRIM_HEAD) { return ((string)src).TrimStart(); } |
14272 | if (type == (int)ScriptBaseClass.STRING_TRIM_TAIL) { return src.TrimEnd(); } | 14273 | if (type == (int)ScriptBaseClass.STRING_TRIM_TAIL) { return ((string)src).TrimEnd(); } |
14273 | if (type == (int)ScriptBaseClass.STRING_TRIM) { return src.Trim(); } | 14274 | if (type == (int)ScriptBaseClass.STRING_TRIM) { return ((string)src).Trim(); } |
14274 | return src; | 14275 | return src; |
14275 | } | 14276 | } |
14276 | 14277 | ||
14277 | public LSL_List llGetObjectDetails(string id, LSL_List args) | 14278 | public LSL_List llGetObjectDetails(LSL_Key id, LSL_List args) |
14278 | { | 14279 | { |
14279 | m_host.AddScriptLPS(1); | 14280 | m_host.AddScriptLPS(1); |
14280 | |||
14281 | LSL_List ret = new LSL_List(); | 14281 | LSL_List ret = new LSL_List(); |
14282 | UUID key = new UUID(); | 14282 | UUID key = new UUID(); |
14283 | if (!UUID.TryParse(id, out key)) | ||
14284 | return ret; | ||
14283 | 14285 | ||
14284 | 14286 | ScenePresence av = World.GetScenePresence(key); | |
14285 | if (UUID.TryParse(id, out key)) | 14287 | if (av != null) |
14286 | { | 14288 | { |
14287 | ScenePresence av = World.GetScenePresence(key); | 14289 | foreach (object o in args.Data) |
14288 | |||
14289 | if (av != null) | ||
14290 | { | 14290 | { |
14291 | foreach (object o in args.Data) | 14291 | switch (int.Parse(o.ToString())) |
14292 | { | 14292 | { |
14293 | switch (int.Parse(o.ToString())) | 14293 | case ScriptBaseClass.OBJECT_NAME: |
14294 | { | 14294 | ret.Add(new LSL_String(av.Firstname + " " + av.Lastname)); |
14295 | case ScriptBaseClass.OBJECT_NAME: | 14295 | break; |
14296 | ret.Add(new LSL_String(av.Firstname + " " + av.Lastname)); | 14296 | case ScriptBaseClass.OBJECT_DESC: |
14297 | break; | 14297 | ret.Add(new LSL_String("")); |
14298 | case ScriptBaseClass.OBJECT_DESC: | 14298 | break; |
14299 | ret.Add(new LSL_String("")); | 14299 | case ScriptBaseClass.OBJECT_POS: |
14300 | break; | 14300 | Vector3 avpos; |
14301 | case ScriptBaseClass.OBJECT_POS: | ||
14302 | Vector3 avpos; | ||
14303 | |||
14304 | if (av.ParentID != 0 && av.ParentPart != null && | ||
14305 | av.ParentPart.ParentGroup != null && av.ParentPart.ParentGroup.RootPart != null ) | ||
14306 | { | ||
14307 | avpos = av.OffsetPosition; | ||
14308 | |||
14309 | if(!av.LegacySitOffsets) | ||
14310 | { | ||
14311 | Vector3 sitOffset = (Zrot(av.Rotation)) * (av.Appearance.AvatarHeight * 0.02638f *2.0f); | ||
14312 | avpos -= sitOffset; | ||
14313 | } | ||
14314 | 14301 | ||
14315 | SceneObjectPart sitRoot = av.ParentPart.ParentGroup.RootPart; | 14302 | if (av.ParentID != 0 && av.ParentPart != null && |
14316 | avpos = sitRoot.GetWorldPosition() + avpos * sitRoot.GetWorldRotation(); | 14303 | av.ParentPart.ParentGroup != null && av.ParentPart.ParentGroup.RootPart != null ) |
14317 | } | 14304 | { |
14318 | else | 14305 | avpos = av.OffsetPosition; |
14319 | avpos = av.AbsolutePosition; | ||
14320 | 14306 | ||
14321 | ret.Add(new LSL_Vector((double)avpos.X, (double)avpos.Y, (double)avpos.Z)); | 14307 | if(!av.LegacySitOffsets) |
14322 | break; | ||
14323 | case ScriptBaseClass.OBJECT_ROT: | ||
14324 | Quaternion avrot = av.GetWorldRotation(); | ||
14325 | ret.Add(new LSL_Rotation(avrot)); | ||
14326 | break; | ||
14327 | case ScriptBaseClass.OBJECT_VELOCITY: | ||
14328 | Vector3 avvel = av.GetWorldVelocity(); | ||
14329 | ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z)); | ||
14330 | break; | ||
14331 | case ScriptBaseClass.OBJECT_OWNER: | ||
14332 | ret.Add(new LSL_String(id)); | ||
14333 | break; | ||
14334 | case ScriptBaseClass.OBJECT_GROUP: | ||
14335 | ret.Add(new LSL_String(UUID.Zero.ToString())); | ||
14336 | break; | ||
14337 | case ScriptBaseClass.OBJECT_CREATOR: | ||
14338 | ret.Add(new LSL_String(UUID.Zero.ToString())); | ||
14339 | break; | ||
14340 | // For the following 8 see the Object version below | ||
14341 | case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT: | ||
14342 | ret.Add(new LSL_Integer(av.RunningScriptCount())); | ||
14343 | break; | ||
14344 | case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT: | ||
14345 | ret.Add(new LSL_Integer(av.ScriptCount())); | ||
14346 | break; | ||
14347 | case ScriptBaseClass.OBJECT_SCRIPT_MEMORY: | ||
14348 | ret.Add(new LSL_Integer(av.RunningScriptCount() * 16384)); | ||
14349 | break; | ||
14350 | case ScriptBaseClass.OBJECT_SCRIPT_TIME: | ||
14351 | ret.Add(new LSL_Float(av.ScriptExecutionTime() / 1000.0f)); | ||
14352 | break; | ||
14353 | case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE: | ||
14354 | ret.Add(new LSL_Integer(1)); | ||
14355 | break; | ||
14356 | case ScriptBaseClass.OBJECT_SERVER_COST: | ||
14357 | ret.Add(new LSL_Float(0)); | ||
14358 | break; | ||
14359 | case ScriptBaseClass.OBJECT_STREAMING_COST: | ||
14360 | ret.Add(new LSL_Float(0)); | ||
14361 | break; | ||
14362 | case ScriptBaseClass.OBJECT_PHYSICS_COST: | ||
14363 | ret.Add(new LSL_Float(0)); | ||
14364 | break; | ||
14365 | case ScriptBaseClass.OBJECT_CHARACTER_TIME: // Pathfinding | ||
14366 | ret.Add(new LSL_Float(0)); | ||
14367 | break; | ||
14368 | case ScriptBaseClass.OBJECT_ROOT: | ||
14369 | SceneObjectPart p = av.ParentPart; | ||
14370 | if (p != null) | ||
14371 | { | 14308 | { |
14372 | ret.Add(new LSL_String(p.ParentGroup.RootPart.UUID.ToString())); | 14309 | Vector3 sitOffset = (Zrot(av.Rotation)) * (av.Appearance.AvatarHeight * 0.02638f *2.0f); |
14310 | avpos -= sitOffset; | ||
14373 | } | 14311 | } |
14374 | else | 14312 | |
14313 | SceneObjectPart sitRoot = av.ParentPart.ParentGroup.RootPart; | ||
14314 | avpos = sitRoot.GetWorldPosition() + avpos * sitRoot.GetWorldRotation(); | ||
14315 | } | ||
14316 | else | ||
14317 | avpos = av.AbsolutePosition; | ||
14318 | |||
14319 | ret.Add(new LSL_Vector((double)avpos.X, (double)avpos.Y, (double)avpos.Z)); | ||
14320 | break; | ||
14321 | case ScriptBaseClass.OBJECT_ROT: | ||
14322 | Quaternion avrot = av.GetWorldRotation(); | ||
14323 | ret.Add(new LSL_Rotation(avrot)); | ||
14324 | break; | ||
14325 | case ScriptBaseClass.OBJECT_VELOCITY: | ||
14326 | Vector3 avvel = av.GetWorldVelocity(); | ||
14327 | ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z)); | ||
14328 | break; | ||
14329 | case ScriptBaseClass.OBJECT_OWNER: | ||
14330 | ret.Add(new LSL_Key((string)id)); | ||
14331 | break; | ||
14332 | case ScriptBaseClass.OBJECT_GROUP: | ||
14333 | ret.Add(new LSL_String(UUID.Zero.ToString())); | ||
14334 | break; | ||
14335 | case ScriptBaseClass.OBJECT_CREATOR: | ||
14336 | ret.Add(new LSL_Key(UUID.Zero.ToString())); | ||
14337 | break; | ||
14338 | // For the following 8 see the Object version below | ||
14339 | case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT: | ||
14340 | ret.Add(new LSL_Integer(av.RunningScriptCount())); | ||
14341 | break; | ||
14342 | case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT: | ||
14343 | ret.Add(new LSL_Integer(av.ScriptCount())); | ||
14344 | break; | ||
14345 | case ScriptBaseClass.OBJECT_SCRIPT_MEMORY: | ||
14346 | ret.Add(new LSL_Integer(av.RunningScriptCount() * 16384)); | ||
14347 | break; | ||
14348 | case ScriptBaseClass.OBJECT_SCRIPT_TIME: | ||
14349 | ret.Add(new LSL_Float(av.ScriptExecutionTime() / 1000.0f)); | ||
14350 | break; | ||
14351 | case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE: | ||
14352 | ret.Add(new LSL_Integer(1)); | ||
14353 | break; | ||
14354 | case ScriptBaseClass.OBJECT_SERVER_COST: | ||
14355 | ret.Add(new LSL_Float(0)); | ||
14356 | break; | ||
14357 | case ScriptBaseClass.OBJECT_STREAMING_COST: | ||
14358 | ret.Add(new LSL_Float(0)); | ||
14359 | break; | ||
14360 | case ScriptBaseClass.OBJECT_PHYSICS_COST: | ||
14361 | ret.Add(new LSL_Float(0)); | ||
14362 | break; | ||
14363 | case ScriptBaseClass.OBJECT_CHARACTER_TIME: // Pathfinding | ||
14364 | ret.Add(new LSL_Float(0)); | ||
14365 | break; | ||
14366 | case ScriptBaseClass.OBJECT_ROOT: | ||
14367 | SceneObjectPart p = av.ParentPart; | ||
14368 | if (p != null) | ||
14369 | { | ||
14370 | ret.Add(new LSL_String(p.ParentGroup.RootPart.UUID.ToString())); | ||
14371 | } | ||
14372 | else | ||
14373 | { | ||
14374 | ret.Add(new LSL_Key((string)id)); | ||
14375 | } | ||
14376 | break; | ||
14377 | case ScriptBaseClass.OBJECT_ATTACHED_POINT: | ||
14378 | ret.Add(new LSL_Integer(0)); | ||
14379 | break; | ||
14380 | case ScriptBaseClass.OBJECT_PATHFINDING_TYPE: // Pathfinding | ||
14381 | ret.Add(new LSL_Integer(ScriptBaseClass.OPT_AVATAR)); | ||
14382 | break; | ||
14383 | case ScriptBaseClass.OBJECT_PHYSICS: | ||
14384 | ret.Add(new LSL_Integer(0)); | ||
14385 | break; | ||
14386 | case ScriptBaseClass.OBJECT_PHANTOM: | ||
14387 | ret.Add(new LSL_Integer(0)); | ||
14388 | break; | ||
14389 | case ScriptBaseClass.OBJECT_TEMP_ON_REZ: | ||
14390 | ret.Add(new LSL_Integer(0)); | ||
14391 | break; | ||
14392 | case ScriptBaseClass.OBJECT_RENDER_WEIGHT: | ||
14393 | ret.Add(new LSL_Integer(-1)); | ||
14394 | break; | ||
14395 | case ScriptBaseClass.OBJECT_HOVER_HEIGHT: | ||
14396 | ret.Add(new LSL_Float(0)); | ||
14397 | break; | ||
14398 | case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE: | ||
14399 | LSL_Float shapeType; | ||
14400 | if (av.Appearance.VisualParams[(int)AvatarAppearance.VPElement.SHAPE_MALE] != 0) | ||
14401 | shapeType = new LSL_Float(1); | ||
14402 | else | ||
14403 | shapeType = new LSL_Float(0); | ||
14404 | ret.Add(shapeType); | ||
14405 | break; | ||
14406 | case ScriptBaseClass.OBJECT_LAST_OWNER_ID: | ||
14407 | ret.Add(new LSL_Key(ScriptBaseClass.NULL_KEY)); | ||
14408 | break; | ||
14409 | case ScriptBaseClass.OBJECT_CLICK_ACTION: | ||
14410 | ret.Add(new LSL_Integer(0)); | ||
14411 | break; | ||
14412 | case ScriptBaseClass.OBJECT_OMEGA: | ||
14413 | ret.Add(new LSL_Vector(Vector3.Zero)); | ||
14414 | break; | ||
14415 | case ScriptBaseClass.OBJECT_PRIM_COUNT: | ||
14416 | List<SceneObjectGroup> Attachments = av.GetAttachments(); | ||
14417 | int count = 0; | ||
14418 | try | ||
14419 | { | ||
14420 | foreach (SceneObjectGroup Attachment in Attachments) | ||
14421 | count += Attachment.PrimCount; | ||
14422 | } catch { }; | ||
14423 | ret.Add(new LSL_Integer(count)); | ||
14424 | break; | ||
14425 | case ScriptBaseClass.OBJECT_TOTAL_INVENTORY_COUNT: | ||
14426 | List<SceneObjectGroup> invAttachments = av.GetAttachments(); | ||
14427 | int invcount = 0; | ||
14428 | try | ||
14429 | { | ||
14430 | foreach (SceneObjectGroup Attachment in invAttachments) | ||
14375 | { | 14431 | { |
14376 | ret.Add(new LSL_String(id)); | 14432 | SceneObjectPart[] parts = Attachment.Parts; |
14433 | int nparts = parts.Count(); | ||
14434 | for(int i = 0; i < nparts; i++) | ||
14435 | invcount += parts[i].Inventory.Count; | ||
14377 | } | 14436 | } |
14378 | break; | 14437 | } catch { }; |
14379 | case ScriptBaseClass.OBJECT_ATTACHED_POINT: | 14438 | ret.Add(new LSL_Integer(invcount)); |
14380 | ret.Add(new LSL_Integer(0)); | 14439 | break; |
14381 | break; | 14440 | case ScriptBaseClass.OBJECT_REZZER_KEY: |
14382 | case ScriptBaseClass.OBJECT_PATHFINDING_TYPE: // Pathfinding | 14441 | ret.Add(new LSL_Key((string)id)); |
14383 | ret.Add(new LSL_Integer(ScriptBaseClass.OPT_AVATAR)); | 14442 | break; |
14384 | break; | 14443 | case ScriptBaseClass.OBJECT_GROUP_TAG: |
14385 | case ScriptBaseClass.OBJECT_PHYSICS: | 14444 | ret.Add(new LSL_String(av.Grouptitle)); |
14386 | ret.Add(new LSL_Integer(0)); | 14445 | break; |
14387 | break; | 14446 | case ScriptBaseClass.OBJECT_TEMP_ATTACHED: |
14388 | case ScriptBaseClass.OBJECT_PHANTOM: | 14447 | ret.Add(new LSL_Integer(0)); |
14389 | ret.Add(new LSL_Integer(0)); | 14448 | break; |
14390 | break; | 14449 | default: |
14391 | case ScriptBaseClass.OBJECT_TEMP_ON_REZ: | 14450 | // Invalid or unhandled constant. |
14392 | ret.Add(new LSL_Integer(0)); | 14451 | ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); |
14393 | break; | 14452 | break; |
14394 | case ScriptBaseClass.OBJECT_RENDER_WEIGHT: | ||
14395 | ret.Add(new LSL_Integer(-1)); | ||
14396 | break; | ||
14397 | case ScriptBaseClass.OBJECT_HOVER_HEIGHT: | ||
14398 | ret.Add(new LSL_Float(0)); | ||
14399 | break; | ||
14400 | case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE: | ||
14401 | LSL_Float shapeType; | ||
14402 | if (av.Appearance.VisualParams[(int)AvatarAppearance.VPElement.SHAPE_MALE] != 0) | ||
14403 | shapeType = new LSL_Float(1); | ||
14404 | else | ||
14405 | shapeType = new LSL_Float(0); | ||
14406 | ret.Add(shapeType); | ||
14407 | break; | ||
14408 | case ScriptBaseClass.OBJECT_LAST_OWNER_ID: | ||
14409 | ret.Add(new LSL_Key(ScriptBaseClass.NULL_KEY)); | ||
14410 | break; | ||
14411 | case ScriptBaseClass.OBJECT_CLICK_ACTION: | ||
14412 | ret.Add(new LSL_Integer(0)); | ||
14413 | break; | ||
14414 | case ScriptBaseClass.OBJECT_OMEGA: | ||
14415 | ret.Add(new LSL_Vector(Vector3.Zero)); | ||
14416 | break; | ||
14417 | case ScriptBaseClass.OBJECT_PRIM_COUNT: | ||
14418 | List<SceneObjectGroup> Attachments = av.GetAttachments(); | ||
14419 | int count = 0; | ||
14420 | try | ||
14421 | { | ||
14422 | foreach (SceneObjectGroup Attachment in Attachments) | ||
14423 | count += Attachment.PrimCount; | ||
14424 | } catch { }; | ||
14425 | ret.Add(new LSL_Integer(count)); | ||
14426 | break; | ||
14427 | case ScriptBaseClass.OBJECT_TOTAL_INVENTORY_COUNT: | ||
14428 | List<SceneObjectGroup> invAttachments = av.GetAttachments(); | ||
14429 | int invcount = 0; | ||
14430 | try | ||
14431 | { | ||
14432 | foreach (SceneObjectGroup Attachment in invAttachments) | ||
14433 | { | ||
14434 | SceneObjectPart[] parts = Attachment.Parts; | ||
14435 | int nparts = parts.Count(); | ||
14436 | for(int i = 0; i < nparts; i++) | ||
14437 | invcount += parts[i].Inventory.Count; | ||
14438 | } | ||
14439 | } catch { }; | ||
14440 | ret.Add(new LSL_Integer(invcount)); | ||
14441 | break; | ||
14442 | case ScriptBaseClass.OBJECT_REZZER_KEY: | ||
14443 | ret.Add(new LSL_Key(id)); | ||
14444 | break; | ||
14445 | case ScriptBaseClass.OBJECT_GROUP_TAG: | ||
14446 | ret.Add(new LSL_String(av.Grouptitle)); | ||
14447 | break; | ||
14448 | case ScriptBaseClass.OBJECT_TEMP_ATTACHED: | ||
14449 | ret.Add(new LSL_Integer(0)); | ||
14450 | break; | ||
14451 | default: | ||
14452 | // Invalid or unhandled constant. | ||
14453 | ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); | ||
14454 | break; | ||
14455 | } | ||
14456 | } | 14453 | } |
14457 | |||
14458 | return ret; | ||
14459 | } | 14454 | } |
14455 | return ret; | ||
14456 | } | ||
14460 | 14457 | ||
14461 | SceneObjectPart obj = World.GetSceneObjectPart(key); | 14458 | SceneObjectPart obj = World.GetSceneObjectPart(key); |
14462 | if (obj != null) | 14459 | if (obj != null) |
14460 | { | ||
14461 | foreach (object o in args.Data) | ||
14463 | { | 14462 | { |
14464 | foreach (object o in args.Data) | 14463 | switch (int.Parse(o.ToString())) |
14465 | { | 14464 | { |
14466 | switch (int.Parse(o.ToString())) | 14465 | case ScriptBaseClass.OBJECT_NAME: |
14467 | { | 14466 | ret.Add(new LSL_String(obj.Name)); |
14468 | case ScriptBaseClass.OBJECT_NAME: | 14467 | break; |
14469 | ret.Add(new LSL_String(obj.Name)); | 14468 | case ScriptBaseClass.OBJECT_DESC: |
14470 | break; | 14469 | ret.Add(new LSL_String(obj.Description)); |
14471 | case ScriptBaseClass.OBJECT_DESC: | 14470 | break; |
14472 | ret.Add(new LSL_String(obj.Description)); | 14471 | case ScriptBaseClass.OBJECT_POS: |
14473 | break; | 14472 | Vector3 opos = obj.AbsolutePosition; |
14474 | case ScriptBaseClass.OBJECT_POS: | 14473 | ret.Add(new LSL_Vector(opos.X, opos.Y, opos.Z)); |
14475 | Vector3 opos = obj.AbsolutePosition; | 14474 | break; |
14476 | ret.Add(new LSL_Vector(opos.X, opos.Y, opos.Z)); | 14475 | case ScriptBaseClass.OBJECT_ROT: |
14477 | break; | 14476 | Quaternion rot = Quaternion.Identity; |
14478 | case ScriptBaseClass.OBJECT_ROT: | ||
14479 | Quaternion rot = Quaternion.Identity; | ||
14480 | 14477 | ||
14481 | if (obj.ParentGroup.IsAttachment) | 14478 | if (obj.ParentGroup.IsAttachment) |
14482 | { | 14479 | { |
14483 | ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar); | 14480 | ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar); |
14484 | 14481 | ||
14485 | if (sp != null) | 14482 | if (sp != null) |
14486 | rot = sp.GetWorldRotation(); | 14483 | rot = sp.GetWorldRotation(); |
14487 | } | 14484 | } |
14485 | else | ||
14486 | { | ||
14487 | if (obj.ParentGroup.RootPart == obj) | ||
14488 | rot = obj.ParentGroup.GroupRotation; | ||
14488 | else | 14489 | else |
14489 | { | 14490 | rot = obj.GetWorldRotation(); |
14490 | if (obj.ParentGroup.RootPart == obj) | 14491 | } |
14491 | rot = obj.ParentGroup.GroupRotation; | ||
14492 | else | ||
14493 | rot = obj.GetWorldRotation(); | ||
14494 | } | ||
14495 | 14492 | ||
14496 | LSL_Rotation objrot = new LSL_Rotation(rot); | 14493 | LSL_Rotation objrot = new LSL_Rotation(rot); |
14497 | ret.Add(objrot); | 14494 | ret.Add(objrot); |
14498 | 14495 | ||
14499 | break; | 14496 | break; |
14500 | case ScriptBaseClass.OBJECT_VELOCITY: | 14497 | case ScriptBaseClass.OBJECT_VELOCITY: |
14501 | Vector3 vel = Vector3.Zero; | 14498 | Vector3 vel = Vector3.Zero; |
14502 | 14499 | ||
14503 | if (obj.ParentGroup.IsAttachment) | 14500 | if (obj.ParentGroup.IsAttachment) |
14504 | { | 14501 | { |
14505 | ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar); | 14502 | ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar); |
14506 | 14503 | ||
14507 | if (sp != null) | 14504 | if (sp != null) |
14508 | vel = sp.GetWorldVelocity(); | 14505 | vel = sp.GetWorldVelocity(); |
14509 | } | 14506 | } |
14510 | else | 14507 | else |
14511 | { | 14508 | { |
14512 | vel = obj.Velocity; | 14509 | vel = obj.Velocity; |
14513 | } | 14510 | } |
14514 | 14511 | ||
14515 | ret.Add(vel); | 14512 | ret.Add(vel); |
14516 | break; | 14513 | break; |
14517 | case ScriptBaseClass.OBJECT_OWNER: | 14514 | case ScriptBaseClass.OBJECT_OWNER: |
14518 | ret.Add(new LSL_String(obj.OwnerID.ToString())); | 14515 | ret.Add(new LSL_String(obj.OwnerID.ToString())); |
14519 | break; | 14516 | break; |
14520 | case ScriptBaseClass.OBJECT_GROUP: | 14517 | case ScriptBaseClass.OBJECT_GROUP: |
14521 | ret.Add(new LSL_String(obj.GroupID.ToString())); | 14518 | ret.Add(new LSL_String(obj.GroupID.ToString())); |
14522 | break; | 14519 | break; |
14523 | case ScriptBaseClass.OBJECT_CREATOR: | 14520 | case ScriptBaseClass.OBJECT_CREATOR: |
14524 | ret.Add(new LSL_String(obj.CreatorID.ToString())); | 14521 | ret.Add(new LSL_String(obj.CreatorID.ToString())); |
14525 | break; | 14522 | break; |
14526 | case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT: | 14523 | case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT: |
14527 | ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount())); | 14524 | ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount())); |
14528 | break; | 14525 | break; |
14529 | case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT: | 14526 | case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT: |
14530 | ret.Add(new LSL_Integer(obj.ParentGroup.ScriptCount())); | 14527 | ret.Add(new LSL_Integer(obj.ParentGroup.ScriptCount())); |
14531 | break; | 14528 | break; |
14532 | case ScriptBaseClass.OBJECT_SCRIPT_MEMORY: | 14529 | case ScriptBaseClass.OBJECT_SCRIPT_MEMORY: |
14533 | // The value returned in SL for mono scripts is 65536 * number of active scripts | 14530 | // The value returned in SL for mono scripts is 65536 * number of active scripts |
14534 | // and 16384 * number of active scripts for LSO. since llGetFreememory | 14531 | // and 16384 * number of active scripts for LSO. since llGetFreememory |
14535 | // is coded to give the LSO value use it here | 14532 | // is coded to give the LSO value use it here |
14536 | ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount() * 16384)); | 14533 | ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount() * 16384)); |
14537 | break; | 14534 | break; |
14538 | case ScriptBaseClass.OBJECT_SCRIPT_TIME: | 14535 | case ScriptBaseClass.OBJECT_SCRIPT_TIME: |
14539 | // Average cpu time in seconds per simulator frame expended on all scripts in the object | 14536 | // Average cpu time in seconds per simulator frame expended on all scripts in the object |
14540 | ret.Add(new LSL_Float(obj.ParentGroup.ScriptExecutionTime() / 1000.0f)); | 14537 | ret.Add(new LSL_Float(obj.ParentGroup.ScriptExecutionTime() / 1000.0f)); |
14541 | break; | 14538 | break; |
14542 | case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE: | 14539 | case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE: |
14543 | // according to the SL wiki A prim or linkset will have prim | 14540 | // according to the SL wiki A prim or linkset will have prim |
14544 | // equivalent of the number of prims in a linkset if it does not | 14541 | // equivalent of the number of prims in a linkset if it does not |
14545 | // contain a mesh anywhere in the link set or is not a normal prim | 14542 | // contain a mesh anywhere in the link set or is not a normal prim |
14546 | // The value returned in SL for normal prims is prim count | 14543 | // The value returned in SL for normal prims is prim count |
14547 | ret.Add(new LSL_Integer(obj.ParentGroup.PrimCount)); | 14544 | ret.Add(new LSL_Integer(obj.ParentGroup.PrimCount)); |
14548 | break; | 14545 | break; |
14549 | 14546 | ||
14550 | // costs below may need to be diferent for root parts, need to check | 14547 | // costs below may need to be diferent for root parts, need to check |
14551 | case ScriptBaseClass.OBJECT_SERVER_COST: | 14548 | case ScriptBaseClass.OBJECT_SERVER_COST: |
14552 | // The linden calculation is here | 14549 | // The linden calculation is here |
14553 | // http://wiki.secondlife.com/wiki/Mesh/Mesh_Server_Weight | 14550 | // http://wiki.secondlife.com/wiki/Mesh/Mesh_Server_Weight |
14554 | // The value returned in SL for normal prims looks like the prim count | 14551 | // The value returned in SL for normal prims looks like the prim count |
14555 | ret.Add(new LSL_Float(0)); | 14552 | ret.Add(new LSL_Float(0)); |
14556 | break; | 14553 | break; |
14557 | case ScriptBaseClass.OBJECT_STREAMING_COST: | 14554 | case ScriptBaseClass.OBJECT_STREAMING_COST: |
14558 | // The value returned in SL for normal prims is prim count * 0.06 | 14555 | // The value returned in SL for normal prims is prim count * 0.06 |
14559 | ret.Add(new LSL_Float(obj.StreamingCost)); | 14556 | ret.Add(new LSL_Float(obj.StreamingCost)); |
14560 | break; | 14557 | break; |
14561 | case ScriptBaseClass.OBJECT_PHYSICS_COST: | 14558 | case ScriptBaseClass.OBJECT_PHYSICS_COST: |
14562 | // The value returned in SL for normal prims is prim count | 14559 | // The value returned in SL for normal prims is prim count |
14563 | ret.Add(new LSL_Float(obj.PhysicsCost)); | 14560 | ret.Add(new LSL_Float(obj.PhysicsCost)); |
14564 | break; | 14561 | break; |
14565 | case ScriptBaseClass.OBJECT_CHARACTER_TIME: // Pathfinding | 14562 | case ScriptBaseClass.OBJECT_CHARACTER_TIME: // Pathfinding |
14566 | ret.Add(new LSL_Float(0)); | 14563 | ret.Add(new LSL_Float(0)); |
14567 | break; | 14564 | break; |
14568 | case ScriptBaseClass.OBJECT_ROOT: | 14565 | case ScriptBaseClass.OBJECT_ROOT: |
14569 | ret.Add(new LSL_String(obj.ParentGroup.RootPart.UUID.ToString())); | 14566 | ret.Add(new LSL_String(obj.ParentGroup.RootPart.UUID.ToString())); |
14570 | break; | 14567 | break; |
14571 | case ScriptBaseClass.OBJECT_ATTACHED_POINT: | 14568 | case ScriptBaseClass.OBJECT_ATTACHED_POINT: |
14572 | ret.Add(new LSL_Integer(obj.ParentGroup.AttachmentPoint)); | 14569 | ret.Add(new LSL_Integer(obj.ParentGroup.AttachmentPoint)); |
14573 | break; | 14570 | break; |
14574 | case ScriptBaseClass.OBJECT_PATHFINDING_TYPE: | 14571 | case ScriptBaseClass.OBJECT_PATHFINDING_TYPE: |
14575 | byte pcode = obj.Shape.PCode; | 14572 | byte pcode = obj.Shape.PCode; |
14576 | if (obj.ParentGroup.AttachmentPoint != 0 | 14573 | if (obj.ParentGroup.AttachmentPoint != 0 |
14577 | || pcode == (byte)PCode.Grass | 14574 | || pcode == (byte)PCode.Grass |
14578 | || pcode == (byte)PCode.Tree | 14575 | || pcode == (byte)PCode.Tree |
14579 | || pcode == (byte)PCode.NewTree) | 14576 | || pcode == (byte)PCode.NewTree) |
14580 | { | 14577 | { |
14581 | ret.Add(new LSL_Integer(ScriptBaseClass.OPT_OTHER)); | 14578 | ret.Add(new LSL_Integer(ScriptBaseClass.OPT_OTHER)); |
14582 | } | 14579 | } |
14583 | else | 14580 | else |
14584 | { | 14581 | { |
14585 | ret.Add(new LSL_Integer(ScriptBaseClass.OPT_LEGACY_LINKSET)); | 14582 | ret.Add(new LSL_Integer(ScriptBaseClass.OPT_LEGACY_LINKSET)); |
14586 | } | 14583 | } |
14587 | break; | 14584 | break; |
14588 | case ScriptBaseClass.OBJECT_PHYSICS: | 14585 | case ScriptBaseClass.OBJECT_PHYSICS: |
14589 | if (obj.ParentGroup.AttachmentPoint != 0) | 14586 | if (obj.ParentGroup.AttachmentPoint != 0) |
14590 | { | 14587 | { |
14591 | ret.Add(new LSL_Integer(0)); // Always false if attached | 14588 | ret.Add(new LSL_Integer(0)); // Always false if attached |
14592 | } | 14589 | } |
14593 | else | 14590 | else |
14594 | { | 14591 | { |
14595 | ret.Add(new LSL_Integer(obj.ParentGroup.UsesPhysics ? 1 : 0)); | 14592 | ret.Add(new LSL_Integer(obj.ParentGroup.UsesPhysics ? 1 : 0)); |
14596 | } | 14593 | } |
14597 | break; | 14594 | break; |
14598 | case ScriptBaseClass.OBJECT_PHANTOM: | 14595 | case ScriptBaseClass.OBJECT_PHANTOM: |
14599 | if (obj.ParentGroup.AttachmentPoint != 0) | 14596 | if (obj.ParentGroup.AttachmentPoint != 0) |
14600 | { | 14597 | { |
14601 | ret.Add(new LSL_Integer(0)); // Always false if attached | 14598 | ret.Add(new LSL_Integer(0)); // Always false if attached |
14602 | } | 14599 | } |
14603 | else | 14600 | else |
14604 | { | 14601 | { |
14605 | ret.Add(new LSL_Integer(obj.ParentGroup.IsPhantom ? 1 : 0)); | 14602 | ret.Add(new LSL_Integer(obj.ParentGroup.IsPhantom ? 1 : 0)); |
14606 | } | 14603 | } |
14607 | break; | 14604 | break; |
14608 | case ScriptBaseClass.OBJECT_TEMP_ON_REZ: | 14605 | case ScriptBaseClass.OBJECT_TEMP_ON_REZ: |
14609 | ret.Add(new LSL_Integer(obj.ParentGroup.IsTemporary ? 1 : 0)); | 14606 | ret.Add(new LSL_Integer(obj.ParentGroup.IsTemporary ? 1 : 0)); |
14610 | break; | 14607 | break; |
14611 | case ScriptBaseClass.OBJECT_RENDER_WEIGHT: | 14608 | case ScriptBaseClass.OBJECT_RENDER_WEIGHT: |
14609 | ret.Add(new LSL_Integer(0)); | ||
14610 | break; | ||
14611 | case ScriptBaseClass.OBJECT_HOVER_HEIGHT: | ||
14612 | ret.Add(new LSL_Float(0)); | ||
14613 | break; | ||
14614 | case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE: | ||
14615 | ret.Add(new LSL_Float(-1)); | ||
14616 | break; | ||
14617 | case ScriptBaseClass.OBJECT_LAST_OWNER_ID: | ||
14618 | ret.Add(new LSL_Key(obj.ParentGroup.LastOwnerID.ToString())); | ||
14619 | break; | ||
14620 | case ScriptBaseClass.OBJECT_CLICK_ACTION: | ||
14621 | ret.Add(new LSL_Integer(obj.ClickAction)); | ||
14622 | break; | ||
14623 | case ScriptBaseClass.OBJECT_OMEGA: | ||
14624 | ret.Add(new LSL_Vector(obj.AngularVelocity)); | ||
14625 | break; | ||
14626 | case ScriptBaseClass.OBJECT_PRIM_COUNT: | ||
14627 | ret.Add(new LSL_Integer(obj.ParentGroup.PrimCount)); | ||
14628 | break; | ||
14629 | case ScriptBaseClass.OBJECT_TOTAL_INVENTORY_COUNT: | ||
14630 | SceneObjectPart[] parts = obj.ParentGroup.Parts; | ||
14631 | int nparts = parts.Count(); | ||
14632 | int count = 0; | ||
14633 | for(int i = 0; i < nparts; i++) | ||
14634 | count += parts[i].Inventory.Count; | ||
14635 | ret.Add(new LSL_Integer(count)); | ||
14636 | break; | ||
14637 | case ScriptBaseClass.OBJECT_REZZER_KEY: | ||
14638 | ret.Add(new LSL_Key(obj.ParentGroup.RezzerID.ToString())); | ||
14639 | break; | ||
14640 | case ScriptBaseClass.OBJECT_GROUP_TAG: | ||
14641 | ret.Add(new LSL_String(String.Empty)); | ||
14642 | break; | ||
14643 | case ScriptBaseClass.OBJECT_TEMP_ATTACHED: | ||
14644 | if (obj.ParentGroup.AttachmentPoint != 0 && obj.ParentGroup.FromItemID == UUID.Zero) | ||
14645 | { | ||
14646 | ret.Add(new LSL_Integer(1)); | ||
14647 | } | ||
14648 | else | ||
14649 | { | ||
14612 | ret.Add(new LSL_Integer(0)); | 14650 | ret.Add(new LSL_Integer(0)); |
14613 | break; | 14651 | } |
14614 | case ScriptBaseClass.OBJECT_HOVER_HEIGHT: | 14652 | break; |
14615 | ret.Add(new LSL_Float(0)); | 14653 | default: |
14616 | break; | 14654 | // Invalid or unhandled constant. |
14617 | case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE: | 14655 | ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); |
14618 | ret.Add(new LSL_Float(-1)); | 14656 | break; |
14619 | break; | ||
14620 | case ScriptBaseClass.OBJECT_LAST_OWNER_ID: | ||
14621 | ret.Add(new LSL_Key(obj.ParentGroup.LastOwnerID.ToString())); | ||
14622 | break; | ||
14623 | case ScriptBaseClass.OBJECT_CLICK_ACTION: | ||
14624 | ret.Add(new LSL_Integer(obj.ClickAction)); | ||
14625 | break; | ||
14626 | case ScriptBaseClass.OBJECT_OMEGA: | ||
14627 | ret.Add(new LSL_Vector(obj.AngularVelocity)); | ||
14628 | break; | ||
14629 | case ScriptBaseClass.OBJECT_PRIM_COUNT: | ||
14630 | ret.Add(new LSL_Integer(obj.ParentGroup.PrimCount)); | ||
14631 | break; | ||
14632 | case ScriptBaseClass.OBJECT_TOTAL_INVENTORY_COUNT: | ||
14633 | SceneObjectPart[] parts = obj.ParentGroup.Parts; | ||
14634 | int nparts = parts.Count(); | ||
14635 | int count = 0; | ||
14636 | for(int i = 0; i < nparts; i++) | ||
14637 | count += parts[i].Inventory.Count; | ||
14638 | ret.Add(new LSL_Integer(count)); | ||
14639 | break; | ||
14640 | case ScriptBaseClass.OBJECT_REZZER_KEY: | ||
14641 | ret.Add(new LSL_Key(obj.ParentGroup.RezzerID.ToString())); | ||
14642 | break; | ||
14643 | case ScriptBaseClass.OBJECT_GROUP_TAG: | ||
14644 | ret.Add(new LSL_String(String.Empty)); | ||
14645 | break; | ||
14646 | case ScriptBaseClass.OBJECT_TEMP_ATTACHED: | ||
14647 | if (obj.ParentGroup.AttachmentPoint != 0 && obj.ParentGroup.FromItemID == UUID.Zero) | ||
14648 | { | ||
14649 | ret.Add(new LSL_Integer(1)); | ||
14650 | } | ||
14651 | else | ||
14652 | { | ||
14653 | ret.Add(new LSL_Integer(0)); | ||
14654 | } | ||
14655 | break; | ||
14656 | default: | ||
14657 | // Invalid or unhandled constant. | ||
14658 | ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); | ||
14659 | break; | ||
14660 | } | ||
14661 | } | 14657 | } |
14662 | |||
14663 | return ret; | ||
14664 | } | 14658 | } |
14665 | } | 14659 | } |
14666 | 14660 | ||
14667 | return new LSL_List(); | 14661 | return ret; |
14668 | } | 14662 | } |
14669 | 14663 | ||
14670 | internal UUID GetScriptByName(string name) | 14664 | internal UUID GetScriptByName(string name) |