]> git.pond.sub.org Git - empserver/blobdiff - src/lib/subs/land.c
Cargo lists storing lists of cargo for each carrier
[empserver] / src / lib / subs / land.c
index 9bc647ebf879915659936c6b06df0a7755c583d2..618a294ca9ad4834a64c8705092794b6ffe09fba 100644 (file)
@@ -120,6 +120,7 @@ lnd_prewrite(int n, void *old, void *new)
 
     if (llp->lnd_own && llp->lnd_effic < LAND_MINEFF) {
        own = 0;
+       llp->lnd_ship = llp->lnd_land = -1;
 
        for (i = 0; NULL != (lp = getlandp(i)); i++) {
            if (lp->lnd_own && lp->lnd_land == n) {
@@ -149,6 +150,13 @@ lnd_prewrite(int n, void *old, void *new)
        item_prewrite(llp->lnd_item);
     }
 
+    if (CANT_HAPPEN(llp->lnd_ship >= 0 && llp->lnd_land >= 0))
+       llp->lnd_land = -1;
+    if (oldlp->lnd_ship != llp->lnd_ship)
+       lnd_carrier_change(llp, EF_SHIP, oldlp->lnd_ship, llp->lnd_ship);
+    if (oldlp->lnd_land != llp->lnd_land)
+       lnd_carrier_change(llp, EF_LAND, oldlp->lnd_land, llp->lnd_land);
+
     /* We've avoided assigning to llp->lnd_own, in case oldsp == sp */
     if (oldlp->lnd_own != own)
        lost_and_found(EF_LAND, oldlp->lnd_own, own,
@@ -157,6 +165,14 @@ lnd_prewrite(int n, void *old, void *new)
     llp->lnd_own = own;
 }
 
+void
+lnd_oninit(void *ptr)
+{
+    struct lndstr *lp = ptr;
+
+    lp->lnd_ship = lp->lnd_land = -1;
+}
+
 char *
 prland(struct lndstr *lp)
 {