Thank you kindly, Idb for a patch that solves:

lsl conformity, llPushObject incorrectly 
restricts  the pushing of objects based 
on region and parcel flags
0.6.0-stable
Charles Krinke 2008-10-20 01:42:02 +00:00
parent a5d945e199
commit e9134a050a
1 changed files with 60 additions and 66 deletions

View File

@ -3480,16 +3480,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
ScenePresence pusheeav = null;
//SceneObjectPart pusheeob = null;
EntityBase obj = null;
Vector3 PusheePos = Vector3.Zero;
SceneObjectPart pusheeob = null;
List<ScenePresence> avatars = World.GetAvatars();
foreach (ScenePresence avatar in avatars)
{
if (avatar.UUID == targetID)
ScenePresence avatar = World.GetScenePresence(targetID);
if (avatar != null)
{
pusheeIsAvatar = true;
@ -3521,14 +3517,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
PusheePos = pusheeav.AbsolutePosition;
}
obj = (EntityBase)pusheeav;
break;
}
}
if (!pusheeIsAvatar)
{
// not an avatar so push is not affected by parcel flags
pusheeob = World.GetSceneObjectPart((UUID)target);
// We can't find object
@ -3540,13 +3533,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
PusheePos = pusheeob.AbsolutePosition;
//obj = (EntityBase)pusheeob;
pushAllowed = true;
}
else
{
if (pushrestricted)
{
ILandObject targetlandObj = World.LandChannel.GetLandObject(PusheePos.X,PusheePos.Y);
ILandObject targetlandObj = World.LandChannel.GetLandObject(PusheePos.X, PusheePos.Y);
// We didn't find the parcel but region is push restricted so assume it is NOT ok
if (targetlandObj == null)
@ -3587,6 +3580,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
}
}
}
if (pushAllowed)
{
float distance = (PusheePos - m_host.AbsolutePosition).Length();