]> git.pond.sub.org Git - empserver/blobdiff - src/lib/update/plague.c
Update copyright notice
[empserver] / src / lib / update / plague.c
index fcb79a44987b0400b3562eaeeaa486498776e81c..d0d739ae17b2ca5a69cea3dd03c106389694fa8e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2016, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2020, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                Ken Stevens, Steve McClure, Markus Armbruster
  *
  *  Empire is free software: you can redistribute it and/or modify
 #include <config.h>
 
 #include "chance.h"
-#include "file.h"
 #include "item.h"
-#include "lost.h"
 #include "optlist.h"
 #include "nat.h"
 #include "news.h"
 #include "plague.h"
 #include "prototypes.h"
 #include "sect.h"
+#include "update.h"
 
 static int infect_people(struct natstr *, struct sctstr *);
 
@@ -64,46 +63,11 @@ do_plague(struct sctstr *sp, int etu)
        ptime = 0;
     } else {
        n = plague_people(np, sp->sct_item, &pstage, &ptime, etu);
-       switch (n) {
-       case PLG_DYING:
-           wu(0, sp->sct_own, "PLAGUE deaths reported in %s.\n",
-              ownxy(sp));
-           nreport(sp->sct_own, N_DIE_PLAGUE, 0, 1);
-           break;
-       case PLG_INFECT:
-           wu(0, sp->sct_own, "%s battling PLAGUE\n", ownxy(sp));
-           break;
-       case PLG_INCUBATE:
-           /* Are we still incubating? */
-           if (n == pstage) {
-               /* Yes. Will it turn "infectious" next time? */
-               if (ptime <= etu) {
-                   /* Yes.  Report an outbreak. */
-                   wu(0, sp->sct_own,
-                      "Outbreak of PLAGUE in %s!\n", ownxy(sp));
-                   nreport(sp->sct_own, N_OUT_PLAGUE, 0, 1);
-               }
-           } else {
-               /* It has already moved on to "infectious" */
-               wu(0, sp->sct_own, "%s battling PLAGUE\n", ownxy(sp));
-           }
-           break;
-       case PLG_EXPOSED:
-           /* Has the plague moved to "incubation" yet? */
-           if (n != pstage) {
-               /* Yes. Will it turn "infectious" next time? */
-               if (ptime <= etu) {
-                   /* Yes.  Report an outbreak. */
-                   wu(0, sp->sct_own,
-                      "Outbreak of PLAGUE in %s!\n", ownxy(sp));
-                   nreport(sp->sct_own, N_OUT_PLAGUE, 0, 1);
-               }
-           }
-           break;
-       default:
-           break;
-       }
+       if (n != PLG_HEALTHY)
+           plague_report(sp->sct_own, n, pstage, ptime, etu,
+                         "in", ownxy(sp));
     }
+
     sp->sct_pstage = pstage;
     sp->sct_ptime = ptime;
 }
@@ -138,7 +102,7 @@ infect_people(struct natstr *np, struct sctstr *sp)
 
 /*
  * Given the fact that plague exists, kill off
- * people if in plague state DYING.  Increment
+ * people if in plague state PLG_DYING.  Increment
  * the plague time.  Return "current" plague
  * stage.  No reports generated here anymore.
  */
@@ -186,3 +150,47 @@ plague_people(struct natstr *np, short *vec,
     }
     return stage;
 }
+
+void
+plague_report(natid victim, int new_pstage, int pstage, int ptime,
+             int etus, char *in_on, char *place)
+{
+    switch (new_pstage) {
+    case PLG_DYING:
+       wu(0, victim, "PLAGUE deaths reported %s %s\n", in_on, place);
+       nreport(victim, N_DIE_PLAGUE, 0, 1);
+       break;
+    case PLG_INFECT:
+       wu(0, victim, "%s battling PLAGUE\n", place);
+       break;
+    case PLG_INCUBATE:
+       /* Are we still incubating? */
+       if (new_pstage == pstage) {
+           /* Yes. Will it turn "infectious" next time? */
+           if (ptime <= etus) {
+               /* Yes.  Report an outbreak. */
+               wu(0, victim,
+                  "Outbreak of PLAGUE %s %s!\n", in_on, place);
+               nreport(victim, N_OUT_PLAGUE, 0, 1);
+           }
+       } else {
+           /* It has already moved on to "infectious" */
+           wu(0, victim, "%s battling PLAGUE\n", place);
+       }
+       break;
+    case PLG_EXPOSED:
+       /* Has the plague moved to "incubation" yet? */
+       if (new_pstage != pstage) {
+           /* Yes. Will it turn "infectious" next time? */
+           if (ptime <= etus) {
+               /* Yes.  Report an outbreak. */
+               wu(0, victim,
+                  "Outbreak of PLAGUE %s %s!\n", in_on, place);
+               nreport(victim, N_OUT_PLAGUE, 0, 1);
+           }
+       }
+       break;
+    default:
+       break;
+    }
+}