X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/780b12afdcd79eaf802d4cbd846a11a01bec5b87..d7c069e247c2b2d3073eab722aa0c3afc2a75214:/gameserv/tcpclient.cpp diff --git a/gameserv/tcpclient.cpp b/gameserv/tcpclient.cpp index fdeff2d..14b3d6e 100644 --- a/gameserv/tcpclient.cpp +++ b/gameserv/tcpclient.cpp @@ -25,25 +25,26 @@ #include #include #include + //#include //#include //#include -using std::ofstream; -using std::ifstream; -using std::cerr; -using std::endl; +using namespace std; char *PACKAGE = "GameServ"; -char *VERSION = "1.2.4 +devel"; +char *VERSION = "1.3.1 +devel"; int sock; long lastrefresh; +long lastrollover; List clients[U_TABLE_SIZE]; void save_lastrefresh(); void load_lastrefresh(); +void load_lastrollover(); +void save_lastrollover(); void prettyIntro(); void check_idles(); @@ -102,22 +103,50 @@ int main(int argc, char *argv[]) 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; + } - init_masters(); load_gs_dbase(); loadNews(newsdata, todaysnews); - if (load_monsters() == false) - { - log("Error loading monsters"); - goto end; - } + if (load_masters() == false) + { + log("Error loading masters"); + goto end; + } + + if (load_monsters() == false) + { + 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; - } + { + log("Error loading levels"); + goto end; + } shuttingdown = false; @@ -131,24 +160,12 @@ int main(int argc, char *argv[]) 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++) { connected = 1; load_lastrefresh(); - + load_lastrollover(); long int loadtime = time(NULL); long int currentTime; @@ -162,7 +179,8 @@ int main(int argc, char *argv[]) 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(); @@ -171,11 +189,10 @@ int main(int argc, char *argv[]) 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) @@ -222,6 +239,12 @@ int main(int argc, char *argv[]) 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 for pointing out the possible buffer overflow resulting from the linefeed added below. */ @@ -275,6 +298,18 @@ int main(int argc, char *argv[]) // 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(); @@ -287,7 +322,6 @@ int main(int argc, char *argv[]) } // Save the player data every updateperiod seconds - currentTime = time(NULL); if (currentTime - oldTime >= updateperiod) { oldTime = currentTime; @@ -295,10 +329,11 @@ int main(int argc, char *argv[]) save_gs_dbase(); saveNews(newsdata, todaysnews); - // Send notice to the channel of the update - #ifdef DEBUGMODE + if (isSavedNotice()) + { + // Send notice to the channel of the update notice(s_GameServ, c_Forest, "%S player data saved"); - #endif + } } @@ -534,7 +569,7 @@ int main(int argc, char *argv[]) { #ifdef DEBUGMODE log("Player %s (IRC: %s) joined %s", - joiner->stats->name, + joiner->stats->getName().c_str(), #ifdef P10 joiner->getRealNick(), #else @@ -585,10 +620,10 @@ int main(int argc, char *argv[]) end: save_gs_dbase(); + save_dragon(); saveNews(newsdata, todaysnews); delete_monsters(); - delete_masters(); #ifdef DEBUGMODE log(""); @@ -677,7 +712,7 @@ aClient *findIRCplayer(const char *nick) if (!is_playing(p)) return NULL; - unsigned long hv = iHASH((unsigned char *) p->stats->name); + unsigned long hv = iHASH((unsigned char *) p->stats->getName().c_str()); for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next()) { @@ -695,17 +730,17 @@ aClient *findIRCplayer(const char *nick) aClient *findplayer(const char *name) { - ListNode *newPtr; - Player *p = NULL; - unsigned long hv = iHASH((unsigned char *) name); - for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next()) + ListNode *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, 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() @@ -718,7 +753,7 @@ 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) @@ -839,14 +874,15 @@ void closeall(int fd) 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() @@ -866,21 +902,51 @@ 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; @@ -892,7 +958,22 @@ void save_lastrefresh() 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(); +}