]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/tcpclient.cpp
Cleaned up the aClient.cpp code
[irc/gameservirc.git] / gameserv / tcpclient.cpp
index 51c6909eee3c41aad326228332d38bb82e689df6..b6d417562d1b24d8a3def8dc7de84d0c59450714 100644 (file)
 
 #include "sockhelp.h"
 #include "options.h"
-#include "list.h"
 #include "aClient.h"
 #include "extern.h"
 #include "flags.h"
+#include "item.h"
+#include "toplist.h"
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
@@ -25,6 +26,7 @@
 #include <stdlib.h>
 #include <fcntl.h>
 #include <signal.h>
+#include <algorithm>
 
 //#include <sys/types.h>
 //#include <sys/wait.h>
 using namespace std;
 
 char *PACKAGE = "GameServ";
-char *VERSION = "1.3.2 +devel";
+char *VERSION = "1.3.4 +devel";
 
 int sock;
 long lastrefresh;
 long lastrollover;
 
-List<aClient> clients[U_TABLE_SIZE];
+list<aClient*> clients[U_TABLE_SIZE];
 
 void save_lastrefresh();
 void load_lastrefresh();
@@ -47,6 +49,9 @@ void load_lastrollover();
 void save_lastrollover();
 void prettyIntro();
 void check_idles();
+void clearClients();
+void clearPlayers();
+void clearItems();
 
 // Make this a daemon
 int daemon(int nochdir, int noclose);
@@ -78,6 +83,7 @@ int main(int argc, char *argv[])
                  cout << "Usage: gameserv [options] [configfile]" << endl;
                  cout << "Options:" << endl;
                  cout << "--help                        Displays this help dialogue" << endl;
+                 delete []conf;
                  return 1;
                }
          delete []conf;
@@ -181,50 +187,61 @@ int main(int argc, char *argv[])
          ignore_pipe();
          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();
-               return -1;
-         }
-         log("%S socket connected.");
+         if (sock == -1)
+               {
+                 fprintf(stderr,"make_connection failed.\n");
+                 unload_config_file();
+                 return -1;
+               }
+         log("<S socket connected.");
          
 #ifdef UNREAL
          raw("PASS :%s", remotepass);
          raw("SERVER %s 1 :%s", servername, servername);
-         raw("NICK %S 1 %d %s %s %s %d :%s v%s", time(NULL), gsident, gshost, 
+         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);
+         raw(":<S JOIN %s", c_Forest);
+         raw(":<S MODE %s +tn", c_Forest);
 #elif defined(BAHAMUT)
          raw("PASS %s :TS", remotepass);
          raw("SERVER %s 1 :%s", servername, servername);
-         raw("NICK %S 1 %d +w%s %s %s %s 0 :GameServ", time(NULL), (isBOper() ? "o" : ""), 
+         raw("NICK <S 1 %d +w%s %s %s %s 0 :GameServ", time(NULL), (isBOper() ? "o" : ""), 
                  gsident, gshost, servername);
-         raw(":%s SJOIN %d %d %s +nt :@%S", servername, time(NULL), time(NULL), c_Forest);
+         raw(":%s SJOIN %d %d %s +nt :@<S", servername, time(NULL), time(NULL), c_Forest);
 #elif defined(HYBRID)
          raw("PASS %s :TS", remotepass);
          raw("SERVER %s 1 :%s", servername, servername);
-         raw("NICK %S 1 %d +w%s %s %s %s :GameServ", time(NULL), (isBOper() ? "o" : ""), 
+         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);
+         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", 
+         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);
+           raw(":<S mode <S +o");
+         raw(":<S JOIN %s", c_Forest);
 #elif defined(PTLINK)
          raw("PASS %s :TS", remotepass);
          raw("SERVER %s 1 :%s", servername, servername);
