diff options
author | Erik Kundiman <erik@megapahit.org> | 2025-07-10 21:48:27 +0800 |
---|---|---|
committer | Erik Kundiman <erik@megapahit.org> | 2025-07-10 21:48:27 +0800 |
commit | f4e04a3e7bac42a8cb18e9c70b67bf97ce020d8c (patch) | |
tree | 62cf8f569d33a7cd3b3db8387fab202f3088bd74 /indra/newview/rlvhandler.cpp | |
parent | af6a85ef15a3de2d4051a012b4f06c0df510a858 (diff) |
@attach:<folder1/.../folderN>=force implementation
A minimal one. It would still work even when the path leading to
the right name of the end folder is wrong, but since scripts would
likely be trying to get path components from issuing @getinv
commands beforehand instead of inserting random names, we'll
perfect this implementation later.
Diffstat (limited to 'indra/newview/rlvhandler.cpp')
-rw-r--r-- | indra/newview/rlvhandler.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 413d3758e4..f3306b0f21 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -304,6 +304,33 @@ ECmdRet ForceHandler<EBehaviour::Unsit>::onCommand(const RlvCommand& rlvCmd) return ECmdRet::Succeeded; } +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; +} + // AddRem ECmdRet CommandHandlerBaseImpl<EParamType::AddRem>::processCommand(const RlvCommand& rlvCmd, BhvrHandlerFunc* pHandler, BhvrToggleHandlerFunc* pToggleHandler) |