]> git.pond.sub.org Git - empserver/commitdiff
(fina, repa, shark): Bankers never round down debts!
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 20 Aug 2004 08:47:00 +0000 (08:47 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Fri, 20 Aug 2004 08:47:00 +0000 (08:47 +0000)
(repa, coll): Collect interest for the time the debtor is idling at
sub-prompts.

src/lib/commands/coll.c
src/lib/commands/fina.c
src/lib/commands/repa.c
src/lib/commands/shark.c

index 1081e22cbd63865cc6596566a2e9208b7fa33882..746c86d675c32788f875e0d2c508e0e37adf3314 100644 (file)
@@ -130,6 +130,7 @@ coll(void)
 
     putsect(&sect);
     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);
index c41af4f7daf408c365a5873045cc087eab10b405..e34075ee323ffff2101f26dbfc603be0da13fbfc 100644 (file)
@@ -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
index 69beec96c6bbc87219ada1e4e9b4195c00dde8fb..e19fb96bff3d81de76e62f8853a057cb64406d03 100644 (file)
@@ -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)) {
index cad7976b48f4dfa0c4e428abc4809e998c5a43f4..98bcaeff4ca17b1cef8a17bb7f78476a4cbc64bd 100644 (file)
@@ -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;