-         raw("NICK %S 1 %d %s%s %s %s %s :GameServ", time(NULL), (isBOper() ? "+iow " : ""), gsident, gshost, gshost, servername);
-         raw(":%s SJOIN %d %s +nt :@%S", servername, time(NULL), c_Forest);
+         raw("NICK <S 1 %d %s%s %s %s %s :GameServ", time(NULL), (isBOper() ? "+iow " : ""), gsident, gshost, gshost, servername);
+         raw(":%s SJOIN %d %s +nt :@<S", servername, time(NULL), c_Forest);
+#elif defined(VLIFE)
+         raw("PASS %s :TS", remotepass);
+         raw("SERVER %s 1 %d :%s", servername, time(NULL), servername);
+         raw("NNICK <S 1 %d +w%s %s %s %s %s :GameServ", time(NULL),(isBOper() ? "o" : ""), gsident, gshost, gshost, servername);
+         raw(":%s SJOIN %d %s +nt :@<S", servername, time(NULL), c_Forest);
+#elif defined(BAHAMUT8)
+         raw("PASS %s :TS", remotepass);
+         raw("SERVER %s %d :%s", servername, time(NULL), servername);
+         raw("NICK <S 1 %d +w%s %s %s %s 0 %d :GameServ", time(NULL), (isBOper() ? "o" : ""), gsident, gshost, servername, time(NULL));
+         raw(":%s SJOIN %d %d %s +nt :@<S", servername, time(NULL), time(NULL), 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,
+         raw("[] N <S 1 %d %s %s %s DAqAoB %s :<S", time(NULL), gsident, gshost,
                  (isBOper() ? "+o" : ""), gsnum);
          raw("[] B %s %d +tn %s:o", c_Forest, time(NULL) - 864000, gsnum);
 #endif
@@ -235,19 +252,19 @@ int main(int argc, char *argv[])
 #else 
 #ifndef HYBRID
 #if defined(ULTIMATE2)
-         raw(":%s MODE %s +o %S %ld", servername, c_Forest, 
+         raw(":%s MODE %s +o <S %ld", servername, c_Forest, 
                  time(NULL));
 #else
-         raw(":%S MODE %s +o %S", c_Forest);
+         raw(":<S MODE %s +o <S", c_Forest);
 #endif
 #endif
-         raw(":%S TOPIC %s :%s", c_Forest, c_ForestTopic);
+         raw(":<S TOPIC %s :%s", c_Forest, c_ForestTopic);
 #endif
          
 #ifndef P10
          if (isUseNickServ())
                {
-                 raw(":%S PRIVMSG %s :IDENTIFY %s", nsname, nspass);
+                 raw(":<S PRIVMSG %s :IDENTIFY %s", nsname, nspass);
                }
 #endif
          sock_gets(sock,buffer,sizeof(buffer)-1); /* -1 added thanks to
@@ -274,7 +291,9 @@ int main(int argc, char *argv[])
                          cmd = strtok(NULL, " ");
                        }
                  else
-                       cmd = strtok(buf, " ");
+                       {
+                         cmd = strtok(buf, " ");
+                       }
 #else
                  source = strtok(buf, " ");
                  cmd = strtok(NULL, " ");
@@ -305,7 +324,7 @@ 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)
@@ -339,52 +358,67 @@ int main(int argc, char *argv[])
                          if (isSavedNotice())
                                {
                                  // Send notice to the channel of the update
-                                 notice(s_GameServ, c_Forest, "%S player data saved");
+                                 notice(s_GameServ, c_Forest, "<S player data saved");
                                }
                        }
                  
                  
 #if !defined(P10)
-       if (stricmp(cmd, "PING") == 0) {
-           char *timestamp;
-           timestamp = strtok(NULL, "");
-           raw("PONG %s", timestamp);
-      #else
-       if (stricmp(cmd, "G") == 0) {
-           char *timestamp;
-           timestamp = strtok(NULL, " ");
-           raw("[] Z [] %s 0 %s", timestamp + 1, timestamp);
-      #endif
-       #ifdef P10
-       } else if (stricmp(cmd, "EB") == 0) {
-           raw("[] EA");
-       #endif
-       } else if (stricmp(cmd, "VERSION") == 0) {
-           char *server;
-           server = strtok(NULL, " ");
-           server++;
-           raw(":%s 351 %s %s_%s. %s", servername, source+1, PACKAGE, VERSION, servername);
-      #if !defined(P10)
-       } else if (strncmp(cmd, "NICK", 4) == 0) {
-         if (buffer[0] == ':')
-           {
-                 aClient *tempPtr;
-                 if ((tempPtr = find((source + 1))))
+                 if (stricmp(cmd, "PING") == 0)
                        {
-                         char *nick;
-                         unsigned long oldhv, newhv;
-                         nick = strtok(NULL, " ");
-                         oldhv = iHASH((unsigned char *) tempPtr->getNick());
-                         newhv = iHASH((unsigned char *) nick);
-                         tempPtr->setNick(nick);
-                         clients[oldhv].remove(tempPtr);
-                         clients[newhv].insertAtBack(tempPtr);
+                         char *timestamp;
+                         timestamp = strtok(NULL, "");
+                         raw("PONG %s", timestamp);
                        }
-           }
-         else
-           {
-                 char *nick;
-      #else
+#else
+                 // P10 Ping
+                 if (stricmp(cmd, "G") == 0)
+                       {
+                         char *timestamp;
+                         timestamp = strtok(NULL, " ");
+                         raw("[] Z [] %s 0 %s", timestamp + 1, timestamp);
+                       }
+#endif
+#ifdef P10
+                 else if (stricmp(cmd, "EB") == 0)
+                       {
+                         raw("[] EA");
+                       }
+#endif
+                 else if (stricmp(cmd, "VERSION") == 0)
+                       {
+                         char *server;
+                         server = strtok(NULL, " ");
+                         server++;
+                         raw(":%s 351 %s %s_%s. %s", servername, source+1, PACKAGE, VERSION, servername);
+                       }
+                 // Code indenting is clean up until here!
+#if !defined(P10)
+                 else if (strncmp(cmd, "NICK", 4) == 0
+                                  #ifdef VLIFE
+                                  || strncmp(cmd, "NNICK", 5) == 0
+                                  #endif
+                                  )
+                       {
+                         if (buffer[0] == ':')
+                               {
+                                 aClient *tempPtr;
+                                 if ((tempPtr = find((source + 1))))
+                                       {
+                                         char *nick;
+                                         unsigned long oldhv, newhv;
+                                         nick = strtok(NULL, " ");
+                                         oldhv = iHASH((unsigned char *) tempPtr->getNick());
+                                         newhv = iHASH((unsigned char *) nick);
+                                         tempPtr->setNick(nick);
+                                         clients[oldhv].remove(tempPtr);
+                                         clients[newhv].push_back(tempPtr);
+                                       }
+                               }
+                         else
+                               {
+                                 char *nick;
+#else
        } else if (stricmp(cmd, "N") == 0 && strlen(source) == 2) {
            {   
                char *nick, *realnick;
@@ -395,10 +429,9 @@ int main(int argc, char *argv[])
 
                if (nick[0] == '+')
                {
-                   #ifdef DEBUGMODE
+#ifdef DEBUGMODE
                    log ("aClient has modes");
-                   #endif
-
+#endif
                    // Searching for the +r mode (extra parameter)
                    for (unsigned int count = 1; count < strlen(nick); count++)
                    {
@@ -410,85 +443,83 @@ int main(int argc, char *argv[])
                    }
                    nick = strtok(NULL, " ");
                }
-      #endif
-               aClient *newuser, *temp;
+#endif
+               aClient *newuser;
 
                nick = strtok(NULL, " ");
 
-               #ifdef P10
+#ifdef P10
                    newuser = new aClient(nick, realnick);
-               #else
+#else
                    newuser = new aClient(nick);
-               #endif
-
+#endif
 
-               if (loaded)
 
-               if (isWelcome())
-               {
-                   #ifdef P10
-                       notice(s_GameServ, nick, welcomemsg, realnick);
-                   #else
-                       notice(s_GameServ, nick, welcomemsg, nick);
-                   #endif
-               }
-               #ifdef P10
+                       if (loaded)
+                         if (isWelcome())
+                               {
+#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);
-               #else
+#else
                    unsigned long hv = iHASH((unsigned char *) nick);
-               #endif
-
-               temp = clients[hv].insertAtBack(newuser);
-
-               #if defined(HYBRID) || defined(BAHAMUT) || defined(ULTIMATE2) || defined(PTLINK)
-                   char *nickserver;
-                   strtok(NULL, " ");
-                   strtok(NULL, " ");
-                   nickserver = strtok(NULL, " ");
-                   if (nickserver[0] == '+')
-                       strtok(NULL, " ");
-                   strtok(NULL, " ");
-                   nickserver = strtok(NULL, " ");
-                   for (int x = 0; x < 32; x++)
-                   {
+#endif
+                       
+#if defined(HYBRID) || defined(BAHAMUT) || defined(ULTIMATE2) || defined(PTLINK)
+               char *nickserver;
+               strtok(NULL, " ");
+               strtok(NULL, " ");
+               nickserver = strtok(NULL, " ");
+               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);
+                         {
+                           setIgnore(newuser);
                            break;
-                       }
-                   }
-               #elif defined(UNREAL)
-                   char *nickserver;
-                   strtok(NULL, " ");
-                   strtok(NULL, " ");
-                   strtok(NULL, " ");
-                   strtok(NULL, " ");
-                   nickserver = strtok(NULL, " ");
-                   for (int x = 0; x < 32; x++)
-                   {
+                         }
+                 }
+#elif defined(UNREAL)
+               char *nickserver;
+               strtok(NULL, " ");
+               strtok(NULL, " ");
+               strtok(NULL, " ");
+               strtok(NULL, " ");
+               nickserver = strtok(NULL, " ");
+               for (int x = 0; x < 32; x++)
+                 {
                        if (stricmp(ignoreservers[x], nickserver) == 0)
-                       {
-                           setIgnore(temp);
+                         {
+                           setIgnore(newuser);
                            break;
-                       }
-                   }
-               #endif
-               delete newuser;
+                         }
+                 }
+#endif
+               clients[hv].push_back(newuser);
            }
-      #if defined(P10)
+#if defined(P10)
        } else if (stricmp(cmd, "Q") == 0) {
 //         unsigned long hv = sHASH((unsigned char *) source);
-      #else
+#else
        } else if (stricmp(cmd, "QUIT") == 0)
          {
-//         unsigned long hv = iHASH((unsigned char *) source);
+
 #endif
                aClient *quitter;
                char z = source[0];
 
            if (z == ':')
                  source++;
-               
+
+               unsigned long hv = iHASH((unsigned char *) source);             
            if (!(quitter = find(source)))
                  {
                        log("Fatal Error: could not find %s in the "\
@@ -496,73 +527,53 @@ int main(int argc, char *argv[])
                        goto end;
                  }
 
-           logout(quitter);
+               clients[hv].remove(quitter);
+               logout(quitter);
+
                delete quitter;
                
            if (z == ':')
                  source--;
 
-           /* Attempting to use the logout() function
-           if ((quitter = find(source)))
-               clients[hv].remove(quitter);
-           if ((quitter = findIRCplayer(source)))
-           {
-               if (player_fight(quitter))
-               {
-                   // Stop the fight on the other client
-                   aClient *otherplayer = quitter->stats->battle;
-                   otherplayer->stats->battle = NULL;
-                   notice(s_GameServ, otherplayer->getNick(), "%s "\
-                          "has quit IRC. The fight stops here.",
-                          quitter->stats->name);
-               }
-               quitter->stats->battle = NULL;
-               quitter->stats->fight = NULL;
-               quitter->stats->master = NULL;
-
-               quitter->setNick("Not Playing");
-               #ifdef P10
-                   quitter->setRealNick("Not Playing");
-               #endif
-               quitter->stats->client = NULL; // Unidentify them
-           }
-           */
-
-      #if defined(P10)
-       } else if (stricmp(cmd, "P") == 0) {
-           char *rest, *dest;
-           char *longname;
-           longname = new char[strlen(s_GameServ) + strlen(servername) + 2];
-
-           sprintf(longname, "%S@%s", servername);
-
-           dest = strtok(NULL, " ");
-           rest = strtok(NULL, "");
-           if (stricmp(dest, gsnum) == 0 || stricmp(dest, longname) == 0)
-           {
-               delete [] longname;
-               gameserv(source, rest);
-           }
-           else if (stricmp(dest, c_Forest) == 0 && isListenOnCF())
-           {
-               delete [] longname;
-               forest(source, rest);
-           }
-      #else
-       } else if (stricmp(cmd, "PRIVMSG") == 0) {
+#if defined(P10)
+         }
+       else if (stricmp(cmd, "P") == 0)
+         {
+               char *rest, *dest;
+               char *longname;
+               longname = new char[strlen(s_GameServ) + strlen(servername) + 2];
+               
+               sprintf(longname, "<S@%s", servername);
+               
+               dest = strtok(NULL, " ");
+               rest = strtok(NULL, "");
+               if (stricmp(dest, gsnum) == 0 || stricmp(dest, longname) == 0)
+                 {
+                       delete [] longname;
+                       gameserv(source, rest);
+                 }
+               else if (stricmp(dest, c_Forest) == 0 && isListenOnCF())
+                 {
+                       delete [] longname;
+                       forest(source, rest);
+                 }
+#else
+         }
+       else if (stricmp(cmd, "PRIVMSG") == 0)
+         {
            char *rest, *dest;
            dest = strtok(NULL, " ");
            rest = strtok(NULL, "");
            if (strnicmp(dest, s_GameServ, strlen(s_GameServ)) == 0)
-               gameserv(source, rest);
+                 gameserv(source, rest);
            else if (stricmp(dest, c_Forest) == 0 && isListenOnCF())
-               forest(source, rest);
-      #endif
-      #if defined(P10)
+                 forest(source, rest);
+#endif
+#if defined(P10)
        } else if (stricmp(cmd, "J") == 0) {
-      #else
+#else
        } else if (stricmp(cmd, "JOIN") == 0) {
-      #endif
+#endif
            char *channel;
            aClient *joiner;
            channel = strtok(NULL, " ");
@@ -572,27 +583,27 @@ int main(int argc, char *argv[])
             if (z == ':')
                 source++;
 
-           joiner = find(source);
+               joiner = find(source);
 
            if (stricmp(channel, c_Forest) == 0 && is_playing(joiner))
            {
-               #ifdef DEBUGMODE
-                   log("Player %s (IRC: %s) joined %s", 
-                       joiner->stats->getName().c_str(), 
-                       #ifdef P10
-                           joiner->getRealNick(),
-                       #else
-                           joiner->getNick(),
-                       #endif
-                       c_Forest);
-               #endif
-               raw(":%S MODE %s +v %s", c_Forest, (source));
+#ifdef DEBUGMODE
+                 log("Player %s (IRC: %s) joined %s", 
+                         joiner->stats->getName().c_str(), 
+#ifdef P10
+                         joiner->getRealNick(),
+#else
+                         joiner->getNick(),
+#endif
+                         c_Forest);
+#endif
+                 raw(":<S MODE %s +v %s", c_Forest, (source));
            }
 
            if (z == ':')
                source--;
 
-       #if defined(BAHAMUT)
+#if defined(BAHAMUT)
        } else if (stricmp(cmd, "SJOIN") == 0) {
            char *channel, *nick, *tmp, *rest;
            strtok(NULL, " "); // Ignore the TS
@@ -612,15 +623,15 @@ int main(int argc, char *argv[])
                    nick++; // Assume for users set op and voice, they
                             // are never passed as +@nick
                if (stricmp(channel, c_Forest) == 0 && is_playing(nick))
-                   raw(":%S MODE %s +v %s", channel, nick);
+                   raw(":<S MODE %s +v %s", channel, nick);
 
                nick = strtok(NULL, " ");
            }
 #endif
        } else {
-           #ifdef DEBUGMODE
+#ifdef DEBUGMODE
                log("Unrecognized Message: cmd = %s   source = %s", cmd, source);
-           #endif
+#endif
        }
   }
 
