[Fix?] FFS! Trying to delete a weapon that doesn't even exist!

This commit is contained in:
Allanis 2013-11-26 15:43:28 +00:00
parent 3fc6514861
commit 29f58fe1e4

View File

@ -321,7 +321,8 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) {
break; break;
} }
for(i = 0; i < (*nlayer); i++) { i = 0;
while(i < *nlayer) {
w = wlayer[i]; w = wlayer[i];
switch(wlayer[i]->outfit->type) { switch(wlayer[i]->outfit->type) {
/* Most missiles behave the same. */ /* Most missiles behave the same. */
@ -365,8 +366,10 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) {
break; break;
} }
weapon_update(wlayer[i], dt, layer); weapon_update(wlayer[i], dt, layer);
/* If the weapon has been deleted we are going to have to hold back one. */
if(w != wlayer[i]) i--; /* Only increment if weapon wasn't deleted. */
if(w == wlayer[i])
i++;
} }
} }
@ -987,7 +990,13 @@ static void weapon_destroy(Weapon* w, WeaponLayer layer) {
nlayer = &nwfrontLayer; nlayer = &nwfrontLayer;
break; break;
} }
for(i = 0; wlayer[i] != w; i++); /* Get us to the current posision. */
for(i = 0; (wlayer[i] != w) && (i < *nlayer); i++); /* Get to the current position. */
if(i >= *nlayer) {
WARN("Trying to destroy weapon not found in stack!");
return;
}
weapon_free(wlayer[i]); weapon_free(wlayer[i]);
wlayer[i] = NULL; wlayer[i] = NULL;
(*nlayer)--; (*nlayer)--;