]> git.pond.sub.org Git - empserver/blobdiff - src/lib/subs/plane.c
Cargo lists storing lists of cargo for each carrier
[empserver] / src / lib / subs / plane.c
index 18f9401e539026da8868afea912c8a21e9c2952d..11c28104c4ad9cae52de0de005fa94d8184e91e9 100644 (file)
@@ -119,6 +119,7 @@ pln_prewrite(int n, void *old, void *new)
     if (pp->pln_effic < PLANE_MINEFF) {
        own = 0;
        pp->pln_effic = 0;
+       pp->pln_ship = pp->pln_land = -1;
        for (i = 0; NULL != (np = getnukep(i)); i++) {
            if (np->nuk_own && np->nuk_plane == n) {
                mpr(np->nuk_own, "%s lost!\n", prnuke(np));
@@ -129,6 +130,13 @@ pln_prewrite(int n, void *old, void *new)
        }
     }
 
+    if (CANT_HAPPEN(pp->pln_ship >= 0 && pp->pln_land >= 0))
+       pp->pln_land = -1;
+    if (oldpp->pln_ship != pp->pln_ship)
+       pln_carrier_change(pp, EF_SHIP, oldpp->pln_ship, pp->pln_ship);
+    if (oldpp->pln_land != pp->pln_land)
+       pln_carrier_change(pp, EF_LAND, oldpp->pln_land, pp->pln_land);
+
     /* We've avoided assigning to pp->pln_own, in case oldsp == sp */
     if (oldpp->pln_own != own)
        lost_and_found(EF_PLANE, oldpp->pln_own, own,
@@ -137,6 +145,14 @@ pln_prewrite(int n, void *old, void *new)
     pp->pln_own = own;
 }
 
+void
+pln_oninit(void *ptr)
+{
+    struct plnstr *pp = ptr;
+
+    pp->pln_ship = pp->pln_land = -1;
+}
+
 char *
 prplane(struct plnstr *pp)
 {