diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index a89aa9f720adbbcb3bb2c781d35ef94a63976261..f6f1735d8f0b0f2a3037a0f7cdc999829005e700 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -1627,8 +1627,26 @@ ERlvCmdRet RlvHandler::processForceCommand(const RlvCommand& rlvCmd) const case RLV_BHVR_SIT: // @sit:<option>=force eRet = onForceSit(rlvCmd); break; - case RLV_BHVR_ADJUSTHEIGHT: // @adjustheight:<options>=force - eRet = RLV_RET_DEPRECATED; + case RLV_BHVR_ADJUSTHEIGHT: // @adjustheight:<options>=force - Checked: 2015-03-30 (RLVa-1.5.0) + { + RlvCommandOptionAdjustHeight rlvCmdOption(rlvCmd); + VERIFY_OPTION(rlvCmdOption.isValid()); + if (isAgentAvatarValid()) + { + F32 nValue = (rlvCmdOption.m_nPelvisToFoot - gAgentAvatarp->getPelvisToFoot()) * rlvCmdOption.m_nPelvisToFootDeltaMult; + nValue += rlvCmdOption.m_nPelvisToFootOffset; + if (gAgentAvatarp->getRegion()->avatarHoverHeightEnabled()) + { + LLVector3 avOffset(0.0, 0.0, llclamp<F32>(nValue, MIN_HOVER_Z, MAX_HOVER_Z)); + gSavedPerAccountSettings.setF32("AvatarHoverOffsetZ", avOffset.mV[VZ]); + gAgentAvatarp->setHoverOffset(avOffset, true); + } + else + { + eRet = RLV_RET_FAILED_DISABLED; + } + } + } break; case RLV_BHVR_TPTO: // @tpto:<option>=force - Checked: 2011-03-28 (RLVa-1.3.0f) | Modified: RLVa-1.3.0f { diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index c36a5f0fc345433cfc8d22d12f6a1f956c180f9e..4488ec030a487889dd5424c611537b1f7c9dc972 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -333,6 +333,25 @@ bool RlvCommandOptionGetPath::getItemIDs(LLWearableType::EType wtType, uuid_vec_ return (cntItemsPrev != idItems.size()); } +// Checked: 2015-03-30 (RLVa-1.5.0) +RlvCommandOptionAdjustHeight::RlvCommandOptionAdjustHeight(const RlvCommand& rlvCmd) + : m_nPelvisToFoot(0.0f), m_nPelvisToFootDeltaMult(0.0f), m_nPelvisToFootOffset(0.0f) +{ + std::vector<std::string> cmdTokens; + boost::split(cmdTokens, rlvCmd.getOption(), boost::is_any_of(std::string(";"))); + if (1 == cmdTokens.size()) + { + m_fValid = (LLStringUtil::convertToF32(cmdTokens[0], m_nPelvisToFootOffset)); + m_nPelvisToFootOffset /= 100; + } + else if ( (2 <= cmdTokens.size()) && (cmdTokens.size() <= 3) ) + { + m_fValid = (LLStringUtil::convertToF32(cmdTokens[0], m_nPelvisToFoot)) && + (LLStringUtil::convertToF32(cmdTokens[1], m_nPelvisToFootDeltaMult)) && + ( (2 == cmdTokens.size()) || (LLStringUtil::convertToF32(cmdTokens[2], m_nPelvisToFootOffset)) ); + } +} + // Checked: 2011-03-28 (RLVa-1.3.0f) | Added: RLVa-1.3.0f RlvCommandOptionTpTo::RlvCommandOptionTpTo(const RlvCommand &rlvCmd) { diff --git a/indra/newview/rlvhelper.h b/indra/newview/rlvhelper.h index 2d935f80e84469b8bc4a1513d2191d802903322b..0187ab494e4286c3686079c456ff6ea280bf4493 100644 --- a/indra/newview/rlvhelper.h +++ b/indra/newview/rlvhelper.h @@ -153,6 +153,15 @@ protected: uuid_vec_t m_idItems; }; +struct RlvCommandOptionAdjustHeight : public RlvCommandOption +{ + RlvCommandOptionAdjustHeight(const RlvCommand& rlvCmd); + + F32 m_nPelvisToFoot; + F32 m_nPelvisToFootDeltaMult; + F32 m_nPelvisToFootOffset; +}; + struct RlvCommandOptionTpTo : public RlvCommandOption { RlvCommandOptionTpTo(const RlvCommand& rlvCmd);