# Conflicts:
#	indra/newview/llfloaterpreference.cpp
#	indra/newview/skins/default/xui/en/panel_preferences_move.xml
#	indra/newview/skins/default/xui/ja/floater_360capture.xml
#	indra/newview/skins/default/xui/ja/floater_about_land.xml
#	indra/newview/skins/default/xui/ja/floater_edit_ext_day_cycle.xml
#	indra/newview/skins/default/xui/ja/floater_god_tools.xml
#	indra/newview/skins/default/xui/ja/floater_inspect.xml
#	indra/newview/skins/default/xui/ja/floater_joystick.xml
#	indra/newview/skins/default/xui/ja/floater_land_holdings.xml
#	indra/newview/skins/default/xui/ja/floater_lsl_guide.xml
#	indra/newview/skins/default/xui/ja/floater_model_preview.xml
#	indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml
#	indra/newview/skins/default/xui/ja/floater_pathfinding_linksets.xml
#	indra/newview/skins/default/xui/ja/floater_preferences.xml
#	indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
#	indra/newview/skins/default/xui/ja/floater_preferences_view_advanced.xml
#	indra/newview/skins/default/xui/ja/floater_scene_load_stats.xml
#	indra/newview/skins/default/xui/ja/floater_settings_debug.xml
#	indra/newview/skins/default/xui/ja/floater_snapshot.xml
#	indra/newview/skins/default/xui/ja/floater_stats.xml
#	indra/newview/skins/default/xui/ja/floater_tools.xml
#	indra/newview/skins/default/xui/ja/floater_top_objects.xml
#	indra/newview/skins/default/xui/ja/floater_ui_preview.xml
#	indra/newview/skins/default/xui/ja/menu_attachment_other.xml
#	indra/newview/skins/default/xui/ja/menu_avatar_other.xml
#	indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml
#	indra/newview/skins/default/xui/ja/menu_gesture_gear.xml
#	indra/newview/skins/default/xui/ja/menu_inventory.xml
#	indra/newview/skins/default/xui/ja/menu_participant_list.xml
#	indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml
#	indra/newview/skins/default/xui/ja/menu_profile_other.xml
#	indra/newview/skins/default/xui/ja/menu_profile_self.xml
#	indra/newview/skins/default/xui/ja/menu_settings_gear.xml
#	indra/newview/skins/default/xui/ja/menu_url_agent.xml
#	indra/newview/skins/default/xui/ja/menu_viewer.xml
#	indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml
#	indra/newview/skins/default/xui/ja/notifications.xml
#	indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml
#	indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml
#	indra/newview/skins/default/xui/ja/panel_edit_universal.xml
#	indra/newview/skins/default/xui/ja/panel_group_bulk_ban.xml
#	indra/newview/skins/default/xui/ja/panel_group_creation_sidetray.xml
#	indra/newview/skins/default/xui/ja/panel_group_notices.xml
#	indra/newview/skins/default/xui/ja/panel_landmark_info.xml
#	indra/newview/skins/default/xui/ja/panel_main_inventory.xml
#	indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
#	indra/newview/skins/default/xui/ja/panel_nearby_media.xml
#	indra/newview/skins/default/xui/ja/panel_people.xml
#	indra/newview/skins/default/xui/ja/panel_performance_autoadjustments.xml
#	indra/newview/skins/default/xui/ja/panel_performance_preferences.xml
#	indra/newview/skins/default/xui/ja/panel_place_profile.xml
#	indra/newview/skins/default/xui/ja/panel_postcard_settings.xml
#	indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
#	indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
#	indra/newview/skins/default/xui/ja/panel_preferences_colors.xml
#	indra/newview/skins/default/xui/ja/panel_preferences_general.xml
#	indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
#	indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
#	indra/newview/skins/default/xui/ja/panel_presets_pulldown.xml
#	indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
#	indra/newview/skins/default/xui/ja/panel_profile_secondlife.xml
#	indra/newview/skins/default/xui/ja/panel_region_environment.xml
#	indra/newview/skins/default/xui/ja/panel_region_estate.xml
#	indra/newview/skins/default/xui/ja/panel_region_terrain.xml
#	indra/newview/skins/default/xui/ja/panel_status_bar.xml
#	indra/newview/skins/default/xui/ja/panel_tools_texture.xml
#	indra/newview/skins/default/xui/ja/sidepanel_item_info.xml
#	indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
#	indra/newview/skins/default/xui/ja/strings.xml
#	indra/newview/skins/default/xui/ja/teleport_strings.xml
master
Ansariel 2025-10-13 22:21:27 +02:00
commit 8a2c295298
19 changed files with 226 additions and 38 deletions

