Clear permissions given to the object we stand up from
parent
a135e51d23
commit
9f9693dab8
|
@ -229,12 +229,14 @@ namespace OpenSim.Framework
|
|||
|
||||
public class ControllerData
|
||||
{
|
||||
public UUID ObjectID;
|
||||
public UUID ItemID;
|
||||
public uint IgnoreControls;
|
||||
public uint EventControls;
|
||||
|
||||
public ControllerData(UUID item, uint ignore, uint ev)
|
||||
public ControllerData(UUID obj, UUID item, uint ignore, uint ev)
|
||||
{
|
||||
ObjectID = obj;
|
||||
ItemID = item;
|
||||
IgnoreControls = ignore;
|
||||
EventControls = ev;
|
||||
|
@ -248,6 +250,7 @@ namespace OpenSim.Framework
|
|||
public OSDMap PackUpdateMessage()
|
||||
{
|
||||
OSDMap controldata = new OSDMap();
|
||||
controldata["object"] = OSD.FromUUID(ObjectID);
|
||||
controldata["item"] = OSD.FromUUID(ItemID);
|
||||
controldata["ignore"] = OSD.FromInteger(IgnoreControls);
|
||||
controldata["event"] = OSD.FromInteger(EventControls);
|
||||
|
@ -258,6 +261,8 @@ namespace OpenSim.Framework
|
|||
|
||||
public void UnpackUpdateMessage(OSDMap args)
|
||||
{
|
||||
if (args["object"] != null)
|
||||
ObjectID = args["object"].AsUUID();
|
||||
if (args["item"] != null)
|
||||
ItemID = args["item"].AsUUID();
|
||||
if (args["ignore"] != null)
|
||||
|
|
|
@ -62,6 +62,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
struct ScriptControllers
|
||||
{
|
||||
public UUID objectID;
|
||||
public UUID itemID;
|
||||
public ScriptControlled ignoreControls;
|
||||
public ScriptControlled eventControls;
|
||||
|
@ -1890,6 +1891,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (ParentID != 0)
|
||||
{
|
||||
SceneObjectPart part = ParentPart;
|
||||
UnRegisterSeatControls(part.ParentGroup.UUID);
|
||||
|
||||
TaskInventoryDictionary taskIDict = part.TaskInventory;
|
||||
if (taskIDict != null)
|
||||
{
|
||||
|
@ -3217,7 +3220,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
foreach (ScriptControllers c in scriptedcontrols.Values)
|
||||
{
|
||||
controls[i++] = new ControllerData(c.itemID, (uint)c.ignoreControls, (uint)c.eventControls);
|
||||
controls[i++] = new ControllerData(c.objectID, c.itemID, (uint)c.ignoreControls, (uint)c.eventControls);
|
||||
}
|
||||
cAgent.Controllers = controls;
|
||||
}
|
||||
|
@ -3307,6 +3310,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
foreach (ControllerData c in cAgent.Controllers)
|
||||
{
|
||||
ScriptControllers sc = new ScriptControllers();
|
||||
sc.objectID = c.ObjectID;
|
||||
sc.itemID = c.ItemID;
|
||||
sc.ignoreControls = (ScriptControlled)c.IgnoreControls;
|
||||
sc.eventControls = (ScriptControlled)c.EventControls;
|
||||
|
@ -3702,10 +3706,15 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void RegisterControlEventsToScript(int controls, int accept, int pass_on, uint Obj_localID, UUID Script_item_UUID)
|
||||
{
|
||||
SceneObjectPart p = m_scene.GetSceneObjectPart(Obj_localID);
|
||||
if (p == null)
|
||||
return;
|
||||
|
||||
ScriptControllers obj = new ScriptControllers();
|
||||
obj.ignoreControls = ScriptControlled.CONTROL_ZERO;
|
||||
obj.eventControls = ScriptControlled.CONTROL_ZERO;
|
||||
|
||||
obj.objectID = p.ParentGroup.UUID;
|
||||
obj.itemID = Script_item_UUID;
|
||||
if (pass_on == 0 && accept == 0)
|
||||
{
|
||||
|
@ -3754,6 +3763,21 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
ControllingClient.SendTakeControls(int.MaxValue, false, false);
|
||||
}
|
||||
|
||||
private void UnRegisterSeatControls(UUID obj)
|
||||
{
|
||||
List<UUID> takers = new List<UUID>();
|
||||
|
||||
foreach (ScriptControllers c in scriptedcontrols.Values)
|
||||
{
|
||||
if (c.objectID == obj)
|
||||
takers.Add(c.itemID);
|
||||
}
|
||||
foreach (UUID t in takers)
|
||||
{
|
||||
UnRegisterControlEventsToScript(0, t);
|
||||
}
|
||||
}
|
||||
|
||||
public void UnRegisterControlEventsToScript(uint Obj_localID, UUID Script_item_UUID)
|
||||
{
|
||||
ScriptControllers takecontrols;
|
||||
|
|
Loading…
Reference in New Issue