/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2006, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program is free software; you can redistribute it and/or modify
*
* ---
*
- * See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
- * related information and legal notices. It is expected that any future
- * projects/authors will amend these files as needed.
+ * See files README, COPYING and CREDITS in the root of the source
+ * tree for related information and legal notices. It is expected
+ * that future projects/authors will amend these files as needed.
*
* ---
*
* cede.c: Give a sector to a neighbor
- *
+ *
* Known contributors to this file:
* Dave Pare
* Thomas Ruschak
#include <config.h>
-#include "misc.h"
-#include "player.h"
-#include "xy.h"
-#include "sect.h"
-#include "nsc.h"
-#include "nat.h"
+#include "commands.h"
+#include "land.h"
+#include "lost.h"
+#include "nuke.h"
#include "path.h"
-#include "file.h"
#include "plane.h"
-#include "land.h"
#include "ship.h"
-#include "nuke.h"
-#include "commands.h"
+static int has_units_with_mob(coord, coord, natid);
static void cede_hdr(void);
static int cede_sect(struct nstr_sect *, natid);
static int cede_ship(struct nstr_item *, natid);
natid to;
int n;
int is_sector = 0, is_ship = 0;
- s_char *p;
+ char *p;
struct nstr_sect ns;
struct nstr_item ni;
struct natstr *natp;
- s_char buf[1024];
+ char buf[1024];
- if ((p = getstarg(player->argp[1], "Cede what? ", buf)) == 0)
+ p = getstarg(player->argp[1], "Cede what? ", buf);
+ if (!p || !*p)
return RET_SYN;
if (snxtsct(&ns, p))
is_sector = 1;
- if (snxtitem(&ni, EF_SHIP, p))
+ if (snxtitem(&ni, EF_SHIP, p, NULL))
is_ship = 1;
if (!is_sector && !is_ship)
return RET_SYN;
if (is_sector && is_ship) {
int type;
- if ((p =
- getstarg(player->argp[3], "Cede sectors or ships (se, sh)? ",
- buf)) == 0)
+ p = getstarg(player->argp[3], "Cede sectors or ships (se, sh)? ",
+ buf);
+ if (!p)
return RET_FAIL;
if (strlen(p) > 4)
p[2] = 0;
pr("You can only give to normal countries...\n");
return RET_FAIL;
}
- if (getrel(natp, player->cnum) < FRIENDLY) {
+ if (relations_with(n, player->cnum) < FRIENDLY) {
pr("You can only cede to a country that is friendly towards you...\n");
return RET_FAIL;
}
struct sctstr sect, osect;
int nsect;
int n, bad;
- s_char dirstr[20];
int off_x, off_y;
struct nstr_item ni;
struct shpstr ship;
prdate();
- for (n = 1; n <= 6; n++)
- dirstr[n] = dirch[n];
- dirstr[0] = '.';
- dirstr[7] = '$';
- dirstr[8] = '\0';
nsect = 0;
while (nxtsct(ns, §)) {
if (!player->owner)
bad = 0;
}
if (bad) {
- pr("%s has no sector with mobility adjacent to or ship in %s!\n", cname(to), xyas(sect.sct_x, sect.sct_y, player->cnum));
+ pr("%s has no sector with mobility adjacent to or ship in %s!\n",
+ cname(to), xyas(sect.sct_x, sect.sct_y, player->cnum));
continue;
}
putsect(§);
pr(" %s %d%% ceded\n", xyas(sect.sct_x, sect.sct_y, player->cnum),
(int)sect.sct_effic);
- wu(0, (natid)to, "%s ceded to you by %s\n",
+ wu(0, to, "%s ceded to you by %s\n",
xyas(sect.sct_x, sect.sct_y, to), cname(player->cnum));
}
pr("%d sector%s\n", nsect, splur(nsect));
return RET_OK;
}
+static int
+has_units_with_mob(coord x, coord y, natid cn)
+{
+ struct nstr_item ni;
+ struct lndstr land;
+
+ snxtitem_xy(&ni, EF_LAND, x, y);
+ while (nxtitem(&ni, &land)) {
+ if (land.lnd_own != cn)
+ continue;
+ if (land.lnd_mobil > 0)
+ return 1;
+ }
+
+ return 0;
+}
+
static void
cede_hdr(void)
{
wu(0, to, "\t%s ceded to you by %s\n",
prplane(pp), cname(player->cnum));
- makelost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x, pp->pln_y);
pp->pln_own = to;
- makenotlost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x,
- pp->pln_y);
pp->pln_mobil = 0;
pp->pln_mission = 0;
putplane(pp->pln_uid, pp);
if (np->nuk_own == 0)
continue;
- wu(0, to, "\tnuclear stockpile #%d ceded to you by %s\n",
- np->nuk_uid, cname(player->cnum));
- makelost(EF_NUKE, np->nuk_own, np->nuk_uid, np->nuk_x, np->nuk_y);
+ wu(0, to, "\t%s ceded to you by %s\n",
+ prnuke(np), cname(player->cnum));
np->nuk_own = to;
- makenotlost(EF_NUKE, np->nuk_own, np->nuk_uid, np->nuk_x,
- np->nuk_y);
putnuke(ni.cur, np);
}
if (lp->lnd_own != player->cnum)
continue;
- wu(0, to, "\t%s ceded to you by %s\n", prland(lp),
- cname(player->cnum));
- makelost(EF_LAND, lp->lnd_own, lp->lnd_uid, lp->lnd_x, lp->lnd_y);
- makenotlost(EF_LAND, to, lp->lnd_uid, lp->lnd_x, lp->lnd_y);
+ wu(0, to, "\t%s ceded to you by %s\n",
+ prland(lp), cname(player->cnum));
lp->lnd_own = to;
lp->lnd_mobil = 0;
lp->lnd_mission = 0;
sp->sct_dist_x = sp->sct_x;
sp->sct_dist_y = sp->sct_y;
- makelost(EF_SECTOR, sp->sct_own, 0, sp->sct_x, sp->sct_y);
- makenotlost(EF_SECTOR, to, 0, sp->sct_x, sp->sct_y);
if (sp->sct_oldown == sp->sct_own)
sp->sct_oldown = to;
sp->sct_own = to;
wu(0, to, "\t%s ceded to you by %s\n",
prplane(pp), cname(player->cnum));
- makelost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x, pp->pln_y);
pp->pln_own = to;
- makenotlost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x,
- pp->pln_y);
pp->pln_mobil = 0;
pp->pln_mission = 0;
putplane(pp->pln_uid, pp);
wu(0, to, "\t%s ceded to you by %s\n",
prland(lp), cname(player->cnum));
- makelost(EF_LAND, lp->lnd_own, lp->lnd_uid, lp->lnd_x, lp->lnd_y);
- makenotlost(EF_LAND, to, lp->lnd_uid, lp->lnd_x, lp->lnd_y);
lp->lnd_own = to;
lp->lnd_mobil = 0;
lp->lnd_mission = 0;
putland(ni.cur, lp);
}
- makelost(EF_SHIP, sp->shp_own, sp->shp_uid, sp->shp_x, sp->shp_y);
sp->shp_own = to;
- makenotlost(EF_SHIP, sp->shp_own, sp->shp_uid, sp->shp_x, sp->shp_y);
}