Add scripted controllers into agent intersim messaging
parent
eaea89bbb7
commit
26621ca500
|
@ -265,6 +265,46 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ControllerData
|
||||||
|
{
|
||||||
|
public UUID ItemID;
|
||||||
|
public uint IgnoreControls;
|
||||||
|
public uint EventControls;
|
||||||
|
|
||||||
|
public ControllerData(UUID item, uint ignore, uint ev)
|
||||||
|
{
|
||||||
|
ItemID = item;
|
||||||
|
IgnoreControls = ignore;
|
||||||
|
EventControls = ev;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ControllerData(OSDMap args)
|
||||||
|
{
|
||||||
|
UnpackUpdateMessage(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OSDMap PackUpdateMessage()
|
||||||
|
{
|
||||||
|
OSDMap controldata = new OSDMap();
|
||||||
|
controldata["item"] = OSD.FromUUID(ItemID);
|
||||||
|
controldata["ignore"] = OSD.FromInteger(IgnoreControls);
|
||||||
|
controldata["event"] = OSD.FromInteger(EventControls);
|
||||||
|
|
||||||
|
return controldata;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void UnpackUpdateMessage(OSDMap args)
|
||||||
|
{
|
||||||
|
if (args["item"] != null)
|
||||||
|
ItemID = args["item"].AsUUID();
|
||||||
|
if (args["ignore"] != null)
|
||||||
|
IgnoreControls = (uint)args["ignore"].AsInteger();
|
||||||
|
if (args["event"] != null)
|
||||||
|
EventControls = (uint)args["event"].AsInteger();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class AgentData : IAgentData
|
public class AgentData : IAgentData
|
||||||
{
|
{
|
||||||
private UUID m_id;
|
private UUID m_id;
|
||||||
|
@ -313,6 +353,9 @@ namespace OpenSim.Framework
|
||||||
public UUID[] Wearables;
|
public UUID[] Wearables;
|
||||||
public AttachmentData[] Attachments;
|
public AttachmentData[] Attachments;
|
||||||
|
|
||||||
|
// Scripted
|
||||||
|
public ControllerData[] Controllers;
|
||||||
|
|
||||||
public string CallbackURI;
|
public string CallbackURI;
|
||||||
|
|
||||||
public virtual OSDMap Pack()
|
public virtual OSDMap Pack()
|
||||||
|
@ -403,6 +446,14 @@ namespace OpenSim.Framework
|
||||||
args["attachments"] = attachs;
|
args["attachments"] = attachs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((Controllers != null) && (Controllers.Length > 0))
|
||||||
|
{
|
||||||
|
OSDArray controls = new OSDArray(Controllers.Length);
|
||||||
|
foreach (ControllerData ctl in Controllers)
|
||||||
|
controls.Add(ctl.PackUpdateMessage());
|
||||||
|
args["controllers"] = controls;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if ((CallbackURI != null) && (!CallbackURI.Equals("")))
|
if ((CallbackURI != null) && (!CallbackURI.Equals("")))
|
||||||
args["callback_uri"] = OSD.FromString(CallbackURI);
|
args["callback_uri"] = OSD.FromString(CallbackURI);
|
||||||
|
@ -559,6 +610,20 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array)
|
||||||
|
{
|
||||||
|
OSDArray controls = (OSDArray)(args["controllers"]);
|
||||||
|
Controllers = new ControllerData[controls.Count];
|
||||||
|
int i = 0;
|
||||||
|
foreach (OSD o in controls)
|
||||||
|
{
|
||||||
|
if (o.Type == OSDType.Map)
|
||||||
|
{
|
||||||
|
Controllers[i++] = new ControllerData((OSDMap)o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (args["callback_uri"] != null)
|
if (args["callback_uri"] != null)
|
||||||
CallbackURI = args["callback_uri"].AsString();
|
CallbackURI = args["callback_uri"].AsString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -4140,6 +4140,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
case 16:
|
case 16:
|
||||||
_nextOwnerMask = ApplyMask(_nextOwnerMask, set, mask) &
|
_nextOwnerMask = ApplyMask(_nextOwnerMask, set, mask) &
|
||||||
baseMask;
|
baseMask;
|
||||||
|
// Prevent the client from creating no mod, no copy
|
||||||
|
// objects
|
||||||
|
if ((_nextOwnerMask & (uint)PermissionMask.Copy) == 0)
|
||||||
|
_nextOwnerMask |= (uint)PermissionMask.Transfer;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
SendFullUpdateToAllClients();
|
SendFullUpdateToAllClients();
|
||||||
|
|
|
@ -3056,6 +3056,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
cAgent.Attachments = attachs;
|
cAgent.Attachments = attachs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lock (scriptedcontrols)
|
||||||
|
{
|
||||||
|
ControllerData[] controls = new ControllerData[scriptedcontrols.Count];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
foreach (ScriptControllers c in scriptedcontrols.Values)
|
||||||
|
{
|
||||||
|
controls[i++] = new ControllerData(c.itemID, (uint)c.ignoreControls, (uint)c.eventControls);
|
||||||
|
}
|
||||||
|
cAgent.Controllers = controls;
|
||||||
|
}
|
||||||
|
|
||||||
// Animations
|
// Animations
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -3136,6 +3148,27 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
lock (scriptedcontrols)
|
||||||
|
{
|
||||||
|
if (cAgent.Controllers != null)
|
||||||
|
{
|
||||||
|
scriptedcontrols.Clear();
|
||||||
|
|
||||||
|
foreach (ControllerData c in cAgent.Controllers)
|
||||||
|
{
|
||||||
|
ScriptControllers sc = new ScriptControllers();
|
||||||
|
sc.itemID = c.ItemID;
|
||||||
|
sc.ignoreControls = (ScriptControlled)c.IgnoreControls;
|
||||||
|
sc.eventControls = (ScriptControlled)c.EventControls;
|
||||||
|
|
||||||
|
scriptedcontrols[sc.itemID] = sc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
// Animations
|
// Animations
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue