From c1e8671e7ce24eef0c839e664e3e9df39c9900ed Mon Sep 17 00:00:00 2001
From: Kitty Barnett <develop@catznip.com>
Date: Mon, 30 Mar 2015 23:12:44 +0200
Subject: [PATCH] - changed : reimplemented the @adjustheight command using
 LL's new hover functionality

--HG--
branch : RLVa
---
 indra/newview/rlvhandler.cpp | 22 ++++++++++++++++++++--
 indra/newview/rlvhelper.cpp  | 19 +++++++++++++++++++
 indra/newview/rlvhelper.h    |  9 +++++++++
 3 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp
index a89aa9f720..f6f1735d8f 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 c36a5f0fc3..4488ec030a 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 2d935f80e8..0187ab494e 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);
-- 
GitLab