diff options
23 files changed, 304 insertions, 283 deletions
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 961ab9f..e0a96e7 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt | |||
@@ -80,6 +80,7 @@ what it is today. | |||
80 | * dmiles (Daxtron Labs) | 80 | * dmiles (Daxtron Labs) |
81 | * dslake (Intel) | 81 | * dslake (Intel) |
82 | * FredoChaplin | 82 | * FredoChaplin |
83 | * Garmin Kawaguichi | ||
83 | * Gerhard | 84 | * Gerhard |
84 | * Godfrey | 85 | * Godfrey |
85 | * Grumly57 | 86 | * Grumly57 |
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 0a262fb..7106e6a 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs | |||
@@ -1463,7 +1463,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1463 | options["profile"] = (string)requestData["profile"]; | 1463 | options["profile"] = (string)requestData["profile"]; |
1464 | } | 1464 | } |
1465 | 1465 | ||
1466 | if (requestData["noassets"].ToString() == "true") | 1466 | if ((string)requestData["noassets"] == "true") |
1467 | { | 1467 | { |
1468 | options["noassets"] = (string)requestData["noassets"] ; | 1468 | options["noassets"] = (string)requestData["noassets"] ; |
1469 | } | 1469 | } |
diff --git a/OpenSim/Capabilities/Handlers/UploadBakedTexture/UploadBakedTextureHandler.cs b/OpenSim/Capabilities/Handlers/UploadBakedTexture/UploadBakedTextureHandler.cs index c637ccf..594ce9d 100644 --- a/OpenSim/Capabilities/Handlers/UploadBakedTexture/UploadBakedTextureHandler.cs +++ b/OpenSim/Capabilities/Handlers/UploadBakedTexture/UploadBakedTextureHandler.cs | |||
@@ -104,7 +104,7 @@ namespace OpenSim.Capabilities.Handlers | |||
104 | } | 104 | } |
105 | catch (Exception e) | 105 | catch (Exception e) |
106 | { | 106 | { |
107 | m_log.Error("[UPLOAD BAKED TEXTURE HANDLER]: " + e.ToString()); | 107 | m_log.ErrorFormat("[UPLOAD BAKED TEXTURE HANDLER]: {0}{1}", e.Message, e.StackTrace); |
108 | } | 108 | } |
109 | 109 | ||
110 | return null; | 110 | return null; |
@@ -117,7 +117,7 @@ namespace OpenSim.Capabilities.Handlers | |||
117 | /// <param name="data"></param> | 117 | /// <param name="data"></param> |
118 | private void BakedTextureUploaded(UUID assetID, byte[] data) | 118 | private void BakedTextureUploaded(UUID assetID, byte[] data) |
119 | { | 119 | { |
120 | // m_log.WarnFormat("[CAPS]: Received baked texture {0}", assetID.ToString()); | 120 | // m_log.DebugFormat("[UPLOAD BAKED TEXTURE HANDLER]: Received baked texture {0}", assetID.ToString()); |
121 | 121 | ||
122 | AssetBase asset; | 122 | AssetBase asset; |
123 | asset = new AssetBase(assetID, "Baked Texture", (sbyte)AssetType.Texture, m_HostCapsObj.AgentID.ToString()); | 123 | asset = new AssetBase(assetID, "Baked Texture", (sbyte)AssetType.Texture, m_HostCapsObj.AgentID.ToString()); |
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index 6c2a954..4f598b0 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs | |||
@@ -249,10 +249,12 @@ namespace OpenSim.Framework | |||
249 | } | 249 | } |
250 | 250 | ||
251 | /// <summary> | 251 | /// <summary> |
252 | /// Set up appearance textures. | 252 | /// Set up appearance texture ids. |
253 | /// Returns boolean that indicates whether the new entries actually change the | ||
254 | /// existing values. | ||
255 | /// </summary> | 253 | /// </summary> |
254 | /// <returns> | ||
255 | /// True if any existing texture id was changed by the new data. | ||
256 | /// False if there were no changes or no existing texture ids. | ||
257 | /// </returns> | ||
256 | public virtual bool SetTextureEntries(Primitive.TextureEntry textureEntry) | 258 | public virtual bool SetTextureEntries(Primitive.TextureEntry textureEntry) |
257 | { | 259 | { |
258 | if (textureEntry == null) | 260 | if (textureEntry == null) |
@@ -269,25 +271,30 @@ namespace OpenSim.Framework | |||
269 | 271 | ||
270 | if (newface == null) | 272 | if (newface == null) |
271 | { | 273 | { |
272 | if (oldface == null) continue; | 274 | if (oldface == null) |
275 | continue; | ||
273 | } | 276 | } |
274 | else | 277 | else |
275 | { | 278 | { |
276 | if (oldface != null && oldface.TextureID == newface.TextureID) continue; | 279 | if (oldface != null && oldface.TextureID == newface.TextureID) |
280 | continue; | ||
277 | } | 281 | } |
278 | 282 | ||
279 | changed = true; | 283 | changed = true; |
280 | } | 284 | } |
281 | 285 | ||
282 | m_texture = textureEntry; | 286 | m_texture = textureEntry; |
287 | |||
283 | return changed; | 288 | return changed; |
284 | } | 289 | } |
285 | 290 | ||
286 | /// <summary> | 291 | /// <summary> |
287 | /// Set up visual parameters for the avatar and refresh the avatar height | 292 | /// Set up visual parameters for the avatar and refresh the avatar height |
288 | /// Returns boolean that indicates whether the new entries actually change the | ||
289 | /// existing values. | ||
290 | /// </summary> | 293 | /// </summary> |
294 | /// <returns> | ||
295 | /// True if any existing visual parameter was changed by the new data. | ||
296 | /// False if there were no changes or no existing visual parameters. | ||
297 | /// </returns> | ||
291 | public virtual bool SetVisualParams(byte[] visualParams) | 298 | public virtual bool SetVisualParams(byte[] visualParams) |
292 | { | 299 | { |
293 | if (visualParams == null) | 300 | if (visualParams == null) |
diff --git a/OpenSim/Framework/ISceneEntity.cs b/OpenSim/Framework/ISceneEntity.cs index c0ea302..a9f21d2 100644 --- a/OpenSim/Framework/ISceneEntity.cs +++ b/OpenSim/Framework/ISceneEntity.cs | |||
@@ -34,6 +34,7 @@ namespace OpenSim.Framework | |||
34 | string Name { get; set; } | 34 | string Name { get; set; } |
35 | UUID UUID { get; } | 35 | UUID UUID { get; } |
36 | uint LocalId { get; } | 36 | uint LocalId { get; } |
37 | |||
37 | Vector3 AbsolutePosition { get; } | 38 | Vector3 AbsolutePosition { get; } |
38 | } | 39 | } |
39 | } | 40 | } |
diff --git a/OpenSim/Framework/ISceneObject.cs b/OpenSim/Framework/ISceneObject.cs index 18631f1..afac9b8 100644 --- a/OpenSim/Framework/ISceneObject.cs +++ b/OpenSim/Framework/ISceneObject.cs | |||
@@ -33,6 +33,12 @@ namespace OpenSim.Framework | |||
33 | public interface ISceneObject | 33 | public interface ISceneObject |
34 | { | 34 | { |
35 | UUID UUID { get; } | 35 | UUID UUID { get; } |
36 | |||
37 | /// <summary> | ||
38 | /// The owner of this object. | ||
39 | /// </summary> | ||
40 | UUID OwnerID { get; set; } | ||
41 | |||
36 | ISceneObject CloneForNewScene(); | 42 | ISceneObject CloneForNewScene(); |
37 | string ToXml2(); | 43 | string ToXml2(); |
38 | string ExtraToXmlString(); | 44 | string ExtraToXmlString(); |
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 8d98cc9..3a1a8c7 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -188,6 +188,18 @@ namespace OpenSim | |||
188 | } | 188 | } |
189 | } | 189 | } |
190 | 190 | ||
191 | // Hook up to the watchdog timer | ||
192 | Watchdog.OnWatchdogTimeout += WatchdogTimeoutHandler; | ||
193 | |||
194 | PrintFileToConsole("startuplogo.txt"); | ||
195 | |||
196 | // For now, start at the 'root' level by default | ||
197 | if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it | ||
198 | ChangeSelectedRegion("region", | ||
199 | new string[] {"change", "region", m_sceneManager.Scenes[0].RegionInfo.RegionName}); | ||
200 | else | ||
201 | ChangeSelectedRegion("region", new string[] {"change", "region", "root"}); | ||
202 | |||
191 | //Run Startup Commands | 203 | //Run Startup Commands |
192 | if (String.IsNullOrEmpty(m_startupCommandsFile)) | 204 | if (String.IsNullOrEmpty(m_startupCommandsFile)) |
193 | { | 205 | { |
@@ -206,18 +218,6 @@ namespace OpenSim | |||
206 | m_scriptTimer.Interval = 1200*1000; | 218 | m_scriptTimer.Interval = 1200*1000; |
207 | m_scriptTimer.Elapsed += RunAutoTimerScript; | 219 | m_scriptTimer.Elapsed += RunAutoTimerScript; |
208 | } | 220 | } |
209 | |||
210 | // Hook up to the watchdog timer | ||
211 | Watchdog.OnWatchdogTimeout += WatchdogTimeoutHandler; | ||
212 | |||
213 | PrintFileToConsole("startuplogo.txt"); | ||
214 | |||
215 | // For now, start at the 'root' level by default | ||
216 | if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it | ||
217 | ChangeSelectedRegion("region", | ||
218 | new string[] {"change", "region", m_sceneManager.Scenes[0].RegionInfo.RegionName}); | ||
219 | else | ||
220 | ChangeSelectedRegion("region", new string[] {"change", "region", "root"}); | ||
221 | } | 221 | } |
222 | 222 | ||
223 | /// <summary> | 223 | /// <summary> |
@@ -796,6 +796,7 @@ namespace OpenSim | |||
796 | break; | 796 | break; |
797 | 797 | ||
798 | case "backup": | 798 | case "backup": |
799 | MainConsole.Instance.Output("Triggering save of pending object updates to persistent store"); | ||
799 | m_sceneManager.BackupCurrentScene(); | 800 | m_sceneManager.BackupCurrentScene(); |
800 | break; | 801 | break; |
801 | 802 | ||
@@ -806,7 +807,7 @@ namespace OpenSim | |||
806 | if (m_sceneManager.TryGetScene(regRemoveName, out removeScene)) | 807 | if (m_sceneManager.TryGetScene(regRemoveName, out removeScene)) |
807 | RemoveRegion(removeScene, false); | 808 | RemoveRegion(removeScene, false); |
808 | else | 809 | else |
809 | MainConsole.Instance.Output("no region with that name"); | 810 | MainConsole.Instance.Output("No region with that name"); |
810 | break; | 811 | break; |
811 | 812 | ||
812 | case "delete-region": | 813 | case "delete-region": |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 9c86c74..b37fd54 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -441,6 +441,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
441 | public LLClientView(EndPoint remoteEP, Scene scene, LLUDPServer udpServer, LLUDPClient udpClient, AuthenticateResponse sessionInfo, | 441 | public LLClientView(EndPoint remoteEP, Scene scene, LLUDPServer udpServer, LLUDPClient udpClient, AuthenticateResponse sessionInfo, |
442 | UUID agentId, UUID sessionId, uint circuitCode) | 442 | UUID agentId, UUID sessionId, uint circuitCode) |
443 | { | 443 | { |
444 | // DebugPacketLevel = 1; | ||
445 | |||
444 | RegisterInterface<IClientIM>(this); | 446 | RegisterInterface<IClientIM>(this); |
445 | RegisterInterface<IClientChat>(this); | 447 | RegisterInterface<IClientChat>(this); |
446 | RegisterInterface<IClientIPEndpoint>(this); | 448 | RegisterInterface<IClientIPEndpoint>(this); |
@@ -4893,8 +4895,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4893 | update.Scale = new Vector3(0.45f, 0.6f, 1.9f); | 4895 | update.Scale = new Vector3(0.45f, 0.6f, 1.9f); |
4894 | update.Text = Utils.EmptyBytes; | 4896 | update.Text = Utils.EmptyBytes; |
4895 | update.TextColor = new byte[4]; | 4897 | update.TextColor = new byte[4]; |
4898 | |||
4899 | // Don't send texture anim for avatars - this has no meaning for them. | ||
4896 | update.TextureAnim = Utils.EmptyBytes; | 4900 | update.TextureAnim = Utils.EmptyBytes; |
4897 | update.TextureEntry = (data.Appearance.Texture != null) ? data.Appearance.Texture.GetBytes() : Utils.EmptyBytes; | 4901 | |
4902 | // Don't send texture entry for avatars here - this is accomplished via the AvatarAppearance packet | ||
4903 | update.TextureEntry = Utils.EmptyBytes; | ||
4904 | // update.TextureEntry = (data.Appearance.Texture != null) ? data.Appearance.Texture.GetBytes() : Utils.EmptyBytes; | ||
4905 | |||
4898 | update.UpdateFlags = (uint)( | 4906 | update.UpdateFlags = (uint)( |
4899 | PrimFlags.Physics | PrimFlags.ObjectModify | PrimFlags.ObjectCopy | PrimFlags.ObjectAnyOwner | | 4907 | PrimFlags.Physics | PrimFlags.ObjectModify | PrimFlags.ObjectCopy | PrimFlags.ObjectAnyOwner | |
4900 | PrimFlags.ObjectYouOwner | PrimFlags.ObjectMove | PrimFlags.InventoryEmpty | PrimFlags.ObjectTransfer | | 4908 | PrimFlags.ObjectYouOwner | PrimFlags.ObjectMove | PrimFlags.InventoryEmpty | PrimFlags.ObjectTransfer | |
@@ -6001,7 +6009,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
6001 | // for the client session anyway, in order to protect ourselves against bad code in plugins | 6009 | // for the client session anyway, in order to protect ourselves against bad code in plugins |
6002 | try | 6010 | try |
6003 | { | 6011 | { |
6004 | |||
6005 | byte[] visualparams = new byte[appear.VisualParam.Length]; | 6012 | byte[] visualparams = new byte[appear.VisualParam.Length]; |
6006 | for (int i = 0; i < appear.VisualParam.Length; i++) | 6013 | for (int i = 0; i < appear.VisualParam.Length; i++) |
6007 | visualparams[i] = appear.VisualParam[i].ParamValue; | 6014 | visualparams[i] = appear.VisualParam[i].ParamValue; |
@@ -10345,6 +10352,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
10345 | } | 10352 | } |
10346 | return true; | 10353 | return true; |
10347 | } | 10354 | } |
10355 | |||
10348 | private bool HandleGroupRoleMembersRequest(IClientAPI sender, Packet Pack) | 10356 | private bool HandleGroupRoleMembersRequest(IClientAPI sender, Packet Pack) |
10349 | { | 10357 | { |
10350 | GroupRoleMembersRequestPacket groupRoleMembersRequest = | 10358 | GroupRoleMembersRequestPacket groupRoleMembersRequest = |
@@ -11218,9 +11226,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11218 | /// <summary> | 11226 | /// <summary> |
11219 | /// Send a response back to a client when it asks the asset server (via the region server) if it has | 11227 | /// Send a response back to a client when it asks the asset server (via the region server) if it has |
11220 | /// its appearance texture cached. | 11228 | /// its appearance texture cached. |
11221 | /// | ||
11222 | /// At the moment, we always reply that there is no cached texture. | ||
11223 | /// </summary> | 11229 | /// </summary> |
11230 | /// <remarks> | ||
11231 | /// At the moment, we always reply that there is no cached texture. | ||
11232 | /// </remarks> | ||
11224 | /// <param name="simclient"></param> | 11233 | /// <param name="simclient"></param> |
11225 | /// <param name="packet"></param> | 11234 | /// <param name="packet"></param> |
11226 | /// <returns></returns> | 11235 | /// <returns></returns> |
@@ -11230,7 +11239,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11230 | AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet; | 11239 | AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet; |
11231 | AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse); | 11240 | AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse); |
11232 | 11241 | ||
11233 | if (cachedtex.AgentData.SessionID != SessionId) return false; | 11242 | if (cachedtex.AgentData.SessionID != SessionId) |
11243 | return false; | ||
11234 | 11244 | ||
11235 | // TODO: don't create new blocks if recycling an old packet | 11245 | // TODO: don't create new blocks if recycling an old packet |
11236 | cachedresp.AgentData.AgentID = AgentId; | 11246 | cachedresp.AgentData.AgentID = AgentId; |
@@ -11628,6 +11638,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11628 | if (DebugPacketLevel <= 50 && packet.Type == PacketType.ImprovedTerseObjectUpdate) | 11638 | if (DebugPacketLevel <= 50 && packet.Type == PacketType.ImprovedTerseObjectUpdate) |
11629 | logPacket = false; | 11639 | logPacket = false; |
11630 | 11640 | ||
11641 | if (DebugPacketLevel <= 25 && packet.Type == PacketType.ObjectPropertiesFamily) | ||
11642 | logPacket = false; | ||
11643 | |||
11631 | if (logPacket) | 11644 | if (logPacket) |
11632 | m_log.DebugFormat( | 11645 | m_log.DebugFormat( |
11633 | "[CLIENT]: PACKET OUT to {0} ({1}) in {2} - {3}", | 11646 | "[CLIENT]: PACKET OUT to {0} ({1}) in {2} - {3}", |
@@ -11685,6 +11698,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11685 | if (DebugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation)) | 11698 | if (DebugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation)) |
11686 | logPacket = false; | 11699 | logPacket = false; |
11687 | 11700 | ||
11701 | if (DebugPacketLevel <= 25 && packet.Type == PacketType.RequestObjectPropertiesFamily) | ||
11702 | logPacket = false; | ||
11703 | |||
11688 | if (logPacket) | 11704 | if (logPacket) |
11689 | m_log.DebugFormat( | 11705 | m_log.DebugFormat( |
11690 | "[CLIENT]: PACKET IN from {0} ({1}) in {2} - {3}", | 11706 | "[CLIENT]: PACKET IN from {0} ({1}) in {2} - {3}", |
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 29e3580..e8aee3e 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | |||
@@ -26,16 +26,15 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | ||
29 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System.Threading; | ||
32 | using System.Text; | ||
33 | using System.Timers; | ||
30 | using log4net; | 34 | using log4net; |
31 | using Nini.Config; | 35 | using Nini.Config; |
32 | using OpenMetaverse; | 36 | using OpenMetaverse; |
33 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
34 | |||
35 | using System.Threading; | ||
36 | using System.Timers; | ||
37 | using System.Collections.Generic; | ||
38 | |||
39 | using OpenSim.Region.Framework.Interfaces; | 38 | using OpenSim.Region.Framework.Interfaces; |
40 | using OpenSim.Region.Framework.Scenes; | 39 | using OpenSim.Region.Framework.Scenes; |
41 | using OpenSim.Services.Interfaces; | 40 | using OpenSim.Services.Interfaces; |
@@ -45,6 +44,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
45 | public class AvatarFactoryModule : IAvatarFactoryModule, IRegionModule | 44 | public class AvatarFactoryModule : IAvatarFactoryModule, IRegionModule |
46 | { | 45 | { |
47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
47 | |||
48 | public const string BAKED_TEXTURES_REPORT_FORMAT = "{0,-9} {1}"; | ||
49 | |||
48 | private Scene m_scene = null; | 50 | private Scene m_scene = null; |
49 | 51 | ||
50 | private int m_savetime = 5; // seconds to wait before saving changed appearance | 52 | private int m_savetime = 5; // seconds to wait before saving changed appearance |
@@ -147,9 +149,13 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
147 | // Process the baked texture array | 149 | // Process the baked texture array |
148 | if (textureEntry != null) | 150 | if (textureEntry != null) |
149 | { | 151 | { |
152 | m_log.InfoFormat("[AVFACTORY]: received texture update for {0}", sp.UUID); | ||
153 | |||
154 | // WriteBakedTexturesReport(sp, m_log.DebugFormat); | ||
155 | |||
150 | changed = sp.Appearance.SetTextureEntries(textureEntry) || changed; | 156 | changed = sp.Appearance.SetTextureEntries(textureEntry) || changed; |
151 | 157 | ||
152 | m_log.InfoFormat("[AVFACTORY]: received texture update for {0}", sp.UUID); | 158 | // WriteBakedTexturesReport(sp, m_log.DebugFormat); |
153 | ValidateBakedTextureCache(sp, false); | 159 | ValidateBakedTextureCache(sp, false); |
154 | 160 | ||
155 | // This appears to be set only in the final stage of the appearance | 161 | // This appears to be set only in the final stage of the appearance |
@@ -254,9 +260,12 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
254 | } | 260 | } |
255 | 261 | ||
256 | /// <summary> | 262 | /// <summary> |
257 | /// Queue up a request to send appearance, makes it possible to | 263 | /// Queue up a request to send appearance. |
258 | /// accumulate changes without sending out each one separately. | ||
259 | /// </summary> | 264 | /// </summary> |
265 | /// <remarks> | ||
266 | /// Makes it possible to accumulate changes without sending out each one separately. | ||
267 | /// </remarks> | ||
268 | /// <param name="agentId"></param> | ||
260 | public void QueueAppearanceSend(UUID agentid) | 269 | public void QueueAppearanceSend(UUID agentid) |
261 | { | 270 | { |
262 | // m_log.DebugFormat("[AVFACTORY]: Queue appearance send for {0}", agentid); | 271 | // m_log.DebugFormat("[AVFACTORY]: Queue appearance send for {0}", agentid); |
@@ -408,10 +417,13 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
408 | m_savequeue.Remove(avatarID); | 417 | m_savequeue.Remove(avatarID); |
409 | } | 418 | } |
410 | } | 419 | } |
411 | } | ||
412 | 420 | ||
413 | if (m_savequeue.Count == 0 && m_sendqueue.Count == 0) | 421 | // We must lock both queues here so that QueueAppearanceSave() or *Send() don't m_updateTimer.Start() on |
414 | m_updateTimer.Stop(); | 422 | // another thread inbetween the first count calls and m_updateTimer.Stop() on this thread. |
423 | lock (m_sendqueue) | ||
424 | if (m_savequeue.Count == 0 && m_sendqueue.Count == 0) | ||
425 | m_updateTimer.Stop(); | ||
426 | } | ||
415 | } | 427 | } |
416 | 428 | ||
417 | private void SaveAppearance(UUID agentid) | 429 | private void SaveAppearance(UUID agentid) |
@@ -557,5 +569,37 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
557 | } | 569 | } |
558 | } | 570 | } |
559 | #endregion | 571 | #endregion |
572 | |||
573 | public void WriteBakedTexturesReport(IScenePresence sp, ReportOutputAction outputAction) | ||
574 | { | ||
575 | outputAction("For {0} in {1}", sp.Name, m_scene.RegionInfo.RegionName); | ||
576 | outputAction(BAKED_TEXTURES_REPORT_FORMAT, "Bake Type", "UUID"); | ||
577 | |||
578 | Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures = GetBakedTextureFaces(sp.UUID); | ||
579 | |||
580 | foreach (BakeType bt in bakedTextures.Keys) | ||
581 | { | ||
582 | string rawTextureID; | ||
583 | |||
584 | if (bakedTextures[bt] == null) | ||
585 | { | ||
586 | rawTextureID = "not set"; | ||
587 | } | ||
588 | else | ||
589 | { | ||
590 | rawTextureID = bakedTextures[bt].TextureID.ToString(); | ||
591 | |||
592 | if (m_scene.AssetService.Get(rawTextureID) == null) | ||
593 | rawTextureID += " (not found)"; | ||
594 | else | ||
595 | rawTextureID += " (uploaded)"; | ||
596 | } | ||
597 | |||
598 | outputAction(BAKED_TEXTURES_REPORT_FORMAT, bt, rawTextureID); | ||
599 | } | ||
600 | |||
601 | bool bakedTextureValid = m_scene.AvatarFactory.ValidateBakedTextureCache(sp); | ||
602 | outputAction("{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "corrupt"); | ||
603 | } | ||
560 | } | 604 | } |
561 | } | 605 | } |
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 7760382..cdecd2f 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -384,9 +384,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
384 | if (m_debugPermissions) | 384 | if (m_debugPermissions) |
385 | m_log.Debug("[PERMISSIONS]: " + permissionCalled + " was called from " + m_scene.RegionInfo.RegionName); | 385 | m_log.Debug("[PERMISSIONS]: " + permissionCalled + " was called from " + m_scene.RegionInfo.RegionName); |
386 | } | 386 | } |
387 | 387 | ||
388 | // Checks if the given group is active and if the user is a group member | 388 | /// <summary> |
389 | // with the powers requested (powers = 0 for no powers check) | 389 | /// Checks if the given group is active and if the user is a group member |
390 | /// with the powers requested (powers = 0 for no powers check) | ||
391 | /// </summary> | ||
392 | /// <param name="groupID"></param> | ||
393 | /// <param name="userID"></param> | ||
394 | /// <param name="powers"></param> | ||
395 | /// <returns></returns> | ||
390 | protected bool IsGroupMember(UUID groupID, UUID userID, ulong powers) | 396 | protected bool IsGroupMember(UUID groupID, UUID userID, ulong powers) |
391 | { | 397 | { |
392 | if (null == m_groupsModule) | 398 | if (null == m_groupsModule) |
diff --git a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs index 26bc922..8670229 100644 --- a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs | |||
@@ -31,9 +31,10 @@ using OpenSim.Framework; | |||
31 | 31 | ||
32 | namespace OpenSim.Region.Framework.Interfaces | 32 | namespace OpenSim.Region.Framework.Interfaces |
33 | { | 33 | { |
34 | public delegate void ReportOutputAction(string format, params object[] args); | ||
35 | |||
34 | public interface IAvatarFactoryModule | 36 | public interface IAvatarFactoryModule |
35 | { | 37 | { |
36 | |||
37 | void SetAppearance(IScenePresence sp, Primitive.TextureEntry textureEntry, byte[] visualParams); | 38 | void SetAppearance(IScenePresence sp, Primitive.TextureEntry textureEntry, byte[] visualParams); |
38 | 39 | ||
39 | /// <summary> | 40 | /// <summary> |
@@ -63,5 +64,13 @@ namespace OpenSim.Region.Framework.Interfaces | |||
63 | bool ValidateBakedTextureCache(IScenePresence sp); | 64 | bool ValidateBakedTextureCache(IScenePresence sp); |
64 | void QueueAppearanceSend(UUID agentid); | 65 | void QueueAppearanceSend(UUID agentid); |
65 | void QueueAppearanceSave(UUID agentid); | 66 | void QueueAppearanceSave(UUID agentid); |
67 | |||
68 | /// <summary> | ||
69 | /// Get a report about the current state of a scene presence's baked appearance textures. | ||
70 | /// </summary> | ||
71 | /// <param name="sp"></param> | ||
72 | /// <param name="reportOutputAction"></param> | ||
73 | /// <returns></returns> | ||
74 | void WriteBakedTexturesReport(IScenePresence sp, ReportOutputAction reportOutputAction); | ||
66 | } | 75 | } |
67 | } \ No newline at end of file | 76 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 4a4d98f..4f71915 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -1564,6 +1564,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1564 | 1564 | ||
1565 | public void TriggerRequestChangeWaterHeight(float height) | 1565 | public void TriggerRequestChangeWaterHeight(float height) |
1566 | { | 1566 | { |
1567 | if (height < 0) | ||
1568 | { | ||
1569 | // ignore negative water height | ||
1570 | return; | ||
1571 | } | ||
1572 | |||
1567 | RequestChangeWaterHeight handlerRequestChangeWaterHeight = OnRequestChangeWaterHeight; | 1573 | RequestChangeWaterHeight handlerRequestChangeWaterHeight = OnRequestChangeWaterHeight; |
1568 | if (handlerRequestChangeWaterHeight != null) | 1574 | if (handlerRequestChangeWaterHeight != null) |
1569 | { | 1575 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 6ba74c7..3355ebe 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -116,66 +116,78 @@ namespace OpenSim.Region.Framework.Scenes | |||
116 | /// <param name="remoteClient"></param> | 116 | /// <param name="remoteClient"></param> |
117 | public void RequestPrim(uint primLocalID, IClientAPI remoteClient) | 117 | public void RequestPrim(uint primLocalID, IClientAPI remoteClient) |
118 | { | 118 | { |
119 | EntityBase[] entityList = GetEntities(); | 119 | SceneObjectGroup sog = GetGroupByPrim(primLocalID); |
120 | foreach (EntityBase ent in entityList) | 120 | |
121 | if (sog != null) | ||
122 | sog.SendFullUpdateToClient(remoteClient); | ||
123 | } | ||
124 | |||
125 | /// <summary> | ||
126 | /// Invoked when the client selects a prim. | ||
127 | /// </summary> | ||
128 | /// <param name="primLocalID"></param> | ||
129 | /// <param name="remoteClient"></param> | ||
130 | public void SelectPrim(uint primLocalID, IClientAPI remoteClient) | ||
131 | { | ||
132 | SceneObjectPart part = GetSceneObjectPart(primLocalID); | ||
133 | |||
134 | if (null == part) | ||
135 | return; | ||
136 | |||
137 | if (part.IsRoot) | ||
121 | { | 138 | { |
122 | if (ent is SceneObjectGroup) | 139 | SceneObjectGroup sog = part.ParentGroup; |
140 | sog.SendPropertiesToClient(remoteClient); | ||
141 | sog.IsSelected = true; | ||
142 | |||
143 | // A prim is only tainted if it's allowed to be edited by the person clicking it. | ||
144 | if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId) | ||
145 | || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId)) | ||
123 | { | 146 | { |
124 | if (((SceneObjectGroup)ent).LocalId == primLocalID) | 147 | EventManager.TriggerParcelPrimCountTainted(); |
125 | { | ||
126 | ((SceneObjectGroup)ent).SendFullUpdateToClient(remoteClient); | ||
127 | return; | ||
128 | } | ||
129 | } | 148 | } |
130 | } | 149 | } |
150 | else | ||
151 | { | ||
152 | part.SendPropertiesToClient(remoteClient); | ||
153 | } | ||
131 | } | 154 | } |
132 | 155 | ||
133 | /// <summary> | 156 | /// <summary> |
134 | /// Invoked when the client selects a prim. | 157 | /// Handle the update of an object's user group. |
135 | /// </summary> | 158 | /// </summary> |
136 | /// <param name="primLocalID"></param> | ||
137 | /// <param name="remoteClient"></param> | 159 | /// <param name="remoteClient"></param> |
138 | public void SelectPrim(uint primLocalID, IClientAPI remoteClient) | 160 | /// <param name="groupID"></param> |
161 | /// <param name="objectLocalID"></param> | ||
162 | /// <param name="Garbage"></param> | ||
163 | private void HandleObjectGroupUpdate( | ||
164 | IClientAPI remoteClient, UUID groupID, uint objectLocalID, UUID Garbage) | ||
139 | { | 165 | { |
140 | EntityBase[] entityList = GetEntities(); | 166 | if (m_groupsModule == null) |
141 | foreach (EntityBase ent in entityList) | 167 | return; |
168 | |||
169 | // XXX: Might be better to get rid of this special casing and have GetMembershipData return something | ||
170 | // reasonable for a UUID.Zero group. | ||
171 | if (groupID != UUID.Zero) | ||
142 | { | 172 | { |
143 | if (ent is SceneObjectGroup) | 173 | GroupMembershipData gmd = m_groupsModule.GetMembershipData(groupID, remoteClient.AgentId); |
174 | |||
175 | if (gmd == null) | ||
144 | { | 176 | { |
145 | if (((SceneObjectGroup) ent).LocalId == primLocalID) | 177 | // m_log.WarnFormat( |
146 | { | 178 | // "[GROUPS]: User {0} is not a member of group {1} so they can't update {2} to this group", |
147 | ((SceneObjectGroup) ent).SendPropertiesToClient(remoteClient); | 179 | // remoteClient.Name, GroupID, objectLocalID); |
148 | ((SceneObjectGroup) ent).IsSelected = true; | 180 | |
149 | // A prim is only tainted if it's allowed to be edited by the person clicking it. | 181 | return; |
150 | if (Permissions.CanEditObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId) | 182 | } |
151 | || Permissions.CanMoveObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId)) | 183 | } |
152 | { | 184 | |
153 | EventManager.TriggerParcelPrimCountTainted(); | 185 | SceneObjectGroup so = ((Scene)remoteClient.Scene).GetGroupByPrim(objectLocalID); |
154 | } | 186 | if (so != null) |
155 | break; | 187 | { |
156 | } | 188 | if (so.OwnerID == remoteClient.AgentId) |
157 | else | 189 | { |
158 | { | 190 | so.SetGroup(groupID, remoteClient); |
159 | // We also need to check the children of this prim as they | ||
160 | // can be selected as well and send property information | ||
161 | bool foundPrim = false; | ||
162 | |||
163 | SceneObjectGroup sog = ent as SceneObjectGroup; | ||
164 | |||
165 | SceneObjectPart[] partList = sog.Parts; | ||
166 | foreach (SceneObjectPart part in partList) | ||
167 | { | ||
168 | if (part.LocalId == primLocalID) | ||
169 | { | ||
170 | part.SendPropertiesToClient(remoteClient); | ||
171 | foundPrim = true; | ||
172 | break; | ||
173 | } | ||
174 | } | ||
175 | |||
176 | if (foundPrim) | ||
177 | break; | ||
178 | } | ||
179 | } | 191 | } |
180 | } | 192 | } |
181 | } | 193 | } |
@@ -250,121 +262,81 @@ namespace OpenSim.Region.Framework.Scenes | |||
250 | 262 | ||
251 | public virtual void ProcessObjectGrab(uint localID, Vector3 offsetPos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) | 263 | public virtual void ProcessObjectGrab(uint localID, Vector3 offsetPos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) |
252 | { | 264 | { |
253 | EntityBase[] EntityList = GetEntities(); | 265 | SceneObjectPart part = GetSceneObjectPart(localID); |
266 | |||
267 | if (part == null) | ||
268 | return; | ||
269 | |||
270 | SceneObjectGroup obj = part.ParentGroup; | ||
254 | 271 | ||
255 | SurfaceTouchEventArgs surfaceArg = null; | 272 | SurfaceTouchEventArgs surfaceArg = null; |
256 | if (surfaceArgs != null && surfaceArgs.Count > 0) | 273 | if (surfaceArgs != null && surfaceArgs.Count > 0) |
257 | surfaceArg = surfaceArgs[0]; | 274 | surfaceArg = surfaceArgs[0]; |
258 | 275 | ||
259 | foreach (EntityBase ent in EntityList) | 276 | // Currently only grab/touch for the single prim |
277 | // the client handles rez correctly | ||
278 | obj.ObjectGrabHandler(localID, offsetPos, remoteClient); | ||
279 | |||
280 | // If the touched prim handles touches, deliver it | ||
281 | // If not, deliver to root prim | ||
282 | if ((part.ScriptEvents & scriptEvents.touch_start) != 0) | ||
283 | EventManager.TriggerObjectGrab(part.LocalId, 0, part.OffsetPosition, remoteClient, surfaceArg); | ||
284 | |||
285 | // Deliver to the root prim if the touched prim doesn't handle touches | ||
286 | // or if we're meant to pass on touches anyway. Don't send to root prim | ||
287 | // if prim touched is the root prim as we just did it | ||
288 | if (((part.ScriptEvents & scriptEvents.touch_start) == 0) || | ||
289 | (part.PassTouches && (part.LocalId != obj.RootPart.LocalId))) | ||
260 | { | 290 | { |
261 | if (ent is SceneObjectGroup) | 291 | EventManager.TriggerObjectGrab(obj.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg); |
262 | { | ||
263 | SceneObjectGroup obj = ent as SceneObjectGroup; | ||
264 | if (obj != null) | ||
265 | { | ||
266 | // Is this prim part of the group | ||
267 | if (obj.HasChildPrim(localID)) | ||
268 | { | ||
269 | // Currently only grab/touch for the single prim | ||
270 | // the client handles rez correctly | ||
271 | obj.ObjectGrabHandler(localID, offsetPos, remoteClient); | ||
272 | |||
273 | SceneObjectPart part = obj.GetChildPart(localID); | ||
274 | |||
275 | // If the touched prim handles touches, deliver it | ||
276 | // If not, deliver to root prim | ||
277 | if ((part.ScriptEvents & scriptEvents.touch_start) != 0) | ||
278 | EventManager.TriggerObjectGrab(part.LocalId, 0, part.OffsetPosition, remoteClient, surfaceArg); | ||
279 | // Deliver to the root prim if the touched prim doesn't handle touches | ||
280 | // or if we're meant to pass on touches anyway. Don't send to root prim | ||
281 | // if prim touched is the root prim as we just did it | ||
282 | if (((part.ScriptEvents & scriptEvents.touch_start) == 0) || | ||
283 | (part.PassTouches && (part.LocalId != obj.RootPart.LocalId))) | ||
284 | { | ||
285 | EventManager.TriggerObjectGrab(obj.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg); | ||
286 | } | ||
287 | |||
288 | return; | ||
289 | } | ||
290 | } | ||
291 | } | ||
292 | } | 292 | } |
293 | } | 293 | } |
294 | 294 | ||
295 | public virtual void ProcessObjectGrabUpdate(UUID objectID, Vector3 offset, Vector3 pos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) | 295 | public virtual void ProcessObjectGrabUpdate( |
296 | UUID objectID, Vector3 offset, Vector3 pos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) | ||
296 | { | 297 | { |
297 | EntityBase[] EntityList = GetEntities(); | 298 | SceneObjectPart part = GetSceneObjectPart(objectID); |
299 | if (part == null) | ||
300 | return; | ||
301 | |||
302 | SceneObjectGroup obj = part.ParentGroup; | ||
298 | 303 | ||
299 | SurfaceTouchEventArgs surfaceArg = null; | 304 | SurfaceTouchEventArgs surfaceArg = null; |
300 | if (surfaceArgs != null && surfaceArgs.Count > 0) | 305 | if (surfaceArgs != null && surfaceArgs.Count > 0) |
301 | surfaceArg = surfaceArgs[0]; | 306 | surfaceArg = surfaceArgs[0]; |
302 | 307 | ||
303 | foreach (EntityBase ent in EntityList) | 308 | // If the touched prim handles touches, deliver it |
309 | // If not, deliver to root prim | ||
310 | if ((part.ScriptEvents & scriptEvents.touch) != 0) | ||
311 | EventManager.TriggerObjectGrabbing(part.LocalId, 0, part.OffsetPosition, remoteClient, surfaceArg); | ||
312 | // Deliver to the root prim if the touched prim doesn't handle touches | ||
313 | // or if we're meant to pass on touches anyway. Don't send to root prim | ||
314 | // if prim touched is the root prim as we just did it | ||
315 | if (((part.ScriptEvents & scriptEvents.touch) == 0) || | ||
316 | (part.PassTouches && (part.LocalId != obj.RootPart.LocalId))) | ||
304 | { | 317 | { |
305 | if (ent is SceneObjectGroup) | 318 | EventManager.TriggerObjectGrabbing(obj.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg); |
306 | { | ||
307 | SceneObjectGroup obj = ent as SceneObjectGroup; | ||
308 | if (obj != null) | ||
309 | { | ||
310 | // Is this prim part of the group | ||
311 | if (obj.HasChildPrim(objectID)) | ||
312 | { | ||
313 | SceneObjectPart part = obj.GetChildPart(objectID); | ||
314 | |||
315 | // If the touched prim handles touches, deliver it | ||
316 | // If not, deliver to root prim | ||
317 | if ((part.ScriptEvents & scriptEvents.touch) != 0) | ||
318 | EventManager.TriggerObjectGrabbing(part.LocalId, 0, part.OffsetPosition, remoteClient, surfaceArg); | ||
319 | // Deliver to the root prim if the touched prim doesn't handle touches | ||
320 | // or if we're meant to pass on touches anyway. Don't send to root prim | ||
321 | // if prim touched is the root prim as we just did it | ||
322 | if (((part.ScriptEvents & scriptEvents.touch) == 0) || | ||
323 | (part.PassTouches && (part.LocalId != obj.RootPart.LocalId))) | ||
324 | { | ||
325 | EventManager.TriggerObjectGrabbing(obj.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg); | ||
326 | } | ||
327 | |||
328 | return; | ||
329 | } | ||
330 | } | ||
331 | } | ||
332 | } | 319 | } |
333 | } | 320 | } |
334 | 321 | ||
335 | public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) | 322 | public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) |
336 | { | 323 | { |
337 | EntityBase[] EntityList = GetEntities(); | 324 | SceneObjectPart part = GetSceneObjectPart(localID); |
325 | if (part == null) | ||
326 | return; | ||
327 | |||
328 | SceneObjectGroup obj = part.ParentGroup; | ||
338 | 329 | ||
339 | SurfaceTouchEventArgs surfaceArg = null; | 330 | SurfaceTouchEventArgs surfaceArg = null; |
340 | if (surfaceArgs != null && surfaceArgs.Count > 0) | 331 | if (surfaceArgs != null && surfaceArgs.Count > 0) |
341 | surfaceArg = surfaceArgs[0]; | 332 | surfaceArg = surfaceArgs[0]; |
342 | 333 | ||
343 | foreach (EntityBase ent in EntityList) | 334 | // If the touched prim handles touches, deliver it |
344 | { | 335 | // If not, deliver to root prim |
345 | if (ent is SceneObjectGroup) | 336 | if ((part.ScriptEvents & scriptEvents.touch_end) != 0) |
346 | { | 337 | EventManager.TriggerObjectDeGrab(part.LocalId, 0, remoteClient, surfaceArg); |
347 | SceneObjectGroup obj = ent as SceneObjectGroup; | 338 | else |
348 | 339 | EventManager.TriggerObjectDeGrab(obj.RootPart.LocalId, part.LocalId, remoteClient, surfaceArg); | |
349 | // Is this prim part of the group | ||
350 | if (obj.HasChildPrim(localID)) | ||
351 | { | ||
352 | SceneObjectPart part=obj.GetChildPart(localID); | ||
353 | if (part != null) | ||
354 | { | ||
355 | // If the touched prim handles touches, deliver it | ||
356 | // If not, deliver to root prim | ||
357 | if ((part.ScriptEvents & scriptEvents.touch_end) != 0) | ||
358 | EventManager.TriggerObjectDeGrab(part.LocalId, 0, remoteClient, surfaceArg); | ||
359 | else | ||
360 | EventManager.TriggerObjectDeGrab(obj.RootPart.LocalId, part.LocalId, remoteClient, surfaceArg); | ||
361 | |||
362 | return; | ||
363 | } | ||
364 | return; | ||
365 | } | ||
366 | } | ||
367 | } | ||
368 | } | 340 | } |
369 | 341 | ||
370 | public void ProcessAvatarPickerRequest(IClientAPI client, UUID avatarID, UUID RequestID, string query) | 342 | public void ProcessAvatarPickerRequest(IClientAPI client, UUID avatarID, UUID RequestID, string query) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index b43b227..6666328 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -139,6 +139,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
139 | protected IDialogModule m_dialogModule; | 139 | protected IDialogModule m_dialogModule; |
140 | protected IEntityTransferModule m_teleportModule; | 140 | protected IEntityTransferModule m_teleportModule; |
141 | protected ICapabilitiesModule m_capsModule; | 141 | protected ICapabilitiesModule m_capsModule; |
142 | protected IGroupsModule m_groupsModule; | ||
142 | 143 | ||
143 | /// <summary> | 144 | /// <summary> |
144 | /// Current scene frame number | 145 | /// Current scene frame number |
@@ -1164,6 +1165,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1164 | m_dialogModule = RequestModuleInterface<IDialogModule>(); | 1165 | m_dialogModule = RequestModuleInterface<IDialogModule>(); |
1165 | m_capsModule = RequestModuleInterface<ICapabilitiesModule>(); | 1166 | m_capsModule = RequestModuleInterface<ICapabilitiesModule>(); |
1166 | m_teleportModule = RequestModuleInterface<IEntityTransferModule>(); | 1167 | m_teleportModule = RequestModuleInterface<IEntityTransferModule>(); |
1168 | m_groupsModule = RequestModuleInterface<IGroupsModule>(); | ||
1167 | } | 1169 | } |
1168 | 1170 | ||
1169 | #endregion | 1171 | #endregion |
@@ -2733,6 +2735,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2733 | client.OnObjectDescription += m_sceneGraph.PrimDescription; | 2735 | client.OnObjectDescription += m_sceneGraph.PrimDescription; |
2734 | client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; | 2736 | client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; |
2735 | client.OnObjectOwner += ObjectOwner; | 2737 | client.OnObjectOwner += ObjectOwner; |
2738 | client.OnObjectGroupRequest += HandleObjectGroupUpdate; | ||
2736 | } | 2739 | } |
2737 | 2740 | ||
2738 | public virtual void SubscribeToClientPrimRezEvents(IClientAPI client) | 2741 | public virtual void SubscribeToClientPrimRezEvents(IClientAPI client) |
@@ -2776,7 +2779,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2776 | 2779 | ||
2777 | public virtual void SubscribeToClientParcelEvents(IClientAPI client) | 2780 | public virtual void SubscribeToClientParcelEvents(IClientAPI client) |
2778 | { | 2781 | { |
2779 | client.OnObjectGroupRequest += m_sceneGraph.HandleObjectGroupUpdate; | ||
2780 | client.OnParcelReturnObjectsRequest += LandChannel.ReturnObjectsInParcel; | 2782 | client.OnParcelReturnObjectsRequest += LandChannel.ReturnObjectsInParcel; |
2781 | client.OnParcelSetOtherCleanTime += LandChannel.SetParcelOtherCleanTime; | 2783 | client.OnParcelSetOtherCleanTime += LandChannel.SetParcelOtherCleanTime; |
2782 | client.OnParcelBuy += ProcessParcelBuy; | 2784 | client.OnParcelBuy += ProcessParcelBuy; |
@@ -2903,7 +2905,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2903 | 2905 | ||
2904 | public virtual void UnSubscribeToClientParcelEvents(IClientAPI client) | 2906 | public virtual void UnSubscribeToClientParcelEvents(IClientAPI client) |
2905 | { | 2907 | { |
2906 | client.OnObjectGroupRequest -= m_sceneGraph.HandleObjectGroupUpdate; | ||
2907 | client.OnParcelReturnObjectsRequest -= LandChannel.ReturnObjectsInParcel; | 2908 | client.OnParcelReturnObjectsRequest -= LandChannel.ReturnObjectsInParcel; |
2908 | client.OnParcelSetOtherCleanTime -= LandChannel.SetParcelOtherCleanTime; | 2909 | client.OnParcelSetOtherCleanTime -= LandChannel.SetParcelOtherCleanTime; |
2909 | client.OnParcelBuy -= ProcessParcelBuy; | 2910 | client.OnParcelBuy -= ProcessParcelBuy; |
@@ -3522,15 +3523,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3522 | m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!"); | 3523 | m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!"); |
3523 | } | 3524 | } |
3524 | 3525 | ||
3525 | IGroupsModule groupsModule = | ||
3526 | RequestModuleInterface<IGroupsModule>(); | ||
3527 | |||
3528 | List<UUID> agentGroups = new List<UUID>(); | 3526 | List<UUID> agentGroups = new List<UUID>(); |
3529 | 3527 | ||
3530 | if (groupsModule != null) | 3528 | if (m_groupsModule != null) |
3531 | { | 3529 | { |
3532 | GroupMembershipData[] GroupMembership = | 3530 | GroupMembershipData[] GroupMembership = m_groupsModule.GetMembershipData(agent.AgentID); |
3533 | groupsModule.GetMembershipData(agent.AgentID); | ||
3534 | 3531 | ||
3535 | if (GroupMembership != null) | 3532 | if (GroupMembership != null) |
3536 | { | 3533 | { |
@@ -4287,7 +4284,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4287 | /// Get a scene object group that contains the prim with the given local id | 4284 | /// Get a scene object group that contains the prim with the given local id |
4288 | /// </summary> | 4285 | /// </summary> |
4289 | /// <param name="localID"></param> | 4286 | /// <param name="localID"></param> |
4290 | /// <returns>null if no scene object group containing that prim is found</returns> | 4287 | /// <returns>null if no scene object group containing that prim is found</returns> |
4291 | public SceneObjectGroup GetGroupByPrim(uint localID) | 4288 | public SceneObjectGroup GetGroupByPrim(uint localID) |
4292 | { | 4289 | { |
4293 | return m_sceneGraph.GetGroupByPrim(localID); | 4290 | return m_sceneGraph.GetGroupByPrim(localID); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index af95c28..a3e4b46 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -575,20 +575,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
575 | } | 575 | } |
576 | } | 576 | } |
577 | 577 | ||
578 | protected internal void HandleObjectGroupUpdate( | ||
579 | IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage) | ||
580 | { | ||
581 | if (!remoteClient.IsGroupMember(GroupID)) | ||
582 | return; | ||
583 | |||
584 | SceneObjectGroup group = GetGroupByPrim(objectLocalID); | ||
585 | if (group != null) | ||
586 | { | ||
587 | if (group.OwnerID == remoteClient.AgentId) | ||
588 | group.SetGroup(GroupID, remoteClient); | ||
589 | } | ||
590 | } | ||
591 | |||
592 | protected internal ScenePresence CreateAndAddChildScenePresence( | 578 | protected internal ScenePresence CreateAndAddChildScenePresence( |
593 | IClientAPI client, AvatarAppearance appearance, PresenceType type) | 579 | IClientAPI client, AvatarAppearance appearance, PresenceType type) |
594 | { | 580 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index f9e0b83..abea788 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1373,19 +1373,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
1373 | 1373 | ||
1374 | #endregion | 1374 | #endregion |
1375 | 1375 | ||
1376 | // Send the parts of this SOG to a single client | 1376 | /// <summary> |
1377 | // Used when the client initially connects and when client sends RequestPrim packet | 1377 | /// Send the parts of this SOG to a single client |
1378 | /// </summary> | ||
1379 | /// <remarks> | ||
1380 | /// Used when the client initially connects and when client sends RequestPrim packet | ||
1381 | /// </remarks> | ||
1382 | /// <param name="remoteClient"></param> | ||
1378 | public void SendFullUpdateToClient(IClientAPI remoteClient) | 1383 | public void SendFullUpdateToClient(IClientAPI remoteClient) |
1379 | { | 1384 | { |
1380 | RootPart.SendFullUpdate( | 1385 | RootPart.SendFullUpdate(remoteClient); |
1381 | remoteClient, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID)); | ||
1382 | 1386 | ||
1383 | SceneObjectPart[] parts = m_parts.GetArray(); | 1387 | SceneObjectPart[] parts = m_parts.GetArray(); |
1384 | for (int i = 0; i < parts.Length; i++) | 1388 | for (int i = 0; i < parts.Length; i++) |
1385 | { | 1389 | { |
1386 | SceneObjectPart part = parts[i]; | 1390 | SceneObjectPart part = parts[i]; |
1387 | if (part != RootPart) | 1391 | if (part != RootPart) |
1388 | part.SendFullUpdate(remoteClient, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, part.UUID)); | 1392 | part.SendFullUpdate(remoteClient); |
1389 | } | 1393 | } |
1390 | } | 1394 | } |
1391 | 1395 | ||
@@ -1679,10 +1683,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1679 | 1683 | ||
1680 | /// <summary> | 1684 | /// <summary> |
1681 | /// Reset the UUIDs for all the prims that make up this group. | 1685 | /// Reset the UUIDs for all the prims that make up this group. |
1682 | /// | 1686 | /// </summary> |
1687 | /// <remarks> | ||
1683 | /// This is called by methods which want to add a new group to an existing scene, in order | 1688 | /// This is called by methods which want to add a new group to an existing scene, in order |
1684 | /// to ensure that there are no clashes with groups already present. | 1689 | /// to ensure that there are no clashes with groups already present. |
1685 | /// </summary> | 1690 | /// </remarks> |
1686 | public void ResetIDs() | 1691 | public void ResetIDs() |
1687 | { | 1692 | { |
1688 | lock (m_parts.SyncRoot) | 1693 | lock (m_parts.SyncRoot) |
@@ -3206,6 +3211,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
3206 | part.Inventory.ChangeInventoryGroup(GroupID); | 3211 | part.Inventory.ChangeInventoryGroup(GroupID); |
3207 | } | 3212 | } |
3208 | 3213 | ||
3214 | HasGroupChanged = true; | ||
3215 | |||
3209 | // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled | 3216 | // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled |
3210 | // for the same object with very different properties. The caller must schedule the update. | 3217 | // for the same object with very different properties. The caller must schedule the update. |
3211 | //ScheduleGroupForFullUpdate(); | 3218 | //ScheduleGroupForFullUpdate(); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index f5a00d7..b29ecc6 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -2836,8 +2836,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2836 | /// Send a full update to the client for the given part | 2836 | /// Send a full update to the client for the given part |
2837 | /// </summary> | 2837 | /// </summary> |
2838 | /// <param name="remoteClient"></param> | 2838 | /// <param name="remoteClient"></param> |
2839 | /// <param name="clientFlags"></param> | 2839 | protected internal void SendFullUpdate(IClientAPI remoteClient) |
2840 | protected internal void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) | ||
2841 | { | 2840 | { |
2842 | if (ParentGroup == null) | 2841 | if (ParentGroup == null) |
2843 | return; | 2842 | return; |
@@ -2849,16 +2848,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
2849 | { | 2848 | { |
2850 | if (ParentGroup.IsAttachment) | 2849 | if (ParentGroup.IsAttachment) |
2851 | { | 2850 | { |
2852 | SendFullUpdateToClient(remoteClient, AttachedPos, clientFlags); | 2851 | SendFullUpdateToClient(remoteClient, AttachedPos); |
2853 | } | 2852 | } |
2854 | else | 2853 | else |
2855 | { | 2854 | { |
2856 | SendFullUpdateToClient(remoteClient, AbsolutePosition, clientFlags); | 2855 | SendFullUpdateToClient(remoteClient, AbsolutePosition); |
2857 | } | 2856 | } |
2858 | } | 2857 | } |
2859 | else | 2858 | else |
2860 | { | 2859 | { |
2861 | SendFullUpdateToClient(remoteClient, clientFlags); | 2860 | SendFullUpdateToClient(remoteClient); |
2862 | } | 2861 | } |
2863 | } | 2862 | } |
2864 | 2863 | ||
@@ -2872,7 +2871,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2872 | 2871 | ||
2873 | ParentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) | 2872 | ParentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) |
2874 | { | 2873 | { |
2875 | SendFullUpdate(avatar.ControllingClient, avatar.GenerateClientFlags(UUID)); | 2874 | SendFullUpdate(avatar.ControllingClient); |
2876 | }); | 2875 | }); |
2877 | } | 2876 | } |
2878 | 2877 | ||
@@ -2880,12 +2879,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2880 | /// Sends a full update to the client | 2879 | /// Sends a full update to the client |
2881 | /// </summary> | 2880 | /// </summary> |
2882 | /// <param name="remoteClient"></param> | 2881 | /// <param name="remoteClient"></param> |
2883 | /// <param name="clientFlags"></param> | 2882 | public void SendFullUpdateToClient(IClientAPI remoteClient) |
2884 | public void SendFullUpdateToClient(IClientAPI remoteClient, uint clientflags) | ||
2885 | { | 2883 | { |
2886 | Vector3 lPos; | 2884 | SendFullUpdateToClient(remoteClient, OffsetPosition); |
2887 | lPos = OffsetPosition; | ||
2888 | SendFullUpdateToClient(remoteClient, lPos, clientflags); | ||
2889 | } | 2885 | } |
2890 | 2886 | ||
2891 | /// <summary> | 2887 | /// <summary> |
@@ -2893,8 +2889,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2893 | /// </summary> | 2889 | /// </summary> |
2894 | /// <param name="remoteClient"></param> | 2890 | /// <param name="remoteClient"></param> |
2895 | /// <param name="lPos"></param> | 2891 | /// <param name="lPos"></param> |
2896 | /// <param name="clientFlags"></param> | 2892 | public void SendFullUpdateToClient(IClientAPI remoteClient, Vector3 lPos) |
2897 | public void SendFullUpdateToClient(IClientAPI remoteClient, Vector3 lPos, uint clientFlags) | ||
2898 | { | 2893 | { |
2899 | if (ParentGroup == null) | 2894 | if (ParentGroup == null) |
2900 | return; | 2895 | return; |
@@ -2911,15 +2906,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2911 | (ParentGroup.AttachmentPoint >= 31) && (ParentGroup.AttachmentPoint <= 38)) | 2906 | (ParentGroup.AttachmentPoint >= 31) && (ParentGroup.AttachmentPoint <= 38)) |
2912 | return; | 2907 | return; |
2913 | 2908 | ||
2914 | clientFlags &= ~(uint) PrimFlags.CreateSelected; | ||
2915 | |||
2916 | if (remoteClient.AgentId == OwnerID) | 2909 | if (remoteClient.AgentId == OwnerID) |
2917 | { | 2910 | { |
2918 | if ((Flags & PrimFlags.CreateSelected) != 0) | 2911 | if ((Flags & PrimFlags.CreateSelected) != 0) |
2919 | { | ||
2920 | clientFlags |= (uint) PrimFlags.CreateSelected; | ||
2921 | Flags &= ~PrimFlags.CreateSelected; | 2912 | Flags &= ~PrimFlags.CreateSelected; |
2922 | } | ||
2923 | } | 2913 | } |
2924 | //bool isattachment = IsAttachment; | 2914 | //bool isattachment = IsAttachment; |
2925 | //if (LocalId != ParentGroup.RootPart.LocalId) | 2915 | //if (LocalId != ParentGroup.RootPart.LocalId) |
@@ -3354,6 +3344,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3354 | 3344 | ||
3355 | public void SetGroup(UUID groupID, IClientAPI client) | 3345 | public void SetGroup(UUID groupID, IClientAPI client) |
3356 | { | 3346 | { |
3347 | // Scene.AddNewPrims() calls with client == null so can't use this. | ||
3348 | // m_log.DebugFormat( | ||
3349 | // "[SCENE OBJECT PART]: Setting group for {0} to {1} for {2}", | ||
3350 | // Name, groupID, OwnerID); | ||
3351 | |||
3357 | GroupID = groupID; | 3352 | GroupID = groupID; |
3358 | if (client != null) | 3353 | if (client != null) |
3359 | SendPropertiesToClient(client); | 3354 | SendPropertiesToClient(client); |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index b16eaba..36d8c0b 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -784,7 +784,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
784 | public void RegisterToEvents() | 784 | public void RegisterToEvents() |
785 | { | 785 | { |
786 | ControllingClient.OnCompleteMovementToRegion += CompleteMovement; | 786 | ControllingClient.OnCompleteMovementToRegion += CompleteMovement; |
787 | //ControllingClient.OnCompleteMovementToRegion += SendInitialData; | ||
788 | ControllingClient.OnAgentUpdate += HandleAgentUpdate; | 787 | ControllingClient.OnAgentUpdate += HandleAgentUpdate; |
789 | ControllingClient.OnAgentRequestSit += HandleAgentRequestSit; | 788 | ControllingClient.OnAgentRequestSit += HandleAgentRequestSit; |
790 | ControllingClient.OnAgentSit += HandleAgentSit; | 789 | ControllingClient.OnAgentSit += HandleAgentSit; |
@@ -832,11 +831,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
832 | 831 | ||
833 | #endregion | 832 | #endregion |
834 | 833 | ||
835 | public uint GenerateClientFlags(UUID ObjectID) | ||
836 | { | ||
837 | return m_scene.Permissions.GenerateClientFlags(m_uuid, ObjectID); | ||
838 | } | ||
839 | |||
840 | #region Status Methods | 834 | #region Status Methods |
841 | 835 | ||
842 | /// <summary> | 836 | /// <summary> |
@@ -2538,7 +2532,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2538 | // again here... this comes after the cached appearance check because the avatars | 2532 | // again here... this comes after the cached appearance check because the avatars |
2539 | // appearance goes into the avatar update packet | 2533 | // appearance goes into the avatar update packet |
2540 | SendAvatarDataToAllAgents(); | 2534 | SendAvatarDataToAllAgents(); |
2541 | SendAppearanceToAgent(this); | 2535 | |
2536 | // Sending us our own appearance does not seem to be necessary, and the viewer warns in the log if you do | ||
2537 | // this. | ||
2538 | // SendAppearanceToAgent(this); | ||
2542 | 2539 | ||
2543 | // If we are using the the cached appearance then send it out to everyone | 2540 | // If we are using the the cached appearance then send it out to everyone |
2544 | if (cachedappearance) | 2541 | if (cachedappearance) |
@@ -2673,7 +2670,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2673 | public void SendAppearanceToAgent(ScenePresence avatar) | 2670 | public void SendAppearanceToAgent(ScenePresence avatar) |
2674 | { | 2671 | { |
2675 | // m_log.DebugFormat( | 2672 | // m_log.DebugFormat( |
2676 | // "[SCENE PRESENCE] Send appearance from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID); | 2673 | // "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID); |
2677 | 2674 | ||
2678 | avatar.ControllingClient.SendAppearance( | 2675 | avatar.ControllingClient.SendAppearance( |
2679 | UUID, Appearance.VisualParams, Appearance.Texture.GetBytes()); | 2676 | UUID, Appearance.VisualParams, Appearance.Texture.GetBytes()); |
diff --git a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs index 40cbc60..1ce24f1 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs | |||
@@ -50,8 +50,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance | |||
50 | { | 50 | { |
51 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 51 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
52 | 52 | ||
53 | public const string SHOW_APPEARANCE_FORMAT = "{0,-9} {1}"; | ||
54 | |||
55 | private Dictionary<UUID, Scene> m_scenes = new Dictionary<UUID, Scene>(); | 53 | private Dictionary<UUID, Scene> m_scenes = new Dictionary<UUID, Scene>(); |
56 | // private IAvatarFactoryModule m_avatarFactory; | 54 | // private IAvatarFactoryModule m_avatarFactory; |
57 | 55 | ||
@@ -197,37 +195,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance | |||
197 | { | 195 | { |
198 | ScenePresence sp = scene.GetScenePresence(optionalTargetFirstName, optionalTargetLastName); | 196 | ScenePresence sp = scene.GetScenePresence(optionalTargetFirstName, optionalTargetLastName); |
199 | if (sp != null && !sp.IsChildAgent) | 197 | if (sp != null && !sp.IsChildAgent) |
200 | { | 198 | scene.AvatarFactory.WriteBakedTexturesReport(sp, MainConsole.Instance.OutputFormat); |
201 | MainConsole.Instance.OutputFormat("For {0} in {1}", sp.Name, scene.RegionInfo.RegionName); | ||
202 | MainConsole.Instance.OutputFormat(SHOW_APPEARANCE_FORMAT, "Bake Type", "UUID"); | ||
203 | |||
204 | Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures | ||
205 | = scene.AvatarFactory.GetBakedTextureFaces(sp.UUID); | ||
206 | foreach (BakeType bt in bakedTextures.Keys) | ||
207 | { | ||
208 | string rawTextureID; | ||
209 | |||
210 | if (bakedTextures[bt] == null) | ||
211 | { | ||
212 | rawTextureID = "not set"; | ||
213 | } | ||
214 | else | ||
215 | { | ||
216 | rawTextureID = bakedTextures[bt].TextureID.ToString(); | ||
217 | |||
218 | if (scene.AssetService.Get(rawTextureID) == null) | ||
219 | rawTextureID += " (not found)"; | ||
220 | else | ||
221 | rawTextureID += " (uploaded)"; | ||
222 | } | ||
223 | |||
224 | MainConsole.Instance.OutputFormat(SHOW_APPEARANCE_FORMAT, bt, rawTextureID); | ||
225 | } | ||
226 | |||
227 | bool bakedTextureValid = scene.AvatarFactory.ValidateBakedTextureCache(sp); | ||
228 | MainConsole.Instance.OutputFormat( | ||
229 | "{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "corrupt"); | ||
230 | } | ||
231 | } | 199 | } |
232 | else | 200 | else |
233 | { | 201 | { |
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs index d452905..740dbdd 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs | |||
@@ -29,25 +29,18 @@ using System; | |||
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System.Timers; | 31 | using System.Timers; |
32 | |||
33 | using log4net; | 32 | using log4net; |
34 | using Mono.Addins; | 33 | using Mono.Addins; |
35 | using Nini.Config; | 34 | using Nini.Config; |
36 | |||
37 | using OpenMetaverse; | 35 | using OpenMetaverse; |
38 | using OpenMetaverse.StructuredData; | 36 | using OpenMetaverse.StructuredData; |
39 | |||
40 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
41 | using OpenSim.Framework.Communications; | 38 | using OpenSim.Framework.Communications; |
42 | using OpenSim.Region.Framework.Interfaces; | 39 | using OpenSim.Region.Framework.Interfaces; |
43 | using OpenSim.Region.Framework.Scenes; | 40 | using OpenSim.Region.Framework.Scenes; |
44 | |||
45 | using OpenSim.Services.Interfaces; | 41 | using OpenSim.Services.Interfaces; |
46 | |||
47 | using DirFindFlags = OpenMetaverse.DirectoryManager.DirFindFlags; | 42 | using DirFindFlags = OpenMetaverse.DirectoryManager.DirFindFlags; |
48 | 43 | ||
49 | |||
50 | |||
51 | namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | 44 | namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups |
52 | { | 45 | { |
53 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] | 46 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] |
@@ -90,7 +83,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
90 | // Configuration settings | 83 | // Configuration settings |
91 | private bool m_groupsEnabled = false; | 84 | private bool m_groupsEnabled = false; |
92 | private bool m_groupNoticesEnabled = true; | 85 | private bool m_groupNoticesEnabled = true; |
93 | private bool m_debugEnabled = true; | 86 | private bool m_debugEnabled = false; |
94 | 87 | ||
95 | #region IRegionModuleBase Members | 88 | #region IRegionModuleBase Members |
96 | 89 | ||
@@ -232,7 +225,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
232 | // Used for Notices and Group Invites/Accept/Reject | 225 | // Used for Notices and Group Invites/Accept/Reject |
233 | client.OnInstantMessage += OnInstantMessage; | 226 | client.OnInstantMessage += OnInstantMessage; |
234 | 227 | ||
235 | // Send client thier groups information. | 228 | // Send client their groups information. |
236 | SendAgentGroupDataUpdate(client, client.AgentId); | 229 | SendAgentGroupDataUpdate(client, client.AgentId); |
237 | } | 230 | } |
238 | 231 | ||
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs index a08bcd0..52fc27d 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs | |||
@@ -52,6 +52,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
52 | { | 52 | { |
53 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 53 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
54 | 54 | ||
55 | private bool m_debugEnabled = false; | ||
56 | |||
55 | public const GroupPowers m_DefaultEveryonePowers = GroupPowers.AllowSetHome | | 57 | public const GroupPowers m_DefaultEveryonePowers = GroupPowers.AllowSetHome | |
56 | GroupPowers.Accountable | | 58 | GroupPowers.Accountable | |
57 | GroupPowers.JoinChat | | 59 | GroupPowers.JoinChat | |
@@ -81,7 +83,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
81 | private Dictionary<UUID, List<UUID>> m_groupsAgentsDroppedFromChatSession = new Dictionary<UUID, List<UUID>>(); | 83 | private Dictionary<UUID, List<UUID>> m_groupsAgentsDroppedFromChatSession = new Dictionary<UUID, List<UUID>>(); |
82 | private Dictionary<UUID, List<UUID>> m_groupsAgentsInvitedToChatSession = new Dictionary<UUID, List<UUID>>(); | 84 | private Dictionary<UUID, List<UUID>> m_groupsAgentsInvitedToChatSession = new Dictionary<UUID, List<UUID>>(); |
83 | 85 | ||
84 | |||
85 | #region IRegionModuleBase Members | 86 | #region IRegionModuleBase Members |
86 | 87 | ||
87 | public string Name | 88 | public string Name |
@@ -115,7 +116,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
115 | return; | 116 | return; |
116 | } | 117 | } |
117 | 118 | ||
118 | m_log.InfoFormat("[XMLRPC-GROUPS-CONNECTOR]: Initializing {0}", this.Name); | 119 | m_log.DebugFormat("[XMLRPC-GROUPS-CONNECTOR]: Initializing {0}", this.Name); |
119 | 120 | ||
120 | m_groupsServerURI = groupsConfig.GetString("GroupsServerURI", string.Empty); | 121 | m_groupsServerURI = groupsConfig.GetString("GroupsServerURI", string.Empty); |
121 | if ((m_groupsServerURI == null) || | 122 | if ((m_groupsServerURI == null) || |
@@ -142,6 +143,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
142 | m_log.InfoFormat("[XMLRPC-GROUPS-CONNECTOR]: Groups Cache Timeout set to {0}.", m_cacheTimeout); | 143 | m_log.InfoFormat("[XMLRPC-GROUPS-CONNECTOR]: Groups Cache Timeout set to {0}.", m_cacheTimeout); |
143 | } | 144 | } |
144 | 145 | ||
146 | m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", false); | ||
147 | |||
145 | // If we got all the config options we need, lets start'er'up | 148 | // If we got all the config options we need, lets start'er'up |
146 | m_memoryCache = new ExpiringCache<string, XmlRpcResponse>(); | 149 | m_memoryCache = new ExpiringCache<string, XmlRpcResponse>(); |
147 | m_connectorEnabled = true; | 150 | m_connectorEnabled = true; |
@@ -150,7 +153,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
150 | 153 | ||
151 | public void Close() | 154 | public void Close() |
152 | { | 155 | { |
153 | m_log.InfoFormat("[XMLRPC-GROUPS-CONNECTOR]: Closing {0}", this.Name); | 156 | m_log.DebugFormat("[XMLRPC-GROUPS-CONNECTOR]: Closing {0}", this.Name); |
154 | } | 157 | } |
155 | 158 | ||
156 | public void AddRegion(OpenSim.Region.Framework.Scenes.Scene scene) | 159 | public void AddRegion(OpenSim.Region.Framework.Scenes.Scene scene) |
@@ -958,6 +961,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
958 | 961 | ||
959 | if (resp == null) | 962 | if (resp == null) |
960 | { | 963 | { |
964 | if (m_debugEnabled) | ||
965 | m_log.DebugFormat("[XMLRPC-GROUPS-CONNECTOR]: Cache miss for key {0}", CacheKey); | ||
966 | |||
961 | string UserService; | 967 | string UserService; |
962 | UUID SessionID; | 968 | UUID SessionID; |
963 | GetClientGroupRequestID(requestingAgentID, out UserService, out SessionID); | 969 | GetClientGroupRequestID(requestingAgentID, out UserService, out SessionID); |
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs index d8aad7b..04ba738 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs | |||
@@ -1780,7 +1780,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1780 | public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, | 1780 | public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, |
1781 | Vector3 size, Quaternion rotation, bool isPhysical, uint localid) | 1781 | Vector3 size, Quaternion rotation, bool isPhysical, uint localid) |
1782 | { | 1782 | { |
1783 | m_log.DebugFormat("[ODE SCENE]: Adding physics prim {0} {1} to physics scene {2}", primName, localid, Name); | 1783 | // m_log.DebugFormat("[ODE SCENE]: Adding physics prim {0} {1} to physics scene {2}", primName, localid, Name); |
1784 | 1784 | ||
1785 | return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid); | 1785 | return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid); |
1786 | } | 1786 | } |
diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example index b6b1eb5..84611ec 100644 --- a/bin/config-include/StandaloneCommon.ini.example +++ b/bin/config-include/StandaloneCommon.ini.example | |||
@@ -13,7 +13,10 @@ | |||
13 | ; Change the connection string to your db details | 13 | ; Change the connection string to your db details |
14 | ;StorageProvider = "OpenSim.Data.MySQL.dll" | 14 | ;StorageProvider = "OpenSim.Data.MySQL.dll" |
15 | ;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;" | 15 | ;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;" |
16 | ; Uncomment this line if you are using MySQL and want to use a different database for estates | 16 | |
17 | ; Uncomment this line if you are using MySQL and want to use a different database for estates. | ||
18 | ; The usual application for this is to allow estates to be spread out across multiple simulators by share the same database. | ||
19 | ; Most people won't need to do this so only uncomment if you know what you're doing. | ||
17 | ;EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;" | 20 | ;EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;" |
18 | 21 | ||
19 | ; MSSQL | 22 | ; MSSQL |