X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/0a1518faa49d2d19f189a0abfbf539c14a7c2f64..9cc5ab579f517bb3601928b22552b4ac41ffb054:/gameserv/tcpclient.cpp diff --git a/gameserv/tcpclient.cpp b/gameserv/tcpclient.cpp index 953e273..7f43644 100644 --- a/gameserv/tcpclient.cpp +++ b/gameserv/tcpclient.cpp @@ -13,6 +13,7 @@ */ #include "sockhelp.h" +#include "options.h" #include "list.h" #include "aClient.h" #include "extern.h" @@ -20,22 +21,26 @@ #include #include #include +#include #include -#include #include - int sock; +long timestamp; + List clients; +void save_timestamp(); +void load_timestamp(); + int main(int argc, char *argv[]) { - char buffer[1024], buf[1024], input[1024], uplink[80], kb[1024]; + char buffer[1024], buf[1024]; int connected = 1; char *cmd, *source = NULL; srand(time(NULL)); - - load_config_file(); + + load_config_file(); if (argc == 1) { argc = 3; @@ -57,14 +62,23 @@ int main(int argc, char *argv[]) return -1; } +#ifdef UNREAL raw("PROTOCTL NICKv2 VHP"); raw("PASS :%s", remotepass); - raw("SERVER %s 1 :Testing Server", servername); + raw("SERVER %s 1 :%s", servername, servername); raw("NICK %S 1 %d %S %s %s %d +owghraAxNt %s :GameServ", time(NULL), gshost, servername, time(NULL), gshost); raw(":%S JOIN %s", c_Forest); + raw(":%S MODE %s +mtn", c_Forest); +#elif defined(BAHAMUT) + raw("PASS %s :TS", remotepass); + raw("SERVER %s 1 :%s", servername, servername); + raw("NICK %S 1 %d +o %s %s %s 0 :GameServ", time(NULL), gsident, gshost, + servername); + raw(":%s SJOIN %d %d %s +mnt :@%S", servername, time(NULL), time(NULL), c_Forest); +#endif raw(":%S MODE %s +o %S", c_Forest); - raw(":%S MODE %s +ntm", c_Forest); + raw(":%S TOPIC %s :%s", c_Forest, c_ForestTopic); sock_gets(sock,buffer,sizeof(buffer)-1); /* -1 added thanks to David Duchene for pointing out the possible @@ -73,7 +87,10 @@ int main(int argc, char *argv[]) printf("Server: %s\n",buffer); init_monsters(); - //load_gs_dbase(); + init_masters(); + load_gs_dbase(); + load_timestamp(); + while (connected) { if (sock_gets(sock,buffer,sizeof(buffer)) == -1) { connected = 0; @@ -97,7 +114,7 @@ int main(int argc, char *argv[]) if (buffer[0] == ':') { aClient *tempPtr; - if (tempPtr = find((source + 1))) + if ((tempPtr = find((source + 1)))) { char *nick; nick = strtok(NULL, " "); @@ -115,16 +132,16 @@ int main(int argc, char *argv[]) } } else if (stricmp(cmd, "QUIT") == 0) { aClient *quitter; - if (quitter = find(source + 1)) + if ((quitter = find(source + 1))) clients.remove(quitter); - if (quitter = findplayer(source + 1)) - players.remove(quitter); + if ((quitter = findplayer(source + 1))) + quitter->setNick("NULL"); } else if (stricmp(cmd, "PRIVMSG") == 0) { char *rest, *dest; dest = strtok(NULL, " "); rest = strtok(NULL, ""); - if (stricmp(dest, s_GameServ) == 0) + if (strnicmp(dest, s_GameServ, strlen(s_GameServ)) == 0) gameserv(source, rest); else if (stricmp(dest, c_Forest) == 0) forest(source, rest); @@ -133,11 +150,30 @@ int main(int argc, char *argv[]) channel = strtok(NULL, " "); if (stricmp(channel, c_Forest) == 0 && is_playing(source + 1)) raw(":%S MODE %s +v %s", c_Forest, (source + 1)); + + #if defined(BAHAMUT) + } else if (stricmp(cmd, "SJOIN") == 0) { + char *channel, *nick; + strtok(NULL, " "); // Ignore the TS + strtok(NULL, " "); // Ignore the TS + channel = strtok(NULL, " "); + strtok(NULL, " "); + nick = strtok(NULL, " "); + nick++; // Get rid of the : + if (stricmp(channel, c_Forest) == 0 && is_playing(nick)) + raw(":%S MODE %s +v %s", channel, nick); + #endif + } else { // cout << "Unrecognized Message: cmd = " << cmd << setw(30) << "source = " << // source << endl; } } + save_gs_dbase(); + save_timestamp(); + delete_monsters(); + delete_masters(); + printf("\n"); close(sock); unload_config_file(); @@ -206,3 +242,46 @@ aClient *findbynick(const char *nick) return client; } +void load_timestamp() +{ + ifstream infile; + + infile.open(".gstimestamp"); + + if (infile.fail()) + { + cout << "Error opening .gstimestamp" << endl; + cout << "Generating new timestamp" << endl; + generate: + timestamp = midnight(); + save_timestamp(); + return; + } + + infile >> timestamp; + infile.close(); + if (timestamp < 1000000) + goto generate; +} + +void save_timestamp() +{ + ofstream outfile; + + outfile.open(".gstimestamp"); + + if (outfile.fail()) + { + cout << "Error creating new file." << endl; + return; + } + + outfile << timestamp << endl; + + outfile.close(); +} + +long int midnight(long int offset) +{ + return (time(NULL) - (time(NULL) % 86400)) + (offset * 3600); +}