]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/c_forest.cpp
syncing
[irc/gameservirc.git] / gameserv / c_forest.cpp
index 87e20d03db09dbe647d13322d45e4a5ee48d1bab..9a8683fb7fb5176d441d438c26ecb72e638cf8b0 100644 (file)
@@ -2,6 +2,7 @@
 #include "aClient.h"
 #include "list.h"
 #include "extern.h"
+#include "flags.h"
 #include <cctype>
 
 void do_forest(char *u);
@@ -37,32 +38,88 @@ void do_forest(char *u)
 
     int num = rand() % 12;
 
-    source = find(u);
 
-    if (!is_playing(u))
+    if (!(source = find(u)))
+    {
+       notice(s_GameServ, u, "Fatal Error in do_forest. Contact a %S admin for help.");
+       return;
+    }
+    else if (!is_playing(source))
     {
         notice(s_GameServ, u, "You must be playing the game to search the forest!");
+       return;
+    }
+    Player *p = source->stats;
+
+    if (!isAlive(p))
+    {
+       notice(s_GameServ, u, "You are dead. Wait until tomorrow to search the forest some more.");
+       return;
     }
     else 
     {
-        if (source->stats->forest_fights <= 0)
+       updateTS(source->stats);
+        if (p->forest_fights <= 0)
         {
             notice(s_GameServ, u, "You are out of forest fights for the day. Wait "\
                 "till tomorrow!");
             return;
         }
-        else if (isnt_fighting(u))
+        else if (!is_fighting(u))
         {
-            Player *p = source->stats;
-            p->forest_fights--;
-            p->fight = new Monster(monsters[p->level - 1][num]);
-            notice(s_GameServ, u, "You search the forest for something to kill...");
-            notice(s_GameServ, u, "You have found \ 2%s\ 2!", p->fight->name);
-            p->fight->hp = p->fight->maxhp;
-
-            p->battle = NULL; // Just to make sure
-           p->master = NULL; // Just to make sure
-            display_monster(u);
+           int eventnum = rand() % 100;
+           p->forest_fights--;
+
+           notice(s_GameServ, u, "You search the forest for something to kill...");
+
+           // 88% of forest searching turns up a monster
+           if (eventnum >= 12)
+           {
+               p->fight = new Monster(monsters[p->level - 1][num]);
+               notice(s_GameServ, u, "You have found \ 2%s\ 2!", p->fight->name);
+               if (p->fight->hp < p->fight->maxhp)
+                   p->fight->hp = p->fight->maxhp;
+
+               p->battle = NULL; // Just to make sure
+               p->master = NULL; // Just to make sure
+               display_monster(u);
+           }
+           else if (eventnum < 12 && eventnum >= 5) // 7% for the fountain
+           {
+               notice(s_GameServ, u, "In your path lies a beautiful fountain from which flows the crystal waters of life.");
+               notice(s_GameServ, u, "You wet your lips on the cool blue waters and feel rejuvenated");
+               p->hp = p->maxhp;
+           }
+           else if (eventnum < 5) // 5 % for the wishing well
+           {
+               notice(s_GameServ, u, "You come upon a pure green emerald studded magic wishing well.");
+               if (p->gold == 0)
+               {
+                   notice(s_GameServ, u, "Too bad you're broke. Guess you won't be having any wishes answered today.");
+                   return;
+               }
+               notice(s_GameServ, u, "You throw one of your gold pieces into the well and it vanishes into a puff of white smoke.");
+               notice(s_GameServ, u, "In an instant, the puff of smoke materializes into a gnome.");
+               notice(s_GameServ, u, "The gnome is holding something in his hand motioning for you to come closer.");
+               notice(s_GameServ, u, "It is a wand! The gnome is waving it through the air towards you!");
+               // 2% for each wishing well chance except for forest fights
+               if (eventnum < 1) // forest fights
+               {
+                   notice(s_GameServ, u, "EXTRA FOREST FIGHTS!!");
+                   p->forest_fights += (rand() % 11) + 5;
+               }
+               else if (eventnum < 3)
+               {
+                   notice(s_GameServ, u, "A SACK OF GOLD!");
+                   p->gold += (rand() % 1000) * (p->level + (rand() % 10));
+               }
+               else
+               {
+                   notice(s_GameServ, u, "Time seems to stand still for a moment.");
+                   notice(s_GameServ, u, "EXTRA EXPERIENCE POINTS");
+                   p->exp += (rand() % 100) * (p->level + rand() % 10);
+               }
+           }
         }
         else if (is_fighting(u))
         {