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.
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);
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;
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) {
}
#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;
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);
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);
}
<< 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();
}
}
return 0;
}
+ for (int x = 0; x < U_TABLE_SIZE; x++)
+ {
+ ListNode<aClient> *tempNode;
+ tempNode = players[x].First();
+ while (tempNode)
+ {
+ if (tempNode->getData()->stats->client)
+ logout(tempNode->getData()->stats->client);
+ tempNode = tempNode->Next();
+ }
+ players[x].deleteNodes();
+ }
+
while (infile.getline(buf, 1024, '\n'))
{
temp = new aClient;
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;
else if (stricmp(cmd, "BUY") == 0)
{
char *chnum = strtok(NULL, " ");
- int num = stringtoint(chnum);
if (!chnum)
{
notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 1");
return;
}
+ int num = stringtoint(chnum);
+
if (num < 1 || num > 4)
{
notice(s_GameServ, u, "Invalid Choice!");
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)