Fix detailed examine mispredicts (#33814)

So:
- Shared examine like armour, adds the button incorrectly and mispredicts it.
- Server-only like damage, doesn't add it (correct) and no mispredict.

We'll just prune any verbs if the server sends them in unless the verb is client-only and it should fix it unless there's client-side code not flagging it as clientexclusive.
This commit is contained in:
metalgearsloth
2025-04-20 00:37:45 +10:00
committed by GitHub
parent 63eb99d57c
commit 39aefa0441
2 changed files with 29 additions and 7 deletions

View File

@@ -32,6 +32,8 @@ namespace Content.Client.Examine
[Dependency] private readonly VerbSystem _verbSystem = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
private List<Verb> _verbList = new();
public const string StyleClassEntityTooltip = "entity-tooltip";
private EntityUid _examinedEntity;
@@ -158,13 +160,13 @@ namespace Content.Client.Examine
var entity = GetEntity(ev.EntityUid);
OpenTooltip(player.Value, entity, ev.CenterAtCursor, ev.OpenAtOldTooltip, ev.KnowTarget);
UpdateTooltipInfo(player.Value, entity, ev.Message, ev.Verbs);
UpdateTooltipInfo(player.Value, entity, ev.Message, ev.Verbs, getVerbs: false);
}
public override void SendExamineTooltip(EntityUid player, EntityUid target, FormattedMessage message, bool getVerbs, bool centerAtCursor)
{
OpenTooltip(player, target, centerAtCursor, false);
UpdateTooltipInfo(player, target, message);
OpenTooltip(player, target, centerAtCursor);
UpdateTooltipInfo(player, target, message, getVerbs: getVerbs);
}
/// <summary>
@@ -259,7 +261,7 @@ namespace Content.Client.Examine
/// <summary>
/// Fills the examine tooltip with a message and buttons if applicable.
/// </summary>
public void UpdateTooltipInfo(EntityUid player, EntityUid target, FormattedMessage message, List<Verb>? verbs=null)
public void UpdateTooltipInfo(EntityUid player, EntityUid target, FormattedMessage message, List<Verb>? verbs=null, bool getVerbs = true)
{
var vBox = _examineTooltipOpen?.GetChild(0).GetChild(0);
if (vBox == null)
@@ -283,9 +285,29 @@ namespace Content.Client.Examine
break;
}
verbs ??= new List<Verb>();
var totalVerbs = _verbSystem.GetLocalVerbs(target, player, typeof(ExamineVerb));
// We still need client-exclusive verbs even when the server sends its data in so if that's the case
// we remove any non-client-exclusive verbs.
if (!getVerbs)
{
_verbList.AddRange(totalVerbs);
foreach (var verb in _verbList)
{
if (!verb.ClientExclusive)
{
totalVerbs.Remove(verb);
}
}
_verbList.Clear();
}
if (verbs != null)
{
totalVerbs.UnionWith(verbs);
}
AddVerbsToTooltip(totalVerbs);
}

View File

@@ -80,7 +80,7 @@ namespace Content.Shared.Examine
}
message.AddMessage(GetFormattedMessageFromExamineEntries(group.Entries));
SendExamineTooltip(user, target, message, false, false);
SendExamineTooltip(user, target, message, getVerbs: false, centerAtCursor: false);
}
/// <returns>A FormattedMessage based on all <paramref name="entries"/>, sorted.</returns>