]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/gameserv.cpp
Added a tavern where you can buy potions for later use.
[irc/gameservirc.git] / gameserv / gameserv.cpp
index 6de2a5aabf22775815e58378e4385c54e9b218d0..c569cdc834cd77790338bf67dfced3bd35b73b5a 100644 (file)
@@ -79,6 +79,7 @@ void refreshall();
 void reset(aClient *ni);
 void init_masters();
 void init_monsters();
+bool load_monsters();
 void delete_monsters();
 void delete_masters();
 
@@ -99,6 +100,7 @@ void do_reset(char *u);
 void do_run(char *u);
 void do_stats(char *u);
 void do_store(char *u);
+void do_tavern(char *u);
 void see_master(char *u);
 
 void showstats(const char *u, const char *nick);
@@ -175,6 +177,8 @@ void gameserv(char *source, char *buf)
        do_admin(source);
     } else if (stricmp(cmd, "REFRESH") == 0) {
        do_refresh(source);
+    } else if (stricmp(cmd, "TAVERN") == 0) {
+       do_tavern(source);
     } else if (stricmp(cmd, "PRINT") == 0) {
        cout << "Printing Clients List: " << endl;
        clients.print();
@@ -237,7 +241,19 @@ void gameserv(char *source, char *buf)
        }
        else
         {
-           load_gs_dbase();
+           char *cmd2 = strtok(NULL, " ");
+           if (!cmd2)
+           {
+               notice(s_GameServ, source, "Loading player data from %s", playerdata);
+               load_gs_dbase();
+           }
+           else if (stricmp(cmd2, "MONSTERS") == 0)
+           {
+               notice(s_GameServ, source, "Loading monster data from %s", monsterdata);
+               load_monsters();
+           }
+           else
+               display_help(source, cmd);
        }
     } else if (stricmp(cmd, "RAW") == 0) {
        aClient *user;
@@ -521,19 +537,26 @@ void do_identify(char *u)
     aClient *user, *p;
     name = strtok(NULL, " ");
     password = strtok(NULL, " ");
-
+    user = find(u);
     if (!password || !name)
     {
        notice(s_GameServ, u, "SYNTAX: /msg %S IDENTIFY NAME PASSWORD");
     }
+    else if (!user)
+           notice(s_GameServ, u, "Fatal error. Cannot find aClient. Buf: %s", strtok(NULL, ""));
     else if (!(p = findplayer(name)) || !p->stats)
            notice(s_GameServ, u, "Player %s not found", name);
-    else if (!check_password(name, password))
+    else if (!check_password(name, password) && !isAdmin(user))
     {
            notice(s_GameServ, u, "Password incorrect");
     }
-    else if ((user = find(u)))
+    else
     {
+       if (p->stats->user && !isAdmin(user))
+       {
+           notice(s_GameServ, u, "That player has already identified.");
+           return;
+       }
         if (!user->stats)
         {
            ListNode<aClient> *temp;
@@ -692,6 +715,7 @@ void init_monsters()
            monsters[x][y] = new Monster();
 
     // Hard coded for now - Kain
+/*
 
     strcpy(monsters[0][0]->name, "Slime");
     strcpy(monsters[0][0]->weapon, "Acid Goo");
@@ -1845,6 +1869,8 @@ void init_monsters()
                monsters[11][11]->exp = 1;
                monsters[11][11]->maxhp = 1;
     strcpy(    monsters[11][11]->death, "");
+
+*/
 }
 
 void delete_monsters()
@@ -2853,6 +2879,101 @@ void do_store(char *u)
     }
 }
 
