Cleaner port of Ansariel's fix for Attachment loss on TP/Crossing

This commit is contained in:
Liru Færs
2020-01-04 12:07:59 -05:00
parent 6d776632a9
commit 28af96229b
6 changed files with 39 additions and 3 deletions

View File

@@ -381,6 +381,7 @@ LLAgent::LLAgent() :
mAgentAccess(new LLAgentAccess(gSavedSettings)),
mGodLevelChangeSignal(),
mIsCrossingRegion(false),
mCanEditParcel(false),
mTeleportSourceSLURL(new LLSLURL),
mTeleportRequest(),
@@ -4431,6 +4432,7 @@ void LLAgent::setTeleportState(ETeleportState state)
{
case TELEPORT_NONE:
mbTeleportKeepsLookAt = false;
mIsCrossingRegion = false; // Attachments getting lost on TP; finished TP
break;
case TELEPORT_MOVING:

View File

@@ -739,6 +739,13 @@ private:
** **
*******************************************************************************/
// Attachments getting lost on TP
public:
void setIsCrossingRegion(bool is_crossing) { mIsCrossingRegion = is_crossing; }
bool isCrossingRegion() const { return mIsCrossingRegion; }
private:
bool mIsCrossingRegion;
// Build
public:
bool canEditParcel() const { return mCanEditParcel; }

View File

@@ -2841,6 +2841,12 @@ void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool
{
if(!category) return;
// Attachments getting lost on TP:
// We'll be sending the outfit change request to our current region,
// so we'll learn them if they've been sending bad kills.
// We don't take kindly to that sorta behaviour round these parts.
gAgent.setIsCrossingRegion(false);
selfClearPhases();
selfStartPhase("wear_inventory_category");

View File

@@ -8564,6 +8564,7 @@ void handle_rebake_textures(void*)
{
LLAppearanceMgr::instance().requestServerAppearanceUpdate();
}
gAgent.setIsCrossingRegion(false); // Attachments getting lost on TP
}
void toggle_visibility(void* user_data)

View File

@@ -4904,6 +4904,8 @@ void process_crossed_region(LLMessageSystem* msg, void**)
}
LL_INFOS("Messaging") << "process_crossed_region()" << LL_ENDL;
gAgentAvatarp->resetRegionCrossingTimer();
gAgent.setIsCrossingRegion(false); // Attachments getting lost on TP, region crossing hook
U32 sim_ip;
msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip);
@@ -5300,10 +5302,23 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
LLViewerObject *objectp = gObjectList.findObject(id);
if (objectp)
{
if (different_region && gAgentAvatarp == objectp->getAvatar())
if (gAgentAvatarp == objectp->getAvatar())
{
LL_WARNS() << "Region other than our own killing our attachments!!" << LL_ENDL;
continue;
if (different_region)
{
LL_WARNS() << "Region other than our own killing our attachments!!" << LL_ENDL;
continue;
}
else if (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE)
{
LL_WARNS() << "Region killing our attachments during teleport!!" << LL_ENDL;
continue;
}
else if (gAgent.isCrossingRegion())
{
LL_WARNS() << "Region killing our attachments during region cross!!" << LL_ENDL;
continue;
}
}
// Display green bubble on kill
if ( gShowObjectUpdates )
@@ -6851,6 +6866,10 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
return true;
}
}
else if (notificationID == "expired_region_handoff" || notificationID == "invalid_region_handoff") // borked region handoff
{
gAgent.setIsCrossingRegion(false); // Attachments getting lost on TP
}
// HACK -- handle callbacks for specific alerts.
if (notificationID == "HomePositionSet")
{

View File

@@ -869,6 +869,7 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
}
mRegionCrossingTimer.reset();
LLViewerObject::updateRegion(regionp);
gAgent.setIsCrossingRegion(false); // Attachments getting lost on TP
}
//--------------------------------------------------------------------