X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/bf3a2ff9053b30a0ef85efcdb511c796b4718a3e..f71a53ab6e251712c26a11c0b373d41014f775d5:/gameserv/c_forest.cpp?ds=sidebyside diff --git a/gameserv/c_forest.cpp b/gameserv/c_forest.cpp index 711411f..c20cfb4 100644 --- a/gameserv/c_forest.cpp +++ b/gameserv/c_forest.cpp @@ -1,9 +1,10 @@ -#include "sockhelp.h" #include "aClient.h" -#include "list.h" +#include #include "extern.h" #include "flags.h" -#include +#include "item.h" +#include "pouch.h" +#include "sockhelp.h" void do_forest(char *u); Monster *getNewMonster(Monster *m); @@ -34,140 +35,126 @@ source--; void do_forest(char *u) { - aClient *source; - - if (!(source = find(u))) + aClient *source; + + if (!(source = find(u))) { - notice(s_GameServ, u, "Fatal Error in do_forest. Contact a %S admin for help."); - return; + notice(s_GameServ, u, "Fatal Error in do_forest. Contact a %S admin for help."); + return; } - else if (!is_playing(source)) + else if (!is_playing(source)) { - notice(s_GameServ, u, "You must be playing the game to search the forest!"); - return; + notice(s_GameServ, u, "You must be playing the game to search the forest!"); + return; } - Player *p = source->stats; - - if (!isAlive(p)) + Player *p = source->stats; + + if (!isAlive(p)) { - notice(s_GameServ, u, "You are dead. Wait until tomorrow to search the forest some more."); - return; + notice(s_GameServ, u, "You are dead. Wait until tomorrow to search the forest some more."); + return; } - else + else { - updateTS(source->stats); - if (p->forest_fights <= 0) + updateTS(source->stats); + if (p->getForestFights() <= 0) { - notice(s_GameServ, u, "You are out of forest fights for the day. Wait "\ - "till tomorrow!"); - return; + notice(s_GameServ, u, "You are out of forest fights for the day. Wait "\ + "till tomorrow!"); + return; } - else if (!is_fighting(source)) + else if (!is_fighting(source)) { - 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].random()); - notice(s_GameServ, u, "You have found %s!", 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 >= 10) // 2% for finding potions - { - notice(s_GameServ, u, "Fortune smiles upon thee!"); - - eventnum = 1 + rand() % 4; - switch(eventnum) - { - case 1: - notice(s_GameServ, u, - "You have found an HP Potion!"); - p->inventory.incHP(); - break; - case 2: - notice(s_GameServ, u, - "You have found a Strength Potion!"); - p->inventory.incStrength(); - break; - case 3: - notice(s_GameServ, u, - "You have found a Defense Potion!"); - p->inventory.incDefense(); - break; - case 4: - notice(s_GameServ, u, - "You have found a Healing Potion!"); - p->inventory.incHealing(); - break; - } - } - else if (eventnum < 10 && eventnum >= 5) // 5% for the fountain - { - if (p->hp < p->maxhp) - { - 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 - { - notice(s_GameServ, u, "In your path lies a beautiful fountain from which flows the crystal waters of life."); - notice(s_GameServ, u, "You are not thirsty, though, and you don't need healing. Best to leave this for the next warrior"); - p->forest_fights++; - } - } - 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."); - p->forest_fights++; - return; - } - long newstats; - 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 - { - newstats = (rand() % 11) + 5; - notice(s_GameServ, u, "%ld EXTRA FOREST FIGHTS!!", - newstats); - p->forest_fights += newstats; - } - else if (eventnum < 3) - { - newstats = (rand() % 1000) * (p->level + (rand() % 10)); - notice(s_GameServ, u, "A SACK WITH %ld GOLD!", newstats); - p->gold += newstats; - } - else - { - newstats = (rand() % 100) * (p->level + rand() % 10); - notice(s_GameServ, u, "Time seems to stand still for a moment."); - notice(s_GameServ, u, " %ld EXTRA EXPERIENCE POINTS", newstats); - p->exp += newstats; - } - } + int eventnum = rand() % 100; + p->subtractForestFights(1); + + notice(s_GameServ, u, "You search the forest for something to kill..."); + + // 90% of forest searching turns up a monster + if (eventnum >= 10) + { + p->setMonster(levels[p->getLevel() - 1].randomMonster()); + + notice(s_GameServ, u, "You have found %s!", p->getMonster()->name.c_str()); + if (p->getMonster()->hp < p->getMonster()->maxhp) + p->getMonster()->hp = p->getMonster()->maxhp; + + p->delBattle(); // Just to make sure + p->delMaster(); // Just to make sure + display_monster(u); + } + else if (eventnum < 10 && eventnum >= 9) // 1% for finding potions + { + list::iterator temp_tavernitem; + + notice(s_GameServ, u, "Fortune smiles upon thee!"); + + eventnum = rand() % tavern.size(); + temp_tavernitem = tavern.begin(); + for (int x = 0;x < eventnum;x++) + { + temp_tavernitem++; + } + notice(s_GameServ, u, "You have found a %s", (*temp_tavernitem).getItem()->getName().c_str()); + p->inventory->addItem((*temp_tavernitem).getItem()); + } + else if (eventnum < 9 && eventnum >= 4) // 5% for the fountain + { + if (p->getHP() < p->getMaxHP()) + { + 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->healall(); + } + else + { + notice(s_GameServ, u, "In your path lies a beautiful fountain from which flows the crystal waters of life."); + notice(s_GameServ, u, "You are not thirsty, though, and you don't need healing. Best to leave this for the next warrior"); + p->addForestFights(1); + } + } + else if (eventnum < 4) // 4 % for the wishing well + { + notice(s_GameServ, u, "You come upon a pure green emerald studded magic wishing well."); + if (p->getGold() == 0) + { + notice(s_GameServ, u, "Too bad you're broke. Guess you won't be having any wishes answered today."); + p->addForestFights(1); + return; + } + long newstats; + 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 + { + newstats = (rand() % 11) + 5; + notice(s_GameServ, u, "%ld EXTRA FOREST FIGHTS!!", + newstats); + p->addForestFights(newstats); + } + else if (eventnum < 3) + { + newstats = levels[p->getLevel() - 1].getGold().random(); + notice(s_GameServ, u, "A SACK WITH %ld GOLD!", newstats); + p->addGold(newstats); + } + else + { + newstats = levels[p->getLevel() - 1].getExp().random(); + notice(s_GameServ, u, "Time seems to stand still for a moment."); + notice(s_GameServ, u, " %ld EXTRA EXPERIENCE POINTS", newstats); + p->addExp(newstats); + } + } } - else if (is_fighting(u)) + else if (is_fighting(u)) { - notice(s_GameServ, u, "You want to fight two monsters at once?"); + notice(s_GameServ, u, "You want to fight two monsters at once?"); } - } - + } } Monster *getNewMonster(Monster *m) @@ -177,23 +164,9 @@ Monster *getNewMonster(Monster *m) Monster *newguy; newguy = new Monster; - - if (m->name) - { - newguy->name = new char[strlen(m->name)]; - strcpy(newguy->name, m->name); - } - if (m->weapon) - { - newguy->weapon = new char[strlen(m->weapon)]; - strcpy(newguy->weapon, m->weapon); - } - if (m->death) - { - newguy->death = new char[strlen(m->death)]; - strcpy(newguy->death, m->death); - } - + newguy->name = m->name; + newguy->weapon = m->weapon; + newguy->death = m->death; newguy->strength = m->strength; newguy->gold = m->gold; newguy->exp = m->exp;