]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/gameserv.cpp
Moved all but the do_ functions out of gameserv.cpp and updated dependencies
[irc/gameservirc.git] / gameserv / gameserv.cpp
index 1a71976c8d93e5d17cb082e3b24826588d3139ea..42bd6f2446e423f4b7895b5b11297a89134dfdb2 100644 (file)
@@ -7,6 +7,8 @@
 #include "level.h"
 #include "sockhelp.h"
 #include "item.h"
+#include "script.h"
+#include "toplist.h"
 
 #include <algorithm>
 #include <cctype>
@@ -31,85 +33,13 @@ Monster dragon;                             // The current dragon
 Level levels[LEVELS];                  // The newest way to store monsters
 list<item*> Items;                      // The master list of items
 list<tavernItem> tavern;                // The list of items available at the tavern
-list<item*> store;                      // The list of items available at the store
-
-// Database functions
-int save_gs_dbase();
-int load_gs_dbase();
-int load_items();
-int load_tavern();
-int load_store();
-int load_dragon();
-int save_dragon();
-
-item *findItemByID(int id);
-item *findStoreItemByID(int id);
-tavernItem *findTavernItemByID(int id);
-
-// String functions
-#ifndef HAVE_STRTOK
-char *strtok(char *str, const char *delim);
-#endif
-
-int stricmp(const char *s1, const char *s2);
-int strnicmp(const char *s1, const char *s2, size_t len);
-// String Functions
-
-/********** Password functions **********/
-
-bool passcmp(const char *encrypted, char *plaintext); // Compares an encrypted pass with a plain text one
+list<item*> store;                      // List of items available at the store
 
-bool check_password(char *name, char *plaintext); // Finds a password for the given name, and checks it with passcmp against the plaintext password given.
+toplist myToplist;          // List of the top 10 players
 
-/********** Password functions **********/
 
 
-/********** GameServ Booleans **********/
-
 bool shuttingdown;
-bool timedOut(Player *p);
-void updateTS(Player *p);
-void timeOutEvent(Player *p);
-
-bool is_playing(char *u); // True if the given nickname in the clients list is playing.
-bool is_playing(aClient *user);
-
-bool is_fighting(char *u); // True if the given nick in the clients list is fighting anything.
-bool is_fighting(aClient *user);
-
-bool player_fight(char *u); // True if the player is fighting another player.
-bool player_fight(aClient *user);
-
-bool master_fight(char *u); // True if the player is fighting their master.
-bool master_fight(aClient *user);
-
-bool dragon_fight(char *u); // True if the player is fighting the dragon.
-bool dragon_fight(aClient *user);
-
-bool alphaNumeric(const char *str); // Returns true if all of the characters in str are alphanumeric non-special chars
-/********** GameServ Booleans **********/
-
-void display_help(char *u, char *file = NULL);
-void display_monster(char *u);
-void display_players(char *u);
-void display_players(aClient *user);
-long int chartoint(char ch);
-int isstringnum(char *num);
-long int pow (int x, int y);
-long int stringtoint(char *number);
-
-char *spaces(int len, char *seperator);
-void refresh(Player *p);
-void refreshall();
-void rollover(Player *p);
-void rolloverall();
-
-void updateTS(Player *p);
-void reset(Player *p);
-bool load_masters();
-bool load_monsters();
-bool load_levels();
-void delete_monsters();
 
 void do_admin(char *u);
 void do_attack(char *u);
@@ -136,14 +66,6 @@ void do_stats(char *u);
 void do_store(char *u);
 void do_tavern(char *u);
 void do_use(char *u);
-void see_master(char *u);
-
-void logout(aClient *user);
-void showstats(const char *u, const char *nick);
-void showTavern(aClient *user);
-void showinventory(Player *from, aClient *to);
-void showBankBalance(const char *u);
-void end_turn(aClient *user);
 
 #define WNA 16
 
@@ -183,7 +105,7 @@ void gameserv(char *source, char *buf)
          cmd = strtok(NULL, " ");
          
          if (!cmd)
-           notice(s_GameServ, source, "SYNTAX: /msg %S SEARCH FOREST");
+           notice(s_GameServ, source, "SYNTAX: /msg <S SEARCH FOREST");
          else
            do_forest(source);
          
@@ -290,12 +212,12 @@ void gameserv(char *source, char *buf)
          
          if (!(user = find(source)))
                {
-                 notice(s_GameServ, source, "Error: aClient not found. Contact a %S admin");
+                 notice(s_GameServ, source, "Error: aClient not found. Contact a <S admin");
                  log("Error: aClient not found: %s", source);
                }
          else if (!isAdmin(user))
                {
-                 notice(s_GameServ, source, "You must be a %S admin to use this command!");
+                 notice(s_GameServ, source, "You must be a <S admin to use this command!");
                }
          else
                {
@@ -314,12 +236,12 @@ void gameserv(char *source, char *buf)
          
          if (!(user = find(source)))
                {
-                 notice(s_GameServ, source, "Error: aClient not found. Contact a %S admin");
+                 notice(s_GameServ, source, "Error: aClient not found. Contact a <S admin");
                  log("Error: aClient not found: %s", source);
                }
          else if (!isAdmin(user))
                {
-                 notice(s_GameServ, source, "You must be a %S admin to use this command!");
+                 notice(s_GameServ, source, "You must be a <S admin to use this command!");
                }
          else
         {
@@ -332,12 +254,12 @@ void gameserv(char *source, char *buf)
          
          if (!(user = find(source)))
                {
-                 notice(s_GameServ, source, "Error: aClient not found. Contact a %S admin");
+                 notice(s_GameServ, source, "Error: aClient not found. Contact a <S admin");
                  log("Error: aClient not found: %s", source);
                }
          else if (!isAdmin(user))
                {
-                 notice(s_GameServ, source, "You must be a %S admin to use this command!");
+                 notice(s_GameServ, source, "You must be a <S admin to use this command!");
                }
          else
         {
@@ -352,6 +274,15 @@ void gameserv(char *source, char *buf)
                          notice(s_GameServ, source, "Loading monster data");
                          load_monsters();
                        }
+                 else if (stricmp(cmd2, "SCRIPTS") == 0)
+                       {
+                         // Testing scripts for now
+                         script scr;
+                         notice(s_GameServ, source, "Loading scripts");
+
+                         if (scr.loadScript("test.txt"))
+                               scr.executeScript(user->stats);
+                       }
                  else
                        {
                          display_help(source, cmd);
@@ -365,12 +296,12 @@ void gameserv(char *source, char *buf)
          
          if (!(user = find(source)))
                {
-                 notice(s_GameServ, source, "Error: aClient not found. Contact a %S admin");
+                 notice(s_GameServ, source, "Error: aClient not found. Contact a <S admin");
                  log("Error: aClient not found: %s", source);
                }
          else if (!isAdmin(user))
                {
-                 notice(s_GameServ, source, "You must be a %S admin to use this command!");
+                 notice(s_GameServ, source, "You must be a <S admin to use this command!");
                }
          else
         {
@@ -399,7 +330,7 @@ void gameserv(char *source, char *buf)
                        }
                  else
                        {
-                         notice(s_GameServ, source, "Unknown command \002%s\002. Type /msg %S \002HELP\002 to get a list of commands.", cmd);
+                         notice(s_GameServ, source, "Unknown command \002%s\002. Type /msg <S \002HELP\002 to get a list of commands.", cmd);
                        }
                }
     }
@@ -411,244 +342,6 @@ void gameserv(char *source, char *buf)
        cmd--;     // Same thing :)
 }
 
