aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs95
1 files changed, 60 insertions, 35 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 6e53951..7e781c3 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -38,9 +38,8 @@ namespace OpenSim.Region.Framework.Scenes
38{ 38{
39 public partial class Scene 39 public partial class Scene
40 { 40 {
41 41 public void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName,
42 protected void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName, 42 UUID fromID, bool fromAgent, bool broadcast, UUID destination)
43 UUID fromID, UUID targetID, bool fromAgent, bool broadcast)
44 { 43 {
45 OSChatMessage args = new OSChatMessage(); 44 OSChatMessage args = new OSChatMessage();
46 45
@@ -50,6 +49,7 @@ namespace OpenSim.Region.Framework.Scenes
50 args.Position = fromPos; 49 args.Position = fromPos;
51 args.SenderUUID = fromID; 50 args.SenderUUID = fromID;
52 args.Scene = this; 51 args.Scene = this;
52 args.Destination = destination;
53 53
54 if (fromAgent) 54 if (fromAgent)
55 { 55 {
@@ -64,18 +64,18 @@ namespace OpenSim.Region.Framework.Scenes
64 } 64 }
65 65
66 args.From = fromName; 66 args.From = fromName;
67 args.TargetUUID = targetID; 67 //args.
68 68
69 if (broadcast) 69 if (broadcast)
70 EventManager.TriggerOnChatBroadcast(this, args); 70 EventManager.TriggerOnChatBroadcast(this, args);
71 else 71 else
72 EventManager.TriggerOnChatFromWorld(this, args); 72 EventManager.TriggerOnChatFromWorld(this, args);
73 } 73 }
74 74
75 protected void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName, 75 protected void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName,
76 UUID fromID, bool fromAgent, bool broadcast) 76 UUID fromID, bool fromAgent, bool broadcast)
77 { 77 {
78 SimChat(message, type, channel, fromPos, fromName, fromID, UUID.Zero, fromAgent, broadcast); 78 SimChat(message, type, channel, fromPos, fromName, fromID, fromAgent, broadcast, UUID.Zero);
79 } 79 }
80 80
81 /// <summary> 81 /// <summary>
@@ -115,19 +115,6 @@ namespace OpenSim.Region.Framework.Scenes
115 { 115 {
116 SimChat(message, type, channel, fromPos, fromName, fromID, fromAgent, true); 116 SimChat(message, type, channel, fromPos, fromName, fromID, fromAgent, true);
117 } 117 }
118 /// <summary>
119 ///
120 /// </summary>
121 /// <param name="message"></param>
122 /// <param name="type"></param>
123 /// <param name="fromPos"></param>
124 /// <param name="fromName"></param>
125 /// <param name="fromAgentID"></param>
126 /// <param name="targetID"></param>
127 public void SimChatToAgent(UUID targetID, byte[] message, Vector3 fromPos, string fromName, UUID fromID, bool fromAgent)
128 {
129 SimChat(message, ChatTypeEnum.Say, 0, fromPos, fromName, fromID, targetID, fromAgent, false);
130 }
131 118
132 /// <summary> 119 /// <summary>
133 /// Invoked when the client requests a prim. 120 /// Invoked when the client requests a prim.
@@ -149,27 +136,47 @@ namespace OpenSim.Region.Framework.Scenes
149 /// <param name="remoteClient"></param> 136 /// <param name="remoteClient"></param>
150 public void SelectPrim(uint primLocalID, IClientAPI remoteClient) 137 public void SelectPrim(uint primLocalID, IClientAPI remoteClient)
151 { 138 {
139 /*
140 SceneObjectPart part = GetSceneObjectPart(primLocalID);
141
142 if (null == part)
143 return;
144
145 if (part.IsRoot)
146 {
147 SceneObjectGroup sog = part.ParentGroup;
148 sog.SendPropertiesToClient(remoteClient);
149
150 // A prim is only tainted if it's allowed to be edited by the person clicking it.
151 if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId)
152 || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId))
153 {
154 sog.IsSelected = true;
155 EventManager.TriggerParcelPrimCountTainted();
156 }
157 }
158 else
159 {
160 part.SendPropertiesToClient(remoteClient);
161 }
162 */
152 SceneObjectPart part = GetSceneObjectPart(primLocalID); 163 SceneObjectPart part = GetSceneObjectPart(primLocalID);
153 164
154 if (null == part) 165 if (null == part)
155 return; 166 return;
156 167
157 if (part.IsRoot) 168 SceneObjectGroup sog = part.ParentGroup;
158 { 169 if (sog == null)
159 SceneObjectGroup sog = part.ParentGroup; 170 return;
160 sog.SendPropertiesToClient(remoteClient);
161 sog.IsSelected = true;
162 171
163 // A prim is only tainted if it's allowed to be edited by the person clicking it. 172 part.SendPropertiesToClient(remoteClient);
164 if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId) 173
165 || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId)) 174 // A prim is only tainted if it's allowed to be edited by the person clicking it.
166 { 175 if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId)
167 EventManager.TriggerParcelPrimCountTainted(); 176 || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId))
168 }
169 }
170 else
171 { 177 {
172 part.SendPropertiesToClient(remoteClient); 178 part.IsSelected = true;
179 EventManager.TriggerParcelPrimCountTainted();
173 } 180 }
174 } 181 }
175 182
@@ -222,7 +229,7 @@ namespace OpenSim.Region.Framework.Scenes
222 SceneObjectPart part = GetSceneObjectPart(primLocalID); 229 SceneObjectPart part = GetSceneObjectPart(primLocalID);
223 if (part == null) 230 if (part == null)
224 return; 231 return;
225 232 /*
226 // A deselect packet contains all the local prims being deselected. However, since selection is still 233 // A deselect packet contains all the local prims being deselected. However, since selection is still
227 // group based we only want the root prim to trigger a full update - otherwise on objects with many prims 234 // group based we only want the root prim to trigger a full update - otherwise on objects with many prims
228 // we end up sending many duplicate ObjectUpdates 235 // we end up sending many duplicate ObjectUpdates
@@ -235,7 +242,9 @@ namespace OpenSim.Region.Framework.Scenes
235 // handled by group, but by prim. Legacy cruft. 242 // handled by group, but by prim. Legacy cruft.
236 // TODO: Make selection flagging per prim! 243 // TODO: Make selection flagging per prim!
237 // 244 //
238 part.ParentGroup.IsSelected = false; 245 if (Permissions.CanEditObject(part.ParentGroup.UUID, remoteClient.AgentId)
246 || Permissions.CanMoveObject(part.ParentGroup.UUID, remoteClient.AgentId))
247 part.ParentGroup.IsSelected = false;
239 248
240 if (part.ParentGroup.IsAttachment) 249 if (part.ParentGroup.IsAttachment)
241 isAttachment = true; 250 isAttachment = true;
@@ -255,6 +264,22 @@ namespace OpenSim.Region.Framework.Scenes
255 part.UUID, remoteClient.AgentId)) 264 part.UUID, remoteClient.AgentId))
256 EventManager.TriggerParcelPrimCountTainted(); 265 EventManager.TriggerParcelPrimCountTainted();
257 } 266 }
267 */
268
269 bool oldgprSelect = part.ParentGroup.IsSelected;
270
271 // This is wrong, wrong, wrong. Selection should not be
272 // handled by group, but by prim. Legacy cruft.
273 // TODO: Make selection flagging per prim!
274 //
275 if (Permissions.CanEditObject(part.ParentGroup.UUID, remoteClient.AgentId)
276 || Permissions.CanMoveObject(part.ParentGroup.UUID, remoteClient.AgentId))
277 {
278 part.IsSelected = false;
279 if (!part.ParentGroup.IsAttachment && oldgprSelect != part.ParentGroup.IsSelected)
280 EventManager.TriggerParcelPrimCountTainted();
281 }
282
258 } 283 }
259 284
260 public virtual void ProcessMoneyTransferRequest(UUID source, UUID destination, int amount, 285 public virtual void ProcessMoneyTransferRequest(UUID source, UUID destination, int amount,