Merge Firestorm LGPL

meow-7.2.2
Ansariel 2019-10-29 18:08:37 +01:00
commit 39ec459b5f
23 changed files with 387 additions and 119 deletions

View File

@ -407,7 +407,7 @@ void allowDirectMarkedTextInput(bool allow, GLViewRef glView)
NSWindowRef getMainAppWindow()
{
LLNSWindow *winRef = [(LLAppDelegate*)[[LLNSApplication sharedApplication] delegate] window];
LLNSWindow *winRef = [(LLAppDelegate*)[[NSApplication sharedApplication] delegate] window];
[winRef setAcceptsMouseMovedEvents:TRUE];
return winRef;
@ -420,7 +420,7 @@ void makeFirstResponder(NSWindowRef window, GLViewRef view)
void requestUserAttention()
{
[[LLNSApplication sharedApplication] requestUserAttention:NSInformationalRequest];
[[NSApplication sharedApplication] requestUserAttention:NSInformationalRequest];
}
long showAlert(std::string text, std::string title, int type)
@ -470,7 +470,7 @@ long showAlert(std::string text, std::string title, int type)
/*
GLViewRef getGLView()
{
return [(LLAppDelegate*)[[LLNSApplication sharedApplication] delegate] glview];
return [(LLAppDelegate*)[[NSApplication sharedApplication] delegate] glview];
}
*/

View File

@ -85,7 +85,7 @@ void FloaterAO::updateSetParameters()
mOverrideSitsCheckBoxSmall->setValue(mSelectedSet->getSitOverride());
mSmartCheckBox->setValue(mSelectedSet->getSmart());
mDisableMouselookCheckBox->setValue(mSelectedSet->getMouselookDisable());
BOOL isDefault = (mSelectedSet == AOEngine::instance().getDefaultSet()) ? TRUE : FALSE;
BOOL isDefault = (mSelectedSet == AOEngine::instance().getDefaultSet());
mDefaultCheckBox->setValue(isDefault);
mDefaultCheckBox->setEnabled(!isDefault);
updateSmart();
@ -221,6 +221,7 @@ BOOL FloaterAO::postBuild()
mOverrideSitsCheckBoxSmall = mSmallInterfacePanel->getChild<LLCheckBoxCtrl>("ao_sit_override_small");
mSetSelector->setCommitCallback(boost::bind(&FloaterAO::onSelectSet, this));
mSetSelector->setFocusLostCallback(boost::bind(&FloaterAO::onSelectSet, this));
mActivateSetButton->setCommitCallback(boost::bind(&FloaterAO::onClickActivate, this));
mAddButton->setCommitCallback(boost::bind(&FloaterAO::onClickAdd, this));
mRemoveButton->setCommitCallback(boost::bind(&FloaterAO::onClickRemove, this));
@ -281,7 +282,7 @@ void FloaterAO::enableSetControls(BOOL yes)
mSetSelectorSmall->setEnabled(yes);
mActivateSetButton->setEnabled(yes);
mRemoveButton->setEnabled(yes);
mDefaultCheckBox->setEnabled(yes);
mDefaultCheckBox->setEnabled(yes && (mSelectedSet != AOEngine::instance().getDefaultSet()));
mOverrideSitsCheckBox->setEnabled(yes);
mOverrideSitsCheckBoxSmall->setEnabled(yes);
mDisableMouselookCheckBox->setEnabled(yes);

View File

@ -189,34 +189,50 @@ void AOEngine::setLastOverriddenMotion(const LLUUID& motion)
}
}
BOOL AOEngine::foreignAnimations(const LLUUID& seat)
BOOL AOEngine::foreignAnimations()
{
// checking foreign animations only makes sense when smart sit is enabled
if (!mCurrentSet->getSmart())
{
return FALSE;
}
// get the seat the avatar is sitting on
const LLViewerObject* agentRoot = dynamic_cast<LLViewerObject*>(gAgentAvatarp->getRoot());
if (!agentRoot)
{
// this should not happen, ever
return FALSE;
}
LLUUID seat = agentRoot->getID();
if (seat == gAgentID)
{
LL_DEBUGS("AOEngine") << "Not checking for foreign animation when not sitting." << LL_ENDL;
return FALSE;
}
LL_DEBUGS("AOEngine") << "Checking for foreign animation on seat " << seat << LL_ENDL;
for (LLVOAvatar::AnimSourceIterator sourceIterator = gAgentAvatarp->mAnimationSources.begin();
sourceIterator != gAgentAvatarp->mAnimationSources.end(); ++sourceIterator)
{
LL_DEBUGS("AOEngine") << "Source " << sourceIterator->first << " runs animation " << sourceIterator->second << LL_ENDL;
// skip animations run by the avatar itself
if (sourceIterator->first != gAgentID)
{
// special case when the AO gets disabled while sitting
if (seat.isNull())
{
return TRUE;
}
// find the source object where the animation came from
LLViewerObject* source=gObjectList.findObject(sourceIterator->first);
// proceed if it's not an attachment
if(!source->isAttachment())
{
LL_DEBUGS("AOEngine") << "Source " << sourceIterator->first << " is running animation " << sourceIterator->second << LL_ENDL;
// get the source's root prim
LLViewerObject* sourceRoot=dynamic_cast<LLViewerObject*>(source->getRoot());
// if the root prim is the same as the animation source, report back as TRUE
if (sourceRoot && source->getID() == seat)
if (sourceRoot && sourceRoot->getID() == seat)
{
LL_DEBUGS("AOEngine") << "foreign animation " << sourceIterator->second << " found on seat." << LL_ENDL;
return TRUE;
@ -227,7 +243,8 @@ BOOL AOEngine::foreignAnimations(const LLUUID& seat)
return FALSE;
}
const LLUUID& AOEngine::mapSwimming(const LLUUID& motion) const
// map motion to underwater state, return nullptr if not applicable
AOSet::AOState* AOEngine::mapSwimming(const LLUUID& motion) const
{
S32 stateNum;
@ -249,29 +266,91 @@ const LLUUID& AOEngine::mapSwimming(const LLUUID& motion) const
}
else
{
return LLUUID::null;
// motion not applicable for underwater mapping
return nullptr;
}
AOSet::AOState* state = mCurrentSet->getState(stateNum);
return mCurrentSet->getAnimationForState(state);
return mCurrentSet->getState(stateNum);
}
// switch between swimming and flying on transition in and out of Linden region water
void AOEngine::checkBelowWater(BOOL yes)
{
// there was no transition, do nothing
if (mUnderWater == yes)
{
return;
}
// only restart underwater/above water motion if the overridden motion is the one currently playing
if (mLastMotion != mLastOverriddenMotion)
// only applies to motions that actually change underwater and have animations inside
AOSet::AOState* mapped = mapSwimming(mLastMotion);
if (!mapped || mapped->mAnimations.empty())
{
// set underwater status but do nothing else
mUnderWater = yes;
return;
}
gAgent.sendAnimationRequest(override(mLastOverriddenMotion, FALSE), ANIM_REQUEST_STOP);
// find animation id to stop when transitioning
LLUUID id = override(mLastMotion, FALSE);
if (id.isNull())
{
// no animation in overrider for this state, use Linden Lab motion
id = mLastMotion;
}
// stop currently running animation
gAgent.sendAnimationRequest(id, ANIM_REQUEST_STOP);
if (!mUnderWater)
{
// remember which animation we stopped while going under water, to catch the stop
// request later in the overrider - this prevents the overrider from triggering itself
// after the region comes back with the stop request for Linden Lab motion ids
mTransitionId = id;
}
// set requested underwater status for overrider
mUnderWater = yes;
gAgent.sendAnimationRequest(override(mLastOverriddenMotion, TRUE), ANIM_REQUEST_START);
// find animation id to start when transitioning
id = override(mLastMotion, TRUE);
if (id.isNull())
{
// no animation in overrider for this state, use Linden Lab motion
id = mLastMotion;
}
// start new animation
gAgent.sendAnimationRequest(id, ANIM_REQUEST_START);
}
// find the correct animation state for the requested motion, mapping flying to
// swimming where necessary
AOSet::AOState* AOEngine::getStateForMotion(const LLUUID& motion) const
{
// get default state for this motion
AOSet::AOState* defaultState = mCurrentSet->getStateByRemapID(motion);
if (!mUnderWater)
{
return defaultState;
}
// get state for underwater motion
AOSet::AOState* mapped = mapSwimming(motion);
if (!mapped)
{
// not applicable for underwater motion, so use default state
return defaultState;
}
// check if the underwater state has any animations to play
if (mapped->mAnimations.empty())
{
// no animations in underwater state, return default
return defaultState;
}
return mapped;
}
void AOEngine::enable_stands(BOOL yes)
@ -300,8 +379,8 @@ void AOEngine::enable(BOOL yes)
{
LL_DEBUGS("AOEngine") << "Enabling animation state " << state->mName << LL_ENDL;
// do not stop underlying ground sit when re-enabling the AO
if (mLastOverriddenMotion != ANIM_AGENT_SIT_GROUND_CONSTRAINED)
// do not stop underlying sit animations when re-enabling the AO
if (mLastOverriddenMotion != ANIM_AGENT_SIT_GROUND_CONSTRAINED && mLastOverriddenMotion != ANIM_AGENT_SIT)
{
gAgent.sendAnimationRequest(mLastOverriddenMotion, ANIM_REQUEST_STOP);
}
@ -357,7 +436,12 @@ void AOEngine::enable(BOOL yes)
{
mAnimationChangedSignal(LLUUID::null);
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_STOP);
if (mLastOverriddenMotion == ANIM_AGENT_SIT)
{
// remove sit cycle cover up
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_STOP);
}
// stop all overriders, catch leftovers
for (S32 index = 0; index < AOSet::AOSTATES_MAX; ++index)
{
@ -379,7 +463,8 @@ void AOEngine::enable(BOOL yes)
}
}
if (!foreignAnimations(LLUUID::null))
// restore Linden animation if applicable
if (mLastOverriddenMotion != ANIM_AGENT_SIT || !foreignAnimations())
{
gAgent.sendAnimationRequest(mLastMotion, ANIM_REQUEST_START);
}
@ -443,7 +528,9 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
motion = ANIM_AGENT_SIT_GROUND_CONSTRAINED;
}
AOSet::AOState* state = mCurrentSet->getStateByRemapID(motion);
// map the requested motion to an animation state, taking underwater
// swimming into account where applicable
AOSet::AOState* state = getStateForMotion(motion);
if (!state)
{
LL_DEBUGS("AOEngine") << "No current AO state for motion " << motion << " (" << gAnimLibrary.animationName(motion) << ")." << LL_ENDL;
@ -470,6 +557,63 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
mAnimationChangedSignal(LLUUID::null);
// clean up stray animations as an additional safety measure
// unless current motion is ANIM_AGENT_TYPE, which is a special
// case, as it plays at the same time as other motions
if (motion != ANIM_AGENT_TYPE)
{
const S32 cleanupStates[]=
{
AOSet::Standing,
AOSet::Walking,
AOSet::Running,
AOSet::Sitting,
AOSet::SittingOnGround,
AOSet::Crouching,
AOSet::CrouchWalking,
AOSet::Falling,
AOSet::FlyingDown,
AOSet::FlyingUp,
AOSet::Flying,
AOSet::FlyingSlow,
AOSet::Hovering,
AOSet::Jumping,
AOSet::TurningRight,
AOSet::TurningLeft,
AOSet::Floating,
AOSet::SwimmingForward,
AOSet::SwimmingUp,
AOSet::SwimmingDown,
AOSet::AOSTATES_MAX // end marker, guaranteed to be different from any other entry
};
S32 index = 0;
S32 stateNum;
// loop through the list of states
while ((stateNum = cleanupStates[index]) != AOSet::AOSTATES_MAX)
{
// check if the next state is the one we are currently animating and skip that
AOSet::AOState* stateToCheck = mCurrentSet->getState(stateNum);
if (stateToCheck != state)
{
// check if there is an animation left over for that state
if (!stateToCheck->mCurrentAnimationID.isNull())
{
LL_WARNS() << "cleaning up animation in state " << stateToCheck->mName << LL_ENDL;
// stop the leftover animation locally and in the region for everyone
gAgent.sendAnimationRequest(stateToCheck->mCurrentAnimationID, ANIM_REQUEST_STOP);
gAgentAvatarp->LLCharacter::stopMotion(stateToCheck->mCurrentAnimationID);
// mark the state as clean
stateToCheck->mCurrentAnimationID.setNull();
}
}
index++;
}
}
mCurrentSet->stopTimer();
if (start)
{
@ -523,12 +667,6 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
mCurrentSet->setMotion(motion);
}
mUnderWater = gAgentAvatarp->mBelowWater;
if (mUnderWater)
{
animation = mapSwimming(motion);
}
if (animation.isNull())
{
animation = mCurrentSet->getAnimationForState(state);
@ -580,6 +718,20 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
}
else
{
// check for previously remembered transition motion from/to underwater movement and don't
// allow the overrider to stop it, or it will cancel the transition to underwater motion
// immediately after starting it
if (motion == mTransitionId)
{
// clear transition motion id and return a null UUID to allow the stock Linden animation
// system to take over
mTransitionId.setNull();
return LLUUID::null;
}
// clear transition motion id here as well, to make sure there is no stray id left behind
mTransitionId.setNull();
animation = state->mCurrentAnimationID;
state->mCurrentAnimationID.setNull();
@ -629,15 +781,7 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
void AOEngine::checkSitCancel()
{
LLUUID seat;
const LLViewerObject* agentRoot = dynamic_cast<LLViewerObject*>(gAgentAvatarp->getRoot());
if (agentRoot)
{
seat = agentRoot->getID();
}
if (foreignAnimations(seat))
if (foreignAnimations())
{
AOSet::AOState* aoState = mCurrentSet->getStateByRemapID(ANIM_AGENT_SIT);
if (aoState)
@ -676,40 +820,29 @@ void AOEngine::cycleTimeout(const AOSet* set)
void AOEngine::cycle(eCycleMode cycleMode)
{
if (!mEnabled)
{
return;
}
if (!mCurrentSet)
{
LL_DEBUGS("AOEngine") << "cycle without set." << LL_ENDL;
return;
}
LLUUID motion = mCurrentSet->getMotion();
// assume stand if no motion is registered, happens after login when the avatar hasn't moved at all yet
// or if the agent has said something in local chat while sitting
if (motion.isNull())
{
if (gAgentAvatarp->isSitting())
{
motion = ANIM_AGENT_SIT;
}
else
{
motion = ANIM_AGENT_STAND;
}
}
// do not cycle if we're sitting and sit-override is off
else if (motion == ANIM_AGENT_SIT && !mCurrentSet->getSitOverride())
if (mLastMotion == ANIM_AGENT_SIT && !mCurrentSet->getSitOverride())
{
return;
}
// do not cycle if we're standing and mouselook stand override is disabled while being in mouselook
else if (motion == ANIM_AGENT_STAND && mCurrentSet->getMouselookDisable() && mInMouselook)
else if (mLastMotion == ANIM_AGENT_STAND && mCurrentSet->getMouselookDisable() && mInMouselook)
{
return;
}
AOSet::AOState* state = mCurrentSet->getStateByRemapID(motion);
AOSet::AOState* state = mCurrentSet->getStateByRemapID(mLastMotion);
if (!state)
{
LL_DEBUGS("AOEngine") << "cycle without state." << LL_ENDL;
@ -771,13 +904,13 @@ void AOEngine::cycle(eCycleMode cycleMode)
state->mCurrentAnimationID = animation;
if (animation.notNull())
{
LL_DEBUGS("AOEngine") << "requesting animation start for motion " << gAnimLibrary.animationName(motion) << ": " << animation << LL_ENDL;
LL_DEBUGS("AOEngine") << "requesting animation start for motion " << gAnimLibrary.animationName(mLastMotion) << ": " << animation << LL_ENDL;
gAgent.sendAnimationRequest(animation, ANIM_REQUEST_START);
mAnimationChangedSignal(state->mAnimations[state->mCurrentAnimation].mInventoryUUID);
}
else
{
LL_DEBUGS("AOEngine") << "overrider came back with NULL animation for motion " << gAnimLibrary.animationName(motion) << "." << LL_ENDL;
LL_DEBUGS("AOEngine") << "overrider came back with NULL animation for motion " << gAnimLibrary.animationName(mLastMotion) << "." << LL_ENDL;
}
if (oldAnimation.notNull())
@ -1617,28 +1750,36 @@ void AOEngine::setOverrideSits(AOSet* set, BOOL yes)
return;
}
if (!mEnabled)
{
return;
}
if (yes)
{
stopAllSitVariants();
gAgent.sendAnimationRequest(override(ANIM_AGENT_SIT, TRUE), ANIM_REQUEST_START);
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_START);
}
else
{
// remove sit cycle cover up
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_STOP);
AOSet::AOState* state = mCurrentSet->getState(AOSet::Sitting);
if (!state)
if (state)
{
return;
LLUUID animation = state->mCurrentAnimationID;
if (animation.notNull())
{
gAgent.sendAnimationRequest(animation, ANIM_REQUEST_STOP);
state->mCurrentAnimationID.setNull();
}
}
LLUUID animation = state->mCurrentAnimationID;
if (animation.notNull())
if (!foreignAnimations())
{
gAgent.sendAnimationRequest(animation, ANIM_REQUEST_STOP);
gAgentAvatarp->LLCharacter::stopMotion(animation);
state->mCurrentAnimationID.setNull();
gAgent.sendAnimationRequest(ANIM_AGENT_SIT, ANIM_REQUEST_START);
}
gAgent.sendAnimationRequest(ANIM_AGENT_SIT, ANIM_REQUEST_START);
}
}
@ -1647,6 +1788,11 @@ void AOEngine::setSmart(AOSet* set, BOOL yes)
set->setSmart(yes);
set->setDirty(TRUE);
if (!mEnabled)
{
return;
}
if (yes)
{
// make sure to restart the sit cancel timer to fix sit overrides when the object we are
@ -1669,6 +1815,11 @@ void AOEngine::setDisableStands(AOSet* set, BOOL yes)
return;
}
if (!mEnabled)
{
return;
}
// make sure an update happens if needed
mInMouselook = !gAgentCamera.cameraMouselook();
inMouselook(!mInMouselook);
@ -2060,7 +2211,7 @@ void AOEngine::onRegionChange()
}
// sitting needs special attention
if (mCurrentSet->getMotion() == ANIM_AGENT_SIT)
if (mLastMotion == ANIM_AGENT_SIT)
{
// do nothing if sit overrides was disabled
if (!mCurrentSet->getSitOverride())
@ -2076,9 +2227,15 @@ void AOEngine::onRegionChange()
return;
}
// do nothing if smart sit is enabled because we have no
// animation running from the AO
if (mCurrentSet->getSmart())
AOSet::AOState* state = mCurrentSet->getState(AOSet::Sitting);
if (!state)
{
return;
}
// do nothing if no AO animation is playing (e.g. smart sit cancel)
LLUUID animation = state->mCurrentAnimationID;
if (animation.isNull())
{
return;
}

View File

@ -171,8 +171,9 @@ class AOEngine
void stopAllStandVariants();
void stopAllSitVariants();
BOOL foreignAnimations(const LLUUID& seat);
const LLUUID& mapSwimming(const LLUUID& motion) const;
BOOL foreignAnimations();
AOSet::AOState* mapSwimming(const LLUUID& motion) const;
AOSet::AOState* getStateForMotion(const LLUUID& motion) const;
void updateSortOrder(AOSet::AOState* state);
void saveSet(const AOSet* set);
@ -204,6 +205,7 @@ class AOEngine
LLUUID mAOFolder;
LLUUID mLastMotion;
LLUUID mLastOverriddenMotion;
LLUUID mTransitionId;
std::vector<AOSet*> mSets;
std::vector<AOSet*> mOldSets;

View File

@ -151,7 +151,7 @@
// Once pumpMainLoop() reports that we're done, cancel frameTimer:
// stop the repetitive calls.
[frameTimer release];
[[LLNSApplication sharedApplication] terminate:self];
[[LLApplication sharedApplication] terminate:self];
}
}