-int stricmp(const char *s1, const char *s2)
-{
-    register int c;
-
-    while ((c = tolower(*s1)) == tolower(*s2)) {
-        if (c == 0)
-            return 0;
-        s1++;
-        s2++;
-    }
-    if (c < tolower(*s2))
-        return -1;
-    return 1;
-}
-
-void showstats(const char *u, const char *nick)
-{
-    aClient *sender = find(u);
-       Player *p;
-    char *buf;
-    buf = new char[50];
-    char *space;
-
-
-    if (!(p = findplayer(nick)))
-         {
-        notice(s_GameServ, u, "%s not found", nick);
-         }
-    else
-         {
-        notice(s_GameServ, sender->getNick(), "Stats for %s:", p->getName().c_str());
-               
-        sprintf(buf, "Experience: %ld", p->getExp());
-        space = spaces(strlen(buf), " ");
-        notice(s_GameServ, sender->getNick(), "%s%sLevel: %d",  buf, space,
-                          p->getLevel());
-        delete [] space;
-               
-        sprintf(buf, "Gold: %ld", p->getGold());
-        space = spaces(strlen(buf), " ");
-        notice(s_GameServ, sender->getNick(), "%s%sGold in Bank: %ld", buf, space, p->getBank());
-        delete [] space;
-               
-        notice(s_GameServ, sender->getNick(), "Hit Points: %d of %d", p->getHP(),
-                          p->getMaxHP());
-               
-        sprintf(buf, "Strength: %d", p->getStrength());
-        space = spaces(strlen(buf), " ");
-        notice(s_GameServ, sender->getNick(), "%s%sDefense: %d",
-                          buf, space, p->getDefense());
-        delete [] space;
-               
-        sprintf(buf, "Armor: %s", (p->getArmor() ? p->getArmor()->getName().c_str() : "Nothing"));
-        space = spaces(strlen(buf), " ");
-               
-        notice(s_GameServ, sender->getNick(), "%s%sWeapon: %s", buf, space,
-                          (p->getWeapon() ? p->getWeapon()->getName().c_str() : "Fists"));
-               
-        delete [] space;
-               
-        sprintf(buf, "Forest Fights: %d", p->getForestFights());
-        space = spaces(strlen(buf), " ");
-        notice(s_GameServ, sender->getNick(), "%s%sPlayer Fights: %d", buf, space, p->getPlayerFights());
-        delete [] space;
-               if (p->getClient() == sender || isAdmin(sender))
-                 {
-                       showinventory(p, sender);
-                 }
-         }
-
-    delete [] buf;
-}
-
-char *spaces(int len, char *seperator)
-{
-    char *final;
-    final = new char[30];
-    int y;
-    strcpy(final, seperator);
-    for (y = 0; y < 30 - len; y++)
-        strcat(final, seperator);
-    return final;
-}
-
-void raw(const char *fmt, ...)
-{
-    va_list args;
-    char *input;
-    const char *t = fmt;
-    input = new char[1024];
-    va_start(args, fmt);
-    memset(input, 0, sizeof(input)); // Initialize to NULL
-    for (; *t; t++)
-    {
-       if (*t == '%')
-       {
-           switch(*++t) {
-               case 'd': sprintf(input, "%s%d", input, va_arg(args, int)); break;
-               case 's': sprintf(input, "%s%s", input, va_arg(args, char *)); break;
-               case 'S': sprintf(input, "%s%s", input, s_GameServ); break;
-               case 'l':
-                  if (*++t == 'd')
-                         sprintf(input, "%s%ld", input, va_arg(args, long int)); break;
-           }
-       }
-       else
-       {
-           sprintf(input, "%s%c", input, *t);
-       }
-
-    }
-    #ifdef DEBUGMODE
-       log("Input: %s", input);
-    #endif
-
-    sprintf(input, "%s%s", input, "\r\n");
-    sock_puts(sock, input);
-    delete [] input;
-    va_end(args);
-}
-/* Send a NOTICE from the given source to the given nick. */
-
-void notice(const char *source, const char *dest, const char *fmt, ...)
-{
-    if (fmt[0] == '\0')
-       return;
-
-    char *commanduse;
-    commanduse = new char[16];
-
-    #ifdef P10
-       if (isUsePrivmsg())
-           strcpy(commanduse, "P");
-       else
-           strcpy(commanduse, "O");
-    #else
-
-       if (isUsePrivmsg())
-           strcpy(commanduse, "PRIVMSG");
-       else
-           strcpy(commanduse, "NOTICE");
-    #endif
-
-    va_list args;
-    char *input;
-    const char *t = fmt;
-    input = new char[1024];
-    va_start(args, fmt);
-    if (dest[0] == ':')
-    {
-       dest++;
-
-      #if !defined(P10)
-       sprintf(input, ":%s %s %s :", source, commanduse, dest);
-      #else
-       sprintf(input, "%s %s %s :", gsnum, commanduse, dest);
-      #endif
-
-       dest--;
-    }
-    else
-    {
-      #if !defined(P10)
-       sprintf(input, ":%s %s %s :", source, commanduse, dest);
-      #else
-       sprintf(input, "%s %s %s :", gsnum, commanduse, dest);
-      #endif
-    }
-
-    for (; *t; t++)
-    {
-       if (*t == '%')
-       {
-           switch(*++t) {
-               case 'd': sprintf(input, "%s%d", input, va_arg(args, int)); break; 
-               case 's': sprintf(input, "%s%s", input, va_arg(args, char *)); break;
-               case 'S': sprintf(input, "%s%s", input, s_GameServ); break;
-               case 'c': sprintf(input, "%s%c", input, va_arg(args, int)); break;
-               case 'l':
-                  if (*++t == 'd')
-                         sprintf(input, "%s%ld", input, va_arg(args, long int)); break;
-           }
-       }
-       else
-       {
-           sprintf(input, "%s%c", input, *t);
-       }
-
-    }
-    #ifdef DEBUGMODE
-       log("Input: %s", input);
-    #endif
-    sprintf(input, "%s%s", input, "\r\n");
-    sock_puts(sock, input);
-    delete [] commanduse;
-    delete [] input;
-va_end(args);
-}
-
-
-int strnicmp(const char *s1, const char *s2, size_t len)
-{
-    register int c;
-
-    if (!len)
-        return 0;
-    while ((c = tolower(*s1)) == tolower(*s2) && len > 0) {
-        if (c == 0 || --len == 0)
-            return 0;
-        s1++;
-        s2++;
-    }
-    if (c < tolower(*s2))
-        return -1;
-    return 1;
-}
-
-#ifndef HAVE_STRTOK
-char *strtok(char *str, const char *delim)
-{
-    static char *current = NULL;
-    char *ret;
-
-    if (str)
-        current = str;
-    if (!current)
-        return NULL;
-    current += strspn(current, delim);
-    ret = *current ? current : NULL;
-    current += strcspn(current, delim);
-    if (!*current)
-        current = NULL;
-    else
-        *current++ = 0;
-    return ret;
-}
-#endif
-
 void do_check(char *u)
 {
     int days, hours, minutes, seconds;
@@ -695,40 +388,72 @@ void do_list(char *u)
          return;
     }
   
-  list<Player*>::iterator iter;
-  bool header = false;
+  if (cmd == NULL || stricmp(cmd, "TOP") == 0)
+  {
+    list<PlayerWrapper>::iterator iter;
+    bool header = false;
 
-  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
-       {
-         iter = players[x].begin();
-         if (!players[x].empty())
-               {
-                 while(iter != players[x].end())
-                       {
-                         p = (*iter);
-                         if (cmd || is_playing(p->getClient()))
-                               {
-                                 if (!header)
-                                       {
-                                         notice(s_GameServ, u, "Players:");
-                                         header = true;
-                                       }
-#ifdef P10
-                                 notice(s_GameServ, u, "IRC: %s     Game: %s", (p->getClient() ? p->getClient()->getRealNick() : "Not Playing"), 
-                                                p->getName().c_str());
-#else
-                                 notice(s_GameServ, u, "IRC: %s     Game: %s", (p->getClient() ? p->getClient()->getNick() : "Not Playing"), 
-                                                p->getName().c_str());
-#endif
-                               }
-                         iter++;
-                       }
-               }
-       }
-  if (!header)
-       notice(s_GameServ, u, "No one is playing");
+    if (myToplist.empty())
+      {
+         notice(s_GameServ, u, "There are no players");
+         return;
+      }
+    myToplist.sort();
+    myToplist.reverse();
+     
+    iter = myToplist.begin();
+     
+    while (iter != myToplist.end())
+    {
+        if (!header)
+        {
+           notice(s_GameServ, u, "Top Players");
+           header = true;
+
+        }
+        notice(s_GameServ, u, "Level: %2d Exp: %10d Name: %s", 
+        (*iter).getLevel(), (*iter).getExp(), (*iter).getName().c_str());
+        iter++;
+     }
+  }
   else
-       notice(s_GameServ, u, "End of List"); 
+  {
+        
+     list<Player*>::iterator iter;
+     bool header = false;
+   
+     for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
+      {
+        iter = players[x].begin();
+        if (!players[x].empty())
+         {
+           while(iter != players[x].end())
+            {
+              p = (*iter);
+              if (cmd || is_playing(p->getClient()))
+               {
+                 if (!header)
+                  {
+                    notice(s_GameServ, u, "Players:");
+                    header = true;
+                  }
+      #ifdef P10
+                 notice(s_GameServ, u, "IRC: %s     Game: %s", (p->getClient() ? p->getClient()->getRealNick() : "Not Playing"), 
+                      p->getName().c_str());
+      #else
+                 notice(s_GameServ, u, "IRC: %s     Game: %s", (p->getClient() ? p->getClient()->getNick() : "Not Playing"), 
+                      p->getName().c_str());
+      #endif
+               }
+              iter++;
+            }
+         }
+      }
+     if (!header)
+      notice(s_GameServ, u, "No one is playing");
+     else
+      notice(s_GameServ, u, "End of List"); 
+   }
 }
 
 void do_set(char *u)
@@ -754,7 +479,7 @@ void do_set(char *u)
     }
   else if (!name || !cmd)
     {
-      notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
+      notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
       return;
     }
   else if (!(p = findplayer(name)))
@@ -776,7 +501,7 @@ void do_set(char *u)
     }
   if (!cmd2)
        {
-         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
+         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
          return;
        }
   
@@ -793,7 +518,7 @@ void do_set(char *u)
                }
       else if (user != p->getClient() && !isAdmin(user))
                {
-                 notice(s_GameServ, u, "You must be a %S admin to set other peoples' passwords.");
+                 notice(s_GameServ, u, "You must be a <S admin to set other peoples' passwords.");
                  return;
                }
     }
@@ -810,7 +535,7 @@ void do_set(char *u)
                }
          if (!cmd2)
                {
-                 notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] [BANK] BALANCE <NUMBER>");
+                 notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] [BANK] BALANCE <NUMBER>");
                  return;
                }
          
@@ -827,7 +552,7 @@ void do_set(char *u)
                }
       else if (stricmp(cmd2, "FIGHTS") != 0)
                {
-                 notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] PLAYER FIGHTS <NUMBER>");
+                 notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] PLAYER FIGHTS <NUMBER>");
                  return;
                }
       else
@@ -835,7 +560,7 @@ void do_set(char *u)
                  cmd2 = strtok(NULL, " ");
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] PLAYER FIGHTS <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] PLAYER FIGHTS <NUMBER>");
                          return;
                        }
                  p->setPlayerFights(stringtoint(cmd2));
