aClient.o: aClient.cpp aClient.h options.h player.h script.h extern.h \
config.h
+boolean.o: boolean.cpp extern.h config.h options.h aClient.h player.h \
+ script.h flags.h
config.o: config.cpp extern.h config.h options.h flags.h
c_forest.o: c_forest.cpp aClient.h options.h player.h script.h extern.h \
config.h flags.h item.h level.h pouch.h sockhelp.h
options.h
level.o: level.cpp item.h level.h player.h script.h extern.h config.h \
options.h
+loadsave.o: loadsave.cpp extern.h config.h options.h level.h player.h \
+ script.h aClient.h item.h pouch.h toplist.h flags.h
log.o: log.cpp extern.h config.h options.h
news.o: news.cpp extern.h config.h options.h
pouch.o: pouch.cpp extern.h config.h options.h pouch.h item.h level.h \
config.h options.h flags.h
script.o: script.cpp script.h extern.h config.h options.h player.h
sockhelp.o: sockhelp.cpp sockhelp.h extern.h config.h options.h
+strings.o: strings.cpp extern.h config.h options.h
messages.o: messages.cpp aClient.h options.h player.h script.h item.h \
level.h pouch.h extern.h config.h sockhelp.h flags.h
toplist.o: toplist.cpp toplist.h player.h script.h
hash.cpp \
item.cpp \
level.cpp \
+ loadsave.cpp \
log.cpp \
news.cpp \
pouch.cpp \
player.cpp \
script.cpp \
sockhelp.cpp \
+ strings.cpp \
messages.cpp \
toplist.cpp
int load_dragon();
int save_dragon();
-// String functions
-#ifndef HAVE_STRTOK
-char *strtok(char *str, const char *delim);
-#endif
-
-int stricmp(const char *s1, const char *s2);
-int strnicmp(const char *s1, const char *s2, size_t len);
-// String Functions
-
bool shuttingdown;
void updateTS(Player *p);
cmd--; // Same thing :)
}
-int stricmp(const char *s1, const char *s2)
-{
- register int c;
-
- while ((c = tolower(*s1)) == tolower(*s2)) {
- if (c == 0)
- return 0;
- s1++;
- s2++;
- }
- if (c < tolower(*s2))
- return -1;
- return 1;
-}
-
-
-
-char *spaces(int len, char *seperator)
-{
- char *final;
- final = new char[30];
- int y;
- strcpy(final, seperator);
- for (y = 0; y < 30 - len; y++)
- strcat(final, seperator);
- return final;
-}
-
-
-
-int strnicmp(const char *s1, const char *s2, size_t len)
-{
- register int c;
-
- if (!len)
- return 0;
- while ((c = tolower(*s1)) == tolower(*s2) && len > 0) {
- if (c == 0 || --len == 0)
- return 0;
- s1++;
- s2++;
- }
- if (c < tolower(*s2))
- return -1;
- return 1;
-}
-
-#ifndef HAVE_STRTOK
-char *strtok(char *str, const char *delim)
-{
- static char *current = NULL;
- char *ret;
-
- if (str)
- current = str;
- if (!current)
- return NULL;
- current += strspn(current, delim);
- ret = *current ? current : NULL;
- current += strcspn(current, delim);
- if (!*current)
- current = NULL;
- else
- *current++ = 0;
- return ret;
-}
-#endif
-
void do_check(char *u)
{
int days, hours, minutes, seconds;
showstats(u, nick);
}
-bool load_masters()
-{
- ifstream infile(masterdata);
- char *buf;
- int l = 0;
- buf = new char[1024];
-
- if (infile.fail())
- {
- log("Error opening %s", masterdata);
- return false;
- }
-
-#ifdef DEBUGMODE
- log("Loading masters from %s", masterdata);
-#endif
-
- for (l = 0; l < LEVELS - 1; l++)
- {
- infile.getline(buf, 1024, '\n');
-
- log("%s", buf);
- if (buf[0] == '#' || buf[0] == '\n' || buf[0] == '\r')
- {
- l--;
- continue;
- }
- else if (buf[0] == '^')
- break;
-
- Monster *master = &levels[l].master;
-
- char *name, *weapon, *strength, *gold, *exp, *maxhp, *death;
-
-
- name = strtok(buf, "~");
- weapon = strtok(NULL, "~");
- strength = strtok(NULL, "~");
- gold = strtok(NULL, "~");
- exp = strtok(NULL, "~");
- maxhp = strtok(NULL, "~");
- death = strtok(NULL, "~");
-
- master->name = name;
- master->weapon = weapon;
- master->strength = stringtoint(strength);
- master->gold = stringtoint(gold);
- master->exp = stringtoint(exp);
- master->maxhp = stringtoint(maxhp);
- master->hp = master->maxhp;
- master->death = death;
- }
-
- delete []buf;
-
- if (l < LEVELS - 1) // We didn't load a master for every level - check data/masters.dat
- return false;
- else
- return true;
-}
-
-void delete_monsters()
-{
- for (int x = 0; x < LEVELS; x++)
- levels[x].monsters.clear();
-}
notice(s_GameServ, u, "SYNTAX: /msg <S HEAL {ALL | #}");
}
-int isstringnum(char *num)
-{
- unsigned int x;
- for (x = 0; x < strlen(num); x++)
- {
- if ((int)num[x] < 48 || (int)num[x] > 57)
- return 0;
- }
-return 1;
-}
-
-long int stringtoint(char *number)
-{
- return atol(number);
-}
-
-long int pow(int x, int y)
-{
- long int value = 0;
- int count = 0;
- value += x;
-
- if (x != 0 && y != 0)
- {
- for (count = 1; count <= y - 1; count++)
- value *= x;
- }
- else
- {
- return 1;
- }
- return value;
-}
-
-long int chartoint(char ch)
-{
- if (int(ch) >= 48 && int(ch) <= 57)
- return int(ch) - 48;
- else
- return 0;
-}
-
-int save_gs_dbase()
-{
- list<Player*>::iterator iter;
- Player *it;
- ofstream outfile;
-
- outfile.open(playerdata);
-
- if (!outfile)
- {
- log("Error opening %s", playerdata);
- return 0;
- }
-
- for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
- {
- for(iter = players[x].begin(); iter != players[x].end(); iter++)
- {
- it = (*iter);
- clearYourTurn(it);
- item *w, *a;
- w = it->getWeapon();
- a = it->getArmor();
-
- outfile << it->getName().c_str() << ' ' << it->getLevel() << ' ' << it->getExp() << ' ' << it->getGold() << ' ' << it->getBank() << ' '<< it->getHP() << ' ' << it->getMaxHP() << ' ' << it->getStrength() << ' ' << it->getDefense() << ' ' << it->getForestFights() << ' ' << it->getPlayerFights() << ' ' << it->getFlags() << ' ' << it->getPassword().c_str() << ' ' << it->lastlogin << ' ' << (w ? w->getID() : 0) << ' ' << (a ? a->getID() : 0);
-
- // Traverse the list and write out each item ID and how many uses are left
- if (!it->inventory->isEmpty())
- {
- list<itemContainer> *myitems;
- list<itemContainer>::iterator item_iter;
- myitems = it->inventory->getItems();
-
- for(item_iter = myitems->begin();item_iter != myitems->end();item_iter++)
- {
- outfile << ' ' << (*item_iter).getItem()->getID() << ' ' << (*item_iter).getUses();
- }
- }
- outfile << endl;
- }
- }
- 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_store()
-{
- ifstream infile;
- char *buf;
- item *tempItem;
- buf = new char[1024];
- long id;
-
- infile.open(storeitemdata);
-
- if (infile.fail())
- {
- log("Error opening %s", storeitemdata);
- return 0;
- }
-
- while (infile.getline(buf, 1024, '\n'))
- {
- try
- {
- if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
- {
- item *tempItem2;
- id = stringtoint(strtok(buf, ""));
- tempItem2 = findItemByID(id);
- if (tempItem2 == NULL)
- {
- log("Invalid ID in %s", storeitemdata);
- return 0;
- }
-
- tempItem = tempItem2;
- store.push_back(tempItem);
- }
- }
- catch (char *str)
- {
- log("Exception loading store: %s", str);
- delete []buf;
- return 0;
- }
- }
- delete []buf;
- return 1;
-}
-int load_tavern()
-{
- ifstream infile;
- char *buf;
- tavernItem tempItem;
- buf = new char[1024];
- long id, level;
-
- infile.open(tavernitemdata);
- if (infile.fail())
- {
- log("Error opening %s", tavernitemdata);
- return 0;
- }
-
- while (infile.getline(buf, 1024, '\n'))
- {
- try
- {
- if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
- {
- item *tempItem2;
- id = stringtoint(strtok(buf, "~"));
- level = stringtoint(strtok(NULL, ""));
- tempItem2 = findItemByID(id);
- if (tempItem2 == NULL)
- {
- log("Invalid ID in %s", tavernitemdata);
- return 0;
- }
- tempItem.setItem(tempItem2);
- tempItem.setLevel(level);
- tavern.push_back(tempItem);
- }
- }
- catch (char *str)
- {
- log("Exception loading tavern: %s", str);
- delete []buf;
- return 0;
- }
- }
- delete []buf;
- return 1;
-}
-int load_items()
-{
- ifstream infile;
- char *buf;
- item *tempItem;
-
- buf = new char[1024];
-
- infile.open(itemdata);
-
- if (infile.fail())
- {
- log("Error opening %s", itemdata);
- return 0;
- }
-
- while (infile.getline(buf, 1024, '\n'))
- {
- if (buf[0] == '^')
- break;
- try
- {
- if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
- {
- switch(buf[0])
- {
- case '1':
- tempItem = new weapon();
- break;
- case '2':
- tempItem = new armor();
- break;
- case '3':
- tempItem = new potion();
- break;
- default:
- log("Invalid Item Type %c in %s", buf[0], itemdata);
- delete []buf;
- return 0;
- break;
- }
- if(tempItem->setData(buf))
- {
- Items.push_back(tempItem);
- }
- }
- }
- catch (char *str)
- {
- log("Exception loading items: %s", str);
- delete []buf;
- return 0;
- }
- }
- delete []buf;
- return 1;
-}
-
-int load_gs_dbase()
-{
- ifstream infile;
- Player *p;
- char *tempname, *buf, *password;
- int tempnum;
- buf = new char[100000];
-
- infile.open(playerdata);
-
- if (infile.fail())
- {
- log("Error opening %s", playerdata);
- return 0;
- }
-
-
- for (int x = 0; x < U_TABLE_SIZE; x++)
- {
- list<Player*>::iterator iter;
-
- for (iter = players[x].begin(); iter != players[x].end(); iter++)
- {
- logout((*iter)->getClient());
- delete (*iter);
- }
- players[x].clear();
- }
-
- while (infile.getline(buf, 100000, '\n'))
- {
- tempname = strtok(buf, " ");
- p = new Player(tempname);
-
- p->setLevel(stringtoint(strtok(NULL, " ")));
- p->setExp(stringtoint(strtok(NULL, " ")));
- p->setGold(stringtoint(strtok(NULL, " ")));
- p->setBank(stringtoint(strtok(NULL, " ")));
- tempnum = stringtoint(strtok(NULL, " "));
- p->setMaxHP(stringtoint(strtok(NULL, " ")));
- p->setHP(tempnum);
- p->setStrength(stringtoint(strtok(NULL, " ")));
- p->setDefense(stringtoint(strtok(NULL, " ")));
- p->setForestFights(stringtoint(strtok(NULL, " ")));
- p->setPlayerFights(stringtoint(strtok(NULL, " ")));
- p->setFlags(stringtoint(strtok(NULL, " ")));
-
-
-
- password = strtok(NULL, " ");
- p->setRawPassword(password);
- tempname = strtok(NULL, " ");
-
- if (tempname)
- p->lastlogin = stringtoint(tempname);
- else
- p->lastlogin = time(NULL);
-
- tempname = strtok(NULL, " ");
- tempnum = stringtoint(tempname);
- item *tempitem;
- if (tempnum != 0)
- {
- tempitem = findItemByID(tempnum);
- p->setWeapon(*tempitem);
- }
-
- tempname = strtok(NULL, " ");
- tempnum = stringtoint(tempname);
-
- if (tempnum != 0)
- {
- tempitem = findItemByID(tempnum);
- p->setArmor(*tempitem);
- }
-
-
- unsigned long hv = iHASH((unsigned char *) p->getName().c_str());
-
- p->setClient(NULL);
-
- for (tempname = strtok(NULL, " "); tempname != NULL; tempname = strtok(NULL, " "))
- {
- long int id, uses;
- list<item*>::iterator item_iter;
- id = stringtoint(tempname);
- tempname = strtok(NULL, " ");
- uses = stringtoint(tempname);
-
- item_iter = Items.begin();
- while (item_iter != Items.end())
- {
- if ((*item_iter)->getID() == id)
- {
- // Don't sort every time you add an item or it eats CPU
- p->inventory->addItemNoChecks((*item_iter))->setUses(uses);
- }
- item_iter++;
- }
- }
- p->inventory->sort();
- myToplist.insertPlayer(p);
- players[hv].push_back(p);
- }
-
- delete [] buf;
- infile.close();
- return 1;
-}
}
}
-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)
- {
- delete []filename;
- return false;
- }
- }
-
- delete []filename;
- return true;
-}
-
-bool load_monsters()
-{
- char *filename;
- ifstream infile;
- char *buf;
- buf = new char[2048];
-
- 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 %s", filename);
- delete []filename;
- delete []buf;
- return false;
- }
-
-#ifdef DEBUGMODE
- log("Loading monsters from %s", filename);
-#endif
-
- while (infile.getline(buf, 2048))
- {
- if (buf[0] == '^')
- break;
- if (buf[0] == '\n' || buf[0] == '\0' || buf[0] == '#')
- continue;
- Monster *temp;
- temp = new Monster;
-
- temp->name = strtok(buf, "~");
- temp->weapon = strtok(NULL, "~");
- temp->death = strtok(NULL, "~");
-
- levels[level - 1].monsters.push_back(temp);
-
- }
- delete [] filename;
- infile.close();
- }
- delete [] buf;
- return true;
-}
-
-
--- /dev/null
+ /* This file includes functions that deal with loading and
+ saving to and from files. It also includes some miscellaneous related
+ functions */
+
+ #include "extern.h"
+ #include "level.h"
+ #include "player.h"
+ #include "aClient.h"
+ #include "item.h"
+ #include "pouch.h"
+ #include "toplist.h"
+ #include "flags.h"
+
+ #include <fstream>
+
+ using namespace std;
+
+ bool load_masters()
+{
+ ifstream infile(masterdata);
+ char *buf;
+ int l = 0;
+ buf = new char[1024];
+
+ if (infile.fail())
+ {
+ log("Error opening %s", masterdata);
+ return false;
+ }
+
+#ifdef DEBUGMODE
+ log("Loading masters from %s", masterdata);
+#endif
+
+ for (l = 0; l < LEVELS - 1; l++)
+ {
+ infile.getline(buf, 1024, '\n');
+
+ log("%s", buf);
+ if (buf[0] == '#' || buf[0] == '\n' || buf[0] == '\r')
+ {
+ l--;
+ continue;
+ }
+ else if (buf[0] == '^')
+ break;
+
+ Monster *master = &levels[l].master;
+
+ char *name, *weapon, *strength, *gold, *exp, *maxhp, *death;
+
+
+ name = strtok(buf, "~");
+ weapon = strtok(NULL, "~");
+ strength = strtok(NULL, "~");
+ gold = strtok(NULL, "~");
+ exp = strtok(NULL, "~");
+ maxhp = strtok(NULL, "~");
+ death = strtok(NULL, "~");
+
+ master->name = name;
+ master->weapon = weapon;
+ master->strength = stringtoint(strength);
+ master->gold = stringtoint(gold);
+ master->exp = stringtoint(exp);
+ master->maxhp = stringtoint(maxhp);
+ master->hp = master->maxhp;
+ master->death = death;
+ }
+
+ delete []buf;
+
+ if (l < LEVELS - 1) // We didn't load a master for every level - check data/masters.dat
+ return false;
+ else
+ return true;
+}
+
+void delete_monsters()
+{
+ for (int x = 0; x < LEVELS; x++)
+ levels[x].monsters.clear();
+}
+
+int save_gs_dbase()
+{
+ list<Player*>::iterator iter;
+ Player *it;
+ ofstream outfile;
+
+ outfile.open(playerdata);
+
+ if (!outfile)
+ {
+ log("Error opening %s", playerdata);
+ return 0;
+ }
+
+ for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
+ {
+ for(iter = players[x].begin(); iter != players[x].end(); iter++)
+ {
+ it = (*iter);
+ clearYourTurn(it);
+ item *w, *a;
+ w = it->getWeapon();
+ a = it->getArmor();
+
+ outfile << it->getName().c_str() << ' ' << it->getLevel() << ' ' << it->getExp() << ' ' << it->getGold() << ' ' << it->getBank() << ' '<< it->getHP() << ' ' << it->getMaxHP() << ' ' << it->getStrength() << ' ' << it->getDefense() << ' ' << it->getForestFights() << ' ' << it->getPlayerFights() << ' ' << it->getFlags() << ' ' << it->getPassword().c_str() << ' ' << it->lastlogin << ' ' << (w ? w->getID() : 0) << ' ' << (a ? a->getID() : 0);
+
+ // Traverse the list and write out each item ID and how many uses are left
+ if (!it->inventory->isEmpty())
+ {
+ list<itemContainer> *myitems;
+ list<itemContainer>::iterator item_iter;
+ myitems = it->inventory->getItems();
+
+ for(item_iter = myitems->begin();item_iter != myitems->end();item_iter++)
+ {
+ outfile << ' ' << (*item_iter).getItem()->getID() << ' ' << (*item_iter).getUses();
+ }
+ }
+ outfile << endl;
+ }
+ }
+ 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_store()
+{
+ ifstream infile;
+ char *buf;
+ item *tempItem;
+ buf = new char[1024];
+ long id;
+
+ infile.open(storeitemdata);
+
+ if (infile.fail())
+ {
+ log("Error opening %s", storeitemdata);
+ return 0;
+ }
+
+ while (infile.getline(buf, 1024, '\n'))
+ {
+ try
+ {
+ if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
+ {
+ item *tempItem2;
+ id = stringtoint(strtok(buf, ""));
+ tempItem2 = findItemByID(id);
+ if (tempItem2 == NULL)
+ {
+ log("Invalid ID in %s", storeitemdata);
+ return 0;
+ }
+
+ tempItem = tempItem2;
+ store.push_back(tempItem);
+ }
+ }
+ catch (char *str)
+ {
+ log("Exception loading store: %s", str);
+ delete []buf;
+ return 0;
+ }
+ }
+ delete []buf;
+ return 1;
+}
+int load_tavern()
+{
+ ifstream infile;
+ char *buf;
+ tavernItem tempItem;
+ buf = new char[1024];
+ long id, level;
+
+ infile.open(tavernitemdata);
+ if (infile.fail())
+ {
+ log("Error opening %s", tavernitemdata);
+ return 0;
+ }
+
+ while (infile.getline(buf, 1024, '\n'))
+ {
+ try
+ {
+ if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
+ {
+ item *tempItem2;
+ id = stringtoint(strtok(buf, "~"));
+ level = stringtoint(strtok(NULL, ""));
+ tempItem2 = findItemByID(id);
+ if (tempItem2 == NULL)
+ {
+ log("Invalid ID in %s", tavernitemdata);
+ return 0;
+ }
+ tempItem.setItem(tempItem2);
+ tempItem.setLevel(level);
+ tavern.push_back(tempItem);
+ }
+ }
+ catch (char *str)
+ {
+ log("Exception loading tavern: %s", str);
+ delete []buf;
+ return 0;
+ }
+ }
+ delete []buf;
+ return 1;
+}
+int load_items()
+{
+ ifstream infile;
+ char *buf;
+ item *tempItem;
+
+ buf = new char[1024];
+
+ infile.open(itemdata);
+
+ if (infile.fail())
+ {
+ log("Error opening %s", itemdata);
+ return 0;
+ }
+
+ while (infile.getline(buf, 1024, '\n'))
+ {
+ if (buf[0] == '^')
+ break;
+ try
+ {
+ if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
+ {
+ switch(buf[0])
+ {
+ case '1':
+ tempItem = new weapon();
+ break;
+ case '2':
+ tempItem = new armor();
+ break;
+ case '3':
+ tempItem = new potion();
+ break;
+ default:
+ log("Invalid Item Type %c in %s", buf[0], itemdata);
+ delete []buf;
+ return 0;
+ break;
+ }
+ if(tempItem->setData(buf))
+ {
+ Items.push_back(tempItem);
+ }
+ }
+ }
+ catch (char *str)
+ {
+ log("Exception loading items: %s", str);
+ delete []buf;
+ return 0;
+ }
+ }
+ delete []buf;
+ return 1;
+}
+
+int load_gs_dbase()
+{
+ ifstream infile;
+ Player *p;
+ char *tempname, *buf, *password;
+ int tempnum;
+ buf = new char[100000];
+
+ infile.open(playerdata);
+
+ if (infile.fail())
+ {
+ log("Error opening %s", playerdata);
+ return 0;
+ }
+
+
+ for (int x = 0; x < U_TABLE_SIZE; x++)
+ {
+ list<Player*>::iterator iter;
+
+ for (iter = players[x].begin(); iter != players[x].end(); iter++)
+ {
+ logout((*iter)->getClient());
+ delete (*iter);
+ }
+ players[x].clear();
+ }
+
+ while (infile.getline(buf, 100000, '\n'))
+ {
+ tempname = strtok(buf, " ");
+ p = new Player(tempname);
+
+ p->setLevel(stringtoint(strtok(NULL, " ")));
+ p->setExp(stringtoint(strtok(NULL, " ")));
+ p->setGold(stringtoint(strtok(NULL, " ")));
+ p->setBank(stringtoint(strtok(NULL, " ")));
+ tempnum = stringtoint(strtok(NULL, " "));
+ p->setMaxHP(stringtoint(strtok(NULL, " ")));
+ p->setHP(tempnum);
+ p->setStrength(stringtoint(strtok(NULL, " ")));
+ p->setDefense(stringtoint(strtok(NULL, " ")));
+ p->setForestFights(stringtoint(strtok(NULL, " ")));
+ p->setPlayerFights(stringtoint(strtok(NULL, " ")));
+ p->setFlags(stringtoint(strtok(NULL, " ")));
+
+
+
+ password = strtok(NULL, " ");
+ p->setRawPassword(password);
+ tempname = strtok(NULL, " ");
+
+ if (tempname)
+ p->lastlogin = stringtoint(tempname);
+ else
+ p->lastlogin = time(NULL);
+
+ tempname = strtok(NULL, " ");
+ tempnum = stringtoint(tempname);
+ item *tempitem;
+ if (tempnum != 0)
+ {
+ tempitem = findItemByID(tempnum);
+ p->setWeapon(*tempitem);
+ }
+
+ tempname = strtok(NULL, " ");
+ tempnum = stringtoint(tempname);
+
+ if (tempnum != 0)
+ {
+ tempitem = findItemByID(tempnum);
+ p->setArmor(*tempitem);
+ }
+
+
+ unsigned long hv = iHASH((unsigned char *) p->getName().c_str());
+
+ p->setClient(NULL);
+
+ for (tempname = strtok(NULL, " "); tempname != NULL; tempname = strtok(NULL, " "))
+ {
+ long int id, uses;
+ list<item*>::iterator item_iter;
+ id = stringtoint(tempname);
+ tempname = strtok(NULL, " ");
+ uses = stringtoint(tempname);
+
+ item_iter = Items.begin();
+ while (item_iter != Items.end())
+ {
+ if ((*item_iter)->getID() == id)
+ {
+ // Don't sort every time you add an item or it eats CPU
+ p->inventory->addItemNoChecks((*item_iter))->setUses(uses);
+ }
+ item_iter++;
+ }
+ }
+ p->inventory->sort();
+ myToplist.insertPlayer(p);
+ players[hv].push_back(p);
+ }
+
+ delete [] buf;
+ infile.close();
+ return 1;
+}
+
+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)
+ {
+ delete []filename;
+ return false;
+ }
+ }
+
+ delete []filename;
+ return true;
+}
+
+bool load_monsters()
+{
+ char *filename;
+ ifstream infile;
+ char *buf;
+ buf = new char[2048];
+
+ 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 %s", filename);
+ delete []filename;
+ delete []buf;
+ return false;
+ }
+
+#ifdef DEBUGMODE
+ log("Loading monsters from %s", filename);
+#endif
+
+ while (infile.getline(buf, 2048))
+ {
+ if (buf[0] == '^')
+ break;
+ if (buf[0] == '\n' || buf[0] == '\0' || buf[0] == '#')
+ continue;
+ Monster *temp;
+ temp = new Monster;
+
+ temp->name = strtok(buf, "~");
+ temp->weapon = strtok(NULL, "~");
+ temp->death = strtok(NULL, "~");
+
+ levels[level - 1].monsters.push_back(temp);
+
+ }
+ delete [] filename;
+ infile.close();
+ }
+ delete [] buf;
+ return true;
+}
+
+
+
--- /dev/null
+ /* This file contains functions dealing with strings */
+
+ #include "extern.h"
+ #include "config.h"
+
+ // String functions
+#ifndef HAVE_STRTOK
+char *strtok(char *str, const char *delim);
+#endif
+
+int stricmp(const char *s1, const char *s2);
+int strnicmp(const char *s1, const char *s2, size_t len);
+// String Functions
+
+int stricmp(const char *s1, const char *s2)
+{
+ register int c;
+
+ while ((c = tolower(*s1)) == tolower(*s2)) {
+ if (c == 0)
+ return 0;
+ s1++;
+ s2++;
+ }
+ if (c < tolower(*s2))
+ return -1;
+ return 1;
+}
+
+
+
+char *spaces(int len, char *seperator)
+{
+ char *final;
+ final = new char[30];
+ int y;
+ strcpy(final, seperator);
+ for (y = 0; y < 30 - len; y++)
+ strcat(final, seperator);
+ return final;
+}
+
+
+
+int strnicmp(const char *s1, const char *s2, size_t len)
+{
+ register int c;
+
+ if (!len)
+ return 0;
+ while ((c = tolower(*s1)) == tolower(*s2) && len > 0) {
+ if (c == 0 || --len == 0)
+ return 0;
+ s1++;
+ s2++;
+ }
+ if (c < tolower(*s2))
+ return -1;
+ return 1;
+}
+
+#ifndef HAVE_STRTOK
+char *strtok(char *str, const char *delim)
+{
+ static char *current = NULL;
+ char *ret;
+
+ if (str)
+ current = str;
+ if (!current)
+ return NULL;
+ current += strspn(current, delim);
+ ret = *current ? current : NULL;
+ current += strcspn(current, delim);
+ if (!*current)
+ current = NULL;
+ else
+ *current++ = 0;
+ return ret;
+}
+#endif
+
+int isstringnum(char *num)
+{
+ unsigned int x;
+ for (x = 0; x < strlen(num); x++)
+ {
+ if ((int)num[x] < 48 || (int)num[x] > 57)
+ return 0;
+ }
+return 1;
+}
+
+long int stringtoint(char *number)
+{
+ return atol(number);
+}
+
+long int pow(int x, int y)
+{
+ long int value = 0;
+ int count = 0;
+ value += x;
+
+ if (x != 0 && y != 0)
+ {
+ for (count = 1; count <= y - 1; count++)
+ value *= x;
+ }
+ else
+ {
+ return 1;
+ }
+ return value;
+}
+
+long int chartoint(char ch)
+{
+ if (int(ch) >= 48 && int(ch) <= 57)
+ return int(ch) - 48;
+ else
+ return 0;
+}