From e0b21266ce96b9c8826b7eac0ea476f73601cc37 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 20 Mar 2010 17:55:56 +0100 Subject: [PATCH] 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 1d4fea32b845686163b9be79e21ca7ea279357e1) --- src/lib/subs/shpsub.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/subs/shpsub.c b/src/lib/subs/shpsub.c index 51fe70794..11353607f 100644 --- a/src/lib/subs/shpsub.c +++ b/src/lib/subs/shpsub.c @@ -354,6 +354,8 @@ shp_count(struct emp_qelem *list, int wantflags, int nowantflags, static void 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); putship(mlp->unit.ship.shp_uid, &mlp->unit.ship); if (!mlp->unit.ship.shp_own) { -- 2.43.0