@@ -852,7 +577,7 @@ void do_set(char *u)
                }
       else if (stricmp(cmd2, "FIGHTS") != 0)
                {
-                 notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] FOREST FIGHTS <number>");
+                 notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] FOREST FIGHTS <number>");
                  return;
                }
       else
@@ -860,7 +585,7 @@ void do_set(char *u)
                  cmd2 = strtok(NULL, " ");
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] FOREST FIGHTS <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] FOREST FIGHTS <NUMBER>");
                          return;
                        }
                  
@@ -880,7 +605,7 @@ void do_set(char *u)
                {
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] GOLD <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] GOLD <NUMBER>");
                          return;
                        }
                  p->setGold(stringtoint(cmd2));
@@ -900,7 +625,7 @@ void do_set(char *u)
                {
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] STRENGTH <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] STRENGTH <NUMBER>");
                          return;
                        }
                  
@@ -921,7 +646,7 @@ void do_set(char *u)
                {
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] DEFENSE <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] DEFENSE <NUMBER>");
                          return;
                        }
                  
@@ -942,7 +667,7 @@ void do_set(char *u)
                {
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] HP <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] HP <NUMBER>");
                          return;
                        }
 
@@ -967,7 +692,7 @@ void do_set(char *u)
                {
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] MAXHP <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] MAXHP <NUMBER>");
                          return;
                        }
                  p->setMaxHP(stringtoint(cmd2));
@@ -987,7 +712,7 @@ void do_set(char *u)
                {
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {EXPERIENCE|EXP} <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] {EXPERIENCE|EXP} <NUMBER>");
                          return;
                        }
                  
@@ -1008,7 +733,7 @@ void do_set(char *u)
                {
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] LEVEL <NUMBER>");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] LEVEL <NUMBER>");
                          return;
                        }
                  p->setLevel(stringtoint(cmd2));
@@ -1028,7 +753,7 @@ void do_set(char *u)
                {
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] ALIVE TRUE|FALSE");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] ALIVE TRUE|FALSE");
                          return;
                        }
                  else if (stricmp(cmd2, "TRUE") == 0)
@@ -1052,7 +777,7 @@ void do_set(char *u)
                }
       else if (stricmp(cmd2, "MASTER") != 0)
                {
-                 notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] SEEN MASTER {TRUE|FALSE}");
+                 notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] SEEN MASTER {TRUE|FALSE}");
                  return;
                }
       else
@@ -1060,7 +785,7 @@ void do_set(char *u)
                  cmd2 = strtok(NULL, " ");
                  if (!cmd2)
                        {
-                         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NICK] SEEN MASTER {TRUE|FALSE}");
+                         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NICK] SEEN MASTER {TRUE|FALSE}");
                          return;
                        }
                  else if (stricmp(cmd2, "TRUE") == 0)
@@ -1078,7 +803,7 @@ void do_set(char *u)
   else
        {
          notice(s_GameServ, u, "Unknown command: SET %s", cmd);
-         notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
+         notice(s_GameServ, u, "SYNTAX: /msg <S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
          return;
        }
 }
@@ -1109,7 +834,7 @@ void do_logout(char *u)
     {
          if (!isAdmin(user))
                {
-                 notice(s_GameServ, u, "You must be a %S admin to use this command!");
+                 notice(s_GameServ, u, "You must be a <S admin to use this command!");
                }
          else if (!(p = findplayer(name)))
                {
@@ -1139,63 +864,6 @@ void do_logout(char *u)
     }
 }
 
-void logout(aClient *user)
-{
-  if (user != NULL)
-    {
-         if (user->stats != NULL)
-               {
-               
-                 list<Player*>::iterator iter;
-                 unsigned long hv = iHASH((unsigned char *) user->stats->getName().c_str());
-                 iter = find(players[hv].begin(), players[hv].end(), user->stats);
-                 
-                 if (iter == players[hv].end())
-                       {
-                         notice(s_GameServ, user->getNick(), "Fatal error. Contact "\
-                                        "%S Admin. Cannot find you in the players list. This should NEVER happen");
-                         log("Error on logout(). Can't find %s in the players list",
-#ifdef P10 
-                                 user->getRealNick()
-#else 
-                                 user->getNick()
-#endif
-                                 );
-                         user->stats = NULL;
-                         
-                         return;
-                       }
-                 user->stats->delMonster();
-                 user->stats->delMaster();
-                 user->stats->delBattle();
-                 clearDragonFight(user->stats);
-                 clearYourTurn(user->stats);
-                 clearPlaying(user);
-                 
-                 user->stats->setClient(NULL);
-                 
-                 
-                 if (player_fight(user))
-                       {
-                         clearYourTurn(user->stats->getBattle()->stats);
-                         user->stats->getBattle()->stats->delBattle();
-                       }
-                 
-#ifdef DEBUGMODE
-                 log("Logged out player %s",
-#ifdef P10 
-                         user->getRealNick()
-#else 
-                         user->getNick()
-#endif 
-                         );
-#endif
-               }
-       }
-  if (user)
-       user->stats = NULL;
-}
-
 void do_register(char *u)
 {
   char *password, *name;
@@ -1206,15 +874,15 @@ void do_register(char *u)
   
   if (!name)
     {
-         notice(s_GameServ, u, "SYNTAX: /msg %S REGISTER NAME PASSWORD");
+         notice(s_GameServ, u, "SYNTAX: /msg <S REGISTER NAME PASSWORD");
     }
   else if (stricmp(name, s_GameServ) == 0)
     {
-         notice(s_GameServ, u, "You can't use %S as a name!");
+         notice(s_GameServ, u, "You can't use <S as a name!");
     }
   else if (!password)
     {
-         notice(s_GameServ, u, "SYNTAX: /msg %S REGISTER NAME PASSWORD");
+         notice(s_GameServ, u, "SYNTAX: /msg <S REGISTER NAME PASSWORD");
     }
   else if (strlen(name) > maxnicklen)
        {
@@ -1284,10 +952,14 @@ void do_register(char *u)
 
                  // Add the player to the list
                  players[hv].push_back(user->stats);
+
+                 // Attempt to add the player to the top list
+                 // The class takes care of pruning the user out if they don't deserve to be in the list
+                 myToplist.insertPlayer(user->stats);
                }
          else
                {
-                 notice(s_GameServ, u, "Already registered. Contact a %S admin for help.");
+                 notice(s_GameServ, u, "Already registered. Contact a <S admin for help.");
                }
     }
 }
