]> 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 d02c9c577f3970ebe7f4aeed945daa4155669ee9..c569cdc834cd77790338bf67dfced3bd35b73b5a 100644 (file)
@@ -100,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);
@@ -176,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();
@@ -534,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;
@@ -2869,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, " ");
@@ -3184,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);