diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index 8300dc9a49..5e03064708 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -171,8 +171,12 @@ LLSettingsSky::validation_list_t legacyHazeValidationList() boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, LLSD(LLSDArray(0.0f)(5.0f))))); legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_HAZE_HORIZON, false, LLSD::TypeReal, boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, LLSD(LLSDArray(0.0f)(5.0f))))); + // FIRE-29682 Allow full range density multipliers + // legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_MULTIPLIER, false, LLSD::TypeReal, + // boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, LLSD(LLSDArray(0.0001f)(2.0f))))); legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_MULTIPLIER, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, LLSD(LLSDArray(0.0001f)(2.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, LLSD(LLSDArray(0.0000001f)(2.0f))))); + // legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DISTANCE_MULTIPLIER, false, LLSD::TypeReal, boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, LLSD(LLSDArray(0.0001f)(1000.0f))))); } diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 353cf68e8c..e938d166c3 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11841,7 +11841,20 @@ Change of this parameter will affect the layout of buttons in notification toast Backup 0 - RenderCubeMap + OnlyShowSelectedNormals + + Comment + Only render the normals for selected objects. in conjunction with render debug normals + Persist + 1 + Type + Boolean + Value + 1 + Backup + 0 + + RenderCubeMap Comment Whether we can render the cube map or not diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl index 9f9749394e..85cd345128 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl @@ -46,7 +46,10 @@ void main() vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; vec3 n = normalize(normal_matrix * normal); - vec3 t = normalize(normal_matrix * tangent.xyz); +// tangents should not use the inv_transpose matrix + // vec3 t = normalize(normal_matrix * tangent.xyz); + vec3 t = normalize((modelview_projection_matrix * vec4(tangent.xyz,0)).xyz); +// vec3 b = cross(n, t) * tangent.w; vary_mat0 = vec3(t.x, b.x, n.x); diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl index 7e29ada205..093da8d26d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl @@ -122,7 +122,10 @@ vary_normal = n; #else //HAS_SKIN vec3 n = normalize(normal_matrix * normal); #ifdef HAS_NORMAL_MAP - vec3 t = normalize(normal_matrix * tangent.xyz); +// tangents should not use the inv_transpose matrix + // vec3 t = normalize(normal_matrix * tangent.xyz); + vec3 t = normalize((modelview_projection_matrix * vec4(tangent.xyz,0)).xyz); +// vec3 b = cross(n,t)*tangent.w; //vec3 t = cross(b,n) * binormal.w; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index b05f210cc4..c96c4230cd 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1566,6 +1566,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, LLMatrix4a mat_normal; mat_normal.loadu(mat_norm_in); + // FIX incorrect transformation + LLMatrix4a mat_tan; + mat_tan.loadu(mat_vert_in); + // F32 r = 0, os = 0, ot = 0, ms = 0, mt = 0, cos_ang = 0, sin_ang = 0; bool do_xform = false; @@ -2125,8 +2129,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, LLVector4a t; tangent_to_object.rotate(binormal_dir, t); LLVector4a binormal; - mat_normal.rotate(t, binormal); - + // FIX incorrect transformation + // mat_normal.rotate(t, binormal); + mat_tan.rotate(t, binormal); + // //VECTORIZE THIS if (mDrawablep->isActive()) { @@ -2256,7 +2262,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_normal) { - //LL_RECORD_TIME_BLOCK(FTM_FACE_GEOM_NORMAL); + //LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_NORMAL); mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, map_range); F32* normals = (F32*) norm.get(); LLVector4a* src = vf.mNormals; @@ -2294,7 +2300,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, while (src < end) { LLVector4a tangent_out; - mat_normal.rotate(*src, tangent_out); + // FIX incorrect transformation + // mat_normal.rotate(*src, tangent_out); + mat_tan.rotate(*src, tangent_out); + // tangent_out.normalize3fast(); tangent_out.setSelectWithMask(mask, *src, tangent_out); tangent_out.store4a(tangents); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 72fb86bcf7..a078c02c53 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -56,6 +56,10 @@ #include "llcontrolavatar.h" #include "llvotree.h" +// improved normals debug +#include "llformat.h" +#include "llselectmgr.h" +// static LLTrace::BlockTimerStatHandle FTM_FRUSTUM_CULL("Frustum Culling"); static LLTrace::BlockTimerStatHandle FTM_CULL_REBOUND("Cull Rebound Partition"); @@ -2269,45 +2273,131 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE) void renderNormals(LLDrawable* drawablep) { LLVertexBuffer::unbind(); - + // FIX and improve renderNormals debug + static LLCachedControl showSelectedOnly(*LLUI::getInstance()->mSettingGroups["config"], "OnlyShowSelectedNormals"); + // LLVOVolume* vol = drawablep->getVOVolume(); if (vol) { + // FIX and improve renderNormals debug + if(showSelectedOnly && !drawablep->getVObj()->isSelected()) + { + drawablep->getVObj()->setDebugText(""); + return; + } + // LLVolume* volume = vol->getVolume(); gGL.pushMatrix(); gGL.multMatrix((F32*) vol->getRelativeXform().mMatrix); + // FIX and improve renderNormals debug + // LLMatrix3 mat_norm {vol->getRelativeXformInvTrans()}; + LLMatrix3 scale_inverse; + auto scale = drawablep->getScale(); + // We need something like an inverse transpose, however + // we do not use the object rotation as it will be applied in the world transform + // but we do need to apply the inverse scale^2(1) as the world transform does a scale too. + // transpose of a scale only matrix is a lot of nothing, so skip it. + scale_inverse.setRows(LLVector3(1.0, 0.0, 0.0) / scale.mV[VX], + LLVector3(0.0, 1.0, 0.0) / scale.mV[VY], + LLVector3(0.0, 0.0, 1.0) / scale.mV[VZ]); + LLMatrix4a inv_scale_mat; + inv_scale_mat.loadu(scale_inverse); + LLMatrix3 mat_norm = scale_inverse * scale_inverse; + LLMatrix4a invtranspose; + invtranspose.loadu(mat_norm); + // + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - LLVector4a scale(gSavedSettings.getF32("RenderDebugNormalScale")); + // FIX and improve renderNormals debug + // LLVector4a scale(gSavedSettings.getF32("RenderDebugNormalScale")); + static LLCachedControl hairlen(*LLUI::getInstance()->mSettingGroups["config"], "RenderDebugNormalScale"); + + LLSelectNode* selectionNode = nullptr; + auto face_select = LLSelectMgr::getInstance()->getTEMode(); + if(showSelectedOnly) + { + auto objp = drawablep->getVObj(); + if(!objp) + { + return; + } + objp->setDebugText( + llformat( + "obj scale = <%.3f,%.3f,%.3f>", + scale.mV[VX],scale.mV[VY],scale.mV[VZ])); + if(face_select) + { + LLObjectSelectionHandle sel = LLSelectMgr::getInstance()->getSelection(); + selectionNode = sel.get()->findNode(objp); + } + } + // for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) { + // FIX and improve renderNormals debug + if(face_select && !selectionNode->isTESelected(i)) + { + continue; + } + // const LLVolumeFace& face = volume->getVolumeFace(i); + // FIX and improve renderNormals debug + gGL.begin(LLRender::LINES); + gGL.diffuseColor4f(1,1,0,1); // Yellow normals + // for (S32 j = 0; j < face.mNumVertices; ++j) { - gGL.begin(LLRender::LINES); - LLVector4a n,p; + // FIX and improve renderNormals debug + // gGL.begin(LLRender::LINES); + // LLVector4a n,p; - n.setMul(face.mNormals[j], scale); - p.setAdd(face.mPositions[j], n); + // n.setMul(face.mNormals[j], scale); + // p.setAdd(face.mPositions[j], n); - gGL.diffuseColor4f(1,1,1,1); + // gGL.diffuseColor4f(1,1,1,1); + // gGL.vertex3fv(face.mPositions[j].getF32ptr()); + // gGL.vertex3fv(p.getF32ptr()); + // + // if (face.mTangents) + // { + // n.setMul(face.mTangents[j], scale); + // p.setAdd(face.mPositions[j], n); + // gGL.vertex3fv(face.mPositions[j].getF32ptr()); + // gGL.vertex3fv(p.getF32ptr()); + // } + LLVector4a n,ni,p; + n = face.mNormals[j]; + invtranspose.affineTransform(n, ni); + ni.normalize3fast(); + n.setMul(ni, (F32)hairlen); + inv_scale_mat.affineTransform(n, ni); // overcompensate for the fact we draw "through" the model transform + p.setAdd(face.mPositions[j], ni); gGL.vertex3fv(face.mPositions[j].getF32ptr()); gGL.vertex3fv(p.getF32ptr()); - - if (face.mTangents) + } + gGL.flush(); + if (face.mTangents) + { + // gGL.begin(LLRender::LINES); + gGL.diffuseColor4f(0,0,1,1); // blue tangents. + for (S32 j = 0; j < face.mNumVertices; ++j) { - n.setMul(face.mTangents[j], scale); - p.setAdd(face.mPositions[j], n); - - gGL.diffuseColor4f(0,1,1,1); + LLVector4a t,ti,p; + t = face.mTangents[j]; + // invtranspose.affineTransform(t, ti); + t.mul((F32)hairlen); + inv_scale_mat.affineTransform(t, ti); // overcompensate for the fact we draw "through" the model transform + p.setAdd(face.mPositions[j], ti); gGL.vertex3fv(face.mPositions[j].getF32ptr()); gGL.vertex3fv(p.getF32ptr()); - } - gGL.end(); + } } + gGL.end(); + // } gGL.popMatrix(); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index a99d55327e..304a26ef5e 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7000,14 +7000,6 @@ URL: [AUDIOURL] [MESSAGE] - -[MESSAGE] - - - - - - - - + + + + + + + - - - + + + + - + + - - + + + - - - + + + + + + + + + + + + + + - - - - - + + + - - + + + + - + + + + + + + + + + + + + - - - - + + + - + + - - - - - - + + + - + + + + + - - - - - - + + + - + + @@ -79,16 +105,15 @@ - - - - - - - - - - + + + + + + + + + @@ -115,17 +140,23 @@ + + - + + + - + + + @@ -137,7 +168,11 @@ + + + + @@ -154,26 +189,42 @@ + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + @@ -183,7 +234,7 @@ - + @@ -192,6 +243,11 @@ + + + + + @@ -218,23 +274,34 @@ + + + + + + + + + + + @@ -259,9 +326,11 @@ - - + + + + @@ -331,6 +400,8 @@ + + @@ -360,6 +431,7 @@ + @@ -380,7 +452,11 @@ + + + + @@ -416,15 +492,15 @@ - + - + - + @@ -451,7 +527,7 @@ - + diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 4e6df5153c..7b09e4e556 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -2841,9 +2841,6 @@ URL: [AUDIOURL] [MESSAGE] - - [MESSAGE] - 取り消されました。 diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml index 0c2a800e62..35e2ee028c 100644 --- a/indra/newview/skins/default/xui/pl/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml @@ -174,7 +174,6 @@ - @@ -351,7 +350,7 @@ - + @@ -449,7 +448,7 @@ - + @@ -486,7 +485,7 @@ - + diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_backup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_backup.xml index 98c36caf32..97bddf49fe 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_backup.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_backup.xml @@ -73,7 +73,7 @@ Wyłączone czaty grup - + Renderowanie awatarów diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml index fabefaafce..e4f0662eea 100644 --- a/indra/newview/skins/default/xui/ru/floater_tools.xml +++ b/indra/newview/skins/default/xui/ru/floater_tools.xml @@ -130,7 +130,7 @@ Сила diff --git a/indra/newview/skins/default/xui/ru/menu_inventory_add.xml b/indra/newview/skins/default/xui/ru/menu_inventory_add.xml index 7422b414a2..45e4be7c32 100644 --- a/indra/newview/skins/default/xui/ru/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/ru/menu_inventory_add.xml @@ -24,6 +24,7 @@ + diff --git a/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml b/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml index dc19b65783..8e0781f1fe 100644 --- a/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml @@ -20,6 +20,7 @@ + diff --git a/indra/newview/skins/default/xui/ru/menu_people_contact_sets_gear.xml b/indra/newview/skins/default/xui/ru/menu_people_contact_sets_gear.xml index eb9a0048cc..616c86cde5 100644 --- a/indra/newview/skins/default/xui/ru/menu_people_contact_sets_gear.xml +++ b/indra/newview/skins/default/xui/ru/menu_people_contact_sets_gear.xml @@ -3,8 +3,8 @@ - - + + diff --git a/indra/newview/skins/default/xui/ru/menu_people_contact_sets_remove.xml b/indra/newview/skins/default/xui/ru/menu_people_contact_sets_remove.xml index 63ebd118ea..73db656d17 100644 --- a/indra/newview/skins/default/xui/ru/menu_people_contact_sets_remove.xml +++ b/indra/newview/skins/default/xui/ru/menu_people_contact_sets_remove.xml @@ -2,6 +2,6 @@ - + diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index 07d53f529f..934643f44a 100644 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -3,68 +3,28 @@ Больше не показывать + +Не показывать мне это снова +(для текущей сессии) + Всегда выбирать эту опцию Закрыть - - - - - - - - + Ваша версия [APP_NAME] не знает как отобразить только что полученное уведомление. Пожалуйста, проверьте, что у вас установлена последняя версия [APP_NAME]. Подробности ошибки: Уведомление с именем "[_NAME]" не найдено в файле notifications.xml. - Ошибка окна: не удалось найти следующие элементы управления: [CONTROLS] - Обучающий материал в данный момент отсутствует - [MESSAGE] @@ -75,21 +35,17 @@ [MESSAGE] - Произошла ошибка при обновлении [APP_NAME]. [http://get.secondlife.com Загрузите последнюю версию] клиента. - Не удалось подключиться к [SECOND_LIFE_GRID]. "[DIAGNOSTIC]" Убедитесь, что подключение к интернету работает нормально. - Шаблон сообщения [PATH] не найден. - Сохранить изменения текущей части одежды / тела? @@ -115,54 +71,48 @@ Ошибки при отправке некоторых папок в торговый центр. Эти папки остались в вашей папке "Торговые исходящие". Подробнее см. в [[MARKETPLACE_IMPORTS_URL] журнале ошибок]. - Не удалось передать, ошибка: "[ERROR_CODE]" Папки не отправлены в торговый центр из-за ошибки системы или сети. Повторите попытку позже. - Не удалось инициализировать торговый центр, ошибка: "[ERROR_CODE]" Не удалось инициализировать торговый центр из-за ошибки системы или сети. Повторите попытку позже. - Не удалось скопировать или переместить в папку запасов, ошибка: "[ERROR_CODE]" - + + + Один или несколько предметов не могут быть использованы внутри "Комплектов" Не удалось скопировать или переместить в списки товаров торгового центра, ошибка: "[ERROR_CODE]" - Не удалось выполнить транзакцию с торговым центром, ошибка: Причина: "[ERROR_REASON]" [ERROR_DESCRIPTION] - Не удалось опубликовать этот продукт или активировать папку версии. Обычно это происходит из-за отсутствия информации в форме описания списка, но также может быть связано с ошибками в структуре папки. Отредактируйте список или проверьте папку списка на отсутствие ошибок. - Не удалось опубликовать в торговом центре, ошибка: "[ERROR_CODE]" - Не удалось активировать эту папку версии, ошибка: "[ERROR_CODE]" - Для того, чтобы создать свой список, мы исправили иерархию вашего списка содержимого. @@ -195,7 +145,6 @@ Не удалось обновить этот список. [[URL] Щелкните здесь], чтобы изменить его в торговом центре. - Нельзя надеть одежду или часть тела, если они находятся в папке списков товаров торгового центра. @@ -235,11 +184,9 @@ Жители, которые не являются вашими друзьями, не будут знать, что вы игнорируете их звонки и сообщения. - Примечание. После включения этой опции все пользователи данного компьютера смогут увидеть список ваших избранных мест. - Запуск нескольких приложений [APP_NAME] не поддерживается. Это может привести к конфликтам кэша текстур, повреждению и снижению производительности и визуального отображения. @@ -263,10 +210,12 @@ Отменить у выбранных жителей права на изменение? + + Имя группы должно быть между [MIN_LEN] и [MAX_LEN] символами. + Невозможно создать группу. [MESSAGE] - [NEEDS_APPLY_MESSAGE] @@ -275,7 +224,6 @@ Необходимо указать тему для отправки группового уведомления. - Вы собираетесь добавить участников группы в роль [ROLE_NAME]. @@ -307,7 +255,6 @@ *ПРЕДУПРЕЖДЕНИЕ* Любой участник в роли с этой способностью также получает способности "[ACTION_NAME_2]" и "[ACTION_NAME_3]" - Вы удаляете способность "[ACTION_NAME]" для роли "[ROLE_NAME]". @@ -316,7 +263,6 @@ При удалении этой способности НЕ БУДУТ удалены способности "[ACTION_NAME_2]" и "[ACTION_NAME_3]". Если вам больше не нужны эти способности для данной роли, немедленно отключите их! - Вы собираетесь исключить [AVATAR_NAME] из группы. @@ -348,7 +294,7 @@ - Вы вступаете в группу [NAME]. + Вы вступаете в группу <nolink>[NAME]</nolink>. Продолжить? @@ -362,6 +308,32 @@ Пригласите участников в ближайшие 48 часов. + + Эта группа недоступна для вас. + + + Ошибка обработки запроса на членство в группе. + + + Невозможно присоединиться к группе: [reason] + + + Извините, пробные пользователи не могут вступать в группы. + + + Вы не можете присоединиться к '<nolink>[group_name]</nolink>': +Вы уже являетесь участником [group_count] групп, максимально допустимое количество - [max_groups] + + + Вы не можете присоединиться к '<nolink>[group_name]</nolink>': +В группе больше нет открытой регистрации. + + + Вы были добавлены в группу + + + Невозможно перевести требуемый членский взнос в размере L$ [membership_fee]. + За L$[COST] вы можете находиться на этой земле ("[PARCEL_NAME]") в течение [TIME] часов. Купить пропуск? @@ -467,6 +439,9 @@ Требуется L$[COST] для сохранения фото в вашем инвентаре. Купите L$ или сохраните фото на компьютере. + + Вам нужно L$[COST] , чтобы загрузить этот элемент. + Требуется L$[COST] для сохранения текстуры в вашем инвентаре. Купите L$ или сохраните фото на компьютере. @@ -531,7 +506,6 @@ Недостаточно денег для создания рекламы. - Удалить место <nolink>[PICK]</nolink>? @@ -638,7 +612,6 @@ Ваш стартовый регион не определен. Введите название региона в поле "Место старта" или выберите в качестве места старта "Мое последнее место" или "Мой дом". - Не удается запустить или остановить скрипт: не найден объект, в котором он находится. @@ -663,9 +636,6 @@ - - Пожалуйста, не запускайте напрямую исполняемый файл просмотра. Обновите все имеющиеся ярлыки, чтобы вместо этого запускать SL_Launcher. - Возможно, для вашей видеокарты имеется более новый драйвер. Обновление драйвера может существенно повысить быстродействие. @@ -764,7 +734,7 @@ - Вы исключили аватара [AVATAR_NAME] из группы [GROUP_NAME] + Вы исключили аватара [AVATAR_NAME] из группы <nolink>[GROUP_NAME]</nolink>. ОШИБКА ПРИОБРЕТЕНИЯ: выбрано слишком много объектов. @@ -800,6 +770,9 @@ Объекты нельзя связывать через границу региона. + + Объекты нельзя связывать через границу региона. + Невозможно объединить объекты: не у всех объектов один владелец. @@ -813,7 +786,6 @@ Неверное расширение файла [EXTENSION] Ожидается [VALIDS] - Не удалось открыть для чтения загруженный звуковой файл: @@ -868,7 +840,6 @@ Мы были не в состоянии расшифровать файл, хранящий ваши учетные данные. По этой причине сохранение или удаление учетных данных сотрет все те, которые были ранее сохранены. Это может произойти, когда вы измените настройки сети. Перезапуск клиента с предыдущей конфигурацией сети может помочь восстановить сохраненные учетные данные. - Поврежден файл ресурсов: [FILE] @@ -891,7 +862,6 @@ На это место у вас уже есть закладка. - Вы не можете создать закладку потому что владелец земли не разрешает этого. @@ -980,6 +950,9 @@ Системе не удалось своевременно выполнить ваше пересечение границы. Повторите попытку через несколько минут. + + Извините, но система не смогла запустить ваш телепорт. Пожалуйста, повторите попытку через несколько минут. + Не удалось найти точку назначения телепорта. Возможно, пункт назначения временно недоступен или уже не существует. Повторите попытку через несколько минут. @@ -1260,6 +1233,13 @@