Factor out gamehours and max minutes per day checks

Combine the checks from player_main(), command() and status() into
may_play_now().
This commit is contained in:
Ron Koenderink 2009-02-01 06:29:57 -06:00
parent a499a5d8f2
commit d1ff2a6089
3 changed files with 26 additions and 33 deletions

View file

@ -369,6 +369,8 @@ extern int gamedown(void);
extern void update_timeused_login(time_t now); extern void update_timeused_login(time_t now);
extern void update_timeused(time_t now); extern void update_timeused(time_t now);
extern void enforce_minimum_session_time(void); extern void enforce_minimum_session_time(void);
extern int may_play_now(struct natstr *natp, time_t current_time,
int suppress_deity_message);
/* more under Commands */ /* more under Commands */
/* empmod.c */ /* empmod.c */
/* init_nats.c */ /* init_nats.c */

View file

@ -265,3 +265,24 @@ enforce_minimum_session_time(void)
natp->nat_timeused += 15 - dt; natp->nat_timeused += 15 - dt;
putnat(natp); putnat(natp);
} }
int
may_play_now(struct natstr *natp, time_t now,
int suppress_deity_message)
{
update_timeused(now);
if (!gamehours(now)) {
if (natp->nat_stat != STAT_GOD || !suppress_deity_message)
pr("Empire hours restriction in force\n");
if (natp->nat_stat != STAT_GOD)
return 0;
}
if ((natp->nat_stat == STAT_ACTIVE || natp->nat_stat == STAT_SANCT)
&& natp->nat_timeused > m_m_p_d * 60) {
pr("Max minutes per day limit exceeded.\n");
return 0;
}
return 1;
}

View file

@ -72,16 +72,8 @@ player_main(struct player *p)
return; return;
} }
natp = getnatp(player->cnum); natp = getnatp(player->cnum);
if (!gamehours(player->curup)) { if (!may_play_now(natp, player->curup, 0))
pr("Empire hours restriction in force\n");
if (natp->nat_stat != STAT_GOD)
return; return;
}
if ((natp->nat_stat == STAT_ACTIVE || natp->nat_stat == STAT_SANCT)
&& natp->nat_timeused > m_m_p_d * 60) {
pr("Max minutes per day limit exceeded.\n");
return;
}
if (natp->nat_stat != STAT_VIS if (natp->nat_stat != STAT_VIS
&& natp->nat_last_login && natp->nat_last_login
&& (strcmp(natp->nat_hostaddr, player->hostaddr) && (strcmp(natp->nat_hostaddr, player->hostaddr)
@ -128,25 +120,12 @@ command(void)
{ {
char *redir; /* UTF-8 */ char *redir; /* UTF-8 */
char scanspace[1024]; char scanspace[1024];
time_t now;
struct natstr *natp;
if (getcommand(player->combuf) < 0) if (getcommand(player->combuf) < 0)
return 0; return 0;
now = time(NULL); if (!may_play_now(getnatp(player->cnum), time(NULL), 1))
update_timeused(now);
natp = getnatp(player->cnum);
if (!gamehours(player->curup))
if (natp->nat_stat != STAT_GOD) {
pr("Empire hours restriction in force\n");
return 0; return 0;
}
if ((natp->nat_stat == STAT_ACTIVE || natp->nat_stat == STAT_SANCT)
&& natp->nat_timeused > m_m_p_d * 60) {
pr("Max minutes per day limit exceeded.\n");
return 0;
}
if (parse(player->combuf, scanspace, player->argp, player->comtail, if (parse(player->combuf, scanspace, player->argp, player->comtail,
&player->condarg, &redir) < 0) { &player->condarg, &redir) < 0) {
@ -192,17 +171,8 @@ status(void)
pr("You are no longer broke!\n"); pr("You are no longer broke!\n");
time(&player->curup); time(&player->curup);
update_timeused(player->curup); if (!may_play_now(natp, player->curup, 0))
if (!gamehours(player->curup)) {
pr("Empire hours restriction in force\n");
if (natp->nat_stat != STAT_GOD)
return 0; return 0;
}
if ((natp->nat_stat == STAT_ACTIVE || natp->nat_stat == STAT_SANCT)
&& natp->nat_timeused > m_m_p_d * 60) {
pr("Max minutes per day limit exceeded.\n");
return 0;
}
if (player->btused) { if (player->btused) {
natp->nat_btu -= player->btused; natp->nat_btu -= player->btused;
player->btused = 0; player->btused = 0;