diff --git a/include/land.h b/include/land.h index 58a8837c..3b287466 100644 --- a/include/land.h +++ b/include/land.h @@ -77,7 +77,7 @@ struct lndstr { short lnd_ptime; /* how many etus remain in this stage */ short lnd_land; /* pointer to transporting unit */ unsigned char lnd_nland; - time_t lnd_access; /* Last time mob was updated (MOB_ACCESS) */ + short lnd_access; /* Last tick mob was updated (MOB_ACCESS) */ float lnd_att; /* attack multiplier */ float lnd_def; /* defense multiplier */ int lnd_vul; /* vulnerability (0-100) */ diff --git a/include/misc.h b/include/misc.h index 74515dd8..8f2d698d 100644 --- a/include/misc.h +++ b/include/misc.h @@ -83,15 +83,6 @@ typedef int pid_t; #define S_IRWUG S_IRGRP | S_IWGRP | S_IRUSR | S_IWUSR #endif -/* This is the structure we use to keep track of the global mobility - things, such as when the server is supposed to start/stop updating - mobility and the timestamp of when the game was last up. These - times are in seconds. */ -struct mob_acc_globals { - time_t timestamp; /* Last timestamp of when the game was up */ - time_t starttime; /* When we should start updating mobility again. */ -}; - #ifdef __GNUC__ #define ATTRIBUTE(attrs) __attribute__ (attrs) #else diff --git a/include/optlist.h b/include/optlist.h index d31568d9..dcf00314 100644 --- a/include/optlist.h +++ b/include/optlist.h @@ -51,7 +51,6 @@ extern char motdfil[]; extern char downfil[]; extern char disablefil[]; extern char annfil[]; -extern char timestampfil[]; extern char teldir[]; extern char telfil[]; diff --git a/include/plane.h b/include/plane.h index 4daf06f8..f01a2c60 100644 --- a/include/plane.h +++ b/include/plane.h @@ -73,7 +73,7 @@ struct plnstr { signed char pln_harden; /* for missiles */ signed char pln_nuketype; /* type of nuclear armament (if any) */ signed char pln_flags; /* State of the plane */ - time_t pln_access; /* Last time mob was updated (MOB_ACCESS) */ + short pln_access; /* Last tick mob was updated (MOB_ACCESS) */ time_t pln_timestamp; /* Last time this plane was touched */ float pln_theta; /* position in orbital sine wave */ }; diff --git a/include/prototypes.h b/include/prototypes.h index 72ddaaa8..f1b6bb28 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -161,7 +161,6 @@ int mark(void); int mine(void); int mission(void); int mobq(void); -int mobupdate(void); int morale(void); int move(void); int multifire(void); @@ -736,12 +735,10 @@ extern int prod_land(int, int, struct bp *, int); /* material.c */ /* in budg.h */ /* mobility.c */ -extern void mob_sect(int); -extern void mob_ship(int); -extern void mob_land(int); -extern void mob_plane(int); -extern void update_all_mob(void); -extern void update_timestamps(time_t offset); +extern void mob_sect(void); +extern void mob_ship(void); +extern void mob_land(void); +extern void mob_plane(void); extern void sct_do_upd_mob(struct sctstr *sp); extern void shp_do_upd_mob(struct shpstr *sp); extern void lnd_do_upd_mob(struct lndstr *lp); diff --git a/include/sect.h b/include/sect.h index 05f6907b..49fbb50b 100644 --- a/include/sect.h +++ b/include/sect.h @@ -82,7 +82,7 @@ struct sctstr { unsigned char sct_che; /* number of guerrillas */ natid sct_che_target; /* nation targeted by che */ unsigned short sct_fallout; - time_t sct_access; /* Last time mob was updated (MOB_ACCESS) */ + short sct_access; /* Last tick mob was updated (MOB_ACCESS) */ unsigned char sct_road; /* Road value of a sector */ unsigned char sct_rail; /* Rail value of a sector */ unsigned char sct_defense; /* Defensive value of a sector */ diff --git a/include/server.h b/include/server.h index 9f9b1684..fd2c0cfd 100644 --- a/include/server.h +++ b/include/server.h @@ -40,9 +40,7 @@ extern int shutdown_pending; extern int update_pending; extern empth_rwlock_t *update_lock; extern time_t update_time[]; -extern int updating_mob; -void mobility_init(void); void market_init(void); void update_main(void); void update_init(void); @@ -52,7 +50,6 @@ int shutdown_initiate(int); /* thread entry points */ void delete_lostitems(void *); -void mobility_check(void *); void player_kill_idle(void *); #endif diff --git a/include/ship.h b/include/ship.h index 44bbc02e..5bf100e1 100644 --- a/include/ship.h +++ b/include/ship.h @@ -93,7 +93,7 @@ struct shpstr { short shp_item[I_MAX+1]; /* amount of items on board */ short shp_pstage; /* plague stage */ short shp_ptime; /* how many etus remain in this stage */ - time_t shp_access; /* Last time mob was updated (MOB_ACCESS) */ + short shp_access; /* Last tick mob was updated (MOB_ACCESS) */ time_t shp_timestamp; /* Last time this ship was touched. */ unsigned char shp_mobquota; /* mobility quota */ char shp_path[MAXSHPPATH]; diff --git a/info/mobupdate.t b/info/mobupdate.t deleted file mode 100644 index b8c50772..00000000 --- a/info/mobupdate.t +++ /dev/null @@ -1,14 +0,0 @@ -.TH Command MOBUPDATE -.NA mobupdate "turn on/off mobility updating" -.LV Expert -.SY "mobupdate " -The mobupdate command will disable mobility updating for 'X' minutes. -Note that this only works if the MOB_ACCESS option has been enabled. -.s1 -Using this command with 0 minutes will turn mobility updating back on. -.s1 -Using this command with 'check' or a negative amount of minutes will -tell you when the mobility updating will be turned back on if it is -off, or that it is on if it is on. -.s1 -.SA "update, Deity" diff --git a/src/lib/commands/buil.c b/src/lib/commands/buil.c index 4f5e94cd..050413b6 100644 --- a/src/lib/commands/buil.c +++ b/src/lib/commands/buil.c @@ -36,6 +36,7 @@ #include #include "commands.h" +#include "game.h" #include "land.h" #include "lost.h" #include "map.h" @@ -353,7 +354,7 @@ build_ship(struct sctstr *sp, struct mchrstr *mp, short *vec, int tlev) ship.shp_type = mp - mchr; ship.shp_effic = SHIP_MINEFF; if (opt_MOB_ACCESS) { - time(&ship.shp_access); + game_tick_to_now(&ship.shp_access); ship.shp_mobil = -(etu_per_update / sect_mob_neg_factor); } else { ship.shp_mobil = 0; @@ -478,7 +479,7 @@ build_land(struct sctstr *sp, struct lchrstr *lp, short *vec, int tlev) land.lnd_type = lp - lchr; land.lnd_effic = LAND_MINEFF; if (opt_MOB_ACCESS) { - time(&land.lnd_access); + game_tick_to_now(&land.lnd_access); land.lnd_mobil = -(etu_per_update / sect_mob_neg_factor); } else { land.lnd_mobil = 0; @@ -610,7 +611,7 @@ build_bridge(struct sctstr *sp, short *vec) sect.sct_rail = 0; sect.sct_defense = 0; if (opt_MOB_ACCESS) { - time(§.sct_access); + game_tick_to_now(§.sct_access); sect.sct_mobil = -(etu_per_update / sect_mob_neg_factor); } else { sect.sct_mobil = 0; @@ -775,7 +776,7 @@ build_plane(struct sctstr *sp, struct plchrstr *pp, short *vec, int tlev) plane.pln_type = pp - plchr; plane.pln_effic = PLANE_MINEFF; if (opt_MOB_ACCESS) { - time(&plane.pln_access); + game_tick_to_now(&plane.pln_access); plane.pln_mobil = -(etu_per_update / sect_mob_neg_factor); } else { plane.pln_mobil = 0; @@ -902,7 +903,7 @@ build_tower(struct sctstr *sp, short *vec) sect.sct_rail = 0; sect.sct_defense = 0; if (opt_MOB_ACCESS) { - time(§.sct_access); + game_tick_to_now(§.sct_access); sect.sct_mobil = -(etu_per_update / sect_mob_neg_factor); } else { sect.sct_mobil = 0; diff --git a/src/lib/commands/expl.c b/src/lib/commands/expl.c index 83c68cda..9c21a22b 100644 --- a/src/lib/commands/expl.c +++ b/src/lib/commands/expl.c @@ -34,6 +34,7 @@ #include #include "commands.h" +#include "game.h" #include "item.h" #include "map.h" #include "optlist.h" @@ -251,7 +252,7 @@ explore(void) pr("Sector %s is now yours.\n", xyas(sect.sct_x, sect.sct_y, player->cnum)); if (opt_MOB_ACCESS) { - time(§.sct_access); + game_tick_to_now(§.sct_access); sect.sct_mobil = -(etu_per_update / sect_mob_neg_factor); } else { sect.sct_mobil = 0; diff --git a/src/lib/commands/mobu.c b/src/lib/commands/mobu.c deleted file mode 100644 index 2bbb7e1d..00000000 --- a/src/lib/commands/mobu.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Empire - A multi-player, client/server Internet based war game. - * Copyright (C) 1986-2007, Dave Pare, Jeff Bailey, Thomas Ruschak, - * Ken Stevens, Steve McClure - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * --- - * - * See files README, COPYING and CREDITS in the root of the source - * tree for related information and legal notices. It is expected - * that future projects/authors will amend these files as needed. - * - * --- - * - * mobu.c: Adjust mobility updating - * - * Known contributors to this file: - * Steve McClure, 1996 - */ - -#include - -#include "commands.h" -#include "optlist.h" -#include "path.h" -#include "server.h" - -int -mobupdate(void) -{ - FILE *fp; - long minites; - struct mob_acc_globals timestamps; - time_t now; - - if (!opt_MOB_ACCESS) { - pr("Command invalid - MOB_ACCESS is not enabled.\n"); - return RET_FAIL; - } - if (!player->argp[1]) - return RET_SYN; - if (*player->argp[1] == 'c') - minites = -1; - else - minites = atol(player->argp[1]) * 60; - time(&now); - if ((fp = fopen(timestampfil, "rb+")) == NULL) { - logerror("Unable to edit timestamp file."); - } else { - rewind(fp); - fread(×tamps, sizeof(timestamps), 1, fp); - if (minites < 0) { - fclose(fp); - if (updating_mob) - pr("Mobility updating is enabled."); - else { - pr("Mobility updating will come back on around %s", - ctime(×tamps.starttime)); - pr("within 3 minutes, depending on when the server checks."); - } - return 0; - } - timestamps.timestamp = now; - timestamps.starttime = now + minites; - rewind(fp); - fwrite(×tamps, sizeof(timestamps), 1, fp); - fclose(fp); - if (now >= timestamps.starttime) { - pr("Turning on mobility updating."); - update_all_mob(); - updating_mob = 1; - } else if (updating_mob == 1) { - pr("Turning off mobility updating.\n"); - pr("Mobility updating will come back on around %s", - ctime(×tamps.starttime)); - pr("within 3 minutes, depending on when the server checks."); - update_all_mob(); - updating_mob = 0; - } else if (updating_mob == 0) { - pr("Mobility updating is already off.\n"); - pr("Mobility updating will come back on around %s", - ctime(×tamps.starttime)); - pr("within 3 minutes, depending on when the server checks."); - } - } - - return 0; -} diff --git a/src/lib/commands/trad.c b/src/lib/commands/trad.c index 5c04475e..182d329a 100644 --- a/src/lib/commands/trad.c +++ b/src/lib/commands/trad.c @@ -396,12 +396,12 @@ check_trade(void) /* no cheap version of fly */ if (opt_MOB_ACCESS) { tg.plane.pln_mobil = -(etu_per_update / sect_mob_neg_factor); + game_tick_to_now(&tg.plane.pln_access); } else { tg.plane.pln_mobil = 0; } tg.plane.pln_mission = 0; tg.plane.pln_harden = 0; - time(&tg.plane.pln_access); tg.plane.pln_ship = -1; tg.plane.pln_land = -1; break; @@ -426,11 +426,11 @@ check_trade(void) /* no cheap version of fly */ if (opt_MOB_ACCESS) { tg.land.lnd_mobil = -(etu_per_update / sect_mob_neg_factor); + game_tick_to_now(&tg.land.lnd_access); } else { tg.land.lnd_mobil = 0; } tg.land.lnd_harden = 0; - time(&tg.land.lnd_access); tg.land.lnd_mission = 0; /* Drop any land units this unit was carrying */ snxtitem_xy(&ni, EF_LAND, tg.land.lnd_x, tg.land.lnd_y); diff --git a/src/lib/commands/upda.c b/src/lib/commands/upda.c index d66a579c..cf1dde74 100644 --- a/src/lib/commands/upda.c +++ b/src/lib/commands/upda.c @@ -45,26 +45,8 @@ int upda(void) { FILE *fp; - struct mob_acc_globals timestamps; time_t now, next, stop; - if (opt_MOB_ACCESS) { - if ((fp = fopen(timestampfil, "rb")) == NULL) - logerror("Unable to open timestamp file."); - else { - rewind(fp); - fread(×tamps, sizeof(timestamps), 1, fp); - fclose(fp); - if (updating_mob) - pr("Mobility updating is enabled.\n\n"); - else { - pr("Mobility updating will come back on around %s", - ctime(×tamps.starttime)); - pr("game time, within 3 minutes, depending on when the server checks.\n\n"); - } - } - } - if (updates_disabled()) pr("UPDATES ARE DISABLED!\n"); diff --git a/src/lib/commands/upgr.c b/src/lib/commands/upgr.c index d3fa0917..0e0fb8e9 100644 --- a/src/lib/commands/upgr.c +++ b/src/lib/commands/upgr.c @@ -137,7 +137,6 @@ lupgr(void) lnd_set_tech(&land, tlev); land.lnd_harden = 0; land.lnd_mission = 0; - time(&land.lnd_access); putland(land.lnd_uid, &land); putsect(§); @@ -220,7 +219,6 @@ supgr(void) ship.shp_effic -= UPGR_EFF; shp_set_tech(&ship, tlev); ship.shp_mission = 0; - time(&ship.shp_access); putship(ship.shp_uid, &ship); putsect(§); @@ -308,7 +306,6 @@ pupgr(void) pln_set_tech(&plane, tlev); plane.pln_harden = 0; plane.pln_mission = 0; - time(&plane.pln_access); putplane(plane.pln_uid, &plane); putsect(§); diff --git a/src/lib/global/nsc.c b/src/lib/global/nsc.c index 71d252d6..0e1ca3ea 100644 --- a/src/lib/global/nsc.c +++ b/src/lib/global/nsc.c @@ -142,7 +142,7 @@ struct castr sect_ca[] = { {NSC_NATID, NSC_DEITY, 0, fldoff(sctstr, sct_che_target), "che_target", EF_NATION}, {NSC_USHORT, 0, 0, fldoff(sctstr, sct_fallout), "fallout", EF_BAD}, - {NSC_TIME, 0, 0, fldoff(sctstr, sct_access), "access", EF_BAD}, + {NSC_SHORT, 0, 0, fldoff(sctstr, sct_access), "access", EF_BAD}, {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_road), "road", EF_BAD}, {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_rail), "rail", EF_BAD}, {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_defense), "dfense", EF_BAD}, @@ -211,7 +211,7 @@ struct castr ship_ca[] = { {NSC_SHORT, NSC_DEITY, 0, fldoff(shpstr, shp_pstage), "pstage", EF_PLAGUE_STAGES}, {NSC_SHORT, NSC_DEITY, 0, fldoff(shpstr, shp_ptime), "ptime", EF_BAD}, - {NSC_TIME, 0, 0, fldoff(shpstr, shp_access), "access", EF_BAD}, + {NSC_SHORT, 0, 0, fldoff(shpstr, shp_access), "access", EF_BAD}, {NSC_TIME, NSC_EXTRA, 0, fldoff(shpstr, shp_timestamp), "timestamp", EF_BAD}, {NSC_UCHAR, 0, 0, fldoff(shpstr, shp_mobquota), "mquota", EF_BAD}, @@ -271,7 +271,7 @@ struct castr plane_ca[] = { {NSC_CHAR, 0, 0, fldoff(plnstr, pln_nuketype), "nuketype", EF_BAD}, {NSC_CHAR, NSC_BITS, 0, fldoff(plnstr, pln_flags), "flags", EF_PLANE_FLAGS}, - {NSC_TIME, 0, 0, fldoff(plnstr, pln_access), "access", EF_BAD}, + {NSC_SHORT, 0, 0, fldoff(plnstr, pln_access), "access", EF_BAD}, {NSC_TIME, NSC_EXTRA, 0, fldoff(plnstr, pln_timestamp), "timestamp", EF_BAD}, {NSC_FLOAT, 0, 0, fldoff(plnstr, pln_theta), "theta", EF_BAD}, @@ -316,7 +316,7 @@ struct castr land_ca[] = { {NSC_SHORT, NSC_DEITY, 0, fldoff(lndstr, lnd_ptime), "ptime", EF_BAD}, {NSC_SHORT, 0, 0, fldoff(lndstr, lnd_land), "land", EF_BAD}, {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_nland), "nland", EF_BAD}, - {NSC_TIME, 0, 0, fldoff(lndstr, lnd_access), "access", EF_BAD}, + {NSC_SHORT, 0, 0, fldoff(lndstr, lnd_access), "access", EF_BAD}, {NSC_FLOAT, NSC_EXTRA, 0, fldoff(lndstr, lnd_att), "att", EF_BAD}, {NSC_FLOAT, NSC_EXTRA, 0, fldoff(lndstr, lnd_def), "def", EF_BAD}, {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_vul), "vul", EF_BAD}, diff --git a/src/lib/global/path.c.in b/src/lib/global/path.c.in index fddee11b..14cd9121 100644 --- a/src/lib/global/path.c.in +++ b/src/lib/global/path.c.in @@ -69,7 +69,6 @@ char downfil[] = "down"; char disablefil[] = "disable"; char telfil[] = "tel/tel"; char annfil[] = "ann"; -char timestampfil[] = "timestamp"; char *listen_addr = ""; char *loginport = "@EMPIREPORT@"; diff --git a/src/lib/player/empmod.c b/src/lib/player/empmod.c index 341df73d..d2fcc12c 100644 --- a/src/lib/player/empmod.c +++ b/src/lib/player/empmod.c @@ -157,7 +157,6 @@ struct cmndstr player_coms[] = { {"mine ", 2, mine, C_MOD, NORM + MONEY + CAP}, {"mission []", 2, mission, C_MOD, NORM + CAP}, - {"mobupdate ", 0, mobupdate, C_MOD, GOD}, {"morale ", 1, morale, C_MOD, NORM + CAP}, {"motd", 0, show_motd, C_MOD, VIS}, {"move ", diff --git a/src/lib/subs/bsanct.c b/src/lib/subs/bsanct.c index cf6efc4f..8fac859d 100644 --- a/src/lib/subs/bsanct.c +++ b/src/lib/subs/bsanct.c @@ -34,6 +34,7 @@ #include #include "file.h" +#include "game.h" #include "news.h" #include "player.h" #include "prototypes.h" @@ -64,7 +65,7 @@ bsanct(void) s.sct_type = SCT_HIWAY; s.sct_newtype = SCT_HIWAY; } - time(&s.sct_access); + game_tick_to_now(&s.sct_access); (void)putsect(&s); count++; } diff --git a/src/lib/subs/takeover.c b/src/lib/subs/takeover.c index 807bfb84..148fd68e 100644 --- a/src/lib/subs/takeover.c +++ b/src/lib/subs/takeover.c @@ -36,6 +36,7 @@ #include #include "file.h" +#include "game.h" #include "land.h" #include "lost.h" #include "misc.h" @@ -162,7 +163,7 @@ takeover(struct sctstr *sp, natid newown) makenotlost(EF_SECTOR, newown, 0, sp->sct_x, sp->sct_y); sp->sct_own = newown; if (opt_MOB_ACCESS) { - time(&sp->sct_access); + game_tick_to_now(&sp->sct_access); sp->sct_mobil = -(etu_per_update / sect_mob_neg_factor); } else { sp->sct_mobil = 0; @@ -231,8 +232,6 @@ takeover_ship(struct shpstr *sp, natid newown, int hostile) sp->shp_mission = 0; sp->shp_fleet = 0; sp->shp_rflags = 0; - /* Keep track of when this was taken over */ - time(&sp->shp_access); memset(sp->shp_rpath, 0, sizeof(sp->shp_rpath)); pp = &p; lp = &llp; @@ -248,8 +247,8 @@ takeover_ship(struct shpstr *sp, natid newown, int hostile) pp->pln_effic = PLANE_MINEFF; } pp->pln_mobil = 0; - /* Keep track of when this was taken over */ - time(&pp->pln_access); + if (opt_MOB_ACCESS) + game_tick_to_now(&pp->pln_access); if (opt_MARKET) trdswitchown(EF_PLANE, pp, newown); pp->pln_mission = 0; @@ -286,9 +285,9 @@ takeover_land(struct lndstr *landp, natid newown, int hostile) } landp->lnd_army = 0; landp->lnd_mobil = 0; + if (opt_MOB_ACCESS) + game_tick_to_now(&landp->lnd_access); landp->lnd_harden = 0; - /* Keep track of when this was taken over */ - time(&landp->lnd_access); if (opt_MARKET) trdswitchown(EF_LAND, landp, newown); landp->lnd_mission = 0; @@ -311,8 +310,8 @@ takeover_land(struct lndstr *landp, natid newown, int hostile) pp->pln_effic = PLANE_MINEFF; } pp->pln_mobil = 0; - /* Keep track of when this was taken over */ - time(&pp->pln_access); + if (opt_MOB_ACCESS) + game_tick_to_now(&pp->pln_access); if (opt_MARKET) trdswitchown(EF_PLANE, pp, newown); pp->pln_mission = 0; diff --git a/src/lib/update/main.c b/src/lib/update/main.c index 7b555c02..09f20ea9 100644 --- a/src/lib/update/main.c +++ b/src/lib/update/main.c @@ -67,10 +67,10 @@ update_main(void) /* First, make sure all mobility is updated correctly. */ if (opt_MOB_ACCESS) { - mob_ship(etu); - mob_sect(etu); - mob_plane(etu); - mob_land(etu); + mob_ship(); + mob_sect(); + mob_plane(); + mob_land(); } if (opt_AUTO_POWER) @@ -155,10 +155,10 @@ update_main(void) /* Only update mobility for non-MOB_ACCESS here, since it doesn't get done for MOB_ACCESS anyway during the update */ if (!opt_MOB_ACCESS) { - mob_ship(etu); - mob_sect(etu); - mob_plane(etu); - mob_land(etu); + mob_ship(); + mob_sect(); + mob_plane(); + mob_land(); } if (update_demand == UPD_DEMAND_SCHED || update_demand == UPD_DEMAND_ASYNC) diff --git a/src/lib/update/mobility.c b/src/lib/update/mobility.c index 4a3bc5a1..59f01bf3 100644 --- a/src/lib/update/mobility.c +++ b/src/lib/update/mobility.c @@ -34,133 +34,37 @@ #include +#include "game.h" #include "land.h" #include "plane.h" #include "server.h" #include "ship.h" #include "update.h" - -int updating_mob = 1; - -static int timestamp_fixing; -static int do_upd_checking = 0; +static int do_upd_checking; static void do_mob_land(struct lndstr *, int); static void do_mob_plane(struct plnstr *, int); static void do_mob_sect(struct sctstr *sp, int etus); static void do_mob_ship(struct shpstr *, int); -static int -increase_mob(time_t *counter, float mult) -{ - time_t secs; - time_t now; - time_t left; - int newetus; - float newmob; - int inewmob; - - time(&now); - - secs = now - *counter; - if (secs < 1 || secs < s_p_etu) - return 0; - newetus = (int)(secs / s_p_etu); - if (newetus < 1) - return 0; - left = (secs % s_p_etu); - do { - newmob = newetus * mult; - inewmob = (int)newmob; - if (newmob == inewmob || newetus > 7) - break; - newetus--; - left += s_p_etu; - } while (newetus > 0); - if (newetus <= 0) - return 0; - - *counter = now - left; - - if (updating_mob) - return newetus; - return 0; -} - -void -update_timestamps(time_t lastsavedtime) -{ - struct shpstr *shipp; - struct sctstr *sectp; - struct lndstr *landp; - struct plnstr *planep; - int n; - time_t now; - time_t delta; - - timestamp_fixing = 1; - time(&now); - delta = now - lastsavedtime; - for (n = 0; (shipp = getshipp(n)); n++) - shipp->shp_access += delta; - for (n = 0; (sectp = getsectid(n)); n++) - sectp->sct_access += delta; - for (n = 0; (landp = getlandp(n)); n++) - landp->lnd_access += delta; - for (n = 0; (planep = getplanep(n)); n++) - planep->pln_access += delta; - timestamp_fixing = 0; -} - -void -update_all_mob(void) -{ - struct shpstr *shipp; - struct sctstr *sectp; - struct lndstr *landp; - struct plnstr *planep; - int n; - - n = 0; - while (1) { - do_upd_checking = 1; - shipp = getshipp(n); - sectp = getsectid(n); - landp = getlandp(n); - planep = getplanep(n); - do_upd_checking = 0; - if (shipp) - shp_do_upd_mob(shipp); - if (sectp) - sct_do_upd_mob(sectp); - if (landp) - lnd_do_upd_mob(landp); - if (planep) - pln_do_upd_mob(planep); - if (!shipp && !sectp && !landp && !planep) - break; - n++; - } - do_upd_checking = 0; -} - void sct_do_upd_mob(struct sctstr *sp) { int etus; - if (do_upd_checking || timestamp_fixing || update_pending) + if (do_upd_checking || update_pending) return; if (sp->sct_own == 0) return; if (sp->sct_type == SCT_SANCT) return; - if ((etus = increase_mob(&sp->sct_access, sect_mob_scale)) == 0) + etus = game_tick_to_now(&sp->sct_access); + if (etus == 0) return; - do_upd_checking = 1; + + do_upd_checking = 1; /* avoid recursion */ do_mob_sect(sp, etus); -/* putsect(sp);*/ do_upd_checking = 0; } @@ -169,13 +73,15 @@ shp_do_upd_mob(struct shpstr *sp) { int etus; - if (do_upd_checking || timestamp_fixing || update_pending) + if (do_upd_checking || update_pending) return; if (sp->shp_own == 0) return; - if ((etus = increase_mob(&sp->shp_access, ship_mob_scale)) == 0) + etus = game_tick_to_now(&sp->shp_access); + if (etus == 0) return; - do_upd_checking = 1; + + do_upd_checking = 1; /* avoid recursion */ do_mob_ship(sp, etus); do_upd_checking = 0; } @@ -185,14 +91,15 @@ lnd_do_upd_mob(struct lndstr *lp) { int etus; - if (do_upd_checking || timestamp_fixing || update_pending) + if (do_upd_checking || update_pending) return; if (lp->lnd_own == 0) return; - if ((etus = increase_mob(&lp->lnd_access, land_mob_scale)) == 0) + etus = game_tick_to_now(&lp->lnd_access); + if (etus == 0) return; - do_upd_checking = 1; + do_upd_checking = 1; /* avoid recursion */ do_mob_land(lp, etus); do_upd_checking = 0; } @@ -202,32 +109,34 @@ pln_do_upd_mob(struct plnstr *pp) { int etus; - if (do_upd_checking || timestamp_fixing || update_pending) + if (do_upd_checking || update_pending) return; if (pp->pln_own == 0) return; - if ((etus = increase_mob(&pp->pln_access, plane_mob_scale)) == 0) + etus = game_tick_to_now(&pp->pln_access); + if (etus == 0) return; - do_upd_checking = 1; + do_upd_checking = 1; /* avoid recursion */ do_mob_plane(pp, etus); do_upd_checking = 0; } void -mob_sect(int etus) +mob_sect(void) { struct sctstr *sp; - int n; + int n, etus; time_t now; time(&now); for (n = 0; NULL != (sp = getsectid(n)); n++) { sp->sct_timestamp = now; if (opt_MOB_ACCESS) - sct_do_upd_mob(sp); + etus = game_reset_tick(&sp->sct_access); else - do_mob_sect(sp, etus); + etus = etu_per_update; + do_mob_sect(sp, etus); } } @@ -236,6 +145,9 @@ do_mob_sect(struct sctstr *sp, int etus) { int value; + if (CANT_HAPPEN(etus < 0)) + etus = 0; + if (sp->sct_own == 0) return; if (sp->sct_type == SCT_SANCT) @@ -248,19 +160,20 @@ do_mob_sect(struct sctstr *sp, int etus) } void -mob_ship(int etus) +mob_ship(void) { struct shpstr *sp; - int n; + int n, etus; time_t now; time(&now); for (n = 0; NULL != (sp = getshipp(n)); n++) { sp->shp_timestamp = now; if (opt_MOB_ACCESS) - shp_do_upd_mob(sp); + etus = game_reset_tick(&sp->shp_access); else - do_mob_ship(sp, etus); + etus = etu_per_update; + do_mob_ship(sp, etus); } } @@ -272,6 +185,9 @@ do_mob_ship(struct shpstr *sp, int etus) int can_add, have_fuel_for, total_add; double d; + if (CANT_HAPPEN(etus < 0)) + etus = 0; + if (sp->shp_own == 0) return; @@ -344,19 +260,20 @@ do_mob_ship(struct shpstr *sp, int etus) } void -mob_land(int etus) +mob_land(void) { struct lndstr *lp; - int n; + int n, etus; time_t now; time(&now); for (n = 0; NULL != (lp = getlandp(n)); n++) { lp->lnd_timestamp = now; if (opt_MOB_ACCESS) - lnd_do_upd_mob(lp); + etus = game_reset_tick(&lp->lnd_access); else - do_mob_land(lp, etus); + etus = etu_per_update; + do_mob_land(lp, etus); } } @@ -368,6 +285,9 @@ do_mob_land(struct lndstr *lp, int etus) int can_add, have_fuel_for, total_add; double d; + if (CANT_HAPPEN(etus < 0)) + etus = 0; + if (lp->lnd_own == 0) return; @@ -453,19 +373,20 @@ do_mob_land(struct lndstr *lp, int etus) } void -mob_plane(int etus) +mob_plane(void) { struct plnstr *pp; - int n; + int n, etus; time_t now; time(&now); for (n = 0; NULL != (pp = getplanep(n)); n++) { pp->pln_timestamp = now; if (opt_MOB_ACCESS) - pln_do_upd_mob(pp); + etus = game_reset_tick(&pp->pln_access); else - do_mob_plane(pp, etus); + etus = etu_per_update; + do_mob_plane(pp, etus); } } @@ -474,6 +395,9 @@ do_mob_plane(struct plnstr *pp, int etus) { int value; + if (CANT_HAPPEN(etus < 0)) + etus = 0; + if (pp->pln_own == 0) return; diff --git a/src/server/main.c b/src/server/main.c index 63a47a89..637dbe4d 100644 --- a/src/server/main.c +++ b/src/server/main.c @@ -298,11 +298,6 @@ init_server(void) init_nreport(); loginit("server"); - - if (opt_MOB_ACCESS) { - /* This fixes up mobility upon restart */ - mobility_init(); - } } /* @@ -329,10 +324,6 @@ start_server(int flags) "KillIdle", 0); empth_create(PP_TIMESTAMP, delete_lostitems, (50 * 1024), flags, "DeleteItems", 0); - if (opt_MOB_ACCESS) { - empth_create(PP_TIMESTAMP, mobility_check, (50 * 1024), flags, - "MobilityCheck", 0); - } market_init(); update_init(); diff --git a/src/server/timestamp.c b/src/server/timestamp.c deleted file mode 100644 index e37950a6..00000000 --- a/src/server/timestamp.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Empire - A multi-player, client/server Internet based war game. - * Copyright (C) 1986-2007, Dave Pare, Jeff Bailey, Thomas Ruschak, - * Ken Stevens, Steve McClure - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * --- - * - * See files README, COPYING and CREDITS in the root of the source - * tree for related information and legal notices. It is expected - * that future projects/authors will amend these files as needed. - * - * --- - * - * timestamp.c: Timestamp writer/maintainer thread - * - * Known contributors to this file: - * Steve McClure, 1996 - * Doug Hay, 1998 - */ - -#include - -#include -#include -#include "empthread.h" -#include "misc.h" -#include "optlist.h" -#include "prototypes.h" -#include "server.h" - -/*ARGSUSED*/ -void -mobility_check(void *unused) -{ - struct mob_acc_globals timestamps; - time_t now; - FILE *fp; - - while (1) { - time(&now); -/* logerror("Updating timestamp file at %s", ctime(&now));*/ - if ((fp = fopen(timestampfil, "rb+")) == NULL) { - logerror("Unable to edit timestamp file."); - continue; - } - rewind(fp); - fread(×tamps, sizeof(timestamps), 1, fp); - timestamps.timestamp = now; - rewind(fp); - fwrite(×tamps, sizeof(timestamps), 1, fp); - fclose(fp); - if (!gamehours(now)) { - if (updating_mob == 1) { - update_all_mob(); - logerror("Turning off mobility updating (gamehours)."); - updating_mob = 0; - } - } else if (updating_mob == 1 && now < timestamps.starttime) { - logerror("Turning off mobility updating at %s", ctime(&now)); - update_all_mob(); - updating_mob = 0; - } else if (updating_mob == 0 && now >= timestamps.starttime) { - logerror("Turning on mobility updating at %s", ctime(&now)); - update_all_mob(); - updating_mob = 1; - } - now = now + 180; /* Every 3 minutes */ - empth_sleep(now); - - } - /*NOTREACHED*/ -} - -void -mobility_init(void) -{ - struct mob_acc_globals timestamps; - time_t now; - time_t lastsavedtime; - FILE *fp; - - /* During downtime, we don't want mobility to accrue. So, we look - at the timestamp file, and determine how far forward to push - mobility */ - - time(&now); - if ((fp = fopen(timestampfil, "rb+")) == NULL) { - logerror("Unable to edit timestamp file."); - /* FIXME safe to continue? */ - } else { - rewind(fp); - fread(×tamps, sizeof(timestamps), 1, fp); - lastsavedtime = timestamps.timestamp; - timestamps.timestamp = now; - rewind(fp); - fwrite(×tamps, sizeof(timestamps), 1, fp); - fclose(fp); - } - time(&now); - logerror("Adjusting timestamps at %s", ctime(&now)); - logerror("(was %s)", ctime(&lastsavedtime)); - /* Update the timestamps to this point in time */ - update_timestamps(lastsavedtime); - time(&now); - logerror("Done at %s", ctime(&now)); - - if (now >= timestamps.starttime && gamehours(now)) { - logerror("Turning on mobility updating."); - updating_mob = 1; - } else { - logerror("Turning off mobility updating."); - updating_mob = 0; - } -} diff --git a/src/util/files.c b/src/util/files.c index 01a44b15..c6acdca4 100644 --- a/src/util/files.c +++ b/src/util/files.c @@ -186,7 +186,6 @@ main(int argc, char *argv[]) filename = mailbox(buf, x); close(creat(filename, S_IRWUG)); } - close(creat(timestampfil, S_IRWUG)); close(creat(annfil, S_IRWUG)); /* create a zero-filled sector file */