@@ -1301,7 +973,7 @@ void do_identify(char *u)
   password = strtok(NULL, " ");
   if (!password || !name)
     {
-         notice(s_GameServ, u, "SYNTAX: /msg %S IDENTIFY NAME PASSWORD");
+         notice(s_GameServ, u, "SYNTAX: /msg <S IDENTIFY NAME PASSWORD");
     }
   else if (!(user = find(u)))
     {
@@ -1340,7 +1012,7 @@ void do_identify(char *u)
 
          if (iter == players[hv].end())
                {
-                 notice(s_GameServ, u, "Fatal error. Contact %S Admin. Buf: %s", 
+                 notice(s_GameServ, u, "Fatal error. Contact <S Admin. Buf: %s", 
                                 strtok(NULL, ""));
                  return;
                }
@@ -1404,231 +1076,9 @@ void do_stats(char *u)
        showstats(u, nick);
 }
 
-bool load_masters()
-{
-  ifstream infile(masterdata);
-  char *buf;
-  int l = 0;
-  buf = new char[1024];
-  
-  if (infile.fail())
-    {
-         log("Error opening %s", masterdata);
-         return false;
-    }
-  
-#ifdef DEBUGMODE
-  log("Loading masters from %s", masterdata);
-#endif
-  
-  for (l = 0; l < LEVELS - 1; l++)
-    {
-         infile.getline(buf, 1024, '\n');
-         
-         log("%s", buf);
-         if (buf[0] == '#' || buf[0] == '\n' || buf[0] == '\r')
-               {
-                 l--;
-                 continue;
-               }
-         else if (buf[0] == '^')
-           break;
-         
-         Monster *master = &levels[l].master;
-         
-         char *name, *weapon, *strength, *gold, *exp, *maxhp, *death;
-         
-         
-         name = strtok(buf, "~");
-         weapon = strtok(NULL, "~");
-         strength = strtok(NULL, "~");
-         gold = strtok(NULL, "~");
-         exp = strtok(NULL, "~");
-         maxhp = strtok(NULL, "~");
-         death = strtok(NULL, "~");
-       
-         master->name = name;
-         master->weapon = weapon;
-         master->strength = stringtoint(strength);
-         master->gold = stringtoint(gold);
-         master->exp = stringtoint(exp);
-         master->maxhp = stringtoint(maxhp);
-         master->hp = master->maxhp;
-         master->death = death;
-    }
-
-  delete []buf;
-  
-  if (l < LEVELS - 1)  // We didn't load a master for every level - check data/masters.dat
-       return false;
-  else
-       return true;
-}
-
-void delete_monsters()
-{
-  for (int x = 0; x < LEVELS; x++)
-       levels[x].monsters.clear();
-}
-
-void display_monster(char *u)
-{
-  if (is_playing(u))
-    {
-         aClient *user = find(u);
-         Player *ni = user->stats;
-         
-         notice(s_GameServ, u, "Your Hitpoints: \ 2%d\ 2", ni->getHP());
-         notice(s_GameServ, u, "%s's Hitpoints: \ 2%d\ 2", ni->getMonster()->name.c_str(), ni->getMonster()->hp);
-         notice(s_GameServ, u, "Here are your commands:");
-         notice(s_GameServ, u, "/msg %S attack");
-         notice(s_GameServ, u, "/msg %S run");
-         notice(s_GameServ, u, "What will you do?");
-    }
-}
-
-void display_players(char *u)
-{
-  aClient *user;
-  if (!(user = find(u)))
-    {
-         log("Fatal error in display_players(): Couldn't find %s", u);
-    }
-  else
-       display_players(user);
-}
-
-void display_players(aClient *user)
-{
-  char *u = user->getNick();
-  if (is_playing(user) && player_fight(user))
-    {
-         aClient *battle = user->stats->getBattle();
-         notice(s_GameServ, u, "Your Hitpoints: \ 2%d\ 2", user->stats->getHP());
-         notice(s_GameServ, u, "%s's Hitpoints: \ 2%d\ 2", battle->stats->getName().c_str(), battle->stats->getHP());
-         notice(s_GameServ, u, "Here are your commands:");
-         notice(s_GameServ, u, "/msg %S attack");
-         notice(s_GameServ, u, "/msg %S run");
-         notice(s_GameServ, u, "What will you do?");
-    }
-}
-
-
-bool is_playing(char *u)
-{
-  aClient *user;
-  if (!(user = find(u)))
-       return false;
-  else
-       return is_playing(user);
-}
-
-bool is_playing(aClient *user)
-{
-  if (!user)
-    {
-         return false;
-    }
-  else if (!user->stats)
-       {
-         return false;
-       }
-  else if (!FL_is_playing(user))
-    {
-         return false;
-    }
-  else if (user->stats->getClient() != user)
-    {
-         return false;
-    }
-  else
-       return true;
-}
-
-bool is_fighting(char *u)
-{
-  aClient *user;
-  
-  if (!(user = find(u)))
-       return false;
-  else
-       return is_fighting(user);
-}
-
-bool is_fighting(aClient *user)
-{
-  if (!is_playing(user))
-       return false;
-  else
-       return player_fight(user) || master_fight(user) || user->stats->getMonster() != NULL;
-}
-
-bool player_fight(char *u)
-{
-  aClient *user;
-  
-  if (!(user = find(u)))
-       return false;
-  else 
-       return player_fight(user);
-}
-
-bool player_fight(aClient *user)
-{
-  if (!is_playing(user))
-       return false;
-  else if (is_playing(user->stats->getBattle()))
-    {
-         return true;
-    }
-  return false;
-}
-
-bool master_fight(char *u)
-{
-  aClient *user;
-  
-  if (!(user = find(u)))
-       return false;
-  else
-       return master_fight(user);
-}
-
-bool master_fight(aClient *user)
-{
-  if (!is_playing(user))
-       return false;
-  else
-       return user->stats->getMaster() != NULL;
-}
 
-bool dragon_fight(char *u)
-{
-  aClient *user;
-  if (!(user = find(u)))
-       return false;
-  else
-       return dragon_fight(user);
-}
 
-bool dragon_fight(aClient *user)
-{
-  if (!is_playing(user))
-       return false;
-  else
-       return (isDragonFight(user->stats));
-}
 
-bool alphaNumeric(const char *str)
-{
-  int len = strlen(str);
-  for (int x = 0; x < len; x++)
-       {
-         if (!((int(str[x]) >= 65 && int(str[x]) <= 90) || (int(str[x]) >= 97 && int(str[x]) <= 122) || (int(str[x]) >= 48 && int(str[x]) <= 57) || int(str[x]) == 95))
-               return false;
-       }
-  return true;
-}
 
 void do_fight(char *u)
 {
@@ -1639,12 +1089,12 @@ void do_fight(char *u)
   
   if (!nick)
     {
-         notice(s_GameServ, u, "SYNTAX: /msg %S FIGHT PLAYER");
+         notice(s_GameServ, u, "SYNTAX: /msg <S FIGHT PLAYER");
          return;
     }
   else if (!(ni = find(u)))
     {
-         notice(s_GameServ, u, "Fatal error. Contact a(n) %S admin. buf: %s", strtok(NULL, ""));
+         notice(s_GameServ, u, "Fatal error. Contact a(n) <S admin. buf: %s", strtok(NULL, ""));
          return;
     }
   else if (isIgnore(ni))
@@ -1772,12 +1222,12 @@ void do_equip(char *u)
   if (!item || int(item[0]) < 48 || int(item[0] > 57))
     {
       notice(s_GameServ, u, "SYNTAX: EQUIP ####");
-      notice(s_GameServ, u, "Type /msg %S HELP EQUIP for more information.");
+      notice(s_GameServ, u, "Type /msg <S HELP EQUIP for more information.");
       return;
     }
   else if (!(user = find(u)))
     {
-      notice(s_GameServ, u, "Fatal error in do_equip. Contact a(n) %S Admin");
+      notice(s_GameServ, u, "Fatal error in do_equip. Contact a(n) <S Admin");
       return;
     }
   else if (isIgnore(user))
@@ -1808,7 +1258,7 @@ void do_equip(char *u)
       }
     else if (equip->getItem()->getType() != ARMOR && equip->getItem()->getType() != WEAPON)
       {
-               notice(s_GameServ, u, "You can't use %s like that. Try /msg %S use", equip->getItem()->getName().c_str());
+               notice(s_GameServ, u, "You can't use %s like that. Try /msg <S use", equip->getItem()->getName().c_str());
       }
     else
       {
@@ -1831,12 +1281,12 @@ void do_use(char *u)
   if (!item || int(item[0]) < 48 || int(item[0]) > 57 || (numuse && (int(numuse[0]) < 48 || int(numuse[0]) > 57)))
     {
          notice(s_GameServ, u, "SYNTAX: USE ####");
-         notice(s_GameServ, u, "Type /msg %S HELP USE for more information.");
+         notice(s_GameServ, u, "Type /msg <S HELP USE for more information.");
          return;
     }
   else if (!(user = find(u)))
     {
-         notice(s_GameServ, u, "Fatal Error in do_use. Contact a(n) %S Admin");
+         notice(s_GameServ, u, "Fatal Error in do_use. Contact a(n) <S Admin");
          return;
     }
   else if (isIgnore(user))
@@ -1876,7 +1326,7 @@ void do_use(char *u)
        }
   else if (used->getItem()->getType() != POTION)
        {
-         notice(s_GameServ, u, "You can't use %s like that. Try /msg %S equip", used->getItem()->getName().c_str());
+         notice(s_GameServ, u, "You can't use %s like that. Try /msg <S equip", used->getItem()->getName().c_str());
        }
   else
        {
@@ -1921,7 +1371,7 @@ void do_run(char *u)
   
   if (!(user = find(u)))
     {
-         notice(s_GameServ, u, "Couldn't find you. Error. Contact a %S admin");
+         notice(s_GameServ, u, "Couldn't find you. Error. Contact a <S admin");
          return;
     }
   else if (isIgnore(user))
@@ -1956,6 +1406,7 @@ void do_run(char *u)
          notice(s_GameServ, p->getBattle()->getNick(), "\ 2%s\ 2 ran away from you like a little baby!", p->getName().c_str());
          addNews(todaysnews, "%s ran away from %s like a little baby!!", p->getName().c_str(), p2->getName().c_str()); /* DrLnet - edited by Kain */
          p2->delBattle();
+         p->delBattle();
        }
   else if (player_fight(user) && !isYourTurn(p))
     {
@@ -1971,103 +1422,24 @@ void do_run(char *u)
        }
 }
 
