]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/c_forest.cpp
Bugfix relating to player fights (in Changes file) and fixed the run script.
[irc/gameservirc.git] / gameserv / c_forest.cpp
index d278de48b4e9006c0e0d00cdfaa55d9a77ac2ac3..9f35cdce2af85b50e0cce09eb02475239dd93299 100644 (file)
@@ -34,15 +34,19 @@ source--;
 void do_forest(char *u)
 {
     aClient *source;
-    char *cmd;
 
     int num = rand() % 12;
 
-    source = find(u);
 
-    if (!is_playing(u))
+    if (!(source = find(u)) || !source->stats)
     {
         notice(s_GameServ, u, "You must be playing the game to search the forest!");
+       return;
+    }
+    else if (!is_alive(source))
+    {
+       notice(s_GameServ, u, "You are dead. Wait until tomorrow to search the forest some more.");
+       return;
     }
     else 
     {
@@ -52,16 +56,62 @@ void do_forest(char *u)
                 "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;
-            display_monster(u);
+           int eventnum = rand() % 100;
+           Player *p = source->stats;
+           p->forest_fights--;
+
+           notice(s_GameServ, u, "You search the forest for something to kill...");
+
+           if (eventnum >= 25)
+           {
+               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 < 25 && eventnum >= 15) // 10%
+           {
+               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->forest_fights += 10;
+               p->hp = p->maxhp;
+           }
+           else if (eventnum < 15) // 15 % 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!");
+               // 5% for each wishing well chance
+               if (eventnum < 5) // forest fights
+               {
+                   notice(s_GameServ, u, "EXTRA FOREST FIGHTS!!");
+                   p->forest_fights += (rand() % 11) + 5;
+               }
+               else if (eventnum < 10)
+               {
+                   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))
         {