diff --git a/src/lib/commands/coll.c b/src/lib/commands/coll.c index 1081e22c..746c86d6 100644 --- a/src/lib/commands/coll.c +++ b/src/lib/commands/coll.c @@ -130,6 +130,7 @@ coll(void) putsect(§); nreport(player->cnum, N_SEIZE_SECT, loan.l_lonee, 1); + owed = loan_owed(&loan, time(&now)); if (pay >= owed) { loan.l_ldur = 0; nreport(loan.l_lonee, N_REPAY_LOAN, player->cnum, 1); diff --git a/src/lib/commands/fina.c b/src/lib/commands/fina.c index c41af4f7..e34075ee 100644 --- a/src/lib/commands/fina.c +++ b/src/lib/commands/fina.c @@ -70,9 +70,9 @@ fina(void) pr(" %-2d (%3d) %-8.8s (%3d) %-8.8s ", ni.cur, loan.l_loner, cname(loan.l_loner), loan.l_lonee, cname(loan.l_lonee)); - pr("%3d%% %3d %5ld %7ld", + pr("%3d%% %3d %5ld %7.0f", loan.l_irate, loan.l_ldur, loan.l_amtpaid, - (long)loan_owed(&loan, now)); + ceil(loan_owed(&loan, now))); if (now > loan.l_duedate) pr(" (in arrears)\n"); else diff --git a/src/lib/commands/repa.c b/src/lib/commands/repa.c index 69beec96..e19fb96b 100644 --- a/src/lib/commands/repa.c +++ b/src/lib/commands/repa.c @@ -48,9 +48,10 @@ repa(void) struct natstr *natp; struct natstr *loaner; int loan_num; - long payment; - long owe; + int payment; + long newdue; s_char *cp; + time_t now; s_char buf[1024]; if (!opt_LOANS) { @@ -69,7 +70,6 @@ repa(void) pr("You don't owe anything on that loan.\n"); return RET_FAIL; } - owe = (long)loan_owed(&loan, time(NULL)); if ((cp = getstarg(player->argp[2], "amount? ", buf)) == 0) return RET_SYN; if (!check_loan_ok(&loan)) @@ -77,7 +77,9 @@ repa(void) payment = atoi(cp); if (payment <= 0) return RET_SYN; - if (payment > owe) { + + newdue = (long)ceil(loan_owed(&loan, time(&now)) - payment); + if (newdue < 0) { pr("You don't owe that much.\n"); return RET_FAIL; } @@ -89,9 +91,9 @@ repa(void) loaner = getnatp(loan.l_loner); loaner->nat_money += payment; putnat(loaner); - (void)time(&loan.l_lastpay); - if (owe <= payment) { - wu(0, loan.l_loner, "Country #%d paid off loan #%d with $%ld\n", + loan.l_lastpay = now; + if (newdue == 0) { + wu(0, loan.l_loner, "Country #%d paid off loan #%d with $%d\n", player->cnum, loan_num, payment); nreport(player->cnum, N_REPAY_LOAN, loan.l_loner, 1); loan.l_status = LS_FREE; @@ -99,9 +101,9 @@ repa(void) pr("Congratulations, you've paid off the loan!\n"); } else { wu(0, loan.l_loner, - "Country #%d paid $%.2f on loan %d\n", player->cnum, - (double)payment, loan_num); - loan.l_amtdue = owe - payment; + "Country #%d paid $%d on loan %d\n", + player->cnum, payment, loan_num); + loan.l_amtdue = newdue; loan.l_amtpaid += payment; } if (!putloan(loan_num, &loan)) { diff --git a/src/lib/commands/shark.c b/src/lib/commands/shark.c index cad7976b..98bcaeff 100644 --- a/src/lib/commands/shark.c +++ b/src/lib/commands/shark.c @@ -86,7 +86,7 @@ shark(void) } pr("That loan is worth $%.2f.\n", owed); natp = getnatp(player->cnum); - payment = owed * (1.0 + loan.l_irate / 100.0); + payment = (long)ceil(owed * (1.0 + loan.l_irate / 100.0)); if (payment > natp->nat_money - 100.0) { pr("You do not have enough to cover that loan\n"); return RET_FAIL;