diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 2c2bcea..6275f19 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -4462,12 +4462,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4462 | 4462 | ||
4463 | if (kills.Count > 0) | 4463 | if (kills.Count > 0) |
4464 | { | 4464 | { |
4465 | List<uint> partIDs = new List<uint>(); | ||
4465 | foreach(SceneObjectGroup grp in kills) | 4466 | foreach(SceneObjectGroup grp in kills) |
4466 | { | 4467 | { |
4468 | SendEntityUpdate(grp.RootPart,PrimUpdateFlags.Kill); | ||
4467 | foreach(SceneObjectPart p in grp.Parts) | 4469 | foreach(SceneObjectPart p in grp.Parts) |
4468 | SendEntityUpdate(p,PrimUpdateFlags.Kill); | 4470 | { |
4471 | if(p != grp.RootPart) | ||
4472 | partIDs.Add(p.LocalId); | ||
4473 | } | ||
4469 | } | 4474 | } |
4470 | kills.Clear(); | 4475 | kills.Clear(); |
4476 | if(partIDs.Count > 0) | ||
4477 | { | ||
4478 | lock (m_entityProps.SyncRoot) | ||
4479 | m_entityProps.Remove(partIDs); | ||
4480 | lock (m_entityUpdates.SyncRoot) | ||
4481 | m_entityUpdates.Remove(partIDs); | ||
4482 | } | ||
4471 | } | 4483 | } |
4472 | 4484 | ||
4473 | if(GroupsNeedFullUpdate.Count > 0) | 4485 | if(GroupsNeedFullUpdate.Count > 0) |
@@ -11409,12 +11421,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11409 | m_GroupsModule.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID); | 11421 | m_GroupsModule.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID); |
11410 | 11422 | ||
11411 | int memberCount = members.Count; | 11423 | int memberCount = members.Count; |
11412 | 11424 | int indx = 0; | |
11413 | while (true) | 11425 | while (indx < memberCount) |
11414 | { | 11426 | { |
11415 | int blockCount = members.Count; | 11427 | int blockCount = memberCount - indx; |
11416 | if (blockCount > 40) | 11428 | if (blockCount > 25) |
11417 | blockCount = 40; | 11429 | blockCount = 25; |
11418 | 11430 | ||
11419 | GroupMembersReplyPacket groupMembersReply = (GroupMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupMembersReply); | 11431 | GroupMembersReplyPacket groupMembersReply = (GroupMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupMembersReply); |
11420 | 11432 | ||
@@ -11435,8 +11447,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11435 | 11447 | ||
11436 | for (int i = 0; i < blockCount; i++) | 11448 | for (int i = 0; i < blockCount; i++) |
11437 | { | 11449 | { |
11438 | GroupMembersData m = members[0]; | 11450 | GroupMembersData m = members[indx++]; |
11439 | members.RemoveAt(0); | ||
11440 | 11451 | ||
11441 | groupMembersReply.MemberData[i] = | 11452 | groupMembersReply.MemberData[i] = |
11442 | new GroupMembersReplyPacket.MemberDataBlock(); | 11453 | new GroupMembersReplyPacket.MemberDataBlock(); |
@@ -11454,8 +11465,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11454 | m.IsOwner; | 11465 | m.IsOwner; |
11455 | } | 11466 | } |
11456 | OutPacket(groupMembersReply, ThrottleOutPacketType.Task); | 11467 | OutPacket(groupMembersReply, ThrottleOutPacketType.Task); |
11457 | if (members.Count == 0) | ||
11458 | return true; | ||
11459 | } | 11468 | } |
11460 | } | 11469 | } |
11461 | return true; | 11470 | return true; |