aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim.RegionServer/world/Primitive.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim.RegionServer/world/Primitive.cs')
-rw-r--r--OpenSim.RegionServer/world/Primitive.cs103
1 files changed, 90 insertions, 13 deletions
diff --git a/OpenSim.RegionServer/world/Primitive.cs b/OpenSim.RegionServer/world/Primitive.cs
index 2f97053..2c55004 100644
--- a/OpenSim.RegionServer/world/Primitive.cs
+++ b/OpenSim.RegionServer/world/Primitive.cs
@@ -27,6 +27,7 @@ namespace OpenSim.world
27 private Dictionary<uint, SimClient> m_clientThreads; 27 private Dictionary<uint, SimClient> m_clientThreads;
28 private ulong m_regionHandle; 28 private ulong m_regionHandle;
29 private World m_world; 29 private World m_world;
30 private const uint FULL_MASK_PERMISSIONS = 2147483647;
30 31
31 public bool PhysicsEnabled 32 public bool PhysicsEnabled
32 { 33 {
@@ -94,6 +95,40 @@ namespace OpenSim.world
94 return mesh; 95 return mesh;
95 } 96 }
96 97
98 public byte[] GetByteArray()
99 {
100 return this.primData.ToBytes();
101 }
102
103 public void GetProperites(SimClient client)
104 {
105 ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
106 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
107 proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
108 proper.ObjectData[0].ItemID = LLUUID.Zero; // this.uuid;
109 proper.ObjectData[0].CreationDate = (ulong) this.primData.CreationDate;
110 proper.ObjectData[0].CreatorID = this.primData.OwnerID;
111 proper.ObjectData[0].FolderID = LLUUID.Zero;
112 proper.ObjectData[0].FromTaskID = LLUUID.Zero;
113 proper.ObjectData[0].GroupID = LLUUID.Zero;
114 proper.ObjectData[0].InventorySerial = 0;
115 proper.ObjectData[0].LastOwnerID = LLUUID.Zero;
116 proper.ObjectData[0].ObjectID = this.uuid;
117 proper.ObjectData[0].OwnerID = primData.OwnerID;
118 proper.ObjectData[0].TouchName = new byte[0];
119 proper.ObjectData[0].TextureID = new byte[0];
120 proper.ObjectData[0].SitName = new byte[0];
121 proper.ObjectData[0].Name = new byte[0];
122 proper.ObjectData[0].Description = new byte[0];
123 proper.ObjectData[0].OwnerMask = this.primData.OwnerMask;
124 proper.ObjectData[0].NextOwnerMask = this.primData.NextOwnerMask;
125 proper.ObjectData[0].GroupMask = this.primData.GroupMask;
126 proper.ObjectData[0].EveryoneMask = this.primData.EveryoneMask;
127 proper.ObjectData[0].BaseMask = this.primData.BaseMask;
128
129 client.OutPacket(proper);
130 }
131
97 public void UpdatePosition(LLVector3 pos) 132 public void UpdatePosition(LLVector3 pos)
98 { 133 {
99 this.position = pos; 134 this.position = pos;
@@ -125,9 +160,45 @@ namespace OpenSim.world
125 } 160 }
126 if (this.newPrimFlag) 161 if (this.newPrimFlag)
127 { 162 {
163 /* ObjectOwnerPacket objown = new ObjectOwnerPacket();
164 objown.HeaderData.GroupID = LLUUID.Zero;
165 objown.HeaderData.Override = false;
166 objown.HeaderData.OwnerID = LLUUID.Zero;
167 objown.ObjectData = new ObjectOwnerPacket.ObjectDataBlock[1];
168 objown.ObjectData[0] = new ObjectOwnerPacket.ObjectDataBlock();
169 objown.ObjectData[0].ObjectLocalID = this.localid;
170 ObjectGroupPacket objgroup = new ObjectGroupPacket();
171 objgroup.ObjectData = new ObjectGroupPacket.ObjectDataBlock[1];
172 objgroup.ObjectData[0] = new ObjectGroupPacket.ObjectDataBlock();
173 objgroup.ObjectData[0].ObjectLocalID = this.localid;
174 ObjectPermissionsPacket objper = new ObjectPermissionsPacket();
175 objper.HeaderData.Override = false;
176 objper.ObjectData = new ObjectPermissionsPacket.ObjectDataBlock[3];
177 for (int i = 0; i < 3; i++)
178 {
179 objper.ObjectData[i] = new ObjectPermissionsPacket.ObjectDataBlock();
180 objper.ObjectData[i].ObjectLocalID = this.localid;
181 objper.ObjectData[i].Set = 1;
182 objper.ObjectData[i].Field = 0;
183 }
184 objper.ObjectData[0].Mask = 8192;
185 objper.ObjectData[1].Mask = 16384;
186 objper.ObjectData[2].Mask = 32768;*/
187
128 foreach (SimClient client in m_clientThreads.Values) 188 foreach (SimClient client in m_clientThreads.Values)
129 { 189 {
130 client.OutPacket(OurPacket); 190 client.OutPacket(OurPacket);
191 /* objown.AgentData.AgentID = client.AgentID;
192 objown.AgentData.SessionID = client.SessionID;
193 objown.HeaderData.OwnerID = client.AgentID;
194 client.OutPacket(objown);
195 objgroup.AgentData.AgentID = client.AgentID;
196 objgroup.AgentData.GroupID = LLUUID.Zero;
197 objgroup.AgentData.SessionID = client.SessionID;
198 client.OutPacket(objgroup);
199 objper.AgentData.AgentID = client.AgentID;
200 objper.AgentData.SessionID = client.SessionID;
201 client.OutPacket(objper);*/
131 } 202 }
132 this.newPrimFlag = false; 203 this.newPrimFlag = false;
133 } 204 }
@@ -286,18 +357,18 @@ namespace OpenSim.world
286 { 357 {
287 ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); 358 ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
288 objupdate.RegionData.RegionHandle = m_regionHandle; 359 objupdate.RegionData.RegionHandle = m_regionHandle;
289 objupdate.RegionData.TimeDilation = 64096; 360 objupdate.RegionData.TimeDilation = 64096;
290 361
291 objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; 362 objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
292 PrimData PData = new PrimData(); 363 PrimData PData = new PrimData();
293 this.primData = PData; 364 this.primData = PData;
365 this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
366
294 objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock(); 367 objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock();
295 objupdate.ObjectData[0].PSBlock = new byte[0]; 368 objupdate.ObjectData[0].PSBlock = new byte[0];
296 objupdate.ObjectData[0].ExtraParams = new byte[1]; 369 objupdate.ObjectData[0].ExtraParams = new byte[1];
297 objupdate.ObjectData[0].MediaURL = new byte[0]; 370 objupdate.ObjectData[0].MediaURL = new byte[0];
298 objupdate.ObjectData[0].NameValue = new byte[2]; 371 objupdate.ObjectData[0].NameValue = new byte[0];
299 objupdate.ObjectData[0].NameValue[0] = (byte)'t';
300 objupdate.ObjectData[0].NameValue[1] = (byte)'o';
301 objupdate.ObjectData[0].Text = new byte[0]; 372 objupdate.ObjectData[0].Text = new byte[0];
302 objupdate.ObjectData[0].TextColor = new byte[4]; 373 objupdate.ObjectData[0].TextColor = new byte[4];
303 objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 0); 374 objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 0);
@@ -307,7 +378,7 @@ namespace OpenSim.world
307 objupdate.ObjectData[0].TextureAnim = new byte[0]; 378 objupdate.ObjectData[0].TextureAnim = new byte[0];
308 objupdate.ObjectData[0].Sound = LLUUID.Zero; 379 objupdate.ObjectData[0].Sound = LLUUID.Zero;
309 LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); 380 LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
310 objupdate.ObjectData[0].TextureEntry = ntex.ToBytes(); 381 this.primData.Texture = objupdate.ObjectData[0].TextureEntry = ntex.ToBytes();
311 objupdate.ObjectData[0].State = 0; 382 objupdate.ObjectData[0].State = 0;
312 objupdate.ObjectData[0].Data = new byte[0]; 383 objupdate.ObjectData[0].Data = new byte[0];
313 PData.OwnerID = objupdate.ObjectData[0].OwnerID = agentID; 384 PData.OwnerID = objupdate.ObjectData[0].OwnerID = agentID;
@@ -326,14 +397,12 @@ namespace OpenSim.world
326 PData.ProfileCurve = objupdate.ObjectData[0].ProfileCurve = addPacket.ObjectData.ProfileCurve; 397 PData.ProfileCurve = objupdate.ObjectData[0].ProfileCurve = addPacket.ObjectData.ProfileCurve;
327 PData.ParentID = objupdate.ObjectData[0].ParentID = 0; 398 PData.ParentID = objupdate.ObjectData[0].ParentID = 0;
328 PData.ProfileHollow = objupdate.ObjectData[0].ProfileHollow = addPacket.ObjectData.ProfileHollow; 399 PData.ProfileHollow = objupdate.ObjectData[0].ProfileHollow = addPacket.ObjectData.ProfileHollow;
329
330 PData.PathRadiusOffset = objupdate.ObjectData[0].PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset; 400 PData.PathRadiusOffset = objupdate.ObjectData[0].PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
331 PData.PathRevolutions = objupdate.ObjectData[0].PathRevolutions = addPacket.ObjectData.PathRevolutions; 401 PData.PathRevolutions = objupdate.ObjectData[0].PathRevolutions = addPacket.ObjectData.PathRevolutions;
332 PData.PathTaperX = objupdate.ObjectData[0].PathTaperX = addPacket.ObjectData.PathTaperX; 402 PData.PathTaperX = objupdate.ObjectData[0].PathTaperX = addPacket.ObjectData.PathTaperX;
333 PData.PathTaperY = objupdate.ObjectData[0].PathTaperY = addPacket.ObjectData.PathTaperY; 403 PData.PathTaperY = objupdate.ObjectData[0].PathTaperY = addPacket.ObjectData.PathTaperY;
334 PData.PathTwist = objupdate.ObjectData[0].PathTwist = addPacket.ObjectData.PathTwist; 404 PData.PathTwist = objupdate.ObjectData[0].PathTwist = addPacket.ObjectData.PathTwist;
335 PData.PathTwistBegin = objupdate.ObjectData[0].PathTwistBegin = addPacket.ObjectData.PathTwistBegin; 405 PData.PathTwistBegin = objupdate.ObjectData[0].PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
336
337 objupdate.ObjectData[0].ID = (uint)(localID); 406 objupdate.ObjectData[0].ID = (uint)(localID);
338 objupdate.ObjectData[0].FullID = new LLUUID("edba7151-5857-acc5-b30b-f01efef" + (localID - 702000).ToString("00000")); 407 objupdate.ObjectData[0].FullID = new LLUUID("edba7151-5857-acc5-b30b-f01efef" + (localID - 702000).ToString("00000"));
339 objupdate.ObjectData[0].ObjectData = new byte[60]; 408 objupdate.ObjectData[0].ObjectData = new byte[60];
@@ -343,16 +412,20 @@ namespace OpenSim.world
343 //update position 412 //update position
344 byte[] pb = pos1.GetBytes(); 413 byte[] pb = pos1.GetBytes();
345 Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length); 414 Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length);
346
347 this.newPrimFlag = true; 415 this.newPrimFlag = true;
348 this.uuid = objupdate.ObjectData[0].FullID; 416 this.primData.FullID = this.uuid = objupdate.ObjectData[0].FullID;
349 this.localid = objupdate.ObjectData[0].ID; 417 this.localid = objupdate.ObjectData[0].ID;
350 this.position = pos1; 418 this.primData.Position = this.position = pos1;
351 this.OurPacket = objupdate; 419 this.OurPacket = objupdate;
352 } 420 }
353 421
354 public void CreateFromStorage(PrimData store) 422 public void CreateFromStorage(PrimData store)
355 { 423 {
424 this.CreateFromStorage(store, store.Position, store.LocalID, false);
425 }
426
427 public void CreateFromStorage(PrimData store, LLVector3 posi, uint localID, bool newprim)
428 {
356 //need to clean this up as it shares a lot of code with CreateFromPacket() 429 //need to clean this up as it shares a lot of code with CreateFromPacket()
357 ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); 430 ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
358 objupdate.RegionData.RegionHandle = m_regionHandle; 431 objupdate.RegionData.RegionHandle = m_regionHandle;
@@ -410,13 +483,13 @@ namespace OpenSim.world
410 objupdate.ObjectData[0].PathTwist = this.primData.PathTwist; 483 objupdate.ObjectData[0].PathTwist = this.primData.PathTwist;
411 objupdate.ObjectData[0].PathTwistBegin = this.primData.PathTwistBegin; 484 objupdate.ObjectData[0].PathTwistBegin = this.primData.PathTwistBegin;
412 485
413 objupdate.ObjectData[0].ID = (uint)store.LocalID; 486 objupdate.ObjectData[0].ID = localID; // (uint)store.LocalID;
414 objupdate.ObjectData[0].FullID = store.FullID; 487 objupdate.ObjectData[0].FullID = store.FullID;
415 488
416 objupdate.ObjectData[0].ObjectData = new byte[60]; 489 objupdate.ObjectData[0].ObjectData = new byte[60];
417 objupdate.ObjectData[0].ObjectData[46] = 128; 490 objupdate.ObjectData[0].ObjectData[46] = 128;
418 objupdate.ObjectData[0].ObjectData[47] = 63; 491 objupdate.ObjectData[0].ObjectData[47] = 63;
419 LLVector3 pos1 = store.Position; 492 LLVector3 pos1 = posi; // store.Position;
420 //update position 493 //update position
421 byte[] pb = pos1.GetBytes(); 494 byte[] pb = pos1.GetBytes();
422 Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length); 495 Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length);
@@ -425,8 +498,12 @@ namespace OpenSim.world
425 this.localid = objupdate.ObjectData[0].ID; 498 this.localid = objupdate.ObjectData[0].ID;
426 this.position = pos1; 499 this.position = pos1;
427 this.OurPacket = objupdate; 500 this.OurPacket = objupdate;
428 501 if (newprim)
502 {
503 this.newPrimFlag = true;
504 }
429 } 505 }
506
430 public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedBlock() 507 public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedBlock()
431 { 508 {
432 uint ID = this.localid; 509 uint ID = this.localid;