From: Markus Armbruster Date: Sat, 20 Mar 2010 16:55:56 +0000 (+0100) Subject: Fix interdiction not to wipe out target ship updates X-Git-Tag: hvy-plastic-2.2~1 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=e0b21266ce96b9c8826b7eac0ea476f73601cc37 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) --- 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) {