void setrel(natid us, natid them, int rel) { struct natstr *mynp = getnatp(us); struct natstr *themnp = getnatp(them); int oldrel; char *whichway; int n_up = 0; int n_down = 0; char *addendum = NULL; if (CANT_HAPPEN(rel < AT_WAR)) rel = AT_WAR; if (CANT_HAPPEN(rel > ALLIED)) rel = ALLIED; if (CANT_HAPPEN(!mynp || !themnp)) return; if (us == them) return; oldrel = relations_with(us, them); if (oldrel == rel) return; if (rel > oldrel) whichway = "upgraded"; else whichway = "downgraded"; if (rel == ALLIED) { addendum = "Congratulations!"; n_up = N_DECL_ALLY; } else if (rel == FRIENDLY) { n_up = N_UP_FRIENDLY; n_down = N_DOWN_FRIENDLY; } else if (rel == NEUTRAL) { n_up = N_UP_NEUTRAL; n_down = N_DOWN_NEUTRAL; } else if (rel == HOSTILE) { addendum = "Another cold war..."; n_up = N_UP_HOSTILE; n_down = N_DOWN_HOSTILE; } else if (rel < HOSTILE) { addendum = "Declaration made (give 'em hell)."; n_down = N_DECL_WAR; } 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)) mpr(them, "Country %s has %s their relations with you to \"%s\"!\n", prnat(mynp), whichway, relates[rel]); putrel(mynp, them, rel); putnat(mynp); if (!player->god) { if (oldrel == ALLIED) nreport(us, N_DIS_ALLY, them, 1); else if (oldrel < HOSTILE && rel >= HOSTILE) nreport(us, N_DIS_WAR, them, 1); if (rel > oldrel) nreport(us, n_up, them, 1); else nreport(us, n_down, them, 1); } if (opt_HIDDEN) setcont(them, us, FOUND_TELE); }
int tele(void) { natid to; struct natstr *natp; char buf[MAXTELSIZE + 1]; /* UTF-8 */ int n; if (*player->argp[0] == 'a') { if (getele("everybody", buf) <= 0) { pr("Announcement aborted\n"); return RET_FAIL; } pr("\n"); to = 0; if (typed_wu(player->cnum, to, buf, TEL_ANNOUNCE) < 0) logerror("tele: typed_wu failed to #%d", to); } else if (*player->argp[0] == 'p') { if (getele("your Gracious Deity", buf) <= 0) { pr("Prayer aborted\n"); return RET_FAIL; } pr("\n"); if (typed_wu(player->cnum, 0, buf, TEL_NORM) < 0) logerror("tele: typed_wu failed to #0"); } else { int kk; kk = 1; do { if ((n = natarg(player->argp[kk], "for which country? ")) < 0) return RET_SYN; to = n; if (kk == 1) { if (player->argp[2]) { if (getele("multiple recipients", buf) < 0) { pr("Telegram aborted\n"); return RET_FAIL; } } else { if (getele(cname(to), buf) < 0) { pr("Telegram aborted\n"); return RET_FAIL; } } pr("\n"); } natp = getnatp(to); if (natp->nat_stat < STAT_SANCT) { pr("%s has no \"telegram privileges\".\n", cname(to)); kk++; continue; } if (!player->god && (getrejects(player->cnum, natp) & REJ_TELE)) { pr("%s is rejecting your telegrams.\n", cname(to)); return RET_SYN; } if (typed_wu(player->cnum, to, buf, TEL_NORM) < 0) { logerror("tele: typed_wu failed to #%d", n); return RET_FAIL; } if (!player->god && natp->nat_stat != STAT_GOD && player->cnum != to) nreport(player->cnum, N_SENT_TEL, to, 1); if (opt_HIDDEN) { setcont(to, player->cnum, FOUND_TELE); } kk++; } while (player->argp[kk] != NULL); } return RET_OK; }