From 4ad9d65514374006a9474c9fd42254c95680458f Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Wed, 23 Jul 2025 21:41:07 +0800 Subject: @detach:=force implementation Per specification, the folder must be directly under "#RLV" for this to work, hence not using the shared folder ID retrieval macro. --- indra/newview/rlvhandler.cpp | 22 ++++++++++++++++++++++ indra/newview/rlvhelper.cpp | 1 + 2 files changed, 23 insertions(+) (limited to 'indra') diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index e9bd715a98..14343143cd 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -351,6 +351,28 @@ ECmdRet ForceHandler::onCommand(const RlvCommand& rlvCmd RESTRAINED_LOVE_OUTFIT(RESTRAINED_LOVE_ADD); } +template<> template<> +ECmdRet ForceHandler::onCommand(const RlvCommand& rlvCmd) +{ + auto folderID = gInventory.getRootFolderID(); + LLNameCategoryCollector has_name("#RLV"); + if (!gInventory.hasMatchingDirectDescendent(folderID, has_name)) + return ECmdRet::FailedNoSharedRoot; + folderID = findDescendentCategoryIDByName(folderID, "#RLV"); + std::vector optionList; + auto option = rlvCmd.getOption(); + if (!option.empty()) + { + LLNameCategoryCollector is_named(option); + if (gInventory.hasMatchingDirectDescendent(folderID, is_named)) + { + folderID = findDescendentCategoryIDByName(folderID, option); + LLAppearanceMgr::instance().takeOffOutfit(folderID); + } + } + return ECmdRet::Succeeded; +} + // AddRem ECmdRet CommandHandlerBaseImpl::processCommand(const RlvCommand& rlvCmd, BhvrHandlerFunc* pHandler, BhvrToggleHandlerFunc* pToggleHandler) diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index 4a0b394acb..53f07b9bd3 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -62,6 +62,7 @@ BehaviourDictionary::BehaviourDictionary() addEntry(new ForceProcessor("unsit")); addEntry(new ForceProcessor("attach")); addEntry(new ForceProcessor("attachover")); + addEntry(new ForceProcessor("detach")); // AddRem addEntry(new BehaviourProcessor("sit")); -- cgit v1.2.3