MAINT-7699: More robust cap protocol, better support for delete and support for individual tracks, support for setting environment by asset id in the cap

MAINT-7703: Initial flags sent in message protocol for parcels
master
Rider Linden 2018-08-03 16:13:22 -07:00
parent dbbb89a13c
commit b50d546d5f
11 changed files with 185 additions and 127 deletions

View File

@ -231,6 +231,9 @@ void LLParcel::init(const LLUUID &owner_id,
setAllowGroupAVSounds(TRUE);
setAllowAnyAVSounds(TRUE);
setHaveNewParcelLimitData(FALSE);
setRegionAllowEnvironmentOverride(FALSE);
setParcelEnvironmentVersion(-1);
}
void LLParcel::overrideOwner(const LLUUID& owner_id, BOOL is_group_owned)

View File

@ -511,6 +511,10 @@ public:
{ return mRegionDenyAgeUnverifiedOverride; }
BOOL getRegionAllowAccessOverride() const
{ return mRegionAllowAccessoverride; }
BOOL getRegionAllowEnvironmentOverride() const
{ return mRegionAllowEnvironmentOverride; }
S32 getParcelEnvironmentVersion() const
{ return mCurrentEnvironmentVersion; }
BOOL getAllowGroupAVSounds() const { return mAllowGroupAVSounds; }
@ -581,6 +585,9 @@ public:
void setRegionDenyAnonymousOverride(BOOL override) { mRegionDenyAnonymousOverride = override; }
void setRegionDenyAgeUnverifiedOverride(BOOL override) { mRegionDenyAgeUnverifiedOverride = override; }
void setRegionAllowAccessOverride(BOOL override) { mRegionAllowAccessoverride = override; }
void setRegionAllowEnvironmentOverride(BOOL override) { mRegionAllowEnvironmentOverride = override; }
void setParcelEnvironmentVersion(S32 version) { mCurrentEnvironmentVersion = version; }
// Accessors for parcel sellWithObjects
void setPreviousOwnerID(LLUUID prev_owner) { mPreviousOwnerID = prev_owner; }
@ -662,8 +669,10 @@ protected:
BOOL mRegionDenyAnonymousOverride;
BOOL mRegionDenyAgeUnverifiedOverride;
BOOL mRegionAllowAccessoverride;
BOOL mRegionAllowEnvironmentOverride;
BOOL mAllowGroupAVSounds;
BOOL mAllowAnyAVSounds;
S32 mCurrentEnvironmentVersion;
bool mIsDefaultDayCycle;

View File

@ -300,7 +300,6 @@ bool LLSettingsBase::validate()
{
LL_WARNS("SETTINGS") << "Validation warnings: " << result["warnings"] << LL_ENDL;
}
LL_WARNS("SETTINGS") << "Validation success is " << result["success"] << LL_ENDL;
return result["success"].asBoolean();
}

View File

@ -1375,7 +1375,9 @@ char const* const _PREHASH_RegionDenyAgeUnverified = LLMessageStringTable::getIn
char const* const _PREHASH_AgeVerificationBlock = LLMessageStringTable::getInstance()->getString("AgeVerificationBlock");
char const* const _PREHASH_RegionAllowAccessBlock = LLMessageStringTable::getInstance()->getString("RegionAllowAccessBlock");
char const* const _PREHASH_RegionAllowAccessOverride = LLMessageStringTable::getInstance()->getString("RegionAllowAccessOverride");
char const* const _PREHASH_ParcelEnvironmentBlock = LLMessageStringTable::getInstance()->getString("ParcelEnvironmentBlock");
char const* const _PREHASH_ParcelEnvironmentVersion = LLMessageStringTable::getInstance()->getString("ParcelEnvironmentVersion");
char const* const _PREHASH_RegionAllowEnvironmentOverride = LLMessageStringTable::getInstance()->getString("RegionAllowEnvironmentOverride");
char const* const _PREHASH_UCoord = LLMessageStringTable::getInstance()->getString("UCoord");
char const* const _PREHASH_VCoord = LLMessageStringTable::getInstance()->getString("VCoord");
char const* const _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex");