View File

@ -806,6 +806,11 @@ BOOL LLFloaterPreference::postBuild()
onPieColorsOverrideChanged();
// </FS:Zi> Pie menu
// <FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
gSavedSettings.getControl("ShowGroupNoticesTopRight")->getSignal()->connect(boost::bind(&LLFloaterPreference::onShowGroupNoticesTopRightChanged, this));
onShowGroupNoticesTopRightChanged();
// </FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
// <FS:Ansariel> Show email address in preferences (FIRE-1071)
getChild<LLCheckBoxCtrl>("send_im_to_email")->setLabelArg("[EMAIL]", getString("LoginToChange"));
@ -869,6 +874,13 @@ void LLFloaterPreference::onPieColorsOverrideChanged()
}
// </FS:Zi> Pie menu
// <FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
void LLFloaterPreference::onShowGroupNoticesTopRightChanged()
{
getChild<LLRadioGroup>("ShowGroupNoticesTopRight")->setValue(gSavedSettings.getBOOL("ShowGroupNoticesTopRight"));
}
// </FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
void LLFloaterPreference::updateDeleteTranscriptsButton()
{
// <FS:ND> LLLogChat::getListOfTranscriptFiles will go through the whole chatlog dir, reach a bit of each file,

View File

@ -164,6 +164,9 @@ protected:
// <FS:Ansariel> Correct enabled state of Animated Script Dialogs option
void updateAnimatedScriptDialogs();
// <FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
void onShowGroupNoticesTopRightChanged();
public:
// This function squirrels away the current values of the controls so that
// cancel() can restore them.

View File

@ -3698,14 +3698,25 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
{
std::string complexity_string;
LLLocale locale("");
LLResMgr::getInstance()->getIntegerString(complexity_string, complexity);
// always show complexity, even if the reason for a jelly baby is the texture area
// this is technically not 100% correct but the decision logic with all of the
// exceptions would be way too complex to justify the result - Zi
LLResMgr::getInstance()->getIntegerString(complexity_string, complexity);
LLStringUtil::format_map_t label_args;
label_args["COMPLEXITY"] = complexity_string;
addNameTagLine(format_string(complexity_label, label_args), complexity_color, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
// only show texture area if this is the reason for jelly baby rendering
static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 1000.0f);
bool surface_limit_exceeded = max_attachment_area > 0.f && mAttachmentSurfaceArea > max_attachment_area;
addNameTagLine(format_string(complexity_label, label_args) + (surface_limit_exceeded ? " \xE2\x96\xA0" : ""), complexity_color, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
if (max_attachment_area > 0.f && mAttachmentSurfaceArea > max_attachment_area)
{
LLResMgr::getInstance()->getIntegerString(complexity_string, mAttachmentSurfaceArea);
label_args["TEXTURE_AREA"] = complexity_string;
addNameTagLine(format_string(complexity_label, label_args), LLColor4::red, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
}
}
// </FS:Ansariel>

View File

@ -63,7 +63,13 @@
<check_box label="Pie-Menü aktivieren" name="UsePieMenu" tool_tip="Aktiviert das klassische V1-Kontextmenü in Kuchenform anstelle des standardmäßigen Kontextmenüs."/>
<check_box label="Text-Animation aktivieren" name="PieMenuPopupFontEffect" tool_tip="Aktiviert die Animation der Texte innerhalb des klassischen V1-Kontextmenü in Kuchenform, wenn sich dieses öffnet."/>
<check_box label="Außenring-Schatten aktivieren" name="PieMenuOuterRingShade" tool_tip="Aktiviert einen zusätzlichen Schatten um den äußeren Ring des klassischen V1-Kontextmenü in Kuchenform, der bei der Visualisierung von Untermenüs unterstützt."/>
<check_box label="Gruppenmitteilungen und Chiclets oben rechts" name="ShowGroupNoticesTopRight" tool_tip="Aktivieren, um Gruppenmitteilungen in der oberen rechten Ecke des Bildschirms anzuzeigen (Klassisches V1.x-Verhalten)."/>
<text name="ShowGroupNoticesTopRightLabel">
Position Gruppenmitt. und Chiclets:
</text>
<radio_group name="ShowGroupNoticesTopRight" tool_tip="Legt fest, wo Gruppenmitteilungen und Chiclet-Icons auf dem Bildschirm angezeigt werden.">
<radio_item label="Rechts unten" name="radio" />
<radio_item label="Rechts oben" name="radio1" />
</radio_group>
<text name="GroupTopRightRequiresRestart" left_delta="280">
(Erfordert Neustart)
</text>

View File

@ -143,10 +143,15 @@
</panel>
</panel>
<panel label="Mini-Karte" name="tab-minimap">
<slider name="FSMiniMapOpacity" label="Hintergrund-Deckkraft:" label_width="130" width="430"/>
<text name="netmap_pickradius_textbox" width="130">
Auswahl-Radius:
<slider name="FSMiniMapOpacity" label="Hintergrund-Deckkraft:" label_width="135" width="435"/>
<text name="netmap_pickradius_color_textbox" width="135">
Selektionsradius-Farbe:
</text>
<color_swatch name="MapPickRadiusColor" tool_tip="Erlaubt die Auswahl der Farbe des Selektionsradius auf der Minikarte. Die Größe des Selektionsradius kann über die Selektionsradius-Größe-Einstellung konfiguriert werden." />
<text name="netmap_pickradius_opacity_textbox" width="60">
Deckkraft:
</text>
<slider name="MapPickRadiusTransparency" width="163" tool_tip="Erlaubt die Auswahl der Deckkraft des Selektionsradius auf der Minikarte. Die Größe des Selektionsradius kann über die Selektionsradius-Größe-Einstellung konfiguriert werden." />
<text name="netmap_dots_textbox">
Punkte auf Minikarte:
</text>

View File

@ -114,7 +114,7 @@
<combo_box.item label="Weltkarte öffnen" name="1"/>
<combo_box.item label="Zur Position teleportieren" name="2"/>
</combo_box>
<slider label="Auswahlradius-Skalierung:" tool_tip="Steuert den Radius für den Auswahlbereich auf der Minikarte" name="FSMinimapPickScale"/>
<slider label="Selektionsradius-Größe:" tool_tip="Steuert den Radius für den Selektionsbereich auf der Minikarte. Die Farbe und Deckkraft können über die Selektionsradius-Farbe- und Deckkraft-Einstellungen konfiguriert werden." name="FSMinimapPickScale"/>
<text name="world_map_options_label">
Weltkarte-Optionen:
</text>

View File

@ -6966,6 +6966,9 @@ Ihre aktuelle Position: [AVATAR_POS]
<string name="Nametag_Complexity_Label">
Komplexität: [COMPLEXITY]
</string>
<string name="Nametag_Texture_Area_Label">
Textur-Oberfläche: [TEXTURE_AREA] m²
</string>
<string name="font_unknown">
Unbekannte Schriftart
</string>

View File

@ -73,7 +73,9 @@
name="scroll_vert"
orientation="vertical"
step_size="16"
doc_pos="0"
doc_size="3000"
page_size="0"
/>
</layout_panel>
<layout_panel name="timers_panel"

View File

@ -431,29 +431,60 @@
tool_tip="Enables an additional outer ring shade that helps visualizing sub menus."
top_pad="3"
width="256" />
<check_box
<text
follows="left|top"
height="16"
layout="topleft"
left="10"
name="ShowGroupNoticesTopRightLabel"
top_pad="8"
type="string"
width="210">
Group Notices and chiclets location:
</text>
<radio_group
control_name="ShowGroupNoticesTopRight"
height="16"
initial_value="true"
label="Group Notices and chiclets in Top Right"
initial_value="1"
layout="topleft"
left="5"
left_pad="5"
top_delta="-1"
name="ShowGroupNoticesTopRight"
tool_tip="Set this to move group notifications and chiclet icons to the top right corner of the screen (Classic V1.x behavior)."
top_pad="3"
width="256" />
<text
type="string"
left_delta="240"
top_pad="-15"
width="128"
follows="left|top"
height="12"
tool_tip="Choose where group notifications and chiclet icons will appear on the screen."
width="200">
<radio_item
height="16"
label="Bottom Right"
layout="topleft"
left="0"
name="radio"
top_pad="2"
value="0"
width="100" />
<radio_item
height="16"
label="Top Right"
layout="topleft"
left_pad="0"
name="radio1"
value="1"
width="100" />
</radio_group>
<text
follows="left|top"
height="16"
layout="topleft"
left_pad="2"
name="GroupTopRightRequiresRestart"
text_color="White_50"
name="GroupTopRightRequiresRestart">
(requires restart)
top_pad="-14"
type="string"
width="128">
(requires restart)
</text>
<check_box
control_name="FSDisableIMChiclets"
height="16"

View File

@ -1237,9 +1237,9 @@
left="30"
top_pad="16"
height="15"
name="netmap_pickradius_textbox"
name="netmap_pickradius_color_textbox"
width="115">
Pick radius:
Pick radius color:
</text>
<color_swatch
color="MapPickRadiusColor"
@ -1250,6 +1250,7 @@
layout="topleft"
left_pad="13"
name="MapPickRadiusColor"
tool_tip="Controls the color of the pick range on the minimap. The size of the pick range can be adjusted with the Pick radius setting."
top_delta="-5"
width="44" >
<color_swatch.init_callback
@ -1259,6 +1260,18 @@
function="Pref.applyUIColor"
parameter="MapPickRadiusColor" />
</color_swatch>
<text
type="string"
length="1"
follows="left|top"
layout="topleft"
left_pad="10"
height="15"
name="netmap_pickradius_opacity_textbox"
top_delta="5"
width="50">
Opacity:
</text>
<slider
can_edit_text="false"
decimal_digits="2"
@ -1271,8 +1284,8 @@
min_val="0.00"
name="MapPickRadiusTransparency"
show_text="true"
top_delta="5"
width="233" />
tool_tip="Controls the opacity of the pick range on the minimap. The size of the pick range can be adjusted with the Pick radius setting."
width="173" />
<text
type="string"
length="1"

View File

@ -874,14 +874,14 @@
increment="0.5"
initial_value="1"
layout="topleft"
label="Pick scale:"
label="Pick radius:"
left="35"
label_width="150"
max_val="10"
min_val="0.5"
name="FSMinimapPickScale"
show_text="true"
tool_tip="Controls the radius of the pick range on the minimap"
tool_tip="Controls the radius of the pick range on the minimap. The opacity and color of the pick range can be adjusted with the Pick radius color and Opacity settings."
width="360"
top_pad="5"/>

View File

@ -3124,6 +3124,7 @@ Your current position: [AVATAR_POS]
<string name="Pie_av_render_fully">Fully</string>
<string name="Nametag_Complexity_Label">Complexity: [COMPLEXITY]</string>
<string name="Nametag_Texture_Area_Label">Texture Area: [TEXTURE_AREA] m²</string>
<string name="font_unknown">Unknown Font</string>
<string name="font_fonts.xml">Deja Vu</string>

View File

@ -81,6 +81,9 @@ Inicjalizacja Marketplace nieudana z powodu błędu sieci lub systemu. Spróbuj
&apos;[ERROR_CODE]&apos;
</notification>
<notification name="MyOutfitsPasteFailed">
Jeden lub więcej przedmiotów nie może być użyty w "Strojach"
</notification>
<notification name="MerchantPasteFailed">
Kopiowanie lub przenoszenie przedmiotów na Marketplace nie powiodło się:
@ -608,9 +611,6 @@ Obiekt może znajdować się zbyt daleko albo został usunięty.
Odwiedzić [_URL], aby uzyskać więcej informacji?
<usetemplate ignoretext="Sprzęt w moim komputerze nie jest wspierany" name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="RunLauncher">
Proszę nie uruchamiać przeglądarki bezpośrednio. Zamiast tego zaktualizuj wszystkie skróty, aby wskazywały na program rozruchowy.
</notification>
<notification name="OldGPUDriver">
Prawdopodobnie istnieje nowszy sterownik dla Twojej karty graficznej. Aktualizacja sterowników graficznych może znacznie zwiększyć wydajność.

View File

@ -59,7 +59,13 @@
<check_box label="Użyj menu kołowego (pie menu)" name="UsePieMenu" tool_tip="Używaj klasycznego, okrągłego menu znanego z 1.x po kliknięciu na awatary, obiekty, teren lub dodatki - zamiast prostokątnych menu kontekstowych." />
<check_box label="Animuj również tekst" name="PieMenuPopupFontEffect" tool_tip="Sprawia, że tekst w menu kołowym staje się częścią animacji, gdy jest ono otwierane." />
<check_box label="Włącz zewnętrzny pierścień menu kołowego" name="PieMenuOuterRingShade" tool_tip="Włącza dodatkowy zewnętrzny pierścień dla menu kołowego, jaki pomaga lokalizować gdzie znajdują się submenu." />
<check_box label="Ikony i ogł. grup w prawym górnym rogu" name="ShowGroupNoticesTopRight" tool_tip="Zaznacz, aby przenieść ogłoszenia grup oraz inne ikonki w prawy górny narożnik ekranu (klasyczne zachowanie 1.x)" />
<text name="ShowGroupNoticesTopRightLabel">
Pozycja ogłoszeń grup oraz ikonek:
</text>
<radio_group name="ShowGroupNoticesTopRight" tool_tip="Wybierz gdzie ogłoszenia grup oraz inne ikonki mają się pojawiać na ekranie.">
<radio_item label="Prawo, dół" name="radio" />
<radio_item label="Prawo, góra" name="radio1" />
</radio_group>
<text name="GroupTopRightRequiresRestart">
(wymaga restartu)
</text>

View File

@ -141,9 +141,14 @@
</panel>
<panel label="Minimapa" name="tab-minimap">
<slider label="Przezroczystość tła:" name="FSMiniMapOpacity"/>
<text name="netmap_pickradius_textbox">
Okrąg zazn.:
<text name="netmap_pickradius_color_textbox">
Okrąg zaznaczenia:
</text>
<color_swatch name="MapPickRadiusColor" tool_tip="Kontroluje kolor promienia okręgu zaznaczenia na minimapie. Rozmiar pierścienia może być dostosowany przez odpowiadające mu ustawienia w sekcji z promieniem okręgu zaznaczenia." />
<text name="netmap_pickradius_opacity_textbox">
Przezr.:
</text>
<slider name="MapPickRadiusTransparency" tool_tip="Kontroluje stopień przezroczystości promienia okręgu zaznaczenia na minimapie. Rozmiar pierścienia może być dostosowany przez odpowiadające mu ustawienia w sekcji z promieniem okręgu zaznaczenia." />
<text name="netmap_dots_textbox">
Kropki minimapy:
</text>

View File

@ -105,7 +105,7 @@
<combo_box.item label="Otwórz mapę świata" name="1"/>
<combo_box.item label="Teleportuj do klikniętego punktu" name="2"/>
</combo_box>
<slider label="Rozm. okręgu zaznaczenia:" name="FSMinimapPickScale" tool_tip="Kontroluje rozmiar okręgu zaznaczenia pod kursorem na minimapie"/>
<slider label="Promień okręgu zaznacz.:" name="FSMinimapPickScale" tool_tip="Kontroluje promień okręgu zaznaczenia pod kursorem na minimapie. Przezroczystość i kolor pierścienia mogą być dostosowane przez odpowiadające mu ustawienia w sekcji z kolorami."/>
<text name="world_map_options_label">
Opcje mapy świata:
</text>

View File

@ -601,6 +601,12 @@ Spróbuj zalogować się ponownie za minutę.
<string name="TooltipOutboxMixedStock">
Wszystkie rzeczy w folderze Magazynowym muszą mieć ten sam typ i zezwolenia
</string>
<string name="TooltipOutfitNotInInventory">
W "Strojach" możesz umieszczać tylko przedmioty lub stroje z własnej Szafy
</string>
<string name="TooltipCantCreateOutfit">
Jeden lub więcej przedmiotów nie może być użyty w "Strojach"
</string>
<string name="TooltipDragOntoOwnChild">
Nie możesz przenieść folderu do jego obiektu podrzędnego
</string>
@ -6281,6 +6287,9 @@ Twoja aktualna pozycja: [AVATAR_POS]
<string name="Nametag_Complexity_Label">
Złożoność: [COMPLEXITY]
</string>
<string name="Nametag_Texture_Area_Label">
Tekstury: [TEXTURE_AREA] m²
</string>
<string name="font_unknown">
Nieznana czcionka
</string>

View File

@ -1782,7 +1782,8 @@ class DarwinManifest(ViewerManifest):
print "Converting temp disk image to final disk image"
self.run_command(['hdiutil', 'convert', sparsename, '-format', 'UDZO',
'-imagekey', 'zlib-level=9', '-o', finalname])
self.run_command(['hdiutil', 'internet-enable', '-yes', finalname])
#<FS:TS> This command no longer exists as of OS X Catalina
#self.run_command(['hdiutil', 'internet-enable', '-yes', finalname])
# get rid of the temp file
self.package_file = finalname
self.remove(sparsename)