diff --git a/include/prototypes.h b/include/prototypes.h index f1b6bb28..4a381ba0 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -655,6 +655,7 @@ extern void show_sect_stats(int); extern void show_sect_capab(int); extern void show_item(int); extern void show_news(int); +extern void show_updates(int); /* shpsub.c */ extern void shp_sel(struct nstr_item *, struct emp_qelem *); extern void shp_nav(struct emp_qelem *, double *, double *, int *, natid); diff --git a/info/disable.t b/info/disable.t index 946933e2..32196a2a 100644 --- a/info/disable.t +++ b/info/disable.t @@ -2,8 +2,8 @@ .NA disable "Disable Updates" .LV Expert .SY "disable" -No updates will fire if you disable them. "UPDATES ARE DISABLED" will -show up in the output of the "update" command. +No updates will fire if you disable them. The \*Qshow updates\*U +command will report the fact. .s1 Disabling updates this way does not stop the Empire clock. Stuff using the clock, like BTU growth, continues normally. Should a @@ -13,6 +13,6 @@ between updates. This effectively stops the clock. .s1 You should not use this command as a tool for implementing your update schedule! Enabling and disabling updates by hand is far too error -prone, and your players can't trust the update command to find out +prone, and your players can't trust the show command to find out when the next update really is. Use the update schedule file instead. -.SA "update, disable, Time, Deity" +.SA "disable, show, Time, Deity" diff --git a/info/enable.t b/info/enable.t index 7c672d39..390fd3b9 100644 --- a/info/enable.t +++ b/info/enable.t @@ -3,4 +3,4 @@ .LV Expert .SY "enable" If updates have been disabled, then this will enable them again. -.SA "update, enable, force, Deity" +.SA "disable, show, force, Deity" diff --git a/info/show.t b/info/show.t index 9156decc..56825079 100644 --- a/info/show.t +++ b/info/show.t @@ -3,11 +3,12 @@ .LV Basic .SY "show [b|s|c] [tech]" .SY "show " +.SY "show [number]" The show command shows characteristics of sectors, units (ships, planes, land units and nukes), bridges (spans and towers), items and -news. +news, as well as information on updates. .s1 -The format of each output is more fully described in separate info +Characteristics are more fully described in separate info pages (Ship-types, Nuke-types, etc.). .s1 For sectors and units, a @@ -35,4 +36,4 @@ Printing for tech level '325' 75kt fusion 3 90 3 320 106 $ 20000 .FI .s1 -.SA "Ship-types, Nuke-types, Plane-types, Unit-types, Sector-types, Ships, Planes, LandUnits, Nukes, Bridges, Item-types, newspaper" +.SA "Ship-types, Nuke-types, Plane-types, Unit-types, Sector-types, Ships, Planes, LandUnits, Nukes, Bridges, Item-types, newspaper, Updates" diff --git a/info/update.t b/info/update.t index bb7d0e56..9874439e 100644 --- a/info/update.t +++ b/info/update.t @@ -5,4 +5,4 @@ The update command shows you when the next update will occur, and describes the current update policies. .sp -.SA "zdone, Updates" +.SA "show, zdone, Obsolete" diff --git a/info/version.t b/info/version.t index fc71850d..9eeb6219 100644 --- a/info/version.t +++ b/info/version.t @@ -19,8 +19,7 @@ World size is 64 by 32. There can be up to 99 countries. By default, countries use their own coordinate system. -An Empire time unit is 10 seconds long. -Use the 'update' command to find out the time of the next update. +Use the 'show' command to find out the time of the next update. The current time is Tue Jul 10 23:09:03. An update consists of 60 empire time units. Each country is allowed to be logged in 1440 minutes a day. diff --git a/info/zdone.t b/info/zdone.t index d37a2f73..7f8e7740 100644 --- a/info/zdone.t +++ b/info/zdone.t @@ -11,20 +11,25 @@ for an update. .s1 "check" checks to see what your zdone state is. .s1 -The command will also show you how many countries want -an update. There are 3 possible update policies which could -be set in this game. The update policy is shown in the update command. +The command will also show you how many countries want an update. The +number of ready countries required for a demand update to happen is +configurable, and may be seen in the \*Qshow updates\*U command. .s1 -Your zdone state is cleared when an update occurs. +There are three possible update policies which could be set in this +game: .s1 1. No demand updates. If so, then this command is useless. .s1 -2. Updates occur upon demand, right after the last person sets -zdone. The threshold at which a demand update occurs is configurable, -and may be seen in the update command. +2. Demand updates occur right after the last required country sets +zdone. .s1 -3. Demand updates occur at specific times. If enough countries -have set zdone at one of those times, then an update will occur. -The times may be seen in the update command. +3. Demand updates occur according to the update schedule. If enough +countries have set zdone by the scheduled time, then an update will +occur. The update schedule may be seen in the \*Qshow updates\*U +command. +.s1 +Your zdone state is cleared when an update occurs. +.s1 +The \*Qshow updates\*U command shows update policy and schedule. .sp -.SA "update, Playing" +.SA "show, Updates" diff --git a/src/lib/commands/show.c b/src/lib/commands/show.c index 3e40dc7f..71b57c12 100644 --- a/src/lib/commands/show.c +++ b/src/lib/commands/show.c @@ -51,7 +51,7 @@ show(void) int rlev; if (!(p = getstarg(player->argp[1], - "Describe what (plane, nuke, bridge, ship, sect, land unit, tower, item)? ", + "Show what (bridge, item, land, nuke, plane, sect, ship, tower, updates)?", buf)) || !*p) return RET_SYN; @@ -113,9 +113,13 @@ show(void) cfunc = show_ship_capab; } break; + case 'u': + show_updates(player->argp[2] ? atoi(player->argp[2]) : 8); + return RET_OK; default: return RET_SYN; } + if (!(p = getstarg(player->argp[2], "Build, stats, or capability data (b,s,c)? ", buf)) || !*p) diff --git a/src/lib/commands/upda.c b/src/lib/commands/upda.c index cf1dde74..7d9f18b3 100644 --- a/src/lib/commands/upda.c +++ b/src/lib/commands/upda.c @@ -95,5 +95,7 @@ upda(void) if (*game_hours != 0) pr("Game hours are: %s\n", game_hours); + pr("\nThis command is obsolete and will go away in a future version.\n" + "Please use \"show updates\"."); return 0; } diff --git a/src/lib/commands/vers.c b/src/lib/commands/vers.c index 81846e04..e345bb0b 100644 --- a/src/lib/commands/vers.c +++ b/src/lib/commands/vers.c @@ -61,11 +61,15 @@ vers(void) pr("By default, countries use %s coordinate system.\n", (players_at_00) ? "the deity's" : "their own"); pr("\n"); - pr("Use the 'update' command to find out the time of the next update.\n"); + pr("Use the 'show' command to find out the time of the next update.\n"); pr("The current time is %19.19s.\n", ctime(&now)); pr("An update consists of %d empire time units.\n", etu_per_update); pr("Each country is allowed to be logged in %d minutes a day.\n", m_m_p_d); + if (*game_days != 0) + pr("Game days are %s\n", game_days); + if (*game_hours != 0) + pr("Game hours are %s\n", game_hours); pr("It takes %.2f civilians to produce a BTU in one time unit.\n", (1.0 / (btu_build_rate * 100.0))); pr("\n"); diff --git a/src/lib/player/empmod.c b/src/lib/player/empmod.c index d2fcc12c..ef75bad3 100644 --- a/src/lib/player/empmod.c +++ b/src/lib/player/empmod.c @@ -229,7 +229,9 @@ struct cmndstr player_coms[] = { {"shark ", 25, shark, C_MOD, NORM + MONEY + CAP}, {"ship ", 0, shi, 0, NORM}, {"shoot ", 3, shoo, C_MOD, NORM + MONEY + CAP}, - {"show <\"build\"|\"stats\"|\"cap\"> []", + {"show <\"build\"|\"stats\"|\"cap\"> []\n" + "\tshow \n" + "\tshow updates []>", 0, show, 0, VIS}, {"shutdown ", 0, shut, 0, GOD}, {"sinfrastructure ", 0, sinfra, 0, VIS}, diff --git a/src/lib/subs/show.c b/src/lib/subs/show.c index f0f82f25..5de8127b 100644 --- a/src/lib/subs/show.c +++ b/src/lib/subs/show.c @@ -32,13 +32,14 @@ * Jeff Bailey, 1990 * Steve McClure, 1996 * Ron Koenderink, 2005 - * Markus Armbruster, 2006 + * Markus Armbruster, 2006-2007 */ #include #include #include "file.h" +#include "game.h" #include "item.h" #include "land.h" #include "nat.h" @@ -50,8 +51,11 @@ #include "product.h" #include "prototypes.h" #include "sect.h" +#include "server.h" #include "ship.h" +static char *fmttime2822(time_t); + struct look_list { union { struct lchrstr *lp; @@ -654,3 +658,66 @@ show_news(int tlev) pr(" %s\n", rpt[i].r_newstory[j]); } } + +/* + * Show update policy and up to N scheduled updates. + */ +void +show_updates(int n) +{ + struct gamestr *game = game_tick_tick(); + int demand = 0; + int i; + + pr("%s, Turn %d, ETU %d\n", fmttime2822(time(NULL)), + game->game_turn, game->game_tick); + + if (update_time[0]) { + if (update_demand == UPD_DEMAND_SCHED) { + pr("Demand updates occur according to schedule:\n"); + demand = 1; + } else + pr("Updates occur according to schedule:\n"); + for (i = 0; i < n && update_time[i]; i++) + pr("%3d. %s\n", game->game_turn + i, + fmttime2822(update_time[i])); + if (update_window) { + pr("Updates occur within %d seconds after the scheduled time\n", + update_window); + } + } else + pr("There are no updates scheduled.\n"); + + if (update_demand == UPD_DEMAND_ASYNC) { + pr("Demand updates occur right after the demand is set.\n"); + if (*update_demandtimes != 0) { + pr("Demand updates are allowed during: %s\n", + update_demandtimes); + } + demand = 1; + } + + if (demand) { + pr("Demand updates require %d country(s) to want one.\n", + update_wantmin); + } + + if (updates_disabled()) + pr("\nUPDATES ARE DISABLED!\n"); +} + +/* + * Return T formatted according to RFC 2822. + * The return value is statically allocated and overwritten on + * subsequent calls. + */ +static char * +fmttime2822(time_t t) +{ + static char buf[32]; + int n = strftime(buf, sizeof(buf), "%a, %d %b %Y %T %z", + localtime(&t)); + if (CANT_HAPPEN(n == 0)) + buf[0] = 0; + return buf; +}