From b1d2961edb593393da5ae88e275be7bb2568969b Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 11 Jul 2025 14:31:55 +0800 Subject: @attachover:=force implementation See f4e04a3e7bac42a8cb18e9c70b67bf97ce020d8c --- indra/newview/rlvdefines.h | 1 + indra/newview/rlvhandler.cpp | 27 +++++++++++++++++++++++++++ indra/newview/rlvhelper.cpp | 1 + 3 files changed, 29 insertions(+) diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 5de428d093..649aa75d14 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -100,6 +100,7 @@ namespace Rlv Detach, GetInv, Attach, + AttachOver, GetCommand, Count, diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index f3306b0f21..066543987f 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -331,6 +331,33 @@ ECmdRet ForceHandler::onCommand(const RlvCommand& rlvCmd) return ECmdRet::Succeeded; } +template<> template<> +ECmdRet ForceHandler::onCommand(const RlvCommand& rlvCmd) +{ + auto rlvFolderID = findDescendentCategoryIDByName(gInventory.getRootFolderID(), "#RLV"); + if (rlvFolderID == LLUUID::null) + return ECmdRet::FailedNoSharedRoot; + std::vector 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; +} + // AddRem ECmdRet CommandHandlerBaseImpl::processCommand(const RlvCommand& rlvCmd, BhvrHandlerFunc* pHandler, BhvrToggleHandlerFunc* pToggleHandler) diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index bba1c4c6fd..4a0b394acb 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -61,6 +61,7 @@ BehaviourDictionary::BehaviourDictionary() addEntry(new ForceProcessor("sitground")); addEntry(new ForceProcessor("unsit")); addEntry(new ForceProcessor("attach")); + addEntry(new ForceProcessor("attachover")); // AddRem addEntry(new BehaviourProcessor("sit")); -- cgit v1.2.3