/
ScryMUD/mud/
ScryMUD/mud/grrmud/Boards/
ScryMUD/mud/grrmud/Help/
ScryMUD/mud/grrmud/Pfiles/
ScryMUD/mud/grrmud/PlayerSacks/
ScryMUD/mud/grrmud/PlayerShops/
ScryMUD/mud/grrmud/help_filter/
ScryMUD/mud/hegemon/
ScryMUD/mud/hegemon/data/
ScryMUD/mud/hegemon/data/help/battle/
ScryMUD/mud/hegemon/data/help/client/
ScryMUD/mud/hegemon/data/help/communications/
ScryMUD/mud/hegemon/data/help/skills/
ScryMUD/mud/hegemon/data/help/spells/
ScryMUD/mud/include/
ScryMUD/mud/lib/
ScryMUD/mud/lib/bitfield/
ScryMUD/mud/lib/log/
ScryMUD/mud/lib/string2/
#include "ServerConfig.h"

ServerConfig::ServerConfig() {
   port=4000;
   
   bootLoadModifier=300;
   regularLoadModifier=100;
   currentLoadModifier=100;
   
   experienceDivisor=1;
   maxPlayers=500;
   hungerMax=100;
   thirstMax=75;
   druggedMax=25;
   sacPointsNeeded=150;

   outOfTownModifier=1.25;
   commerceSkillBuyEffect=0.86;
   commerceSkillSellEffect=1.05;
   
   recallRoom=1;
   tammuzRoom=2923;
   newbieRoom=6;
   loginRoom=1;
   donateRoom=7;

   newbieBagObject=358;
   corpseObject=3;
   goldCoinsObject=5;
   pcSkinObject=8;
   meatObject=97;
   createFoodObject1=94;
   createFoodObject2=68;
   createFoodObject3=13;
   createFoodObject4=103;
   createLightObject=345;

   earthGolemMob=37;
   waterGolemMob=190;
   airGolemMob=191;
   fireGolemMob=193;
   minionMob1=38;
   minionMob2=39;
   minionMob3=41;
   minionMob4=42;
   walkingCorpseMob=57;
   illusionMob=55;

   gateDoor=44;

   year=1;
   day=1;
   hour=1;
   optUsec=200000;
   
   goldPerLb=1000;
   
   newTeleport=true;
   newSummon=true;
   maxRedundantDonates=5;
   convertWorldFromDev=false;

   useMySQL=false;
   mySQLuser="gmud";
   mySQLpassword="password";
   mySQLdatabase="gmud";
   mySQLhost="localhost";
   mySQLport=0;
}//ServerConfig

