#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.5 +devel";
+char *VERSION = "1.3.1 +devel";
int sock;
long lastrefresh;
+long lastrollover;
List<aClient> clients[U_TABLE_SIZE];
void save_lastrefresh();
void load_lastrefresh();
+void load_lastrollover();
+void save_lastrollover();
void prettyIntro();
void check_idles();
perror("Could not turn into a daemon");
exit(3);
}
+ if (load_items() == 0)
+ {
+ log("Error loading items");
+ goto end;
+ }
+
+ if (load_store() == 0)
+ {
+ log("Error loading store");
+ goto end;
+ }
+ if (load_tavern() == 0)
+ {
+ log("Error loading tavern");
+ goto end;
+ }
+
load_gs_dbase();
loadNews(newsdata, todaysnews);
- if (load_masters() == false)
- {
- log("Error loading masters");
- goto end;
- }
+ if (load_masters() == false)
+ {
+ log("Error loading masters");
+ goto end;
+ }
+
if (load_monsters() == false)
- {
- log("Error loading monsters");
- goto end;
- }
-
+ {
+ log("Error loading monsters");
+ goto end;
+ }
+
if (!load_dragon())
- {
- log("Error loading dragon");
- goto end;
- }
-
+ {
+ log("Error loading dragon");
+ goto end;
+ }
+
if (load_levels() == false)
- {
- log("Error loading levels");
- goto end;
- }
+ {
+ log("Error loading levels");
+ goto end;
+ }
shuttingdown = false;
{
connected = 1;
load_lastrefresh();
-
+ load_lastrollover();
long int loadtime = time(NULL);
long int currentTime;
bool loaded = false;
ignore_pipe();
- sock = make_connection(remoteport, SOCK_STREAM, remoteserver);
+ sock = conn(remoteserver, remoteport, localhost, 0);
+ // sock = make_connection(remoteport, SOCK_STREAM, remoteserver);
if (sock == -1) {
fprintf(stderr,"make_connection failed.\n");
unload_config_file();
log("%S socket connected.");
#ifdef UNREAL
- raw("PROTOCTL NICKv2 VHP");
raw("PASS :%s", remotepass);
raw("SERVER %s 1 :%s", servername, servername);
- raw("NICK %S 1 %d %S %s %s %d +w%s %s :%s v%s", time(NULL), gshost,
- servername, time(NULL), (isBOper() ? "o" : ""), gshost, PACKAGE, VERSION);
+ raw("NICK %S 1 %d %s %s %s %d :%s v%s", time(NULL), gsident, gshost,
+ servername, time(NULL), PACKAGE, VERSION);
raw(":%S JOIN %s", c_Forest);
raw(":%S MODE %s +tn", c_Forest);
#elif defined(BAHAMUT)
// Refresh players and clear news if the time is up
currentTime = time(NULL);
+
+ if (isRolloverForestFights())
+ {
+ if (currentTime - lastrollover >= rolloverperiod)
+ {
+ rolloverall();
+ lastrollover = currentTime;
+ save_lastrollover();
+ notice(s_GameServ, c_Forest, "Adding %d forest fights to all players!", numrolloverfights);
+ }
+ }
+
if (currentTime - lastrefresh >= refreshperiod)
{
refreshall();
}
// Save the player data every updateperiod seconds
- currentTime = time(NULL);
if (currentTime - oldTime >= updateperiod)
{
oldTime = currentTime;
{
#ifdef DEBUGMODE
log("Player %s (IRC: %s) joined %s",
- joiner->stats->name.c_str(),
+ joiner->stats->getName().c_str(),
#ifdef P10
joiner->getRealNick(),
#else
if (!is_playing(p))
return NULL;
- unsigned long hv = iHASH((unsigned char *) p->stats->name.c_str());
+ unsigned long hv = iHASH((unsigned char *) p->stats->getName().c_str());
for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
{
aClient *findplayer(const char *name)
{
- ListNode <aClient> *newPtr;
- Player *p = NULL;
- unsigned long hv = iHASH((unsigned char *) name);
- for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
+ ListNode <aClient> *newPtr;
+ Player *p = NULL;
+ unsigned long hv = iHASH((unsigned char *) name);
+ for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
{
- p = newPtr->getData()->stats;
- if (stricmp(p->name.c_str(), name) == 0)
+ p = newPtr->getData()->stats;
+ if (stricmp(p->getName().c_str(), name) == 0)
return newPtr->getData();
- p = NULL;
+ p = NULL;
}
- return NULL;
+ return NULL;
}
void check_idles()
for (newPtr = players[x].First(); newPtr; newPtr = newPtr->Next())
{
p = newPtr->getData()->stats;
- switch(p->level)
+ switch(p->getLevel())
{
case 1:
if ((time(NULL) - p->lastlogin) / 86400 >= level1expire)
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
// Just a safety measure... tho no one should
- // get anywhere near the time as their refreshperiod
+ // get anywhere near the actual time as their refreshperiod
if (refreshperiod >= mytime)
+ {
+ log("Refresh period is greater than or equal to the actual time... setting it to 86400");
refreshperiod = 86400;
-
+ }
+
lastrefresh = mytime - (mytime % refreshperiod);
+
refreshall();
save_lastrefresh();
return;
}
infile >> lastrefresh;
+
infile.close();
if (lastrefresh < 0)
goto generate;
}
+void load_lastrollover()
+{
+ ifstream infile;
+ infile.open(".gsrollover");
+ if (infile.fail())
+ {
+#ifdef DEBUGMODE
+ log("Error opening .gsrollover");
+#endif
+
+ generate:
+ long mytime = time(NULL);
+#ifdef DEBUGMODE
+ log("Generating new rollover time");
+#endif
+ lastrollover = mytime;
+ return;
+ }
+ infile >> lastrollover;
+
+ infile.close();
+ if (lastrollover < 0)
+ goto generate;
+}
+
void save_lastrefresh()
{
ofstream outfile;
log("Error creating new file .gsrefresh");
return;
}
- outfile << lastrefresh << endl;
+ outfile << lastrefresh << endl << lastrollover;
+
+ outfile.close();
+}
+
+void save_lastrollover()
+{
+ ofstream outfile;
+ outfile.open(".gsrollover");
+
+ if (outfile.fail())
+ {
+ log("Error creating new file .gsrollover");
+ return;
+ }
+ outfile << lastrollover << endl;
outfile.close();
}