diff --git a/include/prototypes.h b/include/prototypes.h index d35baf65..da28cf21 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -65,7 +65,7 @@ extern int check_market(void); extern void set_coastal(struct sctstr *); extern int sendmessage(struct natstr *, struct natstr *, char *, int); extern void gift(int, int, s_char *, int, s_char *); -extern int display_mark(s_char *); +extern int display_mark(int what); extern int want_to_abandon(struct sctstr *, int, int, struct lndstr *); extern int would_abandon(struct sctstr *, int, int, struct lndstr *); extern int nav_map(int, int, int); diff --git a/info/Commands/market.t b/info/Commands/market.t index 60fe957b..b6de00e7 100644 --- a/info/Commands/market.t +++ b/info/Commands/market.t @@ -1,7 +1,7 @@ .TH Command MARKET .NA market "Report current selling prices in the world market" .LV Expert -.SY "market " +.SY "market " The market report displays the lowest price commodity of each type currently on the market. .s1 diff --git a/src/lib/commands/buy.c b/src/lib/commands/buy.c index e17edc4d..4e67adaf 100644 --- a/src/lib/commands/buy.c +++ b/src/lib/commands/buy.c @@ -82,7 +82,10 @@ buy(void) return RET_FAIL; } natp = getnatp(player->cnum); - display_mark(player->argp[1]); + ip = whatitem(player->argp[1], "Commodity you want to buy: "); + if (!ip) + return RET_SYN; + display_mark(ip->i_mnem); pr("\n"); p = getstarg(player->argp[2], "Which lot are you bidding on: ", buf); if (p == 0) @@ -96,8 +99,7 @@ buy(void) pr("Invalid lot number.\n"); return RET_OK; } - if (player->argp[1] && *(player->argp[1]) && - comm.com_type != player->argp[1][0]) { + if (comm.com_type != ip->i_mnem) { pr("That lot is not of the type you specified.\n"); return RET_OK; } diff --git a/src/lib/commands/mark.c b/src/lib/commands/mark.c index a10b992a..8b7af97c 100644 --- a/src/lib/commands/mark.c +++ b/src/lib/commands/mark.c @@ -46,14 +46,29 @@ int mark(void) { + char buf[1024]; + char *p; + struct ichrstr *ip; + if (!opt_MARKET) { pr("The market is disabled.\n"); return RET_FAIL; } - if (player->argp[1] && *(player->argp[1])) - return display_mark(player->argp[1]); - else - return display_mark(" "); + + if (player->argp[1] && player->argp[1]) { + p = getstarg(player->argp[1], "What commodity (or 'all')? ", buf); + if (!p) + return RET_SYN; + if (!strcmp(p, "all")) + return display_mark(0); + else { + ip = item_by_name(p); + if (!ip) + return RET_SYN; + return display_mark(ip->i_mnem); + } + } + return display_mark(-1); } static void @@ -77,45 +92,28 @@ pr_mark(struct comstr *comm) } int -display_mark(s_char *arg) +display_mark(int what) { struct comstr comm; struct comstr comm2; int sellers = 0; int cnt = 0; - char c; - s_char *p; struct ichrstr *ip; - s_char buf[1024]; - int cheapest_items[I_MAX + 2]; + int cheapest_items[I_MAX + 1]; int i; - int all = 0; -/* First, we execute all trades, so that we can only buy what is available. */ + /* Execute trades so report lists only lots that are still available. */ check_market(); check_trade(); - p = getstarg(arg, "What commodity (or 'all')? ", buf); - c = (char)0; - if (p && *p) - c = *p; - for (ip = &ichr[0]; ip && ip->i_mnem; ip++) - if (ip->i_mnem == c) - break; - c = ip->i_mnem; - pr("\n Empire Market Report\n "); prdate(); pr(" lot high bid/unit by time left owner item amount sector\n"); pr(" --- ------------- -- --------- ----- ---- ------ ------\n"); - if (arg) { - if (strcmp(arg, "all")) - all = 1; - } - if (all && !c) { + if (what == -1) { /* Ok, just printing the lowest of all of them */ - for (i = 0; i < I_MAX + 2; i++) + for (i = 0; i < I_MAX + 1; i++) cheapest_items[i] = -1; for (sellers = 0; getcomm(sellers, &comm); sellers++) { if (comm.com_owner == 0) @@ -134,7 +132,7 @@ display_mark(s_char *arg) cheapest_items[i] = sellers; } } - for (i = 0; i < I_MAX + 2; i++) { + for (i = 0; i < I_MAX + 1; i++) { if (cheapest_items[i] == -1) continue; getcomm(cheapest_items[i], &comm); @@ -146,7 +144,7 @@ display_mark(s_char *arg) for (sellers = 0; getcomm(sellers, &comm); sellers++) { if (comm.com_owner == 0) continue; - if (c && comm.com_type != c) + if (what && comm.com_type != what) continue; cnt = 1; pr_mark(&comm); diff --git a/src/lib/player/empmod.c b/src/lib/player/empmod.c index 7b50d4b9..826fa65d 100644 --- a/src/lib/player/empmod.c +++ b/src/lib/player/empmod.c @@ -150,7 +150,7 @@ struct cmndstr player_coms[] = { NORM + CAP}, {"lunload ", 1, lload, C_MOD, NORM + CAP}, - {"market [COMM]", 0, mark, 0, VIS}, + {"market ", 0, mark, 0, VIS}, {"map [s|l|p|*|h]", 0, map, C_MOD, VIS}, {"march ", 1, march, C_MOD, NORM + CAP}, {"mine ", 2, mine, C_MOD, NORM + MONEY + CAP},