View File

@ -54,14 +54,29 @@ std::string apr_strerror_helper(apr_status_t rv)
*****************************************************************************/
#define ensure_equals_(left, right) \
ensure_equals(STRINGIZE(#left << " != " << #right), (left), (right))
do { \
auto _left_val = (left); \
auto _right_val = (right); \
if (_left_val != _right_val) { \
std::string _msg = std::string(#left) + " != " + std::string(#right); \
tut::ensure_equals(_msg, _left_val, _right_val); \
} else { \
tut::ensure_equals("", _left_val, _right_val); \
} \
} while(0)
#define aprchk(expr) aprchk_(#expr, (expr))
static void aprchk_(const char* call, apr_status_t rv, apr_status_t expected=APR_SUCCESS)
{
tut::ensure_equals(STRINGIZE(call << " => " << rv << ": " << apr_strerror_helper
(rv)),
rv, expected);
if (rv != expected)
{
std::string msg = std::string(call) + " => " + std::to_string(rv) + ": " + apr_strerror_helper(rv);
tut::ensure_equals(msg, rv, expected);
}
else
{
tut::ensure_equals("", rv, expected);
}
}
/**
@ -78,11 +93,14 @@ static std::string readfile(const std::string& pathname, const std::string& desc
std::string use_desc(desc);
if (use_desc.empty())
{
use_desc = STRINGIZE("in " << pathname);
use_desc = "in " + pathname;
}
std::ifstream inf(pathname.c_str());
std::string output;
tut::ensure(STRINGIZE("No output " << use_desc), bool(std::getline(inf, output)));
if (!std::getline(inf, output))
{
tut::ensure("No output " + use_desc, false);
}
std::string more;
while (std::getline(inf, more))
{
@ -108,8 +126,8 @@ void waitfor(LLProcess& proc, int timeout=60)
{
yield();
}
tut::ensure(STRINGIZE("process took longer than " << timeout << " seconds to terminate"),
i < timeout);
std::string msg = "process took longer than " + std::to_string(timeout) + " seconds to terminate";
tut::ensure(msg, i < timeout);
}
void waitfor(LLProcess::handle h, const std::string& desc, int timeout=60)
@ -119,8 +137,8 @@ void waitfor(LLProcess::handle h, const std::string& desc, int timeout=60)
{
yield();
}
tut::ensure(STRINGIZE("process took longer than " << timeout << " seconds to terminate"),
i < timeout);
std::string msg = "process took longer than " + std::to_string(timeout) + " seconds to terminate";
tut::ensure(msg, i < timeout);
}
/**
@ -153,7 +171,8 @@ struct PythonProcessLauncher
try
{
mPy = LLProcess::create(mParams);
tut::ensure(STRINGIZE("Couldn't launch " << mDesc << " script"), bool(mPy));
std::string msg = "Couldn't launch " + mDesc + " script";
tut::ensure(msg, bool(mPy));
}
catch (const tut::failure&)
{
@ -214,7 +233,8 @@ struct PythonProcessLauncher
mParams.args.add(out.getName());
run();
// assuming the script wrote to that file, read it
return readfile(out.getName(), STRINGIZE("from " << mDesc << " script"));
std::string desc = "from " + mDesc + " script";
return readfile(out.getName(), desc);
}
LLProcess::Params mParams;

View File

@ -95,6 +95,7 @@ public:
#if LL_WINDOWS
virtual bool getCursorDelta(LLCoordCommon* delta) = 0;
#endif
virtual bool isWrapMouse() const = 0;
virtual void showCursor() = 0;
virtual void hideCursor() = 0;
virtual bool isCursorHidden() = 0;

View File

@ -63,6 +63,7 @@ public:
#if LL_WINDOWS
/*virtual*/ bool getCursorDelta(LLCoordCommon* delta) override { return false; }
#endif
/*virtual*/ bool isWrapMouse() const override { return true; }
/*virtual*/ void showCursor() override {}
/*virtual*/ void hideCursor() override {}
/*virtual*/ void showCursorFromMouseMove() override {}

View File

@ -63,6 +63,7 @@ public:
bool switchContext(bool fullscreen, const LLCoordScreen &size, bool enable_vsync, const LLCoordScreen * const posp = NULL) override;
bool setCursorPosition(LLCoordWindow position) override;
bool getCursorPosition(LLCoordWindow *position) override;
bool isWrapMouse() const override { return !mCursorDecoupled; };
void showCursor() override;
void hideCursor() override;
void showCursorFromMouseMove() override;

View File

@ -72,6 +72,7 @@ public:
/*virtual*/ bool switchContext(bool fullscreen, const LLCoordScreen &size, bool enable_vsync, const LLCoordScreen * const posp = NULL);
/*virtual*/ bool setCursorPosition(LLCoordWindow position);
/*virtual*/ bool getCursorPosition(LLCoordWindow *position);
/*virtual*/ bool isWrapMouse() const override { return true; }
/*virtual*/ void showCursor();
/*virtual*/ void hideCursor();
/*virtual*/ void showCursorFromMouseMove();

View File

@ -74,6 +74,7 @@ public:
// </FS:Zi>
/*virtual*/ bool setCursorPosition(LLCoordWindow position);
/*virtual*/ bool getCursorPosition(LLCoordWindow *position);
/*virtual*/ bool isWrapMouse() const override { return true; }
/*virtual*/ void showCursor();
/*virtual*/ void hideCursor();
/*virtual*/ void showCursorFromMouseMove();

View File

@ -451,6 +451,7 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,
bool useLegacyCursors) // <FS:LO> Legacy cursor setting from main program
:
LLWindow(callbacks, fullscreen, flags),
mAbsoluteCursorPosition(false),
mMaxGLVersion(max_gl_version),
mMaxCores(max_cores)
{
@ -3262,6 +3263,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
prev_absolute_x = absolute_x;
prev_absolute_y = absolute_y;
window_imp->mAbsoluteCursorPosition = true;
}
else
{
@ -3278,6 +3280,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
window_imp->mRawMouseDelta.mX += (S32)round((F32)raw->data.mouse.lLastX * (F32)speed / DEFAULT_SPEED);
window_imp->mRawMouseDelta.mY -= (S32)round((F32)raw->data.mouse.lLastY * (F32)speed / DEFAULT_SPEED);
}
window_imp->mAbsoluteCursorPosition = false;
}
}
}

