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 | 
