static void coun_list(struct natstr *natp) { char *status; natid cn = natp->nat_cnum; pr("%3d ", cn); if (getplayer(cn) && (player->god || natp->nat_stat == STAT_GOD || relations_with(cn, player->cnum) == ALLIED)) pr(" Now logged on "); else if (player->god) { if (natp->nat_last_login == 0) pr(" Never logged on "); else { pr("%.16s - ", ctime(&natp->nat_last_login)); pr("%-16.16s", natp->nat_last_login <= natp->nat_last_logout ? ctime(&natp->nat_last_logout) : "?"); } } else pr(" Unknown "); if (player->god) pr(" %4d", natp->nat_btu); if (natp->nat_stat == STAT_GOD) status = "DEITY"; else if (natp->nat_stat == STAT_NEW) status = "New"; else if (natp->nat_stat == STAT_SANCT) status = "Sanctuary"; else if (natp->nat_stat == STAT_ACTIVE) { status = "Active"; if (!opt_HIDDEN || player->god) { if (influx(natp)) status = "In flux"; else if (natp->nat_money < 0) status = "Broke"; } } else { status = "Visitor"; } pr(" %-9.9s %s\n", status, natp->nat_cnam); }
int coll(void) { int arg; time_t now; char *p; struct lonstr loan; struct sctstr sect; struct natstr *lonee_np; coord x, y; double owed; double pay; char buf[1024]; if (!opt_LOANS) { pr("Loans are not enabled.\n"); return RET_FAIL; } if ((arg = onearg(player->argp[1], "Collect on loan # ")) < 0) return RET_SYN; /* Check if it's a valid loan. That means, is it a valid loan, owed to this player, with a valid duration and it's been signed. */ if (!getloan(arg, &loan) || (loan.l_loner != player->cnum) || (loan.l_ldur == 0) || (loan.l_status != LS_SIGNED)) { pr("You aren't owed anything on that loan...\n"); return RET_FAIL; } /* If we got here, we check to see if it's been defaulted on. We already know it's owed to this player. */ owed = loan_owed(&loan, time(&now)); if (now <= loan.l_duedate) { pr("There has been no default on loan %d\n", arg); return RET_FAIL; } lonee_np = getnatp(loan.l_lonee); pr("You are owed $%.2f on that loan.\n", owed); p = getstarg(player->argp[2], "What sector do you wish to confiscate? ", buf); if (!p) return RET_SYN; if (!check_loan_ok(&loan)) return RET_FAIL; if (!sarg_xy(p, &x, &y) || !getsect(x, y, §)) return RET_SYN; if (!neigh(x, y, player->cnum)) { pr("You are not adjacent to %s\n", xyas(x, y, player->cnum)); return RET_FAIL; } if (sect.sct_own != loan.l_lonee) { pr("%s is not owned by %s.\n", xyas(x, y, player->cnum), cname(loan.l_lonee)); return RET_FAIL; } pay = appraise_sect(§); if (pay > owed * 1.2) { pr("That sector (and its contents) is valued at more than %.2f.\n", owed); return RET_FAIL; } if (!influx(lonee_np) && sect.sct_x == lonee_np->nat_xcap && sect.sct_y == lonee_np->nat_ycap) { pr("%s's capital cannot be confiscated.\n", cname(loan.l_lonee)); return RET_FAIL; } pr("That sector (and its contents) is valued at $%.2f\n", pay); sect.sct_item[I_MILIT] = 1; /* FIXME now where did this guy come from? */ /* * Used to call takeover() here a long time ago, but that does * unwanted things, like generate che. */ sect.sct_own = player->cnum; memset(sect.sct_dist, 0, sizeof(sect.sct_dist)); memset(sect.sct_del, 0, sizeof(sect.sct_del)); sect.sct_off = 1; sect.sct_dist_x = sect.sct_x; sect.sct_dist_y = sect.sct_y; putsect(§); nreport(player->cnum, N_SEIZE_SECT, loan.l_lonee, 1); owed = loan_owed(&loan, time(&now)); if (pay >= owed) { loan.l_status = LS_FREE; loan.l_ldur = 0; nreport(loan.l_lonee, N_REPAY_LOAN, player->cnum, 1); wu(0, loan.l_lonee, "%s seized %s to satisfy loan #%d\n", cname(player->cnum), xyas(sect.sct_x, sect.sct_y, loan.l_lonee), arg); pr("That loan is now considered repaid.\n"); } else { (void)time(&loan.l_lastpay); owed -= pay; loan.l_amtdue = (int)owed; pay += loan.l_amtpaid; loan.l_amtpaid = (int)pay; wu(0, loan.l_lonee, "%s seized %s in partial payment of loan %d.\n", cname(player->cnum), xyas(sect.sct_x, sect.sct_y, loan.l_lonee), arg); pr("You are still owed $%.2f on loan %d.\n", owed, arg); } putloan(arg, &loan); return RET_OK; }
int zdon(void) { int whichcnum; struct natstr *natp; char *p; int checking; int wantupd; int totpop; int totwant; int dowant; char buf[1024]; if (update_demand != UPD_DEMAND_SCHED && update_demand != UPD_DEMAND_ASYNC) { pr("Demand updates are not enabled.\n"); return RET_FAIL; } p = getstarg(player->argp[1], "Want update? [Yes|No|Check] ", buf); if (!p) return RET_SYN; if (*p == 'y' || *p == 'Y') { checking = 0; wantupd = 1; } else if (*p == 'n' || *p == 'N') { checking = 0; wantupd = 0; } else { checking = 1; wantupd = 0; } if (player->god) { whichcnum = natarg(player->argp[2], "for which country? "); if (whichcnum < 0) return RET_SYN; } else whichcnum = player->cnum; if (!(natp = getnatp(whichcnum))) { pr("Unable to find country. %d\n", whichcnum); pr("Notify the Deity.\n"); return RET_FAIL; } if (!checking) { if (wantupd) { if (influx(natp)) { pr("Unable to request an update as the country is in flux\n"); return RET_FAIL; } pr("You (%d) now want an update.\n", whichcnum); } else { pr("You (%d) now DON'T want an update.\n", whichcnum); } natp->nat_update = wantupd; putnat(natp); } dowant = demand_update_want(&totwant, &totpop, whichcnum); if (checking) { if (dowant) { pr("You want an update.\n"); } else pr("You DON'T want an update, yet.\n"); } pr("%d of a total of %d lunatics want an update.\n", totwant, totpop); if (!checking && wantupd && demandupdatecheck()) { pr("Here goes...\n"); update_trigger(); } return RET_OK; }