2first dirty version and non persistent parcel uglysky

master
UbitUmarov 2020-06-17 15:49:13 +01:00
parent 7a9e03876a
commit e538628dec
7 changed files with 291 additions and 195 deletions

View File

@ -172,6 +172,8 @@ namespace OpenSim.Framework
void SetParcelObjectMaxOverride(overrideParcelMaxPrimCountDelegate overrideDel); void SetParcelObjectMaxOverride(overrideParcelMaxPrimCountDelegate overrideDel);
void SetSimulatorObjectMaxOverride(overrideSimulatorMaxPrimCountDelegate overrideDel); void SetSimulatorObjectMaxOverride(overrideSimulatorMaxPrimCountDelegate overrideDel);
void StoreEnviroment(ViewerEnviroment VEnv);
/// <summary> /// <summary>
/// Set the media url for this land parcel /// Set the media url for this land parcel

View File

@ -732,6 +732,11 @@ namespace OpenSim.Framework
} }
} }
public int EnviromentVersion = -1;
[XmlIgnore] //this needs to be added by hand
public ViewerEnviroment Enviroment { get; set;}
public LandData() public LandData()
{ {
_globalID = UUID.Random(); _globalID = UUID.Random();
@ -739,6 +744,8 @@ namespace OpenSim.Framework
AnyAVSounds = true; AnyAVSounds = true;
GroupAVSounds = true; GroupAVSounds = true;
LastDwellTimeMS = Util.GetTimeStampMS(); LastDwellTimeMS = Util.GetTimeStampMS();
EnviromentVersion = -1;
Enviroment = null;
} }
/// <summary> /// <summary>
@ -804,6 +811,17 @@ namespace OpenSim.Framework
landData._parcelAccessList.Add(newEntry); landData._parcelAccessList.Add(newEntry);
} }
if (Enviroment == null)
{
landData.Enviroment = null;
landData.EnviromentVersion = -1;
}
else
{
landData.Enviroment = Enviroment.Clone();
landData.EnviromentVersion = EnviromentVersion;
}
return landData; return landData;
} }

View File

@ -6566,7 +6566,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
bool allowenvovr = (regionFlags & (uint)RegionFlags.AllowEnviromentOverride) != 0; bool allowenvovr = (regionFlags & (uint)RegionFlags.AllowEnviromentOverride) != 0;
LLSDxmlEncode.AddArrayAndMap("ParcelEnvironmentBlock", sb); LLSDxmlEncode.AddArrayAndMap("ParcelEnvironmentBlock", sb);
LLSDxmlEncode.AddElem("ParcelEnvironmentVersion", allowenvovr ? -1: -1, sb); LLSDxmlEncode.AddElem("ParcelEnvironmentVersion", allowenvovr ? -1: landData.EnviromentVersion, sb);
LLSDxmlEncode.AddElem("RegionAllowEnvironmentOverride", allowenvovr, sb); LLSDxmlEncode.AddElem("RegionAllowEnvironmentOverride", allowenvovr, sb);
LLSDxmlEncode.AddEndMapAndArray(sb); LLSDxmlEncode.AddEndMapAndArray(sb);

View File

