summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Kundiman <erik@megapahit.org>2025-07-23 21:08:12 +0800
committerErik Kundiman <erik@megapahit.org>2025-07-23 21:08:12 +0800
commit1878bf4eb76e4a79d1622aa6b907362bb94bc0f6 (patch)
treecbe0cf6e36168c919bc09e966c124534494f75f3
parentf0f3169e8ea14219ae179efdebf87a395ae5a029 (diff)
Shared macros for attach-related RLV commands
-rw-r--r--indra/newview/rlvhandler.cpp78
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