X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/19795233b83fc0caf6c5c1a5b434b362d01655c8..1f8a5387bcfe3f34d29a1a58c8f5132bbd165ec7:/gameserv/gameserv.cpp diff --git a/gameserv/gameserv.cpp b/gameserv/gameserv.cpp index 1dfac73..5ff6a75 100644 --- a/gameserv/gameserv.cpp +++ b/gameserv/gameserv.cpp @@ -54,7 +54,7 @@ bool check_password(char *name, char *plaintext); // Finds a password for the gi bool shuttingdown; bool timedOut(Player *p); -void updateTS(Player *p); +void updateTS(Player *p); void timeOutEvent(Player *p); bool is_playing(char *u); // True if the given nickname in the clients list is playing. @@ -94,6 +94,7 @@ void delete_masters(); void do_admin(char *u); void do_attack(char *u); void do_bank(char *u); +void do_check(char *u); void do_fight(char *u); void do_heal(char *u); void do_help(char *u); @@ -158,22 +159,6 @@ void gameserv(char *source, char *buf) log("Source: %s Command: %s", source, cmd); #endif - struct tm *tm; - time_t ti; - time(&ti); - tm = localtime(&ti); - - int curday = tm->tm_mday; - - if (curday != day) - { - refreshall(); - clearNews(todaysnews); - saveNews(newsdata, todaysnews); - day = curday; - save_day(); // here i come to save the day! - } - if (strnicmp(cmd, "\1PING", 6) == 0) { char *ts; @@ -193,6 +178,8 @@ void gameserv(char *source, char *buf) do_fight(source); } else if (stricmp(cmd, "ATTACK") == 0) { do_attack(source); + } else if (stricmp(cmd, "CHECK") == 0) { + do_check(source); } else if (stricmp(cmd, "RUN") == 0) { do_run(source); } else if (stricmp(cmd, "USE") == 0) { @@ -587,6 +574,20 @@ char *strtok(char *str, const char *delim) } #endif +void do_check(char *u) +{ + int days, hours, minutes, seconds; + long complete; + complete = (lastrefresh + refreshperiod) - time(NULL); + days = complete / 86400; + hours = (complete % 86400) / 3600; + minutes = (complete % 86400) % 3600 / 60; + seconds = (complete % 86400) % 3600 % 60; + + notice(s_GameServ, u, "Time left to next refresh: %dd %dh %dm %ds", + days, hours, minutes, seconds); +} + void do_list(char *u) { aClient *user; @@ -615,7 +616,7 @@ void do_list(char *u) { while(temp) { - if (!cmd || is_playing(temp->getData())) + if (cmd || is_playing(temp->getData())) { if (!header) { @@ -803,6 +804,9 @@ void do_register(char *u) temp = players[hv].insertAtBack_RLN(user); temp->setPtr(user); // This is an extra step, but necessary for now + // Update the last login time + user->stats->lastlogin = time(NULL); + notice(s_GameServ, u, "Player %s registered with password %s.", user->stats->name, password); notice(s_GameServ, u, "Write this password down. If you lose it, there is no way to retrieve it!"); log("Nickname %s registered player %s.", u, user->stats->name); @@ -878,6 +882,10 @@ void do_identify(char *u) setPlaying(user); // set the playing flag temp->setPtr(user); + + // Update the last login time + user->stats->lastlogin = time(NULL); + notice(s_GameServ, u, "Password Accepted. Identified."); showNews(u, todaysnews); } @@ -2104,7 +2112,8 @@ int save_gs_dbase() << it->armor << ' ' << it->weapon << ' ' << it->forest_fights << ' ' << it->player_fights << ' ' << it->getFlags() << ' ' << it->password << ' ' << it->inventory.Healing() - << ' ' << it->inventory.Strength() << ' ' << it->inventory.Defense() << ' ' << it->inventory.HP() << endl; + << ' ' << it->inventory.Strength() << ' ' << it->inventory.Defense() << ' ' << it->inventory.HP() + << ' ' << it->lastlogin << endl; ptr = ptr->Next(); } } @@ -2188,6 +2197,13 @@ int load_gs_dbase() tempname = strtok(NULL, " "); if (tempname) p->inventory.setHP(stringtoint(tempname)); + + tempname = strtok(NULL, " "); + if (tempname) + p->lastlogin = stringtoint(tempname); + else + p->lastlogin = time(NULL); + unsigned long hv = iHASH((unsigned char *) temp->stats->name); temp->stats->client = NULL; @@ -2672,7 +2688,12 @@ void do_bank(char *u) notice(s_GameServ, u, "I don't know how to convert alphabet letters into currency, sire!"); return; } - + if (stringtoint(amount) < 0) + { + notice(s_GameServ, u, "Sorry. This bank is not licensed "\ + "to handle such sums of cash, noble Lord."); + return; + } p = user->stats; if (stricmp(cmd, "DEPOSIT") == 0)