-void end_turn(aClient *user)
+
+void do_heal(char *u)
 {
-  char *nick, *u = user->getNick();
-  Monster *fight;
-  aClient *battle;
-  int mhit;
-  
-  nick = new char[strlen(user->getNick()) + 1];
-  
-  if (!user || !is_playing(user) || !is_fighting(user))
-       goto endturn;
-  
-  if (!player_fight(user) && !master_fight(user))
-       fight = user->stats->getMonster();
-  else
-       fight = user->stats->getMaster();
-  battle = user->stats->getBattle();
+  aClient *ni;
+  char *amount = strtok(NULL, " ");
+  int price, num;
   
-  if (!player_fight(user))
+  if (!amount)
     {
-         // Opponent's Hit
-         mhit = (fight->strength / 2) + (rand() % (fight->strength / 2)) - (user->stats->getDefense());
+         notice(s_GameServ, u, "SYNTAX: /msg <S HEAL {ALL | #}");
+         return;
     }
-  else
+  else if (!(ni = find(u)))
     {
-         // Opponent's Hit
-         mhit = (battle->stats->getStrength() / 2) + (rand() % (battle->stats->getStrength() / 2)) - user->stats->getDefense();
+       notice(s_GameServ, u, "Fatal error. Contact a(n) <S admin. buf: %s", strtok(NULL, ""));
+       return;
     }
-  if (!player_fight(user))
-    {
-         
-         if (mhit > 0)
-        {
-                 notice(s_GameServ, u, "\1f%s\1f attacks with their \1f%s\1f for \ 2%d\ 2 damage!",
-                                fight->name.c_str(), fight->weapon.c_str(), mhit);
-        }
-         else if (mhit <= 0)
-               notice(s_GameServ, u, "%s completely misses you!", fight->name.c_str());
-         
-         if (mhit >= user->stats->getHP())
-        {
-                 if (!master_fight(user))
-            {
-                         notice(s_GameServ, u, "You have been \ 2\1fkilled\1f\ 2 by %s!", fight->name.c_str());
-                         notice(s_GameServ, u, "You lose all gold on hand and lose 10 percent "\
-                                        "of your experience!");
-                         user->stats->setGold(0);
-                         user->stats->subtractExp((long int)(user->stats->getExp() * .10));
-                         user->stats->setHP(0);
-                         user->stats->delMonster();
-                         clearAlive(user->stats);
-                         goto endturn;
-            }
-                 else
-            {
-                         notice(s_GameServ, u, "%s has bested you! You will have to wait "\
-                                        "until tomorrow to try again", user->stats->getMaster()->name.c_str());
-                         user->stats->delMonster();
-                         user->stats->delMaster();
-                         goto endturn;
-            }
-        }
-         else
-        {
-                 if (mhit > 0)
-                       user->stats->subtractHP(mhit);
-                 display_monster(u);
-                 goto endturn;
-        }
-    }
-  else
-    {
-         clearYourTurn(user->stats);
-         setYourTurn(battle->stats);
-         display_players(battle);
-    }
- endturn:
-  delete []nick;
-}
-
-void do_heal(char *u)
-{
-  aClient *ni;
-  char *amount = strtok(NULL, " ");
-  int price, num;
-  
-  if (!amount)
-    {
-         notice(s_GameServ, u, "SYNTAX: /msg %S HEAL {ALL | #}");
-         return;
-    }
-  else if (!(ni = find(u)))
-    {
-       notice(s_GameServ, u, "Fatal error. Contact a(n) %S admin. buf: %s", strtok(NULL, ""));
-       return;
-    }
-    else if (isIgnore(ni))
+    else if (isIgnore(ni))
     {
        #ifdef DEBUGMODE
            log("Ignoring %s.", ni->getNick());
@@ -2146,448 +1518,11 @@ void do_heal(char *u)
     else if (amount[0] == '-')
         notice(s_GameServ, u, "You trying to cheat?");
     else
-       notice(s_GameServ, u, "SYNTAX: /msg %S HEAL {ALL | #}");
-}
-
-int isstringnum(char *num)
-{
-    unsigned int x;
-    for (x = 0; x < strlen(num); x++)
-    {
-        if ((int)num[x] < 48 || (int)num[x] > 57)
-            return 0;
-    }
-return 1;
-}
-
-long int stringtoint(char *number)
-{
-    return atol(number);
-}
-
-long int pow(int x, int y)
-{
-  long int value = 0;
-  int count = 0;
-  value += x;
-  
-  if (x != 0 && y != 0)
-    {
-         for (count = 1; count <= y - 1; count++)
-               value *= x;
-    }
-  else
-       {
-         return 1;
-       }
-  return value;
-}
-
-long int chartoint(char ch)
-{
-  if (int(ch) >= 48 && int(ch) <= 57)
-       return int(ch) - 48;
-  else
-       return 0;
-}
-
-int save_gs_dbase()
-{
-  list<Player*>::iterator iter;
-  Player *it;
-  ofstream outfile;
-  
-  outfile.open(playerdata);
-  
-  if (!outfile)
-    {
-         log("Error opening %s", playerdata);
-         return 0;
-    }
-  
-  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
-       {
-         for(iter = players[x].begin(); iter != players[x].end(); iter++)
-               {
-                 it = (*iter);
-                 clearYourTurn(it);
-                 item *w, *a;
-                 w = it->getWeapon();
-                 a = it->getArmor();
-                 
-                 outfile << it->getName().c_str() << ' ' << it->getLevel() << ' ' << it->getExp() << ' ' << it->getGold() << ' ' << it->getBank() << ' '<< it->getHP() << ' ' << it->getMaxHP() << ' ' << it->getStrength() << ' ' << it->getDefense() << ' ' << it->getForestFights() << ' ' << it->getPlayerFights() <<  ' ' << it->getFlags() << ' ' << it->getPassword().c_str() << ' ' << it->lastlogin << ' ' << (w ? w->getID() : 0) << ' ' << (a ? a->getID() : 0);
-                 
-                 // Traverse the list and write out each item ID and how many uses are left
-                 if (!it->inventory->isEmpty())
-                       {
-                         list<itemContainer> *myitems;
-                         list<itemContainer>::iterator item_iter;
-                         myitems = it->inventory->getItems();
-                         
-                         for(item_iter = myitems->begin();item_iter != myitems->end();item_iter++)
-                               {
-                                 outfile << ' ' << (*item_iter).getItem()->getID() << ' ' << (*item_iter).getUses();
-                               }
-                       }
-                 outfile << endl;
-               }
-       }
-  outfile.close();
-  return 1;
-}
-
-int load_dragon()
-{
-    ifstream infile;
-    char *buf;
-
-    infile.open(dragondata);
-
-    if (infile.fail())
-    {
-       infile.clear();
-       log ("Error opening %s. Trying initialdragon.dat", dragondata);
-       infile.open("data/initialdragon.dat");
-       if (infile.fail())
-        {
-           log ("Error opening data/initialdragon.dat");
-           return 0;
-       }
-    }
-
-    buf = new char[1024];
-
-    infile.getline(buf, 1024, '\n');
-    infile.close(); // Done with the file... we have what we want
-
-    dragon.name = strtok(buf, "~");
-    dragon.weapon = strtok(NULL, "~");
-    dragon.gold = 0;
-    dragon.exp = 0;
-    dragon.strength = stringtoint(strtok(NULL, "~"));
-    dragon.hp = stringtoint(strtok(NULL, "~"));
-    dragon.defense = stringtoint(strtok(NULL, "~"));
-    dragon.death = strtok(NULL, "");
-
-    log ("loaded dragon: %s", dragon.name.c_str());
-
-    delete []buf;
-
-return save_dragon();  // Save the dragon file and return the status code :)
-}
-
-int save_dragon()
-{
-    ofstream outfile;
-
-    outfile.open(dragondata);
-
-    if (outfile.fail())
-    {
-       log ("Error opening %s. Exiting.", dragondata);
-       return 0;
-    }
-
-    outfile << dragon.name.c_str() << '~' << dragon.weapon.c_str() << '~' 
-               << dragon.strength << '~' << dragon.hp << '~' 
-               << dragon.defense << '~' << dragon.death.c_str() << "\n^"
-               << endl;
-
-outfile.close();
-
-return 1;
-}
-
-int load_store()
-{
-  ifstream infile;
-  char *buf;
-  item *tempItem;
-  buf = new char[1024];
-  long id;
-  
-  infile.open(storeitemdata);
-  
-  if (infile.fail())
-    {
-      log("Error opening %s", storeitemdata);
-      return 0;
-    }
-  
-  while (infile.getline(buf, 1024, '\n'))
-    {
-      try
-       {
-         if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
-           {
-             item *tempItem2;
-             id = stringtoint(strtok(buf, ""));
-             tempItem2 = findItemByID(id);
-             if (tempItem2 == NULL)
-               {
-                 log("Invalid ID in %s", storeitemdata);
-                 return 0;
-               }
-
-             tempItem = tempItem2;
-             store.push_back(tempItem);
-           }
-       }
-      catch (char *str)
-       {
-         log("Exception loading store: %s", str);
-         delete []buf;
-         return 0;
-       }
-    }
-  delete []buf;
-  return 1;
-}
-int load_tavern()
-{
-  ifstream infile;
-  char *buf;
-  tavernItem tempItem;
-  buf = new char[1024];
-  long id, level;
-
-  infile.open(tavernitemdata);
-  if (infile.fail())
-    {
-      log("Error opening %s", tavernitemdata);
-      return 0;
-    }
-
-  while (infile.getline(buf, 1024, '\n'))
-    {
-      try
-       {
-         if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
-           {
-             item *tempItem2;
-             id = stringtoint(strtok(buf, "~"));
-             level = stringtoint(strtok(NULL, ""));
-             tempItem2 = findItemByID(id);
-             if (tempItem2 == NULL)
-               {
-                 log("Invalid ID in %s", tavernitemdata);
-                 return 0;
-               }
-             tempItem.setItem(tempItem2);
-             tempItem.setLevel(level);
-             tavern.push_back(tempItem);
-           }
-       }
-      catch (char *str)
-       {
-         log("Exception loading tavern: %s", str);
-         delete []buf;
-         return 0;
-       }
-    }
-  delete []buf;
-  return 1;
-}
-int load_items()
-{
-  ifstream infile;
-  char *buf;
-  item *tempItem;
-  
-  buf = new char[1024];
-  
-  infile.open(itemdata);
-  
-  if (infile.fail())
-    {
-      log("Error opening %s", itemdata);
-      return 0;
-    }
-  
-  while (infile.getline(buf, 1024, '\n'))
-    {
-      if (buf[0] == '^')
-               break;
-      try
-               {
-                 if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
-                       {
-                         switch(buf[0])
-                               {
-                               case '1':
-                                 tempItem = new weapon();
-                                 break;
-                               case '2':
-                                 tempItem = new armor();
-                                 break;
-                               case '3':
-                                 tempItem = new potion();
-                                 break;
-                               default:
-                                 log("Invalid Item Type %c in %s", buf[0], itemdata);
-                                 delete []buf;
-                                 return 0;
-                                 break;
-                               }
-                         if(tempItem->setData(buf))
-                               {
-                                 Items.push_back(tempItem);
-                               }
-                       }
-               }
-      catch (char *str)
-               {
-                 log("Exception loading items: %s", str);
-                 delete []buf;
-                 return 0;
-               }
-    }
-  delete []buf;
-  return 1;
+       notice(s_GameServ, u, "SYNTAX: /msg <S HEAL {ALL | #}");
 }
 
-int load_gs_dbase()
-{
-  ifstream infile;
-  Player *p;
-  char *tempname, *buf, *password;
-  int tempnum;
-  buf = new char[100000];
-  
-  infile.open(playerdata);
-  
-  if (infile.fail())
-    {
-         log("Error opening %s", playerdata);
-         return 0;
-    }
-  
-  
-  for (int x = 0; x < U_TABLE_SIZE; x++)
-    {
-         list<Player*>::iterator iter;
-         
-         for (iter = players[x].begin(); iter != players[x].end(); iter++)
-               {
-                 logout((*iter)->getClient());
-                 delete (*iter);
-               }
-         players[x].clear();
-    }
-  
-  while (infile.getline(buf, 100000, '\n'))
-       {
-         tempname = strtok(buf, " ");
-         p = new Player(tempname);
-         
-         p->setLevel(stringtoint(strtok(NULL, " ")));
-         p->setExp(stringtoint(strtok(NULL, " ")));
-         p->setGold(stringtoint(strtok(NULL, " ")));
-         p->setBank(stringtoint(strtok(NULL, " ")));
-         tempnum = stringtoint(strtok(NULL, " "));
-         p->setMaxHP(stringtoint(strtok(NULL, " ")));
-         p->setHP(tempnum);
-         p->setStrength(stringtoint(strtok(NULL, " ")));
-         p->setDefense(stringtoint(strtok(NULL, " ")));
-         p->setForestFights(stringtoint(strtok(NULL, " ")));
-         p->setPlayerFights(stringtoint(strtok(NULL, " ")));
-         p->setFlags(stringtoint(strtok(NULL, " ")));
-  
-  
-         
-         password = strtok(NULL, " ");
-         p->setRawPassword(password);
-         tempname = strtok(NULL, " ");
-         
-         if (tempname)
-               p->lastlogin = stringtoint(tempname);
-         else
-               p->lastlogin = time(NULL);
-         
-         tempname = strtok(NULL, " ");
-         tempnum = stringtoint(tempname);
-         item *tempitem;
-         if (tempnum != 0)
-               {
-                 tempitem = findItemByID(tempnum);
-                 p->setWeapon(*tempitem);
-               }
-         
-         tempname = strtok(NULL, " ");
-         tempnum = stringtoint(tempname);
-         
-         if (tempnum != 0)
-               {
-                 tempitem = findItemByID(tempnum);
-                 p->setArmor(*tempitem);
-               }
-         
-         
-         unsigned long hv = iHASH((unsigned char *) p->getName().c_str());
-         
-         p->setClient(NULL);
-         
-         for (tempname = strtok(NULL, " "); tempname != NULL; tempname = strtok(NULL, " "))
-               {
-                 long int id, uses;
-                 list<item*>::iterator item_iter;
-                 id = stringtoint(tempname);
-                 tempname = strtok(NULL, " ");
-                 uses = stringtoint(tempname);
-                 
-                 item_iter = Items.begin();
-                 while (item_iter != Items.end())
-                       {
-                         if ((*item_iter)->getID() == id)
-                               {
-                                 // Don't sort every time you add an item or it eats CPU
-                                 p->inventory->addItemNoChecks((*item_iter))->setUses(uses);
-                               }
-                         item_iter++;
-                       }
-               }
-         p->inventory->sort();
-         players[hv].push_back(p);
-       }
 
-  delete [] buf;
-  infile.close();
-  return 1;
-}
 
-bool passcmp(const char *encrypted, char *plaintext)
-{
-  char salt[3];
-  char *plaintext2, *plainToencrypt;
-  bool same = false;
-  
-  plaintext2 = new char[strlen(encrypted) + strlen(plaintext)]; // Extra
-  strcpy(plaintext2, plaintext);
-  
-  salt[0] = encrypted[0];
-  salt[1] = encrypted[1];
-  salt[3] = '\0';
-  
-  plainToencrypt = crypt(plaintext2, salt);
-  
-  same = (strcmp((const char *)encrypted, plainToencrypt) == 0 ? true : false);
-  
-  delete []plaintext2;
-  
-  return same;
-}
-
-bool check_password(char *name, char *plaintext)
-{
-  Player *p;
-  
-  if (!(p = findplayer(name)))
-    return false;
-  else
-    {
-      return passcmp(p->getPassword().c_str(), plaintext);
-    }
-}
 
 void do_store(char *u)
 {
@@ -2648,11 +1583,12 @@ void do_store(char *u)
                          if ((*item_iterator)->getType() == WEAPON)
                                {
                                  space = spaces(strlen((*item_iterator)->getName().c_str()), ".");
-                                 notice(s_GameServ, u, "%s%ld. %s%s%ld", ((*item_iterator)->getID() < 10 ? " " : ""), (*item_iterator)->getID(), (*item_iterator)->getName().c_str(), space, (*item_iterator)->price());
-                                 free(space);
+                                 notice(s_GameServ, u, "%s%ld. %20s..........%ld", 
+              ((*item_iterator)->getID() < 10 ? " " : ""), 
+              (*item_iterator)->getID(), (*item_iterator)->getName().c_str(), (*item_iterator)->price());
                                }
                        }
-                 notice(s_GameServ, u, "To purchase a weapon, type /msg %S STORE BUY \ 2#\ 2.");
+                 notice(s_GameServ, u, "To purchase a weapon, type /msg <S STORE BUY \ 2#\ 2.");
                  notice(s_GameServ, u, "Where # is the weapon number from the menu above.");
                  
                }