void ServerConfig::read(char* filename) {
   String key(20);
   String val(10);
   ifstream file(filename);

   if (!file) {
      cerr << "Couldn't open " << filename << " for reading.\n";
      return;
   }

   while (!file.eof()) {
      file >> key;
      if (key[0] == '#') {
         while (file.get() != '\n' && !file.eof());
      }
      else if (strlen(key) != 0) {
         file >> val;
         if (strcasecmp(key, "port") == 0) {
            port = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "bootLoadModifier") == 0) {
            bootLoadModifier = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "regularLoadModifier") == 0) {
            regularLoadModifier = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "experienceDivisor") == 0) {
            experienceDivisor = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "maxPlayers") == 0) {
            maxPlayers = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "hungerMax") == 0) {
            hungerMax = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "thirstMax") == 0) {
            thirstMax = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "druggedMax") == 0) {
            druggedMax = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "sacPointsNeeded") == 0) {
            sacPointsNeeded = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "outOfTownModifier") == 0) {
            outOfTownModifier = (double)strtod(val, NULL);
         }
         else if (strcasecmp(key, "commerceSkillBuyEffect") == 0) {
            commerceSkillBuyEffect = (double)strtod(val, NULL);
         }
         else if (strcasecmp(key, "commerceSkillSellEffect") == 0) {
            commerceSkillSellEffect = (double)strtod(val, NULL);
         }
         else if (strcasecmp(key, "recallRoom") == 0) {
            recallRoom = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "tammuzRoom") == 0) {
            tammuzRoom = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "newbieRoom") == 0) {
            newbieRoom = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "loginRoom") == 0) {
            loginRoom = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "donateRoom") == 0) {
            donateRoom = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "newbieBagObject") == 0) {
            newbieBagObject = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "corpseObject") == 0) {
            corpseObject = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "goldCoinsObject") == 0) {
            goldCoinsObject = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "pcSkinObject") == 0) {
            pcSkinObject = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "meatObject") == 0) {
            meatObject = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "createFoodObject1") == 0) {
            createFoodObject1 = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "createFoodObject2") == 0) {
            createFoodObject2 = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "createFoodObject3") == 0) {
            createFoodObject3 = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "createFoodObject4") == 0) {
            createFoodObject4 = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "createLightObject") == 0) {
            createLightObject = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "earthGolemMob") == 0) {
            earthGolemMob = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "waterGolemMob") == 0) {
            waterGolemMob = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "airGolemMob") == 0) {
            airGolemMob= (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "fireGolemMob") == 0) {
            fireGolemMob = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "minionMob1") == 0) {
           minionMob1  = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "minionMob2") == 0) {
            minionMob2 = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "minionMob3") == 0) {
            minionMob3 = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "minionMob4") == 0) {
            minionMob4 = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "walkingCorpseMob") == 0) {
            walkingCorpseMob = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "illusionMob") == 0) {
            illusionMob = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "gateDoor") == 0) {
            gateDoor = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "year") == 0) {
            year = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "day") == 0) {
            day = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "hour") == 0) {
            hour = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "optUsec") == 0) {
            optUsec = strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "goldPerLb") == 0) {
            goldPerLb = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "newTeleport") == 0) {
            if (strcasecmp(val, "true") == 0) newTeleport=true;
            else if (strcasecmp(val, "false") == 0) newTeleport=false;
         }
         else if (strcasecmp(key, "newSummon") == 0) {
            if (strcasecmp(val, "true") == 0) newSummon=true;
            else if (strcasecmp(val, "false") == 0) newSummon=false;
         }
         else if (strcasecmp(key, "maxRedundantDonates") == 0) {
            maxRedundantDonates = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "useMySQL") == 0) {
            if (strcasecmp(val, "true") == 0) useMySQL=true;
            else if (strcasecmp(val, "false") == 0) useMySQL=false;
         }
         else if (strcasecmp(key, "mySQLuser") == 0) {
            mySQLuser=val;
         }
         else if (strcasecmp(key, "mySQLpassword") == 0) {
            mySQLpassword=val;
         }
         else if (strcasecmp(key, "mySQLdatabase") == 0) {
            mySQLdatabase=val;
         }
         else if (strcasecmp(key, "mySQLhost") == 0) {
            mySQLhost=val;
         }
         else if (strcasecmp(key, "mySQLport") == 0) {
            mySQLport = (int)strtol(val, NULL, 0);
         }
      }
   }
}

void ServerConfig::readDynamic(char* filename) {
   String key(20);
   String val(10);
   ifstream file(filename);

   if (!file) {
      return;
   }

   while (!file.eof()) {
      file >> key;
      if (key[0] == '#') {
         while (file.get() != '\n' && !file.eof());
      }
      else if (strlen(key) != 0) {
         file >> val;
         if (strcasecmp(key, "year") == 0) {
            year = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "day") == 0) {
            day = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "hour") == 0) {
            hour = (int)strtol(val, NULL, 0);
         }
         else if (strcasecmp(key, "convertWorldFromDev") == 0) {
            if (strcasecmp(val, "true") == 0) convertWorldFromDev=true;
            else if (strcasecmp(val, "false") == 0) convertWorldFromDev=false;
         }
      }
   }
}