View File

@ -1375,6 +1375,9 @@ extern char const* const _PREHASH_RegionDenyAgeUnverified;
extern char const* const _PREHASH_AgeVerificationBlock;
extern char const* const _PREHASH_RegionAllowAccessBlock;
extern char const* const _PREHASH_RegionAllowAccessOverride;
extern char const* const _PREHASH_ParcelEnvironmentBlock;
extern char const* const _PREHASH_ParcelEnvironmentVersion;
extern char const* const _PREHASH_RegionAllowEnvironmentOverride;
extern char const* const _PREHASH_UCoord;
extern char const* const _PREHASH_VCoord;
extern char const* const _PREHASH_FaceIndex;

View File

@ -61,6 +61,18 @@
//=========================================================================
namespace
{
const std::string KEY_ENVIRONMENT("environment");
const std::string KEY_DAYASSET("day_asset");
const std::string KEY_DAYCYCLE("day_cycle");
const std::string KEY_DAYHASH("day_hash");
const std::string KEY_DAYLENGTH("day_length");
const std::string KEY_DAYOFFSET("day_offset");
const std::string KEY_ISDEFAULT("is_default");
const std::string KEY_PARCELID("parcel_id");
const std::string KEY_REGIONID("region_id");
const std::string KEY_TRACKALTS("track_altitudes");
//---------------------------------------------------------------------
LLTrace::BlockTimerStatHandle FTM_ENVIRONMENT_UPDATE("Update Environment Tick");
LLTrace::BlockTimerStatHandle FTM_SHADER_PARAM_UPDATE("Update Shader Parameters");
@ -254,6 +266,8 @@ const LLUUID LLEnvironment::KNOWN_SKY_MIDDAY("07589e0e-8e2e-4864-8e58-07b516efd9
const LLUUID LLEnvironment::KNOWN_SKY_SUNSET("8113ba47-3223-46ba-bae6-12c875091b32");
const LLUUID LLEnvironment::KNOWN_SKY_MIDNIGHT("90187088-d7f3-4656-8c27-8ba0e19e21e9");
const S32 LLEnvironment::NO_TRACK(-1);
const F32 LLEnvironment::SUN_DELTA_YAW(F_PI); // 180deg
//-------------------------------------------------------------------------
@ -269,6 +283,7 @@ LLEnvironment::LLEnvironment():
{
}
#pragma optimize ("", off)
void LLEnvironment::initSingleton()
{
LLSettingsSky::ptr_t p_default_sky = LLSettingsVOSky::buildDefaultSky();
@ -280,16 +295,17 @@ void LLEnvironment::initSingleton()
mEnvironments[ENV_DEFAULT] = mCurrentEnvironment;
requestRegionEnvironment();
requestRegion();
LLRegionInfoModel::instance().setUpdateCallback([this]() { onParcelChange(); });
gAgent.addParcelChangedCallback([this]() { onParcelChange(); });
//TODO: This frequently results in one more request than we need. It isn't breaking, but should be nicer.
gAgent.addRegionChangedCallback([this]() { requestRegionEnvironment(); });
LLRegionInfoModel::instance().setUpdateCallback([this]() { requestRegion(); });
gAgent.addRegionChangedCallback([this]() { requestRegion(); });
gAgent.whenPositionChanged([this](const LLVector3 &localpos, const LLVector3d &) { onAgentPositionHasChanged(localpos); });
}
#pragma optimize ("", on)
LLEnvironment::~LLEnvironment()
{
@ -391,6 +407,7 @@ bool LLEnvironment::isInventoryEnabled() const
!gAgent.getRegionCapability("UpdateSettingsTaskInventory").empty());
}
#pragma optimize ("", off)
void LLEnvironment::onParcelChange()
{
S32 parcel_id(INVALID_PARCEL_ID);
@ -403,11 +420,7 @@ void LLEnvironment::onParcelChange()
requestParcel(parcel_id);
}
void LLEnvironment::requestRegionEnvironment()
{
requestRegion();
}
#pragma optimize ("", on)
void LLEnvironment::onLegacyRegionSettings(LLSD data)
{
@ -950,22 +963,10 @@ void LLEnvironment::updateShaderUniforms(LLGLSLShader *shader)
void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envinfo)
{
LL_WARNS("ENVIRONMENT") << "Have environment" << LL_ENDL;
LLSettingsDay::ptr_t pday = LLSettingsVODay::buildFromEnvironmentMessage(envinfo->mDaycycleData);
LL_WARNS("ENVIRONMENT") << "serverhash=" << envinfo->mDayHash << " viewerhash=" << pday->getHash() << LL_ENDL;
if (envinfo->mParcelId == INVALID_PARCEL_ID)
{ // the returned info applies to an entire region.
LL_WARNS("LAPRAS") << "Setting Region environment" << LL_ENDL;
setEnvironment(ENV_REGION, pday, envinfo->mDayLength, envinfo->mDayOffset);
if (parcel_id != INVALID_PARCEL_ID)
{
LL_WARNS("LAPRAS") << "Had requested parcel environment #" << parcel_id << " but got region." << LL_ENDL;
clearEnvironment(ENV_PARCEL);
}
setEnvironment(ENV_REGION, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset);
mTrackAltitudes = envinfo->mAltitudes;
LL_WARNS("LAPRAS") << "Altitudes set to {" << mTrackAltitudes[0] << ", "<< mTrackAltitudes[1] << ", " << mTrackAltitudes[2] << ", " << mTrackAltitudes[3] << LL_ENDL;
@ -973,7 +974,6 @@ void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentI
else
{
LLParcel *parcel = LLViewerParcelMgr::instance().getAgentParcel();
LL_WARNS("LAPRAS") << "Have parcel environment #" << envinfo->mParcelId << LL_ENDL;
if (parcel && (parcel->getLocalID() != parcel_id))
{
@ -981,23 +981,33 @@ void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentI
return;
}
setEnvironment(ENV_PARCEL, pday, envinfo->mDayLength, envinfo->mDayOffset);
if (!envinfo->mDayCycle)
{
LL_WARNS("LAPRAS") << "Clearing environment on parcel #" << parcel_id << LL_ENDL;
clearEnvironment(ENV_PARCEL);
}
else
{
setEnvironment(ENV_PARCEL, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset);
}
}
updateEnvironment();
}
//=========================================================================
#pragma optimize ("", off)
void LLEnvironment::requestRegion()
{
if (!isExtendedEnvironmentEnabled())
{
{ /*TODO: When EEP is live on the entire grid, this can go away. */
LLEnvironmentRequest::initiate();
return;
}
requestParcel(INVALID_PARCEL_ID);
}
#pragma optimize ("", on)
void LLEnvironment::updateRegion(const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset)
{
@ -1048,8 +1058,14 @@ void LLEnvironment::requestParcel(S32 parcel_id)
void LLEnvironment::updateParcel(S32 parcel_id, const LLUUID &asset_id, S32 day_length, S32 day_offset)
{
LLSettingsVOBase::getSettingsAsset(asset_id,
[this, parcel_id, day_length, day_offset](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onUpdateParcelAssetLoaded(asset_id, settings, status, parcel_id, day_length, day_offset); });
std::string coroname =
LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment",
[this, parcel_id, asset_id, day_length, day_offset]() { coroUpdateEnvironment(parcel_id, NO_TRACK,
LLSettingsDay::ptr_t(), asset_id, day_length, day_offset, environment_apply_fn()); });
// [this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }); });
// LLSettingsVOBase::getSettingsAsset(asset_id,
// [this, parcel_id, day_length, day_offset](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onUpdateParcelAssetLoaded(asset_id, settings, status, parcel_id, day_length, day_offset); });
}
void LLEnvironment::onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 parcel_id, S32 day_length, S32 day_offset)
@ -1096,17 +1112,19 @@ void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsDay::ptr_t &pday
{
std::string coroname =
LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment",
boost::bind(&LLEnvironment::coroUpdateEnvironment, this, parcel_id,
pday, day_length, day_offset,
[this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }));
[this, parcel_id, pday, day_length, day_offset]() { coroUpdateEnvironment(parcel_id, NO_TRACK,
pday, LLUUID::null, day_length, day_offset, environment_apply_fn()); });
// [this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }); });
}
void LLEnvironment::resetParcel(S32 parcel_id)
{
std::string coroname =
LLCoros::instance().launch("LLEnvironment::coroResetEnvironment",
boost::bind(&LLEnvironment::coroResetEnvironment, this, parcel_id,
[this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }));
[this, parcel_id]() { coroResetEnvironment(parcel_id, NO_TRACK, environment_apply_fn()); });
// [this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }); });
}
void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environment_apply_fn apply)
@ -1151,7 +1169,7 @@ void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environ
}
else
{
LLSD environment = result["environment"];
LLSD environment = result[KEY_ENVIRONMENT];
if (environment.isDefined() && apply)
{
EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
@ -1166,7 +1184,7 @@ void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environ
}
}
void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pday, S32 day_length, S32 day_offset, LLEnvironment::environment_apply_fn apply)
void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, S32 track_no, LLSettingsDay::ptr_t pday, LLUUID settings_asset, S32 day_length, S32 day_offset, LLEnvironment::environment_apply_fn apply)
{
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
@ -1192,22 +1210,39 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pd
}
LLSD body(LLSD::emptyMap());
body["environment"] = LLSD::emptyMap();
body[KEY_ENVIRONMENT] = LLSD::emptyMap();
if (day_length >= 0)
body["environment"]["day_length"] = day_length;
if (day_offset >= 0)
body["environment"]["day_offset"] = day_offset;
if (track_no == NO_TRACK)
{ // day length and offset are only applicable if we are addressing the entire day cycle.
if (day_length >= 0)
body[KEY_ENVIRONMENT][KEY_DAYLENGTH] = day_length;
if (day_offset >= 0)
body[KEY_ENVIRONMENT][KEY_DAYOFFSET] = day_offset;
}
if (pday)
body["environment"]["day_cycle"] = pday->getSettings();
body[KEY_ENVIRONMENT][KEY_DAYCYCLE] = pday->getSettings();
else if (!settings_asset.isNull())
body[KEY_ENVIRONMENT][KEY_DAYASSET] = settings_asset;
LL_WARNS("LAPRAS") << "Body = " << body << LL_ENDL;
if (parcel_id != INVALID_PARCEL_ID)
if ((parcel_id != INVALID_PARCEL_ID) || (track_no != NO_TRACK))
{
std::stringstream query;
query << "?";
query << "?parcelid=" << parcel_id;
if (parcel_id != INVALID_PARCEL_ID)
{
query << "parcelid=" << parcel_id;
if (track_no != NO_TRACK)
query << "&";
}
if (track_no != NO_TRACK)
{
query << "trackno=" << track_no;
}
url += query.str();
}
@ -1228,7 +1263,7 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pd
}
else
{
LLSD environment = result["environment"];
LLSD environment = result[KEY_ENVIRONMENT];
if (environment.isDefined() && apply)
{
EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
@ -1243,7 +1278,7 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pd
}
}
void LLEnvironment::coroResetEnvironment(S32 parcel_id, environment_apply_fn apply)
void LLEnvironment::coroResetEnvironment(S32 parcel_id, S32 track_no, environment_apply_fn apply)
{
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
@ -1254,11 +1289,22 @@ void LLEnvironment::coroResetEnvironment(S32 parcel_id, environment_apply_fn app
if (url.empty())
return;
if (parcel_id != INVALID_PARCEL_ID)
if ((parcel_id != INVALID_PARCEL_ID) || (track_no != NO_TRACK))
{
std::stringstream query;
query << "?";
query << "?parcelid=" << parcel_id;
if (parcel_id != INVALID_PARCEL_ID)
{
query << "parcelid=" << parcel_id;
if (track_no != NO_TRACK)
query << "&";
}
if (track_no != NO_TRACK)
{
query << "trackno=" << track_no;
}
url += query.str();
}
@ -1279,7 +1325,7 @@ void LLEnvironment::coroResetEnvironment(S32 parcel_id, environment_apply_fn app
}
else
{
LLSD environment = result["environment"];
LLSD environment = result[KEY_ENVIRONMENT];
if (environment.isDefined() && apply)
{
EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
@ -1339,10 +1385,9 @@ LLEnvironment::EnvironmentInfo::EnvironmentInfo():
mDayLength(0),
mDayOffset(0),
mDayHash(0),
mDaycycleData(),
mDayCycle(),
mAltitudes({ { 0.0, 0.0, 0.0, 0.0 } }),
mIsDefault(false),
mIsRegion(false)
mIsDefault(false)
{
}
@ -1350,32 +1395,28 @@ LLEnvironment::EnvironmentInfo::ptr_t LLEnvironment::EnvironmentInfo::extract(LL
{
ptr_t pinfo = std::make_shared<EnvironmentInfo>();
if (environment.has("parcel_id"))
pinfo->mParcelId = environment["parcel_id"].asInteger();
if (environment.has("region_id"))
pinfo->mRegionId = environment["region_id"].asUUID();
if (environment.has("day_length"))
pinfo->mDayLength = LLSettingsDay::Seconds(environment["day_length"].asInteger());
if (environment.has("day_offset"))
pinfo->mDayOffset = LLSettingsDay::Seconds(environment["day_offset"].asInteger());
if (environment.has("day_hash"))
pinfo->mDayHash = environment["day_hash"].asInteger();
if (environment.has("day_cycle"))
pinfo->mDaycycleData = environment["day_cycle"];
if (environment.has("is_default"))
pinfo->mIsDefault = environment["is_default"].asBoolean();
if (environment.has("track_altitudes"))
{
LL_WARNS("LAPRAS") << "track_altitudes=" << environment["track_altitudes"] << LL_ENDL;
pinfo->mIsDefault = environment.has(KEY_ISDEFAULT) ? environment[KEY_ISDEFAULT].asBoolean() : true;
pinfo->mParcelId = environment.has(KEY_PARCELID) ? environment[KEY_PARCELID].asInteger() : INVALID_PARCEL_ID;
pinfo->mRegionId = environment.has(KEY_REGIONID) ? environment[KEY_REGIONID].asUUID() : LLUUID::null;
/*LAPRAS: TODO: Fix the simulator message. Shouldn't be 5, just 4*/
int idx = 1;
for (F32 &altitude : pinfo->mAltitudes)
if (environment.has(KEY_TRACKALTS))
{
for (int idx = 0; idx < 3; idx++)
{
altitude = environment["track_altitudes"][idx++].asReal();
pinfo->mAltitudes[idx+1] = environment[KEY_TRACKALTS][idx].asReal();
}
pinfo->mAltitudes[0] = 0;
}
if (environment.has(KEY_DAYCYCLE))
{
pinfo->mDayCycle = LLSettingsVODay::buildFromEnvironmentMessage(environment[KEY_DAYCYCLE]);
pinfo->mDayLength = LLSettingsDay::Seconds(environment.has(KEY_DAYLENGTH) ? environment[KEY_DAYLENGTH].asInteger() : -1);
pinfo->mDayOffset = LLSettingsDay::Seconds(environment.has(KEY_DAYOFFSET) ? environment[KEY_DAYOFFSET].asInteger() : -1);
pinfo->mDayHash = environment.has(KEY_DAYHASH) ? environment[KEY_DAYHASH].asInteger() : 0;
}
return pinfo;
}

View File

@ -65,25 +65,24 @@ public:
static const LLUUID KNOWN_SKY_SUNSET;
static const LLUUID KNOWN_SKY_MIDNIGHT;
static const S32 NO_TRACK;
struct EnvironmentInfo
{
EnvironmentInfo();
typedef std::shared_ptr<EnvironmentInfo> ptr_t;
S32 mParcelId;
LLUUID mRegionId;
S64Seconds mDayLength;
S64Seconds mDayOffset;
size_t mDayHash;
LLSD mDaycycleData;
std::array<F32, 4> mAltitudes;
bool mIsDefault;
bool mIsRegion;
static ptr_t extract(LLSD);
S32 mParcelId;
LLUUID mRegionId;
S64Seconds mDayLength;
S64Seconds mDayOffset;
size_t mDayHash;
LLSettingsDay::ptr_t mDayCycle;
std::array<F32, 4> mAltitudes;
bool mIsDefault;
static ptr_t extract(LLSD);
};
enum EnvSelection_t
@ -226,8 +225,6 @@ public:
//-------------------------------------------
connection_t setEnvironmentChanged(environment_changed_fn cb);
void requestRegionEnvironment();
void onLegacyRegionSettings(LLSD data);
void requestRegion();
@ -359,21 +356,20 @@ private:
DayInstance::ptr_t getSelectedEnvironmentInstance();
void updateCloudScroll();
void updateCloudScroll();
void onParcelChange();
void onParcelChange();
void coroRequestEnvironment(S32 parcel_id, environment_apply_fn apply);
void coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pday, S32 day_length, S32 day_offset, environment_apply_fn apply);
void coroResetEnvironment(S32 parcel_id, environment_apply_fn apply);
void coroRequestEnvironment(S32 parcel_id, environment_apply_fn apply);
void coroUpdateEnvironment(S32 parcel_id, S32 track_no, LLSettingsDay::ptr_t pday, LLUUID settings_asset, S32 day_length, S32 day_offset, environment_apply_fn apply);
void coroResetEnvironment(S32 parcel_id, S32 track_no, environment_apply_fn apply);
void recordEnvironment(S32 parcel_id, EnvironmentInfo::ptr_t environment);
void recordEnvironment(S32 parcel_id, EnvironmentInfo::ptr_t environment);
void onAgentPositionHasChanged(const LLVector3 &localpos);
void onSetEnvAssetLoaded(EnvSelection_t env, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status);
void onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 parcel_id, S32 day_length, S32 day_offset);
void onAgentPositionHasChanged(const LLVector3 &localpos);
void onSetEnvAssetLoaded(EnvSelection_t env, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status);
void onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 parcel_id, S32 day_length, S32 day_offset);
};

View File

@ -269,7 +269,7 @@ void LLSettingsVOBase::onAssetDownloadComplete(LLVFS *vfs, const LLUUID &asset_i
if (!settings)
{
status = 1;
LL_WARNS("SETTINGS") << "Unable to creat settings object." << LL_ENDL;
LL_WARNS("SETTINGS") << "Unable to create settings object." << LL_ENDL;
}
else
{

View File

@ -1483,6 +1483,8 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
BOOL region_deny_transacted_override = false; // Deprecated
BOOL region_deny_age_unverified_override = false;
BOOL region_allow_access_override = true;
BOOL region_allow_environment_override = true;
S32 parcel_environment_version = 0;
BOOL agent_parcel_update = false; // updating previous(existing) agent parcel
S32 other_clean_time = 0;
@ -1573,6 +1575,12 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
msg->getBOOLFast(_PREHASH_RegionAllowAccessBlock, _PREHASH_RegionAllowAccessOverride, region_allow_access_override);
}
if (msg->getNumberOfBlocks(_PREHASH_ParcelEnvironmentBlock))
{
msg->getS32Fast(_PREHASH_ParcelEnvironmentBlock, _PREHASH_ParcelEnvironmentVersion, parcel_environment_version);
msg->getBOOLFast(_PREHASH_ParcelEnvironmentBlock, _PREHASH_RegionAllowEnvironmentOverride, region_allow_environment_override);
}
msg->getS32("ParcelData", "OtherCleanTime", other_clean_time );
// Actually extract the data.
@ -1590,6 +1598,8 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
}
bool environment_changed = (parcel->getParcelEnvironmentVersion() != parcel_environment_version);
parcel->init(owner_id,
FALSE, FALSE, FALSE,
claim_date, claim_price_per_meter, rent_price_per_meter,
@ -1615,6 +1625,10 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
parcel->setRegionDenyAnonymousOverride(region_deny_anonymous_override);
parcel->setRegionDenyAgeUnverifiedOverride(region_deny_age_unverified_override);
parcel->setRegionAllowAccessOverride(region_allow_access_override);
parcel->setParcelEnvironmentVersion(parcel_environment_version);
parcel->setRegionAllowEnvironmentOverride(region_allow_environment_override);
parcel->unpackMessage(msg);
if (parcel == parcel_mgr.mAgentParcel)
@ -1632,9 +1646,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
// Let interesting parties know about agent parcel change.
LLViewerParcelMgr* instance = LLViewerParcelMgr::getInstance();
// Notify anything that wants to know when the agent changes parcels
gAgent.changeParcels();
if (instance->mTeleportInProgress)
{
instance->mTeleportInProgress = FALSE;
@ -1648,12 +1659,21 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
instance->mTeleportFinishedSignal(instance->mTeleportInProgressPosition, false);
}
}
}
else if (agent_parcel_update)
{
// updated agent parcel
parcel_mgr.mAgentParcel->unpackMessage(msg);
}
LL_WARNS("LAPRAS") << "Parcel environment version is " << parcel->getParcelEnvironmentVersion() << LL_ENDL;
// Notify anything that wants to know when the agent changes parcels
gAgent.changeParcels();
}
else if (agent_parcel_update)
{
// updated agent parcel
parcel_mgr.mAgentParcel->unpackMessage(msg);
if ((LLEnvironment::instance().isExtendedEnvironmentEnabled() && environment_changed))
{
LL_WARNS("LAPRAS") << "Parcel environment version is " << parcel->getParcelEnvironmentVersion() << LL_ENDL;
LLEnvironment::instance().requestParcel(local_id);
}
}
}
// Handle updating selections, if necessary.
@ -1835,26 +1855,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}//if gAudiop
};
if (LLEnvironment::instance().isExtendedEnvironmentEnabled())
{
LL_WARNS("LAPRAS") << "TODO: Hey Rider! Fix this. 1) don't rerequest parcel information. 2) if sequent_id == -1 we are selecting a parcel. Deal with that correctly." << LL_ENDL;
if (sequence_id == SELECTED_PARCEL_SEQ_ID)
{
LL_WARNS("LAPRAS") << "TODO: Hay Rider! Fix this. Get environment for selected parcel." << LL_ENDL;
}
else if ((sequence_id == HOVERED_PARCEL_SEQ_ID) ||
(sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID) ||
(sequence_id == COLLISION_NOT_ON_LIST_PARCEL_SEQ_ID) ||
(sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID))
{
/*NoOp*/
}
else
{
LLEnvironment::instance().requestParcel(local_id);
}
}
}
void LLViewerParcelMgr::optionally_start_music(const std::string& music_url)

View File

@ -4503,6 +4503,11 @@ version 2.0
RegionAllowAccessBlock Single
{ RegionAllowAccessOverride BOOL }
}
{
ParcelEnvironmentBlock Single
{ ParcelEnvironmentVersion S32 }
{ RegionAllowEnvironmentOverride BOOL }
}
}
// ParcelPropertiesUpdate

View File

@ -1 +1 @@
337f351910b0c8821cb3d447bc6578516a043c80
4c5ec7187d1af05b52b5c1bbac68d46fbc65da05