]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/setsect.c
edit &c: Suppress news and bulletins on no-op acts of god
[empserver] / src / lib / commands / setsect.c
index ab635580096958e12e9fa98b95932342b89488e8..686913f256c29f5618a644d30af55918df387436 100644 (file)
@@ -29,6 +29,7 @@
  *  Known contributors to this file:
  *     David Muir Sharnoff
  *     Steve McClure, 1998
+ *     Markus Armbruster, 2004-2013
  */
 
 #include <config.h>
@@ -73,10 +74,7 @@ setsector(void)
        case 'i':
            current = sect.sct_min;
            current += amt;
-           if (current < 0)
-               current = 0;
-           if (current > 100)
-               current = 100;
+           current = LIMIT_TO(current, 0, 100);
            if (sect.sct_own != 0)
                resnoise(&sect, "Iron ore content", sect.sct_min, current);
            sect.sct_min = (unsigned char)current;
@@ -84,10 +82,7 @@ setsector(void)
        case 'g':
            current = sect.sct_gmin;
            current += amt;
-           if (current < 0)
-               current = 0;
-           if (current > 100)
-               current = 100;
+           current = LIMIT_TO(current, 0, 100);
            if (sect.sct_own != 0)
                resnoise(&sect, "Gold content", sect.sct_gmin, current);
            sect.sct_gmin = (unsigned char)current;
@@ -97,10 +92,7 @@ setsector(void)
            case 'i':
                current = sect.sct_oil;
                current += amt;
-               if (current < 0)
-                   current = 0;
-               if (current > 100)
-                   current = 100;
+               current = LIMIT_TO(current, 0, 100);
                if (sect.sct_own != 0)
                    resnoise(&sect, "Oil content", sect.sct_oil, current);
                sect.sct_oil = (unsigned char)current;
@@ -108,27 +100,30 @@ setsector(void)
            case 'w':
                if ((amt < 0) || (amt > MAXNOC - 1))
                    return RET_SYN;
-               pr("Owner of %s changed from %s (#%d) to %s (#%d).\n",
+               pr("Owner of %s changed from %s to %s.\n",
                   xyas(sect.sct_x, sect.sct_y, player->cnum),
-                  cname(sect.sct_own), sect.sct_own, cname(amt), amt);
+                  prnatid(sect.sct_own), prnatid(amt));
+               if (amt == sect.sct_own)
+                   break;
                if (sect.sct_own) {
-                   wu(player->cnum, sect.sct_own,
-                      "Sector %s lost to deity intervention\n",
-                      xyas(sect.sct_x, sect.sct_y, sect.sct_own));
+                   wu(0, sect.sct_own,
+                      "Sector %s taken from you by an act of %s!\n",
+                      xyas(sect.sct_x, sect.sct_y, sect.sct_own),
+                      cname(player->cnum));
                }
                if (amt)
-                   wu(player->cnum, amt,
-                      "Sector %s gained from deity intervention\n",
-                      xyas(sect.sct_x, sect.sct_y, amt));
+                   wu(0, amt,
+                      "Sector %s given to you by an act of %s!\n",
+                      xyas(sect.sct_x, sect.sct_y, amt),
+                      cname(player->cnum));
                sect.sct_own = (natid)amt;
                break;
            case 'l':
                if ((amt < 0) || (amt > MAXNOC - 1))
                    return RET_SYN;
-               pr("Old owner of %s changed from %s (#%d) to %s (#%d).\n",
+               pr("Old owner of %s changed from %s to %s.\n",
                   xyas(sect.sct_x, sect.sct_y, player->cnum),
-                  cname(sect.sct_oldown),
-                  sect.sct_oldown, cname(amt), amt);
+                  prnatid(sect.sct_oldown), prnatid(amt));
                sect.sct_oldown = (natid)amt;
                break;
            default:
@@ -139,10 +134,7 @@ setsector(void)
        case 'e':
            current = sect.sct_effic;
            current += amt;
-           if (current < 0)
-               current = 0;
-           if (current > 100)
-               current = 100;
+           current = LIMIT_TO(current, 0, 100);
            pr("Efficiency in %s changed to %d.\n",
               xyas(sect.sct_x, sect.sct_y, player->cnum), current);
            sect.sct_effic = current;