@@ -2664,13 +1600,14 @@ void do_store(char *u)
             {
                          if ((*item_iterator)->getType() == ARMOR)
                                {
-                                 space = spaces(strlen((*item_iterator)->getName().c_str()), ".");
-                                 notice(s_GameServ, u, "%s%ld. %s%s%d",((*item_iterator)->getID() < 10 ? " " : ""), (*item_iterator)->getID(), (*item_iterator)->getName().c_str(), space, (*item_iterator)->price());
-                                 free(space);
+                                 notice(s_GameServ, u, "%s%ld. %20s..........%d",
+              ((*item_iterator)->getID() < 10 ? " " : ""), 
+               (*item_iterator)->getID(), (*item_iterator)->getName().c_str(), 
+               (*item_iterator)->price());
                                }
             }
                  
-                 notice(s_GameServ, u, "To purchase armor, type /msg %S store buy #");
+                 notice(s_GameServ, u, "To purchase armor, type /msg <S store buy #");
                  notice(s_GameServ, u, "Where # is the armor number from the menu above.");
                }
       
@@ -2707,7 +1644,7 @@ void do_store(char *u)
                {
                  notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", tempItem->getName().c_str());
                  p->subtractGold(tempItem->price());
-                 notice(s_GameServ, u, "Don't forget to type /msg %S equip %ld", tempItem->getID());
+                 notice(s_GameServ, u, "Don't forget to type /msg <S equip %ld", tempItem->getID());
                }
          else
                {
@@ -2721,7 +1658,7 @@ void do_store(char *u)
       id = stringtoint(num);
       if (!isstringnum(num))
                {
-                 notice(s_GameServ, u, "SYNTAX: /msg %S store sell #");
+                 notice(s_GameServ, u, "SYNTAX: /msg <S store sell #");
                  return;
                }
       else if (!(tempContainer = p->inventory->Find(id)))
@@ -2768,7 +1705,7 @@ void do_inventory(char *u)
   
   if (!(user = find(u)))
     {
-         notice(s_GameServ, u, "Fatal Error. Contact a %S admin!");
+         notice(s_GameServ, u, "Fatal Error. Contact a <S admin!");
          return;
     }
   else if (isIgnore(user))
@@ -2788,50 +1725,6 @@ void do_inventory(char *u)
   showinventory(user->stats, user);
 }
 
