SH-4051 REVERT teen accounts unable to remove underclothes even when switching outfits

Reverting fix as additional problems were found that could lead to even accidental nudity.
This fix is not required for the current release as it is not a regression.
Will review options for fixing for the next release.
meow-7.2.2
Nyx Linden 2013-04-03 19:04:57 -04:00
parent 106864bb8a
commit 4bcf1b911a
2 changed files with 10 additions and 42 deletions

View File

@ -1124,19 +1124,14 @@ void LLAgentWearables::addWearableToAgentInventory(LLPointer<LLInventoryCallback
cb);
}
void LLAgentWearables::removeWearable(const LLWearableType::EType type, bool do_remove_all, U32 index, BOOL will_replace)
void LLAgentWearables::removeWearable(const LLWearableType::EType type, bool do_remove_all, U32 index)
{
if (gAgent.isTeen() &&
if (gAgent.isTeen() &&
(type == LLWearableType::WT_UNDERSHIRT || type == LLWearableType::WT_UNDERPANTS))
{
// Can't take off underclothing in simple UI mode or on PG accounts
if (getWearableCount(type) < 2 && !will_replace)
{
// if there is 0 or 1 undergarment worn, and we're not going to be immediately adding another,
// we cannot allow the removal for teen accounts
return;
}
// TODO: enable the removing of a single undershirt/underpants if multiple are worn. - Nyx
return;
}
if (getWearableCount(type) == 0)
{
@ -1244,31 +1239,6 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
{
llinfos << "setWearableOutfit() start" << llendl;
S32 count = wearables.count();
llassert(items.count() == count);
S32 i;
bool has_undershirt = false;
bool has_underpants = false;
for (i = 0; i < count; i++)
{
LLViewerWearable* new_wearable = wearables[i];
if (new_wearable)
{
const LLWearableType::EType type = new_wearable->getType();
if (type == LLWearableType::WT_UNDERSHIRT)
{
has_undershirt = true;
}
if (type == LLWearableType::WT_UNDERPANTS)
{
has_underpants = true;
}
}
}
// TODO: Removed check for ensuring that teens don't remove undershirt and underwear. Handle later
if (remove)
{
@ -1278,17 +1248,15 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
{
if (LLWearableType::getAssetType((LLWearableType::EType)type) == LLAssetType::AT_CLOTHING)
{
bool will_replace = false;
if ((type == LLWearableType::WT_UNDERSHIRT && has_undershirt) ||
(type == LLWearableType::WT_UNDERPANTS && has_underpants))
{
will_replace = true;
}
removeWearable((LLWearableType::EType)type, true, 0, will_replace);
removeWearable((LLWearableType::EType)type, true, 0);
}
}
}
S32 count = wearables.count();
llassert(items.count() == count);
S32 i;
for (i = 0; i < count; i++)
{
LLViewerWearable* new_wearable = wearables[i];

View File

@ -146,7 +146,7 @@ private:
// Removing wearables
//--------------------------------------------------------------------
public:
void removeWearable(const LLWearableType::EType type, bool do_remove_all /*= false*/, U32 index /*= 0*/, BOOL will_replace = false);
void removeWearable(const LLWearableType::EType type, bool do_remove_all /*= false*/, U32 index /*= 0*/);
private:
void removeWearableFinal(const LLWearableType::EType type, bool do_remove_all /*= false*/, U32 index /*= 0*/);
protected: