diff --git a/LibreMetaverse/AgentManager.cs b/LibreMetaverse/AgentManager.cs
index 95079ea2..e489d26d 100644
--- a/LibreMetaverse/AgentManager.cs
+++ b/LibreMetaverse/AgentManager.cs
@@ -4691,7 +4691,20 @@ namespace OpenMetaverse
AlertMessagePacket alert = (AlertMessagePacket)packet;
- OnAlertMessage(new AlertMessageEventArgs(Utils.BytesToString(alert.AlertData.Message)));
+ string message = Utils.BytesToString(alert.AlertData.Message);
+
+ if (alert.AlertInfo.Length > 0)
+ {
+ string notificationid = Utils.BytesToString(alert.AlertInfo[0].Message);
+ OSD extra = (alert.AlertInfo[0].ExtraParams != null && alert.AlertInfo[0].ExtraParams.Length > 0)
+ ? OSDParser.Deserialize(alert.AlertInfo[0].ExtraParams)
+ : null;
+ OnAlertMessage(new AlertMessageEventArgs(message, notificationid, extra));
+ }
+ else
+ {
+ OnAlertMessage(new AlertMessageEventArgs(message, null, null));
+ }
}
protected void AgentAlertMessageHandler(object sender, PacketReceivedEventArgs e)
@@ -4700,10 +4713,9 @@ namespace OpenMetaverse
Packet packet = e.Packet;
AgentAlertMessagePacket alert = (AgentAlertMessagePacket)packet;
-
// HACK: Agent alerts support modal and Generic Alerts do not, but it's all the same for
// my simplified ass right now.
- OnAlertMessage(new AlertMessageEventArgs(Utils.BytesToString(alert.AlertData.Message)));
+ OnAlertMessage(new AlertMessageEventArgs(Utils.BytesToString(alert.AlertData.Message), null, null));
}
/// Process an incoming packet and raise the appropriate events
@@ -5321,16 +5333,21 @@ namespace OpenMetaverse
/// Data sent by the simulator containing urgent messages
public class AlertMessageEventArgs : EventArgs
{
- /// Get the alert message
public string Message { get; }
+ public string NotificationId { get; }
+ public OSD ExtraParams { get; }
- ///
- /// Construct a new instance of the AlertMessageEventArgs class
- ///
- /// The alert message
- public AlertMessageEventArgs(string message)
- {
- Message = message;
+ ///
+ /// Construct a new instance of the AlertMessageEventArgs class
+ ///
+ /// user readable message
+ /// notification id for alert, may be null
+ /// any extra params in OSD format, may be null
+ public AlertMessageEventArgs(string message, string notificationid, OSD extraparams)
+ {
+ Message = message;
+ NotificationId = notificationid;
+ ExtraParams = extraparams;
}
}
diff --git a/Programs/examples/TestClient/Commands/Movement/FollowCommand.cs b/Programs/examples/TestClient/Commands/Movement/FollowCommand.cs
index fba7fb1c..ba2bab20 100644
--- a/Programs/examples/TestClient/Commands/Movement/FollowCommand.cs
+++ b/Programs/examples/TestClient/Commands/Movement/FollowCommand.cs
@@ -127,11 +127,14 @@ namespace OpenMetaverse.TestClient
Packet packet = e.Packet;
AlertMessagePacket alert = (AlertMessagePacket)packet;
- string message = Utils.BytesToString(alert.AlertData.Message);
-
- if (message.Contains("Autopilot cancel"))
+ if (alert.AlertInfo.Length > 0)
{
- Logger.Log("FollowCommand: " + message, Helpers.LogLevel.Info, Client);
+ string id = Utils.BytesToString(alert.AlertInfo[0].Message);
+ if (id == "AutopilotCancelled")
+ {
+ Logger.Log("FollowCommand: " + Utils.BytesToString(alert.AlertData.Message),
+ Helpers.LogLevel.Info, Client);
+ }
}
}
}