diff --git a/src/lib/commands/scut.c b/src/lib/commands/scut.c index cab31c69..f84d9703 100644 --- a/src/lib/commands/scut.c +++ b/src/lib/commands/scut.c @@ -55,82 +55,6 @@ union item_u { struct lndstr land; }; -int -scuttle_tradeship(struct shpstr *sp, int interactive) -{ - float cash = 0; - float ally_cash = 0; - int dist; - struct sctstr sect; - struct mchrstr *mp; - struct natstr *np; - char buf[512]; - struct natstr *natp; - - mp = &mchr[(int)sp->shp_type]; - getsect(sp->shp_x, sp->shp_y, §); - if (sect.sct_own && sect.sct_type == SCT_HARBR) { - dist = mapdist(sp->shp_x, sp->shp_y, - sp->shp_orig_x, sp->shp_orig_y); - /* Don't disclose distance to to pirates */ - if (sp->shp_own == sp->shp_orig_own) { - if (interactive) - pr("%s has gone %d sects\n", prship(sp), dist); - else - wu(0, sp->shp_own, "%s has gone %d sects\n", - prship(sp), dist); - } - if (dist < trade_1_dist) - cash = 0; - else if (dist < trade_2_dist) - cash = (1.0 + trade_1 * ((float)dist)); - else if (dist < trade_3_dist) - cash = (1.0 + trade_2 * ((float)dist)); - else - cash = (1.0 + trade_3 * ((float)dist)); - cash *= mp->m_cost; - cash *= (((float)sp->shp_effic) / 100.0); - - if (sect.sct_own != sp->shp_own) { - ally_cash = cash * trade_ally_cut; - cash *= (1.0 + trade_ally_bonus); - } - } - - if (!interactive && cash) { - natp = getnatp(sp->shp_own); - natp->nat_money += cash; - putnat(natp); - wu(0, sp->shp_own, "You just made $%d.\n", (int)cash); - } else if (!cash && !interactive) { - wu(0, sp->shp_own, "Unfortunately, you make $0 on this trade.\n"); - } else if (cash && interactive) { - player->dolcost -= cash; - } else if (interactive && sp->shp_own == sp->shp_orig_own) { - pr("You won't get any money if you scuttle in %s!", - xyas(sp->shp_x, sp->shp_y, player->cnum)); - sprintf(buf, "Are you sure you want to scuttle %s? ", prship(sp)); - return confirm(buf); - } - - if (ally_cash) { - np = getnatp(sect.sct_own); - np->nat_money += ally_cash; - putnat(np); - wu(0, sect.sct_own, - "Trade with %s nets you $%d at %s\n", - cname(sp->shp_own), - (int)ally_cash, xyas(sect.sct_x, sect.sct_y, sect.sct_own)); - if (sp->shp_own != sp->shp_orig_own) - nreport(sp->shp_own, N_PIRATE_TRADE, sp->shp_orig_own, 1); - else - nreport(sp->shp_own, N_TRADE, sect.sct_own, 1); - } else if (sp->shp_own != sp->shp_orig_own) - nreport(sp->shp_own, N_PIRATE_KEEP, sp->shp_orig_own, 1); - - return 1; -} - int scut(void) { @@ -252,6 +176,82 @@ scut(void) return RET_OK; } +int +scuttle_tradeship(struct shpstr *sp, int interactive) +{ + float cash = 0; + float ally_cash = 0; + int dist; + struct sctstr sect; + struct mchrstr *mp; + struct natstr *np; + char buf[512]; + struct natstr *natp; + + mp = &mchr[(int)sp->shp_type]; + getsect(sp->shp_x, sp->shp_y, §); + if (sect.sct_own && sect.sct_type == SCT_HARBR) { + dist = mapdist(sp->shp_x, sp->shp_y, + sp->shp_orig_x, sp->shp_orig_y); + /* Don't disclose distance to to pirates */ + if (sp->shp_own == sp->shp_orig_own) { + if (interactive) + pr("%s has gone %d sects\n", prship(sp), dist); + else + wu(0, sp->shp_own, "%s has gone %d sects\n", + prship(sp), dist); + } + if (dist < trade_1_dist) + cash = 0; + else if (dist < trade_2_dist) + cash = (1.0 + trade_1 * ((float)dist)); + else if (dist < trade_3_dist) + cash = (1.0 + trade_2 * ((float)dist)); + else + cash = (1.0 + trade_3 * ((float)dist)); + cash *= mp->m_cost; + cash *= (((float)sp->shp_effic) / 100.0); + + if (sect.sct_own != sp->shp_own) { + ally_cash = cash * trade_ally_cut; + cash *= (1.0 + trade_ally_bonus); + } + } + + if (!interactive && cash) { + natp = getnatp(sp->shp_own); + natp->nat_money += cash; + putnat(natp); + wu(0, sp->shp_own, "You just made $%d.\n", (int)cash); + } else if (!cash && !interactive) { + wu(0, sp->shp_own, "Unfortunately, you make $0 on this trade.\n"); + } else if (cash && interactive) { + player->dolcost -= cash; + } else if (interactive && sp->shp_own == sp->shp_orig_own) { + pr("You won't get any money if you scuttle in %s!", + xyas(sp->shp_x, sp->shp_y, player->cnum)); + sprintf(buf, "Are you sure you want to scuttle %s? ", prship(sp)); + return confirm(buf); + } + + if (ally_cash) { + np = getnatp(sect.sct_own); + np->nat_money += ally_cash; + putnat(np); + wu(0, sect.sct_own, + "Trade with %s nets you $%d at %s\n", + cname(sp->shp_own), + (int)ally_cash, xyas(sect.sct_x, sect.sct_y, sect.sct_own)); + if (sp->shp_own != sp->shp_orig_own) + nreport(sp->shp_own, N_PIRATE_TRADE, sp->shp_orig_own, 1); + else + nreport(sp->shp_own, N_TRADE, sect.sct_own, 1); + } else if (sp->shp_own != sp->shp_orig_own) + nreport(sp->shp_own, N_PIRATE_KEEP, sp->shp_orig_own, 1); + + return 1; +} + void scuttle_ship(struct shpstr *sp) {