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.
This commit is contained in:
parent
28cc236e12
commit
1d4fea32b8
1 changed files with 2 additions and 0 deletions
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue