]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/gameserv.cpp
Shrunk the dependencies immensely with forward declarations in all H files instead...
[irc/gameservirc.git] / gameserv / gameserv.cpp
index a4ed61a167f9e872176e4300bb5a184b22a4be30..18bd0fe246f5cdb58199af991df577d179ba77b5 100644 (file)
@@ -1,18 +1,21 @@
 #include "aClient.h"
 #include "config.h"
 #include "extern.h"
+#include "player.h"
+#include "pouch.h"
 #include "flags.h"
 #include "list.h"
 #include "level.h"
 #include "sockhelp.h"
+#include "item.h"
 
 #include <cctype>
 #include <fstream>
 #include <stdlib.h>
+#include <list>
+#include <iterator>
 
-using std::ifstream;
-using std::ofstream;
-using std::ios;
+using namespace std;
 
 #if defined(HAVE_CRYPT_H)
 
@@ -402,20 +405,7 @@ void showstats(const char *u, const char *nick)
         space = spaces(strlen(buf), " ");
         notice(s_GameServ, sender->getNick(), "%s%sPlayer Fights: %d", buf, space, ni->stats->player_fights);
         delete [] space;
-       Pouch *inv = &ni->stats->inventory;
-
-       notice(s_GameServ, u, "Potions");
-       sprintf(buf, "Healing: %d", inv->Healing());
-       space = spaces(strlen(buf), " ");
-       notice(s_GameServ, sender->getNick(), "%s%sHP: %d", buf, 
-               space, inv->HP());
-       delete [] space;
-
-       sprintf(buf, "Strength: %d", inv->Strength());
-       space = spaces(strlen(buf), " ");
-       notice(s_GameServ, sender->getNick(), "%s%sDefense: %d", buf, 
-               space, inv->Defense());
-       delete [] space;
+       showinventory(ni, ni);
     }
     else
     {
@@ -678,7 +668,7 @@ void do_set(char *u)
     }
   else if (!name)
     {
-      notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|WEAPON|ARMOR|HP POTIONS|STRENGTH POTIONS|DEFENSE POTIONS|HEALING POTIONS|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 (!(target = findplayer(name)))
@@ -970,137 +960,6 @@ void do_set(char *u)
          return;
        }
   }
-  else if (stricmp(cmd, "WEAPON") == 0)
-  {
-    if (!isAdmin(user))
-       {
-         notice(s_GameServ, u, "Admins Only!");
-         return;         
-       }
-    else
-       {
-       if (!cmd2)
-       {
-           notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] WEAPON <NUMBER>");
-           return;
-       }
-
-         target->stats->wea = stringtoint(cmd2);
-
-         if (target->stats->wea < 0)
-               target->stats->wea = 0;
-         else if (target->stats->wea >= WNA)
-               target->stats->wea = WNA - 1;
-         notice(s_GameServ, u, "Weapon set to %s", weapons[target->stats->wea]);
-         return;
-       }
-  }
-  else if (stricmp(cmd, "ARMOR") == 0)
-  {
-    if (!isAdmin(user))
-       {
-         notice(s_GameServ, u, "Admins Only!");
-         return;         
-       }
-    else
-       {
-       if (!cmd2)
-       {
-           notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] ARMOR <NUMBER>");
-           return;
-       }
-         target->stats->arm = stringtoint(cmd2);
-
-         if (target->stats->arm < 0)
-             target->stats->arm = 0;
-         else if (target->stats->arm >= WNA)
-             target->stats->arm = WNA - 1;
-
-         notice(s_GameServ, u, "Armor set to %s", armors[target->stats->arm]);
-         return;
-       }
-  }
-  else if (stricmp(cmd, "HP") == 0 && stricmp(cmd2, "POTIONS") == 0)
-  {
-    if (!isAdmin(user))
-       {
-         notice(s_GameServ, u, "Admins Only!");
-         return;         
-       }
-    else
-       {
-         cmd2 = strtok(NULL, " ");
-       if (!cmd2)
-       {
-           notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] HP POTIONS <NUMBER>");
-           return;
-       }
-         target->stats->inventory.setHP(abs(stringtoint(cmd2)));
-
-         notice(s_GameServ, u, "HP Potions set to %d", target->stats->inventory.HP());
-         return;
-       }
-  }
-  else if (stricmp(cmd, "HEALING") == 0 && stricmp(cmd2, "POTIONS") == 0)
-  {
-    if (!isAdmin(user))
-       {
-         notice(s_GameServ, u, "Admins Only!");
-         return;         
-       }
-    else
-       {
-         cmd2 = strtok(NULL, " ");
-       if (!cmd2)
-       {
-           notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] HEALING POTIONS <NUMBER>");
-           return;
-       }
-         target->stats->inventory.setHealing(abs(stringtoint(cmd2)));
-         notice(s_GameServ, u, "Healing Potions set to %d", target->stats->inventory.Healing());
-         return;
-       }
-  }
-  else if (stricmp(cmd, "STRENGTH") == 0 && stricmp(cmd2, "POTIONS") == 0)
-  {
-    if (!isAdmin(user))
-       {
-         notice(s_GameServ, u, "Admins Only!");
-         return;         
-       }
-    else
-       {
-         cmd2 = strtok(NULL, " ");
-       if (!cmd2)
-       {
-           notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] STRENGTH POTIONS <NUMBER>");
-           return;
-       }
-         target->stats->inventory.setStrength(abs(stringtoint(cmd2)));
-         notice(s_GameServ, u, "Strength Potions set to %d", target->stats->inventory.Strength());
-         return;
-       }
-  }
-  else if (stricmp(cmd, "DEFENSE") == 0 && stricmp(cmd2, "POTIONS") == 0)
-  {
-    if (!isAdmin(user))
-       {
-         notice(s_GameServ, u, "Admins Only!");
-         return;         
-       }
-    else
-       {
-         cmd2 = strtok(NULL, " ");
-       if (!cmd2)
-       {
-           notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] DEFENSE POTIONS <NUMBER>");
-           return;
-       }
-         target->stats->inventory.setDefense(abs(stringtoint(cmd2)));
-         notice(s_GameServ, u, "Defense Potions set to %d", target->stats->inventory.Defense());
-         return;
-       }
-  }
   else if (stricmp(cmd, "ALIVE") == 0)
   {
      if (!isAdmin(user))
@@ -1163,7 +1022,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|WEAPON|ARMOR|HP POTIONS|STRENGTH POTIONS|DEFENSE POTIONS|HEALING POTIONS|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;
   }
 }
@@ -1784,6 +1643,7 @@ void do_fight(char *u)
 
 void do_use(char *u)
 {
+  /*
     aClient *user;
     Pouch *p;
 
@@ -1912,6 +1772,8 @@ void do_use(char *u)
     }
 
     end_turn(user); // If they're fighting, end their turn
+  */
+  return;
 }
 void do_run(char *u)
 {
@@ -2223,9 +2085,10 @@ int save_gs_dbase()
                << it->hp << ' ' << it->maxhp << ' ' << it->strength << ' ' << it->defense << ' '
                << it->arm << ' ' << it->wea << ' '
                << it->forest_fights << ' ' << it->player_fights <<  ' ' 
-               << it->getFlags() << ' ' << it->password << ' ' << it->inventory.Healing()
+               << it->getFlags() << ' ' << it->password << ' ' 
+/* fixing this << it->inventory.Healing()
                << ' ' << it->inventory.Strength() << ' ' << it->inventory.Defense() << ' ' << it->inventory.HP()
-               << ' ' << it->lastlogin << endl;
+               << ' ' */ << it->lastlogin << endl;
        ptr = ptr->Next();
     }
    }
@@ -2325,12 +2188,12 @@ int load_gs_dbase()
     }
 
     while (infile.getline(buf, 1024, '\n'))
