diff options
Diffstat (limited to 'OpenSim/Framework/AgentCircuitData.cs')
-rw-r--r-- | OpenSim/Framework/AgentCircuitData.cs | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs index c0168e2..ad29950 100644 --- a/OpenSim/Framework/AgentCircuitData.cs +++ b/OpenSim/Framework/AgentCircuitData.cs | |||
@@ -155,6 +155,31 @@ namespace OpenSim.Framework | |||
155 | args["secure_session_id"] = OSD.FromUUID(SecureSessionID); | 155 | args["secure_session_id"] = OSD.FromUUID(SecureSessionID); |
156 | args["session_id"] = OSD.FromUUID(SessionID); | 156 | args["session_id"] = OSD.FromUUID(SessionID); |
157 | args["start_pos"] = OSD.FromString(startpos.ToString()); | 157 | args["start_pos"] = OSD.FromString(startpos.ToString()); |
158 | args["appearance_serial"] = OSD.FromInteger(Appearance.Serial); | ||
159 | |||
160 | // We might not pass this in all cases... | ||
161 | if ((Appearance.Wearables != null) && (Appearance.Wearables.Length > 0)) | ||
162 | { | ||
163 | OSDArray wears = new OSDArray(Appearance.Wearables.Length); | ||
164 | foreach (AvatarWearable awear in Appearance.Wearables) | ||
165 | { | ||
166 | wears.Add(OSD.FromUUID(awear.ItemID)); | ||
167 | wears.Add(OSD.FromUUID(awear.AssetID)); | ||
168 | } | ||
169 | args["wearables"] = wears; | ||
170 | } | ||
171 | |||
172 | Dictionary<int, UUID[]> attachments = Appearance.GetAttachmentDictionary(); | ||
173 | if ((attachments != null) && (attachments.Count > 0)) | ||
174 | { | ||
175 | OSDArray attachs = new OSDArray(attachments.Count); | ||
176 | foreach (KeyValuePair<int, UUID[]> kvp in attachments) | ||
177 | { | ||
178 | AttachmentData adata = new AttachmentData(kvp.Key, kvp.Value[0], kvp.Value[1]); | ||
179 | attachs.Add(adata.PackUpdateMessage()); | ||
180 | } | ||
181 | args["attachments"] = attachs; | ||
182 | } | ||
158 | 183 | ||
159 | return args; | 184 | return args; |
160 | } | 185 | } |
@@ -209,8 +234,35 @@ namespace OpenSim.Framework | |||
209 | if (args["session_id"] != null) | 234 | if (args["session_id"] != null) |
210 | SessionID = args["session_id"].AsUUID(); | 235 | SessionID = args["session_id"].AsUUID(); |
211 | if (args["start_pos"] != null) | 236 | if (args["start_pos"] != null) |
212 | Vector3.TryParse(args["start_pos"].AsString(), out startpos); | 237 | Vector3.TryParse(args["start_pos"].AsString(), out startpos); |
213 | 238 | ||
239 | Appearance = new AvatarAppearance(AgentID); | ||
240 | if (args["appearance_serial"] != null) | ||
241 | Appearance.Serial = args["appearance_serial"].AsInteger(); | ||
242 | if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array) | ||
243 | { | ||
244 | OSDArray wears = (OSDArray)(args["wearables"]); | ||
245 | for (int i = 0; i < wears.Count / 2; i++) | ||
246 | { | ||
247 | Appearance.Wearables[i].ItemID = wears[i*2].AsUUID(); | ||
248 | Appearance.Wearables[i].AssetID = wears[(i*2)+1].AsUUID(); | ||
249 | } | ||
250 | } | ||
251 | |||
252 | if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array) | ||
253 | { | ||
254 | OSDArray attachs = (OSDArray)(args["attachments"]); | ||
255 | AttachmentData[] attachments = new AttachmentData[attachs.Count]; | ||
256 | int i = 0; | ||
257 | foreach (OSD o in attachs) | ||
258 | { | ||
259 | if (o.Type == OSDType.Map) | ||
260 | { | ||
261 | attachments[i++] = new AttachmentData((OSDMap)o); | ||
262 | } | ||
263 | } | ||
264 | Appearance.SetAttachments(attachments); | ||
265 | } | ||
214 | 266 | ||
215 | } | 267 | } |
216 | } | 268 | } |