-void showinventory(Player *from, aClient *to)
-{
-  char *nick;
-  if (!to || !from)
-       {
-         return;
-       }
-
-  nick = to->getNick();
-  
-  if (from->inventory->isEmpty())
-       {
-         notice(s_GameServ, nick, "You aren't carrying anything");
-         return;
-       }
-  
-  list <itemContainer> *items;
-  items = from->inventory->getItems();
-  
-  list <itemContainer>::iterator item_iter, item_iter2;
-  item_iter = items->begin();
-  
-  notice(s_GameServ, nick, "Inventory for %s:", from->getName().c_str());
-  long count;
-  while (item_iter != items->end())
-       {
-         // Display a list of counted items so as not to show an extra line for duplicate items
-         count = 0;
-         item_iter2 = item_iter;
-         while (item_iter != items->end() && (*item_iter) == (*item_iter2))
-           {
-             if ((*item_iter) == (*item_iter2))
-                       {
-                         ++count;
-                       }
-             else
-                       {
-                         break;
-                       }
-             ++item_iter;
-           }
-         notice(s_GameServ, nick, "%ld.) %s (%ld)", (*item_iter2).getItem()->getID(), (*item_iter2).getItem()->getName().c_str(), count);
-       }
-}
 
 void do_tavern(char *u)
 {
@@ -2842,7 +1735,7 @@ void do_tavern(char *u)
   
   if (!(user = find(u)))
     {
-      notice(s_GameServ, u, "Fatal Error. See a %S admin for help");
+      notice(s_GameServ, u, "Fatal Error. See a <S admin for help");
       return;
     }
   else if (isIgnore(user))
@@ -2870,14 +1763,14 @@ void do_tavern(char *u)
     {
       notice(s_GameServ, u, "Welcome to Boot Liquors Mystic Apothecary and General Store");
       notice(s_GameServ, u, "Your commands:");
-      notice(s_GameServ, u, "/msg %S TAVERN {LIST | BUY} [NUMBER]");
+      notice(s_GameServ, u, "/msg <S TAVERN {LIST | BUY} [NUMBER]");
       notice(s_GameServ, u, "What'll it be?");
     }
   else if (stricmp(cmd, "LIST") == 0)
     {
       notice(s_GameServ, u, "Here is a list of what we have to offer:");
       showTavern(user);
-      notice(s_GameServ, u, "To buy an item, type /msg %S TAVERN BUY #");
+      notice(s_GameServ, u, "To buy an item, type /msg <S TAVERN BUY #");
     }
   else if (stricmp(cmd, "BUY") == 0)
     {
@@ -2891,8 +1784,8 @@ void do_tavern(char *u)
       if (!chid)
                {
                  notice(s_GameServ, u, "SYNTAX: TAVERN BUY # [#]");
-                 notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 6001");
-                 notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 6001 10");
+                 notice(s_GameServ, u, "Example: /msg <S TAVERN BUY 6001");
+                 notice(s_GameServ, u, "Example: /msg <S TAVERN BUY 6001 10");
                  return;
                }
       long id = stringtoint(chid);
@@ -2903,7 +1796,7 @@ void do_tavern(char *u)
                  notice(s_GameServ, u, "Invalid Choice!");
                  notice(s_GameServ, u, "Here is a list of what we have to offer:");
                  showTavern(user);
-                 notice(s_GameServ, u, "To buy an item, type /msg %S TAVERN BUY #");
+                 notice(s_GameServ, u, "To buy an item, type /msg <S TAVERN BUY #");
                  return;
                }
       else if (!amount && user->stats->getGold() < tempItem->getItem()->price())
@@ -2911,14 +1804,14 @@ void do_tavern(char *u)
                  notice(s_GameServ, u, "You don't have enough gold!");
                  notice(s_GameServ, u, "Here is a list of what we have to offer:");
                  showTavern(user);
-                 notice(s_GameServ, u, "To buy an item, type /msg %S TAVERN BUY #");
+                 notice(s_GameServ, u, "To buy an item, type /msg <S TAVERN BUY #");
                }
          else if (user->stats->getGold() < amt * tempItem->getItem()->price())
                {
                  notice(s_GameServ, u, "You don't have enough gold!");
                  notice(s_GameServ, u, "Here is a list of what we have to offer:");
                  showTavern(user);
-                 notice(s_GameServ, u, "To buy an item, type /msg %S TAVERN BUY # [#]");
+                 notice(s_GameServ, u, "To buy an item, type /msg <S TAVERN BUY # [#]");
                }
          else
                {
@@ -2956,7 +1849,7 @@ void do_tavern(char *u)
   else
     {
       notice(s_GameServ, u, "Improper Syntax.");
-      notice(s_GameServ, u, "Type /msg %S HELP TAVERN for help");
+      notice(s_GameServ, u, "Type /msg <S HELP TAVERN for help");
     }
   return;
 }
@@ -2978,7 +1871,7 @@ void do_bank(char *u)
     }
   else if (!(user = find(u)))
     {
-         notice(s_GameServ, u, "Fatal Error. Couldn't find your aClient. Contact a(n) %S "\
+         notice(s_GameServ, u, "Fatal Error. Couldn't find your aClient. Contact a(n) <S "\
                         " admin for help");
          log("Fatal Error. Couldn't find %s while executing do_bank()", u);
          return; 
@@ -3134,7 +2027,7 @@ void do_dragon(char *u)
   
   if (!(user = find(u)))
     {
-         notice(s_GameServ, u, "Fatal error. Contact a(n) %S admin. buf: %s", strtok(NULL, ""));
+         notice(s_GameServ, u, "Fatal error. Contact a(n) <S admin. buf: %s", strtok(NULL, ""));
          return;
     }
   else if (isIgnore(user))
@@ -3201,7 +2094,7 @@ void do_master(char *u)
   
   if (!(user = find(u)))
     {
-         notice(s_GameServ, u, "Fatal error. Contact a(n) %S admin. buf: %s", strtok(NULL, ""));
+         notice(s_GameServ, u, "Fatal error. Contact a(n) <S admin. buf: %s", strtok(NULL, ""));
          return;
     }
   else if (isIgnore(user))
@@ -3322,320 +2215,7 @@ void do_master(char *u)
     }
 }
 
-void see_master(char *u)
-{
-  aClient *user;
 
-  if (!(user = find(u)))
-    {
-         notice(s_GameServ, u, "Fatal error. Contact a(n) %S admin. buf: %s", strtok(NULL, ""));
-         return;       
-    }
-  
-  if (!is_fighting(user) && is_playing(user))
-    {
-         Player *p = user->stats;
-         p->setMyMaster(&levels[p->getLevel() - 1].master);
-         p->setMonster(&levels[p->getLevel() - 1].master);
-         display_monster(u);  // Since master is the same structure, use this function
-    }
-}
-
-void showTavern(aClient *user)
-{
-  Player *p;
-  list<tavernItem>::iterator item_iterator;
-  item *tempItem;
-  
-  p = user->stats;
-  
-  if (!p)
-    return;
-  
-  item_iterator = tavern.begin();
-  if (tavern.empty())
-    {
-      notice(s_GameServ, user->getNick(), "Tavern is empty");
-      return;
-    }
-  
-  while (item_iterator != tavern.end())
-    {
-      if (p->getLevel() < (*item_iterator).getLevel())
-               {
-                 item_iterator++;
-                 continue;
-               }
-      tempItem = (*item_iterator).getItem();
-      notice(s_GameServ, user->getNick(), "%d. %s for %ld gold", tempItem->getID(), tempItem->getName().c_str(), tempItem->price());
-      item_iterator++;
-    }
-}
-
-void showBankBalance(const char *u)
-{
-  aClient *user;
-  Player *p;
-  
-  if (!(user = find(u)))
-       return;
-  
-  p = user->stats;
-  
-  if (!p)
-       return;
-  
-  notice(s_GameServ, u, "Account Balance: %ld     Gold On hand: %ld", p->getBank(), p->getGold());
-}
-
-void rolloverall()
-{
-  list<Player*>::iterator iter;
-  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
-    {
-      for (iter = players[x].begin(); iter != players[x].end(); iter++)
-               {
-                 rollover((*iter));
-               }
-    }
-}
-void refreshall()
-{
-  list<Player*>::iterator iter;
-  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
-    {
-      for (iter = players[x].begin(); iter != players[x].end(); iter++)
-               {
-                 refresh((*iter));
-               }
-    }
-}
-
-void rollover(Player *p)
-{
-  if (!p)
-    return;
-  
-  p->addForestFights(numrolloverfights);
-  
-  if (p->getForestFights() > maxforestfights)
-    p->setForestFights(maxforestfights);
-}
-
-void refresh(Player *p)
-{
-  if (!p)
-       return;
-
-  if (p->getHP() < p->getMaxHP())
-       p->healall();
-  if (p->getForestFights() < forestfights)
-       {
-         p->setForestFights(forestfights);
-       }
-  
-  p->setPlayerFights(3);
-  setAlive(p);
-  clearMaster(p);
-}
-
-void do_refresh(char *u)
-{
-  char *name = strtok(NULL, " ");
-  aClient *user;
-  Player *p;
-  
-  if (!(user = find(u)))
-    {
-         notice(s_GameServ, u, "Error: aClient not found. Contact a %S admin");
-         log("Error: aClient not found: %s", u);
-         return;
-    }
-  else if (isIgnore(user))
-    {
-#ifdef DEBUGMODE
-         log("Ignoring %s.", user->getNick());
-#endif
-         return;
-    }
-  else if (!isAdmin(user))
-    {
-         notice(s_GameServ, u, "You must be a %S admin to use this command!");
-         return;
-    }
-  if (!name)
-    {
-         notice(s_GameServ, u, "SYNTAX: REFRESH {ALL | NICK}");
-         return;
-    }
-  else if (stricmp(name, "ALL") == 0)
-    {
-         notice(s_GameServ, u, "Refreshing everyone's stats!");
-         refreshall();
-    }
-  else if ((p = findplayer(name)))
-    {
-         notice(s_GameServ, u, "Refreshing %s.", p->getName().c_str());
-         refresh(p);
-       }
-  else
-    {
-         notice(s_GameServ, u, "Player %s not found.", name);
-         return;
-    }
-}
-
-
-void resetall()
-{
-  list<Player*>::iterator iter;
-  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
-       {
-         for (iter = players[x].begin(); iter != players[x].end(); iter++)
-               {
-                 reset((*iter));
-               }
-       }
-}
-
-void reset(Player *p)
-{
-  item *tempItem;
-
-  if (!p)
-       return;
-  
-  p->reset();
-  // Add the stick and clothes
-  tempItem = findItemByID(3001);
-  p->inventory->addItem((*Items.begin()))->use(p); // Add the stick
-  p->inventory->addItem(tempItem)->use(p); // Add Clothes      
-}
-
-void updateTS(Player *p)
-{
-  if (!p)
-       return;
-  
-#ifdef DEBUGMODE
-  log("Old timestamp for %s: %ld", p->getName().c_str(), p->lastcommand);
-#endif
-  p->lastcommand = time(NULL);
-#ifdef DEBUGMODE
-  log("New timestamp for %s: %ld", p->getName().c_str(), p->lastcommand);
-#endif
-  PF_cleartimedout(p);
-  
-}
-
-bool timedOut(Player *p)
-{
-  if (!p)
-       return false;
-  else if (p->lastcommand == 0)
-       return false;
-  else
-    {
-         if ((time(NULL) - p->lastcommand) >= maxidletime)
-           return true;
-         
-         return false;
-    }
-}
-
-void timeOutEvent(Player *p)
-{
-  if (!p || !is_playing(p->getClient())) // then they're not playing
-       return;
-  
-  char *nick = p->getClient()->getNick();
-
-  if (player_fight(p->getClient()) && isYourTurn(p))
-    {
-         // Check to see if they were the idler or if it was the other 
-         // person
-         if (!PF_timedout(p->getBattle()->stats))
-               {
-                 // This person's last command was given earlier,
-                 // so this person is the idler
-                 notice(s_GameServ, nick, "You timed out "\
-                                "during a fight. You lose your turn!");
-                 notice(s_GameServ, p->getBattle()->getNick(),
-                                "%s hesitated for too long. Your move.", p->getName().c_str());
-                 clearYourTurn(p);
-                 setYourTurn(p->getBattle()->stats);
-                 
-                 // Update the TS for both players to give them another
-                 // Chance to wake up, but if the other player doesn't
-                 // Attack now, they both get logged out.
-                 updateTS(p);
-                 PF_settimedout(p);
-                 display_players(p->getBattle());
-                 return;
-               }
-         else
-               {
-                 notice(s_GameServ, p->getBattle()->getNick(),
-                                "You and %s timed out at the same time."\
-                                " Don't fight if you're just going to "\
-                                "sit there!", p->getName().c_str());
-                 notice(s_GameServ, p->getClient()->getNick(),
-                                "You and %s timed out at the same time."\
-                                " Don't fight if you're just going to "\
-                                "sit there!", p->getBattle()->stats->getName().c_str());
-                 logout(p->getBattle());
-                 logout(p->getClient());
-                 return;
-               }
-    }
-  else if (!player_fight(p->getClient()))
-    {
-         if (isAlive(p) && p->getGold() > 0)
-               {
-                 // Place fun stuff here :)
-                 int randnum = 1 + rand() % 100; // 1-100
-#define GSN(s) notice(s_GameServ, nick, s)
-#define GSN2(s, f) notice(s_GameServ, nick, s, f)
-                 
-                 if (randnum < 50)
-                       {
-                         // 35-100% of your gold goes pffft - kain
-                         int stolen = (35 + (rand() % 66)) * (p->getGold() / 100);
-                         
-                         GSN("You stop for a moment to rest on the "\
-                                 "street corner. All of a sudden, you "\
-                                 "are ambushed from all sides by a hoarde "\
-                                 "of knife wielding thugs.");
-                         GSN2("The thugs beat you into utter submission "\
-                                  "and steal %ld gold from you!", stolen);
-                         p->subtractGold(stolen);
-                       }
-                 else if (randnum >= 50 && randnum < 75)
-                       {
-                         // 25-65% of your gold goes pffft - kain
-                         int stolen = (25 + (rand() % 41)) * (p->getGold() / 100);
-                         GSN("While dilly dallying around, you lose "\
-                                 "your sense of time. Little did you know, "\
-                                 "but thieves lifted your gold while you "\
-                                 "weren't watching.");
-                         GSN2("Better luck next time... you lose %d gold", stolen);
-                         p->subtractGold(stolen);
-                       }
-                 else if (randnum >= 75)
-                       {
-                         // 25-75% of your gold goes pffft - kain
-                         int stolen = (25 + (rand() % 51)) * (p->getGold() / 100);
-                         GSN("Good grief! A gaggle of gooey green ghostlike "\
-                                 "goblins grabbed your gold!");
-                         GSN2("They stole %d gold from you!", stolen);
-                         p->subtractGold(stolen);
-                       }
-               }
-         
-         // Always log out the user
-         logout(p->getClient());
-    }
-}
 
 void do_reset(char *u)
 {
@@ -3645,13 +2225,13 @@ void do_reset(char *u)
   
   if (!(user = find(u)))
     {
-         notice(s_GameServ, u, "Error: aClient not found. Contact a %S admin");
+         notice(s_GameServ, u, "Error: aClient not found. Contact a <S admin");
          log("Error: aClient not found: %s", u);
          return;
     }
   else if (!isAdmin(user))
     {
-         notice(s_GameServ, u, "You must be a %S admin to use this command!");
+         notice(s_GameServ, u, "You must be a <S admin to use this command!");
          return;
     }
   
@@ -3682,61 +2262,7 @@ void do_help(char *u)
   display_help(u, cmd);
 }
 
