Fix server NRE on clicking alerts with no OnClick (#2748)

* #2744 fix NRE on clicking alerts with no OnClick, and don't send the click
message unless the alert has an onclick

* #2744 fix NRE on clicking alerts with no OnClick, and don't send the click
message unless the alert has an onclick
This commit is contained in:
chairbender
2020-12-16 03:13:57 -08:00
committed by GitHub
parent 49e6db2b87
commit 27d5019df0
3 changed files with 10 additions and 1 deletions

View File

@@ -222,6 +222,7 @@ namespace Content.Client.GameObjects.Components.Mobs
return;
}
if (!alert.Alert.HasOnClick) return;
SendNetworkMessage(new ClickAlertMessage(alert.Alert.AlertType));
}

View File

@@ -71,7 +71,7 @@ namespace Content.Server.GameObjects.Components.Mobs
break;
}
if (AlertManager.TryGet(msg.AlertType, out var alert))
if (AlertManager.TryGet(msg.AlertType, out var alert) && alert.OnClick != null)
{
alert.OnClick.AlertClicked(new ClickAlertEventArgs(player, alert));
}

View File

@@ -72,8 +72,14 @@ namespace Content.Shared.Alert
/// </summary>
public bool SupportsSeverity => MaxSeverity != -1;
/// <summary>
/// Whether this alert is clickable. This is valid clientside.
/// </summary>
public bool HasOnClick { get; private set; }
/// <summary>
/// Defines what to do when the alert is clicked.
/// This will always be null on clientside.
/// </summary>
public IAlertClick OnClick { get; private set; }
@@ -102,6 +108,8 @@ namespace Content.Shared.Alert
}
AlertKey = new AlertKey(AlertType, Category);
HasOnClick = serializer.TryReadDataField("onClick", out string _);
if (IoCManager.Resolve<IModuleManager>().IsClientModule) return;
serializer.DataField(this, x => x.OnClick, "onClick", null);
}