aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
diff options
context:
space:
mode:
authorMelanie2010-11-23 14:05:09 +0000
committerMelanie2010-11-23 14:05:09 +0000
commit6557d5f3596e6b187131f3dec325104d79b5eef7 (patch)
treee20aea5c5e7127cf2548126c04db77ac5a43dd22 /OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
parentMerge branch 'master' into careminster-presence-refactor (diff)
parentMerge branch 'master' of melanie@opensimulator.org:/var/git/opensim (diff)
downloadopensim-SC-6557d5f3596e6b187131f3dec325104d79b5eef7.zip
opensim-SC-6557d5f3596e6b187131f3dec325104d79b5eef7.tar.gz
opensim-SC-6557d5f3596e6b187131f3dec325104d79b5eef7.tar.bz2
opensim-SC-6557d5f3596e6b187131f3dec325104d79b5eef7.tar.xz
Merge branch 'master' into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs105
1 files changed, 50 insertions, 55 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index fc92fc3..f924b30 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -112,7 +112,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
112 return; 112 return;
113 113
114 if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) 114 if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId))
115 {
116 remoteClient.SendAgentAlertMessage(
117 "You don't have sufficient permissions to attach this object", false);
118
115 return; 119 return;
120 }
116 121
117 // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should 122 // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should
118 // be removed when that functionality is implemented in opensim 123 // be removed when that functionality is implemented in opensim
@@ -142,76 +147,66 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
142 { 147 {
143 Vector3 attachPos = group.AbsolutePosition; 148 Vector3 attachPos = group.AbsolutePosition;
144 149
145 if (m_scene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId)) 150 // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should
151 // be removed when that functionality is implemented in opensim
152 AttachmentPt &= 0x7f;
153
154 // If the attachment point isn't the same as the one previously used
155 // set it's offset position = 0 so that it appears on the attachment point
156 // and not in a weird location somewhere unknown.
157 if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint())
146 { 158 {
147 // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should 159 attachPos = Vector3.Zero;
148 // be removed when that functionality is implemented in opensim 160 }
149 AttachmentPt &= 0x7f;
150
151 // If the attachment point isn't the same as the one previously used
152 // set it's offset position = 0 so that it appears on the attachment point
153 // and not in a weird location somewhere unknown.
154 if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint())
155 {
156 attachPos = Vector3.Zero;
157 }
158 161
159 // AttachmentPt 0 means the client chose to 'wear' the attachment. 162 // AttachmentPt 0 means the client chose to 'wear' the attachment.
160 if (AttachmentPt == 0) 163 if (AttachmentPt == 0)
161 { 164 {
162 // Check object for stored attachment point 165 // Check object for stored attachment point
163 AttachmentPt = (uint)group.GetAttachmentPoint(); 166 AttachmentPt = (uint)group.GetAttachmentPoint();
164 } 167 }
165 168
166 // if we still didn't find a suitable attachment point....... 169 // if we still didn't find a suitable attachment point.......
167 if (AttachmentPt == 0) 170 if (AttachmentPt == 0)
168 { 171 {
169 // Stick it on left hand with Zero Offset from the attachment point. 172 // Stick it on left hand with Zero Offset from the attachment point.
170 AttachmentPt = (uint)AttachmentPoint.LeftHand; 173 AttachmentPt = (uint)AttachmentPoint.LeftHand;
171 attachPos = Vector3.Zero; 174 attachPos = Vector3.Zero;
172 } 175 }
173 176
174 group.SetAttachmentPoint((byte)AttachmentPt); 177 group.SetAttachmentPoint((byte)AttachmentPt);
175 group.AbsolutePosition = attachPos; 178 group.AbsolutePosition = attachPos;
176 179
177 // Remove any previous attachments 180 // Remove any previous attachments
178 ScenePresence sp = m_scene.GetScenePresence(remoteClient.AgentId); 181 ScenePresence sp = m_scene.GetScenePresence(remoteClient.AgentId);
179 UUID itemID = UUID.Zero; 182 UUID itemID = UUID.Zero;
180 if (sp != null) 183 if (sp != null)
184 {
185 foreach (SceneObjectGroup grp in sp.Attachments)
181 { 186 {
182 foreach (SceneObjectGroup grp in sp.Attachments) 187 if (grp.GetAttachmentPoint() == (byte)AttachmentPt)
183 { 188 {
184 if (grp.GetAttachmentPoint() == (byte)AttachmentPt) 189 itemID = grp.GetFromItemID();
185 { 190 break;
186 itemID = grp.GetFromItemID();
187 break;
188 }
189 } 191 }
190 if (itemID != UUID.Zero)
191 DetachSingleAttachmentToInv(itemID, remoteClient);
192 } 192 }
193 if (itemID != UUID.Zero)
194 DetachSingleAttachmentToInv(itemID, remoteClient);
195 }
193 196
194 if (group.GetFromItemID() == UUID.Zero) 197 if (group.GetFromItemID() == UUID.Zero)
195 { 198 {
196 m_scene.attachObjectAssetStore(remoteClient, group, remoteClient.AgentId, out itemID); 199 m_scene.attachObjectAssetStore(remoteClient, group, remoteClient.AgentId, out itemID);
197 }
198 else
199 {
200 itemID = group.GetFromItemID();
201 }
202
203 ShowAttachInUserInventory(remoteClient, AttachmentPt, itemID, group);
204
205 AttachToAgent(sp, group, AttachmentPt, attachPos, silent);
206 } 200 }
207 else 201 else
208 { 202 {
209 remoteClient.SendAgentAlertMessage( 203 itemID = group.GetFromItemID();
210 "You don't have sufficient permissions to attach this object", false);
211
212 return false;
213 } 204 }
214 205
206 ShowAttachInUserInventory(remoteClient, AttachmentPt, itemID, group);
207
208 AttachToAgent(sp, group, AttachmentPt, attachPos, silent);
209
215 return true; 210 return true;
216 } 211 }
217 212