X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/6f727d4c9eb5c886f14598577f40da583577444e..2edcd222a4a1aedd142d37b3bb690443eaf2d6f4:/gameserv/tcpclient.cpp diff --git a/gameserv/tcpclient.cpp b/gameserv/tcpclient.cpp index 7fb0376..0394335 100644 --- a/gameserv/tcpclient.cpp +++ b/gameserv/tcpclient.cpp @@ -29,23 +29,21 @@ //#include //#include - - using std::ofstream; using std::ifstream; using std::cerr; using std::endl; char *PACKAGE = "GameServ"; -char *VERSION = "1.2.1 +devel"; +char *VERSION = "1.2.3 +devel"; int sock; -int day; +long lastrefresh; List clients[U_TABLE_SIZE]; -void save_day(); -void load_day(); +void save_lastrefresh(); +void load_lastrefresh(); void prettyIntro(); void check_idles(); @@ -57,13 +55,15 @@ void closeall(int fd); int main(int argc, char *argv[]) { - char buffer[1024], buf[1024]; - memset(buffer, 0, 1024); - memset(buf, 0, 1024); - int connected; - long lastidlecheck; - char *cmd, *source = NULL, *conf = "gameserv.conf"; - srand(time(NULL)); + char buffer[1024], buf[1024]; + memset(buffer, 0, 1024); + memset(buf, 0, 1024); + int connected; + long lastidlecheck; + char *cmd, *source = NULL, *conf; + srand(time(NULL)); + conf = new char[16]; + strcpy(conf, "gameserv.conf"); /* * This needs to be fixed to work for any number of arguments in any @@ -79,8 +79,8 @@ int main(int argc, char *argv[]) cout << "--help Displays this help dialogue" << endl; return 1; } - conf = new char[strlen(argv[1])]; - strcpy(conf, argv[1]); + delete []conf; + conf = argv[1]; } prettyIntro(); @@ -93,14 +93,19 @@ int main(int argc, char *argv[]) else exit(2); + if (argc <= 1) + delete []conf; + // Turn into a daemon if (daemon(1,0) < 0) { perror("Could not turn into a daemon"); exit(3); } + init_masters(); load_gs_dbase(); + loadNews(newsdata, todaysnews); if (load_monsters() == false) goto end; @@ -119,9 +124,11 @@ int main(int argc, char *argv[]) strcpy(boss.name, "Red Dragon"); strcpy(boss.weapon, "Breath of Unholy Fire"); - boss.strength = 6667; + 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!"); @@ -131,7 +138,7 @@ int main(int argc, char *argv[]) for (int retry = 0; retry < 3 && !shuttingdown; retry++) { connected = 1; - load_day(); + load_lastrefresh(); long int loadtime = time(NULL); @@ -174,12 +181,20 @@ int main(int argc, char *argv[]) raw("NICK %S 1 %d +w%s %s %s %s :GameServ", time(NULL), (isBOper() ? "o" : ""), gsident, gshost, servername); raw(":%s SJOIN %ld %s +nt :@%S", servername, time(NULL), c_Forest); +#elif defined(ULTIMATE2) + raw("PASS %s :TS", remotepass); + raw("SERVER %s 1 :%s", servername, servername); + raw("NICK %S 1 %d %s %s %s 0 :GameServ", + time(NULL), gsident, gshost, servername); + if (isBOper()) + raw(":%S mode %S +o"); + raw(":%S JOIN %s", c_Forest); #elif defined(P10) // Server numeric is: [] <-- must be unique raw("PASS :%s", remotepass); raw("SERVER %s 1 %d %d P10 []AAF :%s", servername, time(NULL), time(NULL), servername); raw("[] N %S 1 %d %s %s %s DAqAoB %s :%S", time(NULL), gsident, gshost, - (isBOper() ? "+o" : "") gsnum); + (isBOper() ? "+o" : ""), gsnum); raw("[] B %s %d +tn %s:o", c_Forest, time(NULL) - 864000, gsnum); #endif @@ -187,9 +202,14 @@ int main(int argc, char *argv[]) raw("%s T %s :%s", gsnum, c_Forest, c_ForestTopic); raw("[] EB"); // End burst #else -#ifndef HYBRID - raw(":%S MODE %s +o %S", c_Forest); -#endif + #ifndef HYBRID + #if defined(ULTIMATE2) + raw(":%s MODE %s +o %S %ld", servername, c_Forest, + time(NULL)); + #else + raw(":%S MODE %s +o %S", c_Forest); + #endif + #endif raw(":%S TOPIC %s :%s", c_Forest, c_ForestTopic); #endif @@ -244,6 +264,15 @@ int main(int argc, char *argv[]) } } + // Refresh players and clear news if the time is up + if (loadtime - lastrefresh >= refreshperiod) + { + refreshall(); + clearNews(todaysnews); + saveNews(newsdata, todaysnews); + save_lastrefresh(); + } + // Save the player data every updateperiod seconds currentTime = time(NULL); if (currentTime - oldTime >= updateperiod) @@ -251,6 +280,7 @@ int main(int argc, char *argv[]) oldTime = currentTime; log("Saving to %s", playerdata); save_gs_dbase(); + saveNews(newsdata, todaysnews); } @@ -333,20 +363,24 @@ int main(int argc, char *argv[]) if (loaded) + + if (isWelcome()) + { + #ifdef P10 + notice(s_GameServ, nick, welcomemsg, realnick); + #else + notice(s_GameServ, nick, welcomemsg, nick); + #endif + } #ifdef P10 - notice(s_GameServ, nick, welcomemsg, realnick); - #else - notice(s_GameServ, nick, welcomemsg, nick); - #endif - #ifdef P10 - unsigned long hv = sHASH((unsigned char *) nick) + unsigned long hv = sHASH((unsigned char *) nick); #else unsigned long hv = iHASH((unsigned char *) nick); #endif temp = clients[hv].insertAtBack(newuser); - #if defined(HYBRID) || defined(BAHAMUT) + #if defined(HYBRID) || defined(BAHAMUT) || defined(ULTIMATE2) char *nickserver; strtok(NULL, " "); strtok(NULL, " "); @@ -354,7 +388,21 @@ int main(int argc, char *argv[]) if (nickserver[0] == '+') strtok(NULL, " "); strtok(NULL, " "); - + nickserver = strtok(NULL, " "); + for (int x = 0; x < 32; x++) + { + if (stricmp(ignoreservers[x], nickserver) == 0) + { + setIgnore(temp); + break; + } + } + #elif defined(UNREAL) + char *nickserver; + strtok(NULL, " "); + strtok(NULL, " "); + strtok(NULL, " "); + strtok(NULL, " "); nickserver = strtok(NULL, " "); for (int x = 0; x < 32; x++) { @@ -445,7 +493,7 @@ int main(int argc, char *argv[]) rest = strtok(NULL, ""); if (strnicmp(dest, s_GameServ, strlen(s_GameServ)) == 0) gameserv(source, rest); - else if (stricmp(dest, c_Forest) == 0) + else if (stricmp(dest, c_Forest) == 0 && isListenOnCF()) forest(source, rest); #endif #if defined(P10) @@ -519,7 +567,7 @@ int main(int argc, char *argv[]) end: save_gs_dbase(); - save_day(); + saveNews(newsdata, todaysnews); delete_monsters(); delete_masters(); @@ -688,56 +736,6 @@ aClient *findbynick(const char *nick) return client; } -void load_day() -{ - ifstream infile; - - infile.open(".gsday"); - - if (infile.fail()) - { - #ifdef DEBUGMODE - log("Error opening .gsday"); - #endif - - generate: - #ifdef DEBUGMODE - log("Generating new day"); - #endif - struct tm *tm; - time_t ti; - time(&ti); - tm = localtime(&ti); - - day = tm->tm_mday; - - save_day(); - return; - } - - infile >> day; - infile.close(); - if (day < 1 || day > 31) - goto generate; -} - -void save_day() -{ - ofstream outfile; - - outfile.open(".gsday"); - - if (outfile.fail()) - { - log("Error creating new file .gsday"); - return; - } - - outfile << day << endl; - - outfile.close(); -} - /* daemon() - detach process from user and disappear into the background * returns -1 on failure, but you can't do much except exit in that case * since we may already have forked. This is based on the BSD version, @@ -812,3 +810,44 @@ cout << "G G AA AA MM MM EEEEEEE SSSSS EEEEEEE RR RR VVV" << en cout << " GGGGG V\n\n" << endl; cout << "Version: " << VERSION << endl; } + +void load_lastrefresh() +{ + ifstream infile; + infile.open(".gsrefresh"); + if (infile.fail()) + { + #ifdef DEBUGMODE + log("Error opening .gsrefresh"); + #endif + + generate: + #ifdef DEBUGMODE + log("Generating new refresh time"); + #endif + lastrefresh = time(NULL); + refreshall(); + save_lastrefresh(); + return; + } + infile >> lastrefresh; + infile.close(); + if (lastrefresh < 0) + goto generate; +} + +void save_lastrefresh() +{ + ofstream outfile; + + outfile.open(".gsrefresh"); + + if (outfile.fail()) + { + log("Error creating new file .gsrefresh"); + return; + } + outfile << lastrefresh << endl; + + outfile.close(); +}