@@ -631,12 +642,14 @@ int main(int argc, char *argv[])
   save_gs_dbase();
   save_dragon();
   saveNews(newsdata, todaysnews);
-
+  clearClients();
+  clearPlayers();
+  clearItems();
   delete_monsters();
 
-  #ifdef DEBUGMODE
+#ifdef DEBUGMODE
       log("<CLOSED>");
-  #endif
+#endif
 
   close(sock);
   unload_config_file();
@@ -685,20 +698,18 @@ aClient *findbyrealnick(char *realnick)
 
 aClient *findbynick(char *nick)
 {
-  ListNode <aClient> *newPtr;
+  list<aClient*>::iterator iter;
 #ifdef P10
   unsigned long hv = sHASH((unsigned char *) nick);
 #else
   unsigned long hv = iHASH((unsigned char *) nick);
 #endif
-  
-  newPtr = clients[hv].First();
-  
+
   aClient *client = NULL;
   
-  while (newPtr)
+  for(iter = clients[hv].begin(); iter != clients[hv].end(); iter++)
     {
-         client = newPtr->getData();
+         client = (*iter);
 #ifdef P10
          if (strcmp(client->getNick(), nick) == 0)
                {
@@ -709,50 +720,20 @@ aClient *findbynick(char *nick)
                  return client;
                }
          client = NULL;
-         newPtr = newPtr->Next();
     }
-  return client;    
+       return client;
 }
 
