Merge branch 'master' of https://github.com/FirestormViewer/phoenix-firestorm
# Conflicts: # indra/llprimitive/llgltfmaterial.h # indra/newview/llgltfmateriallist.cpp # indra/newview/llviewerregion.h # indra/newview/llvocache.cppmaster
|
|
@ -5,7 +5,7 @@ on:
|
|||
pull_request:
|
||||
push:
|
||||
branches: ["main", "release/*", "project/*"]
|
||||
tags: ["Second_Life_*"]
|
||||
tags: ["Second_Life*"]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
|
@ -176,16 +176,22 @@ jobs:
|
|||
# seen before, so numerous tests don't know about it.
|
||||
[[ "$arch" == "MINGW6" ]] && arch=CYGWIN
|
||||
export AUTOBUILD="$(which autobuild)"
|
||||
# Build with a tag like "Second_Life_Project_Shiny#abcdef0" to get a
|
||||
# viewer channel "Second Life Project Shiny" (ignoring "#hash",
|
||||
# needed to disambiguate tags).
|
||||
if [[ "$GITHUB_REF_TYPE" == "tag" && "${GITHUB_REF_NAME:0:12}" == "Second_Life_" ]]
|
||||
then viewer_channel="${GITHUB_REF_NAME%#*}"
|
||||
export viewer_channel="${viewer_channel//_/ }"
|
||||
else export viewer_channel="Second Life Test"
|
||||
|
||||
# determine the viewer channel from the branch name
|
||||
branch=$AUTOBUILD_VCS_BRANCH
|
||||
IFS='/' read -ra ba <<< $branch
|
||||
prefix=${ba[0]}
|
||||
if [ "$prefix" == "project" ]; then
|
||||
IFS='_' read -ra prj <<< "${ba[1]}"
|
||||
# uppercase first letter of each word
|
||||
export viewer_channel="Second Life Project ${prj[*]^}"
|
||||
elif [[ "$prefix" == "release" || "$prefix" == "main" ]];
|
||||
then
|
||||
export viewer_channel="Second Life Release"
|
||||
else
|
||||
export viewer_channel="Second Life Test"
|
||||
fi
|
||||
echo "viewer_channel=$viewer_channel" >> "$GITHUB_OUTPUT"
|
||||
|
||||
# On windows we need to point the build to the correct python
|
||||
# as neither CMake's FindPython nor our custom Python.cmake module
|
||||
# will resolve the correct interpreter location.
|
||||
|
|
@ -354,7 +360,8 @@ jobs:
|
|||
release:
|
||||
needs: [build, sign-and-package-windows, sign-and-package-mac]
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'Second_Life_')
|
||||
# Build with a tag like "Second_Life#abcdef0" to generate a release page (used for builds we are planning to deploy).
|
||||
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'Second_Life')
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
|
|
|
|||
1
build.sh
|
|
@ -178,6 +178,7 @@ pre_build()
|
|||
|
||||
"$autobuild" configure --quiet -c $variant \
|
||||
${eval_autobuild_configure_parameters:---} \
|
||||
-DLL_TESTS:BOOL=ON \
|
||||
-DPACKAGE:BOOL=ON \
|
||||
-DHAVOK:BOOL="$HAVOK" \
|
||||
-DRELEASE_CRASH_REPORTING:BOOL="$RELEASE_CRASH_REPORTING" \
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ namespace tut
|
|||
done = res;
|
||||
*done = false;
|
||||
}
|
||||
virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux)
|
||||
virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux, U32)
|
||||
{
|
||||
*done = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,13 +122,20 @@ public:
|
|||
F32 mRoughnessFactor = 1.f;
|
||||
F32 mAlphaCutoff = 0.5f;
|
||||
|
||||
bool mDoubleSided = false;
|
||||
AlphaMode mAlphaMode = ALPHA_MODE_OPAQUE;
|
||||
|
||||
bool mDoubleSided = false;
|
||||
|
||||
// override specific flags for state that can't use off-by-epsilon or UUID hack
|
||||
bool mOverrideDoubleSided = false;
|
||||
bool mOverrideAlphaMode = false;
|
||||
|
||||
// These fields are local to viewer and are a part of local bitmap support
|
||||
typedef std::map<LLUUID, LLUUID> local_tex_map_t;
|
||||
local_tex_map_t mTrackingIdToLocalTexture;
|
||||
|
||||
public:
|
||||
|
||||
// *TODO: If/when we implement additional GLTF extensions, they may not be
|
||||
// compatible with our GLTF terrain implementation. We may want to disallow
|
||||
// materials with some features from being set on terrain, if their
|
||||
|
|
@ -240,10 +247,6 @@ public:
|
|||
virtual bool replaceLocalTexture(const LLUUID& tracking_id, const LLUUID &old_id, const LLUUID& new_id);
|
||||
virtual void updateTextureTracking();
|
||||
|
||||
// These fields are local to viewer and are a part of local bitmap support
|
||||
typedef std::map<LLUUID, LLUUID> local_tex_map_t;
|
||||
local_tex_map_t mTrackingIdToLocalTexture;
|
||||
|
||||
protected:
|
||||
static LLVector2 vec2FromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const LLVector2& default_value);
|
||||
static F32 floatFromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const F32 default_value);
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ namespace tut
|
|||
#if LL_WINDOWS
|
||||
// If any fields are added/changed, these tests should be updated (consider also updating ASSET_VERSION in LLGLTFMaterial)
|
||||
// This test result will vary between compilers, so only test a single platform
|
||||
ensure_equals("fields supported for GLTF (sizeof check)", sizeof(LLGLTFMaterial), 216);
|
||||
ensure_equals("fields supported for GLTF (sizeof check)", sizeof(LLGLTFMaterial), 224);
|
||||
#endif
|
||||
#endif
|
||||
ensure_equals("LLGLTFMaterial texture info count", (U32)LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT, 4);
|
||||
|
|
|
|||
|
|
@ -1149,7 +1149,6 @@ struct FSPanelFaceSetTEFunctor : public LLSelectedTEFunctor
|
|||
|
||||
bool align_planar = mPanel->mCheckPlanarAlign->get();
|
||||
|
||||
llassert(comboTexGen);
|
||||
llassert(object);
|
||||
|
||||
if (ctrlTexScaleS)
|
||||
|
|
|
|||
|
|
@ -957,122 +957,68 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht
|
|||
|
||||
if (callback && !callback.empty())
|
||||
{
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
uuid_list_t ids;
|
||||
bool needs_callback = true;
|
||||
LLUUID id(LLUUID::null);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case COPYLIBRARYCATEGORY:
|
||||
case FETCHCATEGORYCATEGORIES:
|
||||
case FETCHCATEGORYCHILDREN:
|
||||
case FETCHCATEGORYSUBSET:
|
||||
case FETCHCATEGORYLINKS:
|
||||
case FETCHCOF:
|
||||
if (result.has("category_id"))
|
||||
case COPYLIBRARYCATEGORY:
|
||||
case FETCHCATEGORYCATEGORIES:
|
||||
case FETCHCATEGORYCHILDREN:
|
||||
case FETCHCATEGORYSUBSET:
|
||||
case FETCHCATEGORYLINKS:
|
||||
case FETCHCOF:
|
||||
if (result.has("category_id"))
|
||||
{
|
||||
id = result["category_id"];
|
||||
}
|
||||
break;
|
||||
case FETCHITEM:
|
||||
if (result.has("item_id"))
|
||||
{
|
||||
// Error message might contain an item_id!!!
|
||||
id = result["item_id"];
|
||||
}
|
||||
if (result.has("linked_id"))
|
||||
{
|
||||
id = result["linked_id"];
|
||||
}
|
||||
break;
|
||||
case CREATEINVENTORY:
|
||||
// CREATEINVENTORY can have multiple callbacks
|
||||
if (result.has("_created_categories"))
|
||||
{
|
||||
LLSD& cats = result["_created_categories"];
|
||||
LLSD::array_const_iterator cat_iter;
|
||||
for (cat_iter = cats.beginArray(); cat_iter != cats.endArray(); ++cat_iter)
|
||||
{
|
||||
ids.emplace(result["category_id"]);
|
||||
LLUUID cat_id = *cat_iter;
|
||||
callback(cat_id);
|
||||
needs_callback = false;
|
||||
}
|
||||
break;
|
||||
case FETCHITEM:
|
||||
if (result.has("linked_id"))
|
||||
}
|
||||
if (result.has("_created_items"))
|
||||
{
|
||||
LLSD& items = result["_created_items"];
|
||||
LLSD::array_const_iterator item_iter;
|
||||
for (item_iter = items.beginArray(); item_iter != items.endArray(); ++item_iter)
|
||||
{
|
||||
ids.emplace(result["linked_id"]);
|
||||
LLUUID item_id = *item_iter;
|
||||
callback(item_id);
|
||||
needs_callback = false;
|
||||
}
|
||||
else if (result.has("item_id"))
|
||||
{
|
||||
// Error message might contain an item_id!!!
|
||||
ids.emplace(result["item_id"]);
|
||||
}
|
||||
break;
|
||||
case COPYINVENTORY:
|
||||
case CREATEINVENTORY:
|
||||
{
|
||||
AISUpdate::parseUUIDArray(result, "_created_categories", ids);
|
||||
AISUpdate::parseUUIDArray(result, "_created_items", ids);
|
||||
}
|
||||
break;
|
||||
case UPDATECATEGORY:
|
||||
{
|
||||
AISUpdate::parseUUIDArray(result, "_updated_categories", ids);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Call callback at least once regardless of failure.
|
||||
if (ids.empty())
|
||||
{
|
||||
ids.emplace(LLUUID::null);
|
||||
}
|
||||
|
||||
for (const auto& id : ids)
|
||||
if (needs_callback)
|
||||
{
|
||||
// Call callback at least once regardless of failure.
|
||||
// UPDATEITEM doesn't expect an id
|
||||
callback(id);
|
||||
}
|
||||
|
||||
// [/SL:KB]
|
||||
//bool needs_callback = true;
|
||||
//LLUUID id(LLUUID::null);
|
||||
|
||||
//switch (type)
|
||||
//{
|
||||
//case COPYLIBRARYCATEGORY:
|
||||
//case FETCHCATEGORYCATEGORIES:
|
||||
//case FETCHCATEGORYCHILDREN:
|
||||
//case FETCHCATEGORYSUBSET:
|
||||
//case FETCHCATEGORYLINKS:
|
||||
//case FETCHCOF:
|
||||
// if (result.has("category_id"))
|
||||
// {
|
||||
// id = result["category_id"];
|
||||
// }
|
||||
// break;
|
||||
//case FETCHITEM:
|
||||
// if (result.has("item_id"))
|
||||
// {
|
||||
// // Error message might contain an item_id!!!
|
||||
// id = result["item_id"];
|
||||
// }
|
||||
// if (result.has("linked_id"))
|
||||
// {
|
||||
// id = result["linked_id"];
|
||||
// }
|
||||
// break;
|
||||
//case CREATEINVENTORY:
|
||||
// // CREATEINVENTORY can have multiple callbacks
|
||||
// if (result.has("_created_categories"))
|
||||
// {
|
||||
// LLSD& cats = result["_created_categories"];
|
||||
// LLSD::array_const_iterator cat_iter;
|
||||
// for (cat_iter = cats.beginArray(); cat_iter != cats.endArray(); ++cat_iter)
|
||||
// {
|
||||
// LLUUID cat_id = *cat_iter;
|
||||
// callback(cat_id);
|
||||
// needs_callback = false;
|
||||
// }
|
||||
// }
|
||||
// if (result.has("_created_items"))
|
||||
// {
|
||||
// LLSD& items = result["_created_items"];
|
||||
// LLSD::array_const_iterator item_iter;
|
||||
// for (item_iter = items.beginArray(); item_iter != items.endArray(); ++item_iter)
|
||||
// {
|
||||
// LLUUID item_id = *item_iter;
|
||||
// callback(item_id);
|
||||
// needs_callback = false;
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
//default:
|
||||
// break;
|
||||
//}
|
||||
|
||||
//if (needs_callback)
|
||||
//{
|
||||
// // Call callback at least once regardless of failure.
|
||||
// // UPDATEITEM doesn't expect an id
|
||||
// callback(id);
|
||||
//}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,10 +114,7 @@ public:
|
|||
void parseUpdate(const LLSD& update);
|
||||
void parseMeta(const LLSD& update);
|
||||
void parseContent(const LLSD& update);
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
static void parseUUIDArray(const LLSD& content, const std::string& name, uuid_list_t& ids);
|
||||
// [/SL:KB]
|
||||
// void parseUUIDArray(const LLSD& content, const std::string& name, uuid_list_t& ids);
|
||||
void parseUUIDArray(const LLSD& content, const std::string& name, uuid_list_t& ids);
|
||||
void parseLink(const LLSD& link_map, S32 depth);
|
||||
void parseItem(const LLSD& link_map);
|
||||
void parseCategory(const LLSD& link_map, S32 depth);
|
||||
|
|
|
|||
|
|
@ -714,20 +714,16 @@ public:
|
|||
bool pollMissingWearables();
|
||||
bool isMissingCompleted();
|
||||
void recoverMissingWearable(LLWearableType::EType type);
|
||||
// void clearCOFLinksForMissingWearables();
|
||||
void clearCOFLinksForMissingWearables();
|
||||
|
||||
void onWearableAssetFetch(LLViewerWearable *wearable);
|
||||
void onAllComplete();
|
||||
|
||||
// [SL:KB] - Patch: Appearance-COFCorruption | Checked: 2010-04-14 (Catznip-2.0)
|
||||
bool pollStopped();
|
||||
// [/SL:KB]
|
||||
|
||||
typedef std::list<LLFoundData> found_list_t;
|
||||
found_list_t& getFoundList();
|
||||
void eraseTypeToLink(LLWearableType::EType type);
|
||||
void eraseTypeToRecover(LLWearableType::EType type);
|
||||
// void setObjItems(const LLInventoryModel::item_array_t& items);
|
||||
void setObjItems(const LLInventoryModel::item_array_t& items);
|
||||
void setGestItems(const LLInventoryModel::item_array_t& items);
|
||||
bool isMostRecent();
|
||||
void handleLateArrivals();
|
||||
|
|
@ -737,7 +733,7 @@ public:
|
|||
|
||||
private:
|
||||
found_list_t mFoundList;
|
||||
// LLInventoryModel::item_array_t mObjItems;
|
||||
LLInventoryModel::item_array_t mObjItems;
|
||||
LLInventoryModel::item_array_t mGestItems;
|
||||
typedef std::set<S32> type_set_t;
|
||||
type_set_t mTypesToRecover;
|
||||
|
|
@ -814,11 +810,10 @@ void LLWearableHoldingPattern::eraseTypeToRecover(LLWearableType::EType type)
|
|||
mTypesToRecover.erase(type);
|
||||
}
|
||||
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-2.1
|
||||
//void LLWearableHoldingPattern::setObjItems(const LLInventoryModel::item_array_t& items)
|
||||
//{
|
||||
// mObjItems = items;
|
||||
//}
|
||||
void LLWearableHoldingPattern::setObjItems(const LLInventoryModel::item_array_t& items)
|
||||
{
|
||||
mObjItems = items;
|
||||
}
|
||||
|
||||
void LLWearableHoldingPattern::setGestItems(const LLInventoryModel::item_array_t& items)
|
||||
{
|
||||
|
|
@ -925,56 +920,55 @@ void LLWearableHoldingPattern::onAllComplete()
|
|||
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
// LL_DEBUGS("Avatar") << self_av_string() << "Updating " << mObjItems.size() << " attachments" << LL_ENDL;
|
||||
// LLAgentWearables::llvo_vec_t objects_to_remove;
|
||||
// LLAgentWearables::llvo_vec_t objects_to_retain;
|
||||
// LLInventoryModel::item_array_t items_to_add;
|
||||
//
|
||||
// LLAgentWearables::findAttachmentsAddRemoveInfo(mObjItems,
|
||||
// objects_to_remove,
|
||||
// objects_to_retain,
|
||||
// items_to_add);
|
||||
//
|
||||
// LL_DEBUGS("Avatar") << self_av_string() << "Removing " << objects_to_remove.size()
|
||||
// << " attachments" << LL_ENDL;
|
||||
//
|
||||
// // Here we remove the attachment pos overrides for *all*
|
||||
// // attachments, even those that are not being removed. This is
|
||||
// // needed to get joint positions all slammed down to their
|
||||
// // pre-attachment states.
|
||||
// gAgentAvatarp->clearAttachmentOverrides();
|
||||
//
|
||||
// if (objects_to_remove.size() || items_to_add.size())
|
||||
// {
|
||||
// LL_DEBUGS("Avatar") << "ATT will remove " << objects_to_remove.size()
|
||||
// << " and add " << items_to_add.size() << " items" << LL_ENDL;
|
||||
// }
|
||||
//
|
||||
// // Take off the attachments that will no longer be in the outfit.
|
||||
// LLAgentWearables::userRemoveMultipleAttachments(objects_to_remove);
|
||||
|
||||
LL_DEBUGS("Avatar") << self_av_string() << "Updating " << mObjItems.size() << " attachments" << LL_ENDL;
|
||||
LLAgentWearables::llvo_vec_t objects_to_remove;
|
||||
LLAgentWearables::llvo_vec_t objects_to_retain;
|
||||
LLInventoryModel::item_array_t items_to_add;
|
||||
|
||||
LLAgentWearables::findAttachmentsAddRemoveInfo(mObjItems,
|
||||
objects_to_remove,
|
||||
objects_to_retain,
|
||||
items_to_add);
|
||||
|
||||
LL_DEBUGS("Avatar") << self_av_string() << "Removing " << objects_to_remove.size()
|
||||
<< " attachments" << LL_ENDL;
|
||||
|
||||
// Here we remove the attachment pos overrides for *all*
|
||||
// attachments, even those that are not being removed. This is
|
||||
// needed to get joint positions all slammed down to their
|
||||
// pre-attachment states.
|
||||
gAgentAvatarp->clearAttachmentOverrides();
|
||||
|
||||
if (objects_to_remove.size() || items_to_add.size())
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "ATT will remove " << objects_to_remove.size()
|
||||
<< " and add " << items_to_add.size() << " items" << LL_ENDL;
|
||||
}
|
||||
|
||||
// Take off the attachments that will no longer be in the outfit.
|
||||
LLAgentWearables::userRemoveMultipleAttachments(objects_to_remove);
|
||||
|
||||
// Update wearables.
|
||||
LL_INFOS("Avatar") << self_av_string() << "HP " << index() << " updating agent wearables with "
|
||||
<< mResolved << " wearable items " << LL_ENDL;
|
||||
LLAppearanceMgr::instance().updateAgentWearables(this);
|
||||
|
||||
// <FS:ND/> Merge; Changed in FS but not tagged with any FS: comment explaining by whom and the purpose
|
||||
// // Restore attachment pos overrides for the attachments that
|
||||
// // are remaining in the outfit.
|
||||
// for (LLAgentWearables::llvo_vec_t::iterator it = objects_to_retain.begin();
|
||||
// it != objects_to_retain.end();
|
||||
// ++it)
|
||||
// {
|
||||
// LLViewerObject *objectp = *it;
|
||||
// if (!objectp->isAnimatedObject())
|
||||
// {
|
||||
// gAgentAvatarp->addAttachmentOverridesForObject(objectp);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // Add new attachments to match those requested.
|
||||
// LL_DEBUGS("Avatar") << self_av_string() << "Adding " << items_to_add.size() << " attachments" << LL_ENDL;
|
||||
// LLAgentWearables::userAttachMultipleAttachments(items_to_add);
|
||||
// Restore attachment pos overrides for the attachments that
|
||||
// are remaining in the outfit.
|
||||
for (LLAgentWearables::llvo_vec_t::iterator it = objects_to_retain.begin();
|
||||
it != objects_to_retain.end();
|
||||
++it)
|
||||
{
|
||||
LLViewerObject *objectp = *it;
|
||||
if (!objectp->isAnimatedObject())
|
||||
{
|
||||
gAgentAvatarp->addAttachmentOverridesForObject(objectp);
|
||||
}
|
||||
}
|
||||
|
||||
// Add new attachments to match those requested.
|
||||
LL_DEBUGS("Avatar") << self_av_string() << "Adding " << items_to_add.size() << " attachments" << LL_ENDL;
|
||||
LLAgentWearables::userAttachMultipleAttachments(items_to_add);
|
||||
}
|
||||
|
||||
if (isFetchCompleted() && isMissingCompleted())
|
||||
|
|
@ -1012,12 +1006,6 @@ bool LLWearableHoldingPattern::pollFetchCompletion()
|
|||
{
|
||||
// runway skip here?
|
||||
LL_WARNS() << self_av_string() << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << LL_ENDL;
|
||||
|
||||
// [SL:KB] - Patch: Appearance-COFCorruption | Checked: 2010-04-14 (Catznip-2.0)
|
||||
// If we were signalled to stop then we shouldn't do anything else except poll for when it's safe to delete ourselves
|
||||
doOnIdleRepeating(boost::bind(&LLWearableHoldingPattern::pollStopped, this));
|
||||
return true;
|
||||
// [/SL:KB]
|
||||
}
|
||||
|
||||
bool completed = isFetchCompleted();
|
||||
|
|
@ -1088,11 +1076,6 @@ void recovered_item_cb(const LLUUID& item_id, LLWearableType::EType type, LLView
|
|||
{
|
||||
// runway skip here?
|
||||
LL_WARNS() << self_av_string() << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << LL_ENDL;
|
||||
|
||||
// [SL:KB] - Patch: Appearance-COFCorruption | Checked: 2010-04-14 (Catznip-2.0)
|
||||
// If we were signalled to stop then we shouldn't do anything else except poll for when it's safe to delete ourselves
|
||||
return;
|
||||
// [/SL:KB]
|
||||
}
|
||||
|
||||
LL_DEBUGS("Avatar") << self_av_string() << "Recovered item for type " << type << LL_ENDL;
|
||||
|
|
@ -1143,32 +1126,19 @@ bool LLWearableHoldingPattern::isMissingCompleted()
|
|||
return mTypesToLink.size()==0 && mTypesToRecover.size()==0;
|
||||
}
|
||||
|
||||
//void LLWearableHoldingPattern::clearCOFLinksForMissingWearables()
|
||||
//{
|
||||
// for (found_list_t::iterator it = getFoundList().begin(); it != getFoundList().end(); ++it)
|
||||
// {
|
||||
// LLFoundData &data = *it;
|
||||
// if ((data.mWearableType < LLWearableType::WT_COUNT) && (!data.mWearable))
|
||||
// {
|
||||
// // Wearable link that was never resolved; remove links to it from COF
|
||||
// LL_INFOS("Avatar") << self_av_string() << "HP " << index() << " removing link for unresolved item " << data.mItemID.asString() << LL_ENDL;
|
||||
// LLAppearanceMgr::instance().removeCOFItemLinks(data.mItemID);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
// [SL:KB] - Patch: Appearance-COFCorruption | Checked: 2010-04-14 (Catznip-2.0)
|
||||
bool LLWearableHoldingPattern::pollStopped()
|
||||
void LLWearableHoldingPattern::clearCOFLinksForMissingWearables()
|
||||
{
|
||||
// We have to keep on polling until we're sure that all callbacks have completed or they'll cause a crash
|
||||
if ( (isFetchCompleted()) && (isMissingCompleted()) )
|
||||
for (found_list_t::iterator it = getFoundList().begin(); it != getFoundList().end(); ++it)
|
||||
{
|
||||
delete this;
|
||||
return true;
|
||||
LLFoundData &data = *it;
|
||||
if ((data.mWearableType < LLWearableType::WT_COUNT) && (!data.mWearable))
|
||||
{
|
||||
// Wearable link that was never resolved; remove links to it from COF
|
||||
LL_INFOS("Avatar") << self_av_string() << "HP " << index() << " removing link for unresolved item " << data.mItemID.asString() << LL_ENDL;
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(data.mItemID);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// [/SL:KB]
|
||||
|
||||
bool LLWearableHoldingPattern::pollMissingWearables()
|
||||
{
|
||||
|
|
@ -1176,12 +1146,6 @@ bool LLWearableHoldingPattern::pollMissingWearables()
|
|||
{
|
||||
// runway skip here?
|
||||
LL_WARNS() << self_av_string() << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << LL_ENDL;
|
||||
|
||||
// [SL:KB] - Patch: Appearance-COFCorruption | Checked: 2010-04-14 (Catznip-2.0)
|
||||
// If we were signalled to stop then we shouldn't do anything else except poll for when it's safe to delete ourselves
|
||||
doOnIdleRepeating(boost::bind(&LLWearableHoldingPattern::pollStopped, this));
|
||||
return true;
|
||||
// [/SL:KB]
|
||||
}
|
||||
|
||||
bool timed_out = isTimedOut();
|
||||
|
|
@ -2889,72 +2853,6 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool enforce_item_restrictions,
|
|||
<< " descendent_count " << cof->getDescendentCount()
|
||||
<< " viewer desc count " << cof->getViewerDescendentCount() << LL_ENDL;
|
||||
}
|
||||
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-2.2
|
||||
// Update attachments to match those requested.
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
// Include attachments which should be in COF but don't have their link created yet
|
||||
std::set<LLUUID> pendingAttachments;
|
||||
if (LLAttachmentsMgr::instance().getPendingAttachments(pendingAttachments))
|
||||
{
|
||||
for (const LLUUID& idAttachItem : pendingAttachments)
|
||||
{
|
||||
if ( (!gAgentAvatarp->isWearingAttachment(idAttachItem)) || (isLinkedInCOF(idAttachItem)) )
|
||||
{
|
||||
LLAttachmentsMgr::instance().clearPendingAttachmentLink(idAttachItem);
|
||||
continue;
|
||||
}
|
||||
|
||||
LLViewerInventoryItem* pAttachItem = gInventory.getItem(idAttachItem);
|
||||
if (pAttachItem)
|
||||
{
|
||||
obj_items.push_back(pAttachItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// (Start of LL code from LLWearableHoldingPattern::onAllComplete())
|
||||
LL_DEBUGS("Avatar") << self_av_string() << "Updating " << obj_items.size() << " attachments" << LL_ENDL;
|
||||
|
||||
LLAgentWearables::llvo_vec_t objects_to_remove;
|
||||
LLAgentWearables::llvo_vec_t objects_to_retain;
|
||||
LLInventoryModel::item_array_t items_to_add;
|
||||
LLAgentWearables::findAttachmentsAddRemoveInfo(obj_items, objects_to_remove, objects_to_retain, items_to_add);
|
||||
|
||||
// Here we remove the attachment pos overrides for *all*
|
||||
// attachments, even those that are not being removed. This is
|
||||
// needed to get joint positions all slammed down to their
|
||||
// pre-attachment states.
|
||||
gAgentAvatarp->clearAttachmentOverrides();
|
||||
// (End of LL code)
|
||||
|
||||
// Take off the attachments that will no longer be in the outfit.
|
||||
// (but don't remove attachments until avatar is fully loaded - should reduce random attaching/detaching/reattaching at log-on)
|
||||
if (gAgentAvatarp->isFullyLoaded())
|
||||
{
|
||||
LL_DEBUGS("Avatar") << self_av_string() << "Removing " << objects_to_remove.size() << " attachments" << LL_ENDL;
|
||||
LLAgentWearables::userRemoveMultipleAttachments(objects_to_remove);
|
||||
}
|
||||
|
||||
// (Start of LL code from LLWearableHoldingPattern::onAllComplete())
|
||||
// Restore attachment pos overrides for the attachments that are remaining in the outfit.
|
||||
for (LLAgentWearables::llvo_vec_t::iterator it = objects_to_retain.begin(); it != objects_to_retain.end(); ++it)
|
||||
{
|
||||
LLViewerObject *objectp = *it;
|
||||
if (!objectp->isAnimatedObject())
|
||||
{
|
||||
gAgentAvatarp->addAttachmentOverridesForObject(objectp);
|
||||
}
|
||||
}
|
||||
|
||||
// Add new attachments to match those requested.
|
||||
LL_DEBUGS("Avatar") << self_av_string() << "Adding " << items_to_add.size() << " attachments" << LL_ENDL;
|
||||
LLAgentWearables::userAttachMultipleAttachments(items_to_add);
|
||||
// (End of LL code)
|
||||
}
|
||||
// [/SL:KB]
|
||||
|
||||
if(!wear_items.size())
|
||||
{
|
||||
LLNotificationsUtil::add("CouldNotPutOnOutfit");
|
||||
|
|
@ -2969,7 +2867,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool enforce_item_restrictions,
|
|||
LLTimer hp_block_timer;
|
||||
LLWearableHoldingPattern* holder = new LLWearableHoldingPattern;
|
||||
|
||||
// holder->setObjItems(obj_items);
|
||||
holder->setObjItems(obj_items);
|
||||
holder->setGestItems(gest_items);
|
||||
|
||||
// Note: can't do normal iteration, because if all the
|
||||
|
|
@ -4692,9 +4590,6 @@ void LLAppearanceMgr::removeItemsFromAvatar(const uuid_vec_t& ids_to_remove, LLP
|
|||
if (!cb)
|
||||
cb = new LLUpdateAppearanceOnDestroy();
|
||||
removeCOFItemLinks(linked_item_id, cb, immediate_delete);
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
LLAttachmentsMgr::instance().clearPendingAttachmentLink(linked_item_id);
|
||||
// [/SL:KB]
|
||||
addDoomedTempAttachment(linked_item_id);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
|
|||
|
|
@ -153,9 +153,6 @@ public:
|
|||
// Attachment link management
|
||||
void unregisterAttachment(const LLUUID& item_id);
|
||||
void registerAttachment(const LLUUID& item_id);
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
bool getAttachmentInvLinkEnable() { return mAttachmentInvLinkEnabled; }
|
||||
// [/SL:KB]
|
||||
void setAttachmentInvLinkEnable(bool val);
|
||||
|
||||
// Add COF link to individual item.
|
||||
|
|
|
|||
|
|
@ -46,31 +46,10 @@ const F32 MAX_ATTACHMENT_REQUEST_LIFETIME = 30.0F;
|
|||
const F32 MIN_RETRY_REQUEST_TIME = 5.0F;
|
||||
const F32 MAX_BAD_COF_TIME = 30.0F;
|
||||
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
class LLRegisterAttachmentCallback : public LLRequestServerAppearanceUpdateOnDestroy
|
||||
{
|
||||
public:
|
||||
LLRegisterAttachmentCallback()
|
||||
: LLRequestServerAppearanceUpdateOnDestroy()
|
||||
{
|
||||
}
|
||||
|
||||
~LLRegisterAttachmentCallback() override
|
||||
{
|
||||
}
|
||||
|
||||
void fire(const LLUUID& idItem) override
|
||||
{
|
||||
LLAttachmentsMgr::instance().onRegisterAttachmentComplete(idItem);
|
||||
LLRequestServerAppearanceUpdateOnDestroy::fire(idItem);
|
||||
}
|
||||
};
|
||||
// [/SL:KB]
|
||||
|
||||
LLAttachmentsMgr::LLAttachmentsMgr():
|
||||
mAttachmentRequests("attach",MIN_RETRY_REQUEST_TIME),
|
||||
mDetachRequests("detach",MIN_RETRY_REQUEST_TIME)
|
||||
// , mQuestionableCOFLinks("badcof",MAX_BAD_COF_TIME)
|
||||
mDetachRequests("detach",MIN_RETRY_REQUEST_TIME),
|
||||
mQuestionableCOFLinks("badcof",MAX_BAD_COF_TIME)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -130,11 +109,6 @@ void LLAttachmentsMgr::addAttachmentRequest(const LLUUID& item_id,
|
|||
|
||||
void LLAttachmentsMgr::onAttachmentRequested(const LLUUID& item_id)
|
||||
{
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
if (item_id.isNull())
|
||||
return;
|
||||
// [/SL:KB]
|
||||
|
||||
LLViewerInventoryItem *item = gInventory.getItem(item_id);
|
||||
LL_DEBUGS("Avatar") << "ATT attachment was requested "
|
||||
<< (item ? item->getName() : "UNKNOWN") << " id " << item_id << LL_ENDL;
|
||||
|
|
@ -168,7 +142,7 @@ void LLAttachmentsMgr::onIdle()
|
|||
|
||||
expireOldDetachRequests();
|
||||
|
||||
//checkInvalidCOFLinks();
|
||||
checkInvalidCOFLinks();
|
||||
|
||||
spamStatusInfo();
|
||||
}
|
||||
|
|
@ -280,13 +254,6 @@ void LLAttachmentsMgr::linkRecentlyArrivedAttachments()
|
|||
{
|
||||
if (mRecentlyArrivedAttachments.size())
|
||||
{
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
if (!LLAppearanceMgr::instance().getAttachmentInvLinkEnable())
|
||||
{
|
||||
return;
|
||||
}
|
||||
// [/SL:KB]
|
||||
|
||||
// One or more attachments have arrived but have not yet been
|
||||
// processed for COF links
|
||||
if (mAttachmentRequests.empty())
|
||||
|
|
@ -333,68 +300,17 @@ void LLAttachmentsMgr::linkRecentlyArrivedAttachments()
|
|||
}
|
||||
if (ids_to_link.size())
|
||||
{
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
LLPointer<LLInventoryCallback> cb = NULL;
|
||||
for (uuid_vec_t::const_iterator itAttach = ids_to_link.begin(); itAttach != ids_to_link.end(); ++itAttach)
|
||||
{
|
||||
const LLUUID& idAttach = *itAttach;
|
||||
if (std::find(mPendingAttachLinks.begin(), mPendingAttachLinks.end(), idAttach) == mPendingAttachLinks.end())
|
||||
{
|
||||
if (cb.isNull())
|
||||
{
|
||||
cb = new LLRegisterAttachmentCallback();
|
||||
}
|
||||
LLAppearanceMgr::instance().addCOFItemLink(idAttach, cb);
|
||||
mPendingAttachLinks.insert(idAttach);
|
||||
}
|
||||
}
|
||||
// [/SL:KB]
|
||||
// LLPointer<LLInventoryCallback> cb = new LLRequestServerAppearanceUpdateOnDestroy();
|
||||
// for (uuid_vec_t::const_iterator uuid_it = ids_to_link.begin();
|
||||
// uuid_it != ids_to_link.end(); ++uuid_it)
|
||||
// {
|
||||
// LLAppearanceMgr::instance().addCOFItemLink(*uuid_it, cb);
|
||||
// }
|
||||
LLPointer<LLInventoryCallback> cb = new LLRequestServerAppearanceUpdateOnDestroy();
|
||||
for (uuid_vec_t::const_iterator uuid_it = ids_to_link.begin();
|
||||
uuid_it != ids_to_link.end(); ++uuid_it)
|
||||
{
|
||||
LLAppearanceMgr::instance().addCOFItemLink(*uuid_it, cb);
|
||||
}
|
||||
}
|
||||
mRecentlyArrivedAttachments.clear();
|
||||
}
|
||||
}
|
||||
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-2.2
|
||||
bool LLAttachmentsMgr::getPendingAttachments(std::set<LLUUID>& ids) const
|
||||
{
|
||||
ids.clear();
|
||||
|
||||
// Returns the union of the LL maintained list of attachments that are waiting for link creation and our maintained list of attachments that are pending link creation
|
||||
set_union(mRecentlyArrivedAttachments.begin(), mRecentlyArrivedAttachments.end(), mPendingAttachLinks.begin(), mPendingAttachLinks.end(), std::inserter(ids, ids.begin()));
|
||||
|
||||
return !ids.empty();
|
||||
}
|
||||
|
||||
void LLAttachmentsMgr::clearPendingAttachmentLink(const LLUUID& idItem)
|
||||
{
|
||||
mPendingAttachLinks.erase(idItem);
|
||||
}
|
||||
|
||||
void LLAttachmentsMgr::onRegisterAttachmentComplete(const LLUUID& idAttachLink)
|
||||
{
|
||||
const LLViewerInventoryItem* pAttachLink = gInventory.getItem(idAttachLink);
|
||||
if (!pAttachLink)
|
||||
return;
|
||||
|
||||
const LLUUID& idAttachBase = pAttachLink->getLinkedUUID();
|
||||
|
||||
// Remove the attachment from the pending list
|
||||
clearPendingAttachmentLink(idAttachBase);
|
||||
|
||||
// It may have been detached already in which case we should remove the COF link
|
||||
if ( (isAgentAvatarValid()) && (!gAgentAvatarp->isWearingAttachment(idAttachBase)) )
|
||||
{
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(idAttachBase, NULL, true);
|
||||
}
|
||||
}
|
||||
// [/SL:KB]
|
||||
|
||||
LLAttachmentsMgr::LLItemRequestTimes::LLItemRequestTimes(const std::string& op_name, F32 timeout):
|
||||
mOpName(op_name),
|
||||
mTimeout(timeout)
|
||||
|
|
@ -523,11 +439,6 @@ void LLAttachmentsMgr::onDetachRequested(const LLUUID& inv_item_id)
|
|||
|
||||
void LLAttachmentsMgr::onDetachCompleted(const LLUUID& inv_item_id)
|
||||
{
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-2.2
|
||||
// (mRecentlyArrivedAttachments doesn't need pruning since it'll check the attachment is actually worn before linking)
|
||||
clearPendingAttachmentLink(inv_item_id);
|
||||
// [/SL:KB]
|
||||
|
||||
LLTimer timer;
|
||||
LLInventoryItem *item = gInventory.getItem(inv_item_id);
|
||||
if (mDetachRequests.getTime(inv_item_id, timer))
|
||||
|
|
@ -550,25 +461,18 @@ void LLAttachmentsMgr::onDetachCompleted(const LLUUID& inv_item_id)
|
|||
LL_DEBUGS("Avatar") << "ATT detach on shutdown for " << (item ? item->getName() : "UNKNOWN") << " " << inv_item_id << LL_ENDL;
|
||||
}
|
||||
|
||||
// LL_DEBUGS("Avatar") << "ATT detached item flagging as questionable for COF link checking "
|
||||
// << (item ? item->getName() : "UNKNOWN") << " id " << inv_item_id << LL_ENDL;
|
||||
// mQuestionableCOFLinks.addTime(inv_item_id);
|
||||
LL_DEBUGS("Avatar") << "ATT detached item flagging as questionable for COF link checking "
|
||||
<< (item ? item->getName() : "UNKNOWN") << " id " << inv_item_id << LL_ENDL;
|
||||
mQuestionableCOFLinks.addTime(inv_item_id);
|
||||
}
|
||||
|
||||
bool LLAttachmentsMgr::isAttachmentStateComplete() const
|
||||
{
|
||||
// [SL:KB] - Patch: Appearance-Misc | Checked: Catznip-4.3
|
||||
return mPendingAttachments.empty()
|
||||
&& mAttachmentRequests.empty()
|
||||
&& mDetachRequests.empty()
|
||||
&& mRecentlyArrivedAttachments.empty()
|
||||
&& mPendingAttachLinks.empty();
|
||||
// [/SL:KB]
|
||||
// return mPendingAttachments.empty()
|
||||
// && mAttachmentRequests.empty()
|
||||
// && mDetachRequests.empty()
|
||||
// && mRecentlyArrivedAttachments.empty()
|
||||
// && mQuestionableCOFLinks.empty();
|
||||
return mPendingAttachments.empty()
|
||||
&& mAttachmentRequests.empty()
|
||||
&& mDetachRequests.empty()
|
||||
&& mRecentlyArrivedAttachments.empty()
|
||||
&& mQuestionableCOFLinks.empty();
|
||||
}
|
||||
|
||||
// Check for attachments that are (a) linked in COF and (b) not
|
||||
|
|
@ -591,58 +495,58 @@ bool LLAttachmentsMgr::isAttachmentStateComplete() const
|
|||
//
|
||||
// See related: MAINT-5070, MAINT-4409
|
||||
//
|
||||
//void LLAttachmentsMgr::checkInvalidCOFLinks()
|
||||
//{
|
||||
// if (!gInventory.isInventoryUsable())
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// LLInventoryModel::cat_array_t cat_array;
|
||||
// LLInventoryModel::item_array_t item_array;
|
||||
// gInventory.collectDescendents(LLAppearanceMgr::instance().getCOF(),
|
||||
// cat_array,item_array,LLInventoryModel::EXCLUDE_TRASH);
|
||||
// for (S32 i=0; i<item_array.size(); i++)
|
||||
// {
|
||||
// const LLViewerInventoryItem* inv_item = item_array.at(i).get();
|
||||
// const LLUUID& item_id = inv_item->getLinkedUUID();
|
||||
// if (inv_item->getType() == LLAssetType::AT_OBJECT)
|
||||
// {
|
||||
// LLTimer timer;
|
||||
// bool is_flagged_questionable = mQuestionableCOFLinks.getTime(item_id,timer);
|
||||
// bool is_wearing_attachment = isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item_id);
|
||||
// if (is_wearing_attachment && is_flagged_questionable)
|
||||
// {
|
||||
// LL_DEBUGS("Avatar") << "ATT was flagged questionable but is now "
|
||||
// << (is_wearing_attachment ? "attached " : "")
|
||||
// <<"removing flag after "
|
||||
// << timer.getElapsedTimeF32() << " item "
|
||||
// << inv_item->getName() << " id " << item_id << LL_ENDL;
|
||||
// mQuestionableCOFLinks.removeTime(item_id);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
void LLAttachmentsMgr::checkInvalidCOFLinks()
|
||||
{
|
||||
if (!gInventory.isInventoryUsable())
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLInventoryModel::cat_array_t cat_array;
|
||||
LLInventoryModel::item_array_t item_array;
|
||||
gInventory.collectDescendents(LLAppearanceMgr::instance().getCOF(),
|
||||
cat_array,item_array,LLInventoryModel::EXCLUDE_TRASH);
|
||||
for (S32 i=0; i<item_array.size(); i++)
|
||||
{
|
||||
const LLViewerInventoryItem* inv_item = item_array.at(i).get();
|
||||
const LLUUID& item_id = inv_item->getLinkedUUID();
|
||||
if (inv_item->getType() == LLAssetType::AT_OBJECT)
|
||||
{
|
||||
LLTimer timer;
|
||||
bool is_flagged_questionable = mQuestionableCOFLinks.getTime(item_id,timer);
|
||||
bool is_wearing_attachment = isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item_id);
|
||||
if (is_wearing_attachment && is_flagged_questionable)
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "ATT was flagged questionable but is now "
|
||||
<< (is_wearing_attachment ? "attached " : "")
|
||||
<<"removing flag after "
|
||||
<< timer.getElapsedTimeF32() << " item "
|
||||
<< inv_item->getName() << " id " << item_id << LL_ENDL;
|
||||
mQuestionableCOFLinks.removeTime(item_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// for(LLItemRequestTimes::iterator it = mQuestionableCOFLinks.begin();
|
||||
// it != mQuestionableCOFLinks.end(); )
|
||||
// {
|
||||
// LLItemRequestTimes::iterator curr_it = it;
|
||||
// ++it;
|
||||
// const LLUUID& item_id = curr_it->first;
|
||||
// LLViewerInventoryItem *inv_item = gInventory.getItem(item_id);
|
||||
// if (curr_it->second.getElapsedTimeF32() > MAX_BAD_COF_TIME)
|
||||
// {
|
||||
// if (LLAppearanceMgr::instance().isLinkedInCOF(item_id))
|
||||
// {
|
||||
// LL_DEBUGS("Avatar") << "ATT Linked in COF but not attached or requested, deleting link after "
|
||||
// << curr_it->second.getElapsedTimeF32() << " seconds for "
|
||||
// << (inv_item ? inv_item->getName() : "UNKNOWN") << " id " << item_id << LL_ENDL;
|
||||
// LLAppearanceMgr::instance().removeCOFItemLinks(item_id);
|
||||
// }
|
||||
// mQuestionableCOFLinks.erase(curr_it);
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
for(LLItemRequestTimes::iterator it = mQuestionableCOFLinks.begin();
|
||||
it != mQuestionableCOFLinks.end(); )
|
||||
{
|
||||
LLItemRequestTimes::iterator curr_it = it;
|
||||
++it;
|
||||
const LLUUID& item_id = curr_it->first;
|
||||
LLViewerInventoryItem *inv_item = gInventory.getItem(item_id);
|
||||
if (curr_it->second.getElapsedTimeF32() > MAX_BAD_COF_TIME)
|
||||
{
|
||||
if (LLAppearanceMgr::instance().isLinkedInCOF(item_id))
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "ATT Linked in COF but not attached or requested, deleting link after "
|
||||
<< curr_it->second.getElapsedTimeF32() << " seconds for "
|
||||
<< (inv_item ? inv_item->getName() : "UNKNOWN") << " id " << item_id << LL_ENDL;
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(item_id);
|
||||
}
|
||||
mQuestionableCOFLinks.erase(curr_it);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLAttachmentsMgr::spamStatusInfo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -92,15 +92,8 @@ public:
|
|||
|
||||
bool isAttachmentStateComplete() const;
|
||||
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-2.1
|
||||
public:
|
||||
void clearPendingAttachmentLink(const LLUUID& idItem);
|
||||
bool getPendingAttachments(std::set<LLUUID>& ids) const;
|
||||
void refreshAttachments();
|
||||
protected:
|
||||
void onRegisterAttachmentComplete(const LLUUID& idAttachLink);
|
||||
friend class LLRegisterAttachmentCallback;
|
||||
// [/SL:KB]
|
||||
// [SL:KB] - Patch: Appearance-PhantomAttach | Checked: Catznip-5.0
|
||||
void refreshAttachments();
|
||||
|
||||
private:
|
||||
|
||||
|
|
@ -124,7 +117,7 @@ private:
|
|||
void linkRecentlyArrivedAttachments();
|
||||
void expireOldAttachmentRequests();
|
||||
void expireOldDetachRequests();
|
||||
// void checkInvalidCOFLinks();
|
||||
void checkInvalidCOFLinks();
|
||||
void spamStatusInfo();
|
||||
|
||||
// Attachments that we are planning to rez but haven't requested from the server yet.
|
||||
|
|
@ -140,13 +133,8 @@ private:
|
|||
std::set<LLUUID> mRecentlyArrivedAttachments;
|
||||
LLTimer mCOFLinkBatchTimer;
|
||||
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-2.1
|
||||
// Attachments that have pending link creation
|
||||
std::set<LLUUID> mPendingAttachLinks;
|
||||
// [/SL:KB]
|
||||
|
||||
// // Attachments that are linked in the COF but may be invalid.
|
||||
// LLItemRequestTimes mQuestionableCOFLinks;
|
||||
// Attachments that are linked in the COF but may be invalid.
|
||||
LLItemRequestTimes mQuestionableCOFLinks;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3109,8 +3109,7 @@ void LLSelectMgr::logNoOp(LLSelectNode* node, void *)
|
|||
// static
|
||||
void LLSelectMgr::logAttachmentRequest(LLSelectNode* node, void *)
|
||||
{
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
|
||||
// LLAttachmentsMgr::instance().onAttachmentRequested(node->mItemID);
|
||||
LLAttachmentsMgr::instance().onAttachmentRequested(node->mItemID);
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -406,9 +406,8 @@ public:
|
|||
LLViewerObject* updateCacheEntry(U32 local_id, LLViewerObject* objectp);
|
||||
void findOrphans(U32 parent_id);
|
||||
void clearCachedVisibleObjects();
|
||||
void dumpCache ();
|
||||
void clearVOCacheFromMemory();
|
||||
|
||||
void dumpCache();
|
||||
void clearVOCacheFromMemory();
|
||||
void unpackRegionHandshake();
|
||||
|
||||
void calculateCenterGlobal();
|
||||
|
|
|
|||
|
|
@ -9283,11 +9283,7 @@ BOOL LLVOAvatar::processFullyLoadedChange(bool loading)
|
|||
|
||||
BOOL LLVOAvatar::isFullyLoaded() const
|
||||
{
|
||||
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-2.2
|
||||
// Changes to LLAppearanceMgr::updateAppearanceFromCOF() expect this function to actually return mFullyLoaded for gAgentAvatarp
|
||||
return (mRenderUnloadedAvatar && !isSelf()) ||(mFullyLoaded);
|
||||
// [/SL:KB]
|
||||
// return (mRenderUnloadedAvatar || mFullyLoaded);
|
||||
return (mRenderUnloadedAvatar || mFullyLoaded);
|
||||
}
|
||||
|
||||
bool LLVOAvatar::isTooComplex() const
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ Additional code generously contributed to Firestorm by:
|
|||
top_pad="4"
|
||||
width="450"
|
||||
wrap="true">
|
||||
Albatroz Hird, Alexie Birman, Andromeda Rage, Angeldark Raymaker, Angus Boyd, Animats, Armin Weatherwax, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Denver Maksim, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hitomi Tiponi, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, Paladin Forzane, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, Zwagoth Klaar and others.
|
||||
Albatroz Hird, Alexie Birman, Andromeda Rage, Angeldark Raymaker, Angus Boyd, Animats, Armin Weatherwax, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Denver Maksim, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hitomi Tiponi, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, Paladin Forzane, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, Zwagoth Klaar and others.
|
||||
</text>
|
||||
<text
|
||||
follows="top|left"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
height="290"
|
||||
layout="topleft"
|
||||
min_height="150"
|
||||
min_width="200"
|
||||
min_width="224"
|
||||
name="floater_buy_contents"
|
||||
help_topic="floater_buy_contents"
|
||||
save_rect="true"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="contents" title="Помощник по созданию миниатюр инвентаря">
|
||||
<scroll_list name="inventory_thumbnails_list" tool_tip="Вставьте предметы из своего инвентаря">
|
||||
<scroll_list.columns label="Предмет инвентаря" name="item_name"/>
|
||||
<scroll_list.columns label="Существующая текстура" name="existing_texture"/>
|
||||
<scroll_list.columns label="Новая текстура" name="new_texture"/>
|
||||
</scroll_list>
|
||||
<button label="Вставить предметы из инвентаря" name="paste_items_btn"/>
|
||||
<button label="Вставить текстуры из инвентаря" name="paste_textures_btn"/>
|
||||
<button label="Записать миниатюры" name="write_thumbnails_btn"/>
|
||||
<button label="Список предметов без миниатюр" name="log_missing_thumbnails_btn"/>
|
||||
<button label="Удалить миниатюры" name="clear_thumbnails_btn"/>
|
||||
</floater>
|
||||
|
|
@ -136,8 +136,8 @@
|
|||
<text name="selection_empty" width="120">
|
||||
Ничего не выбрано.
|
||||
</text>
|
||||
<text name="remaining_capacity">
|
||||
[CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Подробнее]
|
||||
<text name="more info label">
|
||||
[CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Больше информации]
|
||||
</text>
|
||||
<tab_container name="Object Info Tabs">
|
||||
<panel label="Общие" name="General">
|
||||
|
|
@ -466,6 +466,14 @@
|
|||
<spinner label="Фокус" name="Light Focus"/>
|
||||
<spinner label="Спад" name="Light Falloff"/>
|
||||
<spinner label="Окружение" name="Light Ambiance"/>
|
||||
<check_box label="Датчик отражений" name="Reflection Probe" tool_tip="Настраивает способ отражения объектов в пределах этого объема при включенном PBR" width="60" />
|
||||
<combo_box name="Probe Volume Type" tool_tip="Выберите тип объема влияния датчика">
|
||||
<combo_box.item label="Сфера" name="Sphere"/>
|
||||
<combo_box.item label="Куб" name="Box"/>
|
||||
</combo_box>
|
||||
<check_box label="Динамика" name="Probe Dynamic" tool_tip="Если эта функция включена, аватары будут отображаться в отражениях в пределах объема влияния этого датчика." width="60" />
|
||||
<spinner label="Окружение" label_width="65" name="Probe Ambiance" width="125" />
|
||||
<spinner label="Клип Рядом" label_width="65" name="Probe Near Clip" width="125" />
|
||||
<text name="label physicsshapetype" width="140">
|
||||
Тип физической формы:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
<menu_item_call label="Очистить Корзину" name="Empty Trash"/>
|
||||
<menu_item_call label="Пустые потерянные и найденные" name="Empty Lost And Found"/>
|
||||
<menu_item_call label="Телепорт" name="Landmark Open"/>
|
||||
<menu_item_call label="Заменить текущий Костюм" name="Replace Outfit"/>
|
||||
<menu_item_call label="Добавить в текущий Костюм" name="Add To Outfit"/>
|
||||
<menu_item_call label="Удалить из текущего Костюма" name="Remove From Outfit"/>
|
||||
<menu_item_call label="Сменить текущий костюм" name="Replace Outfit"/>
|
||||
<menu_item_call label="Добавить элементы костюма" name="Add To Outfit"/>
|
||||
<menu_item_call label="Снять элементы костюма" name="Remove From Outfit"/>
|
||||
<menu_item_call label="Скопировать список костюма в буфер обмена" name="Copy outfit list to clipboard"/>
|
||||
<menu_item_call label="Найти оригинал" name="Find Original"/>
|
||||
<menu_item_call label="Очистить элемент" name="Purge Item"/>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<context_menu name="Outfit">
|
||||
<menu_item_call label="Надеть - Заменить текущий Костюм" name="wear_replace"/>
|
||||
<menu_item_call label="Надеть - Добавить к текущему Костюму" name="wear_add"/>
|
||||
<menu_item_call label="Снять - Удалить из текущего Костюма" name="take_off"/>
|
||||
<menu_item_call label="Сменить текущий костюм" name="wear_replace"/>
|
||||
<menu_item_call label="Добавить элементы костюма" name="wear_add"/>
|
||||
<menu_item_call label="Снять элементы костюма" name="take_off"/>
|
||||
<menu_item_call label="Изображение..." name="thumbnail"/>
|
||||
<menu_item_call label="Изменить костюм" name="edit"/>
|
||||
<menu_item_call label="Переименовать костюм" name="rename"/>
|
||||
<menu_item_call label="Сохранить в этот костюм" name="save"/>
|
||||
<menu_item_call label="Удалить костюм" name="delete"/>
|
||||
<menu label="Новая одежда" name="New Clothes">
|
||||
<menu_item_call label="Новая Рубашка" name="New Shirt"/>
|
||||
<menu_item_call label="Новые Штаны" name="New Pants"/>
|
||||
|
|
@ -24,7 +28,4 @@
|
|||
<menu_item_call label="Новые Волосы" name="New Hair"/>
|
||||
<menu_item_call label="Новые Глаза" name="New Eyes"/>
|
||||
</menu>
|
||||
<menu_item_call label="Изменить Костюм" name="edit"/>
|
||||
<menu_item_call label="Переименовать Костюм" name="rename"/>
|
||||
<menu_item_call label="Удалить Костюм" name="delete"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -71,10 +71,10 @@
|
|||
<menu_item_call label="Телепорт" name="Landmark Open"/>
|
||||
<menu_item_call label="Проиграть" name="Animation Open"/>
|
||||
<menu_item_call label="Проиграть" name="Sound Open"/>
|
||||
<menu_item_call label="Заменить комплект одежды" name="Replace Outfit"/>
|
||||
<menu_item_call label="Добавить в комплект одежды" name="Add To Outfit"/>
|
||||
<menu_item_call label="Создать элементы" name="Wear Items"/>
|
||||
<menu_item_call label="Удалить из комплекта одежды" name="Remove From Outfit"/>
|
||||
<menu_item_call label="Переодеться (сменить костюм)" name="Replace Outfit"/>
|
||||
<menu_item_call label="Надеть (добавить в костюм)" name="Add To Outfit"/>
|
||||
<menu_item_call label="Надеть элементы" name="Wear Items"/>
|
||||
<menu_item_call label="Снять (убрать из костюма)" name="Remove From Outfit"/>
|
||||
<menu_item_call label="Копировать список в буфер" name="Copy outfit list to clipboard"/>
|
||||
<menu_item_call label="Найти оригинал" name="Find Original"/>
|
||||
<menu_item_call label="Удалить объект" name="Purge Item"/>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<toggleable_menu name="Gear Outfit">
|
||||
<menu_item_call label="Заменить текущий комплект" name="wear"/>
|
||||
<menu_item_call label="Добавить в текущий комплект" name="wear_add"/>
|
||||
<menu_item_call label="Удалить из текущего комплекта" name="take_off"/>
|
||||
<menu_item_call label="Переодеться" name="wear"/>
|
||||
<menu_item_call label="Надеть" name="wear_add"/>
|
||||
<menu_item_call label="Снять" name="take_off"/>
|
||||
<menu_item_call label="Изображение" name="thumbnail"/>
|
||||
<menu_item_call label="Переименовать костюм" name="rename"/>
|
||||
<menu_item_call label="Сохранить в этот костюм" name="save"/>
|
||||
<menu_item_call label="Удалить костюм" name="delete_outfit"/>
|
||||
<menu_item_check label="Всегда сортировать папки по имени" name="sort_folders_by_name"/>
|
||||
<menu_item_call label="Развернуть все папки" name="expand"/>
|
||||
<menu_item_call label="Свернуть все папки" name="collapse"/>
|
||||
<context_menu label="Новая одежда" name="New Clothes">
|
||||
<menu_item_call label="Новая рубашка" name="New Shirt"/>
|
||||
<menu_item_call label="Новые штаны" name="New Pants"/>
|
||||
|
|
@ -25,9 +31,4 @@
|
|||
<menu_item_call label="Новые волосы" name="New Hair"/>
|
||||
<menu_item_call label="Новые глаза" name="New Eyes"/>
|
||||
</context_menu>
|
||||
<menu_item_call label="Развернуть все папки" name="expand"/>
|
||||
<menu_item_call label="Свернуть все папки" name="collapse"/>
|
||||
<menu_item_call label="Переименовать комплект" name="rename"/>
|
||||
<menu_item_call label="Удалить комплект" name="delete_outfit"/>
|
||||
<menu_item_check label="Всегда сортировать папки по имени" name="sort_folders_by_name"/>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Outfit">
|
||||
<menu_item_call label="Заменить текущий комплект" name="wear_replace"/>
|
||||
<menu_item_call label="Добавить в текущий комплект" name="wear_add"/>
|
||||
<menu_item_call label="Удалить из текущего комплекта" name="take_off"/>
|
||||
<menu_item_call label="Изменить комплект" name="edit"/>
|
||||
<menu_item_call label="Переименовать комплект" name="rename"/>
|
||||
<menu_item_call label="Удалить комплект" name="delete"/>
|
||||
<menu_item_call label="Переодеться" name="wear_replace"/>
|
||||
<menu_item_call label="Надеть" name="wear_add"/>
|
||||
<menu_item_call label="Снять" name="take_off"/>
|
||||
<menu_item_call label="Изменить костюм" name="edit"/>
|
||||
<menu_item_call label="Изображение..." name="thumbnail"/>
|
||||
<menu_item_call label="Переименовать костюм" name="rename"/>
|
||||
<menu_item_call label="Сохранить в этот костюм" name="save"/>
|
||||
<menu_item_call label="Удалить костюм" name="delete"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -4,4 +4,5 @@
|
|||
<menu_item_call label="Подробнее" name="More Information"/>
|
||||
<menu_item_call label="Показать на Карте" name="show_on_map"/>
|
||||
<menu_item_call label="Копировать SLurl" name="CopyToClipboard"/>
|
||||
<menu_item_call label="Удалить из истории" name="remove_from_history"/>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -598,6 +598,7 @@
|
|||
<menu_item_call label="Тест браузера для просмотра медиа" name="Web Browser Test"/>
|
||||
<menu_item_check label="Тест перезапуска региона..." name="Region Restart Test"/>
|
||||
<menu_item_call label="Браузер Web содержимого" name="Web Content Browser"/>
|
||||
<menu_item_call label="Помощник по созданию миниатюр инвентаря" name="Inventory Thumbnails Helper"/>
|
||||
<menu_item_call label="Дамп шрифтов" name="Dump Fonts"/>
|
||||
<menu_item_call label="Дамп текстур шрифтов" name="Dump Font Textures"/>
|
||||
<menu_item_call label="Тест соединения с Facebook" name="FB Connect Test"/>
|
||||
|
|
@ -612,6 +613,8 @@
|
|||
<menu_item_check label="Отладка SelectMgr" name="Debug SelectMgr"/>
|
||||
<menu_item_check label="Отладка нажатий" name="Debug Clicks"/>
|
||||
<menu_item_check label="Отладка обзора" name="Debug Views"/>
|
||||
<menu_item_check label="Отладка Юникода" name="Debug Unicode"/>
|
||||
<menu_item_check label="Отладка управления камеры" name="Debug Camera Controls"/>
|
||||
<menu_item_check label="Отладка названий инструментов подсказки" name="Debug Name Tooltips"/>
|
||||
<menu_item_check label="Отладка событий мышки" name="Debug Mouse Events"/>
|
||||
<menu_item_check label="Отладка клавиш" name="Debug Keys"/>
|
||||
|
|
|
|||
|
|
@ -2376,6 +2376,15 @@
|
|||
Примечание.
|
||||
Вы изменили местоположение этого места, но остальные данные сохранили прежние значения.
|
||||
</notification>
|
||||
|
||||
<notification name="ApplyInventoryToObject">
|
||||
Вы применяете элемент инвентаря 'без копирования'.
|
||||
Этот элемент будет перемещен в инвентарь объекта, а не скопирован.
|
||||
|
||||
Переместите инвентарный элемент?
|
||||
<usetemplate ignoretext="Предупредите меня, прежде чем я применю элементы 'без копирования' к объекту" name="okcancelignore" notext="Отмена" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="MoveInventoryFromObject">
|
||||
Вы выбрали "не копируемые" предметы.
|
||||
Они будут перемещены в ваш инвентарь, а не скопированы.
|
||||
|
|
@ -2383,6 +2392,7 @@
|
|||
Переместить предмет(ы)?
|
||||
<usetemplate ignoretext="Предупреждать перед перемещением "не копируемых" предметов из объекта" name="okcancelignore" notext="Отмена" yestext="Да"/>
|
||||
</notification>
|
||||
|
||||
<notification name="MoveInventoryFromScriptedObject">
|
||||
Вы выбрали "не копируемые" предметы. Они будут перемещены в ваш инвентарь, а не скопированы.
|
||||
Так как объект является скриптовым, перемещение предметов в ваш инвентарий может вызвать ошибки скрипта.
|
||||
|
|
@ -2841,6 +2851,22 @@ URL: [AUDIOURL]
|
|||
Невозможно загрузить заметку.
|
||||
Повторите попытку.
|
||||
</notification>
|
||||
|
||||
<notification name="UnableToLoadMaterial">
|
||||
Не удается загрузить материал.
|
||||
Пожалуйста, попробуйте снова.
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="MissingMaterialCaps">
|
||||
Не подключен к области, пригодной для использования с материалами.
|
||||
</notification>
|
||||
|
||||
<notification name="CantSelectReflectionProbe">
|
||||
Вы установили датчик отражения, но функция "Выбрать датчики отражения" отключена. Чтобы иметь возможность выбирать датчики отражения, установите флажок "Строить" > "Параметры" > "Выбрать датчики отражения".
|
||||
<usetemplate ignoretext="Предупреждает, если выбор датчиков отражения отключен." name="okignore" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="ScriptMissing">
|
||||
Скрипта нет в базе данных.
|
||||
</notification>
|
||||
|
|
@ -3797,6 +3823,33 @@ https://wiki.firestormviewer.org/fs_voice
|
|||
Просмотр этой текстуры невозможен, так как запрещено ее копирование и/или передача.
|
||||
<usetemplate ignoretext="Предупреждать, если режим просмотра вживую недоступен для текстур с запрещенным копированием и/или передачей" name="okignore" yestext="Да"/>
|
||||
</notification>
|
||||
|
||||
<notification name="LivePreviewUnavailablePBR">
|
||||
Мы не можем показать предварительный просмотр этого материала, поскольку он запрещен для копирования, передачи и/или изменения.
|
||||
<usetemplate ignoretext="Предупредить меня, что режим предварительного просмотра в реальном времени недоступен для материалов без копирования, передачи и/или изменения" name="okignore" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="FacePasteFailed">
|
||||
Вставить не удалось. [REASON]
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="FailedToApplyTextureNoCopyToMultiple">
|
||||
Не удалось применить текстуру. Вы не можете применить текстуру без копирования к нескольким объектам.
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="FailedToApplyGLTFNoCopyToMultiple">
|
||||
Не удалось применить материал GLTF. Вы не можете применить материал без копирования к нескольким объектам.
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="FacePasteTexturePermissions">
|
||||
Вы применили текстуру с ограниченными разрешениями, объект унаследует разрешения от текстуры.
|
||||
<usetemplate ignoretext="Вставить: Вы применили текстуру с ограниченными разрешениями" name="notifyignore"/>
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="ConfirmLeaveCall">
|
||||
Вы уверены, что хотите покинуть этот разговор?
|
||||
<usetemplate ignoretext="Подтверждать перед выходом из разговора" name="okcancelignore" notext="Нет" yestext="Да"/>
|
||||
|
|
@ -5346,6 +5399,66 @@ https://wiki.firestormviewer.org/fs_voice
|
|||
<button name="cancel" text="Отмена"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification label="Создать вложенную папку" name="CreateSubfolder">
|
||||
Назовите новую папку:
|
||||
<form name="form">
|
||||
<button name="OK" text="OK"/>
|
||||
<button name="Cancel" text="Отмена"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification name="SameFolderRequired">
|
||||
Выбранные элементы должны находиться в одной папке.
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="RiggedMeshAttachedToHUD">
|
||||
Объект "[NAME]" прикрепленный к точке дисплея "[POINT]" содержит ригованый меш.
|
||||
|
||||
Ригованые мешевые объекты предназначены для прикрепления к аватару. Ни вы, ни кто-либо другой не увидит этот объект.
|
||||
|
||||
Если вы хотите увидеть этот объект, удалите его и снова прикрепите к точке прикрепления аватара.
|
||||
|
||||
<usetemplate ignoretext="Предупредить меня, когда к точке дисплея будет прикреплен меш." name="okignore" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="ConfirmOverwriteOutfit">
|
||||
Это заменит предметы из выбранного костюма на те, что надеты сейчас.
|
||||
<usetemplate ignoretext="Подтвердить перед перезаписью костюма." name="okcancelignore" notext="Отмена" yestext="Сохранить"/>
|
||||
</notification>
|
||||
|
||||
<notification name="ClearInventoryThumbnailsWarning">
|
||||
Вы собираетесь удалить миниатюры изображений из списка предметов инвентаря. Это изменение невозможно отменить.
|
||||
|
||||
Хотите продолжить?
|
||||
<usetemplate name="okcancelbuttons" notext="Нет" yestext="Да"/>
|
||||
</notification>
|
||||
|
||||
<notification name="WriteInventoryThumbnailsWarning">
|
||||
Вы собираетесь перезаписать миниатюры изображений для некоторых или всех элементов инвентаря в списке. Это изменение невозможно отменить.
|
||||
|
||||
Хотите продолжить?
|
||||
<usetemplate name="okcancelbuttons" notext="Нет" yestext="Да"/>
|
||||
</notification>
|
||||
|
||||
<notification name="ReflectionProbeApplied">
|
||||
ВНИМАНИЕ: Вы превратили свой объект в датчик отражения. Это приведет к неявному изменению объекта, чтобы имитировать его объем воздействия, и внесет необратимые изменения в объект. Хотите продолжить?
|
||||
<usetemplate ignoretext="Советы по Датчикам отражений" name="okcancelignore" notext="Отмена" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="AutoAdjustHDRSky">
|
||||
Вы редактируете изображение неба без разрешения HDR, которое было автоматически преобразовано в HDR. Чтобы удалить HDR и тональное отображение, установите значение Reflection Probe Ambiance равным нулю.
|
||||
<usetemplate ignoretext="Предупреждение о настройке неба в режиме HDR" name="okignore" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="EnableAutoFPSWarning">
|
||||
Вы собираетесь включить Автонастройку частоты кадров. Все несохраненные настройки графики будут потеряны.
|
||||
|
||||
Хотите сначала сохранить их?
|
||||
<usetemplate name="okcancelbuttons" notext="Нет" yestext="Да"/>
|
||||
</notification>
|
||||
|
||||
<notification name="NoValidEnvSettingFound">
|
||||
Не выбрана допустимая настройка окружающей среды.
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,290 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel label="Текстура" name="Texture">
|
||||
|
||||
<panel.string name="paste_error_face_selection_mismatch">
|
||||
При копировании нескольких граней у целевого объекта должно быть выбрано одинаковое количество граней.
|
||||
</panel.string>
|
||||
<panel.string name="paste_error_object_face_count_mismatch">
|
||||
При копировании всех граней объекта целевой объект должен иметь одинаковое количество граней.
|
||||
</panel.string>
|
||||
<panel.string name="paste_error_inventory_not_found">
|
||||
Одна или несколько текстур, которых нет в инвентаре.
|
||||
</panel.string>
|
||||
<panel.string name="paste_options">
|
||||
Скопировать параметры текстуры в буфер обмена
|
||||
</panel.string>
|
||||
|
||||
<tab_container name="tabs_material_type">
|
||||
<panel label="PBR" name="panel_material_type_pbr">
|
||||
<panel name="panel_material_maps">
|
||||
<texture_picker name="pbr_control" label="Материал" tool_tip="Нажмите, чтобы выбрать материал pbr"/>
|
||||
<texture_picker name="base_color_picker" label="База цвет" tool_tip="Нажмите, чтобы выбрать базовую цветовую схему (альбедо)."/>
|
||||
<color_swatch name="base_color_tint_picker" label="Цвет" tool_tip="Нажмите, чтобы выбрать оттенок базового цвета"/>
|
||||
<button name="btn_select_same_gltf" tool_tip="Выберите все грани из того же материала GLTF, что и эта"/>
|
||||
<texture_picker name="normal_map_picker" label="Нормаль" tool_tip="Нажмите, чтобы выбрать карту нормалей"/>
|
||||
<texture_picker name="emissive_map_picker" label="Излучение" tool_tip="Нажмите, чтобы выбрать карту излучений"/>
|
||||
<color_swatch name="emissive_color_tint_picker" label="Цвет" tool_tip="Нажмите, чтобы выбрать оттенок излучаемого цвета"/>
|
||||
<texture_picker name="metallic_map_picker" label="(O)RM" tool_tip="Нажмите, чтобы выбрать карту шероховатости металла, которая может содержать дополнительный окклюзионный канал"/>
|
||||
</panel> <!-- panel_material_maps -->
|
||||
|
||||
<panel name="panel_material_parameters">
|
||||
<check_box label="Двусторонний" name="double sided" width="100"/>
|
||||
<spinner label="Альфа" name="transparency"/>
|
||||
<text name="blend mode label">Режим</text>
|
||||
<combo_box name="alpha mode">
|
||||
<combo_box.item label="Непрозрачный" name="None"/>
|
||||
<combo_box.item label="Смесь" name="Alpha blending"/>
|
||||
<combo_box.item label="Маска" name="Alpha masking"/>
|
||||
</combo_box>
|
||||
<spinner label="Отсечка" name="alpha cutoff" />
|
||||
<spinner label="Металлическ" label_width="75" width="130" name="metalness factor" />
|
||||
<spinner label="Шершавость" label_width="75" width="130" name="roughness factor" />
|
||||
<button name="save_selected_pbr" label="Сохранить"/>
|
||||
</panel> <!-- panel_material_parameters -->
|
||||
|
||||
<!-- BEGIN PBR Material texture transform parameters -->
|
||||
<tab_container name="tabs_pbr_transforms">
|
||||
<panel name="panel_pbr_transforms_all" label="Все">
|
||||
<panel name="pbr_transforms_all_scale">
|
||||
<text name="pbr_transforms_all_scale_label">Масштаб</text>
|
||||
<text name="labelGltfTextureScaleU_All">U</text>
|
||||
<button name="flipTextureScaleMU" tool_tip="Перевернуть"/>
|
||||
<text name="labelGltfTextureScaleV_All">V</text>
|
||||
<button name="flipTextureScaleMV" tool_tip="Перевернуть"/>
|
||||
</panel> <!-- pbr_transforms_all_scale -->
|
||||
<panel name="pbr_transforms_all_offset">
|
||||
<text name="pbr_transforms_all_offset_label">Смещение</text>
|
||||
<text name="labelGltfTextureOffsetU_All">U</text>
|
||||
<text name="labelGltfTextureOffsetV_All">V</text>
|
||||
</panel> <!-- pbr_transforms_all_offset -->
|
||||
<panel name="pbr_transforms_all_rotation">
|
||||
<text name="pbr_transforms_all_rotation_label">Вращение</text>
|
||||
</panel> <!-- pbr_transforms_all_rotation -->
|
||||
</panel> <!-- panel_pbr_transforms_all -->
|
||||
|
||||
<panel name="panel_pbr_transforms_base_color" label="База Цвет">
|
||||
<panel name="pbr_transforms_base_color_scale">
|
||||
<text name="pbr_transforms_base_color_scale_label">Масштаб</text>
|
||||
<text name="labelGltfTextureScaleU_Base">U</text>
|
||||
<button name="flipTextureScaleMU" tool_tip="Перевернуть"/>
|
||||
<text name="labelGltfTextureScaleV_Base">V</text>
|
||||
<button name="flipTextureScaleMV" tool_tip="Перевернуть"/>
|
||||
</panel> <!-- pbr_transforms_base_color_scale -->
|
||||
<panel name="pbr_transforms_base_color_offset">
|
||||
<text name="pbr_transforms_base_color_offset_label">Смещение</text>
|
||||
<text name="labelGltfTextureOffsetU_Base">U</text>
|
||||
<text name="labelGltfTextureOffsetV_Base">V</text>
|
||||
</panel> <!-- pbr_transforms_base_color_offset -->
|
||||
<panel name="pbr_transforms_base_color_rotation">
|
||||
<text name="pbr_transforms_base_color_rotation_label">Вращение</text>
|
||||
</panel> <!-- pbr_transforms_base_color_rotation -->
|
||||
</panel> <!-- panel_pbr_transforms_base_color -->
|
||||
|
||||
<panel name="panel_pbr_transforms_normal" label="Нормаль">
|
||||
<panel name="pbr_transforms_normal_scale">
|
||||
<text name="pbr_transforms_normal_scale_label">Масштаб</text>
|
||||
<text name="labelGltfTextureScaleU_Normal">U</text>
|
||||
<button name="flipTextureScaleMU" tool_tip="Перевернуть"/>
|
||||
<text name="labelGltfTextureScaleV_Normal">V</text>
|
||||
<button name="flipTextureScaleMV" tool_tip="Перевернуть"/>
|
||||
</panel> <!-- pbr_transforms_normal_scale -->
|
||||
<panel name="pbr_transforms_normal_offset">
|
||||
<text name="pbr_transforms_normal_offset_label">Смещение</text>
|
||||
<text name="labelGltfTextureOffsetU_Normal">U</text>
|
||||
<text name="labelGltfTextureOffsetV_Normal">V</text>
|
||||
</panel> <!-- pbr_transforms_normal_offset -->
|
||||
<panel name="pbr_transforms_normal_rotation">
|
||||
<text name="pbr_transforms_normal_rotation_label">Вращение</text>
|
||||
</panel> <!-- pbr_transforms_normal_rotation -->
|
||||
</panel> <!-- panel_pbr_transforms_normal -->
|
||||
|
||||
<panel label="(O)RM" name="panel_pbr_transforms_metallic">
|
||||
<panel name="pbr_transforms_orm_scale">
|
||||
<text name="pbr_transforms_orm_scale_label">Масштаб</text>
|
||||
<text name="labelGltfTextureScaleU_Metallic">U</text>
|
||||
<button name="flipTextureScaleMU" tool_tip="Перевернуть"/>
|
||||
<text name="labelGltfTextureScaleV_Metallic">V</text>
|
||||
<button name="flipTextureScaleMV" tool_tip="Перевернуть"/>
|
||||
</panel> <!-- pbr_transforms_orm_scale -->
|
||||
<panel name="pbr_transforms_orm_offset">
|
||||
<text name="pbr_transforms_orm_offset_label">Смещение</text>
|
||||
<text name="labelGltfTextureOffsetU_Metallic">U</text>
|
||||
<text name="labelGltfTextureOffsetU_Metallic">V</text>
|
||||
</panel> <!-- pbr_transforms_orm_offset -->
|
||||
<panel name="pbr_transforms_orm_rotation">
|
||||
<text name="pbr_transforms_orm_rotation_label">Вращение</text>
|
||||
</panel> <!-- pbr_transforms_orm_rotation -->
|
||||
</panel> <!-- panel_pbr_transforms_metallic -->
|
||||
|
||||
<panel name="panel_pbr_transforms_emissive" label="Излучение">
|
||||
<panel name="pbr_transforms_emissive_scale">
|
||||
<text name="pbr_transforms_emissive_scale_label">Масштаб</text>
|
||||
<text name="labelGltfTextureScaleU_Emissive">U</text>
|
||||
<button name="flipTextureScaleMU" tool_tip="Перевернуть"/>
|
||||
<text name="labelGltfTextureScaleV_Emissive">V</text>
|
||||
<button name="flipTextureScaleMV" tool_tip="Перевернуть"/>
|
||||
</panel> <!-- pbr_transforms_emissive_scale -->
|
||||
<panel name="pbr_transforms_emissive_offset">
|
||||
<text name="pbr_transforms_emissive_offset_label">Смещение</text>
|
||||
<text name="labelGltfTextureOffsetU_Emissive">U</text>
|
||||
<text name="labelGltfTextureOffsetV_Emissive">V</text>
|
||||
</panel> <!-- pbr_transforms_emissive_offset -->
|
||||
<panel name="pbr_transforms_emissive_rotation">
|
||||
<text name="pbr_transforms_emissive_rotation_label">Вращение</text>
|
||||
</panel> <!-- pbr_transforms_emissive_rotation -->
|
||||
|
||||
</panel> <!-- panel_pbr_transforms_emissive -->
|
||||
|
||||
</tab_container>
|
||||
<!-- END PBR Material texture transform parameters -->
|
||||
|
||||
</panel> <!-- panel_material_type_pbr -->
|
||||
|
||||
<panel label="Блинн-Фонг" name="panel_material_type_blinn_phong">
|
||||
<layout_stack name="panel_material_type_blinn_phong_layout_stack">
|
||||
<layout_panel name="panel_blinn_phong_maps">
|
||||
<texture_picker name="texture control" label="Диффузия" tool_tip="Нажмите, чтобы выбрать картинку"/>
|
||||
<color_swatch name="colorswatch" label="Цвет" tool_tip="Нажмите, чтобы открыть палитру цветов"/>
|
||||
<button name="btn_select_same_diff" tool_tip="Выделите все грани с такой же рассеянной текстурой, как у этой"/>
|
||||
<texture_picker label="Нормаль" name="bumpytexture control" tool_tip="Нажмите, чтобы выбрать картинку"/>
|
||||
<button name="btn_select_same_norm" tool_tip="Выберите все грани с такой же картой нормалей, как у этой"/>
|
||||
<texture_picker label="Отражение" name="shinytexture control" tool_tip="Нажмите, чтобы выбрать картинку"/>
|
||||
<color_swatch label="Цвет" name="shinycolorswatch" tool_tip="Нажмите, чтобы открыть палитру цветов"/>
|
||||
<button name="btn_select_same_spec" tool_tip="Выберите все грани с такой же зеркальной картой, как у этой"/>
|
||||
</layout_panel> <!-- panel_blinn_phong_maps -->
|
||||
|
||||
<layout_panel name="panel_blinn_phong_options">
|
||||
<check_box label="Полная яркость" name="checkbox fullbright"/>
|
||||
<spinner name="ColorTrans" label="Прозрачность"/>
|
||||
<text name="color trans percent">%</text>
|
||||
<text name="label alphamode" width="80">Альфа-режим</text>
|
||||
<combo_box name="combobox alphamode">
|
||||
<combo_box.item label="Ничто" name="None"/>
|
||||
<combo_box.item label="Альфа-смешивание" name="Alpha blending"/>
|
||||
<combo_box.item label="Альфа-маскировка" name="Alpha masking"/>
|
||||
<combo_box.item label="Излучающая маска" name="Emissive mask"/>
|
||||
</combo_box>
|
||||
<spinner label="Отсечка маски" label_width="85" name="maskcutoff"/>
|
||||
<text name="label bumpiness">Неровности</text>
|
||||
<combo_box name="combobox bumpiness">
|
||||
<combo_box.item label="Нет" name="None"/>
|
||||
<combo_box.item label="Яркость" name="Brightness"/>
|
||||
<combo_box.item label="Темнота" name="Darkness"/>
|
||||
<combo_box.item label="резьба по дереву" name="woodgrain"/>
|
||||
<combo_box.item label="кора" name="bark"/>
|
||||
<combo_box.item label="кирпичи" name="bricks"/>
|
||||
<combo_box.item label="клетчатый" name="checker"/>
|
||||
<combo_box.item label="бетон" name="concrete"/>
|
||||
<combo_box.item label="черепица" name="crustytile"/>
|
||||
<combo_box.item label="граненый камень" name="cutstone"/>
|
||||
<combo_box.item label="диски" name="discs"/>
|
||||
<combo_box.item label="гравий" name="gravel"/>
|
||||
<combo_box.item label="окаменелый" name="petridish"/>
|
||||
<combo_box.item label="сайдинг" name="siding"/>
|
||||
<combo_box.item label="кафель" name="stonetile"/>
|
||||
<combo_box.item label="штукатурка" name="stucco"/>
|
||||
<combo_box.item label="всасывание" name="suction"/>
|
||||
<combo_box.item label="тканый" name="weave"/>
|
||||
<!--
|
||||
NORSPEC-182, ensure item doesn't show up in menu until it should
|
||||
<combo_box.item label="Use texture" name="Use texture"/>
|
||||
-->
|
||||
</combo_box>
|
||||
<text name="label shininess">Блеск</text>
|
||||
<combo_box name="combobox shininess">
|
||||
<combo_box.item label="Нет" name="None"/>
|
||||
<combo_box.item label="Низкий" name="Low"/>
|
||||
<combo_box.item label="Средний" name="Medium"/>
|
||||
<combo_box.item label="Высокий" name="High"/>
|
||||
</combo_box>
|
||||
<spinner name="glossiness" label="Глянцевитость" label_width="85"/>
|
||||
<spinner name="environment" label="Окружение" label_width="85"/>
|
||||
</layout_panel> <!-- panel_blinn_phong_options -->
|
||||
|
||||
</layout_stack>
|
||||
|
||||
<tab_container name="tabs_blinn_phong_uvs">
|
||||
<panel label="Диффузия" name="panel_blinn_phong_diffuse">
|
||||
<panel name="transforms_diffuse_scale">
|
||||
<text name="transforms_diffuse_scale_label">Масштаб</text>
|
||||
<text name="labelTexScaleU">H</text>
|
||||
<button name="flipTextureScaleU" tool_tip="Перевернуть"/>
|
||||
<text name="labelTexScaleV">V</text>
|
||||
<button name="flipTextureScaleV" tool_tip="Перевернуть"/>
|
||||
</panel> <!-- transforms_diffuse_scale -->
|
||||
<panel name="transforms_diffuse_offset">
|
||||
<text name="transforms_diffuse_offset_label">Смещение</text>
|
||||
<text name="labelTexOffsetU">H</text>
|
||||
<text name="labelTexOffsetV">V</text>
|
||||
</panel> <!-- transforms_diffuse_offset -->
|
||||
<panel name="transforms_diffuse_rotation">
|
||||
<text name="transforms_diffuse_rotation_label">Вращение</text>
|
||||
</panel> <!-- transforms_diffuse_rotation -->
|
||||
</panel> <!-- panel_blinn_phong_diffuse -->
|
||||
|
||||
<panel label="Нормаль" name="panel_blinn_phong_normal">
|
||||
<panel name="transforms_normal_scale">
|
||||
<text name="transforms_normal_scale_label">Масштаб</text>
|
||||
<text name="labelBumpyScaleU">H</text>
|
||||
<button name="flipTextureScaleNU" tool_tip="Перевернуть"/>
|
||||
<text name="labelBumpyScaleV">V</text>
|
||||
<button name="flipTextureScaleNV" tool_tip="Перевернуть"/>
|
||||
</panel> <!-- transforms_normal_scale -->
|
||||
<panel name="transforms_normal_offset">
|
||||
<text name="transforms_normal_offset_label">Смещение</text>
|
||||
<text name="labelBumpyOffsetU">H</text>
|
||||
<text name="labelBumpyOffsetU">V</text>
|
||||
</panel> <!-- transforms_normal_offset -->
|
||||
<panel name="transforms_normal_rotation">
|
||||
<text name="transforms_normal_rotation_label">Вращение</text>
|
||||
</panel> <!-- transforms_normal_rotation -->
|
||||
</panel> <!-- panel_blinn_phong_normal -->
|
||||
|
||||
<panel label="Отражение" name="panel_blinn_phong_specular">
|
||||
<panel name="transforms_specular_scale">
|
||||
<text name="transforms_specular_scale_label">Масштаб</text>
|
||||
<text name="labelShinyScaleU">H</text>
|
||||
<button name="flipTextureScaleSU" tool_tip="Перевернуть"/>
|
||||
<text name="labelShinyScaleV">V</text>
|
||||
<button name="flipTextureScaleSV" tool_tip="Перевернуть"/>
|
||||
</panel> <!-- transforms_specular_scale -->
|
||||
<panel name="transforms_specular_offset">
|
||||
<text name="transforms_specular_offset_label">Смещение</text>
|
||||
<text name="labelShinyOffsetU">H</text>
|
||||
<text name="labelShinyOffsetV">V</text>
|
||||
</panel> <!-- transforms_specular_offset -->
|
||||
<panel name="transforms_specular_rotation">
|
||||
<text name="transforms_specular_rotation_label">Вращение</text>
|
||||
</panel> <!-- transforms_specular_rotation -->
|
||||
</panel> <!-- panel_blinn_phong_specular -->
|
||||
|
||||
</tab_container> <!-- tabs_blinn_phong_uvs -->
|
||||
</panel> <!-- panel_material_type_blinn_phong -->
|
||||
|
||||
<panel name="panel_material_type_media" label="Медиа">
|
||||
<text name="media_info">URL-адрес выбранного медиа, если таковой имеется, находится здесь</text>
|
||||
<web_browser name="title_media" start_url="about:blank" decouple_texture_size="true"/>
|
||||
<button width="85" name="add_media" label="Выбрать..." tool_tip="Добавить медиа"/>
|
||||
<button width="85" name="delete_media" label="Удалить" tool_tip="Удалите эту текстуру медиа"/>
|
||||
<button width="85" name="button align" label="Выровнять" label_selected="Выравнивание медиа" tool_tip="Выровнять текстуру медиа (необходимо сначала загрузить)"/>
|
||||
</panel> <!-- panel_material_type_media -->
|
||||
|
||||
</tab_container> <!-- tabs_material_type -->
|
||||
|
||||
<panel name="panel_face_params">
|
||||
<spinner name="rptctrl" label="Повторы на метр"/>
|
||||
<check_box label="Синхронизация материалов" name="checkbox_sync_settings" tool_tip="Синхронизировать параметры текстурной карты"/>
|
||||
<check_box label="Выравнивание плоских граней" name="checkbox planar align" tool_tip="Выровняйте текстуры на всех выбранных гранях по последней выбранной грани. Требуется плоское сопоставление текстур."/>
|
||||
<text name="tex gen">Отображение</text>
|
||||
<combo_box name="combobox texgen">
|
||||
<combo_box.item label="По умолчанию" name="Default"/>
|
||||
<combo_box.item label="Плоский" name="Planar"/>
|
||||
</combo_box>
|
||||
<button label="Выровнять" name="button align textures" tool_tip="Выравнивание текущих слоев текстуры"/>
|
||||
</panel> <!-- panel_face_params -->
|
||||
|
||||
<button name="copy_face_btn" tool_tip="Скопировать параметры текстуры в буфер обмена"/>
|
||||
<button name="paste_face_btn" tool_tip="Вставка параметров текстуры из буфера обмена"/>
|
||||
<spinner label="Свечение" name="glow" width="115" label_width="60"/>
|
||||
|
||||
</panel> <!-- Texture -->
|
||||
|
|
@ -220,7 +220,8 @@
|
|||
<check_box label="Предварительный просмотр анимации на собственном аватара во время загрузки" tool_tip="Предварительный просмотр анимации на собственном аватара во время загрузки" name="FSUploadAnimationOnOwnAvatar" />
|
||||
<check_box label="Всегда раскрывать расширенную информацию в предпросмотре анимации" tool_tip="Развернуть расширенную информацию об анимации в всплывающем окне предварительного просмотра анимации по умолчанию." name="FSAnimationPreviewExpanded"/>
|
||||
<check_box label="Включить расширенную информацию скрипта" name="FSScriptInfoExtended" tool_tip="Если включено, расширяет базовую функцию информации скрипта с различными деталями, полезными для строителей"/>
|
||||
<check_box label="Сортировка мест прикрепления в "Прикрепить к" меню по алфавиту (требуется перезагрузка)" tool_tip="Если этот параметр включен, список прикреплений в &Прикрепить к& меню будут отсортированы по алфавиту" name="FSSortAttachmentSpotsAlphabetically"/>
|
||||
<check_box label="Сортировка прикреплений в "Прикрепить к" меню по алфавиту (нужна перезагрузка)" tool_tip="Если этот параметр включен, список прикреплений в "Прикрепить к" меню будут отсортированы по алфавиту" name="FSSortAttachmentSpotsAlphabetically"/>
|
||||
<check_box label="Новая панель текстур FS во всплывающем меню инструментов (нужна перезагрузка)" tool_tip="Если этот параметр включен, инструменты редактирования текстур будут использовать усовершенствованный рабочий процесс FS и позволят редактировать БлиннФонг" name="FSUseNewTexturePanel"/>
|
||||
</panel>
|
||||
<!--Uploads-->
|
||||
<panel label="Загрузки" name="UploadsTab">
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 5.5 KiB |
|
|
@ -2947,7 +2947,7 @@ Low ↔ Lwst
|
|||
height="50"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
top_pad="-17"
|
||||
top_pad="-21"
|
||||
name="colorswatch"
|
||||
tool_tip="Click to open color picker"
|
||||
width="40" />
|
||||
|
|
@ -2973,7 +2973,7 @@ Low ↔ Lwst
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="Light Intensity"
|
||||
top_pad="3"
|
||||
top_pad="-21"
|
||||
width="128" />
|
||||
<spinner bottom_delta="0"
|
||||
decimal_digits="3"
|
||||
|
|
|
|||
|
|
@ -437,6 +437,23 @@
|
|||
left_pad="0"
|
||||
right="-33"
|
||||
layout="topleft"
|
||||
name="dummy_panel">
|
||||
<icon
|
||||
follows="top|left|right"
|
||||
height="25"
|
||||
image_name="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
top="0"
|
||||
right="-1"
|
||||
name="dummy_icon" />
|
||||
</panel>
|
||||
<panel
|
||||
follows="top|left|right"
|
||||
height="25"
|
||||
left_pad="168"
|
||||
right="-33"
|
||||
layout="topleft"
|
||||
name="dummy_panel">
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -453,15 +470,6 @@
|
|||
right="-8">
|
||||
Elements
|
||||
</text>
|
||||
<icon
|
||||
follows="top|left|right"
|
||||
height="25"
|
||||
image_name="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
top="0"
|
||||
right="-1"
|
||||
name="dummy_icon" />
|
||||
</panel>
|
||||
<panel
|
||||
follows="top|right"
|
||||
|
|
|
|||
|
|
@ -2973,7 +2973,7 @@ Low ↔ Lwst
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="Light Intensity"
|
||||
top_pad="-14"
|
||||
top_pad="-21"
|
||||
width="128" />
|
||||
<spinner bottom_delta="0"
|
||||
decimal_digits="3"
|
||||
|
|
|
|||