* Implemented DIE_AT_EDGE and Temporary objects don't save to the database.

0.6.0-stable
Teravus Ovares 2008-05-04 22:55:52 +00:00
parent 0e31eb8314
commit 7b446aba91
6 changed files with 58 additions and 6 deletions

View File

@ -152,7 +152,9 @@ namespace OpenSim.Data.MSSQL
{ {
foreach (SceneObjectPart prim in obj.Children.Values) foreach (SceneObjectPart prim in obj.Children.Values)
{ {
if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0) if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0
&& (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Temporary) == 0
&& (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) == 0)
{ {
m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
addPrim(prim, obj.UUID, regionUUID); addPrim(prim, obj.UUID, regionUUID);

View File

@ -254,7 +254,9 @@ namespace OpenSim.Data.MySQL
{ {
foreach (SceneObjectPart prim in obj.Children.Values) foreach (SceneObjectPart prim in obj.Children.Values)
{ {
if ((prim.GetEffectiveObjectFlags() & (uint) LLObject.ObjectFlags.Physics) == 0) if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0
&& (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Temporary) == 0
&& (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) == 0)
{ {
m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
addPrim(prim, obj.UUID, regionUUID); addPrim(prim, obj.UUID, regionUUID);

View File

@ -183,7 +183,9 @@ namespace OpenSim.Data.SQLite
{ {
foreach (SceneObjectPart prim in obj.Children.Values) foreach (SceneObjectPart prim in obj.Children.Values)
{ {
if ((prim.GetEffectiveObjectFlags() & (uint) LLObject.ObjectFlags.Physics) == 0) if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0
&& (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Temporary) == 0
&& (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) == 0)
{ {
m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
addPrim(prim, Util.ToRawUuidString(obj.UUID), Util.ToRawUuidString(regionUUID)); addPrim(prim, Util.ToRawUuidString(obj.UUID), Util.ToRawUuidString(regionUUID));

View File

@ -1352,6 +1352,25 @@ namespace OpenSim.Region.Environment.Scenes
public void CrossPrimGroupIntoNewRegion(LLVector3 position, SceneObjectGroup grp) public void CrossPrimGroupIntoNewRegion(LLVector3 position, SceneObjectGroup grp)
{ {
if (grp == null)
return;
if (grp.RootPart == null)
return;
if (grp.RootPart.DIE_AT_EDGE)
{
// We remove the object here
try
{
DeleteSceneObjectGroup(grp);
}
catch (Exception)
{
m_log.Warn("[DATABASE]: exception when trying to remove the prim that crossed the border.");
}
return;
}
m_log.Warn("Prim crossing: " + grp.UUID.ToString()); m_log.Warn("Prim crossing: " + grp.UUID.ToString());
int thisx = (int)RegionInfo.RegionLocX; int thisx = (int)RegionInfo.RegionLocX;
int thisy = (int)RegionInfo.RegionLocY; int thisy = (int)RegionInfo.RegionLocY;

View File

@ -101,6 +101,7 @@ namespace OpenSim.Region.Environment.Scenes
[XmlIgnore] private Dictionary<LLUUID, scriptEvents> m_scriptEvents = new Dictionary<LLUUID, scriptEvents>(); [XmlIgnore] private Dictionary<LLUUID, scriptEvents> m_scriptEvents = new Dictionary<LLUUID, scriptEvents>();
[XmlIgnore] public scriptEvents m_aggregateScriptEvents=0; [XmlIgnore] public scriptEvents m_aggregateScriptEvents=0;
[XmlIgnore] private LLObject.ObjectFlags LocalFlags = LLObject.ObjectFlags.None; [XmlIgnore] private LLObject.ObjectFlags LocalFlags = LLObject.ObjectFlags.None;
[XmlIgnore] public bool DIE_AT_EDGE = false;
[XmlIgnore] public bool m_IsAttachment = false; [XmlIgnore] public bool m_IsAttachment = false;
@ -2733,6 +2734,25 @@ namespace OpenSim.Region.Environment.Scenes
//} //}
} }
public void SetDieAtEdge(bool p)
{
if (m_parentGroup == null)
return;
if (m_parentGroup.RootPart == null)
return;
m_parentGroup.RootPart.DIE_AT_EDGE = p;
}
public bool GetDieAtEdge()
{
if (m_parentGroup == null)
return false;
if (m_parentGroup.RootPart == null)
return false;
return m_parentGroup.RootPart.DIE_AT_EDGE;
}
} }
} }

View File

@ -844,7 +844,10 @@ namespace OpenSim.Region.ScriptEngine.Common
} }
if ((status & BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) if ((status & BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE)
{ {
NotImplemented("llSetStatus - STATUS_DIE_AT_EDGE"); if (value == 1)
m_host.SetDieAtEdge(true);
else
m_host.SetDieAtEdge(false);
} }
if ((status & BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) if ((status & BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE)
{ {
@ -890,8 +893,12 @@ namespace OpenSim.Region.ScriptEngine.Common
NotImplemented("llGetStatus - STATUS_BLOCK_GRAB"); NotImplemented("llGetStatus - STATUS_BLOCK_GRAB");
return 0; return 0;
case BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE: case BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE:
NotImplemented("llGetStatus - STATUS_DIE_AT_EDGE");
if (m_host.GetDieAtEdge())
return 1;
else
return 0; return 0;
case BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE: case BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE:
NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE"); NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE");
return 0; return 0;