Ansariel 2021-12-15 19:31:19 +01:00
commit ee554834b8
83 changed files with 779 additions and 299 deletions

View File

@ -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>

View File

@ -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);
}

View File

@ -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;
};

View File

@ -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;

View File

@ -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());

View File

@ -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

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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>

View File

@ -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);
}

View File

@ -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;

View File

@ -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());

View File

@ -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)

View File

@ -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:

View File

@ -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"))

View File

@ -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

View File

@ -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"];

View File

@ -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();
}
}
}

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View File

@ -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)
{

View File

@ -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();

View File

@ -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
{

View File

@ -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;

View File

@ -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;
}

View File

@ -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());

View File

@ -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);
}

View File

@ -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"));
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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.
}

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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; }

View File

@ -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();

View File

@ -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

View File

@ -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);

View File

@ -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;
}

View File

@ -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" />

View File

@ -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"/>

View File

@ -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"/>

View File

@ -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">

View File

@ -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>

View File

@ -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>

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -3129,6 +3129,10 @@ Would you be my friend?
index="0"
name="SetName"
text="OK"/>
<button
index="1"
name="Cancel"
text="Cancel"/>
</form>
</notification>

View File

@ -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"

View File

@ -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>

View File

@ -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"/>

View File

@ -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">

View File

@ -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"/>

View File

@ -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"/>

View File

@ -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>

View File

@ -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"/>

View File

@ -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

View File

@ -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"/>

View File

@ -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"/>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -7,7 +7,7 @@
FPS ограничен [FPSCAP] к/с
</floater.string>
<floater.string name="tuning_fps">
Цель автонастр.[FPSTARGET] к/с
Цель [FPSTARGET] к/с
</floater.string>
<floater.string name="focus_fps">
Фоновый режим

View File

@ -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"/>

View File

@ -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"/>

View File

@ -1187,6 +1187,7 @@
Имя нового списка:
<form name="form">
<button name="SetName" text="OK"/>
<button name="Cancel" text="Отмена"/>
</form>
</notification>
<notification label="Переименовать список автозамены" name="RenameAutoReplaceList">

View File

@ -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="Сообщить отключеный групповой чат в общий чат"/>

View File

@ -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>

View File

@ -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>

View File

@ -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"/>

View File

@ -8,6 +8,8 @@
button_alignment="center"
button_display_mode="text_only"
button_layout_style="fill">
<command
name="howto"/>
<command
name="chat" />
<command

View File

@ -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"

View File

@ -8,6 +8,8 @@
button_alignment="left"
button_display_mode="icons_only"
button_layout_style="fill">
<command
name="howto"/>
<command
name="chat" />
<command

View File

@ -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" />

View File

@ -8,6 +8,8 @@
button_alignment="center"
button_display_mode="text_only"
button_layout_style="fill">
<command
name="howto"/>
<command
name="chat" />
<command