@@ -152,10 +144,7 @@ setsector(void)
            case 'i':
                current = sect.sct_mines;
                current += amt;
-               if (current < 0)
-                   current = 0;
-               if (current > MINES_MAX)
-                   current = MINES_MAX;
+               current = LIMIT_TO(current, 0, MINES_MAX);
                if (sect.sct_own != 0 && sect.sct_own == sect.sct_oldown)
                    resnoise(&sect, "Mines", sect.sct_mines, current);
                sect.sct_mines = current;
@@ -163,10 +152,7 @@ setsector(void)
            case 'o':
                current = sect.sct_mobil;
                current += amt;
-               if (current < -127)
-                   current = -127;
-               if (current > 127)
-                   current = 127;
+               current = LIMIT_TO(current, -127, 127);
                pr("Mobility in %s changed to %d.\n",
                   xyas(sect.sct_x, sect.sct_y, player->cnum), current);
                sect.sct_mobil = current;
@@ -179,10 +165,7 @@ setsector(void)
        case 'a':
            current = sect.sct_avail;
            current += amt;
-           if (current < 0)
-               current = 0;
-           if (current > 9999)
-               current = 9999;
+           current = LIMIT_TO(current, 0, 9999);
            pr("Available in %s changed to %d.\n",
               xyas(sect.sct_x, sect.sct_y, player->cnum), current);
            sect.sct_avail = (short)current;
@@ -190,10 +173,7 @@ setsector(void)
        case 'w':
            current = sect.sct_work;
            current += amt;
-           if (current < 0)
-               current = 0;
-           if (current > 100)
-               current = 100;
+           current = LIMIT_TO(current, 0, 100);
            pr("Work in %s changed to %d.\n",
               xyas(sect.sct_x, sect.sct_y, player->cnum), current);
            sect.sct_work = (unsigned char)current;
@@ -201,10 +181,7 @@ setsector(void)
        case 'f':
            current = sect.sct_fertil;
            current += amt;
-           if (current < 0)
-               current = 0;
-           if (current > 100)
-               current = 100;
+           current = LIMIT_TO(current, 0, 100);
            if (sect.sct_own != 0)
                resnoise(&sect, "Fertility content", sect.sct_fertil, current);
            sect.sct_fertil = (unsigned char)current;
@@ -212,10 +189,7 @@ setsector(void)
        case 'u':
            current = sect.sct_uran;
            current += amt;
-           if (current < 0)
-               current = 0;
-           if (current > 100)
-               current = 100;
+           current = LIMIT_TO(current, 0, 100);
            if (sect.sct_own != 0)
                resnoise(&sect, "Uranium content", sect.sct_uran, current);
            sect.sct_uran = (unsigned char)current;
@@ -230,18 +204,10 @@ setsector(void)
 }
 
 static void
-resbenefit(natid who, int good)
+resbenefit(natid who, int goodness)
 {
-    if (!opt_GODNEWS)
-       return;
-
-    if (good) {
-       if (who)
-           nreport(player->cnum, N_AIDS, who, 1);
-    } else {
-       if (who)
-           nreport(player->cnum, N_HURTS, who, 1);
-    }
+    if (opt_GODNEWS && who && goodness)
+       nreport(player->cnum, goodness > 0 ? N_AIDS : N_HURTS, who, 1);
 }
 
 void
@@ -249,10 +215,10 @@ resnoise(struct sctstr *sptr, char *name, int old, int new)
 {
     pr("%s of %s changed from %d to %d\n",
        name, xyas(sptr->sct_x, sptr->sct_y, player->cnum), old, new);
-    if (sptr->sct_own)
+    if (sptr->sct_own && new != old)
        wu(0, sptr->sct_own,
           "%s in %s was changed from %d to %d by an act of %s\n",
           name, xyas(sptr->sct_x, sptr->sct_y, sptr->sct_own),
           old, new, cname(player->cnum));
-    resbenefit(sptr->sct_own, (old < new));
+    resbenefit(sptr->sct_own, new - old);
 }