Merge branch 'avination' into ubitwork

This commit is contained in:
UbitUmarov
2012-10-30 19:42:32 +00:00
10 changed files with 75 additions and 32 deletions

View File

@@ -335,7 +335,7 @@ namespace OpenSim.Region.Framework.Scenes
{
// Needs to determine which engine was running it and use that
//
errors = part.Inventory.CreateScriptInstanceEr(item.ItemID, 0, false, DefaultScriptEngine, 0);
errors = part.Inventory.CreateScriptInstanceEr(item.ItemID, 0, false, DefaultScriptEngine, 1);
}
// Tell anyone managing scripts that a script has been reloaded/changed
@@ -2503,6 +2503,12 @@ namespace OpenSim.Region.Framework.Scenes
}
m_sceneGraph.LinkObjects(root, children);
ScenePresence sp;
if (TryGetScenePresence(agentId, out sp))
{
root.SendPropertiesToClient(sp.ControllingClient);
}
}
private string PermissionString(uint permissions)

View File

@@ -1674,7 +1674,10 @@ namespace OpenSim.Region.Framework.Scenes
{
List<SceneObjectGroup> objs = new List<SceneObjectGroup>();
lock (m_groupsWithTargets)
objs = new List<SceneObjectGroup>(m_groupsWithTargets.Values);
{
foreach (SceneObjectGroup grp in m_groupsWithTargets.Values)
objs.Add(grp);
}
foreach (SceneObjectGroup entry in objs)
entry.checkAtTargets();

View File

@@ -1849,6 +1849,7 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectGroupsByLocalPartID[part.LocalId] = parentGroup;
}
parentGroup.AdjustChildPrimPermissions();
parentGroup.HasGroupChanged = true;
parentGroup.ProcessBackup(m_parentScene.SimulationDataService, true);
parentGroup.ScheduleGroupForFullUpdate();
@@ -1989,6 +1990,7 @@ namespace OpenSim.Region.Framework.Scenes
// return unless the root is deleted. This will remove them
// from the database. They will be rewritten immediately,
// minus the rows for the unlinked child prims.
g.AdjustChildPrimPermissions();
m_parentScene.SimulationDataService.RemoveObject(g.UUID, m_parentScene.RegionInfo.RegionID);
g.TriggerScriptChangedEvent(Changed.LINK);
g.HasGroupChanged = true; // Persist

View File

@@ -307,6 +307,11 @@ namespace OpenSim.Region.Framework.Scenes
private bool m_isBackedUp;
public bool IsBackedUp
{
get { return m_isBackedUp; }
}
protected MapAndArray<UUID, SceneObjectPart> m_parts = new MapAndArray<UUID, SceneObjectPart>();
protected ulong m_regionHandle;
@@ -3410,11 +3415,18 @@ namespace OpenSim.Region.Framework.Scenes
public void AdjustChildPrimPermissions()
{
uint newOwnerMask = (uint)PermissionMask.All & 0xfffffff8; // Mask folded bits
uint foldedPerms = RootPart.OwnerMask & 3;
ForEachPart(part =>
{
newOwnerMask &= part.BaseMask;
if (part != RootPart)
part.ClonePermissions(RootPart);
});
RootPart.OwnerMask = newOwnerMask | foldedPerms;
RootPart.ScheduleFullUpdate();
}
public void UpdatePermissions(UUID AgentID, byte field, uint localID,
@@ -3422,8 +3434,24 @@ namespace OpenSim.Region.Framework.Scenes
{
RootPart.UpdatePermissions(AgentID, field, localID, mask, addRemTF);
bool god = Scene.Permissions.IsGod(AgentID);
if (field == 1 && god)
{
ForEachPart(part =>
{
part.BaseMask = RootPart.BaseMask;
});
}
AdjustChildPrimPermissions();
if (field == 1 && god) // Base mask was set. Update all child part inventories
{
foreach (SceneObjectPart part in Parts)
part.Inventory.ApplyGodPermissions(RootPart.BaseMask);
}
HasGroupChanged = true;
// Send the group's properties to all clients once all parts are updated

View File

@@ -4468,7 +4468,7 @@ namespace OpenSim.Region.Framework.Scenes
if (god)
{
BaseMask = ApplyMask(BaseMask, set, mask);
Inventory.ApplyGodPermissions(_baseMask);
Inventory.ApplyGodPermissions(BaseMask);
}
break;
@@ -4487,7 +4487,7 @@ namespace OpenSim.Region.Framework.Scenes
case 16:
NextOwnerMask = ApplyMask(NextOwnerMask, set, mask) &
baseMask;
// Prevent the client from creating no mod, no copy
// Prevent the client from creating no copy, no transfer
// objects
if ((NextOwnerMask & (uint)PermissionMask.Copy) == 0)
NextOwnerMask |= (uint)PermissionMask.Transfer;
@@ -4505,20 +4505,20 @@ namespace OpenSim.Region.Framework.Scenes
{
bool update = false;
if (BaseMask != source.BaseMask ||
OwnerMask != source.OwnerMask ||
GroupMask != source.GroupMask ||
EveryoneMask != source.EveryoneMask ||
NextOwnerMask != source.NextOwnerMask)
update = true;
uint prevOwnerMask = OwnerMask;
uint prevGroupMask = GroupMask;
uint prevEveryoneMask = EveryoneMask;
uint prevNextOwnerMask = NextOwnerMask;
BaseMask = source.BaseMask;
OwnerMask = source.OwnerMask;
GroupMask = source.GroupMask;
EveryoneMask = source.EveryoneMask;
NextOwnerMask = source.NextOwnerMask;
OwnerMask = source.OwnerMask & BaseMask;
GroupMask = source.GroupMask & BaseMask;
EveryoneMask = source.EveryoneMask & BaseMask;
NextOwnerMask = source.NextOwnerMask & BaseMask;
if (update)
if (OwnerMask != prevOwnerMask ||
GroupMask != prevGroupMask ||
EveryoneMask != prevEveryoneMask ||
NextOwnerMask != prevNextOwnerMask)
SendFullUpdateToAllClients();
}