diff options
author | Erik Kundiman <erik@megapahit.org> | 2025-07-23 21:08:12 +0800 |
---|---|---|
committer | Erik Kundiman <erik@megapahit.org> | 2025-07-23 21:08:12 +0800 |
commit | 1878bf4eb76e4a79d1622aa6b907362bb94bc0f6 (patch) | |
tree | cbe0cf6e36168c919bc09e966c124534494f75f3 | |
parent | f0f3169e8ea14219ae179efdebf87a395ae5a029 (diff) |
Shared macros for attach-related RLV commands
-rw-r--r-- | indra/newview/rlvhandler.cpp | 78 |
1 files changed, 34 insertions, 44 deletions
diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 18de822512..e9bd715a98 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -307,58 +307,48 @@ ECmdRet ForceHandler<EBehaviour::Unsit>::onCommand(const RlvCommand& rlvCmd) return ECmdRet::Succeeded; } +#define RESTRAINED_LOVE_OUTFIT(A) \ + auto folderID = gInventory.getRootFolderID();\ + LLNameCategoryCollector has_name("#RLV");\ + if (!gInventory.hasMatchingDirectDescendent(folderID, has_name))\ + return ECmdRet::FailedNoSharedRoot;\ + folderID = findDescendentCategoryIDByName(folderID, "#RLV");\ + std::vector<std::string> optionList;\ + auto option = rlvCmd.getOption();\ + if (!option.empty())\ + {\ + folderID = findDescendentCategoryIDByName(folderID, option);\ + if (folderID == LLUUID::null)\ + {\ + Util::parseStringList(option, optionList, "/");\ + auto iter = optionList.begin();\ + for(; optionList.end() != iter; ++iter)\ + {\ + auto name = *iter;\ + if (!name.empty())\ + folderID = findDescendentCategoryIDByName(folderID, name);\ + }\ + }\ + A\ + }\ + return ECmdRet::Succeeded; + +#define RESTRAINED_LOVE_REPLACE \ + LLAppearanceMgr::instance().replaceCurrentOutfit(folderID); + +#define RESTRAINED_LOVE_ADD \ + LLAppearanceMgr::instance().addCategoryToCurrentOutfit(folderID); + template<> template<> ECmdRet ForceHandler<EBehaviour::Attach>::onCommand(const RlvCommand& rlvCmd) { - auto rlvFolderID = findDescendentCategoryIDByName(gInventory.getRootFolderID(), "#RLV"); - if (rlvFolderID == LLUUID::null) - return ECmdRet::FailedNoSharedRoot; - std::vector<std::string> optionList; - auto option = rlvCmd.getOption(); - if (!option.empty()) - { - auto folderID = findDescendentCategoryIDByName(rlvFolderID, option); - if (folderID == LLUUID::null) - { - Util::parseStringList(option, optionList, "/"); - auto iter = optionList.begin(); - for(; optionList.end() != iter; ++iter) - { - auto name = *iter; - if (!name.empty()) - folderID = findDescendentCategoryIDByName(folderID, name); - } - } - LLAppearanceMgr::instance().replaceCurrentOutfit(folderID); - } - return ECmdRet::Succeeded; + RESTRAINED_LOVE_OUTFIT(RESTRAINED_LOVE_REPLACE); } template<> template<> ECmdRet ForceHandler<EBehaviour::AttachOver>::onCommand(const RlvCommand& rlvCmd) { - auto rlvFolderID = findDescendentCategoryIDByName(gInventory.getRootFolderID(), "#RLV"); - if (rlvFolderID == LLUUID::null) - return ECmdRet::FailedNoSharedRoot; - std::vector<std::string> optionList; - auto option = rlvCmd.getOption(); - if (!option.empty()) - { - auto folderID = findDescendentCategoryIDByName(rlvFolderID, option); - if (folderID == LLUUID::null) - { - Util::parseStringList(option, optionList, "/"); - auto iter = optionList.begin(); - for(; optionList.end() != iter; ++iter) - { - auto name = *iter; - if (!name.empty()) - folderID = findDescendentCategoryIDByName(folderID, name); - } - } - LLAppearanceMgr::instance().addCategoryToCurrentOutfit(folderID); - } - return ECmdRet::Succeeded; + RESTRAINED_LOVE_OUTFIT(RESTRAINED_LOVE_ADD); } // AddRem |