Exemple #1
0
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);
}
Exemple #2
0
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, &sect))
	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(&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(&sect);
    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;
}
Exemple #3
0
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;
}