diff --git a/OpenMetaverse/AgentManager.cs b/OpenMetaverse/AgentManager.cs
index e17dbcc7..947d6f9c 100644
--- a/OpenMetaverse/AgentManager.cs
+++ b/OpenMetaverse/AgentManager.cs
@@ -1449,6 +1449,9 @@ namespace OpenMetaverse
}
}
+ /// Various abilities and preferences sent by the grid
+ public AgentStateUpdateMessage AgentStateStatus;
+
#endregion Properties
internal uint localID;
@@ -1534,6 +1537,7 @@ namespace OpenMetaverse
// CAPS callbacks
Client.Network.RegisterEventCallback("EstablishAgentCommunication", new Caps.EventQueueCallback(EstablishAgentCommunicationEventHandler));
Client.Network.RegisterEventCallback("SetDisplayNameReply", new Caps.EventQueueCallback(SetDisplayNameReplyEventHandler));
+ Client.Network.RegisterEventCallback("AgentStateUpdate", new Caps.EventQueueCallback(AgentStateUpdateEventHandler));
// Incoming Group Chat
Client.Network.RegisterEventCallback("ChatterBoxInvitation", new Caps.EventQueueCallback(ChatterBoxInvitationEventHandler));
// Outgoing Group Chat Reply
@@ -3702,6 +3706,14 @@ namespace OpenMetaverse
}
}
+ protected void AgentStateUpdateEventHandler(string capsKey, IMessage message, Simulator simulator)
+ {
+ if (message is AgentStateUpdateMessage)
+ {
+ AgentStateStatus = (AgentStateUpdateMessage)message;
+ }
+ }
+
protected void EstablishAgentCommunicationEventHandler(string capsKey, IMessage message, Simulator simulator)
{
EstablishAgentCommunicationMessage msg = (EstablishAgentCommunicationMessage)message;
diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs
index 5fe792d7..9d671dcc 100644
--- a/OpenMetaverse/Messages/LindenMessages.cs
+++ b/OpenMetaverse/Messages/LindenMessages.cs
@@ -1703,6 +1703,64 @@ namespace OpenMetaverse.Messages.Linden
}
}
+ public class AgentStateUpdateMessage : IMessage
+ {
+ public OSDMap RawData;
+ public bool CanModifyNavmesh;
+ public bool HasModifiedNavmesh;
+ public string MaxAccess; // PG, M, A
+ public bool AlterNavmeshObjects;
+ public bool AlterPermanentObjects;
+ public int GodLevel;
+ public string Language;
+ public bool LanguageIsPublic;
+
+ public void Deserialize(OSDMap map)
+ {
+ RawData = map;
+ CanModifyNavmesh = map["can_modify_navmesh"];
+ HasModifiedNavmesh = map["has_modified_navmesh"];
+ if (map["preferences"] is OSDMap)
+ {
+ var prefs = (OSDMap)map["preferences"];
+ AlterNavmeshObjects = prefs["alter_navmesh_objects"];
+ AlterPermanentObjects = prefs["alter_permanent_objects"];
+ GodLevel = prefs["god_level"];
+ Language = prefs["language"];
+ LanguageIsPublic = prefs["language_is_public"];
+ if (prefs["access_prefs"] is OSDMap)
+ {
+ var access = (OSDMap)prefs["access_prefs"];
+ MaxAccess = access["max"];
+ }
+ }
+ }
+
+ public OSDMap Serialize()
+ {
+ RawData = new OSDMap();
+ RawData["can_modify_navmesh"] = CanModifyNavmesh;
+ RawData["has_modified_navmesh"] = HasModifiedNavmesh;
+
+ OSDMap prefs = new OSDMap();
+ {
+ OSDMap access = new OSDMap();
+ {
+ access["max"] = MaxAccess;
+ }
+ prefs["access_prefs"] = access;
+ prefs["alter_navmesh_objects"] = AlterNavmeshObjects;
+ prefs["alter_permanent_objects"] = AlterPermanentObjects;
+ prefs["god_level"] = GodLevel;
+ prefs["language"] = Language;
+ prefs["language_is_public"] = LanguageIsPublic;
+ }
+ RawData["preferences"] = prefs;
+ return RawData;
+ }
+
+ }
+
/// Base class for Asset uploads/results via Capabilities
public abstract class AssetUploaderBlock
{
diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs
index cd070f7a..d169a019 100644
--- a/OpenMetaverse/Messages/MessageEventDecoder.cs
+++ b/OpenMetaverse/Messages/MessageEventDecoder.cs
@@ -84,6 +84,7 @@ namespace OpenMetaverse.Messages
case "ScriptRunningReply": message = new ScriptRunningReplyMessage(); break;
case "SearchStatRequest": message = new SearchStatRequestMessage(); break;
case "AgentDropGroup": message = new AgentDropGroupMessage(); break;
+ case "AgentStateUpdate": message = new AgentStateUpdateMessage(); break;
case "ForceCloseChatterBoxSession": message = new ForceCloseChatterBoxSessionMessage(); break;
case "UploadBakedTexture": message = new UploadBakedTextureMessage(); break;
case "RegionInfo": message = new RegionInfoMessage(); break;