Fix interdiction not to wipe out target ship updates

Ships can expend shells to defend against missiles, in
shp_missile_defense().  Any shell use by the target ship got wiped out
when shp_missile_interdiction() wrote back the target ship, triggering
a seqno mismatch oops.

Ships get updated when they launch planes to intercept interdicting
planes, in mission_pln_equip().  Any petrol use by the target ship got
wiped out when shp_mission_interdiction() wrote back the target ship,
triggering a seqno mismatch oops.

Fix by re-reading the target ship in shp_damage_one().  This also
affects shp_fort_interdiction(), where it is not necessary.  A bit
inefficient, but let's keep this fix simple.
(cherry picked from commit 1d4fea32b8)
This commit is contained in:
Markus Armbruster 2010-03-20 17:55:56 +01:00
parent 03a9ab2cf6
commit e0b21266ce

View file

@ -354,6 +354,8 @@ shp_count(struct emp_qelem *list, int wantflags, int nowantflags,
static void static void
shp_damage_one(struct ulist *mlp, int dam) shp_damage_one(struct ulist *mlp, int dam)
{ {
/* ship might have changed (launched interceptors, missile defense) */
getship(mlp->unit.ship.shp_uid, &mlp->unit.ship);
shipdamage(&mlp->unit.ship, dam); shipdamage(&mlp->unit.ship, dam);
putship(mlp->unit.ship.shp_uid, &mlp->unit.ship); putship(mlp->unit.ship.shp_uid, &mlp->unit.ship);
if (!mlp->unit.ship.shp_own) { if (!mlp->unit.ship.shp_own) {