]> jfr.im git - irc/gameservirc.git/blame - gameserv/c_forest.cpp
implemented the tavern only listing certain items based on level
[irc/gameservirc.git] / gameserv / c_forest.cpp
CommitLineData
85ce9d3e 1#include "sockhelp.h"
2#include "aClient.h"
3#include "list.h"
4#include "extern.h"
ee38284f 5#include "flags.h"
85ce9d3e 6#include <cctype>
7
8void do_forest(char *u);
c8ada07e 9Monster *getNewMonster(Monster *m);
10void deleteMonster(Monster *m);
9d057db5 11
85ce9d3e 12void forest(char *source, char *buf)
13{
14 char *cmd = strtok(buf, " ");
15
16 if (cmd[0] == ':')
17 cmd++;
18 if (source[0] == ':')
19 source++;
20
21 if (stricmp(cmd, "SEARCH") == 0)
22 {
23 do_forest(source);
24 } else if (stricmp(cmd, "ATTACK") == 0) {
25 do_attack(source);
c8ada07e 26 } else if (stricmp(cmd, "RUN") == 0) {
27 do_run(source);
ad7dfaa0 28 } else if (stricmp(cmd, "HEAL") == 0) {
29 do_heal(source);
85ce9d3e 30 }
31
32source--;
33}
34
35void do_forest(char *u)
36{
37 aClient *source;
85ce9d3e 38
ee38284f 39 if (!(source = find(u)))
40 {
41 notice(s_GameServ, u, "Fatal Error in do_forest. Contact a %S admin for help.");
42 return;
43 }
44 else if (!is_playing(source))
85ce9d3e 45 {
46 notice(s_GameServ, u, "You must be playing the game to search the forest!");
1af35752 47 return;
48 }
ee38284f 49 Player *p = source->stats;
50
51 if (!isAlive(p))
1af35752 52 {
53 notice(s_GameServ, u, "You are dead. Wait until tomorrow to search the forest some more.");
54 return;
85ce9d3e 55 }
56 else
57 {
0b6098d5 58 updateTS(source->stats);
ee38284f 59 if (p->forest_fights <= 0)
85ce9d3e 60 {
61 notice(s_GameServ, u, "You are out of forest fights for the day. Wait "\
62 "till tomorrow!");
63 return;
64 }
b410b364 65 else if (!is_fighting(source))
85ce9d3e 66 {
20d5d721 67 int eventnum = rand() % 100;
20d5d721 68 p->forest_fights--;
69
70 notice(s_GameServ, u, "You search the forest for something to kill...");
71
7d1d9eeb 72 // 88% of forest searching turns up a monster
73 if (eventnum >= 12)
20d5d721 74 {
ea93c39a 75 p->fight = new Monster(levels[p->level - 1].randomMonster());
5c449fde 76 notice(s_GameServ, u, "You have found \ 2%s\ 2!", p->fight->name.c_str());
83cf716f 77 if (p->fight->hp < p->fight->maxhp)
78 p->fight->hp = p->fight->maxhp;
20d5d721 79
80 p->battle = NULL; // Just to make sure
81 p->master = NULL; // Just to make sure
82 display_monster(u);
83 }
37ed80a9 84 /*
2271327b 85 else if (eventnum < 12 && eventnum >= 10) // 2% for finding potions
86 {
87 notice(s_GameServ, u, "Fortune smiles upon thee!");
88
5c449fde 89 eventnum = 1 + rand() % 4;
90 switch(eventnum)
2271327b 91 {
5c449fde 92 case 1:
93 notice(s_GameServ, u,
2271327b 94 "You have found an HP Potion!");
5c449fde 95 p->inventory.incHP();
96 break;
97 case 2:
98 notice(s_GameServ, u,
2271327b 99 "You have found a Strength Potion!");
5c449fde 100 p->inventory.incStrength();
101 break;
102 case 3:
103 notice(s_GameServ, u,
2271327b 104 "You have found a Defense Potion!");
5c449fde 105 p->inventory.incDefense();
106 break;
107 case 4:
108 notice(s_GameServ, u,
2271327b 109 "You have found a Healing Potion!");
5c449fde 110 p->inventory.incHealing();
111 break;
2271327b 112 }
113 }
37ed80a9 114 */
2271327b 115 else if (eventnum < 10 && eventnum >= 5) // 5% for the fountain
20d5d721 116 {
b478c0df 117 if (p->hp < p->maxhp)
118 {
119 notice(s_GameServ, u, "In your path lies a beautiful fountain from which flows the crystal waters of life.");
120 notice(s_GameServ, u, "You wet your lips on the cool blue waters and feel rejuvenated");
121 p->hp = p->maxhp;
122 }
123 else
124 {
125 notice(s_GameServ, u, "In your path lies a beautiful fountain from which flows the crystal waters of life.");
126 notice(s_GameServ, u, "You are not thirsty, though, and you don't need healing. Best to leave this for the next warrior");
127 p->forest_fights++;
128 }
20d5d721 129 }
ee38284f 130 else if (eventnum < 5) // 5 % for the wishing well
20d5d721 131 {
132 notice(s_GameServ, u, "You come upon a pure green emerald studded magic wishing well.");
133 if (p->gold == 0)
134 {
135 notice(s_GameServ, u, "Too bad you're broke. Guess you won't be having any wishes answered today.");
9181f3e5 136 p->forest_fights++;
20d5d721 137 return;
138 }
7df8f136 139 long newstats;
20d5d721 140 notice(s_GameServ, u, "You throw one of your gold pieces into the well and it vanishes into a puff of white smoke.");
141 notice(s_GameServ, u, "In an instant, the puff of smoke materializes into a gnome.");
142 notice(s_GameServ, u, "The gnome is holding something in his hand motioning for you to come closer.");
143 notice(s_GameServ, u, "It is a wand! The gnome is waving it through the air towards you!");
ee38284f 144 // 2% for each wishing well chance except for forest fights
145 if (eventnum < 1) // forest fights
20d5d721 146 {
7df8f136 147 newstats = (rand() % 11) + 5;
148 notice(s_GameServ, u, "%ld EXTRA FOREST FIGHTS!!",
149 newstats);
150 p->forest_fights += newstats;
20d5d721 151 }
ee38284f 152 else if (eventnum < 3)
20d5d721 153 {
9c531957 154 newstats = levels[p->level - 1].getStrength().random();
7df8f136 155 notice(s_GameServ, u, "A SACK WITH %ld GOLD!", newstats);
156 p->gold += newstats;
20d5d721 157 }
158 else
159 {
9c531957 160 newstats = levels[p->level - 1].getExp().random();
20d5d721 161 notice(s_GameServ, u, "Time seems to stand still for a moment.");
7df8f136 162 notice(s_GameServ, u, " %ld EXTRA EXPERIENCE POINTS", newstats);
163 p->exp += newstats;
20d5d721 164 }
165 }
85ce9d3e 166 }
167 else if (is_fighting(u))
168 {
169 notice(s_GameServ, u, "You want to fight two monsters at once?");
170 }
171 }
172
173}
174
c8ada07e 175Monster *getNewMonster(Monster *m)
176{
177 if (!m)
178 return NULL;
179
180 Monster *newguy;
181 newguy = new Monster;
ddef84f1 182 newguy->name = m->name;
183 newguy->weapon = m->weapon;
184 newguy->death = m->death;
c8ada07e 185 newguy->strength = m->strength;
186 newguy->gold = m->gold;
187 newguy->exp = m->exp;
188 newguy->hp = m->hp;
189 newguy->maxhp = m->maxhp;
190 return newguy;
191}