* Fixes some prim crossings on megaregions with regions beyond the 512m mark
* There's a slight chance that this could cause a problem with regular prim crossings.. but hopefully not. Revert if it does.prioritization
parent
e3d5beebfb
commit
31a61bbeec
|
@ -343,7 +343,9 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
lock (scene.WestBorders)
|
lock (scene.WestBorders)
|
||||||
{
|
{
|
||||||
scene.WestBorders[0].BorderLine.Z += (int) Constants.RegionSize; //auto teleport West
|
|
||||||
|
|
||||||
|
scene.WestBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocX - conn.RegionScene.RegionInfo.RegionLocX) * (int)Constants.RegionSize); //auto teleport West
|
||||||
|
|
||||||
// Trigger auto teleport to root region
|
// Trigger auto teleport to root region
|
||||||
scene.WestBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
|
scene.WestBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
|
||||||
|
@ -410,7 +412,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize;
|
conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize;
|
||||||
lock (scene.SouthBorders)
|
lock (scene.SouthBorders)
|
||||||
{
|
{
|
||||||
scene.SouthBorders[0].BorderLine.Z += (int) Constants.RegionSize; //auto teleport south
|
scene.SouthBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocY - conn.RegionScene.RegionInfo.RegionLocY) * (int)Constants.RegionSize); //auto teleport south
|
||||||
scene.SouthBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
|
scene.SouthBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
|
||||||
scene.SouthBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
|
scene.SouthBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
|
||||||
}
|
}
|
||||||
|
@ -481,7 +483,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
lock (scene.SouthBorders)
|
lock (scene.SouthBorders)
|
||||||
{
|
{
|
||||||
scene.SouthBorders[0].BorderLine.Z += (int) Constants.RegionSize; //auto teleport south
|
scene.SouthBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocY - conn.RegionScene.RegionInfo.RegionLocY) * (int)Constants.RegionSize); //auto teleport south
|
||||||
scene.SouthBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
|
scene.SouthBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
|
||||||
scene.SouthBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
|
scene.SouthBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
|
||||||
}
|
}
|
||||||
|
@ -503,7 +505,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
lock (scene.WestBorders)
|
lock (scene.WestBorders)
|
||||||
{
|
{
|
||||||
scene.WestBorders[0].BorderLine.Z += (int) Constants.RegionSize; //auto teleport West
|
scene.WestBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocX - conn.RegionScene.RegionInfo.RegionLocX) * (int)Constants.RegionSize); //auto teleport West
|
||||||
scene.WestBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
|
scene.WestBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
|
||||||
scene.WestBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
|
scene.WestBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1780,36 +1780,86 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
Vector3 pos = attemptedPosition;
|
Vector3 pos = attemptedPosition;
|
||||||
|
|
||||||
|
int changeX = 1;
|
||||||
|
int changeY = 1;
|
||||||
|
|
||||||
if (TestBorderCross(attemptedPosition + WestCross, Cardinals.W))
|
if (TestBorderCross(attemptedPosition + WestCross, Cardinals.W))
|
||||||
{
|
{
|
||||||
if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
|
if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
|
||||||
{
|
{
|
||||||
//Border crossedBorderx = GetCrossedBorder(attemptedPosition,Cardinals.W);
|
|
||||||
//Border crossedBordery = GetCrossedBorder(attemptedPosition, Cardinals.S);
|
Border crossedBorderx = GetCrossedBorder(attemptedPosition + WestCross, Cardinals.W);
|
||||||
//(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize)
|
|
||||||
|
if (crossedBorderx.BorderLine.Z > 0)
|
||||||
|
{
|
||||||
|
pos.X = ((pos.X + crossedBorderx.BorderLine.Z));
|
||||||
|
changeX = (int)(crossedBorderx.BorderLine.Z /(int) Constants.RegionSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
pos.X = ((pos.X + Constants.RegionSize));
|
pos.X = ((pos.X + Constants.RegionSize));
|
||||||
|
|
||||||
|
Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S);
|
||||||
|
//(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize)
|
||||||
|
|
||||||
|
if (crossedBordery.BorderLine.Z > 0)
|
||||||
|
{
|
||||||
|
pos.Y = ((pos.Y + crossedBordery.BorderLine.Z));
|
||||||
|
}
|
||||||
|
else
|
||||||
pos.Y = ((pos.Y + Constants.RegionSize));
|
pos.Y = ((pos.Y + Constants.RegionSize));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint)((thisx - 1) * Constants.RegionSize),
|
= Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize),
|
||||||
(uint)((thisy - 1) * Constants.RegionSize));
|
(uint)((thisy - changeY) * Constants.RegionSize));
|
||||||
// x - 1
|
// x - 1
|
||||||
// y - 1
|
// y - 1
|
||||||
}
|
}
|
||||||
else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N))
|
else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N))
|
||||||
{
|
{
|
||||||
|
Border crossedBorderx = GetCrossedBorder(attemptedPosition + WestCross, Cardinals.W);
|
||||||
|
|
||||||
|
if (crossedBorderx.BorderLine.Z > 0)
|
||||||
|
{
|
||||||
|
pos.X = ((pos.X + crossedBorderx.BorderLine.Z));
|
||||||
|
changeX = (int)(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
pos.X = ((pos.X + Constants.RegionSize));
|
pos.X = ((pos.X + Constants.RegionSize));
|
||||||
pos.Y = ((pos.Y - Constants.RegionSize));
|
|
||||||
|
|
||||||
|
Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S);
|
||||||
|
//(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize)
|
||||||
|
|
||||||
|
if (crossedBordery.BorderLine.Z > 0)
|
||||||
|
{
|
||||||
|
pos.Y = ((pos.Y + crossedBordery.BorderLine.Z));
|
||||||
|
changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pos.Y = ((pos.Y + Constants.RegionSize));
|
||||||
|
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint)((thisx - 1) * Constants.RegionSize),
|
= Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize),
|
||||||
(uint)((thisy + 1) * Constants.RegionSize));
|
(uint)((thisy + changeY) * Constants.RegionSize));
|
||||||
// x - 1
|
// x - 1
|
||||||
// y + 1
|
// y + 1
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Border crossedBorderx = GetCrossedBorder(attemptedPosition + WestCross, Cardinals.W);
|
||||||
|
|
||||||
|
if (crossedBorderx.BorderLine.Z > 0)
|
||||||
|
{
|
||||||
|
pos.X = ((pos.X + crossedBorderx.BorderLine.Z));
|
||||||
|
changeX = (int)(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
pos.X = ((pos.X + Constants.RegionSize));
|
pos.X = ((pos.X + Constants.RegionSize));
|
||||||
|
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint) ((thisx - 1)*Constants.RegionSize),
|
= Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize),
|
||||||
(uint) (thisy*Constants.RegionSize));
|
(uint) (thisy*Constants.RegionSize));
|
||||||
// x - 1
|
// x - 1
|
||||||
}
|
}
|
||||||
|
@ -1818,11 +1868,23 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
|
if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
|
||||||
{
|
{
|
||||||
|
|
||||||
pos.X = ((pos.X - Constants.RegionSize));
|
pos.X = ((pos.X - Constants.RegionSize));
|
||||||
|
Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S);
|
||||||
|
//(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize)
|
||||||
|
|
||||||
|
if (crossedBordery.BorderLine.Z > 0)
|
||||||
|
{
|
||||||
|
pos.Y = ((pos.Y + crossedBordery.BorderLine.Z));
|
||||||
|
changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
pos.Y = ((pos.Y + Constants.RegionSize));
|
pos.Y = ((pos.Y + Constants.RegionSize));
|
||||||
|
|
||||||
|
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize),
|
= Util.UIntsToLong((uint)((thisx + changeX) * Constants.RegionSize),
|
||||||
(uint)((thisy - 1) * Constants.RegionSize));
|
(uint)((thisy - changeY) * Constants.RegionSize));
|
||||||
// x + 1
|
// x + 1
|
||||||
// y - 1
|
// y - 1
|
||||||
}
|
}
|
||||||
|
@ -1831,8 +1893,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
pos.X = ((pos.X - Constants.RegionSize));
|
pos.X = ((pos.X - Constants.RegionSize));
|
||||||
pos.Y = ((pos.Y - Constants.RegionSize));
|
pos.Y = ((pos.Y - Constants.RegionSize));
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize),
|
= Util.UIntsToLong((uint)((thisx + changeX) * Constants.RegionSize),
|
||||||
(uint)((thisy + 1) * Constants.RegionSize));
|
(uint)((thisy + changeY) * Constants.RegionSize));
|
||||||
// x + 1
|
// x + 1
|
||||||
// y + 1
|
// y + 1
|
||||||
}
|
}
|
||||||
|
@ -1840,16 +1902,26 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
pos.X = ((pos.X - Constants.RegionSize));
|
pos.X = ((pos.X - Constants.RegionSize));
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint) ((thisx + 1)*Constants.RegionSize),
|
= Util.UIntsToLong((uint)((thisx + changeX) * Constants.RegionSize),
|
||||||
(uint) (thisy*Constants.RegionSize));
|
(uint) (thisy*Constants.RegionSize));
|
||||||
// x + 1
|
// x + 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
|
else if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S))
|
||||||
{
|
{
|
||||||
|
Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S);
|
||||||
|
//(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize)
|
||||||
|
|
||||||
|
if (crossedBordery.BorderLine.Z > 0)
|
||||||
|
{
|
||||||
|
pos.Y = ((pos.Y + crossedBordery.BorderLine.Z));
|
||||||
|
changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
pos.Y = ((pos.Y + Constants.RegionSize));
|
pos.Y = ((pos.Y + Constants.RegionSize));
|
||||||
|
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - 1) * Constants.RegionSize));
|
= Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - changeY) * Constants.RegionSize));
|
||||||
// y - 1
|
// y - 1
|
||||||
}
|
}
|
||||||
else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N))
|
else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N))
|
||||||
|
@ -1857,7 +1929,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
pos.Y = ((pos.Y - Constants.RegionSize));
|
pos.Y = ((pos.Y - Constants.RegionSize));
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy + 1) * Constants.RegionSize));
|
= Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy + changeY) * Constants.RegionSize));
|
||||||
// y + 1
|
// y + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue