X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/451df086ac3cadf256173808e1ee8861bdf7611f..8e8005496ea89dc8d8c7ffb12c76836a4de701a4:/gameserv/gameserv.cpp diff --git a/gameserv/gameserv.cpp b/gameserv/gameserv.cpp index 523431f..8375922 100644 --- a/gameserv/gameserv.cpp +++ b/gameserv/gameserv.cpp @@ -24,12 +24,14 @@ using std::ios; #endif - +Monster dragon; // The current dragon Level levels[LEVELS]; // The newest way to store monsters // Database functions int save_gs_dbase(); int load_gs_dbase(); +int load_dragon(); +int save_dragon(); // String functions #ifndef HAVE_STRTOK @@ -1383,22 +1385,22 @@ void do_stats(char *u) bool load_masters() { - ifstream infile("data/masters.dat"); + ifstream infile(masterdata); char *buf; int l = 0; buf = new char[1024]; if (infile.fail()) { - log("Error opening data/masters.dat"); + log("Error opening %s", masterdata); return false; } #ifdef DEBUGMODE - log("Loading masters from data/masters.dat"); + log("Loading masters from %s", masterdata); #endif - for (l = 0; l < LEVELS; l++) + for (l = 0; l < LEVELS - 1; l++) { infile.getline(buf, 1024, '\n'); @@ -1436,7 +1438,7 @@ bool load_masters() delete []buf; - if (l < LEVELS) // We didn't load a master for every level - check data/masters.dat + if (l < LEVELS - 1) // We didn't load a master for every level - check data/masters.dat return false; else return true; @@ -1589,7 +1591,7 @@ bool dragon_fight(aClient *user) if (!is_playing(user)) return false; else - return (user->stats->level == LEVELS && master_fight(user)); + return (isDragonFight(user->stats)); } void do_fight(char *u) { @@ -2164,13 +2166,75 @@ outfile.close(); return 1; } +int load_dragon() +{ + ifstream infile; + char *buf; + + infile.open(dragondata); + + if (infile.fail()) + { + infile.clear(); + log ("Error opening %s. Trying initialdragon.dat", dragondata); + infile.open("data/initialdragon.dat"); + if (infile.fail()) + { + log ("Error opening data/initialdragon.dat"); + return 0; + } + } + + buf = new char[1024]; + + infile.getline(buf, 1024, '\n'); + infile.close(); // Done with the file... we have what we want + + dragon.name = strtok(buf, "~"); + dragon.weapon = strtok(NULL, "~"); + dragon.gold = 0; + dragon.exp = 0; + dragon.strength = stringtoint(strtok(NULL, "~")); + dragon.hp = stringtoint(strtok(NULL, "~")); + dragon.defense = stringtoint(strtok(NULL, "~")); + dragon.death = strtok(NULL, ""); + + log ("loaded dragon: %s", dragon.name.c_str()); + + delete []buf; + +return save_dragon(); // Save the dragon file and return the status code :) +} + +int save_dragon() +{ + ofstream outfile; + + outfile.open(dragondata); + + if (outfile.fail()) + { + log ("Error opening %s. Exiting.", dragondata); + return 0; + } + + outfile << dragon.name.c_str() << '~' << dragon.weapon.c_str() << '~' + << dragon.strength << '~' << dragon.hp << '~' + << dragon.defense << '~' << dragon.death.c_str() << "\n^" + << endl; + +outfile.close(); + +return 1; +} + int load_gs_dbase() { ifstream infile; aClient *temp; Player *p; char *tempname, *buf, *password; - buf = new char[1023]; + buf = new char[1024]; infile.open(playerdata); @@ -2910,7 +2974,9 @@ void do_dragon(char *u) notice(s_GameServ, u, "Just then you notice the eye begin to "\ "glare orange! The tooth is moving... but it is still too "\ "dark for you to make out.... THE DRAGON! You see it!"); - see_master(u); + p->fight = new Monster(dragon); + setDragonFight(p); + display_monster(u); } void do_master(char *u)