aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs244
1 files changed, 122 insertions, 122 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index b95b5be..b97cceb 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -134,7 +134,7 @@ namespace OpenSim.Region.Framework.Scenes
134 ); 134 );
135 private const scriptEvents PhyscicsVolumeDtcSubsEvents = ( 135 private const scriptEvents PhyscicsVolumeDtcSubsEvents = (
136 scriptEvents.collision_start | scriptEvents.collision_end 136 scriptEvents.collision_start | scriptEvents.collision_end
137 ); 137 );
138 138
139 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 139 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
140 140
@@ -148,8 +148,8 @@ namespace OpenSim.Region.Framework.Scenes
148 /// <summary> 148 /// <summary>
149 /// Dynamic objects that can be created and deleted as required. 149 /// Dynamic objects that can be created and deleted as required.
150 /// </summary> 150 /// </summary>
151 public DOMap DynObjs 151 public DOMap DynObjs
152 { 152 {
153 get 153 get
154 { 154 {
155 if (m_dynObjs == null) 155 if (m_dynObjs == null)
@@ -163,16 +163,16 @@ namespace OpenSim.Region.Framework.Scenes
163 m_dynObjs = value; 163 m_dynObjs = value;
164 } 164 }
165 } 165 }
166 166
167 /// <value> 167 /// <value>
168 /// Is this a root part? 168 /// Is this a root part?
169 /// </value> 169 /// </value>
170 /// <remarks> 170 /// <remarks>
171 /// This will return true even if the whole object is attached to an avatar. 171 /// This will return true even if the whole object is attached to an avatar.
172 /// </remarks> 172 /// </remarks>
173 public bool IsRoot 173 public bool IsRoot
174 { 174 {
175 get { return Object.ReferenceEquals(ParentGroup.RootPart, this); } 175 get { return Object.ReferenceEquals(ParentGroup.RootPart, this); }
176 } 176 }
177 177
178 /// <summary> 178 /// <summary>
@@ -192,11 +192,11 @@ namespace OpenSim.Region.Framework.Scenes
192 #region Fields 192 #region Fields
193 193
194 public bool AllowedDrop; 194 public bool AllowedDrop;
195 195
196 public bool DIE_AT_EDGE; 196 public bool DIE_AT_EDGE;
197 197
198 public bool RETURN_AT_EDGE; 198 public bool RETURN_AT_EDGE;
199 199
200 public bool BlockGrab { get; set; } 200 public bool BlockGrab { get; set; }
201 201
202 public bool StatusSandbox; 202 public bool StatusSandbox;
@@ -221,7 +221,7 @@ namespace OpenSim.Region.Framework.Scenes
221 // Note: This isn't persisted in the database right now, as the fields for that aren't just there yet. 221 // Note: This isn't persisted in the database right now, as the fields for that aren't just there yet.
222 // Not a big problem as long as the script that sets it remains in the prim on startup. 222 // Not a big problem as long as the script that sets it remains in the prim on startup.
223 // for SL compatibility it should be persisted though (set sound / displaytext / particlesystem, kill script) 223 // for SL compatibility it should be persisted though (set sound / displaytext / particlesystem, kill script)
224 224
225 public UUID Sound; 225 public UUID Sound;
226 226
227 public byte SoundFlags; 227 public byte SoundFlags;
@@ -254,7 +254,7 @@ namespace OpenSim.Region.Framework.Scenes
254 254
255 [XmlIgnore] 255 [XmlIgnore]
256 public int STATUS_ROTATE_X; // this should not be used 256 public int STATUS_ROTATE_X; // this should not be used
257 257
258 [XmlIgnore] 258 [XmlIgnore]
259 public int STATUS_ROTATE_Y; // this should not be used 259 public int STATUS_ROTATE_Y; // this should not be used
260 260
@@ -262,13 +262,13 @@ namespace OpenSim.Region.Framework.Scenes
262 public int STATUS_ROTATE_Z; // this should not be used 262 public int STATUS_ROTATE_Z; // this should not be used
263 263
264 private Dictionary<int, string> m_CollisionFilter = new Dictionary<int, string>(); 264 private Dictionary<int, string> m_CollisionFilter = new Dictionary<int, string>();
265 265
266 /// <value> 266 /// <value>
267 /// The UUID of the user inventory item from which this object was rezzed if this is a root part. 267 /// The UUID of the user inventory item from which this object was rezzed if this is a root part.
268 /// If UUID.Zero then either this is not a root part or there is no connection with a user inventory item. 268 /// If UUID.Zero then either this is not a root part or there is no connection with a user inventory item.
269 /// </value> 269 /// </value>
270 private UUID m_fromUserInventoryItemID; 270 private UUID m_fromUserInventoryItemID;
271 271
272 public UUID FromUserInventoryItemID 272 public UUID FromUserInventoryItemID
273 { 273 {
274 get { return m_fromUserInventoryItemID; } 274 get { return m_fromUserInventoryItemID; }
@@ -289,7 +289,7 @@ namespace OpenSim.Region.Framework.Scenes
289 289
290 public bool VolumeDetectActive 290 public bool VolumeDetectActive
291 { 291 {
292 get 292 get
293 { 293 {
294 return (Flags & (PrimFlags)primFlagVolumeDetect) != 0; 294 return (Flags & (PrimFlags)primFlagVolumeDetect) != 0;
295 } 295 }
@@ -313,7 +313,7 @@ namespace OpenSim.Region.Framework.Scenes
313 313
314 /// <summary> 314 /// <summary>
315 /// This part's inventory 315 /// This part's inventory
316 /// </summary> 316 /// </summary>
317 public IEntityInventory Inventory 317 public IEntityInventory Inventory
318 { 318 {
319 get { return m_inventory; } 319 get { return m_inventory; }
@@ -321,20 +321,20 @@ namespace OpenSim.Region.Framework.Scenes
321 protected SceneObjectPartInventory m_inventory; 321 protected SceneObjectPartInventory m_inventory;
322 322
323 public bool Undoing; 323 public bool Undoing;
324 324
325 public bool IgnoreUndoUpdate = false; 325 public bool IgnoreUndoUpdate = false;
326 326
327 public PrimFlags LocalFlags; 327 public PrimFlags LocalFlags;
328 328
329 private float m_damage = -1.0f; 329 private float m_damage = -1.0f;
330 private byte[] m_TextureAnimation; 330 private byte[] m_TextureAnimation;
331 private byte m_clickAction; 331 private byte m_clickAction;
332 private Color m_color = Color.Black; 332 private Color m_color = Color.Black;
333 private readonly List<uint> m_lastColliders = new List<uint>(); 333 private readonly List<uint> m_lastColliders = new List<uint>();
334 private int m_linkNum; 334 private int m_linkNum;
335 335
336 private int m_scriptAccessPin; 336 private int m_scriptAccessPin;
337 337
338 private readonly Dictionary<UUID, scriptEvents> m_scriptEvents = new Dictionary<UUID, scriptEvents>(); 338 private readonly Dictionary<UUID, scriptEvents> m_scriptEvents = new Dictionary<UUID, scriptEvents>();
339 private string m_sitName = String.Empty; 339 private string m_sitName = String.Empty;
340 private Quaternion m_sitTargetOrientation = Quaternion.Identity; 340 private Quaternion m_sitTargetOrientation = Quaternion.Identity;
@@ -403,7 +403,7 @@ namespace OpenSim.Region.Framework.Scenes
403 private UUID m_collisionSound; 403 private UUID m_collisionSound;
404 private float m_collisionSoundVolume; 404 private float m_collisionSoundVolume;
405 405
406 private int LastColSoundSentTime; 406 private int LastColSoundSentTime;
407 407
408 private SOPVehicle m_vehicleParams = null; 408 private SOPVehicle m_vehicleParams = null;
409 409
@@ -454,7 +454,7 @@ namespace OpenSim.Region.Framework.Scenes
454 /// <param name="rotationOffset"></param> 454 /// <param name="rotationOffset"></param>
455 /// <param name="offsetPosition"></param> 455 /// <param name="offsetPosition"></param>
456 public SceneObjectPart( 456 public SceneObjectPart(
457 UUID ownerID, PrimitiveBaseShape shape, Vector3 groupPosition, 457 UUID ownerID, PrimitiveBaseShape shape, Vector3 groupPosition,
458 Quaternion rotationOffset, Vector3 offsetPosition) : this() 458 Quaternion rotationOffset, Vector3 offsetPosition) : this()
459 { 459 {
460 m_name = "Object"; 460 m_name = "Object";
@@ -505,7 +505,7 @@ namespace OpenSim.Region.Framework.Scenes
505 private bool m_createSelected = false; 505 private bool m_createSelected = false;
506 506
507 private UUID _creatorID; 507 private UUID _creatorID;
508 public UUID CreatorID 508 public UUID CreatorID
509 { 509 {
510 get { return _creatorID; } 510 get { return _creatorID; }
511 set { _creatorID = value; } 511 set { _creatorID = value; }
@@ -515,7 +515,7 @@ namespace OpenSim.Region.Framework.Scenes
515 /// <summary> 515 /// <summary>
516 /// Data about the creator in the form home_url;name 516 /// Data about the creator in the form home_url;name
517 /// </summary> 517 /// </summary>
518 public string CreatorData 518 public string CreatorData
519 { 519 {
520 get { return m_creatorData; } 520 get { return m_creatorData; }
521 set { m_creatorData = value; } 521 set { m_creatorData = value; }
@@ -565,7 +565,7 @@ namespace OpenSim.Region.Framework.Scenes
565 } 565 }
566 566
567 /// <summary> 567 /// <summary>
568 /// A relic from when we we thought that prims contained folder objects. In 568 /// A relic from when we we thought that prims contained folder objects. In
569 /// reality, prim == folder 569 /// reality, prim == folder
570 /// Exposing this is not particularly good, but it's one of the least evils at the moment to see 570 /// Exposing this is not particularly good, but it's one of the least evils at the moment to see
571 /// folder id from prim inventory item data, since it's not (yet) actually stored with the prim. 571 /// folder id from prim inventory item data, since it's not (yet) actually stored with the prim.
@@ -611,10 +611,10 @@ namespace OpenSim.Region.Framework.Scenes
611 public UUID UUID 611 public UUID UUID
612 { 612 {
613 get { return m_uuid; } 613 get { return m_uuid; }
614 set 614 set
615 { 615 {
616 m_uuid = value; 616 m_uuid = value;
617 617
618 // This is necessary so that TaskInventoryItem parent ids correctly reference the new uuid of this part 618 // This is necessary so that TaskInventoryItem parent ids correctly reference the new uuid of this part
619 if (Inventory != null) 619 if (Inventory != null)
620 Inventory.ResetObjectID(); 620 Inventory.ResetObjectID();
@@ -634,8 +634,8 @@ namespace OpenSim.Region.Framework.Scenes
634 public virtual string Name 634 public virtual string Name
635 { 635 {
636 get { return m_name; } 636 get { return m_name; }
637 set 637 set
638 { 638 {
639 m_name = value; 639 m_name = value;
640 640
641 PhysicsActor pa = PhysActor; 641 PhysicsActor pa = PhysActor;
@@ -678,11 +678,11 @@ namespace OpenSim.Region.Framework.Scenes
678 m_isSelected = value; 678 m_isSelected = value;
679 if (ParentGroup != null) 679 if (ParentGroup != null)
680 ParentGroup.PartSelectChanged(value); 680 ParentGroup.PartSelectChanged(value);
681 681
682 } 682 }
683 } 683 }
684 684
685 685
686 public Dictionary<int, string> CollisionFilter 686 public Dictionary<int, string> CollisionFilter
687 { 687 {
688 get { return m_CollisionFilter; } 688 get { return m_CollisionFilter; }
@@ -704,14 +704,14 @@ namespace OpenSim.Region.Framework.Scenes
704 set { m_APIDTarget = value; } 704 set { m_APIDTarget = value; }
705 } 705 }
706 706
707 707
708 protected float APIDDamp 708 protected float APIDDamp
709 { 709 {
710 get { return m_APIDDamp; } 710 get { return m_APIDDamp; }
711 set { m_APIDDamp = value; } 711 set { m_APIDDamp = value; }
712 } 712 }
713 713
714 714
715 protected float APIDStrength 715 protected float APIDStrength
716 { 716 {
717 get { return m_APIDStrength; } 717 get { return m_APIDStrength; }
@@ -769,21 +769,21 @@ namespace OpenSim.Region.Framework.Scenes
769 set { m_particleSystem = value; } 769 set { m_particleSystem = value; }
770 } 770 }
771 771
772 772
773 public DateTime Expires 773 public DateTime Expires
774 { 774 {
775 get { return m_expires; } 775 get { return m_expires; }
776 set { m_expires = value; } 776 set { m_expires = value; }
777 } 777 }
778 778
779 779
780 public DateTime Rezzed 780 public DateTime Rezzed
781 { 781 {
782 get { return m_rezzed; } 782 get { return m_rezzed; }
783 set { m_rezzed = value; } 783 set { m_rezzed = value; }
784 } 784 }
785 785
786 786
787 public float Damage 787 public float Damage
788 { 788 {
789 get { return m_damage; } 789 get { return m_damage; }
@@ -798,7 +798,7 @@ namespace OpenSim.Region.Framework.Scenes
798 /// <summary> 798 /// <summary>
799 /// The position of the entire group that this prim belongs to. 799 /// The position of the entire group that this prim belongs to.
800 /// </summary> 800 /// </summary>
801 /// 801 ///
802 802
803 public Vector3 GroupPosition 803 public Vector3 GroupPosition
804 { 804 {
@@ -837,7 +837,7 @@ namespace OpenSim.Region.Framework.Scenes
837 // Root prim actually goes at Position 837 // Root prim actually goes at Position
838 if (ParentID == 0) 838 if (ParentID == 0)
839 { 839 {
840 actor.Position = value; 840 actor.Position = value;
841 } 841 }
842 else 842 else
843 { 843 {
@@ -955,7 +955,7 @@ namespace OpenSim.Region.Framework.Scenes
955 955
956 return m_rotationOffset; 956 return m_rotationOffset;
957 } 957 }
958 958
959 set 959 set
960 { 960 {
961// StoreUndoState(); 961// StoreUndoState();
@@ -1066,24 +1066,24 @@ namespace OpenSim.Region.Framework.Scenes
1066 if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this && VehicleType == (int)Vehicle.TYPE_NONE) 1066 if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this && VehicleType == (int)Vehicle.TYPE_NONE)
1067 { 1067 {
1068 actor.RotationalVelocity = m_angularVelocity; 1068 actor.RotationalVelocity = m_angularVelocity;
1069 } 1069 }
1070 } 1070 }
1071 } 1071 }
1072 1072
1073 /// <summary></summary> 1073 /// <summary></summary>
1074 public Vector3 Acceleration 1074 public Vector3 Acceleration
1075 { 1075 {
1076 get 1076 get
1077 { 1077 {
1078 PhysicsActor actor = PhysActor; 1078 PhysicsActor actor = PhysActor;
1079 if (actor != null) 1079 if (actor != null)
1080 { 1080 {
1081 m_acceleration = actor.Acceleration; 1081 m_acceleration = actor.Acceleration;
1082 } 1082 }
1083 return m_acceleration; 1083 return m_acceleration;
1084 } 1084 }
1085 1085
1086 set 1086 set
1087 { 1087 {
1088 if (Util.IsNanOrInfinity(value)) 1088 if (Util.IsNanOrInfinity(value))
1089 m_acceleration = Vector3.Zero; 1089 m_acceleration = Vector3.Zero;
@@ -1217,23 +1217,23 @@ namespace OpenSim.Region.Framework.Scenes
1217 else 1217 else
1218 b = sz; 1218 b = sz;
1219 } 1219 }
1220 1220
1221 return a * b; 1221 return a * b;
1222 } 1222 }
1223 1223
1224 public UpdateRequired UpdateFlag { get; set; } 1224 public UpdateRequired UpdateFlag { get; set; }
1225 1225
1226 /// <summary> 1226 /// <summary>
1227 /// Used for media on a prim. 1227 /// Used for media on a prim.
1228 /// </summary> 1228 /// </summary>
1229 /// Do not change this value directly - always do it through an IMoapModule. 1229 /// Do not change this value directly - always do it through an IMoapModule.
1230 public string MediaUrl 1230 public string MediaUrl
1231 { 1231 {
1232 get 1232 get
1233 { 1233 {
1234 return m_mediaUrl; 1234 return m_mediaUrl;
1235 } 1235 }
1236 1236
1237 set 1237 set
1238 { 1238 {
1239 m_mediaUrl = value; 1239 m_mediaUrl = value;
@@ -1246,10 +1246,10 @@ namespace OpenSim.Region.Framework.Scenes
1246 public bool CreateSelected 1246 public bool CreateSelected
1247 { 1247 {
1248 get { return m_createSelected; } 1248 get { return m_createSelected; }
1249 set 1249 set
1250 { 1250 {
1251// m_log.DebugFormat("[SOP]: Setting CreateSelected to {0} for {1} {2}", value, Name, UUID); 1251// m_log.DebugFormat("[SOP]: Setting CreateSelected to {0} for {1} {2}", value, Name, UUID);
1252 m_createSelected = value; 1252 m_createSelected = value;
1253 } 1253 }
1254 } 1254 }
1255 1255
@@ -1423,7 +1423,7 @@ namespace OpenSim.Region.Framework.Scenes
1423 } 1423 }
1424 1424
1425 /// <summary> 1425 /// <summary>
1426 /// Property flags. See OpenMetaverse.PrimFlags 1426 /// Property flags. See OpenMetaverse.PrimFlags
1427 /// </summary> 1427 /// </summary>
1428 /// <remarks> 1428 /// <remarks>
1429 /// Example properties are PrimFlags.Phantom and PrimFlags.DieAtEdge 1429 /// Example properties are PrimFlags.Phantom and PrimFlags.DieAtEdge
@@ -1431,18 +1431,18 @@ namespace OpenSim.Region.Framework.Scenes
1431 public PrimFlags Flags 1431 public PrimFlags Flags
1432 { 1432 {
1433 get { return _flags; } 1433 get { return _flags; }
1434 set 1434 set
1435 { 1435 {
1436// m_log.DebugFormat("[SOP]: Setting flags for {0} {1} to {2}", UUID, Name, value); 1436// m_log.DebugFormat("[SOP]: Setting flags for {0} {1} to {2}", UUID, Name, value);
1437 _flags = value; 1437 _flags = value;
1438 } 1438 }
1439 } 1439 }
1440 1440
1441 [XmlIgnore] 1441 [XmlIgnore]
1442 public bool IsOccupied // KF If an av is sittingon this prim 1442 public bool IsOccupied // KF If an av is sittingon this prim
1443 { 1443 {
1444 get { return m_occupied; } 1444 get { return m_occupied; }
1445 set { m_occupied = value; } 1445 set { m_occupied = value; }
1446 } 1446 }
1447 1447
1448 /// <summary> 1448 /// <summary>
@@ -1474,7 +1474,7 @@ namespace OpenSim.Region.Framework.Scenes
1474 } 1474 }
1475 1475
1476 private UUID _parentUUID = UUID.Zero; 1476 private UUID _parentUUID = UUID.Zero;
1477 1477
1478 public UUID ParentUUID 1478 public UUID ParentUUID
1479 { 1479 {
1480 get 1480 get
@@ -1487,7 +1487,7 @@ namespace OpenSim.Region.Framework.Scenes
1487 1487
1488 set { _parentUUID = value; } 1488 set { _parentUUID = value; }
1489 } 1489 }
1490 1490
1491 public string SitAnimation 1491 public string SitAnimation
1492 { 1492 {
1493 get { return m_sitAnimation; } 1493 get { return m_sitAnimation; }
@@ -1519,7 +1519,7 @@ namespace OpenSim.Region.Framework.Scenes
1519 { 1519 {
1520 get { return m_collisionSound; } 1520 get { return m_collisionSound; }
1521 set 1521 set
1522 { 1522 {
1523 m_collisionSound = value; 1523 m_collisionSound = value;
1524 1524
1525 if (value == invalidCollisionSoundUUID) 1525 if (value == invalidCollisionSoundUUID)
@@ -1589,7 +1589,7 @@ namespace OpenSim.Region.Framework.Scenes
1589 { 1589 {
1590 if (ParentGroup.RootPart == this) 1590 if (ParentGroup.RootPart == this)
1591 return m_torque; 1591 return m_torque;
1592 1592
1593 return ParentGroup.RootPart.Torque; 1593 return ParentGroup.RootPart.Torque;
1594 } 1594 }
1595 1595
@@ -1733,7 +1733,7 @@ namespace OpenSim.Region.Framework.Scenes
1733 set 1733 set
1734 { 1734 {
1735 byte oldv = m_physicsShapeType; 1735 byte oldv = m_physicsShapeType;
1736 1736
1737 if (value >= 0 && value <= (byte)PhysShapeType.convex) 1737 if (value >= 0 && value <= (byte)PhysShapeType.convex)
1738 { 1738 {
1739 if (value == (byte)PhysShapeType.none && ParentGroup != null && ParentGroup.RootPart == this) 1739 if (value == (byte)PhysShapeType.none && ParentGroup != null && ParentGroup.RootPart == this)
@@ -1966,7 +1966,7 @@ namespace OpenSim.Region.Framework.Scenes
1966 Utils.FloatToBytes(pTexAnim.Start).CopyTo(data, pos); 1966 Utils.FloatToBytes(pTexAnim.Start).CopyTo(data, pos);
1967 Utils.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4); 1967 Utils.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4);
1968 Utils.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8); 1968 Utils.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8);
1969 1969
1970 } 1970 }
1971 m_TextureAnimation = data; 1971 m_TextureAnimation = data;
1972 } 1972 }
@@ -2063,7 +2063,7 @@ namespace OpenSim.Region.Framework.Scenes
2063 2063
2064 root.AngularVelocity = pAngVel; 2064 root.AngularVelocity = pAngVel;
2065 } 2065 }
2066 2066
2067 2067
2068 /// <summary> 2068 /// <summary>
2069 /// hook to the physics scene to apply angular impulse 2069 /// hook to the physics scene to apply angular impulse
@@ -2095,7 +2095,7 @@ namespace OpenSim.Region.Framework.Scenes
2095 /// </summary> 2095 /// </summary>
2096 /// <param name="impulsei">Vector force</param> 2096 /// <param name="impulsei">Vector force</param>
2097 /// <param name="localGlobalTF">true for the local frame, false for the global frame</param> 2097 /// <param name="localGlobalTF">true for the local frame, false for the global frame</param>
2098 2098
2099 // this is actualy Set Torque.. keeping naming so not to edit lslapi also 2099 // this is actualy Set Torque.. keeping naming so not to edit lslapi also
2100 public void SetAngularImpulse(Vector3 torquei, bool localGlobalTF) 2100 public void SetAngularImpulse(Vector3 torquei, bool localGlobalTF)
2101 { 2101 {
@@ -2116,7 +2116,7 @@ namespace OpenSim.Region.Framework.Scenes
2116 /// <param name="VolumeDetectActive"></param> 2116 /// <param name="VolumeDetectActive"></param>
2117 /// <param name="building"></param> 2117 /// <param name="building"></param>
2118 2118
2119 public void ApplyPhysics(uint _ObjectFlags, bool _VolumeDetectActive, bool building) 2119 public void ApplyPhysics(uint _ObjectFlags, bool _VolumeDetectActive, bool building)
2120 { 2120 {
2121 VolumeDetectActive = _VolumeDetectActive; 2121 VolumeDetectActive = _VolumeDetectActive;
2122 2122
@@ -2177,7 +2177,7 @@ namespace OpenSim.Region.Framework.Scenes
2177 /// <returns></returns> 2177 /// <returns></returns>
2178 public SceneObjectPart Copy(uint plocalID, UUID AgentID, UUID GroupID, int linkNum, bool userExposed) 2178 public SceneObjectPart Copy(uint plocalID, UUID AgentID, UUID GroupID, int linkNum, bool userExposed)
2179 { 2179 {
2180 // FIXME: This is dangerous since it's easy to forget to reset some references when necessary and end up 2180 // FIXME: This is dangerous since it's easy to forget to reset some references when necessary and end up
2181 // with bugs that only occur in some circumstances (e.g. crossing between regions on the same simulator 2181 // with bugs that only occur in some circumstances (e.g. crossing between regions on the same simulator
2182 // but not between regions on different simulators). Really, all copying should be done explicitly. 2182 // but not between regions on different simulators). Really, all copying should be done explicitly.
2183 SceneObjectPart dupe = (SceneObjectPart)MemberwiseClone(); 2183 SceneObjectPart dupe = (SceneObjectPart)MemberwiseClone();
@@ -2242,20 +2242,20 @@ namespace OpenSim.Region.Framework.Scenes
2242 dupe.PayPrice = (int[])PayPrice.Clone(); 2242 dupe.PayPrice = (int[])PayPrice.Clone();
2243 2243
2244 dupe.DynAttrs.CopyFrom(DynAttrs); 2244 dupe.DynAttrs.CopyFrom(DynAttrs);
2245 2245
2246 if (userExposed) 2246 if (userExposed)
2247 { 2247 {
2248 bool UsePhysics = ((dupe.Flags & PrimFlags.Physics) != 0); 2248 bool UsePhysics = ((dupe.Flags & PrimFlags.Physics) != 0);
2249 dupe.DoPhysicsPropertyUpdate(UsePhysics, true); 2249 dupe.DoPhysicsPropertyUpdate(UsePhysics, true);
2250 } 2250 }
2251 2251
2252 if (dupe.PhysActor != null) 2252 if (dupe.PhysActor != null)
2253 dupe.PhysActor.LocalID = plocalID; 2253 dupe.PhysActor.LocalID = plocalID;
2254 2254
2255 ParentGroup.Scene.EventManager.TriggerOnSceneObjectPartCopy(dupe, this, userExposed); 2255 ParentGroup.Scene.EventManager.TriggerOnSceneObjectPartCopy(dupe, this, userExposed);
2256 2256
2257// m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID); 2257// m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID);
2258 2258
2259 return dupe; 2259 return dupe;
2260 } 2260 }
2261 2261
@@ -2428,7 +2428,7 @@ namespace OpenSim.Region.Framework.Scenes
2428 pa.link(parentPa); 2428 pa.link(parentPa);
2429 } 2429 }
2430 } 2430 }
2431 } 2431 }
2432 } 2432 }
2433 2433
2434 bool phan = ((Flags & PrimFlags.Phantom) != 0); 2434 bool phan = ((Flags & PrimFlags.Phantom) != 0);
@@ -2528,7 +2528,7 @@ namespace OpenSim.Region.Framework.Scenes
2528 2528
2529 public uint GetEffectiveObjectFlags() 2529 public uint GetEffectiveObjectFlags()
2530 { 2530 {
2531 // Commenting this section of code out since it doesn't actually do anything, as enums are handled by 2531 // Commenting this section of code out since it doesn't actually do anything, as enums are handled by
2532 // value rather than reference 2532 // value rather than reference
2533// PrimFlags f = _flags; 2533// PrimFlags f = _flags;
2534// if (m_parentGroup == null || m_parentGroup.RootPart == this) 2534// if (m_parentGroup == null || m_parentGroup.RootPart == this)
@@ -2820,7 +2820,7 @@ namespace OpenSim.Region.Framework.Scenes
2820 2820
2821 ColliderArgs LandCollidingMessage = new ColliderArgs(); 2821 ColliderArgs LandCollidingMessage = new ColliderArgs();
2822 List<DetectedObject> colliding = new List<DetectedObject>(); 2822 List<DetectedObject> colliding = new List<DetectedObject>();
2823 2823
2824 colliding.Add(CreateDetObjectForGround()); 2824 colliding.Add(CreateDetObjectForGround());
2825 LandCollidingMessage.Colliders = colliding; 2825 LandCollidingMessage.Colliders = colliding;
2826 2826
@@ -2969,9 +2969,9 @@ namespace OpenSim.Region.Framework.Scenes
2969 // Note: This is only being called on the root prim at this time. 2969 // Note: This is only being called on the root prim at this time.
2970 2970
2971 m_log.ErrorFormat( 2971 m_log.ErrorFormat(
2972 "[SCENE OBJECT PART]: Physical object {0}, localID {1} went out of bounds at {2} in {3}. Stopping at {4} and making non-physical.", 2972 "[SCENE OBJECT PART]: Physical object {0}, localID {1} went out of bounds at {2} in {3}. Stopping at {4} and making non-physical.",
2973 Name, LocalId, pos, ParentGroup.Scene.Name, AbsolutePosition); 2973 Name, LocalId, pos, ParentGroup.Scene.Name, AbsolutePosition);
2974 2974
2975 RemFlag(PrimFlags.Physics); 2975 RemFlag(PrimFlags.Physics);
2976 DoPhysicsPropertyUpdate(false, true); 2976 DoPhysicsPropertyUpdate(false, true);
2977 } 2977 }
@@ -3026,7 +3026,7 @@ namespace OpenSim.Region.Framework.Scenes
3026 //m_log.Debug("prev: " + prevflag.ToString() + " curr: " + Flags.ToString()); 3026 //m_log.Debug("prev: " + prevflag.ToString() + " curr: " + Flags.ToString());
3027 //ScheduleFullUpdate(); 3027 //ScheduleFullUpdate();
3028 } 3028 }
3029 3029
3030 public void RemoveScriptEvents(UUID scriptid) 3030 public void RemoveScriptEvents(UUID scriptid)
3031 { 3031 {
3032 lock (m_scriptEvents) 3032 lock (m_scriptEvents)
@@ -3089,7 +3089,7 @@ namespace OpenSim.Region.Framework.Scenes
3089 ParentGroup.HasGroupChanged = true; 3089 ParentGroup.HasGroupChanged = true;
3090 ScheduleFullUpdate(); 3090 ScheduleFullUpdate();
3091 } 3091 }
3092 3092
3093 public void RotLookAt(Quaternion target, float strength, float damping) 3093 public void RotLookAt(Quaternion target, float strength, float damping)
3094 { 3094 {
3095 if(ParentGroup.IsDeleted) 3095 if(ParentGroup.IsDeleted)
@@ -3115,7 +3115,7 @@ namespace OpenSim.Region.Framework.Scenes
3115 m_log.WarnFormat("[SceneObjectPart] Invalid rotation strength {0}",APIDStrength); 3115 m_log.WarnFormat("[SceneObjectPart] Invalid rotation strength {0}",APIDStrength);
3116 return; 3116 return;
3117 } 3117 }
3118 3118
3119 APIDActive = true; 3119 APIDActive = true;
3120 3120
3121 // Necessary to get the lookat deltas applied 3121 // Necessary to get the lookat deltas applied
@@ -3357,7 +3357,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3357 // sl Does send them 3357 // sl Does send them
3358 // if (ParentGroup.IsSelected && ParentGroup.IsAttachment) 3358 // if (ParentGroup.IsSelected && ParentGroup.IsAttachment)
3359 // return; 3359 // return;
3360 3360
3361 if (ParentGroup.IsDeleted) 3361 if (ParentGroup.IsDeleted)
3362 return; 3362 return;
3363 3363
@@ -3487,7 +3487,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3487 public void SetBuoyancy(float fvalue) 3487 public void SetBuoyancy(float fvalue)
3488 { 3488 {
3489 Buoyancy = fvalue; 3489 Buoyancy = fvalue;
3490/* 3490/*
3491 if (PhysActor != null) 3491 if (PhysActor != null)
3492 { 3492 {
3493 PhysActor.Buoyancy = fvalue; 3493 PhysActor.Buoyancy = fvalue;
@@ -3547,7 +3547,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3547 public void SetVehicleType(int type) 3547 public void SetVehicleType(int type)
3548 { 3548 {
3549 m_vehicleParams = null; 3549 m_vehicleParams = null;
3550 3550
3551 if (type == (int)Vehicle.TYPE_NONE) 3551 if (type == (int)Vehicle.TYPE_NONE)
3552 { 3552 {
3553 if (_parentID ==0 && PhysActor != null) 3553 if (_parentID ==0 && PhysActor != null)
@@ -3754,7 +3754,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3754 { 3754 {
3755 if (Shape.SculptEntry) 3755 if (Shape.SculptEntry)
3756 return PrimType.SCULPT; 3756 return PrimType.SCULPT;
3757 3757
3758 if ((Shape.ProfileCurve & 0x07) == (byte)ProfileShape.Square) 3758 if ((Shape.ProfileCurve & 0x07) == (byte)ProfileShape.Square)
3759 { 3759 {
3760 if (Shape.PathCurve == (byte)Extrusion.Straight) 3760 if (Shape.PathCurve == (byte)Extrusion.Straight)
@@ -3782,12 +3782,12 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3782 else if (Shape.PathCurve == (byte)Extrusion.Curve1) 3782 else if (Shape.PathCurve == (byte)Extrusion.Curve1)
3783 return PrimType.RING; 3783 return PrimType.RING;
3784 } 3784 }
3785 3785
3786 return PrimType.BOX; 3786 return PrimType.BOX;
3787 } 3787 }
3788 3788
3789 /// <summary> 3789 /// <summary>
3790 /// Tell us if this object has cut, hollow, dimple, and other factors affecting the number of faces 3790 /// Tell us if this object has cut, hollow, dimple, and other factors affecting the number of faces
3791 /// </summary> 3791 /// </summary>
3792 /// <param name="primType"></param> 3792 /// <param name="primType"></param>
3793 /// <param name="shape"></param> 3793 /// <param name="shape"></param>
@@ -3812,7 +3812,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3812 hasDimple = (shape.ProfileBegin > 0) || (shape.ProfileEnd > 0); // taken from llSetPrimitiveParms 3812 hasDimple = (shape.ProfileBegin > 0) || (shape.ProfileEnd > 0); // taken from llSetPrimitiveParms
3813 hasProfileCut = hasDimple; // is it the same thing? 3813 hasProfileCut = hasDimple; // is it the same thing?
3814 } 3814 }
3815 3815
3816 public void SetGroup(UUID groupID, IClientAPI client) 3816 public void SetGroup(UUID groupID, IClientAPI client)
3817 { 3817 {
3818 // Scene.AddNewPrims() calls with client == null so can't use this. 3818 // Scene.AddNewPrims() calls with client == null so can't use this.
@@ -3859,7 +3859,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3859 public void SetScriptEvents(UUID scriptid, int events) 3859 public void SetScriptEvents(UUID scriptid, int events)
3860 { 3860 {
3861// m_log.DebugFormat( 3861// m_log.DebugFormat(
3862// "[SCENE OBJECT PART]: Set script events for script with id {0} on {1}/{2} to {3} in {4}", 3862// "[SCENE OBJECT PART]: Set script events for script with id {0} on {1}/{2} to {3} in {4}",
3863// scriptid, Name, ParentGroup.Name, events, ParentGroup.Scene.Name); 3863// scriptid, Name, ParentGroup.Name, events, ParentGroup.Scene.Name);
3864 3864
3865 // scriptEvents oldparts; 3865 // scriptEvents oldparts;
@@ -3896,7 +3896,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3896 ScheduleFullUpdate(); 3896 ScheduleFullUpdate();
3897 } 3897 }
3898 } 3898 }
3899 3899
3900 /// <summary> 3900 /// <summary>
3901 /// Set the text displayed for this part. 3901 /// Set the text displayed for this part.
3902 /// </summary> 3902 /// </summary>
@@ -4491,7 +4491,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4491 public bool IsHingeJoint() 4491 public bool IsHingeJoint()
4492 { 4492 {
4493 // For now, we use the NINJA naming scheme for identifying joints. 4493 // For now, we use the NINJA naming scheme for identifying joints.
4494 // In the future, we can support other joint specification schemes such as a 4494 // In the future, we can support other joint specification schemes such as a
4495 // custom checkbox in the viewer GUI. 4495 // custom checkbox in the viewer GUI.
4496 if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints) 4496 if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
4497 { 4497 {
@@ -4507,7 +4507,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4507 public bool IsBallJoint() 4507 public bool IsBallJoint()
4508 { 4508 {
4509 // For now, we use the NINJA naming scheme for identifying joints. 4509 // For now, we use the NINJA naming scheme for identifying joints.
4510 // In the future, we can support other joint specification schemes such as a 4510 // In the future, we can support other joint specification schemes such as a
4511 // custom checkbox in the viewer GUI. 4511 // custom checkbox in the viewer GUI.
4512 if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints) 4512 if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
4513 { 4513 {
@@ -4523,7 +4523,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4523 public bool IsJoint() 4523 public bool IsJoint()
4524 { 4524 {
4525 // For now, we use the NINJA naming scheme for identifying joints. 4525 // For now, we use the NINJA naming scheme for identifying joints.
4526 // In the future, we can support other joint specification schemes such as a 4526 // In the future, we can support other joint specification schemes such as a
4527 // custom checkbox in the viewer GUI. 4527 // custom checkbox in the viewer GUI.
4528 if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints) 4528 if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
4529 { 4529 {
@@ -4616,8 +4616,8 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4616 4616
4617 Stop(); 4617 Stop();
4618 } 4618 }
4619 4619
4620 else 4620 else
4621 { 4621 {
4622 if (ParentGroup.Scene.CollidablePrims) 4622 if (ParentGroup.Scene.CollidablePrims)
4623 { 4623 {
@@ -4649,7 +4649,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4649 4649
4650 UpdatePhysicsSubscribedEvents(); 4650 UpdatePhysicsSubscribedEvents();
4651 } 4651 }
4652 } 4652 }
4653 4653
4654 // and last in case we have a new actor and not building 4654 // and last in case we have a new actor and not building
4655 4655
@@ -4658,7 +4658,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4658 ParentGroup.HasGroupChanged = true; 4658 ParentGroup.HasGroupChanged = true;
4659 ScheduleFullUpdate(); 4659 ScheduleFullUpdate();
4660 } 4660 }
4661 4661
4662// m_log.DebugFormat("[SCENE OBJECT PART]: Updated PrimFlags on {0} {1} to {2}", Name, LocalId, Flags); 4662// m_log.DebugFormat("[SCENE OBJECT PART]: Updated PrimFlags on {0} {1} to {2}", Name, LocalId, Flags);
4663 } 4663 }
4664 4664
@@ -4671,10 +4671,10 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4671 /// <param name="building">tells physics to delay full construction of object</param> 4671 /// <param name="building">tells physics to delay full construction of object</param>
4672 /// <param name="applyDynamics">applies velocities, force and torque</param> 4672 /// <param name="applyDynamics">applies velocities, force and torque</param>
4673 private void AddToPhysics(bool isPhysical, bool isPhantom, bool building, bool applyDynamics) 4673 private void AddToPhysics(bool isPhysical, bool isPhantom, bool building, bool applyDynamics)
4674 { 4674 {
4675 PhysicsActor pa; 4675 PhysicsActor pa;
4676 4676
4677 Vector3 velocity = Velocity; 4677 Vector3 velocity = Velocity;
4678 Vector3 rotationalVelocity = AngularVelocity;; 4678 Vector3 rotationalVelocity = AngularVelocity;;
4679 4679
4680 try 4680 try
@@ -4695,7 +4695,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4695 m_log.ErrorFormat("[SCENE]: caught exception meshing object {0}. Object set to phantom. e={1}", m_uuid, e); 4695 m_log.ErrorFormat("[SCENE]: caught exception meshing object {0}. Object set to phantom. e={1}", m_uuid, e);
4696 pa = null; 4696 pa = null;
4697 } 4697 }
4698 4698
4699 if (pa != null) 4699 if (pa != null)
4700 { 4700 {
4701 pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info 4701 pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
@@ -4709,7 +4709,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4709 4709
4710 if(LocalId == ParentGroup.RootPart.LocalId) 4710 if(LocalId == ParentGroup.RootPart.LocalId)
4711 { 4711 {
4712 pa.LockAngularMotion(RotationAxisLocks); 4712 pa.LockAngularMotion(RotationAxisLocks);
4713 } 4713 }
4714 4714
4715 if (VolumeDetectActive) // change if not the default only 4715 if (VolumeDetectActive) // change if not the default only
@@ -4722,7 +4722,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4722 AddFlag(PrimFlags.CameraDecoupled); 4722 AddFlag(PrimFlags.CameraDecoupled);
4723 else 4723 else
4724 RemFlag(PrimFlags.CameraDecoupled); 4724 RemFlag(PrimFlags.CameraDecoupled);
4725 } 4725 }
4726 else 4726 else
4727 RemFlag(PrimFlags.CameraDecoupled); 4727 RemFlag(PrimFlags.CameraDecoupled);
4728 // we are going to tell rest of code about physics so better have this here 4728 // we are going to tell rest of code about physics so better have this here
@@ -4752,8 +4752,8 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4752 } 4752 }
4753 } 4753 }
4754 4754
4755 if (applyDynamics && LocalId == ParentGroup.RootPart.LocalId) 4755 if (applyDynamics && LocalId == ParentGroup.RootPart.LocalId)
4756 // do independent of isphysical so parameters get setted (at least some) 4756 // do independent of isphysical so parameters get setted (at least some)
4757 { 4757 {
4758 Velocity = velocity; 4758 Velocity = velocity;
4759 AngularVelocity = rotationalVelocity; 4759 AngularVelocity = rotationalVelocity;
@@ -4941,8 +4941,8 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4941 4941
4942 Primitive.TextureEntryFace fallbackNewFace = newTex.DefaultTexture; 4942 Primitive.TextureEntryFace fallbackNewFace = newTex.DefaultTexture;
4943 Primitive.TextureEntryFace fallbackOldFace = oldTex.DefaultTexture; 4943 Primitive.TextureEntryFace fallbackOldFace = oldTex.DefaultTexture;
4944 4944
4945 // On Incoming packets, sometimes newText.DefaultTexture is null. The assumption is that all 4945 // On Incoming packets, sometimes newText.DefaultTexture is null. The assumption is that all
4946 // other prim-sides are set, but apparently that's not always the case. Lets assume packet/data corruption at this point. 4946 // other prim-sides are set, but apparently that's not always the case. Lets assume packet/data corruption at this point.
4947 if (fallbackNewFace == null) 4947 if (fallbackNewFace == null)
4948 { 4948 {
@@ -4958,7 +4958,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4958 // Materials capable viewers can send a ObjectImage packet 4958 // Materials capable viewers can send a ObjectImage packet
4959 // when nothing in TE has changed. MaterialID should be updated 4959 // when nothing in TE has changed. MaterialID should be updated
4960 // by the RenderMaterials CAP handler, so updating it here may cause a 4960 // by the RenderMaterials CAP handler, so updating it here may cause a
4961 // race condtion. Therefore, if no non-materials TE fields have changed, 4961 // race condtion. Therefore, if no non-materials TE fields have changed,
4962 // we should ignore any changes and not update Shape.TextureEntry 4962 // we should ignore any changes and not update Shape.TextureEntry
4963 4963
4964 bool otherFieldsChanged = false; 4964 bool otherFieldsChanged = false;
@@ -5140,7 +5140,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5140 { 5140 {
5141 return m_forceMouselook; 5141 return m_forceMouselook;
5142 } 5142 }
5143 5143
5144 public override string ToString() 5144 public override string ToString()
5145 { 5145 {
5146 return String.Format("{0} {1} (parent {2}))", Name, UUID, ParentGroup); 5146 return String.Format("{0} {1} (parent {2}))", Name, UUID, ParentGroup);
@@ -5157,7 +5157,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5157 && (ParentGroup.RootPart != this 5157 && (ParentGroup.RootPart != this
5158 || ParentGroup.AttachedAvatar != remoteClient.AgentId && ParentGroup.HasPrivateAttachmentPoint)) 5158 || ParentGroup.AttachedAvatar != remoteClient.AgentId && ParentGroup.HasPrivateAttachmentPoint))
5159 return; 5159 return;
5160 5160
5161 // Causes this thread to dig into the Client Thread Data. 5161 // Causes this thread to dig into the Client Thread Data.
5162 // Remember your locking here! 5162 // Remember your locking here!
5163 remoteClient.SendEntityUpdate( 5163 remoteClient.SendEntityUpdate(
@@ -5165,9 +5165,9 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5165 PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity 5165 PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
5166 | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity); 5166 | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
5167 5167
5168 ParentGroup.Scene.StatsReporter.AddObjectUpdates(1); 5168 ParentGroup.Scene.StatsReporter.AddObjectUpdates(1);
5169 } 5169 }
5170 5170
5171 public void AddScriptLPS(int count) 5171 public void AddScriptLPS(int count)
5172 { 5172 {
5173 ParentGroup.AddScriptLPS(count); 5173 ParentGroup.AddScriptLPS(count);
@@ -5233,7 +5233,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5233 { 5233 {
5234 PermissionsUtil.LogPermissions(Name, message, BaseMask, OwnerMask, NextOwnerMask); 5234 PermissionsUtil.LogPermissions(Name, message, BaseMask, OwnerMask, NextOwnerMask);
5235 } 5235 }
5236 5236
5237 public void ApplyNextOwnerPermissions() 5237 public void ApplyNextOwnerPermissions()
5238 { 5238 {
5239 // Export needs to be preserved in the base and everyone 5239 // Export needs to be preserved in the base and everyone