]> git.pond.sub.org Git - empserver/blobdiff - src/lib/subs/rej.c
Update copyright notice
[empserver] / src / lib / subs / rej.c
index fc1b5efe794d75bf2b262bab3cc9e4599f3ba518..b0944f8c6825430fb6a270a759bd6bb79335daf5 100644 (file)
@@ -1,11 +1,11 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
- *                           Ken Stevens, Steve McClure
+ *  Copyright (C) 1986-2020, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *                Ken Stevens, Steve McClure, Markus Armbruster
  *
- *  This program is free software; you can redistribute it and/or modify
+ *  Empire is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  *  ---
  *
  *
  *  Known contributors to this file:
  *     Dave Pare, 1994
+ *     Markus Armbruster, 2005-2016
  */
 
 #include <config.h>
 
-#include "file.h"
 #include "nat.h"
 #include "news.h"
 #include "optlist.h"
 #include "player.h"
 #include "prototypes.h"
-#include "server.h"
+#include "update.h"
 
 void
-setrel(natid us, natid them, int rel)
+setrel(natid us, natid them, enum relations rel)
 {
+    struct relatstr *relp = getrelatp(us);
     struct natstr *mynp = getnatp(us);
-    struct natstr *themnp = getnatp(them);
-    int oldrel;
+    enum relations oldrel;
     char *whichway;
     int n_up = 0;
     int n_down = 0;
@@ -56,7 +55,7 @@ setrel(natid us, natid them, int rel)
        rel = AT_WAR;
     if (CANT_HAPPEN(rel > ALLIED))
        rel = ALLIED;
-    if (CANT_HAPPEN(!mynp || !themnp))
+    if (CANT_HAPPEN(!relp || !mynp))
        return;
     if (us == them)
        return;
@@ -88,14 +87,14 @@ setrel(natid us, natid them, int rel)
     if (addendum && us == player->cnum && !update_running)
        pr("%s\n", addendum);
     mpr(us, "Diplomatic relations with %s %s to \"%s\".\n",
-       cname(them), whichway, relates[rel]);
-    if (!(getrejects(us, themnp) & REJ_TELE))
+       cname(them), whichway, relations_string(rel));
+    if (nat_accepts(them, us, REJ_TELE))
        mpr(them,
-           "Country %s (#%d) has %s their relations with you to \"%s\"!\n",
-           cname(us), us, whichway, relates[rel]);
+           "Country %s has %s their relations with you to \"%s\"!\n",
+           prnat(mynp), whichway, relations_string(rel));
 
-    putrel(mynp, them, rel);
-    putnat(mynp);
+    relp->rel_relate[them] = rel;
+    putrelat(relp);
 
     if (!player->god) {
        if (oldrel == ALLIED)
@@ -114,21 +113,34 @@ setrel(natid us, natid them, int rel)
 void
 setcont(natid us, natid them, int contact)
 {
-    struct natstr *np = getnatp(us);
+    struct contactstr *conp = getcontactp(us);
 
-    if (CANT_HAPPEN(!np))
+    if (CANT_HAPPEN(!conp))
        return;
-    putcontact(np, them, contact);
-    putnat(np);
+
+    if (CANT_HAPPEN(contact < 0))
+       contact = 0;
+    if (CANT_HAPPEN(contact > 255))
+       contact = 255;
+
+    if (!opt_LOSE_CONTACT)
+       contact = !!contact;
+    if (conp->con_contact[them] < contact) {
+       conp->con_contact[them] = contact;
+       putcontact(conp);
+    }
 }
 
 void
-setrej(natid us, natid them, int how, int what)
+setrej(natid us, natid them, int reject, enum rej_comm what)
 {
-    struct natstr *np = getnatp(us);
+    struct rejectstr *rejp = getrejectp(us);
 
-    if (CANT_HAPPEN(!np))
+    if (CANT_HAPPEN(!rejp))
        return;
-    putreject(np, them, how, what);
-    putnat(np);
+    if (reject)
+       rejp->rej_rejects[them] |= bit(what);
+    else
+       rejp->rej_rejects[them] &= ~bit(what);
+    putreject(rejp);
 }