Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
ee554834b8
|
|
@ -1046,11 +1046,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6727eb44be3eb1afc4dc8961f7f8bf9b</string>
|
||||
<string>bde9eb3e53001584edb1af44e3b265a2</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/fmodstudio-2.02.03-darwin-212712214.tar.bz2</string>
|
||||
<string>file:///opt/firestorm/fmodstudio-2.02.04-darwin-213491614.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin</string>
|
||||
|
|
@ -1060,11 +1060,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ec9764f86fe7159e8f790b9776d16730</string>
|
||||
<string>225762175d2ed102e270082edc7c2e25</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/fmodstudio-2.02.03-linux64-212712203.tar.bz2</string>
|
||||
<string>file:///opt/firestorm/fmodstudio-2.02.04-linux64-213452351.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -1074,11 +1074,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6b29171a8abb4d42f86ce690aa7dec9d</string>
|
||||
<string>6bb2a0ae244a87a5f73b85d938054fb5</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.03-windows-212710809.tar.bz2</string>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.04-windows-213441411.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -1088,18 +1088,18 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>cef62e1955314778f08310ed4195cc35</string>
|
||||
<string>82c73a8ee40c39bca782d73cb9e276e9</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.03-windows64-212710811.tar.bz2</string>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.04-windows64-213441412.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.02.02</string>
|
||||
<string>2.02.04</string>
|
||||
</map>
|
||||
<key>fontconfig</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -290,7 +290,8 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)
|
|||
mDefaultRelativeX(p.rel_x),
|
||||
mDefaultRelativeY(p.rel_y),
|
||||
mMinimizeSignal(NULL),
|
||||
mHostedFloaterShowtitlebar(p.hosted_floater_show_titlebar) // <FS:Ansariel> MultiFloater without titlebar for hosted floater
|
||||
mHostedFloaterShowtitlebar(p.hosted_floater_show_titlebar), // <FS:Ansariel> MultiFloater without titlebar for hosted floater
|
||||
mShiftPressed(false) // <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
// mNotificationContext(NULL)
|
||||
{
|
||||
mPosition.setFloater(*this);
|
||||
|
|
@ -1717,6 +1718,30 @@ BOOL LLFloater::handleDoubleClick(S32 x, S32 y, MASK mask)
|
|||
return was_minimized || LLPanel::handleDoubleClick(x, y, mask);
|
||||
}
|
||||
|
||||
// <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
//virtual
|
||||
BOOL LLFloater::handleKeyHere(KEY key, MASK mask)
|
||||
{
|
||||
if (mask == MASK_SHIFT)
|
||||
{
|
||||
mShiftPressed = true;
|
||||
}
|
||||
|
||||
return LLPanel::handleKeyHere(key, mask);
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL LLFloater::handleKeyUpHere(KEY key, MASK mask)
|
||||
{
|
||||
if (mask == MASK_SHIFT)
|
||||
{
|
||||
mShiftPressed = false;
|
||||
}
|
||||
|
||||
return LLPanel::handleKeyUpHere(key, mask);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
void LLFloater::bringToFront( S32 x, S32 y )
|
||||
{
|
||||
if (getVisible() && pointInView(x, y))
|
||||
|
|
@ -1965,6 +1990,20 @@ void LLFloater::onClickClose( LLFloater* self )
|
|||
|
||||
void LLFloater::onClickCloseBtn(bool app_quitting)
|
||||
{
|
||||
// <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
if (mShiftPressed)
|
||||
{
|
||||
auto floaterlist = LLFloaterReg::getAllFloatersInGroup(this);
|
||||
for (auto floater : floaterlist)
|
||||
{
|
||||
if (floater != this)
|
||||
{
|
||||
floater->closeFloater();
|
||||
}
|
||||
}
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
closeFloater(false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -310,7 +310,12 @@ public:
|
|||
virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask);
|
||||
|
||||
virtual BOOL handleScrollWheel(S32 x, S32 y, S32 mask);
|
||||
|
||||
|
||||
// <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
virtual BOOL handleKeyHere(KEY key, MASK mask);
|
||||
virtual BOOL handleKeyUpHere(KEY key, MASK mask);
|
||||
// </FS:Ansariel>
|
||||
|
||||
virtual void draw();
|
||||
virtual void drawShadow(LLPanel* panel);
|
||||
|
||||
|
|
@ -555,6 +560,9 @@ private:
|
|||
|
||||
// <FS:Ansariel> MultiFloater without titlebar for hosted floater
|
||||
bool mHostedFloaterShowtitlebar;
|
||||
|
||||
// <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
bool mShiftPressed;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -103,6 +103,37 @@ LLFloater* LLFloaterReg::getLastFloaterInGroup(const std::string& name)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
//static
|
||||
LLFloaterReg::instance_list_t LLFloaterReg::getAllFloatersInGroup(LLFloater* floater)
|
||||
{
|
||||
if (floater)
|
||||
{
|
||||
for (const auto& group : sGroupMap)
|
||||
{
|
||||
const std::string& group_name = group.second;
|
||||
|
||||
if (group_name.empty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
instance_list_t& instances = sInstanceMap[group_name];
|
||||
|
||||
for (auto instance : instances)
|
||||
{
|
||||
if (instance == floater)
|
||||
{
|
||||
return sInstanceMap[group_name];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
LLFloater* LLFloaterReg::getLastFloaterCascading()
|
||||
{
|
||||
LLRect candidate_rect;
|
||||
|
|
|
|||
|
|
@ -114,6 +114,7 @@ public:
|
|||
// Helpers
|
||||
static LLFloater* getLastFloaterInGroup(const std::string& name);
|
||||
static LLFloater* getLastFloaterCascading();
|
||||
static instance_list_t getAllFloatersInGroup(LLFloater* floater); // <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
|
||||
// Find / get (create) / remove / destroy
|
||||
static LLFloater* findInstance(const std::string& name, const LLSD& key = LLSD());
|
||||
|
|
|
|||
|
|
@ -3709,7 +3709,8 @@ BOOL LLScrollListCtrl::operateOnAll(EOperation op)
|
|||
void LLScrollListCtrl::setFocus(BOOL b)
|
||||
{
|
||||
// for tabbing into pristine scroll lists (Finder)
|
||||
if (!getFirstSelected())
|
||||
//if (!getFirstSelected())
|
||||
if (!getFirstSelected() && !getEnabled()) // <FS:LO> make disabled lists not jump to the top on clicking an element in them.
|
||||
{
|
||||
selectFirstItem();
|
||||
//onCommit(); // SJB: selectFirstItem() will call onCommit() if appropriate
|
||||
|
|
|
|||
|
|
@ -1834,11 +1834,53 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask)
|
|||
|
||||
S32 offset = getLineOffsetFromDocIndex(mCursorPos);
|
||||
|
||||
S32 spaces_needed = SPACES_PER_TAB - (offset % SPACES_PER_TAB);
|
||||
for( S32 i=0; i < spaces_needed; i++ )
|
||||
// <FS:Ansariel> Allow Shift-Tab to tab-remove in text editors
|
||||
// Modified version from removeCharOrTab()
|
||||
if (mask & MASK_SHIFT)
|
||||
{
|
||||
addChar( ' ' );
|
||||
S32 chars_to_remove = 0;
|
||||
|
||||
LLWString text = getWText();
|
||||
if (mEnableTabRemove && text[mCursorPos - 1] == ' ')
|
||||
{
|
||||
// Try to remove a "tab"
|
||||
S32 offset = getLineOffsetFromDocIndex(mCursorPos);
|
||||
if (offset > 0)
|
||||
{
|
||||
chars_to_remove = offset % SPACES_PER_TAB;
|
||||
if (chars_to_remove == 0)
|
||||
{
|
||||
chars_to_remove = SPACES_PER_TAB;
|
||||
}
|
||||
|
||||
for (S32 i = 0; i < chars_to_remove; i++)
|
||||
{
|
||||
if (text[mCursorPos - i - 1] != ' ')
|
||||
{
|
||||
// Fewer than a full tab's worth of spaces, so
|
||||
// just delete a single character.
|
||||
chars_to_remove = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (S32 i = 0; i < chars_to_remove; i++)
|
||||
{
|
||||
setCursorPos(mCursorPos - 1);
|
||||
remove(mCursorPos, 1, FALSE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// </FS:Ansariel>
|
||||
S32 spaces_needed = SPACES_PER_TAB - (offset % SPACES_PER_TAB);
|
||||
for (S32 i = 0; i < spaces_needed; i++)
|
||||
{
|
||||
addChar(' ');
|
||||
}
|
||||
} // <FS:Ansariel> Allow Shift-Tab to tab-remove in text editors
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ void FloaterAO::updateList()
|
|||
}
|
||||
}
|
||||
|
||||
U32 selected_index = 0;
|
||||
for (U32 index = 0; index < mSetList.size(); ++index)
|
||||
{
|
||||
std::string setName = mSetList[index]->getName();
|
||||
|
|
@ -185,13 +186,16 @@ void FloaterAO::updateList()
|
|||
mSetSelectorSmall->add(setName, &mSetList[index], ADD_BOTTOM, TRUE);
|
||||
if (setName.compare(currentSetName) == 0)
|
||||
{
|
||||
selected_index = index;
|
||||
mSelectedSet = AOEngine::instance().selectSetByName(currentSetName);
|
||||
mSetSelector->selectNthItem(index);
|
||||
mSetSelectorSmall->selectNthItem(index);
|
||||
updateSetParameters();
|
||||
updateAnimationList();
|
||||
}
|
||||
}
|
||||
|
||||
mSetSelector->selectNthItem(selected_index);
|
||||
mSetSelectorSmall->selectNthItem(selected_index);
|
||||
|
||||
enableSetControls(TRUE);
|
||||
if (mSetSelector->getSelectedItemLabel().empty())
|
||||
{
|
||||
|
|
@ -428,7 +432,7 @@ LLScrollListItem* FloaterAO::addAnimation(const std::string& name)
|
|||
LLSD row;
|
||||
row["columns"][0]["column"] = "icon";
|
||||
row["columns"][0]["type"] = "icon";
|
||||
row["columns"][0]["value"] = "Inv_Animation";
|
||||
row["columns"][0]["value"] = "FSAO_Animation_Stopped";
|
||||
|
||||
row["columns"][1]["column"] = "animation_name";
|
||||
row["columns"][1]["type"] = "text";
|
||||
|
|
@ -466,6 +470,15 @@ void FloaterAO::onSelectState()
|
|||
if (item)
|
||||
{
|
||||
item->setUserdata(&mSelectedState->mAnimations[index].mInventoryUUID);
|
||||
|
||||
// update currently playing animation if we are looking at the currently running state in the UI
|
||||
if (mSelectedSet->getMotion() == mSelectedState->mRemapID &&
|
||||
mSelectedState->mCurrentAnimationID == mSelectedState->mAnimations[index].mAssetUUID)
|
||||
{
|
||||
mCurrentBoldItem = item;
|
||||
((LLScrollListIcon*)item->getColumn(0))->setValue("FSAO_Animation_Playing");
|
||||
((LLScrollListText*)item->getColumn(1))->setFontStyle(LLFontGL::BOLD);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -809,8 +822,8 @@ void FloaterAO::onAnimationChanged(const LLUUID& animation)
|
|||
|
||||
if (mCurrentBoldItem)
|
||||
{
|
||||
LLScrollListText* column = (LLScrollListText*)mCurrentBoldItem->getColumn(1);
|
||||
column->setFontStyle(LLFontGL::NORMAL);
|
||||
((LLScrollListIcon*)mCurrentBoldItem->getColumn(0))->setValue("FSAO_Animation_Stopped");
|
||||
((LLScrollListText*)mCurrentBoldItem->getColumn(1))->setFontStyle(LLFontGL::NORMAL);
|
||||
|
||||
mCurrentBoldItem = nullptr;
|
||||
}
|
||||
|
|
@ -832,8 +845,8 @@ void FloaterAO::onAnimationChanged(const LLUUID& animation)
|
|||
{
|
||||
mCurrentBoldItem = item;
|
||||
|
||||
LLScrollListText* column = (LLScrollListText*)mCurrentBoldItem->getColumn(1);
|
||||
column->setFontStyle(LLFontGL::BOLD);
|
||||
((LLScrollListIcon*)mCurrentBoldItem->getColumn(0))->setValue("FSAO_Animation_Playing");
|
||||
((LLScrollListText*)mCurrentBoldItem->getColumn(1))->setFontStyle(LLFontGL::BOLD);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -373,7 +373,7 @@ void AOEngine::enableStands(bool enable_stands)
|
|||
|
||||
void AOEngine::enable(bool enable)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "using " << mLastMotion << " enable " << enable << LL_ENDL;
|
||||
LL_DEBUGS("AOEngine") << "using " << gAnimLibrary.animationName(mLastMotion) << " enable " << enable << LL_ENDL;
|
||||
mEnabled = enable;
|
||||
|
||||
if (!mCurrentSet)
|
||||
|
|
@ -390,7 +390,9 @@ void AOEngine::enable(bool enable)
|
|||
LL_DEBUGS("AOEngine") << "Enabling animation state " << state->mName << LL_ENDL;
|
||||
|
||||
// do not stop underlying sit animations when re-enabling the AO
|
||||
if (mLastOverriddenMotion != ANIM_AGENT_SIT_GROUND_CONSTRAINED && mLastOverriddenMotion != ANIM_AGENT_SIT)
|
||||
if (mLastOverriddenMotion != ANIM_AGENT_SIT_GROUND &&
|
||||
mLastOverriddenMotion != ANIM_AGENT_SIT_GROUND_CONSTRAINED &&
|
||||
mLastOverriddenMotion != ANIM_AGENT_SIT)
|
||||
{
|
||||
gAgent.sendAnimationRequest(mLastOverriddenMotion, ANIM_REQUEST_STOP);
|
||||
}
|
||||
|
|
@ -435,11 +437,15 @@ void AOEngine::enable(bool enable)
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("AOEngine") << "Unhandled last motion id " << mLastMotion << LL_ENDL;
|
||||
LL_WARNS("AOEngine") << "Unhandled last motion id " << gAnimLibrary.animationName(mLastMotion) << LL_ENDL;
|
||||
}
|
||||
|
||||
gAgent.sendAnimationRequest(animation, ANIM_REQUEST_START);
|
||||
mAnimationChangedSignal(state->mAnimations[state->mCurrentAnimation].mInventoryUUID);
|
||||
|
||||
// remember to ignore this motion once in the overrider so stopping the Linden motion
|
||||
// will not trigger a stop of the override animation
|
||||
mIgnoreMotionStopOnce = mLastMotion;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -493,13 +499,9 @@ void AOEngine::setStateCycleTimer(const AOSet::AOState* state)
|
|||
}
|
||||
}
|
||||
|
||||
const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
||||
const LLUUID AOEngine::override(const LLUUID& motion, bool start)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "override(" << pMotion << "," << start << ")" << LL_ENDL;
|
||||
|
||||
LLUUID animation;
|
||||
|
||||
LLUUID motion = pMotion;
|
||||
LL_DEBUGS("AOEngine") << "override(" << gAnimLibrary.animationName(motion) << "," << start << ")" << LL_ENDL;
|
||||
|
||||
if (!mEnabled)
|
||||
{
|
||||
|
|
@ -517,25 +519,37 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
}
|
||||
}
|
||||
}
|
||||
return animation;
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
if (mSets.empty())
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "No sets loaded. Skipping overrider." << LL_ENDL;
|
||||
return animation;
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
if (!mCurrentSet)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "No current AO set chosen. Skipping overrider." << LL_ENDL;
|
||||
return animation;
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// we don't distinguish between these two
|
||||
if (motion == ANIM_AGENT_SIT_GROUND)
|
||||
// ignore stopping this motion once so we can stop the Linden animation
|
||||
// without killing our overrider when logging in or re-enabling
|
||||
if (!start && motion == mIgnoreMotionStopOnce)
|
||||
{
|
||||
motion = ANIM_AGENT_SIT_GROUND_CONSTRAINED;
|
||||
LL_DEBUGS("AOEngine") << "Not stop-overriding motion " << gAnimLibrary.animationName(motion)
|
||||
<< " within same state." << LL_ENDL;
|
||||
|
||||
mIgnoreMotionStopOnce = LLUUID::null;
|
||||
|
||||
// when stopping a sit motion make sure to stop the cycle point cover-up animation
|
||||
if (motion == ANIM_AGENT_SIT)
|
||||
{
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_STOP);
|
||||
}
|
||||
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// map the requested motion to an animation state, taking underwater
|
||||
|
|
@ -543,7 +557,7 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
AOSet::AOState* state = getStateForMotion(motion);
|
||||
if (!state)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "No current AO state for motion " << motion << " (" << gAnimLibrary.animationName(motion) << ")." << LL_ENDL;
|
||||
LL_DEBUGS("AOEngine") << "No current AO state for motion " << gAnimLibrary.animationName(motion) << LL_ENDL;
|
||||
// This part of the code was added to capture an edge case where animations got stuck
|
||||
// However, it seems it isn't needed anymore and breaks other, more important cases.
|
||||
// So we disable this code for now, unless bad things happen and the stuck animations
|
||||
|
|
@ -562,7 +576,7 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
// gAgentAvatarp->LLCharacter::stopMotion(motion);
|
||||
// }
|
||||
// }
|
||||
return animation;
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
mAnimationChangedSignal(LLUUID::null);
|
||||
|
|
@ -624,6 +638,8 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
}
|
||||
}
|
||||
|
||||
LLUUID animation;
|
||||
|
||||
mCurrentSet->stopTimer();
|
||||
if (start)
|
||||
{
|
||||
|
|
@ -636,7 +652,7 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
mInMouselook)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "(enabled AO, mouselook stand stopped) setting last motion id to " << gAnimLibrary.animationName(mLastMotion) << LL_ENDL;
|
||||
return animation;
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// Don't override start and turning stands if stand override is disabled
|
||||
|
|
@ -644,24 +660,24 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
(motion == ANIM_AGENT_STAND || motion == ANIM_AGENT_TURNRIGHT || motion == ANIM_AGENT_TURNLEFT))
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "(enabled AO, stands disabled) setting last motion id to " << gAnimLibrary.animationName(mLastMotion) << LL_ENDL;
|
||||
return animation;
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// Do not start override sits if not selected
|
||||
if (!mCurrentSet->getSitOverride() && motion == ANIM_AGENT_SIT)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "(enabled AO, sit override stopped) setting last motion id to " << gAnimLibrary.animationName(mLastMotion) << LL_ENDL;
|
||||
return animation;
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// scripted seats that use ground_sit as animation need special treatment
|
||||
if (motion == ANIM_AGENT_SIT_GROUND_CONSTRAINED)
|
||||
if (motion == ANIM_AGENT_SIT_GROUND || motion == ANIM_AGENT_SIT_GROUND_CONSTRAINED)
|
||||
{
|
||||
const LLViewerObject* agentRoot = dynamic_cast<LLViewerObject*>(gAgentAvatarp->getRoot());
|
||||
if (agentRoot && agentRoot->getID() != gAgentID)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "Ground sit animation playing but sitting on a prim - disabling overrider." << LL_ENDL;
|
||||
return animation;
|
||||
return LLUUID::null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -677,10 +693,7 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
mCurrentSet->setMotion(motion);
|
||||
}
|
||||
|
||||
if (animation.isNull())
|
||||
{
|
||||
animation = mCurrentSet->getAnimationForState(state);
|
||||
}
|
||||
animation = mCurrentSet->getAnimationForState(state);
|
||||
|
||||
if (state->mCurrentAnimationID.notNull())
|
||||
{
|
||||
|
|
@ -716,7 +729,8 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
}
|
||||
}
|
||||
// special treatment for "transient animations" because the viewer needs the Linden animation to know the agent's state
|
||||
else if (motion == ANIM_AGENT_SIT_GROUND_CONSTRAINED ||
|
||||
else if (motion == ANIM_AGENT_SIT_GROUND ||
|
||||
motion == ANIM_AGENT_SIT_GROUND_CONSTRAINED ||
|
||||
motion == ANIM_AGENT_PRE_JUMP ||
|
||||
motion == ANIM_AGENT_STANDUP ||
|
||||
motion == ANIM_AGENT_LAND ||
|
||||
|
|
@ -756,6 +770,13 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
return animation;
|
||||
}
|
||||
|
||||
// stop the underlying Linden Lab motion, in case it's still running.
|
||||
// frequently happens with sits, so we keep it only for those currently.
|
||||
if (motion == ANIM_AGENT_SIT)
|
||||
{
|
||||
stopAllSitVariants();
|
||||
}
|
||||
|
||||
if (motion != mCurrentSet->getMotion())
|
||||
{
|
||||
LL_WARNS("AOEngine") << "trying to stop-override motion " << gAnimLibrary.animationName(motion)
|
||||
|
|
@ -766,7 +787,8 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
mCurrentSet->setMotion(LLUUID::null);
|
||||
|
||||
// again, special treatment for "transient" animations to make sure our own animation gets stopped properly
|
||||
if (motion == ANIM_AGENT_SIT_GROUND_CONSTRAINED ||
|
||||
if (motion == ANIM_AGENT_SIT_GROUND ||
|
||||
motion == ANIM_AGENT_SIT_GROUND_CONSTRAINED ||
|
||||
motion == ANIM_AGENT_PRE_JUMP ||
|
||||
motion == ANIM_AGENT_STANDUP ||
|
||||
motion == ANIM_AGENT_LAND ||
|
||||
|
|
@ -777,13 +799,6 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, bool start)
|
|||
setStateCycleTimer(state);
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// stop the underlying Linden Lab motion, in case it's still running.
|
||||
// frequently happens with sits, so we keep it only for those currently.
|
||||
if (mLastMotion == ANIM_AGENT_SIT)
|
||||
{
|
||||
stopAllSitVariants();
|
||||
}
|
||||
}
|
||||
|
||||
return animation;
|
||||
|
|
|
|||
|
|
@ -205,6 +205,10 @@ class AOEngine
|
|||
LLUUID mLastOverriddenMotion;
|
||||
LLUUID mTransitionId;
|
||||
|
||||
// this motion will be ignored once in the overrider when stopping, fixes a case
|
||||
// where the AO doesn't correctly start up on login or when getting enabled manually
|
||||
LLUUID mIgnoreMotionStopOnce;
|
||||
|
||||
std::vector<AOSet*> mSets;
|
||||
std::vector<AOSet*> mOldSets;
|
||||
AOSet* mCurrentSet;
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@
|
|||
<key>FSAvatarTurnSpeed</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Modify the speed at which the avatar responds to turning movements. 0-100 percent of max rate</string>
|
||||
<string>Modify the speed at which the avatar responds to turning movements. 0-100 percent of max rate. Default is 0.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@
|
|||
#include "llparcel.h"
|
||||
#include "llproductinforequest.h"
|
||||
#include "llqueryflags.h"
|
||||
#include "llregionhandle.h"
|
||||
#include "llremoteparcelrequest.h"
|
||||
#include "lltimer.h"
|
||||
#include "lltrans.h"
|
||||
|
|
@ -64,6 +65,7 @@
|
|||
#include "llviewergenericmessage.h"
|
||||
#include "llviewernetwork.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llworldmapmessage.h"
|
||||
#include "message.h"
|
||||
#include <boost/tokenizer.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
|
@ -82,8 +84,9 @@ void fillSearchComboBox(LLSearchComboBox* search_combo);
|
|||
class FSSearchRemoteParcelInfoObserver : public LLRemoteParcelInfoObserver
|
||||
{
|
||||
public:
|
||||
FSSearchRemoteParcelInfoObserver(FSFloaterSearch* floater) : LLRemoteParcelInfoObserver(),
|
||||
mParent(floater)
|
||||
FSSearchRemoteParcelInfoObserver(FSFloaterSearch* floater, bool for_events) : LLRemoteParcelInfoObserver(),
|
||||
mParent(floater),
|
||||
mForEvents(for_events)
|
||||
{}
|
||||
|
||||
~FSSearchRemoteParcelInfoObserver()
|
||||
|
|
@ -102,7 +105,14 @@ public:
|
|||
{
|
||||
if (mParent)
|
||||
{
|
||||
mParent->displayParcelDetails(parcel_data);
|
||||
if (mForEvents)
|
||||
{
|
||||
mParent->displayEventParcelImage(parcel_data);
|
||||
}
|
||||
else
|
||||
{
|
||||
mParent->displayParcelDetails(parcel_data);
|
||||
}
|
||||
}
|
||||
mParcelIDs.erase(parcel_data.parcel_id);
|
||||
LLRemoteParcelInfoProcessor::getInstance()->removeObserver(parcel_data.parcel_id, this);
|
||||
|
|
@ -125,6 +135,7 @@ public:
|
|||
private:
|
||||
std::set<LLUUID> mParcelIDs;
|
||||
FSFloaterSearch* mParent;
|
||||
bool mForEvents;
|
||||
};
|
||||
|
||||
///// Avatar Properties Observer /////
|
||||
|
|
@ -234,13 +245,15 @@ SearchQuery::SearchQuery()
|
|||
FSFloaterSearch::FSFloaterSearch(const Params& key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
mRemoteParcelObserver = new FSSearchRemoteParcelInfoObserver(this);
|
||||
mRemoteParcelObserver = new FSSearchRemoteParcelInfoObserver(this, false);
|
||||
mRemoteParcelEventLocationObserver = new FSSearchRemoteParcelInfoObserver(this, true);
|
||||
mAvatarPropertiesObserver = new FSSearchAvatarPropertiesObserver(this);
|
||||
}
|
||||
|
||||
FSFloaterSearch::~FSFloaterSearch()
|
||||
{
|
||||
delete mRemoteParcelObserver;
|
||||
delete mRemoteParcelEventLocationObserver;
|
||||
delete mAvatarPropertiesObserver;
|
||||
gGenericDispatcher.addHandler("classifiedclickthrough", nullptr);
|
||||
}
|
||||
|
|
@ -312,6 +325,7 @@ BOOL FSFloaterSearch::postBuild()
|
|||
mDetailAux2 = getChild<LLTextEditor>("aux2");
|
||||
mDetailLocation = getChild<LLTextEditor>("location");
|
||||
mDetailSnapshot = getChild<LLTextureCtrl>("snapshot");
|
||||
mDetailSnapshotParcel = getChild<LLTextureCtrl>("snapshot_parcel");
|
||||
mDetailMaturity = getChild<LLIconCtrl>("maturity_icon");
|
||||
mTabContainer = getChild<LLTabContainer>("ls_tabs");
|
||||
|
||||
|
|
@ -349,6 +363,18 @@ void FSFloaterSearch::onTabChange()
|
|||
{
|
||||
mDetailsPanel->setVisible(mHasSelection);
|
||||
}
|
||||
|
||||
if (active_panel == mPanelPeople || active_panel == mPanelGroups)
|
||||
{
|
||||
mDetailSnapshotParcel->setVisible(FALSE);
|
||||
mDetailSnapshot->setVisible(TRUE);
|
||||
}
|
||||
else if (active_panel == mPanelPlaces || active_panel == mPanelLand ||
|
||||
active_panel == mPanelEvents || active_panel == mPanelClassifieds)
|
||||
{
|
||||
mDetailSnapshot->setVisible(FALSE);
|
||||
mDetailSnapshotParcel->setVisible(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
|
|
@ -457,7 +483,7 @@ void FSFloaterSearch::displayParcelDetails(const LLParcelData& parcel_data)
|
|||
mDetailAux1->setValue(getString("string.traffic", map));
|
||||
mDetailAux2->setValue(getString("string.area", map));
|
||||
mDetailLocation->setValue(getString("string.location", map));
|
||||
mDetailSnapshot->setValue(parcel_data.snapshot_id);
|
||||
mDetailSnapshotParcel->setValue(parcel_data.snapshot_id);
|
||||
childSetVisible("teleport_btn", true);
|
||||
childSetVisible("map_btn", true);
|
||||
setLoadingProgress(false);
|
||||
|
|
@ -539,7 +565,7 @@ void FSFloaterSearch::displayClassifiedDetails(LLAvatarClassifiedInfo*& c_info)
|
|||
mParcelGlobal = c_info->pos_global;
|
||||
mDetailTitle->setValue(c_info->name);
|
||||
mDetailDesc->setValue(c_info->description);
|
||||
mDetailSnapshot->setValue(c_info->snapshot_id);
|
||||
mDetailSnapshotParcel->setValue(c_info->snapshot_id);
|
||||
mDetailAux1->setValue(getString("string.listing_price", map));
|
||||
mDetailLocation->setValue(getString("string.slurl", map));
|
||||
childSetVisible("teleport_btn", true);
|
||||
|
|
@ -587,9 +613,34 @@ void FSFloaterSearch::displayEventDetails(U32 eventId, F64 eventEpoch, const std
|
|||
mDetailDesc->setValue(eventDesc);
|
||||
mDetailAux1->setValue(getString("string.duration", map));
|
||||
mDetailLocation->setValue(getString("string.location", map));
|
||||
mDetailSnapshotParcel->setValue(LLUUID::null);
|
||||
childSetVisible("teleport_btn", true);
|
||||
childSetVisible("map_btn", true);
|
||||
childSetVisible("event_reminder_btn", true);
|
||||
|
||||
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(simName, boost::bind(&FSFloaterSearch::regionHandleCallback, this, _1, eventGlobalPos), "", false);
|
||||
}
|
||||
|
||||
void FSFloaterSearch::regionHandleCallback(U64 region_handle, LLVector3d pos_global)
|
||||
{
|
||||
std::string url = gAgent.getRegionCapability("RemoteParcelRequest");
|
||||
if (!url.empty())
|
||||
{
|
||||
auto region_origin = from_region_handle(region_handle);
|
||||
LLVector3 pos_region(LLVector3(pos_global - region_origin));
|
||||
|
||||
LLRemoteParcelInfoProcessor::getInstance()->requestRegionParcelInfo(url,
|
||||
LLUUID::null, pos_region, pos_global, mRemoteParcelEventLocationObserver->getObserverHandle());
|
||||
}
|
||||
else
|
||||
{
|
||||
setLoadingProgress(false);
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterSearch::displayEventParcelImage(const LLParcelData& parcel_data)
|
||||
{
|
||||
mDetailSnapshotParcel->setValue(parcel_data.snapshot_id);
|
||||
setLoadingProgress(false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
#include "llscrolllistctrl.h"
|
||||
#include "lltabcontainer.h"
|
||||
|
||||
class LLRemoteParcelInfoObserver;
|
||||
class FSSearchRemoteParcelInfoObserver;
|
||||
class LLAvatarPropertiesObserver;
|
||||
class LLGroupMgrObserver;
|
||||
class LLSearchEditor;
|
||||
|
|
@ -360,6 +360,7 @@ public:
|
|||
U32 eventFlags,
|
||||
U32 eventCover,
|
||||
LLVector3d eventGlobalPos);
|
||||
void displayEventParcelImage(const LLParcelData& parcel_data);
|
||||
void setLoadingProgress(bool started);
|
||||
|
||||
template <class T>
|
||||
|
|
@ -386,7 +387,10 @@ private:
|
|||
void onBtnTeleport();
|
||||
void onBtnMap();
|
||||
|
||||
LLRemoteParcelInfoObserver* mRemoteParcelObserver;
|
||||
void regionHandleCallback(U64 region_handle, LLVector3d pos_global);
|
||||
|
||||
FSSearchRemoteParcelInfoObserver* mRemoteParcelObserver;
|
||||
FSSearchRemoteParcelInfoObserver* mRemoteParcelEventLocationObserver;
|
||||
LLAvatarPropertiesObserver* mAvatarPropertiesObserver;
|
||||
LLGroupMgrObserver* mGroupPropertiesRequest;
|
||||
|
||||
|
|
@ -405,6 +409,7 @@ private:
|
|||
LLTextEditor* mDetailAux2;
|
||||
LLTextEditor* mDetailLocation;
|
||||
LLTextureCtrl* mDetailSnapshot;
|
||||
LLTextureCtrl* mDetailSnapshotParcel;
|
||||
LLIconCtrl* mDetailMaturity;
|
||||
LLTabContainer* mTabContainer;
|
||||
FSPanelProfile* mPanelProfile;
|
||||
|
|
|
|||
|
|
@ -62,15 +62,15 @@ FSPanelContactSets::~FSPanelContactSets()
|
|||
|
||||
BOOL FSPanelContactSets::postBuild()
|
||||
{
|
||||
childSetAction("add_set_btn", boost::bind(&FSPanelContactSets::onClickAddSet, this));
|
||||
childSetAction("remove_set_btn", boost::bind(&FSPanelContactSets::onClickRemoveSet, this));
|
||||
childSetAction("config_btn", boost::bind(&FSPanelContactSets::onClickConfigureSet, this, _1));
|
||||
childSetAction("add_btn", boost::bind(&FSPanelContactSets::onClickAddAvatar, this, _1));
|
||||
childSetAction("remove_btn", boost::bind(&FSPanelContactSets::onClickRemoveAvatar, this));
|
||||
childSetAction("profile_btn", boost::bind(&FSPanelContactSets::onClickOpenProfile, this));
|
||||
childSetAction("start_im_btn", boost::bind(&FSPanelContactSets::onClickStartIM, this));
|
||||
childSetAction("offer_teleport_btn", boost::bind(&FSPanelContactSets::onClickOfferTeleport, this));
|
||||
childSetAction("set_pseudonym_btn", boost::bind(&FSPanelContactSets::onClickSetPseudonym, this));
|
||||
childSetAction("add_set_btn", boost::bind(&FSPanelContactSets::onClickAddSet, this));
|
||||
childSetAction("remove_set_btn", boost::bind(&FSPanelContactSets::onClickRemoveSet, this));
|
||||
childSetAction("config_btn", boost::bind(&FSPanelContactSets::onClickConfigureSet, this, _1));
|
||||
childSetAction("add_btn", boost::bind(&FSPanelContactSets::onClickAddAvatar, this, _1));
|
||||
childSetAction("remove_btn", boost::bind(&FSPanelContactSets::onClickRemoveAvatar, this));
|
||||
childSetAction("profile_btn", boost::bind(&FSPanelContactSets::onClickOpenProfile, this));
|
||||
childSetAction("start_im_btn", boost::bind(&FSPanelContactSets::onClickStartIM, this));
|
||||
childSetAction("offer_teleport_btn", boost::bind(&FSPanelContactSets::onClickOfferTeleport, this));
|
||||
childSetAction("set_pseudonym_btn", boost::bind(&FSPanelContactSets::onClickSetPseudonym, this));
|
||||
childSetAction("remove_pseudonym_btn", boost::bind(&FSPanelContactSets::onClickRemovePseudonym, this));
|
||||
childSetAction("remove_displayname_btn", boost::bind(&FSPanelContactSets::onClickRemoveDisplayName, this));
|
||||
|
||||
|
|
@ -80,6 +80,7 @@ BOOL FSPanelContactSets::postBuild()
|
|||
|
||||
mAvatarList = getChild<LLAvatarList>("contact_list");
|
||||
mAvatarList->setCommitCallback(boost::bind(&FSPanelContactSets::onSelectAvatar, this));
|
||||
mAvatarList->setItemDoubleClickCallback(boost::bind(&FSPanelContactSets::onClickStartIM, this));
|
||||
mAvatarList->setNoItemsCommentText(getString("empty_list"));
|
||||
mAvatarList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu);
|
||||
generateAvatarList(mContactSetCombo->getValue().asString());
|
||||
|
|
|
|||
|
|
@ -232,7 +232,7 @@ void FSRadar::updateRadarList()
|
|||
mRadarOffsetRequests.clear();
|
||||
mRadarEntriesData.clear();
|
||||
mAvatarStats.clear();
|
||||
|
||||
|
||||
//STEP 1: Update our basic data model: detect Avatars & Positions in our defined range
|
||||
std::vector<LLVector3d> positions;
|
||||
uuid_vec_t avatar_ids;
|
||||
|
|
@ -375,12 +375,20 @@ void FSRadar::updateRadarList()
|
|||
mRadarOffsetRequests.push_back(avId);
|
||||
ent->mLastZOffsetTime = now;
|
||||
}
|
||||
}
|
||||
}
|
||||
F32 avRange = (avPos[VZ] != AVATAR_UNKNOWN_Z_OFFSET ? dist_vec(avPos, posSelf) : AVATAR_UNKNOWN_RANGE);
|
||||
ent->mRange = avRange;
|
||||
ent->mGlobalPos = avPos;
|
||||
ent->mRegion = avRegion;
|
||||
|
||||
|
||||
// Double-check range here since limiting range on calling LLWorld::getAvatars does
|
||||
// not work if other avatar is beyond draw distance and above 1020m height. Need to
|
||||
// use LSL bridge result to filter those out.
|
||||
if (sLimitRange && avRange > sNearMeRange)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
//2b. Process newly detected avatars
|
||||
//
|
||||
|
|
@ -436,7 +444,7 @@ void FSRadar::updateRadarList()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// 2c. Process previously detected avatars
|
||||
//
|
||||
|
|
@ -504,7 +512,7 @@ void FSRadar::updateRadarList()
|
|||
mRadarEnterAlerts.push_back(avId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
//2d. Prepare data for presentation view for this avatar
|
||||
//
|
||||
|
|
@ -569,7 +577,7 @@ void FSRadar::updateRadarList()
|
|||
range_color = colortable.getColor("AvatarListItemBeyondShoutRange", LLColor4::white);
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
range_color = colortable.getColor("AvatarListItemBeyondShoutRange", LLColor4::white);
|
||||
}
|
||||
|
|
@ -642,11 +650,11 @@ void FSRadar::updateRadarList()
|
|||
entry_data["options"] = entry_options;
|
||||
mRadarEntriesData.push_back(entry_data);
|
||||
} // End STEP 2, all model/presentation row processing complete.
|
||||
|
||||
|
||||
//
|
||||
//STEP 3, process any bulk actions that require the whole model to be known first
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
//3a. dispatch requests for ZOffset updates, working around minimap's inaccurate height
|
||||
//
|
||||
|
|
@ -680,7 +688,7 @@ void FSRadar::updateRadarList()
|
|||
mRadarOffsetRequests.clear();
|
||||
mRadarLastBulkOffsetRequestTime = now;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
//3b: process alerts for avatars that where here last frame, but gone this frame (ie, they left)
|
||||
// as well as dispatch all earlier detected alerts for crossing range thresholds.
|
||||
|
|
@ -787,7 +795,7 @@ void FSRadar::updateRadarList()
|
|||
//
|
||||
//STEP 4: Cache our current model data, so we can compare it with the next fresh group of model data for fast change detection.
|
||||
//
|
||||
|
||||
|
||||
mLastRadarSweep.clear();
|
||||
em_it_end = mEntryList.end();
|
||||
for (entry_map_t::iterator em_it = mEntryList.begin(); em_it != em_it_end; ++em_it)
|
||||
|
|
|
|||
|
|
@ -762,9 +762,17 @@ Push $2
|
|||
Delete "$2\AppData\Roaming\Firestorm\typed_locations.txt"
|
||||
# Delete files in \Users\<User>\AppData\Local\Firestorm
|
||||
${If} ${ISOPENSIM} == "0"
|
||||
RMDir /r "$2\AppData\Local\Firestorm" #Delete the Havok cache folder
|
||||
${If} ${IS64BIT} == "0"
|
||||
RMDir /r "$2\AppData\Local\Firestorm" #Delete the Havok cache folder
|
||||
${Else}
|
||||
RMDir /r "$2\AppData\Local\Firestorm_x64" #Delete the OpenSim cache folder
|
||||
${EndIf}
|
||||
${Else}
|
||||
RMDir /r "$2\AppData\Local\FirestormOS" #Delete the OpenSim cache folder
|
||||
${If} ${IS64BIT} == "0"
|
||||
RMDir /r "$2\AppData\Local\FirestormOS" #Delete the Havok cache folder
|
||||
${Else}
|
||||
RMDir /r "$2\AppData\Local\FirestormOS_x64" #Delete the OpenSim cache folder
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
|
||||
CONTINUE:
|
||||
|
|
|
|||
|
|
@ -5455,11 +5455,22 @@ void LLAgent::stopCurrentAnimations(bool force_keep_script_perms /*= false*/)
|
|||
{
|
||||
std::vector<LLUUID> anim_ids;
|
||||
|
||||
// <FS:Zi> assume we need to restore the default standing animation
|
||||
bool restore_stand_animation = true;
|
||||
|
||||
for ( LLVOAvatar::AnimIterator anim_it =
|
||||
gAgentAvatarp->mPlayingAnimations.begin();
|
||||
anim_it != gAgentAvatarp->mPlayingAnimations.end();
|
||||
anim_it++)
|
||||
{
|
||||
// <FS:Zi> don't restore stand animation when ground sitting because it is not needed
|
||||
// and an AO would not play a standing animation on top of the ground sit
|
||||
if (anim_it->first == ANIM_AGENT_SIT_GROUND_CONSTRAINED)
|
||||
{
|
||||
restore_stand_animation = false;
|
||||
}
|
||||
// </FS:Zi>
|
||||
|
||||
if ((anim_it->first == ANIM_AGENT_DO_NOT_DISTURB)||
|
||||
(anim_it->first == ANIM_AGENT_SIT_GROUND_CONSTRAINED))
|
||||
{
|
||||
|
|
@ -5499,7 +5510,14 @@ void LLAgent::stopCurrentAnimations(bool force_keep_script_perms /*= false*/)
|
|||
|
||||
// re-assert at least the default standing animation, because
|
||||
// viewers get confused by avs with no associated anims.
|
||||
sendAnimationRequest(ANIM_AGENT_STAND, ANIM_REQUEST_START);
|
||||
|
||||
// <FS:Zi> Only restore stand animation when the avatar was not sitting on ground
|
||||
// sendAnimationRequest(ANIM_AGENT_STAND, ANIM_REQUEST_START);
|
||||
if (restore_stand_animation)
|
||||
{
|
||||
sendAnimationRequest(ANIM_AGENT_STAND, ANIM_REQUEST_START);
|
||||
}
|
||||
// </FS:Zi>
|
||||
|
||||
// <FS:Zi> Run Prio 0 default bento pose in the background to fix splayed hands, open mouths, etc.
|
||||
if (gSavedSettings.getBOOL("FSPlayDefaultBentoAnimation"))
|
||||
|
|
|
|||
|
|
@ -304,11 +304,11 @@ struct AttachmentInfo
|
|||
//};
|
||||
std::vector<AttachmentInfo> info{};
|
||||
|
||||
secondLogPath = metadata.secondLogFilePathname;
|
||||
if(!secondLogPath.empty())
|
||||
{
|
||||
info.push_back(AttachmentInfo(secondLogPath, "text/xml"));
|
||||
}
|
||||
//secondLogPath = metadata.secondLogFilePathname;
|
||||
//if(!secondLogPath.empty())
|
||||
//{
|
||||
// info.push_back(AttachmentInfo(secondLogPath, "text/xml"));
|
||||
//}
|
||||
|
||||
// We "happen to know" that info[0].basename is "SecondLife.old" -- due to
|
||||
// the fact that BugsplatMac only notices a crash during the viewer run
|
||||
|
|
|
|||
|
|
@ -420,6 +420,14 @@ void LLFloaterAutoReplaceSettings::onNewList()
|
|||
bool LLFloaterAutoReplaceSettings::callbackNewListName(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
LL_DEBUGS("AutoReplace")<<"called"<<LL_ENDL;
|
||||
|
||||
// <FS:Ansariel> FIRE-31256: Add Cancel button for new auto-replace list dialog
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
if (option != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
LLSD newList = notification["payload"]["list"];
|
||||
|
||||
|
|
|
|||
|
|
@ -98,6 +98,11 @@ namespace {
|
|||
const std::string TABS_SKYS("sky_tabs");
|
||||
const std::string TABS_WATER("water_tabs");
|
||||
|
||||
// 'Play' buttons
|
||||
const std::string BTN_PLAY("play_btn");
|
||||
const std::string BTN_SKIP_BACK("skip_back_btn");
|
||||
const std::string BTN_SKIP_FORWARD("skip_forward_btn");
|
||||
|
||||
const std::string EVNT_DAYTRACK("DayCycle.Track");
|
||||
const std::string EVNT_PLAY("DayCycle.PlayActions");
|
||||
|
||||
|
|
@ -1205,6 +1210,11 @@ void LLFloaterEditExtDayCycle::updateButtons()
|
|||
mDeleteFrameButton->setEnabled(can_manipulate && isRemovingFrameAllowed());
|
||||
mLoadFrame->setEnabled(can_manipulate);
|
||||
|
||||
BOOL enable_play = mEditDay ? TRUE : FALSE;
|
||||
childSetEnabled(BTN_PLAY, enable_play);
|
||||
childSetEnabled(BTN_SKIP_BACK, enable_play);
|
||||
childSetEnabled(BTN_SKIP_FORWARD, enable_play);
|
||||
|
||||
// update track buttons
|
||||
bool extended_env = LLEnvironment::instance().isExtendedEnvironmentEnabled();
|
||||
for (S32 track = 0; track < LLSettingsDay::TRACK_MAX; ++track)
|
||||
|
|
@ -1575,15 +1585,22 @@ void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data)
|
|||
{
|
||||
LLFloaterEditExtDayCycle* self = (LLFloaterEditExtDayCycle*)user_data;
|
||||
|
||||
F32 prcnt_played = self->mPlayTimer.getElapsedTimeF32() / DAY_CYCLE_PLAY_TIME_SECONDS;
|
||||
F32 new_frame = fmod(self->mPlayStartFrame + prcnt_played, 1.f);
|
||||
if (self->mSkyBlender == nullptr || self->mWaterBlender == nullptr)
|
||||
{
|
||||
self->stopPlay();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
self->mTimeSlider->setCurSliderValue(new_frame); // will do the rounding
|
||||
self->mSkyBlender->setPosition(new_frame);
|
||||
self->mWaterBlender->setPosition(new_frame);
|
||||
self->synchronizeTabs();
|
||||
self->updateTimeAndLabel();
|
||||
self->updateButtons();
|
||||
F32 prcnt_played = self->mPlayTimer.getElapsedTimeF32() / DAY_CYCLE_PLAY_TIME_SECONDS;
|
||||
F32 new_frame = fmod(self->mPlayStartFrame + prcnt_played, 1.f);
|
||||
|
||||
self->mTimeSlider->setCurSliderValue(new_frame); // will do the rounding
|
||||
|
||||
self->synchronizeTabs();
|
||||
self->updateTimeAndLabel();
|
||||
self->updateButtons();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -795,7 +795,7 @@ void hide_context_entries(LLMenuGL& menu,
|
|||
found = !(is_entry_separator && is_previous_entry_separator);
|
||||
is_previous_entry_separator = is_entry_separator;
|
||||
}
|
||||
|
||||
|
||||
if (!found)
|
||||
{
|
||||
if (!menu_item->getLastVisible())
|
||||
|
|
@ -6052,7 +6052,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
disabled_items.push_back(std::string("Save As"));
|
||||
}
|
||||
}
|
||||
|
||||
items.push_back(std::string("Wearable And Object Separator")); // <FS:Ansariel> Add separator
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-03-01 (RLVa-1.2.0b) | Modified: RLVa-1.1.0a
|
||||
if (rlv_handler_t::isEnabled())
|
||||
|
|
@ -8482,6 +8482,7 @@ void LLFolderViewGroupedItemBridge::groupFilterContextMenu(folder_view_item_dequ
|
|||
disabled_items.push_back(std::string("Wearable Add"));
|
||||
disabled_items.push_back(std::string("Attach To"));
|
||||
disabled_items.push_back(std::string("Attach To HUD"));
|
||||
disabled_items.push_back(std::string("Wearable And Object Separator")); // <FS:Ansariel> Add separator
|
||||
}
|
||||
}
|
||||
disable_context_entries_if_present(menu, disabled_items);
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@
|
|||
#include "llwearablelist.h"
|
||||
// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a)
|
||||
#include "rlvactions.h"
|
||||
#include "rlvhandler.h"
|
||||
#include "rlvlocks.h"
|
||||
// [/RLVa:KB]
|
||||
|
||||
|
|
@ -885,6 +886,13 @@ void show_item_profile(const LLUUID& item_uuid)
|
|||
|
||||
void show_item_original(const LLUUID& item_uuid)
|
||||
{
|
||||
// <FS:Ansariel> Don't show if @showinv=n
|
||||
if (rlv_handler_t::isEnabled() && gRlvHandler.hasBehaviour(RLV_BHVR_SHOWINV))
|
||||
{
|
||||
return;
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
LLFloater* floater_inventory = LLFloaterReg::getInstance("inventory");
|
||||
if (!floater_inventory)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -466,7 +466,7 @@ S32 LLMachineID::init()
|
|||
}
|
||||
}
|
||||
#else
|
||||
unsigned char * staticPtr = (unsigned char *)(&static_legacy_id[0]);
|
||||
unsigned char * staticPtr = (unsigned char *)(&static_unique_id[0]);
|
||||
ret_code = LLUUID::getNodeID(staticPtr);
|
||||
has_static_unique_id = true;
|
||||
has_static_legacy_id = false;
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@
|
|||
#include "llviewerregion.h"
|
||||
#include "fsfloaterplacedetails.h"
|
||||
// [RLVa:KB]
|
||||
#include "rlvactions.h"
|
||||
#include "rlvhandler.h"
|
||||
// [/RLVa:KB]
|
||||
|
||||
|
|
@ -753,7 +754,9 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
|
|||
if (asset_uuid.isNull()) return false;
|
||||
|
||||
// Disable "Show on Map" if landmark loading is in progress.
|
||||
return !gLandmarkList.isAssetInLoadedCallbackMap(asset_uuid);
|
||||
// <FS:Ansariel> RLVa fix
|
||||
//return !gLandmarkList.isAssetInLoadedCallbackMap(asset_uuid);
|
||||
return !gLandmarkList.isAssetInLoadedCallbackMap(asset_uuid) && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP);
|
||||
}
|
||||
else if ("rename" == command_name)
|
||||
{
|
||||
|
|
@ -762,6 +765,12 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
|
|||
|
||||
return canItemBeModified(command_name, selected_item);
|
||||
}
|
||||
// <FS:Ansariel> RLVa fix
|
||||
else if ("teleport" == command_name)
|
||||
{
|
||||
return !gRlvHandler.hasBehaviour(RLV_BHVR_TPLM);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -784,6 +793,13 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
|
|||
}
|
||||
else if ("add_landmark" == command_name)
|
||||
{
|
||||
// [RLVa:KB] - Checked: 2012-02-08 (RLVa-1.4.5) | Added: RLVa-1.4.5
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
if (!is_single_selection)
|
||||
{
|
||||
return false;
|
||||
|
|
@ -800,23 +816,24 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
|
|||
//already exists
|
||||
return false;
|
||||
}
|
||||
// <FS:Ansariel> RLVa check
|
||||
//return true;
|
||||
return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC);
|
||||
// </FS:Ansariel>
|
||||
return true;
|
||||
}
|
||||
else if ("add_landmark_root" == command_name)
|
||||
{
|
||||
// [RLVa:KB] - Checked: 2012-02-08 (RLVa-1.4.5) | Added: RLVa-1.4.5
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
|
||||
if (landmark)
|
||||
{
|
||||
//already exists
|
||||
return false;
|
||||
}
|
||||
// <FS:Ansariel> RLVa check
|
||||
//return true;
|
||||
return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC);
|
||||
// </FS:Ansariel>
|
||||
return true;
|
||||
}
|
||||
else if ("share" == command_name)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -807,7 +807,7 @@ BOOL LLPanelPeople::postBuild()
|
|||
if (mContactSetList)
|
||||
{
|
||||
mContactSetList->setCommitCallback(boost::bind(&LLPanelPeople::updateButtons, this));
|
||||
mContactSetList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1));
|
||||
mContactSetList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1));
|
||||
mContactSetList->setNoItemsCommentText(getString("empty_list"));
|
||||
mContactSetList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu);
|
||||
generateCurrentContactList();
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@
|
|||
#include "fsfloaterplacedetails.h"
|
||||
#include "fscommon.h"
|
||||
#include "rlvactions.h"
|
||||
#include "rlvhandler.h"
|
||||
|
||||
// Constants
|
||||
static const F32 PLACE_INFO_UPDATE_INTERVAL = 3.0;
|
||||
|
|
@ -359,8 +360,9 @@ BOOL LLPanelPlaces::postBuild()
|
|||
mTabContainer->setCommitCallback(boost::bind(&LLPanelPlaces::onTabSelected, this));
|
||||
}
|
||||
|
||||
mButtonsContainer = getChild<LLPanel>("button_layout_panel");
|
||||
//mButtonsContainer->setVisible(FALSE); // <FS:Ansariel> FIRE-31033: Keep Teleport/Map/Profile buttons on places floater
|
||||
// <FS:Ansariel> FIRE-31033: Keep Teleport/Map/Profile buttons on places floater
|
||||
//mButtonsContainer = getChild<LLPanel>("button_layout_panel");
|
||||
//mButtonsContainer->setVisible(FALSE);
|
||||
mFilterContainer = getChild<LLLayoutStack>("top_menu_panel");
|
||||
|
||||
mFilterEditor = getChild<LLFilterEditor>("Filter");
|
||||
|
|
@ -1127,7 +1129,8 @@ void LLPanelPlaces::togglePlaceInfoPanel(BOOL visible)
|
|||
return;
|
||||
|
||||
mTabContainer->setVisible(!visible);
|
||||
mButtonsContainer->setVisible(visible);
|
||||
// <FS:Ansariel> FIRE-31033: Keep Teleport/Map/Profile buttons on places floater
|
||||
//mButtonsContainer->setVisible(visible);
|
||||
mFilterContainer->setVisible(!visible);
|
||||
|
||||
if (mPlaceInfoType == AGENT_INFO_TYPE ||
|
||||
|
|
@ -1395,6 +1398,7 @@ void LLPanelPlaces::updateVerbs()
|
|||
mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn);
|
||||
// <FS:Ansariel> FIRE-31033: Keep Teleport/Map/Profile buttons on places floater
|
||||
mPlaceInfoBtn->setVisible(!is_place_info_visible && !is_create_landmark_visible && !isLandmarkEditModeOn && !is_pick_panel_visible);
|
||||
mShowOnMapBtn->setEnabled(!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP));
|
||||
|
||||
bool show_options_btn = is_place_info_visible && !is_create_landmark_visible && !isLandmarkEditModeOn;
|
||||
mOverflowBtn->setVisible(show_options_btn);
|
||||
|
|
@ -1417,13 +1421,18 @@ void LLPanelPlaces::updateVerbs()
|
|||
}
|
||||
// <FS:Ansariel> FIRE-9536: Teleport button disabled if standalone TP history & sidepanel TP history detail
|
||||
//else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
|
||||
else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE || mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
|
||||
//{
|
||||
// mTeleportBtn->setEnabled(have_3d_pos);
|
||||
//}
|
||||
else if (mPlaceInfoType == LANDMARK_INFO_TYPE)
|
||||
{
|
||||
// <FS:Ansariel> FIRE-21863: TP restrictions can be circumvented via parcel SLURL
|
||||
//mTeleportBtn->setEnabled(have_3d_pos);
|
||||
mTeleportBtn->setEnabled(have_3d_pos && RlvActions::canTeleportToLocation());
|
||||
// </FS:Ansariel>
|
||||
mTeleportBtn->setEnabled(have_3d_pos && !gRlvHandler.hasBehaviour(RLV_BHVR_TPLM));
|
||||
}
|
||||
else if (mPlaceInfoType == REMOTE_PLACE_INFO_TYPE || mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
|
||||
{
|
||||
mTeleportBtn->setEnabled(have_3d_pos && RlvActions::canTeleportToLocation());
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ private:
|
|||
LLFilterEditor* mFilterEditor;
|
||||
LLPanelPlacesTab* mActivePanel;
|
||||
LLTabContainer* mTabContainer;
|
||||
LLPanel* mButtonsContainer;
|
||||
//LLPanel* mButtonsContainer; // <FS:Ansariel> FIRE-31033: Keep Teleport/Map/Profile buttons on places floater
|
||||
LLLayoutStack* mFilterContainer;
|
||||
LLPanelPlaceProfile* mPlaceProfile;
|
||||
LLPanelLandmarkInfo* mLandmarkInfo;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@
|
|||
#include <boost/algorithm/string/replace.hpp>
|
||||
//</FS:Beq>
|
||||
#include "llviewercontrol.h"
|
||||
#include "rlvactions.h"
|
||||
#include "rlvhandler.h"
|
||||
|
||||
#include "fsfloaterplacedetails.h"
|
||||
|
||||
|
|
@ -673,9 +675,9 @@ void LLTeleportHistoryPanel::updateVerbs()
|
|||
|
||||
LLTeleportHistoryFlatItem* itemp = dynamic_cast<LLTeleportHistoryFlatItem *> (mLastSelectedFlatlList->getSelectedItem());
|
||||
|
||||
mTeleportBtn->setEnabled(NULL != itemp);
|
||||
mTeleportBtn->setEnabled(NULL != itemp && RlvActions::canTeleportToLocation());
|
||||
mShowProfile->setEnabled(NULL != itemp);
|
||||
mShowOnMapBtn->setEnabled(NULL != itemp);
|
||||
mShowOnMapBtn->setEnabled(NULL != itemp && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP));
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
|
|
@ -1318,6 +1320,17 @@ bool LLTeleportHistoryPanel::isActionEnabled(const LLSD& userdata) const
|
|||
return false;
|
||||
}
|
||||
LLTeleportHistoryFlatItem* itemp = dynamic_cast<LLTeleportHistoryFlatItem *> (mLastSelectedFlatlList->getSelectedItem());
|
||||
// <FS:Ansariel> RLVa fix
|
||||
if ("teleport" == command_name)
|
||||
{
|
||||
return itemp && RlvActions::canTeleportToLocation();
|
||||
}
|
||||
else if ("show_on_map" == command_name)
|
||||
{
|
||||
return itemp && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
return itemp != NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1454,9 +1454,11 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
|
|||
}
|
||||
break;
|
||||
case SELECT_TYPE_HUD:
|
||||
case SELECT_TYPE_WORLD:
|
||||
mGridScale = LLVector3(1.f, 1.f, 1.f) * llmin(gSavedSettings.getF32("GridResolution"), 0.5f);
|
||||
break;
|
||||
case SELECT_TYPE_WORLD:
|
||||
mGridScale = LLVector3(1.f, 1.f, 1.f) * gSavedSettings.getF32("GridResolution");
|
||||
break;
|
||||
}
|
||||
}
|
||||
llassert(mGridOrigin.isFinite());
|
||||
|
|
|
|||
|
|
@ -347,7 +347,9 @@ BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask)
|
|||
}
|
||||
// Nothing selected means the first mouse click was probably
|
||||
// bad, so try again.
|
||||
return FALSE;
|
||||
// This also consumes the event to prevent things like double-click
|
||||
// teleport from triggering.
|
||||
return handleMouseDown(x, y, mask);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -687,18 +687,21 @@ bool LLToolPie::walkToClickedLocation()
|
|||
mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE;
|
||||
}
|
||||
|
||||
if ((mPick.mPickType == LLPickInfo::PICK_LAND && !mPick.mPosGlobal.isExactlyZero()) ||
|
||||
(mPick.mObjectID.notNull() && !mPick.mPosGlobal.isExactlyZero()))
|
||||
{
|
||||
// if ((mPick.mPickType == LLPickInfo::PICK_LAND && !mPick.mPosGlobal.isExactlyZero()) ||
|
||||
// (mPick.mObjectID.notNull() && !mPick.mPosGlobal.isExactlyZero()))
|
||||
// [RLVa:KB] - Checked: RLVa-2.0.0
|
||||
if (RlvActions::isRlvEnabled() && !RlvActions::canTeleportToLocal(mPick.mPosGlobal))
|
||||
{
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::AutoPilot);
|
||||
mPick = saved_pick;
|
||||
return false;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
bool fValidPick = ((mPick.mPickType == LLPickInfo::PICK_LAND && !mPick.mPosGlobal.isExactlyZero()) ||
|
||||
(mPick.mObjectID.notNull() && !mPick.mPosGlobal.isExactlyZero()));
|
||||
|
||||
if ( (fValidPick) && (RlvActions::isRlvEnabled()) && (!RlvActions::canTeleportToLocal(mPick.mPosGlobal)) )
|
||||
{
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::AutoPilot);
|
||||
fValidPick = false;
|
||||
}
|
||||
|
||||
if (fValidPick)
|
||||
// [/RLVa:KB]
|
||||
{
|
||||
// <FS:PP> FIRE-31135 Do not reset camera position for "click to walk"
|
||||
// gAgentCamera.setFocusOnAvatar(TRUE, TRUE);
|
||||
static LLCachedControl<bool> sResetCameraOnMovement(gSavedSettings, "FSResetCameraOnMovement");
|
||||
|
|
@ -1463,35 +1466,25 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
|
|||
// Display the PE weight for an object if mesh is enabled
|
||||
if (gMeshRepo.meshRezEnabled())
|
||||
{
|
||||
// Ansariel: What a bummer! PE is only available for
|
||||
// objects in the same region as you!
|
||||
if (hover_object->getRegion() && gAgent.getRegion() &&
|
||||
hover_object->getRegion()->getRegionID() == gAgent.getRegion()->getRegionID())
|
||||
S32 link_cost = LLSelectMgr::getInstance()->getHoverObjects()->getSelectedLinksetCost();
|
||||
if (link_cost > 0)
|
||||
{
|
||||
S32 link_cost = LLSelectMgr::getInstance()->getHoverObjects()->getSelectedLinksetCost();
|
||||
if (link_cost > 0)
|
||||
{
|
||||
args.clear();
|
||||
args["PEWEIGHT"] = llformat("%d", link_cost);
|
||||
tooltip_msg.append(LLTrans::getString("TooltipPrimEquivalent", args));
|
||||
}
|
||||
args.clear();
|
||||
args["PEWEIGHT"] = llformat("%d", link_cost);
|
||||
tooltip_msg.append(LLTrans::getString("TooltipPrimEquivalent", args));
|
||||
}
|
||||
/// <FS:CR> Don't show loading on vanila OpenSim (some grids have it, not not vanilla) If they have it, it will
|
||||
/// show eventually
|
||||
#ifdef OPENSIM
|
||||
else if (LLGridManager::getInstance()->isInOpenSim())
|
||||
{
|
||||
// Do nothing at all.
|
||||
}
|
||||
else if (LLGridManager::getInstance()->isInOpenSim())
|
||||
{
|
||||
// Do nothing at all.
|
||||
}
|
||||
#endif
|
||||
// </FS:CR>
|
||||
else
|
||||
{
|
||||
tooltip_msg.append(LLTrans::getString("TooltipPrimEquivalentLoading"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tooltip_msg.append(LLTrans::getString("TooltipPrimEquivalentUnavailable"));
|
||||
tooltip_msg.append(LLTrans::getString("TooltipPrimEquivalentLoading"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -736,22 +736,22 @@ bool run_forward(EKeystate s)
|
|||
}
|
||||
if (!gAgent.getRunning())
|
||||
{
|
||||
// [RLVa:KB] - @temprun
|
||||
gAgent.setTempRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.setRunning();
|
||||
// gAgent.sendWalkRun(true);
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
gAgent.setTempRun();
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
}
|
||||
else if(KEYSTATE_UP == s)
|
||||
{
|
||||
if (gAgent.mDoubleTapRunMode == LLAgent::DOUBLETAP_FORWARD)
|
||||
gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_NONE;
|
||||
// [RLVa:KB] - @temprun
|
||||
gAgent.clearTempRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.clearRunning();
|
||||
// gAgent.sendWalkRun(false);
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
gAgent.clearTempRun();
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
agent_push_forward(s);
|
||||
return true;
|
||||
|
|
@ -767,22 +767,22 @@ bool run_backward(EKeystate s)
|
|||
}
|
||||
if (!gAgent.getRunning())
|
||||
{
|
||||
// [RLVa:KB] - @temprun
|
||||
gAgent.setTempRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.setRunning();
|
||||
// gAgent.sendWalkRun(true);
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
gAgent.setTempRun();
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
}
|
||||
else if (KEYSTATE_UP == s)
|
||||
{
|
||||
if (gAgent.mDoubleTapRunMode == LLAgent::DOUBLETAP_BACKWARD)
|
||||
gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_NONE;
|
||||
// [RLVa:KB] - @temprun
|
||||
gAgent.clearTempRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.clearRunning();
|
||||
// gAgent.sendWalkRun(false);
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
gAgent.clearTempRun();
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
agent_push_backward(s);
|
||||
return true;
|
||||
|
|
@ -798,22 +798,22 @@ bool run_left(EKeystate s)
|
|||
}
|
||||
if (!gAgent.getRunning())
|
||||
{
|
||||
// [RLVa:KB] - @temprun
|
||||
gAgent.setTempRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.setRunning();
|
||||
// gAgent.sendWalkRun(true);
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
gAgent.setTempRun();
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
}
|
||||
else if (KEYSTATE_UP == s)
|
||||
{
|
||||
if (gAgent.mDoubleTapRunMode == LLAgent::DOUBLETAP_SLIDELEFT)
|
||||
gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_NONE;
|
||||
// [RLVa:KB] - @temprun
|
||||
gAgent.clearTempRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.clearRunning();
|
||||
// gAgent.sendWalkRun(false);
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
gAgent.clearTempRun();
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
agent_slide_left(s);
|
||||
return true;
|
||||
|
|
@ -829,22 +829,22 @@ bool run_right(EKeystate s)
|
|||
}
|
||||
if (!gAgent.getRunning())
|
||||
{
|
||||
// [RLVa:KB] - @temprun
|
||||
gAgent.setTempRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.setRunning();
|
||||
// gAgent.sendWalkRun(true);
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
gAgent.setTempRun();
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
}
|
||||
else if (KEYSTATE_UP == s)
|
||||
{
|
||||
if (gAgent.mDoubleTapRunMode == LLAgent::DOUBLETAP_SLIDERIGHT)
|
||||
gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_NONE;
|
||||
// [RLVa:KB] - @temprun
|
||||
gAgent.clearTempRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.clearRunning();
|
||||
// gAgent.sendWalkRun(false);
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
gAgent.clearTempRun();
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
agent_slide_right(s);
|
||||
return true;
|
||||
|
|
@ -856,19 +856,21 @@ bool toggle_run(EKeystate s)
|
|||
bool run = gAgent.getAlwaysRun();
|
||||
if (run)
|
||||
{
|
||||
gAgent.clearAlwaysRun();
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
// gAgent.clearRunning();
|
||||
// [RLVa:KB] - @alwaysrun
|
||||
gAgent.clearAlwaysRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.clearAlwaysRun();
|
||||
// gAgent.clearRunning();
|
||||
}
|
||||
else
|
||||
{
|
||||
gAgent.setAlwaysRun();
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
// gAgent.setRunning();
|
||||
// [RLVa:KB] - @alwaysrun
|
||||
gAgent.setAlwaysRun();
|
||||
// [/RLVa:KB]
|
||||
// gAgent.setAlwaysRun();
|
||||
// gAgent.setRunning();
|
||||
}
|
||||
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
|
||||
// gAgent.sendWalkRun(!run);
|
||||
// gAgent.sendWalkRun(!run);
|
||||
// [/RLVa:KB]
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -3906,19 +3906,13 @@ bool check_avatar_render_mode(U32 mode)
|
|||
switch (mode)
|
||||
{
|
||||
case 0:
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
return FSAvatarRenderPersistence::instance().getAvatarRenderSettings(avatar->getID()) == LLVOAvatar::AV_RENDER_NORMALLY;
|
||||
// [/RLVa:KB]
|
||||
// return (avatar->getVisualMuteSettings() == LLVOAvatar::AV_RENDER_NORMALLY);
|
||||
case 1:
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
return FSAvatarRenderPersistence::instance().getAvatarRenderSettings(avatar->getID()) == LLVOAvatar::AV_DO_NOT_RENDER;
|
||||
// [/RLVa:KB]
|
||||
// return (avatar->getVisualMuteSettings() == LLVOAvatar::AV_DO_NOT_RENDER);
|
||||
case 2:
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
return FSAvatarRenderPersistence::instance().getAvatarRenderSettings(avatar->getID()) == LLVOAvatar::AV_ALWAYS_RENDER;
|
||||
// [/RLVa:KB]
|
||||
// return (avatar->getVisualMuteSettings() == LLVOAvatar::AV_ALWAYS_RENDER);
|
||||
case 4:
|
||||
return FSAvatarRenderPersistence::instance().getAvatarRenderSettings(avatar->getID()) != LLVOAvatar::AV_RENDER_NORMALLY;
|
||||
|
|
|
|||
|
|
@ -683,6 +683,47 @@ class LLFileCloseWindow : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
// <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
class FSFileEnableCloseWindowGroup : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
bool frontmost_fl_exists = (NULL != gFloaterView->getFrontmostClosableFloater());
|
||||
bool frontmost_snapshot_fl_exists = (NULL != gSnapshotFloaterView->getFrontmostClosableFloater());
|
||||
|
||||
return !LLNotificationsUI::LLToast::isAlertToastShown() && (frontmost_fl_exists || frontmost_snapshot_fl_exists);
|
||||
}
|
||||
};
|
||||
|
||||
class FSFileCloseWindowGroup : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
bool frontmost_fl_exists = (NULL != gFloaterView->getFrontmostClosableFloater());
|
||||
LLFloater* snapshot_floater = gSnapshotFloaterView->getFrontmostClosableFloater();
|
||||
|
||||
if (snapshot_floater && (!frontmost_fl_exists || snapshot_floater->hasFocus()))
|
||||
{
|
||||
snapshot_floater->closeFloater();
|
||||
if (gFocusMgr.getKeyboardFocus() == NULL)
|
||||
{
|
||||
gFloaterView->focusFrontFloater();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto floaterlist = LLFloaterReg::getAllFloatersInGroup(gFloaterView->getFrontmostClosableFloater());
|
||||
for (auto floater : floaterlist)
|
||||
{
|
||||
floater->closeFloater();
|
||||
}
|
||||
}
|
||||
if (gMenuHolder) gMenuHolder->hideMenus();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
// </FS:Ansariel>
|
||||
|
||||
class LLFileEnableCloseAllWindows : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
|
|
@ -1153,5 +1194,10 @@ void init_menu_file()
|
|||
view_listener_t::addEnable(new FSFileEnableImportWindlightBulk(), "File.EnableImportWindlightBulk");
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:Ansariel> FIRE-24125: Add option to close all floaters of a group
|
||||
view_listener_t::addCommit(new FSFileCloseWindowGroup(), "File.CloseWindowGroup");
|
||||
view_listener_t::addEnable(new FSFileEnableCloseWindowGroup(), "File.EnableCloseWindowGroup");
|
||||
// </FS:Ansariel>
|
||||
|
||||
// "File.SaveTexture" moved to llpanelmaininventory so that it can be properly handled.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1152,23 +1152,63 @@ void LLViewerObjectList::fetchObjectCosts()
|
|||
// issue http request for stale object physics costs
|
||||
if (!mStaleObjectCost.empty())
|
||||
{
|
||||
LLViewerRegion* regionp = gAgent.getRegion();
|
||||
// <FS:Ansariel> FIRE-5496: Missing LI for objects outside agent's region
|
||||
//LLViewerRegion* regionp = gAgent.getRegion();
|
||||
|
||||
if (regionp)
|
||||
//if (regionp)
|
||||
//{
|
||||
// std::string url = regionp->getCapability("GetObjectCost");
|
||||
|
||||
// if (!url.empty())
|
||||
// {
|
||||
// LLCoros::instance().launch("LLViewerObjectList::fetchObjectCostsCoro",
|
||||
// boost::bind(&LLViewerObjectList::fetchObjectCostsCoro, this, url));
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// mStaleObjectCost.clear();
|
||||
// mPendingObjectCost.clear();
|
||||
// }
|
||||
//}
|
||||
|
||||
std::map<LLViewerRegion*, uuid_set_t> regionObjectMap{};
|
||||
|
||||
// Swap it for thread safety since we're going to iterate over it
|
||||
uuid_set_t staleObjectCostIds{};
|
||||
staleObjectCostIds.swap(mStaleObjectCost);
|
||||
|
||||
for (const auto& staleObjectId : staleObjectCostIds)
|
||||
{
|
||||
std::string url = regionp->getCapability("GetObjectCost");
|
||||
LLViewerObject* staleObject = findObject(staleObjectId);
|
||||
if (staleObject && staleObject->getRegion())
|
||||
{
|
||||
if (regionObjectMap.find(staleObject->getRegion()) == regionObjectMap.end())
|
||||
{
|
||||
regionObjectMap.insert(std::make_pair(staleObject->getRegion(), uuid_set_t()));
|
||||
}
|
||||
|
||||
regionObjectMap[staleObject->getRegion()].insert(staleObjectId);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto region : regionObjectMap)
|
||||
{
|
||||
std::string url = region.first->getCapability("GetObjectCost");
|
||||
|
||||
if (!url.empty())
|
||||
{
|
||||
LLCoros::instance().launch("LLViewerObjectList::fetchObjectCostsCoro",
|
||||
boost::bind(&LLViewerObjectList::fetchObjectCostsCoro, this, url));
|
||||
LLCoros::instance().launch("LLViewerObjectList::fetchObjectCostsCoro",
|
||||
boost::bind(&LLViewerObjectList::fetchObjectCostsCoro, this, url, region.second));
|
||||
}
|
||||
else
|
||||
{
|
||||
mStaleObjectCost.clear();
|
||||
mPendingObjectCost.clear();
|
||||
for (const auto& objectId : region.second)
|
||||
{
|
||||
mPendingObjectCost.erase(objectId);
|
||||
}
|
||||
}
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1183,7 +1223,9 @@ void LLViewerObjectList::reportObjectCostFailure(LLSD &objectList)
|
|||
}
|
||||
|
||||
|
||||
void LLViewerObjectList::fetchObjectCostsCoro(std::string url)
|
||||
// <FS:Ansariel> FIRE-5496: Missing LI for objects outside agent's region
|
||||
//void LLViewerObjectList::fetchObjectCostsCoro(std::string url)
|
||||
void LLViewerObjectList::fetchObjectCostsCoro(std::string url, uuid_set_t staleObjects)
|
||||
{
|
||||
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
|
||||
|
|
@ -1194,11 +1236,16 @@ void LLViewerObjectList::fetchObjectCostsCoro(std::string url)
|
|||
|
||||
uuid_set_t diff;
|
||||
|
||||
std::set_difference(mStaleObjectCost.begin(), mStaleObjectCost.end(),
|
||||
mPendingObjectCost.begin(), mPendingObjectCost.end(),
|
||||
std::inserter(diff, diff.begin()));
|
||||
// <FS:Ansariel> FIRE-5496: Missing LI for objects outside agent's region
|
||||
//std::set_difference(mStaleObjectCost.begin(), mStaleObjectCost.end(),
|
||||
// mPendingObjectCost.begin(), mPendingObjectCost.end(),
|
||||
// std::inserter(diff, diff.begin()));
|
||||
|
||||
mStaleObjectCost.clear();
|
||||
//mStaleObjectCost.clear();
|
||||
std::set_difference(staleObjects.begin(), staleObjects.end(),
|
||||
mPendingObjectCost.begin(), mPendingObjectCost.end(),
|
||||
std::inserter(diff, diff.begin()));
|
||||
// </FS:Ansariel>
|
||||
|
||||
if (diff.empty())
|
||||
{
|
||||
|
|
@ -1265,7 +1312,7 @@ void LLViewerObjectList::fetchObjectCostsCoro(std::string url)
|
|||
|
||||
// <FS:Cron> area search
|
||||
// Update area search to have current information.
|
||||
FSAreaSearch* area_search_floater = LLFloaterReg::getTypedInstance<FSAreaSearch>("area_search");
|
||||
FSAreaSearch* area_search_floater = LLFloaterReg::findTypedInstance<FSAreaSearch>("area_search");
|
||||
if (area_search_floater)
|
||||
{
|
||||
area_search_floater->updateObjectCosts(objectId, objectCost, linkCost, physicsCost, linkPhysicsCost);
|
||||
|
|
|
|||
|
|
@ -253,7 +253,9 @@ protected:
|
|||
|
||||
private:
|
||||
static void reportObjectCostFailure(LLSD &objectList);
|
||||
void fetchObjectCostsCoro(std::string url);
|
||||
// <FS:Ansariel> FIRE-5496: Missing LI for objects outside agent's region
|
||||
//void fetchObjectCostsCoro(std::string url);
|
||||
void fetchObjectCostsCoro(std::string url, uuid_set_t staleObjects);
|
||||
|
||||
static void reportPhysicsFlagFailure(LLSD &obejectList);
|
||||
void fetchPhisicsFlagsCoro(std::string url);
|
||||
|
|
|
|||
|
|
@ -332,7 +332,8 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCoro(U64 regionHandle)
|
|||
return;
|
||||
}
|
||||
|
||||
++mSeedCapAttempts;
|
||||
// <FS:Ansariel> Fix seed cap retry count
|
||||
//++mSeedCapAttempts;
|
||||
|
||||
regionp = LLWorld::getInstance()->getRegionFromHandle(regionHandle);
|
||||
if (!regionp) //region was removed
|
||||
|
|
|
|||
|
|
@ -4231,7 +4231,14 @@ bool LLVOAvatar::isVisuallyMuted()
|
|||
// * check against the render cost and attachment limits
|
||||
if (!isSelf())
|
||||
{
|
||||
if (mVisuallyMuteSetting == AV_ALWAYS_RENDER)
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
if (isRlvSilhouette())
|
||||
{
|
||||
muted = true;
|
||||
}
|
||||
else if (mVisuallyMuteSetting == AV_ALWAYS_RENDER)
|
||||
// [/RLVa:KB]
|
||||
// if (mVisuallyMuteSetting == AV_ALWAYS_RENDER)
|
||||
{
|
||||
muted = false;
|
||||
}
|
||||
|
|
@ -4250,12 +4257,6 @@ bool LLVOAvatar::isVisuallyMuted()
|
|||
// muted = true;
|
||||
//}
|
||||
// </FS:Ansariel>
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
else if (isRlvSilhouette())
|
||||
{
|
||||
muted = true;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
else
|
||||
{
|
||||
muted = isTooComplex();
|
||||
|
|
@ -4286,9 +4287,9 @@ bool LLVOAvatar::isInMuteList() const
|
|||
}
|
||||
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
bool LLVOAvatar::isRlvSilhouette()
|
||||
bool LLVOAvatar::isRlvSilhouette() const
|
||||
{
|
||||
if (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_AVDIST))
|
||||
if (!RlvActions::hasBehaviour(RLV_BHVR_SETCAM_AVDIST))
|
||||
return false;
|
||||
|
||||
static RlvCachedBehaviourModifier<float> s_nSetCamAvDist(RLV_MODIFIER_SETCAM_AVDIST);
|
||||
|
|
@ -4296,14 +4297,14 @@ bool LLVOAvatar::isRlvSilhouette()
|
|||
const F64 now = LLFrameTimer::getTotalSeconds();
|
||||
if (now >= mCachedRlvSilhouetteUpdateTime)
|
||||
{
|
||||
const F64 SECONDS_BETWEEN_NEARBY_UPDATES = .5f;
|
||||
const F64 SECONDS_BETWEEN_SILHOUETTE_UPDATES = .5f;
|
||||
bool fIsRlvSilhouette = dist_vec_squared(gAgent.getPositionGlobal(), getPositionGlobal()) > s_nSetCamAvDist() * s_nSetCamAvDist();
|
||||
if (fIsRlvSilhouette != mCachedIsRlvSilhouette)
|
||||
{
|
||||
mCachedIsRlvSilhouette = fIsRlvSilhouette;
|
||||
mNeedsImpostorUpdate = TRUE;
|
||||
}
|
||||
mCachedRlvSilhouetteUpdateTime = now + SECONDS_BETWEEN_NEARBY_UPDATES;
|
||||
mCachedRlvSilhouetteUpdateTime = now + SECONDS_BETWEEN_SILHOUETTE_UPDATES;
|
||||
}
|
||||
return mCachedIsRlvSilhouette;
|
||||
}
|
||||
|
|
@ -12251,23 +12252,19 @@ void LLVOAvatar::calcMutedAVColor()
|
|||
std::string change_msg;
|
||||
LLUUID av_id(getID());
|
||||
|
||||
if (getVisualMuteSettings() == AV_DO_NOT_RENDER)
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
if (isRlvSilhouette())
|
||||
{
|
||||
new_color = LLColor4::silhouette;
|
||||
change_msg = " not rendered: color is silhouette";
|
||||
}
|
||||
else if (getVisualMuteSettings() == AV_DO_NOT_RENDER)
|
||||
// [/RLVa:KB]
|
||||
// if (getVisualMuteSettings() == AV_DO_NOT_RENDER)
|
||||
{
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
if (isRlvSilhouette())
|
||||
{
|
||||
new_color = LLColor4::silhouette;
|
||||
change_msg = " not rendered: color is silhouette";
|
||||
}
|
||||
else
|
||||
{
|
||||
// [/RLVa:KB]
|
||||
// explicitly not-rendered avatars are light grey
|
||||
new_color = LLColor4::grey4;
|
||||
change_msg = " not rendered: color is grey4";
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
// explicitly not-rendered avatars are light grey
|
||||
new_color = LLColor4::grey4;
|
||||
change_msg = " not rendered: color is grey4";
|
||||
}
|
||||
else if (LLMuteList::getInstance()->isMuted(av_id)) // the user blocked them
|
||||
{
|
||||
|
|
@ -12281,14 +12278,8 @@ void LLVOAvatar::calcMutedAVColor()
|
|||
change_msg = " simple imposter ";
|
||||
}
|
||||
#ifdef COLORIZE_JELLYDOLLS
|
||||
// else if ( mMutedAVColor == LLColor4::white || mMutedAVColor == LLColor4::grey3 || mMutedAVColor == LLColor4::grey4 )
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
else if ( mMutedAVColor == LLColor4::white || mMutedAVColor == LLColor4::grey3 || mMutedAVColor == LLColor4::grey4 || mMutedAVColor == LLColor4::silhouette)
|
||||
#else
|
||||
else if (mMutedAVColor == LLColor4::silhouette)
|
||||
#endif
|
||||
// [/RLVa:KB]
|
||||
{
|
||||
else if ( mMutedAVColor == LLColor4::white || mMutedAVColor == LLColor4::grey3 || mMutedAVColor == LLColor4::grey4 )
|
||||
{
|
||||
// select a color based on the first byte of the agents uuid so any muted agent is always the same color
|
||||
F32 color_value = (F32) (av_id.mData[0]);
|
||||
F32 spectrum = (color_value / 256.0); // spectrum is between 0 and 1.f
|
||||
|
|
@ -12307,8 +12298,7 @@ void LLVOAvatar::calcMutedAVColor()
|
|||
new_color.normalize();
|
||||
new_color *= 0.28f; // Tone it down
|
||||
}
|
||||
// <FS:Ansariel> RLVa fix
|
||||
//#endif
|
||||
#endif
|
||||
else
|
||||
{
|
||||
new_color = LLColor4::grey4;
|
||||
|
|
|
|||
|
|
@ -479,7 +479,7 @@ public:
|
|||
bool isVisuallyMuted();
|
||||
bool isInMuteList() const;
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
bool isRlvSilhouette();
|
||||
bool isRlvSilhouette() const;
|
||||
// [/RLVa:KB]
|
||||
void forceUpdateVisualMuteSettings();
|
||||
|
||||
|
|
@ -495,10 +495,7 @@ public:
|
|||
void setVisualMuteSettings(VisualMuteSettings set);
|
||||
protected:
|
||||
// If you think you need to access this outside LLVOAvatar, you probably want getOverallAppearance()
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
VisualMuteSettings getVisualMuteSettings() { return (!isRlvSilhouette()) ? mVisuallyMuteSetting : AV_DO_NOT_RENDER; };
|
||||
// [/RLVa:KB]
|
||||
// VisualMuteSettings getVisualMuteSettings() { return mVisuallyMuteSetting; };
|
||||
VisualMuteSettings getVisualMuteSettings() { return mVisuallyMuteSetting; };
|
||||
|
||||
public:
|
||||
|
||||
|
|
@ -558,8 +555,8 @@ private:
|
|||
mutable bool mCachedInMuteList;
|
||||
mutable F64 mCachedMuteListUpdateTime;
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
mutable bool mCachedIsRlvSilhouette = false;
|
||||
mutable F64 mCachedRlvSilhouetteUpdateTime = 0.f;
|
||||
mutable bool mCachedIsRlvSilhouette = false;
|
||||
mutable F64 mCachedRlvSilhouetteUpdateTime = 0.f;
|
||||
// [/RLVa:KB]
|
||||
|
||||
VisualMuteSettings mVisuallyMuteSetting; // Always or never visually mute this AV
|
||||
|
|
@ -623,7 +620,10 @@ public:
|
|||
static void resetImpostors();
|
||||
static void updateImpostors();
|
||||
LLRenderTarget mImpostor;
|
||||
BOOL mNeedsImpostorUpdate;
|
||||
// [RLVa:KB] - Checked: RLVa-2.4 (@setcam_avdist)
|
||||
mutable BOOL mNeedsImpostorUpdate;
|
||||
// [/RLVa:KB]
|
||||
// BOOL mNeedsImpostorUpdate;
|
||||
S32 mLastImpostorUpdateReason;
|
||||
F32SecondsImplicit mLastImpostorUpdateFrameTime;
|
||||
const LLVector3* getLastAnimExtents() const { return mLastAnimExtents; }
|
||||
|
|
|
|||
|
|
@ -823,19 +823,24 @@ void LLPipeline::resizeScreenTexture()
|
|||
GLuint resY = gViewerWindow->getWorldViewHeightRaw();
|
||||
|
||||
// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
|
||||
GLuint scaledResX = resX;
|
||||
GLuint scaledResY = resY;
|
||||
if ( (RenderResolutionDivisor > 1) && (RenderResolutionDivisor < resX) && (RenderResolutionDivisor < resY) )
|
||||
{
|
||||
resX /= RenderResolutionDivisor;
|
||||
resY /= RenderResolutionDivisor;
|
||||
scaledResX /= RenderResolutionDivisor;
|
||||
scaledResY /= RenderResolutionDivisor;
|
||||
}
|
||||
else if (RenderResolutionMultiplier > 0.f && RenderResolutionMultiplier < 1.f)
|
||||
{
|
||||
resX *= RenderResolutionMultiplier;
|
||||
resY *= RenderResolutionMultiplier;
|
||||
scaledResX *= RenderResolutionMultiplier;
|
||||
scaledResY *= RenderResolutionMultiplier;
|
||||
}
|
||||
// [/SL:KB]
|
||||
|
||||
if (gResizeScreenTexture || (resX != mScreen.getWidth()) || (resY != mScreen.getHeight()))
|
||||
// if (gResizeScreenTexture || (resX != mScreen.getWidth()) || (resY != mScreen.getHeight()))
|
||||
// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
|
||||
if (gResizeScreenTexture || (scaledResX != mScreen.getWidth()) || (scaledResY != mScreen.getHeight()))
|
||||
// [/SL:KB]
|
||||
{
|
||||
releaseScreenBuffers();
|
||||
releaseShadowTargets();
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ const S32 RLV_VERSION_BUILD_COMPAT = 0;
|
|||
// Implementation version
|
||||
const S32 RLVa_VERSION_MAJOR = 2;
|
||||
const S32 RLVa_VERSION_MINOR = 4;
|
||||
const S32 RLVa_VERSION_PATCH = 1;
|
||||
const S32 RLVa_VERSION_PATCH = 2;
|
||||
const S32 RLVa_IMPL_ID = 13;
|
||||
|
||||
// Uncomment before a final release
|
||||
|
|
|
|||
|
|
@ -2451,6 +2451,7 @@ void RlvBehaviourToggleHandler<RLV_BHVR_SETCAM>::onCommandToggle(ERlvBehaviour e
|
|||
RlvBehaviourToggleHandler<RLV_BHVR_SETCAM_UNLOCK>::onCommandToggle(RLV_BHVR_SETCAM_UNLOCK, !fHasCamUnlock);
|
||||
|
||||
gRlvHandler.setCameraOverride(fHasBhvr);
|
||||
RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_SETCAM_AVDIST)->setPrimaryObject(idRlvObject);
|
||||
RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_SETCAM_AVDISTMIN)->setPrimaryObject(idRlvObject);
|
||||
RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_SETCAM_AVDISTMAX)->setPrimaryObject(idRlvObject);
|
||||
RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_SETCAM_ORIGINDISTMIN)->setPrimaryObject(idRlvObject);
|
||||
|
|
|
|||
|
|
@ -708,6 +708,10 @@ bool RlvBehaviourModifier::convertOptionValue(const std::string& optionValue, co
|
|||
{
|
||||
return false;
|
||||
}
|
||||
catch (const std::out_of_range&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
|
@ -815,6 +819,10 @@ bool RlvCommandOptionHelper::parseOption<int>(const std::string& strOption, int&
|
|||
{
|
||||
return false;
|
||||
}
|
||||
catch (const std::out_of_range&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -835,6 +843,10 @@ bool RlvCommandOptionHelper::parseOption<bool>(const std::string& strOption, boo
|
|||
ss >> std::boolalpha >> fOption;
|
||||
return !ss.fail();
|
||||
}
|
||||
catch (const std::out_of_range&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
|
|
@ -848,6 +860,10 @@ bool RlvCommandOptionHelper::parseOption<float>(const std::string& strOption, fl
|
|||
{
|
||||
return false;
|
||||
}
|
||||
catch (const std::out_of_range&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -244,6 +244,11 @@ with the same filename but different name
|
|||
<texture name="ForwardArrow_Off" file_name="icons/ForwardArrow_Off.png" preload="false" />
|
||||
<texture name="ForwardArrow_Press" file_name="icons/ForwardArrow_Press.png" preload="false" />
|
||||
|
||||
<!-- FS:Zi: FIRE-29572 - Add icon to currently playing animation in the FS AO -->
|
||||
<texture name="FSAO_Animation_Playing" file_name="icn_play.tga" preload="false" />
|
||||
<texture name="FSAO_Animation_Stopped" file_name="icons/Inv_Animation.png" preload="false" />
|
||||
<!-- /FS:Zi: FIRE-29572 -->
|
||||
|
||||
<texture name="Generic_Experience" file_name="Blank.png" preload="false" />
|
||||
<texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" />
|
||||
<texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" />
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
button_alignment="left"
|
||||
button_display_mode="icons_only"
|
||||
button_layout_style="fill">
|
||||
<command name="howto"/>
|
||||
<command name="chat"/>
|
||||
<command name="speak"/>
|
||||
<command name="voice"/>
|
||||
|
|
|
|||
|
|
@ -263,7 +263,7 @@
|
|||
<menu_item_call label="Firestorm Support-Gruppe beitreten" name="firestorm_support_group"/>
|
||||
<menu_item_call label="Stundenplan Firestorm-Klassen" name="Firestorm Classes Schedule"/>
|
||||
<menu_item_call label="Firestorm-Eventkalender" name="Firestorm Events Calendar"/>
|
||||
<menu_item_call label="Anweisungen..." name="How To"/>
|
||||
<menu_item_check label="Anweisungen..." name="How To"/>
|
||||
<menu_item_call label="[CURRENT_GRID]-Hilfe" name="current_grid_help"/>
|
||||
<menu_item_call label="Über [CURRENT_GRID]" name="current_grid_about"/>
|
||||
<menu_item_call label="Grid-Status prüfen" name="Grid Status"/>
|
||||
|
|
@ -386,6 +386,7 @@
|
|||
<menu_item_check label="Immer rennen" name="Always Run"/>
|
||||
<menu_item_check label="Fliegen" name="Fly"/>
|
||||
<menu_item_call label="Fenster schließen" name="Close Window"/>
|
||||
<menu_item_call label="Fenstergruppe schließen" name="Close Window Group"/>
|
||||
<menu_item_call label="Alle Fenster schließen" name="Close All Windows"/>
|
||||
<menu_item_call label="Foto auf Datenträger" name="Snapshot to Disk"/>
|
||||
<menu_item_call label="Mouselook" name="Mouselook"/>
|
||||
|
|
|
|||
|
|
@ -1250,6 +1250,7 @@ Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
|
|||
Name für neue Liste:
|
||||
<form name="form">
|
||||
<button name="SetName" text="OK"/>
|
||||
<button name="Cancel" text="Abbrechen"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification label="Automatische Ersetzungsliste umbenennen" name="RenameAutoReplaceList">
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
<check_box label="Warten auf Vor-Sprung- und Lande-Animationen deaktivieren" name="FSIgnoreFinishAnimation"/>
|
||||
<check_box label="Avataren des Rückwärtsgehen in der lokalen Ansicht erlauben (SL-Standard)" name="FSDisableTurningAroundWhenWalkingBackwards" tool_tip="Falls aktiviert, gehen Avatare auf dem eigenen Bildschirm beim Rückwärtsgehen rückwärts, anstatt sich umzudrehen und anschließend vorwärts zu gehen. Diese Option hat nur lokalen Effekt und hat keinen Einfluss auf was andere sehen. Dies ist die Standardeinstellung im Second Life Viewer und kann u.U. durch den AO des Avatars übersteuert werden."/>
|
||||
<check_box label="Avatar zum ausgewählten Objekt drehen" name="FSTurnAvatarToSelectedObject" tool_tip="Dreht den Avatar mit dem Gesicht zum aktuell ausgewählten Objekt."/>
|
||||
<slider label_width="180" label="Avatar-Rotationsgeschwindigkeit" name="av_turn_spd" tool_tip="Veränderte die Rate, mit der der Avatar sich dreht. 0 - 100 als geschätzte Prozent der maximalen Rotationsrate. Hohe Werte führen zu zackigen und ruckartigen Bewegungen." width="305" />
|
||||
<slider label_width="180" label="Avatar-Rotationsgeschwindigkeit:" name="av_turn_spd" tool_tip="Veränderte die Rate, mit der der Avatar sich dreht. 0 - 100 als geschätzte Prozent der maximalen Rotationsrate (Standard: 0). Hohe Werte führen zu zackigen und ruckartigen Bewegungen." width="305" />
|
||||
<text name="Region_Crossing_Movement_Label" width="245">
|
||||
Bewegungsvorhersage beim Regionswechsel:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -593,9 +593,6 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
|
|||
<string name="TooltipPrimEquivalentLoading">
|
||||
, bestimme Auswirkung auf Land...
|
||||
</string>
|
||||
<string name="TooltipPrimEquivalentUnavailable">
|
||||
, Auswirkung auf Land nicht verfügbar
|
||||
</string>
|
||||
<string name="TooltipDistance">
|
||||
Entfernung: [DISTANCE] m
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -345,6 +345,7 @@
|
|||
width="25">
|
||||
<button
|
||||
name="skip_back_btn"
|
||||
enabled="false"
|
||||
follows="top"
|
||||
image_overlay="SkipBackward_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
|
|
@ -376,6 +377,7 @@
|
|||
width="25">
|
||||
<button
|
||||
name="play_btn"
|
||||
enabled="false"
|
||||
follows="top"
|
||||
image_overlay="Play_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
|
|
@ -437,6 +439,7 @@
|
|||
width="25">
|
||||
<button
|
||||
name="skip_forward_btn"
|
||||
enabled="false"
|
||||
follows="top"
|
||||
image_overlay="SkipForward_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
|
|
|
|||
|
|
@ -140,6 +140,17 @@
|
|||
name="snapshot"
|
||||
top_pad="4"
|
||||
width="280"/>
|
||||
<texture_picker
|
||||
enabled="false"
|
||||
fallback_image="default_land_picture.j2c"
|
||||
follows="left|top|right"
|
||||
height="210"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="snapshot_parcel"
|
||||
top_delta="0"
|
||||
visible="false"
|
||||
width="280"/>
|
||||
<text_editor
|
||||
left="20"
|
||||
top_pad="2"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
legacy_header_height="18"
|
||||
can_resize="false"
|
||||
can_minimize="false"
|
||||
can_close="false"
|
||||
can_close="true"
|
||||
height="525"
|
||||
layout="topleft"
|
||||
name="floater_how_to"
|
||||
|
|
|
|||
|
|
@ -2407,13 +2407,16 @@
|
|||
parameter="WebLaunchExternalTarget,https://teamup.com/ksxdajnbw9mvw7cbwz" />
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_call
|
||||
<menu_item_check
|
||||
label="Guidebook"
|
||||
name="How To">
|
||||
<menu_item_call.on_click
|
||||
<menu_item_check.on_click
|
||||
function="Help.ToggleHowTo"
|
||||
parameter="" />
|
||||
</menu_item_call>
|
||||
<menu_item_check.on_check
|
||||
function="Floater.Visible"
|
||||
parameter="guidebook" />
|
||||
</menu_item_check>
|
||||
|
||||
<!-- <menu_item_call
|
||||
label="Second Life Help"
|
||||
|
|
@ -3382,6 +3385,15 @@
|
|||
<menu_item_call.on_enable
|
||||
function="File.EnableCloseWindow" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Close Window Group"
|
||||
name="Close Window Group"
|
||||
shortcut="control|alt|W">
|
||||
<menu_item_call.on_click
|
||||
function="File.CloseWindowGroup" />
|
||||
<menu_item_call.on_enable
|
||||
function="File.EnableCloseWindowGroup" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Close All Windows"
|
||||
name="Close All Windows"
|
||||
|
|
|
|||
|
|
@ -87,6 +87,9 @@
|
|||
name="show_original">
|
||||
<on_click
|
||||
function="Wearable.ShowOriginal" />
|
||||
<on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="showinv"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Create New"
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@
|
|||
name="show_original">
|
||||
<on_click
|
||||
function="Wearing.ShowOriginal" />
|
||||
<on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="showinv"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Edit Outfit"
|
||||
|
|
|
|||
|
|
@ -3129,6 +3129,10 @@ Would you be my friend?
|
|||
index="0"
|
||||
name="SetName"
|
||||
text="OK"/>
|
||||
<button
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
|
|
|
|||
|
|
@ -546,15 +546,15 @@
|
|||
increment="0.5"
|
||||
initial_value="0.00"
|
||||
layout="topleft"
|
||||
label_width="150"
|
||||
label="Avatar Rotation Turn Speed"
|
||||
label_width="170"
|
||||
label="Avatar Rotation Turn Speed:"
|
||||
top_pad="2"
|
||||
max_val="100.0"
|
||||
min_val="0.0"
|
||||
name="av_turn_spd"
|
||||
tool_tip="Alters the rate at which your avatar responds to turning. 0-100 as estimated percentage of max turn rate. High values will be snappy/jerky"
|
||||
tool_tip="Alters the rate at which your avatar responds to turning. 0-100 as estimated percentage of max turn rate. 0 is default. High values will be snappy/jerky"
|
||||
show_text="true"
|
||||
width="275" />
|
||||
width="320" />
|
||||
<text
|
||||
follows="left|top"
|
||||
type="string"
|
||||
|
|
|
|||
|
|
@ -299,7 +299,6 @@ Please try logging in again in a minute.</string>
|
|||
<string name="TooltipPrimCount">Prims: [COUNT]</string>
|
||||
<string name="TooltipPrimEquivalent">, Land Impact: [PEWEIGHT]</string>
|
||||
<string name="TooltipPrimEquivalentLoading">, loading Land Impact...</string>
|
||||
<string name="TooltipPrimEquivalentUnavailable">, Land Impact unavailable</string>
|
||||
<string name="TooltipDistance">Distance: [DISTANCE] m</string>
|
||||
<string name="TooltipPosition">Position: [POSITION]</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@
|
|||
<menu_item_call label="Firestorm Wiki" name="Firestorm Wiki"/>
|
||||
<menu_item_call label="Solución de problemas" name="Troubleshooting"/>
|
||||
<menu_item_call label="Unirse al Grupo de Soporte de Firestorm" name="firestorm_support_group"/>
|
||||
<menu_item_call label="Cómo..." name="How To"/>
|
||||
<menu_item_check label="Cómo..." name="How To"/>
|
||||
<menu_item_call label="Ayuda de [CURRENT_GRID]" name="current_grid_help"/>
|
||||
<menu_item_call label="Acerca de [CURRENT_GRID]" name="current_grid_about"/>
|
||||
<menu_item_call label="Tutorial" name="Tutorial"/>
|
||||
|
|
|
|||
|
|
@ -507,7 +507,6 @@ Intenta iniciar sesión de nuevo en unos instantes.
|
|||
<string name="TooltipPrimCount">Primitivas: [COUNT]</string>
|
||||
<string name="TooltipPrimEquivalent">, Impacto en el Terreno: [PEWEIGHT]</string>
|
||||
<string name="TooltipPrimEquivalentLoading">, cargando Impacto en el Terreno...</string>
|
||||
<string name="TooltipPrimEquivalentUnavailable">, Impacto en el terreno no disponible</string>
|
||||
<string name="TooltipDistance">Distancia: [DISTANCE] m</string>
|
||||
<string name="TooltipPosition">Posición: [POSITION]</string>
|
||||
<string name="TooltipOutboxNoTransfer">
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@
|
|||
<menu_item_call label="Rejoindre un groupe d'aide Firestorm" name="firestorm_support_group"/>
|
||||
<menu_item_call label="Horaires des classes Firestorm" name="Firestorm Classes Schedule"/>
|
||||
<menu_item_call label="Calendrier des évènements Firestorm" name="Firestorm Events Calendar"/>
|
||||
<menu_item_call label="Guide" name="How To"/>
|
||||
<menu_item_check label="Guide" name="How To"/>
|
||||
<menu_item_call label="Aide [CURRENT_GRID]" name="current_grid_help"/>
|
||||
<menu_item_call label="À propos de [CURRENT_GRID]" name="current_grid_about"/>
|
||||
<menu_item_check label="Consulter l'état de la grille" name="Grid Status"/>
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@
|
|||
<menu_item_call label="Iscriviti a Firestorm Support Group" name="firestorm_support_group"/>
|
||||
<menu_item_call label="Calendario lezioni su Firestorm" name="Firestorm Classes Schedule"/>
|
||||
<menu_item_call label="Calendario eventi Firestorm" name="Firestorm Events Calendar"/>
|
||||
<menu_item_call label="Guida" name="How To"/>
|
||||
<menu_item_check label="Guida" name="How To"/>
|
||||
<menu_item_call label="Aiuto su [CURRENT_GRID]" name="current_grid_help"/>
|
||||
<menu_item_call label="A proposito di [CURRENT_GRID]" name="current_grid_about"/>
|
||||
<menu_item_check label="Controlla stato grid" name="Grid Status"/>
|
||||
|
|
|
|||
|
|
@ -573,9 +573,6 @@ Provare ad accedere nuovamente tra un minuto.
|
|||
<string name="TooltipPrimEquivalentLoading">
|
||||
, carico impatto...
|
||||
</string>
|
||||
<string name="TooltipPrimEquivalentUnavailable">
|
||||
, impatto non disp.
|
||||
</string>
|
||||
<string name="TooltipDistance">
|
||||
Distanza: [DISTANCE] m
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@
|
|||
<menu_item_call label="Firestormサポートグループに参加" name="firestorm_support_group"/>
|
||||
<menu_item_call label="Firestorm 勉強会スケジュール" name="Firestorm Classes Schedule" />
|
||||
<menu_item_call label="Firestorm イベントカレンダー" name="Firestorm Events Calendar" />
|
||||
<menu_item_call label="ハウツー..." name="How To" />
|
||||
<menu_item_check label="ハウツー..." name="How To" />
|
||||
<menu_item_call label="[CURRENT_GRID] ヘルプ" name="current_grid_help"/>
|
||||
<menu_item_call label="[CURRENT_GRID] について" name="current_grid_about"/>
|
||||
<menu_item_call label="Grid status をチェック" name="Grid Status"/>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
Limit FPS: [FPSCAP] fps
|
||||
</floater.string>
|
||||
<floater.string name="tuning_fps">
|
||||
Strojenie do [FPSTARGET] fps
|
||||
Cel: [FPSTARGET] fps
|
||||
</floater.string>
|
||||
<floater.string name="focus_fps">
|
||||
W tle
|
||||
|
|
|
|||
|
|
@ -111,6 +111,7 @@
|
|||
<menu_item_call label="Aktywuj" name="Activate"/>
|
||||
<menu_item_call label="Deaktywuj" name="Deactivate"/>
|
||||
<menu_item_call label="Zapisz jako" name="Save As"/>
|
||||
<menu_item_call label="Zapisz do" name="Save Selected As" />
|
||||
<menu_item_call label="Załóż" name="Wearable And Object Wear"/>
|
||||
<menu_item_call label="Dodaj/dołącz" name="Wearable Add"/>
|
||||
<menu label="Dołącz do" name="Attach To"/>
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@
|
|||
<menu_item_call label="Dołącz do Grupy Wsparcia Firestorma" name="firestorm_support_group"/>
|
||||
<menu_item_call label="Harmonogram lekcji Firestorma" name="Firestorm Classes Schedule"/>
|
||||
<menu_item_call label="Kalendarz wydarzeń Firestorma" name="Firestorm Events Calendar"/>
|
||||
<menu_item_call label="Samouczek" name="How To"/>
|
||||
<menu_item_check label="Samouczek" name="How To"/>
|
||||
<!-- <menu_item_call label="Pomoc Second Life" name="Second Life Help"/> -->
|
||||
<menu_item_call label="Pomoc: [CURRENT_GRID]" name="current_grid_help"/>
|
||||
<menu_item_call label="Na temat [CURRENT_GRID]" name="current_grid_about"/>
|
||||
|
|
@ -378,6 +378,7 @@
|
|||
<menu_item_check label="Zawsze biegaj" name="Always Run"/>
|
||||
<menu_item_check label="Lataj" name="Fly"/>
|
||||
<menu_item_call label="Zamknij okno" name="Close Window"/>
|
||||
<menu_item_call label="Zamknij grupę okien" name="Close Window Group" />
|
||||
<menu_item_call label="Zamknij wszystkie okna" name="Close All Windows"/>
|
||||
<menu_item_call label="Zapisz zdjęcie na dysk twardy" name="Snapshot to Disk"/>
|
||||
<menu_item_call label="Widok pierwszoosobowy" name="Mouselook"/>
|
||||
|
|
|
|||
|
|
@ -1156,6 +1156,9 @@ Zaproponować znajomość [NAME]?
|
|||
</notification>
|
||||
<notification label="Nowa lista autokorekty" name="AddAutoReplaceList">
|
||||
Nazwa nowej listy:
|
||||
<form name="form">
|
||||
<button name="Cancel" text="Anuluj" />
|
||||
</form>
|
||||
</notification>
|
||||
<notification label="Zmiana nazwy listy autokorekty" name="RenameAutoReplaceList">
|
||||
Nazwa '[DUPNAME]' jest w użyciu
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
<check_box label="Wyłącz oczekiwanie na animacje przed-skoku oraz lądowania (szybki skok)" name="FSIgnoreFinishAnimation"/>
|
||||
<check_box label="Awatary mogą chodzić do tyłu na Twoim ekranie (efekt jest wyłącznie lokalny)" name="FSDisableTurningAroundWhenWalkingBackwards" tool_tip="Gdy zaznaczysz tą opcję, to zezwolisz awatarom poruszającym się w tył na bycie widzianymi tak, jak gdyby się cofały - bez odwracania się. To ustawienie ma wpływ tylko na to, co pokazuje Twoja przeglądarka, a nie to, co awatar faktycznie robi. Takie ustawienie jest domyślnym dla standardowej przeglądarki Second Life. Jeśli awatar posiada AO zmuszające go do obracania się, to zachowanie to może zostać nadpisane."/>
|
||||
<check_box label="Obróć awatara w kierunku zaznaczonego obiektu" name="FSTurnAvatarToSelectedObject" tool_tip="Obracaj awatara w taki sposób, aby twarz była skierowana w stronę zaznaczonego w danej chwili obiektu."/>
|
||||
<slider label="Prędkość obrotu awatara" name="av_turn_spd" tool_tip="Zmienia szybkość, z jaką Twój awatar reaguje na obracanie się. 0-100 to szacunkowy procent maksymalnej szybkości obrotu. Wysokie wartości będą powodować szarpanie." />
|
||||
<slider label="Prędkość obrotu awatara:" name="av_turn_spd" tool_tip="Zmienia szybkość, z jaką Twój awatar reaguje na obracanie się. 0-100 to szacunkowy procent maksymalnej szybkości obrotu. Domyślnie: 0. Wysokie wartości będą powodować szarpanie." />
|
||||
<text name="Region_Crossing_Movement_Label">
|
||||
Przewiduj ruch przy zmianie regionu:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -544,9 +544,6 @@ Spróbuj zalogować się ponownie za minutę.
|
|||
<string name="TooltipPrimEquivalentLoading">
|
||||
, sprawdzanie wpływu na działkę...
|
||||
</string>
|
||||
<string name="TooltipPrimEquivalentUnavailable">
|
||||
, wpływ na działkę niedostępny
|
||||
</string>
|
||||
<string name="TooltipDistance">
|
||||
Odległość: [DISTANCE] m
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
FPS ограничен [FPSCAP] к/с
|
||||
</floater.string>
|
||||
<floater.string name="tuning_fps">
|
||||
Цель автонастр.[FPSTARGET] к/с
|
||||
Цель [FPSTARGET] к/с
|
||||
</floater.string>
|
||||
<floater.string name="focus_fps">
|
||||
Фоновый режим
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@
|
|||
<menu_item_call label="Активировать" name="Activate"/>
|
||||
<menu_item_call label="Деактивировать" name="Deactivate"/>
|
||||
<menu_item_call label="Сохранить как" name="Save As"/>
|
||||
<menu_item_call label="Сохранить в" name="Save Selected As"/>
|
||||
<menu_item_call label="Надеть" name="Wearable And Object Wear"/>
|
||||
<menu_item_call label="Найти в общем виде" name="Show in Main Panel"/>
|
||||
<menu_item_call label="Добавить" name="Wearable Add"/>
|
||||
|
|
|
|||
|
|
@ -308,7 +308,7 @@
|
|||
<menu_item_call label="Вступить в группу поддержки Firestorm" name="firestorm_support_group"/>
|
||||
<menu_item_call label="Расписание обучений Firestorm" name="Firestorm Classes Schedule"/>
|
||||
<menu_item_call label="Календарь Событий Firestorm" name="Firestorm Events Calendar"/>
|
||||
<menu_item_call label="Обучение" name="How To"/>
|
||||
<menu_item_check label="Обучение" name="How To"/>
|
||||
<!-- <menu_item_call label="Second Life Help" name="Second Life Help"/> -->
|
||||
<menu_item_call label="[CURRENT_GRID] помощь" name="current_grid_help"/>
|
||||
<menu_item_call label="О [CURRENT_GRID]" name="current_grid_about"/>
|
||||
|
|
@ -419,6 +419,7 @@
|
|||
<menu_item_check label="Всегда бежать" name="Always Run"/>
|
||||
<menu_item_check label="Лететь" name="Fly"/>
|
||||
<menu_item_call label="Закрыть окно" name="Close Window"/>
|
||||
<menu_item_call label="Закрыть группу окон" name="Close Window Group"/>
|
||||
<menu_item_call label="Закрыть все окна" name="Close All Windows"/>
|
||||
<menu_item_call label="Снимок на диск" name="Snapshot to Disk"/>
|
||||
<menu_item_call label="Вид от первого лица" name="Mouselook"/>
|
||||
|
|
|
|||
|
|
@ -1187,6 +1187,7 @@
|
|||
Имя нового списка:
|
||||
<form name="form">
|
||||
<button name="SetName" text="OK"/>
|
||||
<button name="Cancel" text="Отмена"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification label="Переименовать список автозамены" name="RenameAutoReplaceList">
|
||||
|
|
|
|||
|
|
@ -177,8 +177,8 @@
|
|||
</text>
|
||||
<spinner tool_tip="0.25-1.0, 0.25 для сильного затухания, 1 для отключения затухания" name="FSIMChatHistoryFade"/>
|
||||
<check_box name="FSShowMessageCountInWindowTitle" label="Показать кол-во непрочитанных ЛС в заголовке окна Firestorm"/>
|
||||
<check_box name="FSAnnounceIncomingIM" label="Сообщить мне о новых IM, как только отправитель начинает писать"/>
|
||||
<check_box name="FSIMChatFlashOnFriendStatusChange" label="Мигание вкладок IM, когда ваши друзья 'в сети' или 'не в сети'"/>
|
||||
<check_box name="FSAnnounceIncomingIM" label="Сообщить мне о новых ЛС, как только отправитель начинает писать"/>
|
||||
<check_box name="FSIMChatFlashOnFriendStatusChange" label="Мигание вкладок ЛС, когда ваши друзья 'в сети' или 'не в сети'"/>
|
||||
<check_box name="FSNotifyNearbyChatFlash" label="Мигание вкладки общего чата при поступлении сообщений" tool_tip="Мерцание вкладки общего чата при поступлении новых сообщений. Необходимо, чтоб вкладка общего чата была прикреплена к общему окну разговоров"/>
|
||||
<check_box name="FSNotifyIMFlash" label="Мигание вкладки ЛС при поступлении новых сообщений" tool_tip="Мигание вкладки ЛС при поступлении новых сообщений. Необходимо, чтоб вкладка ЛС была прикреплена к общему окну разговоров"/>
|
||||
<check_box name="FSReportMutedGroupChat" label="Сообщить отключеный групповой чат в общий чат"/>
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
<check_box label="Отключить анимацию подготовки прыжка" name="FSIgnoreFinishAnimation"/>
|
||||
<check_box label="Отключить поворот аватара лицом к камере при движении назад" name="FSDisableTurningAroundWhenWalkingBackwards" tool_tip="Отключить поворот аватара лицом к камере при движении назад"/>
|
||||
<check_box label="Повернуть аватара лицом к объекту, который выбран" name="FSTurnAvatarToSelectedObject" tool_tip="Поворачивает ваш аватар лицом к объекту, который вы в данный момент выбираете."/>
|
||||
<slider label="Скорость поворота аватара" label_width="165" name="av_turn_spd" tool_tip="Изменяет скорость реакции вашего аватара на поворот. 0-100 как расчетный процент от максимальной скорости поворота. С высоким значением будет быстрыми/резкими" width="290"/>
|
||||
<slider label="Скорость поворота аватара:" name="av_turn_spd" tool_tip="Изменяет скорость реакции вашего аватара на поворот. 0-100 в процентах от максимальной скорости поворота. 0 по умолчанию. С высоким значением будет быстрыми/резкими"/>
|
||||
<text name="Region_Crossing_Movement_Label" width="275">
|
||||
Прогнозирование движения между регионами:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
Инициализация графики не удалась. Пожалуйста, обновите драйвер видеокарты!
|
||||
</string>
|
||||
<string name="AboutHeader">
|
||||
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL] [ADDRESS_SIZE]бит / [SIMD])
|
||||
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([ADDRESS_SIZE]бит / [SIMD]) ([CHANNEL]) [BUILD_TYPE]
|
||||
[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
|
||||
</string>
|
||||
<string name="AboutCompiler">
|
||||
|
|
@ -581,9 +581,6 @@ support@secondlife.com.
|
|||
<string name="TooltipPrimEquivalentЗагрузка">
|
||||
, Загрузка влияния на землю...
|
||||
</string>
|
||||
<string name="TooltipPrimEquivalentUnavailable">
|
||||
, влияние на землю недоступно
|
||||
</string>
|
||||
<string name="TooltipDistance">
|
||||
Расстояние: [DISTANCE] м
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@
|
|||
<menu_item_call label="Yinele" name="Redo"/>
|
||||
</menu>
|
||||
<menu label="Yardım" name="Help">
|
||||
<menu_item_call label="Nasıl yapılır..." name="How To"/>
|
||||
<menu_item_check label="Nasıl yapılır..." name="How To"/>
|
||||
<menu_item_call label="Hızlı Başlangıç" name="Quickstart"/>
|
||||
<menu_item_call label="Bilgi Bankası" name="Knowledge Base"/>
|
||||
<menu_item_call label="Wiki" name="Wiki"/>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
button_alignment="center"
|
||||
button_display_mode="text_only"
|
||||
button_layout_style="fill">
|
||||
<command
|
||||
name="howto"/>
|
||||
<command
|
||||
name="chat" />
|
||||
<command
|
||||
|
|
|
|||
|
|
@ -174,6 +174,18 @@
|
|||
layout="topleft"
|
||||
fallback_image="Generic_Person_Large"
|
||||
/>
|
||||
<texture_picker
|
||||
name="snapshot_parcel"
|
||||
enabled="false"
|
||||
visible="false"
|
||||
top_delta="0"
|
||||
left_delta="0"
|
||||
height="210"
|
||||
width="280"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
fallback_image="default_land_picture.j2c"
|
||||
/>
|
||||
<text_editor
|
||||
name="aux1"
|
||||
value="Auxilary info field 1"
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
button_alignment="left"
|
||||
button_display_mode="icons_only"
|
||||
button_layout_style="fill">
|
||||
<command
|
||||
name="howto"/>
|
||||
<command
|
||||
name="chat" />
|
||||
<command
|
||||
|
|
|
|||
|
|
@ -281,6 +281,11 @@
|
|||
scale.right="144"
|
||||
scale.bottom="3" />
|
||||
|
||||
<!-- FS:Zi: FIRE-29572 - Add icon to currently playing animation in the FS AO -->
|
||||
<texture name="FSAO_Animation_Playing" file_name="widgets/ScrollArrow_Right.png" preload="false" />
|
||||
<texture name="FSAO_Animation_Stopped" file_name="legacy/inv_item_animation.tga" preload="false" />
|
||||
<!-- END FS:Zi: FIRE-29572 -->
|
||||
|
||||
<!-- Direct delivery icon for Received Items folder -->
|
||||
<texture name="Inv_InboxOpen" file_name="legacy/inv_folder_plain_open.tga" />
|
||||
<texture name="Inv_InboxClosed" file_name="legacy/inv_folder_plain_closed.tga" />
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
button_alignment="center"
|
||||
button_display_mode="text_only"
|
||||
button_layout_style="fill">
|
||||
<command
|
||||
name="howto"/>
|
||||
<command
|
||||
name="chat" />
|
||||
<command
|
||||
|
|
|
|||
Loading…
Reference in New Issue