]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/give.c
Update copyright notice
[empserver] / src / lib / commands / give.c
index 656b0896ace261bddc4f785ac8719e3ce997b97a..58abfb7a46bf82b4a7d48a177f2030be9a672425 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2014, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                Ken Stevens, Steve McClure, Markus Armbruster
  *
  *  Empire is free software: you can redistribute it and/or modify
  *  Known contributors to this file:
  *     David Muir Sharnoff
  *     Steve McClure, 1997
+ *     Markus Armbruster, 2004-2013
  */
 
 #include <config.h>
 
+#include "actofgod.h"
 #include "commands.h"
 #include "item.h"
 #include "news.h"
@@ -62,31 +64,23 @@ give(void)
            return RET_SYN;
        if ((amt = atoi(p)) == 0)
            return RET_SYN;
-       check_sect_ok(&sect);
+       if (!check_sect_ok(&sect))
+           return RET_FAIL;
        n = sect.sct_item[ip->i_uid];
-       if (amt < 0 && -amt > n) {
+       if (amt < 0 && n + amt < 0)
            m = 0;
-       } else if (amt > 0 && amt + n > ITEM_MAX) {
+       else if (amt > 0 && n > ITEM_MAX - amt)
            m = ITEM_MAX;
-       else
+       else
            m = n + amt;
        sect.sct_item[ip->i_uid] = m;
        putsect(&sect);
-       if (sect.sct_own != 0 && m != n) {
-           if (m > n) {
-               if (opt_GODNEWS)
-                   nreport(player->cnum, N_GIFT, sect.sct_own, 1);
-               wu(player->cnum, sect.sct_own, "%s gave you %d %s in %s\n",
-                  cname(player->cnum), m - n, ip->i_name,
-                  xyas(sect.sct_x, sect.sct_y, sect.sct_own));
-           } else {
-               if (opt_GODNEWS)
-                   nreport(sect.sct_own, N_TAKE, player->cnum, 1);
-               wu(player->cnum, sect.sct_own, "%s stole %d %s from %s\n",
-                  cname(player->cnum), n - m, ip->i_name,
-                  xyas(sect.sct_x, sect.sct_y, sect.sct_own));
-           }
-       }
+       report_divine_gift(sect.sct_own, ip, m - n,
+                          xyas(sect.sct_x, sect.sct_y, sect.sct_own));
+       if (m - n != amt)
+           pr("Only %d %s in %s\n", abs(m - n),
+              m - n >= 0 ? "given" : "taken",
+              xyas(sect.sct_x, sect.sct_y, player->cnum));
        pr("%d %s in %s\n", m, ip->i_name,
           xyas(sect.sct_x, sect.sct_y, player->cnum));
     }