+void do_tavern(char *u)
+{
+    char *cmd = strtok(NULL, " ");
+    long int price;
+
+    aClient *user;
+    Player *p;
+    if (!(user = find(u)))
+    {
+       notice(s_GameServ, u, "Fatal Error. See a %S admin for help");
+       return;
+    }
+    else if (!is_playing(user))
+    {
+       notice(s_GameServ, u, "You must be playing to go to the Tavern");
+       return;
+    }
+    p = user->stats;
+    if (!cmd)
+    {
+       notice(s_GameServ, u, "Welcome to Boot Liquors Mystic Apothecary");
+       notice(s_GameServ, u, "Your commands:");
+       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:");
+       notice(s_GameServ, u, "1. Healing Potions for %ld Gold", 1000 * p->level + (p->exp / 10));
+       notice(s_GameServ, u, "2. Strength Potions for %ld Gold", 2050 * p->level + (p->exp / 10));
+       notice(s_GameServ, u, "3. Defense Potions for %ld Gold", 2000 * p->level + (p->exp / 10));
+       notice(s_GameServ, u, "To buy a potion, type /msg %S TAVERN BUY #");
+       notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 1 buys a healing potion!");
+       notice(s_GameServ, u, "By something will ya!");
+    }
+    else if (stricmp(cmd, "BUY") == 0)
+    {
+       char *chnum = strtok(NULL, " ");
+       int num = stringtoint(chnum);
+
+       if (!chnum)
+       {
+           notice(s_GameServ, u, "SYNTAX: TAVERN BUY #");
+           notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 1");
+           return;
+       }
+       if (num < 1 || num > 3)
+       {
+           notice(s_GameServ, u, "Invalid Choice!");
+           notice(s_GameServ, u, "Here is a list of what we have to offer:");
+           notice(s_GameServ, u, "1. Healing Potions for %ld Gold", 1000 * p->level + (p->exp / 10));
+           notice(s_GameServ, u, "2. Strength Potions for %ld Gold", 2050 * p->level + (p->exp / 10));
+           notice(s_GameServ, u, "3. Defense Potions for %ld Gold", 2000 * p->level + (p->exp / 10));
+           notice(s_GameServ, u, "To buy a potion, type /msg %S TAVERN BUY #");
+           notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 1 buys a healing potion!");
+       }
+       switch(num)
+       {
+           case 1:
+               price = (1000 * p->level) + (p->exp / 10);
+               if (p->gold >= price)
+               {
+                   notice(s_GameServ, u, "One healing potion coming right up!");
+                   p->inventory.incHealing();
+               } 
+               else
+                   notice(s_GameServ, u, "You don't have enough gold!");
+               break;
+           case 2:
+               price = (2050 * p->level) + (p->exp / 10);
+               if (p->gold >= price)
+               {
+                   notice(s_GameServ, u, "One strength boost coming right up!");
+                   p->inventory.incStrength();
+               }
+               else
+                   notice(s_GameServ, u, "You don't have enough gold!");
+               break;
+           case 3:
+               price = (2000 * p->level) + (p->exp / 10);
+               if (p->gold >= price)
+               {
+                   notice(s_GameServ, u, "One defense boost coming right up!");
+                   p->inventory.incDefense();
+               }
+               else
+                   notice(s_GameServ, u, "You don't have enough gold!");
+               break;
+           default:
+               notice(s_GameServ, u, "Logical Error. See a %S admin for help!");
+               break;
+       }
+    }
+}
+
 void do_bank(char *u)
 {
     char *cmd = strtok(NULL, " ");
@@ -3168,7 +3289,7 @@ void refresh(Player *p)
        return;
 
     p->hp = p->maxhp;
-    p->forest_fights = 100;
+    p->forest_fights = forestfights;
     p->player_fights = 3;
     p->alive = true;
     clearMaster(p);
@@ -3223,9 +3344,6 @@ void do_help(char *u)
 {
     char *cmd = strtok(NULL, " ");
 
-    if (cmd)
-       for (unsigned int x = 0; x < strlen(cmd); x++)
-           cmd[x] = tolower(cmd[x]);
     display_help(u, cmd);
 }
 
@@ -3259,6 +3377,10 @@ void display_help(char *u, char *file)
     else
     {
        char *filename;
+
+       for (unsigned int x = 0; x < strlen(file); x++)
+           file[x] = tolower(file[x]);
+
        filename = new char[strlen(file) + 12];
        sprintf(filename, "helpfiles/%s", file);
        infile.open(filename);
@@ -3314,3 +3436,41 @@ void do_admin(char *u)
     }
 }
 
+bool load_monsters()
+{
+    ifstream infile;
+    infile.open("monsters.dat");
+
+    char *buf;
+
+    if (infile.fail())
+    {
+       cout << "Error opening monsters.dat" << endl;
+       return false;
+    }
+    init_monsters();
+    buf = new char[2048];
+
+  for (int l = 0; l < REALLEVELS; l++)
+  {
+    for (int m = 0; m < MONSTERS;)
+    {
+       infile.getline(buf, 2048);
+       if (buf[0] == '\n' || buf[0] == '\0' || buf[0] == '#')
+           continue;
+       else
+       {
+           strcpy(monsters[l][m]->name, strtok(buf, "~"));
+           strcpy(monsters[l][m]->weapon, strtok(NULL, "~"));
+           monsters[l][m]->strength = stringtoint(strtok(NULL, "~"));
+           monsters[l][m]->gold = stringtoint(strtok(NULL, "~"));
+           monsters[l][m]->exp = stringtoint(strtok(NULL, "~"));
+           monsters[l][m]->maxhp = stringtoint(strtok(NULL, "~"));
+           strcpy(monsters[l][m]->death, strtok(NULL, ""));
+           m++;
+       }
+    }
+  }
+    delete [] buf;
+return true;
+}