-    {
+      {
        temp = new aClient;
        tempname = strtok(buf, " ");
        temp->stats = new Player(tempname);
        p = temp->stats;
-
+       
        p->level = stringtoint(strtok(NULL, " "));
        p->exp = stringtoint(strtok(NULL, " "));
        p->gold = stringtoint(strtok(NULL, " "));
@@ -2345,290 +2208,292 @@ int load_gs_dbase()
        p->player_fights = stringtoint(strtok(NULL, " "));
        p->setFlags(stringtoint(strtok(NULL, " ")));
 
+       
+       
        password = strtok(NULL, " ");
        p->password = password;
        temp->setNick("Not Playing");
-       #ifdef P10
+#ifdef P10
        temp->setRealNick("Not Playing");
-       #endif
-
-       p->inventory.reset(); // Set inventory to all 0s
+#endif
+       
+       p->inventory->clear(); // Set inventory to all 0s
        // Old player databases didn't have these three extra values
        // If they come up null, leave them to 0 as the default.
        // On the next gameserv database save, it will save the values.
        tempname = strtok(NULL, " ");
-       if (tempname)
-           p->inventory.setHealing(stringtoint(tempname));
-
+       //      if (tempname)
+       //  p->inventory.setHealing(stringtoint(tempname));
+       
        tempname = strtok(NULL, " ");
-       if (tempname)
-           p->inventory.setStrength(stringtoint(tempname));
-
+       //if (tempname)
+       //   p->inventory.setStrength(stringtoint(tempname));
+       
        tempname = strtok(NULL, " ");
-       if (tempname)
-           p->inventory.setDefense(stringtoint(tempname));
-
+       //if (tempname)
+       //    p->inventory.setDefense(stringtoint(tempname));
+       
        tempname = strtok(NULL, " ");
-       if (tempname)
-           p->inventory.setHP(stringtoint(tempname));
-
+       //if (tempname)
+       //  p->inventory.setHP(stringtoint(tempname));
+       
         tempname = strtok(NULL, " ");
        if (tempname)
-           p->lastlogin = stringtoint(tempname);
+         p->lastlogin = stringtoint(tempname);
        else
-           p->lastlogin = time(NULL);
-
+         p->lastlogin = time(NULL);
+       
        unsigned long hv = iHASH((unsigned char *) temp->stats->name.c_str());
-
+       
        temp->stats->client = NULL;
        players[hv].insertAtBack(temp);
        delete temp;
-    }
-delete [] buf;
-infile.close();
-return 1;
+      }
+    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;
+  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)
 {
-    aClient *client;
-
-    if (!(client = findplayer(name)))
-       return false;
-    else
+  aClient *client;
+  
+  if (!(client = findplayer(name)))
+    return false;
+  else
     {
-       return passcmp(client->stats->password.c_str(), plaintext);
+      return passcmp(client->stats->password.c_str(), plaintext);
     }
 }
 
 void do_store(char *u)
 {
-    char *cmd = strtok(NULL, " ");
-    char *item = strtok(NULL, " ");
-    char *num = strtok(NULL, " ");
-    char *space;
-    int wep;
-    aClient *user;
-    Player *p;
-
-    if (!cmd || !item)
+  char *cmd = strtok(NULL, " ");
+  char *item = strtok(NULL, " ");
+  char *num = strtok(NULL, " ");
+  char *space;
+  int wep;
+  aClient *user;
+  Player *p;
+  
+  if (!cmd || !item)
     {
-       notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
-       notice(s_GameServ, u, "        \ 2STORE SELL {ARMOR | WEAPON}\ 2");
-       notice(s_GameServ, u, "        \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
-       return;
+      notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
+      notice(s_GameServ, u, "        \ 2STORE SELL {ARMOR | WEAPON}\ 2");
+      notice(s_GameServ, u, "        \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+      return;
     }
-    else if (!(user = find(u)))
+  else if (!(user = find(u)))
     {
-       log("Fatal Error: could not find %s in client list", u);
-       return;
+      log("Fatal Error: could not find %s in client list", u);
+      return;
     }
-    else if (isIgnore(user))
+  else if (isIgnore(user))
     {
-       #ifdef DEBUGMODE
-           log("Ignoring %s.", user->getNick());
-       #endif
-       return;
+#ifdef DEBUGMODE
+      log("Ignoring %s.", user->getNick());
+#endif
+      return;
     }
-    else if (!is_playing(user))
+  else if (!is_playing(user))
     {
-       notice(s_GameServ, u, "You must be playing to use the store!");
-       return;
+      notice(s_GameServ, u, "You must be playing to use the store!");
+      return;
     }
-    else if (!isAlive(user->stats))
+  else if (!isAlive(user->stats))
     {
-       notice(s_GameServ, u, "You are dead. Wait until tomorrow to purchase weapons and armor!");
-       return;
+      notice(s_GameServ, u, "You are dead. Wait until tomorrow to purchase weapons and armor!");
+      return;
     }
-    updateTS(user->stats);
-
-    if (stricmp(cmd, "LIST") == 0)
+  updateTS(user->stats);
+  
+  if (stricmp(cmd, "LIST") == 0)
     {
-       if (stricmp(item, "WEAPONS") == 0)
+      if (stricmp(item, "WEAPONS") == 0)
        {
-            notice(s_GameServ, u, "Welcome to Kain's Armory");
-            notice(s_GameServ, u, "Here are the weapons we have available for the killing, sire:");
-           for (int x = 1; x < WNA; x++)
+         notice(s_GameServ, u, "Welcome to Kain's Armory");
+         notice(s_GameServ, u, "Here are the weapons we have available for the killing, sire:");
+         for (int x = 1; x < WNA; x++)
             {
-                space = spaces(strlen(weapons[x]), ".");
-                notice(s_GameServ, u, "%s%d. %s%s%d",(x < 10 ? " " : ""), x, weapons[x], space, prices[x - 1]);
-                free(space);
+             space = spaces(strlen(weapons[x]), ".");
+             notice(s_GameServ, u, "%s%d. %s%s%d",(x < 10 ? " " : ""), x, weapons[x], space, prices[x - 1]);
+             free(space);
             }
-           notice(s_GameServ, u, "To purchase a weapon, type /msg %S STORE BUY \ 2NUM\ 2.");
-            notice(s_GameServ, u, "Where num. is the weapon number from the menu above.");
-
+         notice(s_GameServ, u, "To purchase a weapon, type /msg %S STORE BUY \ 2NUM\ 2.");
+         notice(s_GameServ, u, "Where num. is the weapon number from the menu above.");
+         
        }
-       else if (stricmp(item, "ARMOR") == 0)
+      else if (stricmp(item, "ARMOR") == 0)
        {
-           notice(s_GameServ, u, "Welcome to Kain's Armory");
-           notice(s_GameServ, u, "I hope you enjoy the fine armor we have available for your protection:");
-           for (int x = 1; x < WNA; x++)
+         notice(s_GameServ, u, "Welcome to Kain's Armory");
+         notice(s_GameServ, u, "I hope you enjoy the fine armor we have available for your protection:");
+         for (int x = 1; x < WNA; x++)
             {
-               space = spaces(strlen(armors[x]), ".");
-               notice(s_GameServ, u, "%s%d. %s%s%d",(x < 10 ? " " : ""), x, armors[x], space, prices[x - 1]);
-               free(space);
+             space = spaces(strlen(armors[x]), ".");
+             notice(s_GameServ, u, "%s%d. %s%s%d",(x < 10 ? " " : ""), x, armors[x], space, prices[x - 1]);
+             free(space);
            }
-            notice(s_GameServ, u, "To purchase armor, type /msg %S store buy armor num.");
-            notice(s_GameServ, u, "Where num. is the armor number from the menu above.");
-
-
+         notice(s_GameServ, u, "To purchase armor, type /msg %S store buy armor num.");
+         notice(s_GameServ, u, "Where num. is the armor number from the menu above.");
+         
+         
        }
     } else if (stricmp(cmd, "BUY") == 0) {
-       if (!num)
+      if (!num)
        {
-           notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
-           return;
+         notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+         return;
        }
-       else if (!isstringnum(num))
+      else if (!isstringnum(num))
        {
-           notice(s_GameServ, u, "You must specify a number between 1 and %d. Not %s!", WNA - 1, num);
-           return;
+         notice(s_GameServ, u, "You must specify a number between 1 and %d. Not %s!", WNA - 1, num);
+         return;
        }
-       if (stricmp(item, "WEAPON") == 0)
+      if (stricmp(item, "WEAPON") == 0)
         {
-            wep = stringtoint(num);
-            if (wep >= WNA || wep < 1)
+         wep = stringtoint(num);
+         if (wep >= WNA || wep < 1)
             {
-               notice(s_GameServ, u, "The number %d is out of range. The number you provide must be between 1 and %d.", wep, WNA - 1);
-                return;
+             notice(s_GameServ, u, "The number %d is out of range. The number you provide must be between 1 and %d.", wep, WNA - 1);
+             return;
             }
-
-           p = user->stats;
-
-            if (p->wea != 0)
-                notice(s_GameServ, u, "You have to sell your %s first!", weapons[p->wea]);
-            else if (p->gold < prices[wep - 1])
-                notice(s_GameServ, u, "You don't have enough gold for %s!", weapons[wep]);
-            else
+         
+         p = user->stats;
+         
+         if (p->wea != 0)
+           notice(s_GameServ, u, "You have to sell your %s first!", weapons[p->wea]);
+         else if (p->gold < prices[wep - 1])
+           notice(s_GameServ, u, "You don't have enough gold for %s!", weapons[wep]);
+         else
             {
-                notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", weapons[wep]);
-                p->wea = wep;
-                p->gold -= prices[wep - 1];
+             notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", weapons[wep]);
+             p->wea = wep;
+             p->gold -= prices[wep - 1];
             }
         }
-       else if (stricmp(item, "ARMOR") == 0)
+      else if (stricmp(item, "ARMOR") == 0)
         {
-            wep = stringtoint(num);
-            if (wep >= WNA || wep < 1)
+         wep = stringtoint(num);
+         if (wep >= WNA || wep < 1)
             {
-               notice(s_GameServ, u, "The number %d is out of range. The number you provide must be between 1 and %d.", wep, WNA - 1);
-                return;
+             notice(s_GameServ, u, "The number %d is out of range. The number you provide must be between 1 and %d.", wep, WNA - 1);
+             return;
             }
-
-           p = user->stats;
-
-            if (p->arm != 0)
-                notice(s_GameServ, u, "You have to sell your %s first!", armors[p->arm]);
-            else if (p->gold < prices[wep - 1])
-                notice(s_GameServ, u, "You don't have enough gold for %s!", armors[wep]);
-            else
+         
+         p = user->stats;
+         
+         if (p->arm != 0)
+           notice(s_GameServ, u, "You have to sell your %s first!", armors[p->arm]);
+         else if (p->gold < prices[wep - 1])
+           notice(s_GameServ, u, "You don't have enough gold for %s!", armors[wep]);
+         else
             {
-                notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", armors[wep]);
-                p->arm = wep;
-                p->gold -= prices[wep - 1];
+             notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", armors[wep]);
+             p->arm = wep;
+             p->gold -= prices[wep - 1];
             }
         }
-       else
+      else
        {
-           notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
-           return;
+         notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+         return;
        }
     }
-    else if (stricmp(cmd, "SELL" ) == 0)
+  else if (stricmp(cmd, "SELL" ) == 0)
     {
-       p = user->stats;
-
-        if (stricmp(item, "WEAPON") == 0)
+      p = user->stats;
+      
+      if (stricmp(item, "WEAPON") == 0)
         {
-            if (p->wea == 0)
+         if (p->wea == 0)
             {
-                notice(s_GameServ, u, "You want me to chop off your hands?");
-                return;
+             notice(s_GameServ, u, "You want me to chop off your hands?");
+             return;
             }
-            else if (p->gold == 2000000000)
+         else if (p->gold == 2000000000)
             {
-                notice(s_GameServ, u, "You have enough gold. I'll just take that off your hands, sire.");
-                p->wea = 0;
+             notice(s_GameServ, u, "You have enough gold. I'll just take that off your hands, sire.");
+             p->wea = 0;
             }
-            else if (2000000000 - p->gold < (prices[p->wea - 1] / 2))
+         else if (2000000000 - p->gold < (prices[p->wea - 1] / 2))
             {
-                notice(s_GameServ, u, "Thank you for your business! You now have as much gold as you can carry.");
-                notice(s_GameServ, u, "However, you have no weapon... can I interest you in the %s?", weapons[WNA - 1]);
-                p->gold = 2000000000;
-                p->wea = 0;
+             notice(s_GameServ, u, "Thank you for your business! You now have as much gold as you can carry.");
+             notice(s_GameServ, u, "However, you have no weapon... can I interest you in the %s?", weapons[WNA - 1]);
+             p->gold = 2000000000;
+             p->wea = 0;
             }
-            else
+         else
            {
-                notice(s_GameServ, u, "Thank you for your business! You now have %d more gold but no weapon!", (prices[p->wea - 1] / 2));
-                p->gold += (prices[p->wea - 1] / 2);
-                p->wea = 0;
+             notice(s_GameServ, u, "Thank you for your business! You now have %d more gold but no weapon!", (prices[p->wea - 1] / 2));
+             p->gold += (prices[p->wea - 1] / 2);
+             p->wea = 0;
             }
         }
-        else if (stricmp(item, "ARMOR") == 0)
+      else if (stricmp(item, "ARMOR") == 0)
         {
-           p = user->stats;
-
-            if (p->arm == 0)
+         p = user->stats;
+         
+         if (p->arm == 0)
             {
-                notice(s_GameServ, u, "I don't think you can be any more naked...");
-                return;
+             notice(s_GameServ, u, "I don't think you can be any more naked...");
+             return;
             }
-            if (p->gold == 2000000000)
+         if (p->gold == 2000000000)
             {
-                notice(s_GameServ, u, "You have enough gold. I'll just take that off your hands, sire.");
-                p->arm = 0;
+             notice(s_GameServ, u, "You have enough gold. I'll just take that off your hands, sire.");
+             p->arm = 0;
             }
-            else if (2000000000 - p->gold < (prices[p->arm - 1] / 2))
+         else if (2000000000 - p->gold < (prices[p->arm - 1] / 2))
             {
-                notice(s_GameServ, u, "Thank you for your business! You now have as much gold as you can carry.");
-                notice(s_GameServ, u, "However, you have no armor... can I interest you in %s?", armors[WNA - 1]);
-               p->gold = 2000000000;
-                p->arm = 0;
+             notice(s_GameServ, u, "Thank you for your business! You now have as much gold as you can carry.");
+             notice(s_GameServ, u, "However, you have no armor... can I interest you in %s?", armors[WNA - 1]);
+             p->gold = 2000000000;
+             p->arm = 0;
             }
-            else
+         else
             {
-                notice(s_GameServ, u, "Thank you for your business! You now have %d more gold but no armor!",
-                         (prices[p->arm - 1] / 2));
-
-                p->gold += (prices[p->arm - 1] / 2);
-                p->arm = 0;
+             notice(s_GameServ, u, "Thank you for your business! You now have %d more gold but no armor!",
+                    (prices[p->arm - 1] / 2));
+             
+             p->gold += (prices[p->arm - 1] / 2);
+             p->arm = 0;
             }
        }
-        else
+      else
        {
-           notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
-           notice(s_GameServ, u, "        \ 2STORE SELL {ARMOR | WEAPON}\ 2");
-           notice(s_GameServ, u, "        \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+         notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
+         notice(s_GameServ, u, "        \ 2STORE SELL {ARMOR | WEAPON}\ 2");
+         notice(s_GameServ, u, "        \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
        }
     }
-    else
+  else
     {
-       notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
-       notice(s_GameServ, u, "        \ 2STORE SELL {ARMOR | WEAPON}\ 2");
-       notice(s_GameServ, u, "        \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
-       return;
+      notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
+      notice(s_GameServ, u, "        \ 2STORE SELL {ARMOR | WEAPON}\ 2");
+      notice(s_GameServ, u, "        \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+      return;
     }
 }
 void do_inventory(char *u)
@@ -2655,24 +2520,41 @@ void do_inventory(char *u)
     updateTS(user->stats);
     showinventory(user, user);
 }
+
 void showinventory(aClient *from, aClient *to)
 {
-    char *nick = to->getNick();
+  char *nick = to->getNick();
 
-    if (!to)
-       to = from;
-    if (is_playing(from))
+  if (!to)
+    to = from;
+  
+  if (is_playing(from))
     {
-       Pouch *p = &from->stats->inventory;
-       notice(s_GameServ, nick, "Inventory for %s:", from->stats->name.c_str());
-       notice(s_GameServ, nick, " Healing Potions: %d", p->Healing());
-       notice(s_GameServ, nick, "Strength Potions: %d", p->Strength());
-       notice(s_GameServ, nick, " Defense Potions: %d", p->Defense());
-       notice(s_GameServ, nick, "      HP Potions: %d", p->HP());
+      if (from->stats->inventory->isEmpty())
+       {
+         notice(s_GameServ, nick, "You aren't carrying anything");
+         return;
+       }
+
+      list <item*> *items;
+      items = from->stats->inventory->getItems();
+
+      list <item*>::iterator item_iter;
+      item_iter = items->begin();
+
+      notice(s_GameServ, nick, "Inventory for %s:", from->stats->name.c_str());
+      while (item_iter != items->end())
+       {
+         int x = 0;
+         notice(s_GameServ, nick, "%d.) %s", x, (*item_iter)->getName().c_str());
+       }
+
     }
+
 }
 void do_tavern(char *u)
 {
+  /*
     char *cmd = strtok(NULL, " ");
     long int price;
 
@@ -2810,6 +2692,8 @@ void do_tavern(char *u)
        notice(s_GameServ, u, "Improper Syntax.");
        notice(s_GameServ, u, "Type /msg %S HELP TAVERN for help");
     }
+  */
+  return;
 }
 
 void do_bank(char *u)