@ -168,8 +168,9 @@ namespace OpenSim.Region.CoreModules.World.Estate
if (Scene.RegionInfo.RegionSettings.Casino) if (Scene.RegionInfo.RegionSettings.Casino)
flags |= (RegionFlags)(1 << 10); flags |= (RegionFlags)(1 << 10);
if (Scene.RegionInfo.RegionSettings.FixedSun) // if (Scene.RegionInfo.RegionSettings.FixedSun)
flags |= RegionFlags.SunFixed; // flags |= RegionFlags.SunFixed;
if (Scene.RegionInfo.RegionSettings.Sandbox) if (Scene.RegionInfo.RegionSettings.Sandbox)
flags |= RegionFlags.Sandbox; flags |= RegionFlags.Sandbox;
if (Scene.RegionInfo.EstateSettings.AllowVoice) if (Scene.RegionInfo.EstateSettings.AllowVoice)
@ -190,7 +191,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
// Omitted // Omitted
// //
// Omitted: NullLayer (what is that?)
// Omitted: SkipAgentAction (what does it do?) // Omitted: SkipAgentAction (what does it do?)
return (uint)flags; return (uint)flags;
@ -428,10 +428,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice)
{ {
uint sun = 0; //uint sun = 0;
if (Scene.RegionInfo.EstateSettings.FixedSun) //if (Scene.RegionInfo.EstateSettings.FixedSun)
sun = (uint)(Scene.RegionInfo.EstateSettings.SunPosition * 1024.0) + 0x1800; // sun = (uint)(Scene.RegionInfo.EstateSettings.SunPosition * 1024.0) + 0x1800;
UUID estateOwner; UUID estateOwner;
estateOwner = Scene.RegionInfo.EstateSettings.EstateOwner; estateOwner = Scene.RegionInfo.EstateSettings.EstateOwner;
@ -443,7 +443,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
Scene.RegionInfo.EstateSettings.EstateID, Scene.RegionInfo.EstateSettings.EstateID,
Scene.RegionInfo.EstateSettings.ParentEstateID, Scene.RegionInfo.EstateSettings.ParentEstateID,
GetEstateFlags(), GetEstateFlags(),
sun, 0,
Scene.RegionInfo.RegionSettings.Covenant, Scene.RegionInfo.RegionSettings.Covenant,
(uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime, (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime,
Scene.RegionInfo.EstateSettings.AbuseEmail, Scene.RegionInfo.EstateSettings.AbuseEmail,
@ -598,11 +598,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
Scene.RegionInfo.RegionSettings.TerrainLowerLimit = TerrainLowerLimit; Scene.RegionInfo.RegionSettings.TerrainLowerLimit = TerrainLowerLimit;
// Time of day / fixed sun // Time of day / fixed sun
Scene.RegionInfo.RegionSettings.UseEstateSun = UseEstateSun; //Scene.RegionInfo.RegionSettings.UseEstateSun = UseEstateSun;
Scene.RegionInfo.RegionSettings.FixedSun = UseFixedSun; //Scene.RegionInfo.RegionSettings.FixedSun = UseFixedSun;
Scene.RegionInfo.RegionSettings.SunPosition = SunHour; //Scene.RegionInfo.RegionSettings.SunPosition = SunHour;
if(Scene.PhysicsEnabled && Scene.PhysicsScene != null && lastwaterlevel != WaterHeight) if (Scene.PhysicsEnabled && Scene.PhysicsScene != null && lastwaterlevel != WaterHeight)
Scene.PhysicsScene.SetWaterLevel(WaterHeight); Scene.PhysicsScene.SetWaterLevel(WaterHeight);
Scene.TriggerEstateSunUpdate(); Scene.TriggerEstateSunUpdate();
@ -1405,28 +1405,28 @@ namespace OpenSim.Region.CoreModules.World.Estate
public void HandleRegionInfoRequest(IClientAPI remote_client) public void HandleRegionInfoRequest(IClientAPI remote_client)
{ {
RegionInfoForEstateMenuArgs args = new RegionInfoForEstateMenuArgs(); RegionInfoForEstateMenuArgs args = new RegionInfoForEstateMenuArgs();
args.billableFactor = Scene.RegionInfo.EstateSettings.BillableFactor; args.billableFactor = Scene.RegionInfo.EstateSettings.BillableFactor;
args.estateID = Scene.RegionInfo.EstateSettings.EstateID; args.estateID = Scene.RegionInfo.EstateSettings.EstateID;
args.maxAgents = Scene.RegionInfo.RegionSettings.AgentLimit; args.maxAgents = Scene.RegionInfo.RegionSettings.AgentLimit;
args.objectBonusFactor = (float)Scene.RegionInfo.RegionSettings.ObjectBonus; args.objectBonusFactor = (float)Scene.RegionInfo.RegionSettings.ObjectBonus;
args.parentEstateID = Scene.RegionInfo.EstateSettings.ParentEstateID; args.parentEstateID = Scene.RegionInfo.EstateSettings.ParentEstateID;
args.pricePerMeter = Scene.RegionInfo.EstateSettings.PricePerMeter; args.pricePerMeter = Scene.RegionInfo.EstateSettings.PricePerMeter;
args.redirectGridX = Scene.RegionInfo.EstateSettings.RedirectGridX; args.redirectGridX = Scene.RegionInfo.EstateSettings.RedirectGridX;
args.redirectGridY = Scene.RegionInfo.EstateSettings.RedirectGridY; args.redirectGridY = Scene.RegionInfo.EstateSettings.RedirectGridY;
args.regionFlags = GetRegionFlags(); args.regionFlags = GetRegionFlags();
args.simAccess = Scene.RegionInfo.AccessLevel; args.simAccess = Scene.RegionInfo.AccessLevel;
args.sunHour = (float)Scene.RegionInfo.RegionSettings.SunPosition; args.sunHour = 0;
args.terrainLowerLimit = (float)Scene.RegionInfo.RegionSettings.TerrainLowerLimit; args.terrainLowerLimit = (float)Scene.RegionInfo.RegionSettings.TerrainLowerLimit;
args.terrainRaiseLimit = (float)Scene.RegionInfo.RegionSettings.TerrainRaiseLimit; args.terrainRaiseLimit = (float)Scene.RegionInfo.RegionSettings.TerrainRaiseLimit;
args.useEstateSun = Scene.RegionInfo.RegionSettings.UseEstateSun; args.useEstateSun = false;
args.waterHeight = (float)Scene.RegionInfo.RegionSettings.WaterHeight; args.waterHeight = (float)Scene.RegionInfo.RegionSettings.WaterHeight;
args.simName = Scene.RegionInfo.RegionName; args.simName = Scene.RegionInfo.RegionName;
args.regionType = Scene.RegionInfo.RegionType; args.regionType = Scene.RegionInfo.RegionType;
args.AgentCapacity = Scene.RegionInfo.AgentCapacity; args.AgentCapacity = Scene.RegionInfo.AgentCapacity;
args.ObjectsCapacity = Scene.RegionInfo.ObjectCapacity; args.ObjectsCapacity = Scene.RegionInfo.ObjectCapacity;
remote_client.SendRegionInfoToEstateMenu(args); remote_client.SendRegionInfoToEstateMenu(args);
} }
private void HandleEstateCovenantRequest(IClientAPI remote_client) private void HandleEstateCovenantRequest(IClientAPI remote_client)
@ -1529,28 +1529,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
public void handleEstateChangeInfo(IClientAPI remoteClient, UUID invoice, UUID senderID, UInt32 parms1, UInt32 parms2) public void handleEstateChangeInfo(IClientAPI remoteClient, UUID invoice, UUID senderID, UInt32 parms1, UInt32 parms2)
{ {
if (parms2 == 0)
{
Scene.RegionInfo.EstateSettings.UseGlobalTime = true;
Scene.RegionInfo.EstateSettings.SunPosition = 0.0;
}
else
{
Scene.RegionInfo.EstateSettings.UseGlobalTime = false;
Scene.RegionInfo.EstateSettings.SunPosition = (parms2 - 0x1800)/1024.0;
// Warning: FixedSun should be set to True, otherwise this sun position won't be used.
}
if ((parms1 & 0x00008000) != 0) if ((parms1 & 0x00008000) != 0)
Scene.RegionInfo.EstateSettings.PublicAccess = true; Scene.RegionInfo.EstateSettings.PublicAccess = true;
else else
Scene.RegionInfo.EstateSettings.PublicAccess = false; Scene.RegionInfo.EstateSettings.PublicAccess = false;
if ((parms1 & 0x00000010) != 0)
Scene.RegionInfo.EstateSettings.FixedSun = true;
else
Scene.RegionInfo.EstateSettings.FixedSun = false;
// taxfree is now !AllowAccessOverride (note the negate) // taxfree is now !AllowAccessOverride (note the negate)
if ((parms1 & 0x00000020) != 0) if ((parms1 & 0x00000020) != 0)
Scene.RegionInfo.EstateSettings.TaxFree = false; Scene.RegionInfo.EstateSettings.TaxFree = false;
@ -1597,33 +1580,18 @@ namespace OpenSim.Region.CoreModules.World.Estate
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
TriggerEstateInfoChange(); TriggerEstateInfoChange();
Scene.TriggerEstateSunUpdate();
sendDetailedEstateData(remoteClient, invoice); sendDetailedEstateData(remoteClient, invoice);
} }
public bool handleEstateChangeInfoCap(string estateName, UUID invoice, public bool handleEstateChangeInfoCap(string estateName, UUID invoice,
int sunHour, bool sunFixed,
bool externallyVisible, bool externallyVisible,
bool allowDirectTeleport, bool allowDirectTeleport,
bool denyAnonymous, bool denyAgeUnverified, bool denyAnonymous, bool denyAgeUnverified,
bool alloVoiceChat, bool overridePublicAccess, bool alloVoiceChat, bool overridePublicAccess,
bool allowEnviromentOverride) bool allowEnviromentOverride)
{ {
if (sunHour == 0)
{
Scene.RegionInfo.EstateSettings.UseGlobalTime = true;
Scene.RegionInfo.EstateSettings.SunPosition = 0.0;
}
else
{
Scene.RegionInfo.EstateSettings.UseGlobalTime = false;
Scene.RegionInfo.EstateSettings.SunPosition = (sunHour - 0x1800) / 1024.0;
// Warning: FixedSun should be set to True, otherwise this sun position won't be used.
}
Scene.RegionInfo.EstateSettings.PublicAccess = externallyVisible; Scene.RegionInfo.EstateSettings.PublicAccess = externallyVisible;
Scene.RegionInfo.EstateSettings.FixedSun = sunFixed;
Scene.RegionInfo.EstateSettings.AllowDirectTeleport = allowDirectTeleport; Scene.RegionInfo.EstateSettings.AllowDirectTeleport = allowDirectTeleport;
Scene.RegionInfo.EstateSettings.DenyAnonymous = denyAnonymous; Scene.RegionInfo.EstateSettings.DenyAnonymous = denyAnonymous;
@ -1637,8 +1605,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
TriggerEstateInfoChange(); TriggerEstateInfoChange();
Scene.TriggerEstateSunUpdate();
return true; return true;
} }
@ -1654,8 +1620,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
Scene.RegionInfo.RegionSettings.UseEstateSun, Scene.RegionInfo.RegionSettings.UseEstateSun,
Scene.RegionInfo.RegionSettings.FixedSun, Scene.RegionInfo.RegionSettings.FixedSun,
(float)Scene.RegionInfo.RegionSettings.SunPosition, (float)Scene.RegionInfo.RegionSettings.SunPosition,
Scene.RegionInfo.EstateSettings.UseGlobalTime, //Scene.RegionInfo.EstateSettings.UseGlobalTime,
Scene.RegionInfo.EstateSettings.FixedSun, false,
//Scene.RegionInfo.EstateSettings.FixedSun,
false,
(float)Scene.RegionInfo.EstateSettings.SunPosition); (float)Scene.RegionInfo.EstateSettings.SunPosition);
// sendRegionInfoPacketToAll(); already done by setRegionTerrainSettings // sendRegionInfoPacketToAll(); already done by setRegionTerrainSettings
@ -1691,7 +1659,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
client.OnLandStatRequest += HandleLandStatRequest; client.OnLandStatRequest += HandleLandStatRequest;
} }
public uint GetEstateFlags() public uint GetEstateFlags()
{ {
RegionFlags flags = RegionFlags.None; RegionFlags flags = RegionFlags.None;
@ -1702,13 +1669,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
flags |= RegionFlags.AllowSetHome; flags |= RegionFlags.AllowSetHome;
if (Scene.RegionInfo.EstateSettings.ResetHomeOnTeleport) if (Scene.RegionInfo.EstateSettings.ResetHomeOnTeleport)
flags |= RegionFlags.ResetHomeOnTeleport; flags |= RegionFlags.ResetHomeOnTeleport;
if (Scene.RegionInfo.EstateSettings.FixedSun) //if (Scene.RegionInfo.EstateSettings.FixedSun)
flags |= RegionFlags.SunFixed; // flags |= RegionFlags.SunFixed;
if (!Scene.RegionInfo.EstateSettings.TaxFree) // this is now wrong means !ALLOW_ACCESS_OVERRIDE if (!Scene.RegionInfo.EstateSettings.TaxFree) // this is now wrong means !ALLOW_ACCESS_OVERRIDE
flags |= RegionFlags.AllowParcelAccessOverride; flags |= RegionFlags.AllowParcelAccessOverride;
if(Scene.RegionInfo.EstateSettings.AllowEnviromentOverride)
flags |= RegionFlags.AllowEnviromentOverride;
if (Scene.RegionInfo.EstateSettings.PublicAccess) //?? if (Scene.RegionInfo.EstateSettings.PublicAccess) //??
flags |= (RegionFlags.PublicAllowed | RegionFlags.ExternallyVisible); flags |= (RegionFlags.PublicAllowed | RegionFlags.ExternallyVisible);
@ -1732,10 +1697,12 @@ namespace OpenSim.Region.CoreModules.World.Estate
if (Scene.RegionInfo.EstateSettings.AllowVoice) if (Scene.RegionInfo.EstateSettings.AllowVoice)
flags |= RegionFlags.AllowVoice; flags |= RegionFlags.AllowVoice;
if (Scene.RegionInfo.EstateSettings.DenyMinors) if (Scene.RegionInfo.EstateSettings.DenyMinors)
flags |= RegionFlags.DenyAgeUnverified; flags |= RegionFlags.DenyAgeUnverified;
if (Scene.RegionInfo.EstateSettings.AllowEnviromentOverride)
flags |= RegionFlags.AllowEnviromentOverride;
return (uint)flags; return (uint)flags;
} }