View File

@ -70,6 +70,7 @@ public:
/*virtual*/ bool setCursorPosition(LLCoordWindow position);
/*virtual*/ bool getCursorPosition(LLCoordWindow *position);
/*virtual*/ bool getCursorDelta(LLCoordCommon* delta);
/*virtual*/ bool isWrapMouse() const override { return !mAbsoluteCursorPosition; };
/*virtual*/ void showCursor();
/*virtual*/ void hideCursor();
/*virtual*/ void showCursorFromMouseMove();
@ -198,6 +199,7 @@ protected:
HCURSOR mCursor[ UI_CURSOR_COUNT ]; // Array of all mouse cursors
LLCoordWindow mCursorPosition; // mouse cursor position, should only be mutated on main thread
bool mAbsoluteCursorPosition; // true if last position was received in absolute coordinates.
LLMutex mRawMouseMutex;
RAWINPUTDEVICE mRawMouse;
LLCoordWindow mLastCursorPosition; // mouse cursor position from previous frame

View File

@ -4884,16 +4884,16 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>DisableMouseWarp</key>
<key>MouseWarpMode</key>
<map>
<key>Comment</key>
<string>Disable warping of the mouse to the center of the screen during alt-zoom and mouse look. Useful with certain input devices, mouse sharing programs like Synergy, or running under Parallels.</string>
<string>Controls warping of the mouse to the center of the screen during alt-zoom and mouse look. Useful with certain input devices, mouse sharing programs like Synergy, or running under Parallels. 0 - automatic, 1 - on, 2 - off</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<string>S32</string>
<key>Value</key>
<integer>0</integer>
<integer>1</integer>
</map>
<key>DisableExternalBrowser</key>
<map>

