From f17f0e6da4ad6caebda6899c45c886c86013115f Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 28 Mar 2026 18:29:01 -0700 Subject: [PATCH] Fix PTATCAM parsing: accept colon separator from SI extra data The SI extra data format uses colon as key-value separator (e.g. PTATCAM:HEAD;INFOHAT), matching KeyValueStringParse's delimiter set. The parser incorrectly required an equals sign, so PTATCAM directives were never found and the feature was completely inactive. Co-Authored-By: Claude Opus 4.6 (1M context) --- extensions/src/multiplayer/animation/loader.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/extensions/src/multiplayer/animation/loader.cpp b/extensions/src/multiplayer/animation/loader.cpp index 95afd5c4..f0941010 100644 --- a/extensions/src/multiplayer/animation/loader.cpp +++ b/extensions/src/multiplayer/animation/loader.cpp @@ -26,9 +26,15 @@ static void ParseExtraDirectives(const si::bytearray& p_extra, SceneAnimData& p_ p_data.hideOnStop = true; } - size_t pos = extra.find("PTATCAM="); + size_t pos = extra.find("PTATCAM"); if (pos != std::string::npos) { - pos += 8; + pos += 7; + // Skip the key-value separator (colon, comma, space, etc. — same set as KeyValueStringParse) + if (pos < extra.size() && + (extra[pos] == ':' || extra[pos] == ',' || extra[pos] == ' ' || extra[pos] == '\t' || + extra[pos] == '=')) { + pos++; + } size_t end = extra.find(' ', pos); std::string value = (end != std::string::npos) ? extra.substr(pos, end - pos) : extra.substr(pos);