public void StoreRegionWindlightSettings(UUID RegionID, UUID ID, RegionLightShareData map) { GenericUtils.AddGeneric(RegionID, "RegionWindLightData", ID.ToString(), map.ToOSD(), GD); }
public void SendProfileToClientEQ(ScenePresence presence, RegionLightShareData wl) { OSD item = BuildSendEQMessage(wl.ToOSD()); IEventQueue eq = presence.Scene.RequestModuleInterface<IEventQueue>(); if (eq != null) eq.Enqueue(item, presence.UUID); }
private Hashtable DispatchWindLightSettings(Hashtable m_dhttpMethod, UUID capuuid, UUID agentID) { Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; responsedata["str_response_string"] = ""; ScenePresence SP = m_scene.GetScenePresence(agentID); if(SP == null) return responsedata; //They don't exist m_log.Info("[WindLightSettings]: Got a request to update WindLight from " + SP.Name); OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml((string)m_dhttpMethod["requestbody"]); RegionLightShareData lsd = new RegionLightShareData(); lsd.FromOSD(rm); lsd.regionID = SP.Scene.RegionInfo.RegionID; bool remove = false; if (rm.ContainsKey("remove")) remove = rm["remove"].AsBoolean(); if (remove) { if (lsd.type == 0) //Region { if (!SP.Scene.Permissions.CanIssueEstateCommand(SP.UUID, false)) return responsedata; // No permissions bool found = false; foreach (RegionLightShareData regionLSD in m_WindlightSettings.Values) { if (lsd.minEffectiveAltitude == regionLSD.minEffectiveAltitude && lsd.maxEffectiveAltitude == regionLSD.maxEffectiveAltitude) { //it exists found = true; break; } } //Set to default if(found) SaveWindLightSettings(lsd.minEffectiveAltitude, new RegionLightShareData()); } else if (lsd.type == 1) //Parcel { ILandObject land = SP.Scene.LandChannel.GetLandObject((int)SP.AbsolutePosition.X, (int)SP.AbsolutePosition.Y); if (!SP.Scene.Permissions.GenericParcelPermission(SP.UUID, land, (ulong)GroupPowers.LandOptions)) return responsedata; // No permissions IOpenRegionSettingsModule ORSM = SP.Scene.RequestModuleInterface<IOpenRegionSettingsModule>(); if (ORSM == null || !ORSM.AllowParcelWindLight) { SP.ControllingClient.SendAlertMessage("Parcel WindLight is disabled in this region."); return responsedata; } OSDMap map = land.LandData.GenericDataMap; OSDMap innerMap = new OSDMap(); if (land.LandData.GenericDataMap.ContainsKey("WindLight")) innerMap = (OSDMap)map["WindLight"]; if (innerMap.ContainsKey(lsd.minEffectiveAltitude.ToString())) { innerMap.Remove(lsd.minEffectiveAltitude.ToString()); } land.LandData.AddGenericData("WindLight", innerMap); //Update the client SendProfileToClient(SP); } } else { if (lsd.type == 0) //Region { if (!SP.Scene.Permissions.CanIssueEstateCommand(SP.UUID, false)) return responsedata; // No permissions foreach (RegionLightShareData regionLSD in m_WindlightSettings.Values) { string message = ""; if (checkAltitude(lsd, regionLSD, out message)) { SP.ControllingClient.SendAlertMessage(message); return responsedata; } } SaveWindLightSettings(lsd.minEffectiveAltitude, lsd); } else if (lsd.type == 1) //Parcel { ILandObject land = SP.Scene.LandChannel.GetLandObject((int)SP.AbsolutePosition.X, (int)SP.AbsolutePosition.Y); if (!SP.Scene.Permissions.GenericParcelPermission(SP.UUID, land, (ulong)GroupPowers.LandOptions)) return responsedata; // No permissions IOpenRegionSettingsModule ORSM = SP.Scene.RequestModuleInterface<IOpenRegionSettingsModule>(); if (ORSM == null || !ORSM.AllowParcelWindLight) { SP.ControllingClient.SendAlertMessage("Parcel WindLight is disabled in this region."); return responsedata; } OSDMap map = land.LandData.GenericDataMap; OSDMap innerMap = new OSDMap(); if (land.LandData.GenericDataMap.ContainsKey("WindLight")) innerMap = (OSDMap)map["WindLight"]; string removeThisMap = ""; foreach (KeyValuePair<string, OSD> kvp in innerMap) { OSDMap lsdMap = (OSDMap)kvp.Value; RegionLightShareData parcelLSD = new RegionLightShareData(); parcelLSD.FromOSD(lsdMap); string message = ""; if (checkAltitude(lsd, parcelLSD, out message)) { SP.ControllingClient.SendAlertMessage(message); return responsedata; } } if (removeThisMap != "") innerMap.Remove(removeThisMap); innerMap[lsd.minEffectiveAltitude.ToString()] = lsd.ToOSD(); land.LandData.AddGenericData("WindLight", innerMap); //Update the client SendProfileToClient(SP, lsd); } } SP.ControllingClient.SendAlertMessage("WindLight Settings updated."); return responsedata; }
private Hashtable RetrieveWindLightSettings(Hashtable m_dhttpMethod, UUID capuuid, UUID agentID) { Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; responsedata["str_response_string"] = ""; ScenePresence SP = m_scene.GetScenePresence(agentID); if (SP == null) return responsedata; //They don't exist OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml((string)m_dhttpMethod["requestbody"]); OSDMap retVal = new OSDMap(); if (rm.ContainsKey("RegionID")) { //For the region, just add all of them OSDArray array = new OSDArray(); foreach (RegionLightShareData rlsd in m_WindlightSettings.Values) { OSDMap m = rlsd.ToOSD(); m.Add("Name", OSD.FromString("(Region Settings), Min: " + rlsd.minEffectiveAltitude + ", Max: " + rlsd.maxEffectiveAltitude)); array.Add(m); } retVal.Add("WindLight", array); retVal.Add("Type", OSD.FromInteger(1)); } else if (rm.ContainsKey("ParcelID")) { OSDArray retVals = new OSDArray(); //-1 is all parcels if (rm["ParcelID"].AsInteger() == -1) { //All parcels foreach(ILandObject land in SP.Scene.LandChannel.AllParcels()) { OSDMap map = land.LandData.GenericDataMap; if (map.ContainsKey("WindLight")) { OSDMap parcelWindLight = (OSDMap)map["WindLight"]; foreach (OSD innerMap in parcelWindLight.Values) { RegionLightShareData rlsd = new RegionLightShareData(); rlsd.FromOSD((OSDMap)innerMap); OSDMap imap = new OSDMap(); imap = rlsd.ToOSD(); imap.Add("Name", OSD.FromString(land.LandData.Name + ", Min: " + rlsd.minEffectiveAltitude + ", Max: " + rlsd.maxEffectiveAltitude)); retVals.Add(imap); } } } } else { //Only the given parcel parcel given by localID ILandObject land = SP.Scene.LandChannel.GetLandObject(rm["ParcelID"].AsInteger()); OSDMap map = land.LandData.GenericDataMap; if (map.ContainsKey("WindLight")) { OSDMap parcelWindLight = (OSDMap)map["WindLight"]; foreach (OSD innerMap in parcelWindLight.Values) { RegionLightShareData rlsd = new RegionLightShareData(); rlsd.FromOSD((OSDMap)innerMap); OSDMap imap = new OSDMap(); imap = rlsd.ToOSD(); imap.Add("Name", OSD.FromString(land.LandData.Name + ", Min: " + rlsd.minEffectiveAltitude + ", Max: " + rlsd.maxEffectiveAltitude)); retVals.Add(imap); } } } retVal.Add("WindLight", retVals); retVal.Add("Type", OSD.FromInteger(2)); } responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(retVal); return responsedata; }
private byte[] DispatchWindLightSettings(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse, UUID agentID) { IScenePresence SP = m_scene.GetScenePresence(agentID); if (SP == null) return new byte[0]; //They don't exist MainConsole.Instance.Info("[WindLightSettings]: Got a request to update WindLight from " + SP.Name); OSDMap rm = (OSDMap) OSDParser.DeserializeLLSDXml(request); RegionLightShareData lsd = new RegionLightShareData(); lsd.FromOSD(rm); lsd.regionID = SP.Scene.RegionInfo.RegionID; bool remove = false; if (rm.ContainsKey("remove")) remove = rm["remove"].AsBoolean(); if (remove) { if (lsd.type == 0) //Region { if (!SP.Scene.Permissions.CanIssueEstateCommand(SP.UUID, false)) return new byte[0]; // No permissions #if (!ISWIN) bool found = false; foreach (RegionLightShareData regionLsd in m_WindlightSettings.Values) { if (lsd.minEffectiveAltitude == regionLsd.minEffectiveAltitude && lsd.maxEffectiveAltitude == regionLsd.maxEffectiveAltitude) { found = true; break; } } #else bool found = m_WindlightSettings.Values.Any(regionLSD => lsd.minEffectiveAltitude == regionLSD.minEffectiveAltitude && lsd.maxEffectiveAltitude == regionLSD.maxEffectiveAltitude); #endif //Set to default if (found) SaveWindLightSettings(lsd.minEffectiveAltitude, new RegionLightShareData()); } else if (lsd.type == 1) //Parcel { IParcelManagementModule parcelManagement = SP.Scene.RequestModuleInterface<IParcelManagementModule>(); if (parcelManagement != null) { ILandObject land = parcelManagement.GetLandObject((int) SP.AbsolutePosition.X, (int) SP.AbsolutePosition.Y); if (SP.Scene.Permissions.GenericParcelPermission(SP.UUID, land, (ulong) GroupPowers.LandOptions)) return new byte[0]; // No permissions IOpenRegionSettingsModule ORSM = SP.Scene.RequestModuleInterface<IOpenRegionSettingsModule>(); if (ORSM == null || !ORSM.AllowParcelWindLight) { SP.ControllingClient.SendAlertMessage("Parcel WindLight is disabled in this region."); return new byte[0]; } OSDMap map = land.LandData.GenericData; OSDMap innerMap = new OSDMap(); if (land.LandData.GenericData.ContainsKey("WindLight")) innerMap = (OSDMap) map["WindLight"]; if (innerMap.ContainsKey(lsd.minEffectiveAltitude.ToString())) innerMap.Remove(lsd.minEffectiveAltitude.ToString()); land.LandData.AddGenericData("WindLight", innerMap); //Update the client SendProfileToClient(SP, false); } } } else { if (lsd.type == 0) //Region { if (!SP.Scene.Permissions.CanIssueEstateCommand(SP.UUID, false)) return new byte[0]; // No permissions foreach (RegionLightShareData regionLSD in m_WindlightSettings.Values) { string message = ""; if (checkAltitude(lsd, regionLSD, out message)) { SP.ControllingClient.SendAlertMessage(message); return new byte[0]; } } SaveWindLightSettings(lsd.minEffectiveAltitude, lsd); } else if (lsd.type == 1) //Parcel { IParcelManagementModule parcelManagement = SP.Scene.RequestModuleInterface<IParcelManagementModule>(); if (parcelManagement != null) { ILandObject land = parcelManagement.GetLandObject((int) SP.AbsolutePosition.X, (int) SP.AbsolutePosition.Y); if (!SP.Scene.Permissions.GenericParcelPermission(SP.UUID, land, (ulong) GroupPowers.LandOptions)) return new byte[0]; // No permissions IOpenRegionSettingsModule ORSM = SP.Scene.RequestModuleInterface<IOpenRegionSettingsModule>(); if (ORSM == null || !ORSM.AllowParcelWindLight) { SP.ControllingClient.SendAlertMessage("Parcel WindLight is disabled in this region."); return new byte[0]; } OSDMap map = land.LandData.GenericData; OSDMap innerMap = new OSDMap(); if (land.LandData.GenericData.ContainsKey("WindLight")) innerMap = (OSDMap) map["WindLight"]; foreach (KeyValuePair<string, OSD> kvp in innerMap) { OSDMap lsdMap = (OSDMap) kvp.Value; RegionLightShareData parcelLSD = new RegionLightShareData(); parcelLSD.FromOSD(lsdMap); string message = ""; if (checkAltitude(lsd, parcelLSD, out message)) { SP.ControllingClient.SendAlertMessage(message); return new byte[0]; } } innerMap[lsd.minEffectiveAltitude.ToString()] = lsd.ToOSD(); land.LandData.AddGenericData("WindLight", innerMap); //Update the client SendProfileToClient(SP, lsd); } } } SP.ControllingClient.SendAlertMessage("WindLight Settings updated."); return new byte[0]; }
private byte[] RetrieveWindLightSettings(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse, UUID agentID) { IScenePresence SP = m_scene.GetScenePresence(agentID); if (SP == null) return new byte[0]; //They don't exist IParcelManagementModule parcelManagement = m_scene.RequestModuleInterface<IParcelManagementModule>(); OSDMap rm = (OSDMap) OSDParser.DeserializeLLSDXml(request); OSDMap retVal = new OSDMap(); if (rm.ContainsKey("RegionID")) { //For the region, just add all of them OSDArray array = new OSDArray(); foreach (RegionLightShareData rlsd in m_WindlightSettings.Values) { OSDMap m = rlsd.ToOSD(); m.Add("Name", OSD.FromString("(Region Settings), Min: " + rlsd.minEffectiveAltitude + ", Max: " + rlsd.maxEffectiveAltitude)); array.Add(m); } retVal.Add("WindLight", array); retVal.Add("Type", OSD.FromInteger(1)); } else if (rm.ContainsKey("ParcelID")) { OSDArray retVals = new OSDArray(); //-1 is all parcels if (rm["ParcelID"].AsInteger() == -1) { //All parcels if (parcelManagement != null) { foreach (ILandObject land in parcelManagement.AllParcels()) { OSDMap map = land.LandData.GenericData; if (map.ContainsKey("WindLight")) { OSDMap parcelWindLight = (OSDMap) map["WindLight"]; foreach (OSD innerMap in parcelWindLight.Values) { RegionLightShareData rlsd = new RegionLightShareData(); rlsd.FromOSD((OSDMap) innerMap); OSDMap imap = new OSDMap(); imap = rlsd.ToOSD(); imap.Add("Name", OSD.FromString(land.LandData.Name + ", Min: " + rlsd.minEffectiveAltitude + ", Max: " + rlsd.maxEffectiveAltitude)); retVals.Add(imap); } } } } } else { //Only the given parcel parcel given by localID if (parcelManagement != null) { ILandObject land = parcelManagement.GetLandObject(rm["ParcelID"].AsInteger()); OSDMap map = land.LandData.GenericData; if (map.ContainsKey("WindLight")) { OSDMap parcelWindLight = (OSDMap) map["WindLight"]; foreach (OSD innerMap in parcelWindLight.Values) { RegionLightShareData rlsd = new RegionLightShareData(); rlsd.FromOSD((OSDMap) innerMap); OSDMap imap = new OSDMap(); imap = rlsd.ToOSD(); imap.Add("Name", OSD.FromString(land.LandData.Name + ", Min: " + rlsd.minEffectiveAltitude + ", Max: " + rlsd.maxEffectiveAltitude)); retVals.Add(imap); } } } } retVal.Add("WindLight", retVals); retVal.Add("Type", OSD.FromInteger(2)); } return OSDParser.SerializeLLSDXmlBytes(retVal); }