View File

@ -1215,6 +1215,17 @@ void LLFloaterPreference::onOpen(const LLSD& key)
// Load (double-)click to walk/teleport settings.
updateClickActionViews();
#if LL_LINUX
// Lixux doesn't support automatic mode
LLComboBox* combo = getChild<LLComboBox>("double_click_action_combo");
S32 mode = gSavedSettings.getS32("MouseWarpMode");
if (mode == 0)
{
combo->setValue("1");
}
combo->setEnabledByValue("0", false);
#endif
// <FS:PP> Load UI Sounds tabs settings.
updateUISoundsControls();

View File

@ -4791,6 +4791,32 @@ void LLFolderBridge::pasteLinkFromClipboard()
std::vector<LLUUID> objects;
LLClipboard::instance().pasteFromClipboard(objects);
if (objects.size() == 0)
{
LLClipboard::instance().setCutMode(false);
return;
}
LLUUID& first_id = objects[0];
LLInventoryItem* item = model->getItem(first_id);
if (item && item->getAssetUUID().isNull())
{
if (item->getActualType() == LLAssetType::AT_NOTECARD)
{
// otehrwise AIS will return 'Cannot link to items with a NULL asset_id.'
LLNotificationsUtil::add("CantLinkNotecard");
LLClipboard::instance().setCutMode(false);
return;
}
else if (item->getActualType() == LLAssetType::AT_MATERIAL)
{
LLNotificationsUtil::add("CantLinkMaterial");
LLClipboard::instance().setCutMode(false);
return;
}
}
LLPointer<LLInventoryCallback> cb = NULL;
LLInventoryPanel* panel = mInventoryPanel.get();
if (panel->getRootFolder()->isSingleFolderMode())

View File

