Core: Fix very rare ZS crash when a player had been added twice to the infected or alive list.

This commit is contained in:
UnknownShadow200 2016-09-21 23:27:21 +10:00
parent ed0767b1a7
commit 6325e256f2
2 changed files with 13 additions and 3 deletions

View File

@ -192,7 +192,7 @@ namespace MCGalaxy.Games {
aliveList = Alive.Items;
foreach (Player alive in aliveList) {
if (alive == null || alive == dead) continue;
if (alive == dead) continue;
UpdatePlayerColor(alive, alive.color);
int dx = Math.Abs(alive.pos[0] - dead.pos[0]);
int dy = Math.Abs(alive.pos[1] - dead.pos[1]);

View File

@ -59,14 +59,24 @@ namespace MCGalaxy {
if (Items.Length == 0) return;
T[] newItems = new T[Items.Length - 1];
for (int i = 0, j = 0; i < Items.Length; i++) {
int j = 0;
for (int i = 0; i < Items.Length; i++) {
if (object.ReferenceEquals(Items[i], value)) continue;
// For some reason item wasn't in the list
if (j == newItems.Length) return;
newItems[j] = Items[i]; j++;
}
Items = newItems;
// Handle very rare case when an item has been added twice
if (newItems.Length != j) {
T[] temp = new T[j];
for (int i = 0; i < temp.Length; i++)
temp[i] = newItems[i];
Items = temp;
} else {
Items = newItems;
}
}
}