From 6e1eb93ff9b65494ed09d30698c03a0bbbb1c967 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Sun, 1 Feb 2026 20:22:56 -0600 Subject: [PATCH] feat(ui): implement post-token-parsing logic in Script_GetGUIDFromToken --- src/ui/game/ScriptUtil.cpp | 42 ++++++++++++++++++++++++++++++++++---- src/ui/game/ScriptUtil.hpp | 2 ++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/ui/game/ScriptUtil.cpp b/src/ui/game/ScriptUtil.cpp index 9ac1fed..0f5a809 100644 --- a/src/ui/game/ScriptUtil.cpp +++ b/src/ui/game/ScriptUtil.cpp @@ -3,6 +3,20 @@ #include "ui/game/CGGameUI.hpp" #include +namespace { + +bool ParseTrailingTokens(const char* token, WOWGUID& guid, CGPlayer_C* player) { + // TODO + return true; +} + +} + +bool Script_GetGUIDFromString(const char*& token, WOWGUID& guid) { + // TODO + return true; +} + bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTarget) { auto activePlayer = static_cast(ClntObjMgrObjectPtr(ClntObjMgrGetActivePlayer(), TYPE_PLAYER, __FILE__, __LINE__)); @@ -118,7 +132,11 @@ bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTar else if (!SStrCmpI(parseToken, "mouseover", 9)) { parseToken += 9; - // TODO + auto trackedObjectGuid = CGGameUI::GetCurrentObjectTrack(); + + if (ClntObjMgrObjectPtr(trackedObjectGuid, TYPE_UNIT, __FILE__, __LINE__) || CGGameUI::IsRaidMemberOrPet(trackedObjectGuid)) { + guid = trackedObjectGuid; + } } // focus - focus target @@ -149,9 +167,25 @@ bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTar guid = -1; } - // TODO ParseTrailingTokens - // TODO Script_GetGUIDFromString - // TODO guid -2 + // Token string was fully parsed or GUID was determined and token string potentially includes + // trailing tokens + if ((*parseToken == '\0' || guid) && ParseTrailingTokens(parseToken, guid, activePlayer)) { + if (!guid) { + guid = -2; + } + return true; + } + + // Token string was either not parsed or only partially parsed and GUID was not determined + if (!guid && Script_GetGUIDFromString(token, guid) && ParseTrailingTokens(token, guid, activePlayer)) { + if (!guid) { + guid = -2; + } + + return true; + } + + // GUID was not successfully determined return false; } diff --git a/src/ui/game/ScriptUtil.hpp b/src/ui/game/ScriptUtil.hpp index 9cdf7ea..c06aa58 100644 --- a/src/ui/game/ScriptUtil.hpp +++ b/src/ui/game/ScriptUtil.hpp @@ -3,6 +3,8 @@ #include "util/GUID.hpp" +bool Script_GetGUIDFromString(const char*& token, WOWGUID& guid); + bool Script_GetGUIDFromToken(const char* token, WOWGUID& guid, bool defaultToTarget); #endif