@ -2126,6 +2126,30 @@ void LLInventoryGallery::pasteAsLink()
std::vector<LLUUID> objects;
LLClipboard::instance().pasteFromClipboard(objects);
if (objects.size() == 0)
{
LLClipboard::instance().setCutMode(false);
return;
}
LLUUID& first_id = objects[0];
LLInventoryItem* item = gInventory.getItem(first_id);
if (item && item->getAssetUUID().isNull())
{
if (item->getActualType() == LLAssetType::AT_NOTECARD)
{
LLNotificationsUtil::add("CantLinkNotecard");
LLClipboard::instance().setCutMode(false);
return;
}
else if (item->getActualType() == LLAssetType::AT_MATERIAL)
{
LLNotificationsUtil::add("CantLinkMaterial");
LLClipboard::instance().setCutMode(false);
return;
}
}
bool paste_into_root = mSelectedItemIDs.empty();
for (LLUUID& dest : mSelectedItemIDs)
{

View File

@ -615,20 +615,23 @@ void LLInventoryGalleryContextMenu::updateMenuItemsVisibility(LLContextMenu* men
bool has_children = false;
bool is_full_perm_item = false;
bool is_copyable = false;
LLViewerInventoryItem* selected_item = gInventory.getItem(selected_id);
LLViewerInventoryCategory* selected_category = nullptr;
LLViewerInventoryItem* selected_item = nullptr;
if(is_folder)
{
LLInventoryCategory* category = gInventory.getCategory(selected_id);
if (category)
selected_category = dynamic_cast<LLViewerInventoryCategory*>(obj);
if (selected_category)
{
folder_type = category->getPreferredType();
folder_type = selected_category->getPreferredType();
is_system_folder = LLFolderType::lookupIsProtectedType(folder_type);
has_children = (gInventory.categoryHasChildren(selected_id) != LLInventoryModel::CHILDREN_NO);
}
}
else
{
selected_item = dynamic_cast<LLViewerInventoryItem*>(obj);
if (selected_item)
{
is_full_perm_item = selected_item->getIsFullPerm();
@ -747,8 +750,7 @@ void LLInventoryGalleryContextMenu::updateMenuItemsVisibility(LLContextMenu* men
{
if (is_agent_inventory && !is_inbox && !is_cof && !is_in_favorites && !is_outfits && !is_in_outfits)
{
LLViewerInventoryCategory* category = gInventory.getCategory(selected_id);
if (!category || !LLFriendCardsManager::instance().isCategoryInFriendFolder(category))
if (!selected_category || !LLFriendCardsManager::instance().isCategoryInFriendFolder(selected_category))
{
items.push_back(std::string("New Folder"));
}
@ -776,6 +778,22 @@ void LLInventoryGalleryContextMenu::updateMenuItemsVisibility(LLContextMenu* men
if (inventory_linking)
{
items.push_back(std::string("Paste As Link"));
if (selected_item)
{
if (!LLAssetType::lookupCanLink(selected_item->getActualType()))
{
disabled_items.push_back(std::string("Paste As Link"));
}
else if (gInventory.isObjectDescendentOf(selected_item->getUUID(), gInventory.getLibraryRootFolderID()))
{
disabled_items.push_back(std::string("Paste As Link"));
}
}
else if (selected_category && LLFolderType::lookupIsProtectedType(selected_category->getPreferredType()))
{
disabled_items.push_back(std::string("Paste As Link"));
}
}
}
if (is_folder && is_agent_inventory)
@ -1032,9 +1050,8 @@ void LLInventoryGalleryContextMenu::updateMenuItemsVisibility(LLContextMenu* men
{
if (is_folder)
{
LLViewerInventoryCategory* cat = gInventory.getCategory(selected_id);
if (cat
&& !LLFolderType::lookupIsProtectedType(cat->getPreferredType())
if (selected_category
&& !LLFolderType::lookupIsProtectedType(selected_category->getPreferredType())
&& gInventory.isObjectDescendentOf(selected_id, gInventory.getRootFolderID()))
{
can_list = true;

View File

@ -445,10 +445,7 @@ bool LLTaskInvFVBridge::removeItem()
return true;
}
LLSD payload;
payload["task_id"] = mPanel->getTaskUUID();
payload["inventory_ids"].append(mUUID);
LLNotificationsUtil::add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
LLNotificationsUtil::add("CantModifyContentInNoModTask");
return false;
}
}
@ -471,13 +468,7 @@ void LLTaskInvFVBridge::removeBatch(std::vector<LLFolderViewModelItem*>& batch)
if (!object->permModify())
{
LLSD payload;
payload["task_id"] = mPanel->getTaskUUID();
for (LLFolderViewModelItem* item : batch)
{
payload["inventory_ids"].append(((LLTaskInvFVBridge*)item)->getUUID());
}
LLNotificationsUtil::add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
LLNotificationsUtil::add("CantModifyContentInNoModTask");
}
else
{

View File

@ -3801,7 +3801,31 @@ void LLViewerWindow::clearPopups()
void LLViewerWindow::moveCursorToCenter()
{
if (! gSavedSettings.getBOOL("DisableMouseWarp"))
bool mouse_warp = false;
LLCachedControl<S32> mouse_warp_mode(gSavedSettings, "MouseWarpMode", 1);
switch (mouse_warp_mode())
{
case 0:
// For Windows:
// Mouse usually uses 'delta' position since it isn't aware of own location, keep it centered.
// Touch screen reports absolute or virtual absolute position and warping a physical
// touch is pointless, so don't move it.
//
// MacOS
// If 'decoupled', CGAssociateMouseAndMouseCursorPosition can make mouse stay in
// one place and not move, do not move it (needs testing).
mouse_warp = mWindow->isWrapMouse();
break;
case 1:
mouse_warp = true;
break;
default:
mouse_warp = false;
break;
}
if (mouse_warp)
{
S32 x = getWorldViewWidthScaled() / 2;
S32 y = getWorldViewHeightScaled() / 2;

View File

@ -2703,6 +2703,12 @@ Möchten Sie es mit dem ausgewählten Objekt ersetzen?
<notification name="TooManyWearables">
Sie können keinen Ordner tragen, der mehr als [AMOUNT] Elemente enthält. Sie können diesen Höchstwert unter „Erweitert“ &gt; „Debug-Einstellungen anzeigen“ &gt; „WearFolderLimit“ ändern.
</notification>
<notification name="CantLinkNotecard">
Sie müssen die Notizkarte speichern, bevor Sie eine Verknüpfung dorthin herstellen können.
</notification>
<notification name="CantLinkMaterial">
Sie müssen das Material speichern, bevor Sie eine Verknüpfung dorthin herstellen können.
</notification>
<notification label="Warnung für Nicht-stören-Modus" name="DoNotDisturbModePay">
Sie haben den Nicht-stören-Modus aktiviert. Sie erhalten keine Artikel, die im Gegenzug für diese Zahlung angeboten werden.

View File

@ -29,6 +29,14 @@
</text>
<check_box label="Kamera-Kontrollen auf undurchsichtigem Hintergrund anzeigen" name="FSAlwaysOpaqueCameraControls"/>
<check_box label="Temporär nicht-angezeigte Objekte nach Teleport wieder darstellen" name="FSTempDerenderUntilTeleport" tool_tip="Falls aktiviert, werden temporär nicht-angezeigte Objekte nach einem Teleport wieder dargestellt. Falls deaktiviert, werden diese bis zum Ende der Sitzung nicht dargestellt, sofern sie nicht manuell mit Hilfe des Asset-Blacklist-Fensters wieder dargestellt werden sollen."/>
<text name="mouse_warp_lbl">
Maus-Warp:
</text>
<combo_box name="mouse_warp_combo" tooltip="Kontrolliert das Springen der Maus zur Bildschirmmitte während Alt-Zoom und Mouselook.">
<combo_box.item label="Automatisch" name="0"/>
<combo_box.item label="An" name="1"/>
<combo_box.item label="Aus" name="2"/>
</combo_box>
</panel>
<!--Mouselook-->
@ -61,6 +69,7 @@
<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 (Standard: 0). Hohe Werte führen zu zackigen und ruckartigen Bewegungen." width="305" />
<check_box label="Verbindung zu Nachbarregionen deaktivieren (Achtung: Tooltip lesen!)" name="FSDisableNeighbourRegionConnections" tool_tip="Zeigt/lädt nur die Region, in der Sie sich befinden. Dies kann die Performance und Netzwerkstabilität verbessern, jedoch sind Regionswechsel zu Fuß oder in Fahrzeugen weniger verlässlich und es kann ein manueller Teleport notwendig sein." />
<text name="Region_Crossing_Movement_Label" width="245">
Bewegungsvorhersage beim Regionswechsel:
</text>

View File

@ -6882,6 +6882,22 @@ Do you want to replace it with the selected object?
<tag>fail</tag>
</notification>
<notification
icon="alertmodal.tga"
name="CantLinkNotecard"
type="alertmodal">
You must save the notecard before creating a link to it.
<tag>fail</tag>
</notification>
<notification
icon="alertmodal.tga"
name="CantLinkMaterial"
type="alertmodal">
You must save the material before creating a link to it.
<tag>fail</tag>
</notification>
<notification
icon="alert.tga"
label="Unavailable Mode Warning"

View File

@ -307,7 +307,41 @@
width="350"
tool_tip="If enabled, temporary derendered objects will stay derendered until teleport. If disabled, they stay derendered until the end of the session or get manually re-rendered via the asset blacklist window."
control_name="FSTempDerenderUntilTeleport"/>
</panel>
<text
follows="left|top"
type="string"
length="1"
height="10"
layout="topleft"
left="25"
name="mouse_warp_lbl"
width="75"
top_pad="10">
Mouse Warp:
</text>
<combo_box
control_name="MouseWarpMode"
height="23"
layout="topleft"
left_pad="10"
top_delta="-4"
name="mouse_warp_combo"
tooltip="Controls warping of the mouse to the center of the screen during alt-zoom and mouse look."
width="100">
<combo_box.item
label="Automatic"
name="0"
value="0"/>
<combo_box.item
label="On"
name="1"
value="1"/>
<combo_box.item
label="Off"
name="2"
value="2"/>
</combo_box>
</panel>
<!--Mouselook-->
<panel