void ServerConfig::write(char* filename) {
   ofstream file(filename);

   if (!file) {
      cerr << "Couldn't open " << filename << " for writing.\n";
      return;
   }

   file << "port " << port << '\n';
   
   file << "bootLoadModifier " << bootLoadModifier << '\n';
   file << "regularLoadModifier " << regularLoadModifier << '\n';
   
   file << "experienceDivisor " << experienceDivisor << '\n';
   file << "maxPlayers " << maxPlayers << '\n';
   file << "hungerMax " << hungerMax << '\n';
   file << "thirstMax " << thirstMax << '\n';
   file << "druggedMax " << druggedMax << '\n';
   file << "sacPointsNeeded " << sacPointsNeeded << '\n';

   file << "outOfTownModifier " << outOfTownModifier << '\n';
   file << "commerceSkillBuyEffect " << commerceSkillBuyEffect << '\n';
   file << "commerceSkillSellEffect " << commerceSkillSellEffect << '\n';
   
   file << "recallRoom " << recallRoom << '\n';
   file << "tammuzRoom " << tammuzRoom << '\n';
   file << "newbieRoom " << newbieRoom << '\n';
   file << "loginRoom " << loginRoom << '\n';
   file << "donateRoom " << donateRoom << '\n';

   file << "newbieBagObject " << newbieBagObject << '\n';
   file << "corpseObject " << corpseObject << '\n';
   file << "goldCoinsObject " << goldCoinsObject << '\n';
   file << "pcSkinObject " << pcSkinObject << '\n';
   file << "meatObject " << meatObject << '\n';
   file << "createFoodObject1 " << createFoodObject1 << '\n';
   file << "createFoodObject2 " << createFoodObject2 << '\n';
   file << "createFoodObject3 " << createFoodObject3 << '\n';
   file << "createFoodObject4 " << createFoodObject4 << '\n';
   file << "createLightObject " << createLightObject << '\n';

   file << "earthGolemMob " << earthGolemMob << '\n';
   file << "waterGolemMob " << waterGolemMob << '\n';
   file << "airGolemMob " << airGolemMob << '\n';
   file << "fireGolemMob " << fireGolemMob << '\n';
   file << "minionMob1 " << minionMob1 << '\n';
   file << "minionMob2 " << minionMob2 << '\n';
   file << "minionMob3 " << minionMob3 << '\n';
   file << "minionMob4 " << minionMob4 << '\n';
   file << "walkingCorpseMob " << walkingCorpseMob << '\n';
   file << "illusionMob " << illusionMob << '\n';

   file << "gateDoor " << gateDoor << '\n';

   file << "Year " << year << '\n';
   file << "Day " << day << '\n';
   file << "Hour " << hour << '\n';
   file << "optUsec" << optUsec << '\n';
   
   file << "goldPerLb " << goldPerLb << '\n';
   
   if (newTeleport) {
      file << "newTeleport true\n";
   }
   else {
      file << "newSummon false\n";
   }
   if (newSummon) {
      file << "newSummon true\n";
   }
   else {
      file << "newSummon false\n";
   }
   file << "maxRedundantDonates " << maxRedundantDonates << '\n';

   if (useMySQL) {
      file << "useMySQL true\n";
      file << "mySQLuser " << mySQLuser << '\n';
      file << "mySQLpassword " << mySQLpassword << '\n';
      file << "mySQLdatabase " << mySQLdatabase << '\n';
      file << "mySQLhost " << mySQLhost << '\n';
      file << "mySQLport " << mySQLport << '\n';
   }
   else {
      file << "useMySQL false\n";
   }
}

void ServerConfig::writeDynamic(char* filename) {
   ofstream file(filename);

   if (!file) {
      cerr << "Couldn't open " << filename << " for writing.\n";
      return;
   }

   file << "# This file holds the fields the server changes by itself.\n";
   file << "# They will override anything in grrmud.cfg\n";
   file << "Year " << year << '\n';
   file << "Day " << day << '\n';
   file << "Hour " << hour << '\n';
   file << "convertWorldFromDev " << convertWorldFromDev << '\n';
}