X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/082f064da8876b7fd2a9db8e332945c2e494926e..af20337cbe2eda7033fe5e0040e843ad13858bf0:/gameserv/gameserv.cpp diff --git a/gameserv/gameserv.cpp b/gameserv/gameserv.cpp index a1286a2..d1b50f7 100644 --- a/gameserv/gameserv.cpp +++ b/gameserv/gameserv.cpp @@ -3,6 +3,7 @@ #include "extern.h" #include "flags.h" #include "list.h" +#include "level.h" #include "sockhelp.h" #include @@ -23,8 +24,8 @@ using std::ios; #endif -Monster *monsters[LEVELS][MONSTERS]; // Monsters per level. Total = MONSTERS * LEVELS Monster boss; // The boss monster +Level levels[LEVELS]; // The newest way to store monsters Monster *masters[LEVELS]; // A master for each level @@ -86,8 +87,8 @@ void refreshall(); void updateTS(Player *p); void reset(Player *p); void init_masters(); -void init_monsters(); bool load_monsters(); +bool load_levels(); void delete_monsters(); void delete_masters(); @@ -302,6 +303,14 @@ void gameserv(char *source, char *buf) char *rest = strtok(NULL, ""); raw("%s", rest); } + } else if (stricmp(cmd, "PRINT") == 0) { + for (int x = 0; x < LEVELS; x++) + levels[x].monsters.print(); + } else if (stricmp(cmd, "RANDOM") == 0) { + char *rstr = strtok(NULL, ""); + range trange; + trange.setRange(rstr); + notice(s_GameServ, source, "Random number in that range: %d", trange.random()); #endif } else { aClient *user; @@ -1045,25 +1054,10 @@ void init_masters() strcpy(masters[10]->death, "You must learn to concentrate. It is like a finger pointing away to the moon... DONT concentrate on the finger, or you will miss all the heavenly glory."); } -void init_monsters() -{ - #ifdef DEBUGMODE - log("Calling delete_monsters"); - #endif - - delete_monsters(); - - for (int x = 0; x < LEVELS; x++) - for (int y = 0; y < MONSTERS; y++) - monsters[x][y] = new Monster(); -} - void delete_monsters() { for (int x = 0; x < LEVELS; x++) - for (int y = 0; y < MONSTERS; y++) - if (monsters[x][y]) - delete monsters[x][y]; + levels[x].monsters.deleteNodes(); } void delete_masters() @@ -2608,7 +2602,7 @@ void do_tavern(char *u) notice(s_GameServ, u, "You don't have enough gold!"); break; case 4: - price = 3000 * p->level * 4; + price = 2000 * p->level * 4; if (p->gold >= price) { notice(s_GameServ, u, "One HP Potion coming right up!"); @@ -2850,7 +2844,7 @@ void do_dragon(char *u) notice(s_GameServ, u, "You adjust your %s, tighten your grip on "\ "your %s, and venture into the hot, dark cave. "\ "You are surprised at the angle of descent as you climb "\ - "lower and lower, deeper into the dragon's den."); + "lower and lower, deeper into the dragon's den.", armors[p->level - 1], weapons[p->level - 1]); notice(s_GameServ, u, "You come to the end of the cave to find "\ "a tooth. It is a large tooth... bigger than your torso."\ " Suddenly the darkness lifts from the gleam of an eye "\ @@ -3424,45 +3418,62 @@ void do_admin(char *u) } } +bool load_levels() +{ + char *filename; + filename = new char[256]; + + for (int x = 1; x <= LEVELS; x++) + { + sprintf(filename, "data/levels/level%d.dat", x); + if (levels[x - 1].loadLevel(filename) == false) + return false; + } + + delete []filename; + return true; +} bool load_monsters() { + char *filename; ifstream infile; - infile.open("monsters.dat"); - char *buf; + buf = new char[2048]; - if (infile.fail()) + for (int level = 1; level <= LEVELS; level++) + { + filename = new char[256]; + sprintf(filename, "data/monsters/level%d.dat", level); + infile.open(filename); + + if (!infile) { - log("Error opening monsters.dat"); + log("Error opening %s", filename); return false; } - init_monsters(); - buf = new char[2048]; #ifdef DEBUGMODE - log("Loading monsters from monsters.dat"); + log("Loading monsters from %s", filename); #endif - for (int l = 0; l < REALLEVELS; l++) - { - for (int m = 0; m < MONSTERS;) + while (infile.getline(buf, 2048)) { - infile.getline(buf, 2048); + if (buf[0] == '^') + break; if (buf[0] == '\n' || buf[0] == '\0' || buf[0] == '#') continue; - else - { - strcpy(monsters[l][m]->name, strtok(buf, "~")); - strcpy(monsters[l][m]->weapon, strtok(NULL, "~")); - monsters[l][m]->strength = stringtoint(strtok(NULL, "~")); - monsters[l][m]->gold = stringtoint(strtok(NULL, "~")); - monsters[l][m]->exp = stringtoint(strtok(NULL, "~")); - monsters[l][m]->maxhp = stringtoint(strtok(NULL, "~")); - monsters[l][m]->hp = monsters[l][m]->maxhp; - strcpy(monsters[l][m]->death, strtok(NULL, "")); - m++; - } + Monster *temp; + temp = new Monster; + + strcpy(temp->name, strtok(buf, "~")); + strcpy(temp->weapon, strtok(NULL, "~")); + strcpy(temp->death, strtok(NULL, "~")); + + levels[level - 1].monsters.insertAtBack_RLN(temp); + delete temp; } + delete [] filename; + infile.close(); } delete [] buf; return true;