]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/gameserv.cpp
Added everything necessary to save overtop of the old dragon when someone beats the...
[irc/gameservirc.git] / gameserv / gameserv.cpp
index 523431f35c26c251008f85c25ed5c4e0a5418b2e..83759229c276f87b1a93ff48696cb755bcb91585 100644 (file)
@@ -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)