diff --git a/indra/newview/character/aux_base.tga b/indra/newview/character/aux_base.tga
new file mode 100644
index 000000000..dbcaaaf2b
Binary files /dev/null and b/indra/newview/character/aux_base.tga differ
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index dea786773..47422d038 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -6885,7 +6885,7 @@
+ pos="-0.01 0.01 -0.02"/>
@@ -8949,6 +8949,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10024,6 +10085,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10198,6 +10319,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12410,9 +12708,451 @@
domain="0" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -15926,8 +16666,278 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/character/checkerboard.tga b/indra/newview/character/checkerboard.tga
new file mode 100644
index 000000000..1950d7403
Binary files /dev/null and b/indra/newview/character/checkerboard.tga differ
diff --git a/indra/newview/character/invisible_head.tga b/indra/newview/character/invisible_head.tga
new file mode 100644
index 000000000..2673a237d
Binary files /dev/null and b/indra/newview/character/invisible_head.tga differ
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index de298c752..30a86d723 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -80,6 +80,24 @@ using namespace LLAvatarAppearanceDefines;
///////////////////////////////////////////////////////////////////////////////
+void set_default_permissions(LLViewerInventoryItem* item)
+{
+ llassert(item);
+ LLPermissions perm = item->getPermissions();
+ if (perm.getMaskNextOwner() != LLFloaterPerms::getNextOwnerPerms("Wearables")
+ || perm.getMaskEveryone() != LLFloaterPerms::getEveryonePerms("Wearables")
+ || perm.getMaskGroup() != LLFloaterPerms::getGroupPerms("Wearables"))
+ {
+ perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Wearables"));
+ perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Wearables"));
+ perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Wearables"));
+
+ item->setPermissions(perm);
+
+ item->updateServer(FALSE);
+ }
+}
+
// Callback to wear and start editing an item that has just been created.
void wear_and_edit_cb(const LLUUID& inv_item)
{
@@ -88,13 +106,9 @@ void wear_and_edit_cb(const LLUUID& inv_item)
LLViewerInventoryItem* item = gInventory.getItem(inv_item);
if (!item) return;
- LLPermissions perm = item->getPermissions();
- perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Wearables"));
- perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Wearables"));
- perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Wearables"));
- item->setPermissions(perm);
+ set_default_permissions(item);
- item->updateServer(FALSE);
+ // item was just created, update even if permissions did not changed
gInventory.updateItem(item);
gInventory.notifyObservers();
@@ -112,13 +126,8 @@ void wear_cb(const LLUUID& inv_item)
LLViewerInventoryItem* item = gInventory.getItem(inv_item);
if (item)
{
- LLPermissions perm = item->getPermissions();
- perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Wearables"));
- perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Wearables"));
- perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Wearables"));
- item->setPermissions(perm);
+ set_default_permissions(item);
- item->updateServer(FALSE);
gInventory.updateItem(item);
gInventory.notifyObservers();
}
@@ -184,7 +193,7 @@ void LLAgentWearables::dump()
struct LLAgentDumper
{
LLAgentDumper(std::string name):
- mName(name)
+ mName(std::move(name))
{
LL_INFOS() << LL_ENDL;
LL_INFOS() << "LLAgentDumper " << mName << LL_ENDL;
@@ -259,7 +268,7 @@ LLAgentWearables::AddWearableToAgentInventoryCallback::AddWearableToAgentInvento
mIndex(index),
mWearable(wearable),
mTodo(todo),
- mCB(cb),
+ mCB(std::move(cb)),
mDescription(description)
{
LL_INFOS() << "constructor" << LL_ENDL;
@@ -1647,6 +1656,12 @@ void LLAgentWearables::createWearable(LLWearableType::EType type, bool wear, con
{
if (type == LLWearableType::WT_INVALID || type == LLWearableType::WT_NONE) return;
+ if (type == LLWearableType::WT_UNIVERSAL && !gAgent.getRegion()->bakesOnMeshEnabled())
+ {
+ LL_WARNS("Inventory") << "Can't create WT_UNIVERSAL type " << LL_ENDL;
+ return;
+ }
+
LLViewerWearable* wearable = LLWearableList::instance().createNewWearable(type, gAgentAvatarp);
LLAssetType::EType asset_type = wearable->getAssetType();
LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index d5f2c7a29..cc5de6817 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -103,6 +103,7 @@ enum ESubpart
SUBPART_SKIRT,
SUBPART_ALPHA,
SUBPART_TATTOO,
+ SUBPART_UNIVERSAL,
SUBPART_PHYSICS_BREASTS_UPDOWN,
SUBPART_PHYSICS_BREASTS_INOUT,
SUBPART_PHYSICS_BREASTS_LEFTRIGHT,
@@ -245,6 +246,7 @@ LLEditWearableDictionary::Wearables::Wearables()
addEntry(LLWearableType::WT_SKIRT, new WearableEntry(LLWearableType::WT_SKIRT,"edit_skirt_title",1,1,1, TEX_SKIRT, TEX_SKIRT, SUBPART_SKIRT));
addEntry(LLWearableType::WT_ALPHA, new WearableEntry(LLWearableType::WT_ALPHA,"edit_alpha_title",0,5,1, TEX_LOWER_ALPHA, TEX_UPPER_ALPHA, TEX_HEAD_ALPHA, TEX_EYES_ALPHA, TEX_HAIR_ALPHA, SUBPART_ALPHA));
addEntry(LLWearableType::WT_TATTOO, new WearableEntry(LLWearableType::WT_TATTOO,"edit_tattoo_title",1,3,1, TEX_HEAD_TATTOO, TEX_LOWER_TATTOO, TEX_UPPER_TATTOO, TEX_HEAD_TATTOO, SUBPART_TATTOO));
+ addEntry(LLWearableType::WT_UNIVERSAL, new WearableEntry(LLWearableType::WT_UNIVERSAL, "edit_universal_title", 1, 11, 1, TEX_HEAD_UNIVERSAL_TATTOO, TEX_HEAD_UNIVERSAL_TATTOO, TEX_UPPER_UNIVERSAL_TATTOO, TEX_LOWER_UNIVERSAL_TATTOO, TEX_SKIRT_TATTOO, TEX_HAIR_TATTOO, TEX_EYES_TATTOO, TEX_LEFT_ARM_TATTOO, TEX_LEFT_LEG_TATTOO, TEX_AUX1_TATTOO, TEX_AUX2_TATTOO, TEX_AUX3_TATTOO, SUBPART_UNIVERSAL));
addEntry(LLWearableType::WT_PHYSICS, new WearableEntry(LLWearableType::WT_PHYSICS,"edit_physics_title",0,0,7, SUBPART_PHYSICS_BREASTS_UPDOWN, SUBPART_PHYSICS_BREASTS_INOUT, SUBPART_PHYSICS_BREASTS_LEFTRIGHT, SUBPART_PHYSICS_BELLY_UPDOWN, SUBPART_PHYSICS_BUTT_UPDOWN, SUBPART_PHYSICS_BUTT_LEFTRIGHT, SUBPART_PHYSICS_ADVANCED));
}
@@ -315,6 +317,8 @@ LLEditWearableDictionary::Subparts::Subparts()
addEntry(SUBPART_UNDERPANTS, new SubpartEntry(SUBPART_UNDERPANTS, "mPelvis", "underpants",LLStringUtil::null, LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f), SEX_BOTH));
addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha",LLStringUtil::null, LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f), SEX_BOTH));
addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", LLStringUtil::null, LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
+ addEntry(SUBPART_UNIVERSAL, new SubpartEntry(SUBPART_UNIVERSAL, "mPelvis", "universal", LLStringUtil::null, LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f), SEX_BOTH));
+
addEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, "mTorso", "physics_breasts_updown", "Breast Bounce", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-0.8f, 0.15f, 0.38),SEX_FEMALE));
addEntry(SUBPART_PHYSICS_BREASTS_INOUT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_INOUT, "mTorso", "physics_breasts_inout", "Breast Cleavage", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-0.8f, 0.15f, 0.38f),SEX_FEMALE));
addEntry(SUBPART_PHYSICS_BREASTS_LEFTRIGHT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_LEFTRIGHT, "mTorso", "physics_breasts_leftright", "Breast Sway", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-0.8f, 0.15f, 0.38f),SEX_FEMALE));
@@ -354,6 +358,7 @@ LLEditWearableDictionary::ColorSwatchCtrls::ColorSwatchCtrls()
addEntry ( TEX_UPPER_UNDERSHIRT, new PickerControlEntry (TEX_UPPER_UNDERSHIRT, "Color/Tint" ));
addEntry ( TEX_LOWER_UNDERPANTS, new PickerControlEntry (TEX_LOWER_UNDERPANTS, "Color/Tint" ));
addEntry ( TEX_HEAD_TATTOO, new PickerControlEntry(TEX_HEAD_TATTOO, "Color/Tint" ));
+ addEntry (TEX_HEAD_UNIVERSAL_TATTOO, new PickerControlEntry(TEX_HEAD_UNIVERSAL_TATTOO, "Color/Tint"));
}
LLEditWearableDictionary::TextureCtrls::TextureCtrls()
@@ -381,6 +386,17 @@ LLEditWearableDictionary::TextureCtrls::TextureCtrls()
addEntry ( TEX_LOWER_TATTOO, new PickerControlEntry (TEX_LOWER_TATTOO, "Lower Tattoo", LLUUID::null, TRUE ));
addEntry ( TEX_UPPER_TATTOO, new PickerControlEntry (TEX_UPPER_TATTOO, "Upper Tattoo", LLUUID::null, TRUE ));
addEntry ( TEX_HEAD_TATTOO, new PickerControlEntry (TEX_HEAD_TATTOO, "Head Tattoo", LLUUID::null, TRUE ));
+ addEntry ( TEX_LOWER_UNIVERSAL_TATTOO, new PickerControlEntry( TEX_LOWER_UNIVERSAL_TATTOO, "Lower Universal Tattoo", LLUUID::null, TRUE));
+ addEntry ( TEX_UPPER_UNIVERSAL_TATTOO, new PickerControlEntry( TEX_UPPER_UNIVERSAL_TATTOO, "Upper Universal Tattoo", LLUUID::null, TRUE));
+ addEntry ( TEX_HEAD_UNIVERSAL_TATTOO, new PickerControlEntry( TEX_HEAD_UNIVERSAL_TATTOO, "Head Universal Tattoo", LLUUID::null, TRUE));
+ addEntry ( TEX_SKIRT_TATTOO, new PickerControlEntry(TEX_SKIRT_TATTOO, "Skirt Tattoo", LLUUID::null, TRUE));
+ addEntry ( TEX_HAIR_TATTOO, new PickerControlEntry(TEX_HAIR_TATTOO, "Hair Tattoo", LLUUID::null, TRUE));
+ addEntry ( TEX_EYES_TATTOO, new PickerControlEntry(TEX_EYES_TATTOO, "Eyes Tattoo", LLUUID::null, TRUE));
+ addEntry (TEX_LEFT_ARM_TATTOO, new PickerControlEntry(TEX_LEFT_ARM_TATTOO, "Left Arm Tattoo", LLUUID::null, TRUE));
+ addEntry (TEX_LEFT_LEG_TATTOO, new PickerControlEntry(TEX_LEFT_LEG_TATTOO, "Left Leg Tattoo", LLUUID::null, TRUE));
+ addEntry (TEX_AUX1_TATTOO, new PickerControlEntry(TEX_AUX1_TATTOO, "Aux1 Tattoo", LLUUID::null, TRUE));
+ addEntry (TEX_AUX2_TATTOO, new PickerControlEntry(TEX_AUX2_TATTOO, "Aux2 Tattoo", LLUUID::null, TRUE));
+ addEntry (TEX_AUX3_TATTOO, new PickerControlEntry(TEX_AUX3_TATTOO, "Aux3 Tattoo", LLUUID::null, TRUE));
}
LLEditWearableDictionary::PickerControlEntry::PickerControlEntry(ETextureIndex tex_index,
@@ -407,9 +423,9 @@ get_pickers_indexes(const LLEditWearableDictionary::WearableEntry *wearable_entr
// Specializations of this template function return picker control entry for particular control type.
template
const LLEditWearableDictionary::PickerControlEntry*
-get_picker_entry (const ETextureIndex index) { return NULL; }
+get_picker_entry (const ETextureIndex index) { return nullptr; }
-typedef boost::function function_t;
+typedef std::function function_t;
typedef struct PickerControlEntryNamePredicate
{
@@ -473,16 +489,13 @@ find_picker_ctrl_entry_if(LLWearableType::EType type, const Predicate pred)
if (!wearable_entry)
{
LL_WARNS() << "could not get wearable dictionary entry for wearable of type: " << type << LL_ENDL;
- return NULL;
+ return nullptr;
}
const texture_vec_t& indexes = get_pickers_indexes(wearable_entry);
- for (texture_vec_t::const_iterator
- iter = indexes.begin(),
- iter_end = indexes.end();
- iter != iter_end; ++iter)
+ for (auto te : indexes)
{
- const ETextureIndex te = *iter;
- const LLEditWearableDictionary::PickerControlEntry* entry = get_picker_entry(te);
+ const LLEditWearableDictionary::PickerControlEntry* entry
+ = get_picker_entry(te);
if (!entry)
{
LL_WARNS() << "could not get picker dictionary entry (" << te << ") for wearable of type: " << type << LL_ENDL;
@@ -493,7 +506,7 @@ find_picker_ctrl_entry_if(LLWearableType::EType type, const Predicate pred)
return entry;
}
}
- return NULL;
+ return nullptr;
}
template
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index e9b544df4..f5e9c666c 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -115,6 +115,7 @@ public:
mInventoryItemsDict["New Skirt"] = LLTrans::getString("New Skirt");
mInventoryItemsDict["New Alpha"] = LLTrans::getString("New Alpha");
mInventoryItemsDict["New Tattoo"] = LLTrans::getString("New Tattoo");
+ mInventoryItemsDict["New Universal"] = LLTrans::getString("New Universal");
mInventoryItemsDict["New Physics"] = LLTrans::getString("New Physics");
mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable");
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 53047ceee..cda753441 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1543,7 +1543,7 @@ bool LLViewerRegion::simulatorFeaturesReceived() const
return mSimulatorFeaturesReceived;
}
-void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features)
+void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features) const
{
sim_features = mSimulatorFeatures;
}
@@ -2367,6 +2367,12 @@ bool LLViewerRegion::meshUploadEnabled() const
}
}
+bool LLViewerRegion::bakesOnMeshEnabled() const
+{
+ return (mSimulatorFeatures.has("BakesOnMeshEnabled") &&
+ mSimulatorFeatures["BakesOnMeshEnabled"].asBoolean());
+}
+
bool LLViewerRegion::meshRezEnabled() const
{
if (!capabilitiesReceived())
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index d02ab5a53..fc23d6cd0 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -327,13 +327,15 @@ public:
bool meshRezEnabled() const;
bool meshUploadEnabled() const;
+ bool bakesOnMeshEnabled() const;
+
// has region received its simulator features list? Requires an additional query after caps received.
void requestSimulatorFeatures();
void setSimulatorFeaturesReceived(bool);
bool simulatorFeaturesReceived() const;
boost::signals2::connection setSimulatorFeaturesReceivedCallback(const caps_received_signal_t::slot_type& cb);
- void getSimulatorFeatures(LLSD& info);
+ void getSimulatorFeatures(LLSD& info) const;
void setSimulatorFeatures(const LLSD& info);
@@ -372,7 +374,8 @@ public:
friend std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion);
/// implements LLCapabilityProvider
- virtual std::string getDescription() const;
+ virtual std::string getDescription() const override;
+
std::string getViewerAssetUrl() const { return mViewerAssetUrl; }
LLSpatialPartition* getSpatialPartition(U32 type);
diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp
index 16cff6ba1..1297ca9de 100644
--- a/indra/newview/llviewerwearable.cpp
+++ b/indra/newview/llviewerwearable.cpp
@@ -130,7 +130,7 @@ LLWearable::EImportResult LLViewerWearable::importStream( std::istream& input_st
LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture( textureid );
if(gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime"))
{
- image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(textureid, (LLAvatarAppearanceDefines::ETextureIndex)te), NULL);
+ image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(textureid, (LLAvatarAppearanceDefines::ETextureIndex)te), nullptr);
}
}
@@ -235,7 +235,6 @@ BOOL LLViewerWearable::isDirty() const
U8 a = F32_to_U8( saved_weight, param->getMinWeight(), param->getMaxWeight() );
U8 b = F32_to_U8( current_weight, param->getMinWeight(), param->getMaxWeight() );
-
if( a != b )
{
//LL_WARNS() << "param ID " << param->getID() << " was changed." << LL_ENDL;
@@ -317,8 +316,8 @@ void LLViewerWearable::setTexturesToDefaults()
const LLUUID LLViewerWearable::getDefaultTextureImageID(ETextureIndex index) const
{
const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = LLAvatarAppearanceDictionary::getInstance()->getTexture(index);
- const std::string &default_image_name = texture_dict->mDefaultImageName;
- if (default_image_name == "")
+ const std::string &default_image_name = texture_dict ? texture_dict->mDefaultImageName : "";
+ if (default_image_name.empty())
{
return IMG_DEFAULT_AVATAR;
}
@@ -336,15 +335,9 @@ void LLViewerWearable::writeToAvatar(LLAvatarAppearance *avatarp)
if (!avatarp || !avatarp->isSelf() || !avatarp->isValid()) return;
LLVOAvatarSelf* viewer_avatar = static_cast(avatarp);
-#if 0
- // FIXME DRANO - kludgy way to avoid overwriting avatar state from wearables.
- // Ideally would avoid calling this func in the first place.
- if (viewer_avatar->isUsingServerBakes() &&
- !viewer_avatar->isUsingLocalAppearance())
- {
- return;
- }
-#endif
+ if (!avatarp || !viewer_avatar) return;
+
+ if (!viewer_avatar->isValid()) return;
ESex old_sex = avatarp->getSex();
@@ -456,7 +449,7 @@ void LLViewerWearable::copyDataFrom(const LLViewerWearable* src)
{
te_map_t::const_iterator iter = src->mTEMap.find(te);
LLUUID image_id;
- LLViewerFetchedTexture *image = NULL;
+ LLViewerFetchedTexture *image = nullptr;
if(iter != src->mTEMap.end())
{
image = dynamic_cast (src->getLocalTextureObject(te)->getImage());
@@ -489,13 +482,6 @@ void LLViewerWearable::setItemID(const LLUUID& item_id)
void LLViewerWearable::revertValues()
{
-#if 0
- // DRANO avoid overwrite when not in local appearance
- if (isAgentAvatarValid() && gAgentAvatarp->isUsingServerBakes() && !gAgentAvatarp->isUsingLocalAppearance())
- {
- return;
- }
-#endif
LLWearable::revertValues();
@@ -611,28 +597,29 @@ void LLViewerWearable::saveNewAsset() const
// save it out to database
if( gAssetStorage )
{
- /*
- std::string url = gAgent.getRegion()->getCapability("NewAgentInventory");
+#if 0
+ const std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory");
if (!url.empty())
{
LL_INFOS() << "Update Agent Inventory via capability" << LL_ENDL;
LLSD body;
- body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetToFolderType(getAssetType()));
+ body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(getAssetType()));
body["asset_type"] = LLAssetType::lookup(getAssetType());
body["inventory_type"] = LLInventoryType::lookup(LLInventoryType::IT_WEARABLE);
body["name"] = getName();
body["description"] = getDescription();
- LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, filename));
+ LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, filename,
+ getAssetType()));
}
else
+#endif // 0
{
- }
- */
- LLWearableSaveData* data = new LLWearableSaveData;
- data->mType = mType;
- gAssetStorage->storeAssetData(filename, mTransactionID, getAssetType(),
+ LLWearableSaveData* data = new LLWearableSaveData;
+ data->mType = mType;
+ gAssetStorage->storeAssetData(filename, mTransactionID, getAssetType(),
&LLViewerWearable::onSaveNewAssetComplete,
(void*)data);
+ }
}
}
@@ -673,21 +660,19 @@ std::ostream& operator<<(std::ostream &s, const LLViewerWearable &w)
//w.mSaleInfo
s << " Params:" << "\n";
- for (LLViewerWearable::visual_param_index_map_t::const_iterator iter = w.mVisualParamIndexMap.begin();
- iter != w.mVisualParamIndexMap.end(); ++iter)
+ for (const auto& iter : w.mVisualParamIndexMap)
{
- S32 param_id = iter->first;
- LLVisualParam *wearable_param = iter->second;
+ S32 param_id = iter.first;
+ LLVisualParam *wearable_param = iter.second;
F32 param_weight = wearable_param->getWeight();
s << " " << param_id << " " << param_weight << "\n";
}
s << " Textures:" << "\n";
- for (LLViewerWearable::te_map_t::const_iterator iter = w.mTEMap.begin();
- iter != w.mTEMap.end(); ++iter)
+ for (const auto& iter : w.mTEMap)
{
- S32 te = iter->first;
- const LLUUID& image_id = iter->second->getID();
+ S32 te = iter.first;
+ const LLUUID& image_id = iter.second->getID();
s << " " << te << " " << image_id << "\n";
}
return s;
diff --git a/indra/newview/skins/default/xui/en-us/floater_customize.xml b/indra/newview/skins/default/xui/en-us/floater_customize.xml
index 76961e8f8..7d5e7d652 100644
--- a/indra/newview/skins/default/xui/en-us/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_customize.xml
@@ -1348,6 +1348,184 @@ one from scratch and wear it.
+
+
+
+
+ [DESC]
+
+
+ [DESC]: cannot modify
+
+
+ [DESC]: loading...
+
+
+ [DESC]: not worn
+
+
+ Located in [PATH]
+
+
+
+Put on a new universal by dragging one from your
+inventory to your avatar. Alternately, you can create a
+new one from scratch and wear it.
+
+
+ You do not have permission to modify this wearable.
+
+
+ Universal:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/menu_inventory.xml b/indra/newview/skins/default/xui/en-us/menu_inventory.xml
index f4f16845e..e34e06bb2 100644
--- a/indra/newview/skins/default/xui/en-us/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en-us/menu_inventory.xml
@@ -157,6 +157,9 @@
mouse_opaque="true" name="New Alpha" width="128">
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/strings.xml b/indra/newview/skins/default/xui/en-us/strings.xml
index e087f67ad..e02e017c4 100644
--- a/indra/newview/skins/default/xui/en-us/strings.xml
+++ b/indra/newview/skins/default/xui/en-us/strings.xml
@@ -3259,61 +3259,6 @@ Where tag = tag string to match. Removes bot's matching the tag.
Not Busy
Busy
-
- Shape
- Skin
- Hair
- Eyes
- Shirt
- Pants
- Shoes
- Socks
- Jacket
- Gloves
- Undershirt
- Underpants
- Skirt
- Alpha
- Tattoo
- Physics
- invalid
- none
- Unknown
-
-
- Shirt not worn
- Pants not worn
- Shoes not worn
- Socks not worn
- Jacket not worn
- Gloves not worn
- Undershirt not worn
- Underpants not worn
- Skirt not worn
- Alpha not worn
- Tattoo not worn
- Physics not worn
- invalid
-
-
- Create new shape
- Create new skin
- Create new hair
- Create new eyes
- Create new shirt
- Create new pants
- Create new shoes
- Create new socks
- Create new jacket
- Create new gloves
- Create new undershirt
- Create new underpants
- Create new skirt
- Create new alpha
- Create new tattoo
- Create new physics
- invalid
-
New [WEARABLE_ITEM]
@@ -3336,7 +3281,7 @@ Where tag = tag string to match. Removes bot's matching the tag.
Universal
Physics
invalid
- unknown
+ Unknown
none
@@ -3351,6 +3296,7 @@ Where tag = tag string to match. Removes bot's matching the tag.
Skirt not worn
Alpha not worn
Tattoo not worn
+ Universal not worn
Physics not worn
invalid
@@ -3370,6 +3316,7 @@ Where tag = tag string to match. Removes bot's matching the tag.
Create new skirt
Create new alpha
Create new tattoo
+ Create new universal
Create new physics
invalid
@@ -4694,6 +4641,7 @@ Abuse Report
New Skirt
New Alpha
New Tattoo
+ New Universal
New Physics
Invalid Wearable
New Gesture