View File

@ -1981,5 +1981,19 @@ namespace OpenSim.Region.CoreModules.World.Land
if (delete.Count > 0) if (delete.Count > 0)
m_scene.EventManager.TriggerLandObjectUpdated((uint)LandData.LocalID, this); m_scene.EventManager.TriggerLandObjectUpdated((uint)LandData.LocalID, this);
} }
public void StoreEnviroment(ViewerEnviroment VEnv)
{
LandData.Enviroment = VEnv;
if (VEnv == null)
LandData.EnviromentVersion = -1;
else
{
++LandData.EnviromentVersion;
VEnv.version = LandData.EnviromentVersion;
}
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, LandData);
SendLandUpdateToAvatarsOverMe();
}
} }
} }

View File

@ -62,6 +62,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare
private IEstateModule m_estateModule; private IEstateModule m_estateModule;
private IEventQueue m_eventQueue; private IEventQueue m_eventQueue;
private IAssetService m_assetService; private IAssetService m_assetService;
private ILandChannel m_landChannel;
private static ViewerEnviroment m_DefaultEnv = null; private static ViewerEnviroment m_DefaultEnv = null;
private static readonly string m_defaultDayAssetID = "5646d39e-d3d7-6aff-ed71-30fc87d64a91"; private static readonly string m_defaultDayAssetID = "5646d39e-d3d7-6aff-ed71-30fc87d64a91";
@ -140,6 +141,13 @@ namespace OpenSim.Region.CoreModules.World.LightShare
return; return;
} }
m_landChannel = m_scene.LandChannel;
if (m_landChannel == null)
{
Enabled = false;
return;
}
if (m_DefaultEnv == null) if (m_DefaultEnv == null)
{ {
AssetBase defEnv = m_assetService.Get(m_defaultDayAssetID); AssetBase defEnv = m_assetService.Get(m_defaultDayAssetID);
@ -193,6 +201,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare
UpdateEnvTime(); UpdateEnvTime();
scene.EventManager.OnRegisterCaps += OnRegisterCaps; scene.EventManager.OnRegisterCaps += OnRegisterCaps;
scene.EventManager.OnFrame += UpdateEnvTime; scene.EventManager.OnFrame += UpdateEnvTime;
scene.EventManager.OnAvatarEnteringNewParcel += OnAvatarEnteringNewParcel;
} }
public void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)
@ -243,7 +252,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare
WindlightRefresh(0); WindlightRefresh(0);
} }
public void WindlightRefresh(int interpolate) public void WindlightRefresh(int interpolate, bool notforparcel = true)
{ {
List<byte[]> ls = null; List<byte[]> ls = null;
m_scene.ForEachClient(delegate (IClientAPI client) m_scene.ForEachClient(delegate (IClientAPI client)
@ -253,7 +262,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare
uint vflags = client.GetViewerCaps(); uint vflags = client.GetViewerCaps();
if ((vflags & 0x8000) != 0) if (notforparcel && (vflags & 0x8000) != 0 )
m_estateModule.HandleRegionInfoRequest(client); m_estateModule.HandleRegionInfoRequest(client);
else if ((vflags & 0x4000) != 0) else if ((vflags & 0x4000) != 0)
@ -343,7 +352,6 @@ namespace OpenSim.Region.CoreModules.World.LightShare
} }
} }
private void processExtEnv(IOSHttpRequest request, IOSHttpResponse response, UUID agentID, Caps caps) private void processExtEnv(IOSHttpRequest request, IOSHttpResponse response, UUID agentID, Caps caps)
{ {
switch(request.HttpMethod) switch(request.HttpMethod)
@ -379,9 +387,19 @@ namespace OpenSim.Region.CoreModules.World.LightShare
} }
if(parcel == -1) if(parcel == -1)
{
StoreOnRegion(null); StoreOnRegion(null);
WindlightRefresh(0);
WindlightRefresh(0); }
else
{
ILandObject land = m_scene.LandChannel.GetLandObject(parcel);
if (land != null && land.LandData != null)
{
land.StoreEnviroment(null);
WindlightRefresh(0, false);
}
}
StringBuilder sb = LLSDxmlEncode.Start(); StringBuilder sb = LLSDxmlEncode.Start();
LLSDxmlEncode.AddMap(sb); LLSDxmlEncode.AddMap(sb);
@ -395,19 +413,26 @@ namespace OpenSim.Region.CoreModules.World.LightShare
private void GetExtEnvironmentSettings(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, UUID agentID) private void GetExtEnvironmentSettings(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, UUID agentID)
{ {
int parcel = -1;
if (httpRequest.Query.Count > 0) if (httpRequest.Query.Count > 0)
{ {
int parcel = -1;
if (httpRequest.Query.ContainsKey("parcelid")) if (httpRequest.Query.ContainsKey("parcelid"))
{ {
Int32.TryParse((string)httpRequest.Query["parcelid"], out parcel); Int32.TryParse((string)httpRequest.Query["parcelid"], out parcel);
} }
OSD oenv = ViewerEnviroment.DefaultToOSD(regionID, parcel);
httpResponse.RawBuffer = Util.UTF8NBGetbytes(OSDParser.SerializeLLSDXmlString(oenv));
httpResponse.StatusCode = (int)HttpStatusCode.OK;
} }
ViewerEnviroment VEnv = GetRegionEnviroment(); ViewerEnviroment VEnv;
if (parcel == -1)
VEnv = GetRegionEnviroment();
else
{
ILandObject land = m_scene.LandChannel.GetLandObject(parcel);
if (land != null && land.LandData != null && land.LandData.Enviroment != null)
VEnv = land.LandData.Enviroment;
else
VEnv = GetRegionEnviroment();
}
OSDMap map = new OSDMap(); OSDMap map = new OSDMap();
map["environment"] = VEnv.ToOSD(); map["environment"] = VEnv.ToOSD();
@ -439,114 +464,150 @@ namespace OpenSim.Region.CoreModules.World.LightShare
StringBuilder sb = LLSDxmlEncode.Start(); StringBuilder sb = LLSDxmlEncode.Start();
ScenePresence sp = m_scene.GetScenePresence(agentID);
if (sp == null || sp.IsChildAgent || sp.IsNPC)
{
message = "Could not locate your avatar";
goto Error;
}
if (httpRequest.Query.Count > 0) if (httpRequest.Query.Count > 0)
{ {
if (httpRequest.Query.ContainsKey("parcelid")) if (httpRequest.Query.ContainsKey("parcelid"))
{ {
Int32.TryParse((string)httpRequest.Query["parcelid"], out parcel); if (!Int32.TryParse((string)httpRequest.Query["parcelid"], out parcel))
{
message = "Failed to decode request";
goto Error;
}
} }
if (httpRequest.Query.ContainsKey("trackno")) if (httpRequest.Query.ContainsKey("trackno"))
{ {
Int32.TryParse((string)httpRequest.Query["trackno"], out track); if (!Int32.TryParse((string)httpRequest.Query["trackno"], out track))
{
message = "Failed to decode request";
goto Error;
}
}
if (track != -1)
{
message = "Enviroment Track not suported";
goto Error;
} }
message = "Parcel Enviroment not supported";
goto skiped;
} }
if(parcel == -1) ViewerEnviroment VEnv = m_scene.RegionEnviroment;
ILandObject lchannel;
if (parcel == -1)
{ {
if (!m_scene.Permissions.CanIssueEstateCommand(agentID, false)) if (!m_scene.Permissions.CanIssueEstateCommand(agentID, false))
{ {
message = "Insufficient estate permissions, settings has not been saved."; message = "Insufficient estate permissions, settings has not been saved.";
goto skiped; goto Error;
} }
VEnv = m_scene.RegionEnviroment;
lchannel = null;
} }
else
if(track == -1)
{ {
try lchannel = m_landChannel.GetLandObject(parcel);
if(lchannel == null || lchannel.LandData == null)
{ {
OSD req = OSDParser.Deserialize(httpRequest.InputStream); message = "Could not locate requested parcel";
if(req is OpenMetaverse.StructuredData.OSDMap) goto Error;
{
OpenMetaverse.StructuredData.OSDMap map = req as OpenMetaverse.StructuredData.OSDMap;
if(map.TryGetValue("environment", out OSD env))
{
ViewerEnviroment VEnv = m_scene.RegionEnviroment;
if (VEnv == null)
{
// need a proper clone
VEnv = new ViewerEnviroment();
OSD otmp = m_DefaultEnv.ToOSD();
string tmpstr = OSDParser.SerializeLLSDXmlString(otmp);
otmp = OSDParser.DeserializeLLSDXml(tmpstr);
VEnv.FromOSD(otmp);
}
OSDMap evmap = (OSDMap)env;
if(evmap.TryGetValue("day_asset", out OSD tmp) && !evmap.ContainsKey("day_cycle"))
{
string id = tmp.AsString();
AssetBase asset = m_assetService.Get(id);
if(asset == null || asset.Data == null || asset.Data.Length == 0)
{
httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
try
{
OSD oenv = OSDParser.Deserialize(asset.Data);
VEnv.CycleFromOSD(oenv);
}
catch
{
httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
}
VEnv.FromOSD(env);
StoreOnRegion(VEnv);
WindlightRefresh(0);
success = true;
m_log.InfoFormat("[{0}]: ExtEnviromet settings saved from agentID {1} in region {2}",
Name, agentID, caps.RegionName);
}
}
else if (req is OSDArray)
{
ViewerEnviroment VEnv = new ViewerEnviroment();
VEnv.FromWLOSD(req);
StoreOnRegion(VEnv);
success = true;
WindlightRefresh(0);
m_log.InfoFormat("[{0}]: New Environment settings has been saved from agentID {1} in region {2}",
Name, agentID, caps.RegionName);
LLSDxmlEncode.AddMap(sb);
LLSDxmlEncode.AddElem("messageID", UUID.Zero, sb);
LLSDxmlEncode.AddElem("regionID", regionID, sb);
LLSDxmlEncode.AddElem("success", success, sb);
LLSDxmlEncode.AddEndMap(sb);
httpResponse.RawBuffer = Util.UTF8NBGetbytes(LLSDxmlEncode.End(sb));
httpResponse.StatusCode = (int)HttpStatusCode.OK;
return;
}
} }
catch (Exception e)
if (!m_scene.Permissions.CanEditParcelProperties(agentID, lchannel, 0, true)) // wrong
{ {
m_log.ErrorFormat("[{0}]: ExtEnvironment settings not saved for region {1}, Exception: {2} - {3}", message = "No permission to change parcel enviroment";
Name, caps.RegionName, e.Message, e.StackTrace); goto Error;
success = false;
message = String.Format("ExtEnvironment Set for region {0} has failed, settings not saved.", caps.RegionName);
} }
VEnv = lchannel.LandData.Enviroment;
} }
skiped: try
{
OSD req = OSDParser.Deserialize(httpRequest.InputStream);
if(req is OpenMetaverse.StructuredData.OSDMap)
{
OSDMap map = req as OpenMetaverse.StructuredData.OSDMap;
if(map.TryGetValue("environment", out OSD env))
{
if (VEnv == null)
// need a proper clone
VEnv = m_DefaultEnv.Clone();
OSDMap evmap = (OSDMap)env;
if(evmap.TryGetValue("day_asset", out OSD tmp) && !evmap.ContainsKey("day_cycle"))
{
string id = tmp.AsString();
AssetBase asset = m_assetService.Get(id);
if(asset == null || asset.Data == null || asset.Data.Length == 0)
{
httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
try
{
OSD oenv = OSDParser.Deserialize(asset.Data);
VEnv.CycleFromOSD(oenv);
}
catch
{
httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
}
VEnv.FromOSD(env);
if(lchannel == null)
{
StoreOnRegion(VEnv);
m_log.InfoFormat("[{0}]: ExtEnviroment region {1} settings from agentID {2} saved",
Name, caps.RegionName, agentID);
}
else
{
lchannel.StoreEnviroment(VEnv);
m_log.InfoFormat("[{0}]: ExtEnviroment parcel {1} of region {2} settings from agentID {3} saved",
Name, parcel, caps.RegionName, agentID);
}
WindlightRefresh(0, lchannel == null);
success = true;
}
}
else if (req is OSDArray)
{
VEnv = new ViewerEnviroment();
VEnv.FromWLOSD(req);
StoreOnRegion(VEnv);
success = true;
WindlightRefresh(0);
m_log.InfoFormat("[{0}]: ExtEnviroment region {1} settings from agentID {2} saved",
Name, caps.RegionName, agentID);
LLSDxmlEncode.AddMap(sb);
LLSDxmlEncode.AddElem("messageID", UUID.Zero, sb);
LLSDxmlEncode.AddElem("regionID", regionID, sb);
LLSDxmlEncode.AddElem("success", success, sb);
LLSDxmlEncode.AddEndMap(sb);
httpResponse.RawBuffer = Util.UTF8NBGetbytes(LLSDxmlEncode.End(sb));
httpResponse.StatusCode = (int)HttpStatusCode.OK;
return;
}
}
catch (Exception e)
{
m_log.ErrorFormat("[{0}]: ExtEnvironment settings not saved for region {1}, Exception: {2} - {3}",
Name, caps.RegionName, e.Message, e.StackTrace);
success = false;
message = String.Format("ExtEnvironment Set for region {0} has failed, settings not saved.", caps.RegionName);
}
Error:
string response; string response;
LLSDxmlEncode.AddMap(sb); LLSDxmlEncode.AddMap(sb);
@ -565,7 +626,19 @@ namespace OpenSim.Region.CoreModules.World.LightShare
// m_log.DebugFormat("[{0}]: Environment GET handle for agentID {1} in region {2}", // m_log.DebugFormat("[{0}]: Environment GET handle for agentID {1} in region {2}",
// Name, agentID, caps.RegionName); // Name, agentID, caps.RegionName);
ViewerEnviroment VEnv = GetRegionEnviroment(); ScenePresence sp = m_scene.GetScenePresence(agentID);
if (sp == null || sp.IsChildAgent || sp.IsNPC)
{
response.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
ViewerEnviroment VEnv;
ILandObject land = m_scene.LandChannel.GetLandObject(sp.AbsolutePosition.X, sp.AbsolutePosition.Y);
if (land != null && land.LandData != null && land.LandData.Enviroment != null)
VEnv = land.LandData.Enviroment;
else
VEnv = GetRegionEnviroment();
OSD d = VEnv.ToWLOSD(UUID.Zero, regionID); OSD d = VEnv.ToWLOSD(UUID.Zero, regionID);
string env = OSDParser.SerializeLLSDXmlString(d); string env = OSDParser.SerializeLLSDXmlString(d);
@ -586,7 +659,6 @@ namespace OpenSim.Region.CoreModules.World.LightShare
response.StatusCode = (int)HttpStatusCode.OK; response.StatusCode = (int)HttpStatusCode.OK;
} }
private void SetEnvironmentSettings(IOSHttpRequest request, IOSHttpResponse response, UUID agentID) private void SetEnvironmentSettings(IOSHttpRequest request, IOSHttpResponse response, UUID agentID)
{ {
// m_log.DebugFormat("[{0}]: Environment SET handle from agentID {1} in region {2}", // m_log.DebugFormat("[{0}]: Environment SET handle from agentID {1} in region {2}",
@ -598,32 +670,45 @@ namespace OpenSim.Region.CoreModules.World.LightShare
if (!m_scene.Permissions.CanIssueEstateCommand(agentID, false)) if (!m_scene.Permissions.CanIssueEstateCommand(agentID, false))
{ {
fail_reason = "Insufficient estate permissions, settings has not been saved."; fail_reason = "Insufficient estate permissions, settings has not been saved.";
goto Error;
} }
else
ScenePresence sp = m_scene.GetScenePresence(agentID);
if (sp == null || sp.IsChildAgent || sp.IsNPC)
{ {
try response.StatusCode = (int)HttpStatusCode.NotFound;
{ return;
ViewerEnviroment VEnv = new ViewerEnviroment();
OSD env = OSDParser.Deserialize(request.InputStream);
VEnv.FromWLOSD(env);
StoreOnRegion(VEnv);
success = true;
WindlightRefresh(0);
m_log.InfoFormat("[{0}]: New Environment settings has been saved from agentID {1} in region {2}",
Name, agentID, m_scene.Name);
}
catch (Exception e)
{
m_log.ErrorFormat("[{0}]: Environment settings has not been saved for region {1}, Exception: {2} - {3}",
Name, m_scene.Name, e.Message, e.StackTrace);
success = false;
fail_reason = String.Format("Environment Set for region {0} has failed, settings not saved.", m_scene.Name);
}
} }
ILandObject land = m_scene.LandChannel.GetLandObject(sp.AbsolutePosition.X, sp.AbsolutePosition.Y);
if (land != null && land.LandData != null && land.LandData.Enviroment != null)
{
fail_reason = "The parcel where you are has own enviroment set. You need a updated viewer to change enviroment";
goto Error;
}
try
{
ViewerEnviroment VEnv = new ViewerEnviroment();
OSD env = OSDParser.Deserialize(request.InputStream);
VEnv.FromWLOSD(env);
StoreOnRegion(VEnv);
success = true;
WindlightRefresh(0);
m_log.InfoFormat("[{0}]: New Environment settings has been saved from agentID {1} in region {2}",
Name, agentID, m_scene.Name);
}
catch (Exception e)
{
m_log.ErrorFormat("[{0}]: Environment settings has not been saved for region {1}, Exception: {2} - {3}",
Name, m_scene.Name, e.Message, e.StackTrace);
success = false;
fail_reason = String.Format("Environment Set for region {0} has failed, settings not saved.", m_scene.Name);
}
Error:
StringBuilder sb = LLSDxmlEncode.Start(); StringBuilder sb = LLSDxmlEncode.Start();
LLSDxmlEncode.AddMap(sb); LLSDxmlEncode.AddMap(sb);
LLSDxmlEncode.AddElem("messageID", UUID.Zero, sb); LLSDxmlEncode.AddElem("messageID", UUID.Zero, sb);
@ -738,6 +823,16 @@ namespace OpenSim.Region.CoreModules.World.LightShare
client.SendGenericMessage("Windlight", UUID.Random(), param); client.SendGenericMessage("Windlight", UUID.Random(), param);
} }
private void OnAvatarEnteringNewParcel(ScenePresence sp, int localLandID, UUID regionID)
{
IClientAPI client = sp.ControllingClient;
uint vflags = client.GetViewerCaps();
if((vflags & 0x8000) != 0)
return;
if(m_scene.RegionInfo.EstateSettings.AllowEnviromentOverride)
m_eventQueue.WindlightRefreshEvent(1, client.AgentId);
}
private void UpdateEnvTime() private void UpdateEnvTime()
{ {
double now = Util.GetTimeStamp(); double now = Util.GetTimeStamp();
@ -770,6 +865,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare
wldayFrac = Utils.Clamp(wldayFrac, 0, 2f); wldayFrac = Utils.Clamp(wldayFrac, 0, 2f);
wldayFrac *= Utils.PI; wldayFrac *= Utils.PI;
float eepDayFrac = dayFrac * Utils.TWO_PI; float eepDayFrac = dayFrac * Utils.TWO_PI;
m_scene.ForEachRootScenePresence(delegate (ScenePresence sp) m_scene.ForEachRootScenePresence(delegate (ScenePresence sp)

View File

@ -178,7 +178,6 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
dispList.AddRow("Restrict pushing", rs.RestrictPushing); dispList.AddRow("Restrict pushing", rs.RestrictPushing);
dispList.AddRow("Fixed sun", rs.FixedSun); dispList.AddRow("Fixed sun", rs.FixedSun);
dispList.AddRow("Sun position", rs.SunPosition); dispList.AddRow("Sun position", rs.SunPosition);
dispList.AddRow("Sun vector", rs.SunVector);
dispList.AddRow("Use estate sun", rs.UseEstateSun); dispList.AddRow("Use estate sun", rs.UseEstateSun);
dispList.AddRow("Telehub UUID", rs.TelehubObject); dispList.AddRow("Telehub UUID", rs.TelehubObject);
dispList.AddRow("Terrain lower limit", string.Format("{0} m", rs.TerrainLowerLimit)); dispList.AddRow("Terrain lower limit", string.Format("{0} m", rs.TerrainLowerLimit));