]> git.pond.sub.org Git - empserver/blob - src/lib/subs/rej.c
77faac4b650e282bedf5ab8a08e057539b017c28
[empserver] / src / lib / subs / rej.c
1 /*
2  *  Empire - A multi-player, client/server Internet based war game.
3  *  Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
4  *                           Ken Stevens, Steve McClure
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  *  ---
21  *
22  *  See files README, COPYING and CREDITS in the root of the source
23  *  tree for related information and legal notices.  It is expected
24  *  that future projects/authors will amend these files as needed.
25  *
26  *  ---
27  *
28  *  rej.c: Various relations setting routines
29  *
30  *  Known contributors to this file:
31  *     Dave Pare, 1994
32  */
33
34 #include <config.h>
35
36 #include "file.h"
37 #include "nat.h"
38 #include "news.h"
39 #include "optlist.h"
40 #include "player.h"
41 #include "prototypes.h"
42 #include "server.h"
43
44 int
45 setrel(natid us, natid them, int rel)
46 {
47     struct natstr *mynp;
48     struct natstr *themnp;
49     char *myname = cname(us);
50     char *themname;
51     int oldrel;
52     char *whichway;
53     int n_up = 0;
54     int n_down = 0;
55     char *addendum = NULL;
56
57     if (rel < AT_WAR)
58         rel = AT_WAR;
59     if (rel > ALLIED)
60         rel = ALLIED;
61     if (!(mynp = getnatp(us)))
62         return RET_FAIL;
63     if (!(themnp = getnatp(them)))
64         return RET_FAIL;
65     if ((oldrel = getrel(mynp, them)) == rel)
66         return RET_FAIL;
67     themname = cname(them);
68     if (rel > oldrel)
69         whichway = "upgraded";
70     else
71         whichway = "downgraded";
72     if (rel == ALLIED) {
73         addendum = "Congratulations!";
74         n_up = N_DECL_ALLY;
75     } else if (rel == FRIENDLY) {
76         n_up = N_UP_FRIENDLY;
77         n_down = N_DOWN_FRIENDLY;
78     } else if (rel == NEUTRAL) {
79         n_up = N_UP_NEUTRAL;
80         n_down = N_DOWN_NEUTRAL;
81     } else if (rel == HOSTILE) {
82         addendum = "Another cold war...";
83         n_up = N_UP_HOSTILE;
84         n_down = N_DOWN_HOSTILE;
85     } else if (rel < HOSTILE) {
86         addendum = "Declaration made (give 'em hell).";
87         n_down = N_DECL_WAR;
88     }
89
90     if (addendum && us == player->cnum && !update_running)
91         pr("%s\n", addendum);
92     mpr(us, "Diplomatic relations with %s %s to \"%s\".\n",
93         themname, whichway, relates[rel]);
94     if (!(getrejects(us, themnp) & REJ_TELE))
95         mpr(them,
96             "Country %s (#%d) has %s their relations with you to \"%s\"!\n",
97             myname, us, whichway, relates[rel]);
98
99     putrel(mynp, them, rel);
100     putnat(mynp);
101
102     if (!player->god) {
103         if (oldrel == ALLIED)
104             nreport(us, N_DIS_ALLY, them, 1);
105         else if (oldrel < HOSTILE && rel >= HOSTILE)
106             nreport(us, N_DIS_WAR, them, 1);
107         if (rel > oldrel)
108             nreport(us, n_up, them, 1);
109         else
110             nreport(us, n_down, them, 1);
111     }
112     if (opt_HIDDEN)
113         setcont(them, us, FOUND_TELE);
114
115     return RET_OK;
116 }
117
118 int
119 setcont(natid us, natid them, int contact)
120 {
121     struct natstr *np;
122
123     if (!(np = getnatp(us)))
124         return 0;
125     putcontact(np, them, contact);
126     putnat(np);
127     return 1;
128 }
129
130 int
131 setrej(natid us, natid them, int how, int what)
132 {
133     struct natstr *np;
134
135     if (!(np = getnatp(us)))
136         return 0;
137     putreject(np, them, how, what);
138     putnat(np);
139     return 1;
140 }