-aClient *findIRCplayer(const char *nick)
+Player *findplayer(const char *name)
 {
-  ListNode <aClient> *newPtr;
-  aClient *p = NULL;
-  
-  p = find(nick);
-  
-  if (!is_playing(p))
-       return NULL;
-  
-  unsigned long hv = iHASH((unsigned char *) p->stats->getName().c_str());
-  
-  for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
-    {
-         p = newPtr->getData();
-#ifdef P10
-         if (strcmp(p->getNick(), nick) == 0)
-               {
-#else
-      if (stricmp(p->getNick(), nick) == 0)
-               {       
-#endif
-                 return p;
-               }
-         p = NULL;
-       }
-  return NULL;
-}
-
-aClient *findplayer(const char *name)
-{
-  ListNode <aClient> *newPtr;
-  Player *p = NULL;
+  list<Player*>::iterator iter;
+  Player *p;
   unsigned long hv = iHASH((unsigned char *) name);
-  for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
+  for (iter = players[hv].begin(); iter != players[hv].end(); iter++)
     {
-         p = newPtr->getData()->stats;
+         p = (*iter);
          if (stricmp(p->getName().c_str(), name) == 0)
-           return newPtr->getData();
+           return p;
          p = NULL;
     }
   return NULL;
@@ -760,68 +741,64 @@ aClient *findplayer(const char *name)
 
 void check_idles()
 {
-    ListNode <aClient> *newPtr;
-    Player *p = NULL;
-
-    for (int x = 0; x < U_TABLE_SIZE; x++)
+  list<Player*>::iterator iter;
+  Player *p;
+  
+  for (int x = 0; x < U_TABLE_SIZE; x++)
     {
-       for (newPtr = players[x].First(); newPtr; newPtr = newPtr->Next())
-       {
-           p = newPtr->getData()->stats;
-           switch(p->getLevel())
-           {
-               case 1:
-               if ((time(NULL) - p->lastlogin) / 86400 >= level1expire)
+         for (iter = players[x].begin(); iter != players[x].end(); iter++)
                {
-                   logout(newPtr->getData());
-                   players[x].remove(newPtr->getData());
-                   return;
-               }
-                   break;
+                 p = (*iter);
 
-               default:
-               if ((time(NULL) - p->lastlogin) / 86400 >= defaultexpire)
-               {
-                   logout(newPtr->getData());
-                   players[x].remove(newPtr->getData());
-                   return;
+                 switch(p->getLevel())
+                       {
+                       case 1:
+                         if ((time(NULL) - p->lastlogin) / 86400 >= level1expire)
+                               {
+                                 logout(p->getClient());
+                                 return;
+                               }
+                         break;
+                         
+                       default:
+                         if ((time(NULL) - p->lastlogin) / 86400 >= defaultexpire)
+                               {
+                                 logout(p->getClient());
+                                 return;
+                               }
+                         break;
+                       }
+                 if (timedOut(p))
+                       {
+                         timeOutEvent(p);
+                       }
                }
-                   break;
-           }
-           if (timedOut(p))
-           {
-               timeOutEvent(p);
-           }
-       }
     }
 }
 
 aClient *findbynick(const char *nick)
 {
-    ListNode <aClient> *newPtr;
-    #ifdef P10
-       unsigned long hv = sHASH((unsigned char *) nick);
-    #else
-       unsigned long hv = iHASH((unsigned char *) nick);
-    #endif
-
-    newPtr = clients[hv].First();
-
-    aClient *client = NULL;
-
-    while (newPtr)
+  list<aClient*>::iterator iter;
+#ifdef P10
+  unsigned long hv = sHASH((unsigned char *) nick);
+#else
+  unsigned long hv = iHASH((unsigned char *) nick);
+#endif
+  
+  aClient *client = NULL;
+  
+  for (iter = clients[hv].begin(); iter != clients[hv].end(); iter++)
     {
-       client = newPtr->getData();
-       #ifdef P10
-           if (strcmp(client->getNick(), nick) == 0)
-       #else
+         client = (*iter);
+#ifdef P10
+         if (strcmp(client->getNick(), nick) == 0)
+#else
            if (stricmp(client->getNick(), nick) == 0)
-       #endif
-           return client;
-       client = NULL;
-       newPtr = newPtr->Next();
+#endif
+                 return client;
+         client = NULL;
     }
-    return client;    
+  return client;    
 }
 
 /* daemon() - detach process from user and disappear into the background
@@ -906,15 +883,15 @@ void load_lastrefresh()
     infile.open(".gsrefresh");
     if (infile.fail())
     {
-       #ifdef DEBUGMODE
+#ifdef DEBUGMODE
            log("Error opening .gsrefresh");
-       #endif
+#endif
 
        generate:
        long mytime = time(NULL);
-       #ifdef DEBUGMODE
+#ifdef DEBUGMODE
            log("Generating new refresh time");
-       #endif
+#endif
 
        // Just a safety measure... tho no one should
        // get anywhere near the actual time as their refreshperiod
@@ -992,3 +969,37 @@ void save_lastrollover()
     outfile << lastrollover << endl;
     outfile.close();
 }
+void clearItems()
+{
+  list<item*>::iterator iter;
+  for (iter = Items.begin(); iter != Items.end(); iter++)
+       {
+         delete (*iter);
+         Items.erase(iter);
+       }
+}
+void clearClients()
+{
+  list<aClient*>::iterator iter;
+  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
+       {
+         for (iter = clients[x].begin(); iter != clients[x].end(); iter++)
+               {
+                 delete (*iter);
+                 clients[x].erase(iter);
+               }
+       }
+}
+
+void clearPlayers()
+{
+  list<Player*>::iterator iter;
+  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
+       {
+         for (iter = players[x].begin(); iter != players[x].end(); iter++)
+               {
+                 delete (*iter);
+                 players[x].erase(iter);
+               }
+       }
+}