-void display_help(char *u, char *file)
-{
-  ifstream infile;
-  char *buf;
-  
-  if (!file)
-    {
-         infile.open("helpfiles/help");
-         if (infile.fail())
-               {
-                 log("Error opening helpfiles/help");
-                 notice(s_GameServ, u, "Error opening helpfiles/help");
-                 return;
-               }
-         buf = new char[1024];
-         while(infile.getline(buf, 1024))
-               {
-                 // Written this way, it will process %S in the helpfiles
-                 // Instead of notice(s_GameServ, u, "%s", buf);
-                 notice(s_GameServ, u, buf);
-               }
-         
-         // Minor recursion
-         aClient *user = find(u);
-         if (user && isAdmin(user))
-           display_help(u, "admin_commands");
-    }
-  else
-    {
-         char *filename;
-         filename = new char[strlen(file) + 11];
-         strcpy(filename, "helpfiles/");
-         strcat(filename, file);
-         
-         for (unsigned int x = 10; x < strlen(filename); x++)
-           filename[x] = tolower(filename[x]);
-         
-         infile.open(filename);
-         delete [] filename;
-         if (infile.fail())
-               {
-                 notice(s_GameServ, u, "No help for \ 2%s\ 2", file);
-                 return;
-               }
-         buf = new char[1024];
-         while(infile.getline(buf, 1024))
-               {
-                 // Written this way, it will process %S in the helpfiles
-                 // Instead of notice(s_GameServ, u, "%s", buf);
-                 notice(s_GameServ, u, buf);
-               }
-    }
-  infile.close();
-  delete [] buf;
-}
+
 
 void do_admin(char *u)
 {
@@ -3746,7 +2272,7 @@ void do_admin(char *u)
   if (!(user = find(u)))
     {
          log("Error: aClient not found: %s", u);
-         notice(s_GameServ, u, "Error: aClient not found. Contact %S admin.");
+         notice(s_GameServ, u, "Error: aClient not found. Contact <S admin.");
          return;
     }
   
@@ -3778,120 +2304,3 @@ void do_admin(char *u)
     }
 }
 
-bool load_levels()
-{
-  char *filename;
-  filename = new char[256];
-  
-  for (int x = 1; x <= LEVELS; x++)
-    {
-         sprintf(filename, "data/levels/level%d.dat", x);
-         if (levels[x - 1].loadLevel(filename) == false)
-               {
-                 delete []filename;
-                 return false;
-               }
-    }
-  
-  delete []filename;
-  return true;
-}
-
-bool load_monsters()
-{
-  char *filename;
-  ifstream infile;
-  char *buf;
-  buf = new char[2048];
-  
-  for (int level = 1; level <= LEVELS; level++)
-       {
-         filename = new char[256];
-         sprintf(filename, "data/monsters/level%d.dat", level);
-         infile.open(filename);
-         
-         if (!infile)
-               {
-                 log("Error opening %s", filename);
-                 delete []filename;
-                 delete []buf;
-                 return false;
-               }
-         
-#ifdef DEBUGMODE
-         log("Loading monsters from %s", filename);
-#endif
-         
-         while (infile.getline(buf, 2048))
-               {
-                 if (buf[0] == '^')
-                       break;
-                 if (buf[0] == '\n' || buf[0] == '\0' || buf[0] == '#')
-                       continue;
-                 Monster *temp;
-                 temp = new Monster;
-                 
-                 temp->name = strtok(buf, "~");
-                 temp->weapon = strtok(NULL, "~");
-                 temp->death = strtok(NULL, "~");
-                 
-                 levels[level - 1].monsters.push_back(temp);
-
-               }
-         delete [] filename;
-         infile.close();
-       }
-  delete [] buf;
-  return true;
-}
-
-item *findItemByID(int id)
-{
-  list<item*>::iterator item_iterator;
-  
-  item_iterator = Items.begin();
-  
-  while (item_iterator != Items.end())
-    {
-      if ((*item_iterator)->getID() == id)
-               {
-                 return (*item_iterator);
-               }
-      item_iterator++;
-    }
-  return NULL;
-}
-
-item *findStoreItemByID(int id)
-{
-  list<item*>::iterator item_iterator;
-  
-  item_iterator = store.begin();
-  
-  while (item_iterator != store.end())
-    {
-      if ((*item_iterator)->getID() == id)
-               {
-                 return (*item_iterator);
-               }
-      item_iterator++;
-    }
-  return NULL;
-}
-
-tavernItem *findTavernItemByID(int id)
-{
-  list<tavernItem>::iterator item_iterator;
-  
-  item_iterator = tavern.begin();
-  
-  while (item_iterator != tavern.end())
-    {
-      if ((*item_iterator).getItem()->getID() == id)
-               {
-                 return &(*item_iterator);
-               }
-      item_iterator++;
-    }
-  return NULL;
-}