Merge branch 'master' into httptests

httptests
UbitUmarov 2017-08-24 02:18:40 +01:00
commit a1aa2f1add
5 changed files with 33 additions and 9 deletions

View File

@ -371,7 +371,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
teleportFlags |= (uint)TeleportFlags.Godlike; teleportFlags |= (uint)TeleportFlags.Godlike;
} }
if (!sp.Scene.Permissions.CanTeleport(sp.UUID)) else if (!sp.Scene.Permissions.CanTeleport(sp.UUID))
return; return;
string destinationRegionName = "(not found)"; string destinationRegionName = "(not found)";
@ -391,17 +391,27 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
try try
{ {
// Reset animations; the viewer does that in teleports.
sp.Animator.ResetAnimations();
if (regionHandle == sp.Scene.RegionInfo.RegionHandle) if (regionHandle == sp.Scene.RegionInfo.RegionHandle)
{ {
if(!sp.AllowMovement)
{
sp.ControllingClient.SendTeleportFailed("You are frozen");
m_entityTransferStateMachine.ResetFromTransit(sp.UUID);
return;
}
// Reset animations; the viewer does that in teleports.
sp.Animator.ResetAnimations();
destinationRegionName = sp.Scene.RegionInfo.RegionName; destinationRegionName = sp.Scene.RegionInfo.RegionName;
TeleportAgentWithinRegion(sp, position, lookAt, teleportFlags); TeleportAgentWithinRegion(sp, position, lookAt, teleportFlags);
} }
else // Another region possibly in another simulator else // Another region possibly in another simulator
{ {
// Reset animations; the viewer does that in teleports.
sp.Animator.ResetAnimations();
GridRegion finalDestination = null; GridRegion finalDestination = null;
try try
{ {

View File

@ -2201,12 +2201,12 @@ namespace OpenSim.Region.CoreModules.World.Land
((Scene)client.Scene).TryGetScenePresence(client.AgentId, out parcelManager); ((Scene)client.Scene).TryGetScenePresence(client.AgentId, out parcelManager);
System.Threading.Timer Timer; System.Threading.Timer Timer;
if (targetAvatar.GodController.UserLevel == 0) if (targetAvatar.GodController.UserLevel < 200)
{ {
ILandObject land = ((Scene)client.Scene).LandChannel.GetLandObject(targetAvatar.AbsolutePosition.X, targetAvatar.AbsolutePosition.Y); ILandObject land = ((Scene)client.Scene).LandChannel.GetLandObject(targetAvatar.AbsolutePosition.X, targetAvatar.AbsolutePosition.Y);
if (!((Scene)client.Scene).Permissions.CanEditParcelProperties(client.AgentId, land, GroupPowers.LandEjectAndFreeze, true)) if (!((Scene)client.Scene).Permissions.CanEditParcelProperties(client.AgentId, land, GroupPowers.LandEjectAndFreeze, true))
return; return;
if (flags == 0) if ((flags & 1) == 0) // only lowest bit has meaning for now
{ {
targetAvatar.AllowMovement = false; targetAvatar.AllowMovement = false;
targetAvatar.ControllingClient.SendAlertMessage(parcelManager.Firstname + " " + parcelManager.Lastname + " has frozen you for 30 seconds. You cannot move or interact with the world."); targetAvatar.ControllingClient.SendAlertMessage(parcelManager.Firstname + " " + parcelManager.Lastname + " has frozen you for 30 seconds. You cannot move or interact with the world.");
@ -2258,7 +2258,7 @@ namespace OpenSim.Region.CoreModules.World.Land
Vector3 pos = m_scene.GetNearestAllowedPosition(targetAvatar, land); Vector3 pos = m_scene.GetNearestAllowedPosition(targetAvatar, land);
targetAvatar.TeleportWithMomentum(pos, null); targetAvatar.TeleportOnEject(pos);
targetAvatar.ControllingClient.SendAlertMessage("You have been ejected by " + parcelManager.Firstname + " " + parcelManager.Lastname); targetAvatar.ControllingClient.SendAlertMessage("You have been ejected by " + parcelManager.Firstname + " " + parcelManager.Lastname);
parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected."); parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected.");

View File

@ -1886,7 +1886,7 @@ namespace OpenSim.Region.CoreModules.World.Land
if (land.LandData.LocalID == LandData.LocalID) if (land.LandData.LocalID == LandData.LocalID)
{ {
Vector3 pos = m_scene.GetNearestAllowedPosition(presence, land); Vector3 pos = m_scene.GetNearestAllowedPosition(presence, land);
presence.TeleportWithMomentum(pos, null); presence.TeleportOnEject(pos);
presence.ControllingClient.SendAlertMessage("You have been ejected from this land"); presence.ControllingClient.SendAlertMessage("You have been ejected from this land");
} }
} }

View File

@ -1642,6 +1642,20 @@ namespace OpenSim.Region.Framework.Scenes
SendTerseUpdateToAllClients(); SendTerseUpdateToAllClients();
} }
public void TeleportOnEject(Vector3 pos)
{
if (ParentID != (uint)0)
StandUp();
bool isFlying = Flying;
RemoveFromPhysicalScene();
AbsolutePosition = pos;
AddToPhysicalScene(isFlying);
SendTerseUpdateToAllClients();
}
public void avnLocalTeleport(Vector3 newpos, Vector3? newvel, bool rotateToVelXY) public void avnLocalTeleport(Vector3 newpos, Vector3? newvel, bool rotateToVelXY)
{ {
if(!CheckLocalTPLandingPoint(ref newpos)) if(!CheckLocalTPLandingPoint(ref newpos))

View File

@ -6827,7 +6827,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (m_host.OwnerID == land.LandData.OwnerID) if (m_host.OwnerID == land.LandData.OwnerID)
{ {
Vector3 p = World.GetNearestAllowedPosition(presence, land); Vector3 p = World.GetNearestAllowedPosition(presence, land);
presence.TeleportWithMomentum(p, null); presence.TeleportOnEject(p);
presence.ControllingClient.SendAlertMessage("You have been ejected from this land"); presence.ControllingClient.SendAlertMessage("You have been ejected from this land");
} }
} }