Merge branch 'master' of https://github.com/FirestormViewer/phoenix-firestorm
commit
3f4d28329f
|
|
@ -379,13 +379,13 @@ jobs:
|
|||
- name: Install Microsoft.Trusted.Signing.Client
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
.\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -OutputDirectory .
|
||||
.\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.86 -OutputDirectory .
|
||||
shell: pwsh
|
||||
|
||||
- name: Locate Azure.CodeSigning.Dlib.dll
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
$dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.53\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName
|
||||
$dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.86\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName
|
||||
if (-not $dllPath) {
|
||||
Write-Error "Azure.CodeSigning.Dlib.dll not found."
|
||||
exit 1
|
||||
|
|
|
|||
|
|
@ -244,14 +244,4 @@ inline size_t hash_value(const LLUUID& id) noexcept
|
|||
return (size_t)id.getDigest64();
|
||||
}
|
||||
|
||||
// <FS:Ansariel> UUID hash calculation
|
||||
struct FSUUIDHash
|
||||
{
|
||||
inline size_t operator() (const LLUUID& id) const
|
||||
{
|
||||
return *reinterpret_cast<const size_t*>(id.mData);
|
||||
}
|
||||
};
|
||||
// </FS:Ansariel> UUID hash calculation
|
||||
|
||||
#endif // LL_LLUUID_H
|
||||
|
|
|
|||
|
|
@ -361,14 +361,12 @@ LLSD LLSettingsBase::interpolateSDValue(const std::string& key_name, const LLSD
|
|||
new_array = q.getValue();
|
||||
}
|
||||
else
|
||||
{ // TODO: We could expand this to inspect the type and do a deep lerp based on type.
|
||||
// for now assume a heterogeneous array of reals.
|
||||
{
|
||||
size_t len = std::max(value.size(), other_value.size());
|
||||
|
||||
for (size_t i = 0; i < len; ++i)
|
||||
{
|
||||
|
||||
new_array[i] = lerp((F32)value[i].asReal(), (F32)other_value[i].asReal(), (F32)mix);
|
||||
new_array[i] = interpolateSDValue(key_name, value[i], other_value[i], defaults, mix, skip, slerps);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -661,16 +661,15 @@ void LLSettingsSky::blend(LLSettingsBase::ptr_t &end, F64 blendf)
|
|||
mHasLegacyHaze |= lerp_legacy_float(mHazeDensity, mLegacyHazeDensity, other->mHazeDensity, other->mLegacyHazeDensity, 0.7f, (F32)blendf);
|
||||
mHasLegacyHaze |= lerp_legacy_float(mDistanceMultiplier, mLegacyDistanceMultiplier, other->mDistanceMultiplier, other->mLegacyDistanceMultiplier, 0.8f, (F32)blendf);
|
||||
mHasLegacyHaze |= lerp_legacy_float(mDensityMultiplier, mLegacyDensityMultiplier, other->mDensityMultiplier, other->mLegacyDensityMultiplier, 0.0001f, (F32)blendf);
|
||||
mHasLegacyHaze |= lerp_legacy_color(mAmbientColor, mLegacyAmbientColor, other->mAmbientColor, other->mLegacyAmbientColor, LLColor3(0.25f, 0.25f, 0.25f), (F32)blendf);
|
||||
mHasLegacyHaze |= lerp_legacy_color(mAmbientColor, mLegacyAmbientColor, other->mAmbientColor, other->mLegacyAmbientColor, LLColor3(0.25f, 0.25f, 0.25f), (F32)blendf); // <FS:Beq for Hecklezz/> import pending PR #4185 Fix sky ambient color not blending.
|
||||
mHasLegacyHaze |= lerp_legacy_color(mBlueHorizon, mLegacyBlueHorizon, other->mBlueHorizon, other->mLegacyBlueHorizon, LLColor3(0.4954f, 0.4954f, 0.6399f), (F32)blendf);
|
||||
mHasLegacyHaze |= lerp_legacy_color(mBlueDensity, mLegacyBlueDensity, other->mBlueDensity, other->mLegacyBlueDensity, LLColor3(0.2447f, 0.4487f, 0.7599f), (F32)blendf);
|
||||
|
||||
parammapping_t defaults = other->getParameterMap();
|
||||
stringset_t skip = getSkipInterpolateKeys();
|
||||
stringset_t slerps = getSlerpKeys();
|
||||
mAbsorptionConfigs = interpolateSDMap(mAbsorptionConfigs, other->mAbsorptionConfigs, defaults, blendf, skip, slerps);
|
||||
mMieConfigs = interpolateSDMap(mMieConfigs, other->mMieConfigs, defaults, blendf, skip, slerps);
|
||||
mRayleighConfigs = interpolateSDMap(mRayleighConfigs, other->mRayleighConfigs, defaults, blendf, skip, slerps);
|
||||
mAbsorptionConfigs = interpolateSDValue("absorption_config", mAbsorptionConfigs, other->mAbsorptionConfigs, defaults, blendf, skip, slerps);
|
||||
mMieConfigs = interpolateSDValue("mie_config", mMieConfigs, other->mMieConfigs, defaults, blendf, skip, slerps);
|
||||
mRayleighConfigs = interpolateSDValue("rayleigh_config", mRayleighConfigs, other->mRayleighConfigs, defaults, blendf, skip, slerps);
|
||||
|
||||
setDirtyFlag(true);
|
||||
setReplaced();
|
||||
|
|
|
|||
|
|
@ -1502,7 +1502,17 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
|
|||
{
|
||||
domListOfFloats& transform = t->getValue();
|
||||
auto count = transform.getCount()/16;
|
||||
|
||||
|
||||
// <FS:Beq> FIRE-34811 Crash during import due to missing inv_bind_matrices.
|
||||
if (count==0)
|
||||
{
|
||||
LL_WARNS("DAELOader") << "Invalid rigged mesh: Missing inv_bind_matrices." << LL_ENDL;
|
||||
LLSD args;
|
||||
args["Message"] = "ParsingErrorEmptyInvBindInvalidModel";
|
||||
mWarningsArray.append(args);
|
||||
setLoadState( ERROR_PARSING );
|
||||
}
|
||||
// </FS:Beq>
|
||||
for (size_t k = 0; k < count; ++k)
|
||||
{
|
||||
LLMatrix4 mat;
|
||||
|
|
@ -1520,7 +1530,14 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Beq> FIRE-34811 Crash during import due to missing inv_bind_matrices.
|
||||
if (model->mSkinInfo.mInvBindMatrix.empty())
|
||||
{
|
||||
model->mSkinInfo.mJointNames.clear();
|
||||
model->mSkinInfo.mJointNums.clear();
|
||||
missingSkeletonOrScene = true; // set this true as we've just wiped that data.
|
||||
}
|
||||
// </FS:Beq>
|
||||
//Now that we've parsed the joint array, let's determine if we have a full rig
|
||||
//(which means we have all the joint sthat are required for an avatar versus
|
||||
//a skinned asset attached to a node in a file that contains an entire skeleton,
|
||||
|
|
|
|||
|
|
@ -1587,7 +1587,7 @@ LLSD LLMeshSkinInfo::asLLSD(bool include_joints, bool lock_scale_if_joint_positi
|
|||
for (U32 i = 0; i < mJointNames.size(); ++i)
|
||||
{
|
||||
ret[ "joint_names" ][ i ] = mJointNames[ i ];
|
||||
|
||||
if (mInvBindMatrix.size() < i) break; // <FS:Beq/> FIRE-34811 Crash during import due to missing inv_bind_matrices.
|
||||
for (U32 j = 0; j < 4; j++)
|
||||
{
|
||||
for (U32 k = 0; k < 4; k++)
|
||||
|
|
|
|||
|
|
@ -66,8 +66,8 @@ private:
|
|||
bool mBlocked;
|
||||
};
|
||||
|
||||
typedef std::unordered_map<LLUUID, NACLAntiSpamQueueEntry*, FSUUIDHash> spam_queue_entry_map_t;
|
||||
typedef std::unordered_set<LLUUID, FSUUIDHash> collision_sound_set_t;
|
||||
typedef std::unordered_map<LLUUID, NACLAntiSpamQueueEntry*> spam_queue_entry_map_t;
|
||||
typedef std::unordered_set<LLUUID> collision_sound_set_t;
|
||||
|
||||
class NACLAntiSpamQueue
|
||||
{
|
||||
|
|
|
|||
|
|
@ -35,9 +35,9 @@
|
|||
#include "llsingleton.h"
|
||||
#include "llassettype.h"
|
||||
|
||||
using blacklisted_uuid_container_t = std::unordered_set<LLUUID, FSUUIDHash>;
|
||||
using blacklisted_uuid_container_t = std::unordered_set<LLUUID>;
|
||||
using blacklist_type_map_t = std::map<LLAssetType::EType, blacklisted_uuid_container_t>;
|
||||
using blacklist_data_t = std::unordered_map<LLUUID, LLSD, FSUUIDHash>;
|
||||
using blacklist_data_t = std::unordered_map<LLUUID, LLSD>;
|
||||
|
||||
class FSAssetBlacklist : public LLSingleton<FSAssetBlacklist>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -92,10 +92,10 @@ bool FSCommon::is_irc_me_prefix(std::string_view text)
|
|||
std::string FSCommon::unescape_name(std::string_view name)
|
||||
{
|
||||
// bugfix for SL-46920: preventing filenames that break stuff.
|
||||
char * curl_str = curl_unescape(name.data(), static_cast<int>(name.size())); // Calling data() should be ok here because we also pass the length
|
||||
char* curl_str = curl_unescape(name.data(), static_cast<int>(name.size())); // Calling data() should be ok here because we also pass the length
|
||||
std::string unescaped_name(curl_str);
|
||||
curl_free(curl_str);
|
||||
curl_str = NULL;
|
||||
curl_str = nullptr;
|
||||
|
||||
return unescaped_name;
|
||||
}
|
||||
|
|
@ -301,11 +301,12 @@ bool FSCommon::isLinden(const LLUUID& av_id)
|
|||
if (LLGridManager::getInstance()->isInOpenSim())
|
||||
{
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (!region) return false;
|
||||
bool is_god = false;
|
||||
if (!region)
|
||||
return false;
|
||||
|
||||
bool is_god{ false };
|
||||
// <FS:CR> They may not be "Lindens" per se, but opensim has gods.
|
||||
std::set<std::string> gods = region->getGods();
|
||||
if (!gods.empty())
|
||||
if (std::set<std::string> gods = region->getGods(); !gods.empty())
|
||||
{
|
||||
is_god = (gods.find(first_name + " " + last_name) != gods.end()
|
||||
|| gods.find(last_name) != gods.end());
|
||||
|
|
@ -453,7 +454,7 @@ std::string FSCommon::getAvatarNameByDisplaySettings(const LLAvatarName& av_name
|
|||
std::string name;
|
||||
static LLCachedControl<bool> NameTagShowUsernames(gSavedSettings, "NameTagShowUsernames");
|
||||
static LLCachedControl<bool> UseDisplayNames(gSavedSettings, "UseDisplayNames");
|
||||
if ((NameTagShowUsernames) && (UseDisplayNames))
|
||||
if (NameTagShowUsernames && UseDisplayNames)
|
||||
{
|
||||
name = av_name.getCompleteName();
|
||||
}
|
||||
|
|
@ -494,21 +495,21 @@ bool FSCommon::isDefaultTexture(const LLUUID& asset_id)
|
|||
|
||||
bool FSCommon::isLegacySkin()
|
||||
{
|
||||
std::string current_skin = gSavedSettings.getString("FSInternalSkinCurrent");
|
||||
return (current_skin == "Vintage");
|
||||
static bool is_legacy_skin = gSavedSettings.getString("FSInternalSkinCurrent") == "Vintage";
|
||||
return is_legacy_skin;
|
||||
}
|
||||
|
||||
bool FSCommon::isFilterEditorKeyCombo(KEY key, MASK mask)
|
||||
{
|
||||
return (mask == MASK_CONTROL && key == 'F' && gSavedSettings.getBOOL("FSSelectLocalSearchEditorOnShortcut"));
|
||||
static LLCachedControl<bool> select_search_on_shortcut(gSavedSettings, "FSSelectLocalSearchEditorOnShortcut");
|
||||
return (mask == MASK_CONTROL && key == 'F' && select_search_on_shortcut);
|
||||
}
|
||||
|
||||
LLUUID FSCommon::getGroupForRezzing()
|
||||
{
|
||||
LLUUID group_id{ gAgent.getGroupID() };
|
||||
LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
|
||||
|
||||
if (parcel && gSavedSettings.getBOOL("RezUnderLandGroup"))
|
||||
if (LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); parcel && gSavedSettings.getBOOL("RezUnderLandGroup"))
|
||||
{
|
||||
// In both cases, group-owned or not, the group ID is the same;
|
||||
// No need to query the parcel owner ID as it will be either
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ class FSRadar
|
|||
virtual ~FSRadar();
|
||||
|
||||
public:
|
||||
typedef std::unordered_map<const LLUUID, std::shared_ptr<FSRadarEntry>, FSUUIDHash> entry_map_t;
|
||||
typedef std::unordered_map<LLUUID, std::shared_ptr<FSRadarEntry>> entry_map_t;
|
||||
entry_map_t getRadarList() { return mEntryList; }
|
||||
|
||||
void startTracking(const LLUUID& avatar_id);
|
||||
|
|
@ -130,7 +130,7 @@ private:
|
|||
bool lastIgnore;
|
||||
};
|
||||
|
||||
typedef std::unordered_map<LLUUID, RadarFields, FSUUIDHash> radarfields_map_t;
|
||||
typedef std::unordered_map<LLUUID, RadarFields> radarfields_map_t;
|
||||
radarfields_map_t mLastRadarSweep;
|
||||
entry_map_t mEntryList;
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class LGGContactSets : public LLSingleton<LGGContactSets>
|
|||
|
||||
public:
|
||||
typedef std::vector<std::string> string_vec_t;
|
||||
typedef std::unordered_set<LLUUID, FSUUIDHash> uuid_set_t;
|
||||
typedef std::unordered_set<LLUUID> uuid_set_t;
|
||||
|
||||
void loadFromDisk();
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ private:
|
|||
LLSD exportToLLSD();
|
||||
void saveToDisk();
|
||||
|
||||
typedef std::unordered_map<LLUUID, std::string, FSUUIDHash> uuid_map_t;
|
||||
typedef std::unordered_map<LLUUID, std::string> uuid_map_t;
|
||||
typedef std::map<std::string, ContactSet*> contact_set_map_t;
|
||||
contact_set_map_t mContactSets;
|
||||
|
||||
|
|
|
|||
|
|
@ -305,7 +305,10 @@ S32 LLAgentBenefits::get2KTextureUploadCost(S32 area) const
|
|||
{
|
||||
if (m_2k_texture_upload_cost.empty())
|
||||
{
|
||||
return m_texture_upload_cost;
|
||||
// <FS:Ansariel> OpenSim legacy economy
|
||||
//return m_texture_upload_cost;
|
||||
return getTextureUploadCost();
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
return m_2k_texture_upload_cost[0];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ static void touch_default_probe(LLReflectionMap* probe)
|
|||
}
|
||||
}
|
||||
|
||||
LLHeroProbeManager::LLHeroProbeManager():mMirrorNormal(0,0,1) // <FS:Beq/> [FIRE-35007][#3331] mirrors not working after relog. make sure the mirror normal is not zero length
|
||||
LLHeroProbeManager::LLHeroProbeManager()
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ private:
|
|||
S32 sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*);
|
||||
|
||||
LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
|
||||
typedef std::unordered_map<LLUUID, boost::signals2::connection, FSUUIDHash> avatar_name_cache_connection_map_t;
|
||||
typedef std::unordered_map<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
|
||||
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
|
||||
|
||||
bool mPendingMemberUpdate;
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ namespace LLPerfStats
|
|||
static void updateMeanFrameTime(U64 tot_frame_time_raw);
|
||||
// StatsArray is a uint64_t for each possible statistic type.
|
||||
using StatsArray = std::array<uint64_t, static_cast<size_t>(LLPerfStats::StatType_t::STATS_COUNT)>;
|
||||
using StatsMap = std::unordered_map<LLUUID, StatsArray, FSUUIDHash>; // <FS:Beq/>
|
||||
using StatsMap = std::unordered_map<LLUUID, StatsArray>; // <FS:Beq/>
|
||||
using StatsTypeMatrix = std::array<StatsMap, static_cast<size_t>(LLPerfStats::ObjType_t::OT_COUNT)>;
|
||||
using StatsSummaryArray = std::array<StatsArray, static_cast<size_t>(LLPerfStats::ObjType_t::OT_COUNT)>;
|
||||
|
||||
|
|
|
|||
|
|
@ -742,6 +742,10 @@ bool idle_startup()
|
|||
gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel"));
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:Ansariel> Added to determine if toolbar gets hidden when empty
|
||||
if (gToolBarView)
|
||||
gToolBarView->setHideBottomOnEmpty(FSCommon::isLegacySkin());
|
||||
|
||||
if (LLFeatureManager::getInstance()->isSafe())
|
||||
{
|
||||
LLNotificationsUtil::add("DisplaySetToSafe");
|
||||
|
|
|
|||
|
|
@ -131,9 +131,6 @@ bool LLToolBarView::postBuild()
|
|||
// <FS:Ansariel> Member variable needed for console chat bottom offset
|
||||
mBottomChatStack = findChild<LLView>("bottom_chat_stack");
|
||||
|
||||
// <FS:Ansariel> Added to determine if toolbar gets hidden when empty
|
||||
mHideBottomOnEmpty = FSCommon::isLegacySkin();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -102,9 +102,12 @@ public:
|
|||
bool isModified() const;
|
||||
|
||||
// <FS:Ansariel> Getters for member variables needed for console chat bottom offset
|
||||
LLView* getBottomChatStack() const { return mBottomChatStack; };
|
||||
LLView* getBottomChatStack() const { return mBottomChatStack; }
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:Ansariel> Added to determine if toolbar gets hidden when empty
|
||||
void setHideBottomOnEmpty(bool hideBottomOnEmpty) { mHideBottomOnEmpty = hideBottomOnEmpty; }
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
LLToolBarView(const Params&);
|
||||
|
|
|
|||
|
|
@ -420,7 +420,7 @@ void LLViewerTextureList::dump()
|
|||
LL_CONT << image->getNumVolumes(index) << " ";
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
LL_CONT << " http://asset.siva.lindenlab.com/" << image->getID() << ".texture"
|
||||
LL_CONT << " " << image->getID().asString().substr(0, 7)
|
||||
<< LL_ENDL;
|
||||
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
|
||||
image_counts[(image->getDiscardLevel() + 1)] += 1; // Need to add +1 to make up for -1 being a possible value
|
||||
|
|
|
|||
|
|
@ -7327,11 +7327,16 @@ void LLViewerWindow::setUIVisibility(bool visible)
|
|||
// LLPanelTopInfoBar::getInstance()->setVisible(visible? gSavedSettings.getBOOL("ShowMiniLocationPanel") : false);
|
||||
mStatusBarContainer->setVisible(visible);
|
||||
|
||||
// <FS:Zi> hide utility bar if we are on a skin that uses it, e.g. Vintage
|
||||
LLView* utilityBarStack = mRootView->findChildView("chat_bar_utility_bar_stack");
|
||||
if (utilityBarStack)
|
||||
// <FS:Zi> hide utility bar if we are on a skin that uses it, i.e. Vintage
|
||||
// Beq Note: Added a skin check to fix FIRE-29517 "hitch when entering mouselook"
|
||||
// This was caused having to search for a non-existent childview. If another skin other than vintage
|
||||
// ever needs chat_bar_utility_bar_stack in the future, this will need to be updated.
|
||||
if (FSCommon::isLegacySkin())
|
||||
{
|
||||
utilityBarStack->setVisible(visible);
|
||||
if (LLView* utilityBarStack = mRootView->findChildView("chat_bar_utility_bar_stack"); utilityBarStack)
|
||||
{
|
||||
utilityBarStack->setVisible(visible);
|
||||
}
|
||||
}
|
||||
// </FS:Zi>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -596,7 +596,6 @@ with the same filename but different name
|
|||
|
||||
<!-- FS:Beq: Poser icons -->
|
||||
<texture name="Poser_Visual_On" file_name="icons/visual_pose_enabled.png" />
|
||||
<texture name="Poser_Visual_Off" file_name="icons/visual_pose_disabled.png" />
|
||||
|
||||
|
||||
<!-- FS:Ansariel: Icon for script errors in V1 status bar -->
|
||||
|
|
|
|||
|
|
@ -145,6 +145,9 @@
|
|||
<string name="ParsingErrorPositionInvalidModel">
|
||||
Netz kann nicht ohne Positionsdaten verarbeitet werden - ungültiges Modell.
|
||||
</string>
|
||||
<string name="ParsingErrorEmptyInvBindInvalidModel">
|
||||
Geriggtes Netz kann nicht ohne InvBind-Daten verarbeitet werden - ungültiges Modell.
|
||||
</string>
|
||||
|
||||
<panel name="left_panel">
|
||||
<panel name="model_name_representation_panel">
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@
|
|||
<string name="ParsingErrorNoRoot">Document has no root</string>
|
||||
<string name="ParsingErrorNoScene">Document has no visual_scene</string>
|
||||
<string name="ParsingErrorPositionInvalidModel">Unable to process mesh without position data. Invalid model.</string>
|
||||
<!-- FS:Beq FIRE-34811 Crash during import due to missing inv_bind_matrices. -->
|
||||
<string name="ParsingErrorEmptyInvBindInvalidModel">Unable to process rigged mesh without InvBind data. Invalid model.</string>
|
||||
<!-- /FS:Beq FIRE-34811 Crash during import due to missing inv_bind_matrices. -->
|
||||
|
||||
<panel
|
||||
follows="top|left"
|
||||
|
|
|
|||
|
|
@ -3807,7 +3807,7 @@
|
|||
</check_box>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Slop-mo Animation - Your Avatar and Viewer"
|
||||
label="Slow-mo Animation - Your Avatar and Viewer"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
top_pad="10"
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
<check_box label="Guide de cadrage" tool_tip="Affiche le guide de cadrage (règle des tiers) à l'intérieur du cadre de la photo." name="show_guides"/>
|
||||
<button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquez pour actualiser"/>
|
||||
<button label="Aperçu" name="big_preview_btn" tool_tip="Cliquez pour afficher l'aperçu"/>
|
||||
<text name="store_label">
|
||||
Publier en tant que :
|
||||
</text>
|
||||
<combo_box name="stores_combobox" tool_tip="Si vous avez une ou plusieurs boutiques Easy Blogger attribuées sur Primfeed, elles apparaîtront ici."/>
|
||||
<text name="description_label">
|
||||
Description :
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
<check_box label="フレームのガイドを表示" tool_tip="スナップショットフレーム内にフレームのガイド(三分割法)を表示します。" name="show_guides"/>
|
||||
<button label="リフレッシュ" name="new_snapshot_btn" tool_tip="クリックでリフレッシュします。"/>
|
||||
<button label="プレビュー" name="big_preview_btn" tool_tip="クリックでプレビューを切り替えます。"/>
|
||||
<text name="store_label">
|
||||
投稿者:
|
||||
</text>
|
||||
<combo_box name="stores_combobox" tool_tip="Primfeedに1つ以上の簡単なブロガーストアが割り当てられている場合は、ここに表示されます。"/>
|
||||
<text name="description_label">
|
||||
説明:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@
|
|||
<string name="ParsingErrorNoRoot">Dokument nie ma elementu głównego</string>
|
||||
<string name="ParsingErrorNoScene">Dokument nie zawiera visual_scene</string>
|
||||
<string name="ParsingErrorPositionInvalidModel">Nie można przetworzyć meszu bez danych pozycji. Nieprawidłowy model.</string>
|
||||
<string name="ParsingErrorEmptyInvBindInvalidModel">Nie można przetworzyć meszu bez danych InvBind. Nieprawidłowy model.</string>
|
||||
<panel name="left_panel">
|
||||
<panel name="model_name_representation_panel">
|
||||
<text name="name_label">
|
||||
|
|
|
|||
|
|
@ -468,6 +468,7 @@
|
|||
<button label="Добавить" name="add_allowed" />
|
||||
<button label="Удалить" label_selected="Удалить" name="remove_allowed" />
|
||||
<button label="Экспорт" label_selected="Экспорт" name="export_allowed" />
|
||||
<button label="Импорт" label_selected="Импорт" name="import_allowed" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID — по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
<panel name="Banned_layout_panel">
|
||||
<text name="BanCheck">
|
||||
|
|
@ -480,6 +481,7 @@
|
|||
<button label="Добавить" name="add_banned"/>
|
||||
<button label="Удалить" label_selected="Удалить" name="remove_banned" />
|
||||
<button label="Экспорт" label_selected="Экспорт" name="export_banned" />
|
||||
<button label="Импорт" label_selected="Импорт" name="import_banned" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID — по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel label="Приключения" name="land_experiences_panel"/>
|
||||
|
|
|
|||
|
|
@ -207,10 +207,13 @@
|
|||
<panel title="Настр." name="settings_panel">
|
||||
<text name="trackpad_sensitivity_label">Чувствительность трекпада:</text>
|
||||
<slider name="trackpad_sensitivity_slider" tool_tip="Регулирует чувствительность трекбола"/>
|
||||
<check_box name="natural_direction_checkbox" label="Используйте естественное выравнивание" tool_tip="Скелет имеет неестественные вращения суставов по умолчанию. Это усложняет позирование. Если отмечено, суставы будут вращаться более естественно." />
|
||||
|
||||
<check_box name="stop_posing_on_close_checkbox" label="Стоп позы по закрытию" tool_tip="Не прерывать позу может быть полезно, если вы много работаете и не хотите случайно потерять ее."/>
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="Сброс базовый поворот" tool_tip="При первом редактировании поворота обнулите его значение. Это означает, что в вашей работе можно сохранить позу (а не разницу, см. раздел Загрузка/сохранение). Рядом с каждым суставом, экспорт которого вы обнулили, появляется зеленая галочка."/>
|
||||
<check_box name="also_save_bvh_checkbox" label="Запись BVH при сохранении**" tool_tip="Когда вы сохраняете свою позу, также запишется файл BVH, который можно загрузить через 'Build > Upload > Animation', чтобы позировать себя или других в мире. Это требует, чтобы суставы сбросили свою 'базу' на ноль, потому что BVH требует оригинальной работы."/>
|
||||
<check_box name="confirm_overwrite_on_save_checkbox" label="Подтвердить перезапись" tool_tip="При сохранении позы, если файл уже существует, вам необходимо нажать кнопку сохранения еще раз, чтобы подтвердить, что вы действительно хотите перезаписать его."/>
|
||||
<check_box name="natural_direction_checkbox" label="Используйте естественное выравнивание" tool_tip="Скелет имеет неестественные вращения суставов по умолчанию. Это усложняет позирование. Если отмечено, суставы будут вращаться более естественно." />
|
||||
<check_box name="show_joint_markers_checkbox" label="Показать маркеры суставов" tool_tip="Покажите небольшие индикаторы, помогающие выбрать суставы при визуальном позировании."/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<button name="toggleVisualManipulators" tool_tip="Включать и выключать визуальные манипуляторы"/>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@
|
|||
<check_box label="Направляющие кадрирования" tool_tip="Показать направляющую кадрирования (правило третей) внутри рамки снимка." name="show_guides" />
|
||||
<button label="Обновить" name="new_snapshot_btn" tool_tip="Нажмите, чтобы обновить"/>
|
||||
<button label="Просмотр" name="big_preview_btn" tool_tip="Нажмите, чтобы переключить предварительный просмотр"/>
|
||||
<text name="store_label">Опубликовать как:</text>
|
||||
<combo_box name="stores_combobox" tool_tip="Если у вас есть один или несколько простых магазинов блогеров, назначенных на Primfeed, они появятся здесь."/>
|
||||
<text name="description_label">Описание:</text>
|
||||
<check_box label="Включить местоположение" name="add_location_cb"/>
|
||||
<check_box label="Добавить в публичную галерею" name="primfeed_add_to_public_gallery"/>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
<button label="Добавить..." name="add_estate_manager_btn"/>
|
||||
<button label="Удалить..." name="remove_estate_manager_btn"/>
|
||||
<button label="Экспорт..." name="export_estate_manager_btn"/>
|
||||
<button label="Импорт..." name="import_estate_manager_btn" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID - по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
<panel label="Разрешенные" name="allowed_panel">
|
||||
<panel label="top_panel" name="allowed_search_panel">
|
||||
|
|
@ -26,6 +27,7 @@
|
|||
<button label="Добавить..." name="add_allowed_avatar_btn"/>
|
||||
<button label="Удалить..." name="remove_allowed_avatar_btn"/>
|
||||
<button label="Экспорт..." name="export_allowed_list_btn"/>
|
||||
<button label="Импорт..." name="import_allowed_list_btn" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID - по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
<panel label="Допущенные Группы" name="allowed_groups_panel">
|
||||
<panel label="top_panel" name="allowed_group_search_panel">
|
||||
|
|
@ -41,6 +43,7 @@
|
|||
<button label="Добавить..." name="add_allowed_group_btn"/>
|
||||
<button label="Удалить..." name="remove_allowed_group_btn"/>
|
||||
<button label="Экспорт..." name="export_allowed_group_btn"/>
|
||||
<button label="Импорт..." name="import_allowed_group_btn" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID - по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
<panel label="Заблокированы" name="banned_panel">
|
||||
<panel label="top_panel" name="banned_search_panel">
|
||||
|
|
@ -59,6 +62,7 @@
|
|||
<button label="Добавить..." name="add_banned_avatar_btn"/>
|
||||
<button label="Удалить..." name="remove_banned_avatar_btn"/>
|
||||
<button label="Экспорт..." name="export_banned_avatar_btn"/>
|
||||
<button label="Импорт..." name="import_banned_avatar_btn" tool_tip="Импортируйте CSV-файл, содержащий только действительные UUID - по одному на строку, без дополнительных символов или форматирования."/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -6877,5 +6877,10 @@ ID объекта: [INSPECTING_KEY]
|
|||
<string name="FSObjectInventoryElements">[NUM_ELEMENTS] элементов</string>
|
||||
<string name="OpenSimInventoryValidationErrorGenericHelp">команда поддержки оператора вашей сетки</string>
|
||||
<string name="Unlimited">Неограниченный</string>
|
||||
|
||||
<string name="ListEmpty">Список пуст</string>
|
||||
<string name="NoValidUUIDs">В импортированном файле не найдено действительных UUID.</string>
|
||||
<string name="ImportListTooLarge">Слишком много записей. CSV-файл содержит [COUNT] записей, а доступно [MAX] слотов.</string>
|
||||
<string name="ImportSuccessful">Успешно обработано [COUNT] записей.</string>
|
||||
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@
|
|||
<check_box label="顯示指導線" name="show_guides" tool_tip="在拍攝範圍內顯示拍攝指導線(例如三分法)。"/>
|
||||
<button label="更新" name="new_snapshot_btn" tool_tip="點擊更新"/>
|
||||
<button label="預覽" name="big_preview_btn" tool_tip="點擊切換預覽狀態"/>
|
||||
<text name="store_label">
|
||||
發布為:
|
||||
</text>
|
||||
<combo_box name="stores_combobox" tool_tip="如果您在Primfeed上分配了一個或多個EasyBloggers商店,它們將顯示在這裡。"/>
|
||||
<text name="description_label">
|
||||
描述:
|
||||
</text>
|
||||
|
|
|
|||
Loading…
Reference in New Issue