]> 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 55b9e388f6fd3735913197cafc625eb3f78b6239..42bd6f2446e423f4b7895b5b11297a89134dfdb2 100644 (file)
@@ -33,86 +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
-toplist myToplist;          // List of the top 10 players
-
-// 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
+list<item*> store;                      // List of items available at the store
 
-/********** Password functions **********/
-
-bool passcmp(const char *encrypted, char *plaintext); // Compares an encrypted pass with a plain text one
-
-bool check_password(char *name, char *plaintext); // Finds a password for the given name, and checks it with passcmp against the plaintext password given.
-
-/********** Password functions **********/
+toplist myToplist;          // List of the top 10 players
 
 
-/********** 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);
@@ -139,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
 
@@ -423,242 +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, *buffer;
-    const char *t = fmt;
-    input = new char[2048];
-    buffer = new char[1024];
-    va_start(args, fmt);
-    vsnprintf(buffer, 1024, fmt, args);
-    va_end(args);
-
-    memset(input, 0, sizeof(input)); // Initialize to NULL
-    for (t = buffer; *t; t++)
-    {
-       if (*t == '<')
-       {
-           switch(*++t) {
-            case 'S': sprintf(input, "%s%s", input, s_GameServ); 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;
-    delete [] buffer;
-}
-/* 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, *buffer;
-    const char *t = fmt;
-    input = new char[2048];
-    buffer = new char[1024];
-    va_start(args, fmt);
-    vsnprintf(buffer, 1024, fmt, args);
-    va_end(args);
-
-    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
-    }
-    log("buffer: %s", buffer);
-    for (t = buffer; *t; t++)
-    {
-        if (*t == '<')
-        {
-            if(*(++t) == 'S')
-            {
-             sprintf(input, "%s%s", input, s_GameServ);
-            }
-        }
-        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;
-    delete [] buffer;
-}
-
-
-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;
@@ -705,25 +388,31 @@ void do_list(char *u)
          return;
     }
   
-  if (cmd != NULL && stricmp(cmd, "TOP") == 0)
+  if (cmd == NULL || stricmp(cmd, "TOP") == 0)
   {
-     list<Player>::iterator iter;
-     bool header = false;
+    list<PlayerWrapper>::iterator iter;
+    bool header = false;
+
+    if (myToplist.empty())
+      {
+         notice(s_GameServ, u, "There are no players");
+         return;
+      }
+    myToplist.sort();
+    myToplist.reverse();
      
-     iter = myToplist.begin();
+    iter = myToplist.begin();
      
-     while (iter != myToplist.end())
-     {
-        
-        p = &(*iter);
+    while (iter != myToplist.end())
+    {
         if (!header)
         {
            notice(s_GameServ, u, "Top Players");
            header = true;
 
         }
-        notice(s_GameServ, u, "Name: %s  Level: %d", 
-        p->getName().c_str(), p->getLevel());
+        notice(s_GameServ, u, "Level: %2d Exp: %10d Name: %s", 
+        (*iter).getLevel(), (*iter).getExp(), (*iter).getName().c_str());
         iter++;
      }
   }
@@ -1175,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;
@@ -1444,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)
 {
@@ -2012,85 +1422,6 @@ void do_run(char *u)
        }
 }
 
-void end_turn(aClient *user)
-{
-  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();
-  
-  if (!player_fight(user))
-    {
-         // Opponent's Hit
-         mhit = (fight->strength / 2) + (rand() % (fight->strength / 2)) - (user->stats->getDefense());
-    }
-  else
-    {
-         // Opponent's Hit
-         mhit = (battle->stats->getStrength() / 2) + (rand() % (battle->stats->getStrength() / 2)) - user->stats->getDefense();
-    }
-  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)
 {
@@ -2190,446 +1521,8 @@ void do_heal(char *u)
        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;
-}
-
-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();
-     myToplist.insertPlayer(p);
-         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)
 {
@@ -2832,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)
 {
@@ -3366,322 +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());
-                 clearYourTurn(p);
-                 clearYourTurn(p->getBattle()->stats);
-                 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)
 {
@@ -3728,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)
 {
@@ -3824,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;
-}