#include <stdlib.h>
#include <fcntl.h>
#include <signal.h>
+
//#include <sys/types.h>
//#include <sys/wait.h>
//#include <errno.h>
-using std::ofstream;
-using std::ifstream;
-using std::cerr;
-using std::endl;
+using namespace std;
char *PACKAGE = "GameServ";
-char *VERSION = "1.2.3 +devel";
+char *VERSION = "1.2.6 +devel";
int sock;
long lastrefresh;
perror("Could not turn into a daemon");
exit(3);
}
+ if (load_items() == 0)
+ {
+ log("Error loading items");
+ goto end;
+ }
- init_masters();
load_gs_dbase();
loadNews(newsdata, todaysnews);
+
+ if (load_masters() == false)
+ {
+ log("Error loading masters");
+ goto end;
+ }
+
if (load_monsters() == false)
- goto end;
+ {
+ log("Error loading monsters");
+ goto end;
+ }
+
+ if (!load_dragon())
+ {
+ log("Error loading dragon");
+ goto end;
+ }
+
+ if (load_levels() == false)
+ {
+ log("Error loading levels");
+ goto end;
+ }
shuttingdown = false;
currentserver = strtok(NULL, " ");
}
- strcpy(boss.name, "Red Dragon");
- strcpy(boss.weapon, "Breath of Unholy Fire");
- boss.strength = 2500;
- boss.gold = 2000000000;
- boss.exp = 2000000000;
- boss.maxhp = 6667;
- boss.hp = 6667;
- strcpy(boss.death, "You finally snuff out the deadly murderous "\
- "dragon's dark flames. You have freed the land of its terror "\
- "filled reign from above!");
-
-
// This loop will retry the connection 3 times
for (int retry = 0; retry < 3 && !shuttingdown; retry++)
{
raw(":%S TOPIC %s :%s", c_Forest, c_ForestTopic);
#endif
+ #ifndef P10
+ if (isUseNickServ())
+ {
+ raw(":%S PRIVMSG %s :IDENTIFY %s", nsname, nspass);
+ }
+ #endif
sock_gets(sock,buffer,sizeof(buffer)-1); /* -1 added thanks to
David Duchene <dave@ltd.com> for pointing out the possible
buffer overflow resulting from the linefeed added below. */
}
// Refresh players and clear news if the time is up
- if (loadtime - lastrefresh >= refreshperiod)
+ currentTime = time(NULL);
+ if (currentTime - lastrefresh >= refreshperiod)
{
refreshall();
clearNews(todaysnews);
saveNews(newsdata, todaysnews);
+ lastrefresh = currentTime;
save_lastrefresh();
+ notice(s_GameServ, c_Forest, "Refreshing all players "\
+ "and resetting news!");
}
// Save the player data every updateperiod seconds
{
oldTime = currentTime;
log("Saving to %s", playerdata);
+
save_gs_dbase();
saveNews(newsdata, todaysnews);
+ if (isSavedNotice())
+ {
+ // Send notice to the channel of the update
+ notice(s_GameServ, c_Forest, "%S player data saved");
+ }
}
{
#ifdef DEBUGMODE
log("Player %s (IRC: %s) joined %s",
- joiner->stats->name,
+ joiner->stats->name.c_str(),
#ifdef P10
joiner->getRealNick(),
#else
end:
save_gs_dbase();
+ save_dragon();
saveNews(newsdata, todaysnews);
delete_monsters();
- delete_masters();
#ifdef DEBUGMODE
log("<CLOSED>");
if (!is_playing(p))
return NULL;
- unsigned long hv = iHASH((unsigned char *) p->stats->name);
+ unsigned long hv = iHASH((unsigned char *) p->stats->name.c_str());
for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
{
for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
{
p = newPtr->getData()->stats;
- if (stricmp(p->name, name) == 0)
+ if (stricmp(p->name.c_str(), name) == 0)
return newPtr->getData();
p = NULL;
}
for (newPtr = players[x].First(); newPtr; newPtr = newPtr->Next())
{
p = newPtr->getData()->stats;
+ switch(p->level)
+ {
+ case 1:
+ if ((time(NULL) - p->lastlogin) / 86400 >= level1expire)
+ {
+ logout(newPtr->getData());
+ players[x].remove(newPtr->getData());
+ return;
+ }
+ break;
+
+ default:
+ if ((time(NULL) - p->lastlogin) / 86400 >= defaultexpire)
+ {
+ logout(newPtr->getData());
+ players[x].remove(newPtr->getData());
+ return;
+ }
+ break;
+ }
if (timedOut(p))
{
timeOutEvent(p);
void prettyIntro()
{
-cout << endl;
-cout << " GGGG AAA MM MM EEEEEEE SSSSS EEEEEEE RRRRRR VV VV " << endl;
-cout << " GG GG AAAAA MMM MMM EE SS EE RR RR VV VV " << endl;
-cout << "GG AA AA MM MM MM EEEEE SSSSS EEEEE RRRRRR VV VV " << endl;
-cout << "GG GGG AAAAAAA MM MM EE SS EE RR RR VV VV " << endl;
-cout << "G G AA AA MM MM EEEEEEE SSSSS EEEEEEE RR RR VVV" << endl;
-cout << " GGGGG V\n\n" << endl;
-cout << "Version: " << VERSION << endl;
+ cout << endl;
+ cout << " GGGG AAA MM MM EEEEEEE SSSSS EEEEEEE RRRRRR VV VV " << endl;
+ cout << " GG GG AAAAA MMM MMM EE SS EE RR RR VV VV " << endl;
+ cout << "GG AA AA MM MM MM EEEEE SSSSS EEEEE RRRRRR VV VV " << endl;
+ cout << "GG GGG AAAAAAA MM MM EE SS EE RR RR VV VV " << endl;
+ cout << "G G AA AA MM MM EEEEEEE SSSSS EEEEEEE RR RR VVV" << endl;
+ cout << " GGGGG V\n\n" << endl;
+ cout << "Version: " << VERSION << endl;
+ cout << "http://www.gameserv.us - http://www.sourceforge.net/projects/gameservirc" << endl;
}
void load_lastrefresh()
#endif
generate:
+ long mytime = time(NULL);
#ifdef DEBUGMODE
log("Generating new refresh time");
#endif
- lastrefresh = time(NULL);
+
+ // Just a safety measure... tho no one should
+ // get anywhere near the time as their refreshperiod
+ if (refreshperiod >= mytime)
+ refreshperiod = 86400;
+
+ lastrefresh = mytime - (mytime % refreshperiod);
refreshall();
save_lastrefresh();
return;