]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix detailed examine mispredicts (#33814)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sat, 19 Apr 2025 14:37:45 +0000 (00:37 +1000)
committerGitHub <noreply@github.com>
Sat, 19 Apr 2025 14:37:45 +0000 (10:37 -0400)
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.

Content.Client/Examine/ExamineSystem.cs
Content.Shared/Examine/ExamineSystemShared.Group.cs

index 2e8d95c9788915195249a3054f61ef2026c04db3..3aec394324d30565580010952d00519bab0eb468 100644 (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));
-            totalVerbs.UnionWith(verbs);
+
+            // 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);
         }
index 64b70d0af34d54615d27b54ec025d9aede141231..7dc7877eacf97981c7b1e8b4b6dbb983f26ca2d5 100644 (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>