Merge git://github.com/Shyotl/SingularityViewer
This commit is contained in:
@@ -13707,6 +13707,17 @@
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
|
<key>WarnFirstPhysicsWearable</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Enables Physics Wearable warning dialog</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</map>
|
||||||
<key>WatchdogEnabled</key>
|
<key>WatchdogEnabled</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
|
|||||||
@@ -7733,7 +7733,8 @@ void LLAgent::sendAgentSetAppearance()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const bool wearing_physics = !!getWearable(WT_PHYSICS);
|
static bool send_physics_params = false;
|
||||||
|
send_physics_params |= !!getWearable(WT_PHYSICS);
|
||||||
S32 transmitted_params = 0;
|
S32 transmitted_params = 0;
|
||||||
for (LLViewerVisualParam* param = (LLViewerVisualParam*)mAvatarObject->getFirstVisualParam();
|
for (LLViewerVisualParam* param = (LLViewerVisualParam*)mAvatarObject->getFirstVisualParam();
|
||||||
param;
|
param;
|
||||||
@@ -7741,17 +7742,17 @@ void LLAgent::sendAgentSetAppearance()
|
|||||||
{
|
{
|
||||||
if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) // do not transmit params of group VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
|
if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) // do not transmit params of group VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
|
||||||
{
|
{
|
||||||
msg->nextBlockFast(_PREHASH_VisualParam );
|
|
||||||
|
|
||||||
// We don't send the param ids. Instead, we assume that the receiver has the same params in the same sequence.
|
|
||||||
const F32 param_value = param->getWeight();
|
|
||||||
const U8 new_weight = F32_to_U8(param_value, param->getMinWeight(), param->getMaxWeight());
|
|
||||||
msg->addU8Fast(_PREHASH_ParamValue, new_weight );
|
|
||||||
//A hack to prevent ruthing on older viewers when phys wearables aren't being worn.
|
//A hack to prevent ruthing on older viewers when phys wearables aren't being worn.
|
||||||
if(!wearing_physics && param->getID() >= 10000)
|
if(!send_physics_params && param->getID() >= 10000)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
msg->nextBlockFast(_PREHASH_VisualParam );
|
||||||
|
// We don't send the param ids. Instead, we assume that the receiver has the same params in the same sequence.
|
||||||
|
const F32 param_value = param->getWeight();
|
||||||
|
const U8 new_weight = F32_to_U8(param_value, param->getMinWeight(), param->getMaxWeight());
|
||||||
|
|
||||||
|
msg->addU8Fast(_PREHASH_ParamValue, new_weight );
|
||||||
transmitted_params++;
|
transmitted_params++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7892,6 +7893,30 @@ struct LLSetWearableData
|
|||||||
LLWearable* mNewWearable;
|
LLWearable* mNewWearable;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool isFirstPhysicsWearable(EWearableType type, LLInventoryItem *new_item, LLWearable *new_wearable)
|
||||||
|
{
|
||||||
|
if (type == WT_PHYSICS && gSavedSettings.getWarning("FirstPhysicsWearable"))
|
||||||
|
{
|
||||||
|
class WearableDelayedCallback
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void setDelayedWearable( const LLSD& notification, const LLSD& response, LLUUID item_id, LLWearable *wearable )
|
||||||
|
{
|
||||||
|
if(LLNotification::getSelectedOption(notification, response) == 0) //User selected wear
|
||||||
|
{
|
||||||
|
gSavedSettings.setWarning("FirstPhysicsWearable",FALSE);
|
||||||
|
LLInventoryItem *item = gInventory.getItem(item_id);
|
||||||
|
if(item)
|
||||||
|
gAgent.setWearable(item,wearable); //re-enter.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
LLNotifications::instance().add("FirstPhysicsWearable",LLSD(),LLSD(),boost::bind(WearableDelayedCallback::setDelayedWearable, _1, _2, new_item->getUUID(),new_wearable));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL LLAgent::needsReplacement(EWearableType wearableType, S32 remove)
|
BOOL LLAgent::needsReplacement(EWearableType wearableType, S32 remove)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -7961,6 +7986,11 @@ void LLAgent::setWearableOutfit(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isFirstPhysicsWearable(type, new_item, new_wearable))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mWearableEntry[ type ].mItemID = new_item->getUUID();
|
mWearableEntry[ type ].mItemID = new_item->getUUID();
|
||||||
mWearableEntry[ type ].mWearable = new_wearable;
|
mWearableEntry[ type ].mWearable = new_wearable;
|
||||||
}
|
}
|
||||||
@@ -8025,6 +8055,11 @@ void LLAgent::setWearable( LLInventoryItem* new_item, LLWearable* new_wearable )
|
|||||||
}
|
}
|
||||||
// [/RLVa:KB]
|
// [/RLVa:KB]
|
||||||
|
|
||||||
|
if (isFirstPhysicsWearable(type, new_item, new_wearable))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if( old_wearable )
|
if( old_wearable )
|
||||||
{
|
{
|
||||||
const LLUUID& old_item_id = mWearableEntry[ type ].mItemID;
|
const LLUUID& old_item_id = mWearableEntry[ type ].mItemID;
|
||||||
|
|||||||
@@ -1791,6 +1791,7 @@ bool LLAppViewer::initConfiguration()
|
|||||||
LLFirstUse::addConfigVariable("FirstSculptedPrim");
|
LLFirstUse::addConfigVariable("FirstSculptedPrim");
|
||||||
LLFirstUse::addConfigVariable("FirstVoice");
|
LLFirstUse::addConfigVariable("FirstVoice");
|
||||||
LLFirstUse::addConfigVariable("FirstMedia");
|
LLFirstUse::addConfigVariable("FirstMedia");
|
||||||
|
LLFirstUse::addConfigVariable("FirstPhysicsWearable");
|
||||||
|
|
||||||
// [RLVa:KB] - Checked: RLVa-1.0.3a (2009-09-10) | Added: RLVa-1.0.3a
|
// [RLVa:KB] - Checked: RLVa-1.0.3a (2009-09-10) | Added: RLVa-1.0.3a
|
||||||
//LLFirstUse::addConfigVariable(RLV_SETTING_FIRSTUSE_DETACH);
|
//LLFirstUse::addConfigVariable(RLV_SETTING_FIRSTUSE_DETACH);
|
||||||
|
|||||||
@@ -989,6 +989,12 @@ void LLViewerMediaImpl::updateImagesMediaStreams()
|
|||||||
|
|
||||||
LLViewerMediaTexture* placeholder_image = (LLViewerMediaTexture*)LLViewerTextureManager::findTexture( mTextureId );
|
LLViewerMediaTexture* placeholder_image = (LLViewerMediaTexture*)LLViewerTextureManager::findTexture( mTextureId );
|
||||||
|
|
||||||
|
if(!placeholder_image)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
placeholder_image->getLastReferencedTimer()->reset();
|
||||||
|
|
||||||
if (mNeedsNewTexture
|
if (mNeedsNewTexture
|
||||||
|| placeholder_image->getUseMipMaps()
|
|| placeholder_image->getUseMipMaps()
|
||||||
|| ! placeholder_image->mIsMediaTexture
|
|| ! placeholder_image->mIsMediaTexture
|
||||||
|
|||||||
@@ -6940,5 +6940,28 @@ No
|
|||||||
<notification icon="notifytip.tga" name="BlockedChatterAvatar" type="notifytip">Blocked chat-spam from avatar [FULL_NAME] ([SOURCE])</notification>
|
<notification icon="notifytip.tga" name="BlockedChatterAvatar" type="notifytip">Blocked chat-spam from avatar [FULL_NAME] ([SOURCE])</notification>
|
||||||
<notification icon="notifytip.tga" name="BlockedChatterObjects" type="notifytip">Blocked chat-spam from objects owned by [OWNER] ([SOURCE])</notification>
|
<notification icon="notifytip.tga" name="BlockedChatterObjects" type="notifytip">Blocked chat-spam from objects owned by [OWNER] ([SOURCE])</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="notify.tga"
|
||||||
|
name="FirstPhysicsWearable"
|
||||||
|
priority="high"
|
||||||
|
type="notify">
|
||||||
|
By wearing a Physics Wearable certain server behavior will be enabled that many older viewers are incompatable with. On such viewers you may display incorrectly (often as 'Ruth').
|
||||||
|
|
||||||
|
If you wish to keep compatability with old viewers then you must not wear a Physics Wearable during your session. If you have already worn one during this session remove it and reconnect.
|
||||||
|
|
||||||
|
Click 'Wear' to attach the Physics Wearable, or click 'Cancel' if you wish to maintain compatability with legacy clients.
|
||||||
|
<unique/>
|
||||||
|
<form name="form">
|
||||||
|
<button
|
||||||
|
index="0"
|
||||||
|
name="Wear"
|
||||||
|
text="Wear"/>
|
||||||
|
<button
|
||||||
|
index="1"
|
||||||
|
name="Cancel"
|
||||||
|
text="Cancel"/>
|
||||||
|
</form>
|
||||||
|
</notification>
|
||||||
|
|
||||||
</notifications>
|
</notifications>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user