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:
@@ -32,6 +32,8 @@ namespace Content.Client.Examine
|
|||||||
[Dependency] private readonly VerbSystem _verbSystem = default!;
|
[Dependency] private readonly VerbSystem _verbSystem = default!;
|
||||||
[Dependency] private readonly SpriteSystem _sprite = default!;
|
[Dependency] private readonly SpriteSystem _sprite = default!;
|
||||||
|
|
||||||
|
private List<Verb> _verbList = new();
|
||||||
|
|
||||||
public const string StyleClassEntityTooltip = "entity-tooltip";
|
public const string StyleClassEntityTooltip = "entity-tooltip";
|
||||||
|
|
||||||
private EntityUid _examinedEntity;
|
private EntityUid _examinedEntity;
|
||||||
@@ -158,13 +160,13 @@ namespace Content.Client.Examine
|
|||||||
var entity = GetEntity(ev.EntityUid);
|
var entity = GetEntity(ev.EntityUid);
|
||||||
|
|
||||||
OpenTooltip(player.Value, entity, ev.CenterAtCursor, ev.OpenAtOldTooltip, ev.KnowTarget);
|
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)
|
public override void SendExamineTooltip(EntityUid player, EntityUid target, FormattedMessage message, bool getVerbs, bool centerAtCursor)
|
||||||
{
|
{
|
||||||
OpenTooltip(player, target, centerAtCursor, false);
|
OpenTooltip(player, target, centerAtCursor);
|
||||||
UpdateTooltipInfo(player, target, message);
|
UpdateTooltipInfo(player, target, message, getVerbs: getVerbs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -259,7 +261,7 @@ namespace Content.Client.Examine
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fills the examine tooltip with a message and buttons if applicable.
|
/// Fills the examine tooltip with a message and buttons if applicable.
|
||||||
/// </summary>
|
/// </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);
|
var vBox = _examineTooltipOpen?.GetChild(0).GetChild(0);
|
||||||
if (vBox == null)
|
if (vBox == null)
|
||||||
@@ -283,9 +285,29 @@ namespace Content.Client.Examine
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
verbs ??= new List<Verb>();
|
|
||||||
var totalVerbs = _verbSystem.GetLocalVerbs(target, player, typeof(ExamineVerb));
|
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);
|
totalVerbs.UnionWith(verbs);
|
||||||
|
}
|
||||||
|
|
||||||
AddVerbsToTooltip(totalVerbs);
|
AddVerbsToTooltip(totalVerbs);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ namespace Content.Shared.Examine
|
|||||||
}
|
}
|
||||||
message.AddMessage(GetFormattedMessageFromExamineEntries(group.Entries));
|
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>
|
/// <returns>A FormattedMessage based on all <paramref name="entries"/>, sorted.</returns>
|
||||||
|
|||||||
Reference in New Issue
Block a user