If object is an attachment, make llGetVel() return the avatar's speed rather than the object's own zero speed.

As per http://opensimulator.org/mantis/view.php?id=5575
bulletsim
Justin Clark-Casey (justincc) 2011-07-15 23:36:32 +01:00
parent 3e5b2d52ff
commit 0ee7a5ee81
2 changed files with 16 additions and 2 deletions

View File

@ -566,7 +566,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
/// <param name="silent"></param> /// <param name="silent"></param>
protected void AttachToAgent(ScenePresence avatar, SceneObjectGroup so, uint attachmentpoint, Vector3 attachOffset, bool silent) protected void AttachToAgent(ScenePresence avatar, SceneObjectGroup so, uint attachmentpoint, Vector3 attachOffset, bool silent)
{ {
m_log.DebugFormat("[ATTACHMENTS MODULE]: Adding attachment {0} to avatar {1} in pt {2} pos {3} {4}", Name, avatar.Name, m_log.DebugFormat("[ATTACHMENTS MODULE]: Adding attachment {0} to avatar {1} in pt {2} pos {3} {4}", Name, avatar.Name,
attachmentpoint, attachOffset, so.RootPart.AttachedPos); attachmentpoint, attachOffset, so.RootPart.AttachedPos);

View File

@ -2214,7 +2214,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Vector llGetVel() public LSL_Vector llGetVel()
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
return new LSL_Vector(m_host.Velocity.X, m_host.Velocity.Y, m_host.Velocity.Z);
Vector3 vel;
if (m_host.IsAttachment)
{
ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.AttachedAvatar);
vel = avatar.Velocity;
}
else
{
vel = m_host.Velocity;
}
return new LSL_Vector(vel.X, vel.Y, vel.Z);
} }
public LSL_Vector llGetAccel() public LSL_Vector llGetAccel()
@ -10021,8 +10034,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
break; break;
} }
} }
return ret; return ret;
} }
SceneObjectPart obj = World.GetSceneObjectPart(key); SceneObjectPart obj = World.GetSceneObjectPart(key);
if (obj != null) if (obj != null)
{ {