-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()
-{
- ListNode<aClient> *ptr;
- 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++)
- {
- ptr = players[x].First();
- while(ptr)
- {
- it = ptr->getData()->stats;
- 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;
- ptr = ptr->Next();
- }
- }
-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;
- aClient *temp;
- 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++)
- {
- ListNode<aClient> *tempNode;
- tempNode = players[x].First();
- while (tempNode)
- {
- if (tempNode->getData()->stats->getClient())
- {
- logout(tempNode->getData()->stats->getClient());
- }
- tempNode = tempNode->Next();
- }
- players[x].deleteNodes();
- }
-
- while (infile.getline(buf, 100000, '\n'))
- {
- temp = new aClient;
- tempname = strtok(buf, " ");
- temp->stats = new Player(tempname);
- p = temp->stats;
-
- p->setLevel(stringtoint(strtok(NULL, " ")));
- p->setExp(stringtoint(strtok(NULL, " ")));
- p->setGold(stringtoint(strtok(NULL, " ")));
- p->setBank(stringtoint(strtok(NULL, " ")));
- p->setHP(stringtoint(strtok(NULL, " ")));
- p->setMaxHP(stringtoint(strtok(NULL, " ")));
- 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);
- temp->setNick("Not Playing");
-#ifdef P10
- temp->setRealNick("Not Playing");
-#endif
- tempname = strtok(NULL, " ");
- if (tempname)
- p->lastlogin = stringtoint(tempname);
- else
- p->lastlogin = time(NULL);
-
- tempname = strtok(NULL, " ");
- tempnum = stringtoint(tempname);
- if (tempnum != 0)
- {
- p->setWeapon(*findItemByID(tempnum));
- }
-
- tempname = strtok(NULL, " ");
- tempnum = stringtoint(tempname);
-
- if (tempnum != 0)
- {
- p->setArmor(*findItemByID(tempnum));
- }
-
-
- 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();
-
- unsigned long hv = iHASH((unsigned char *) temp->stats->getName().c_str());
-
- temp->stats->setClient(NULL);
- players[hv].insertAtBack(temp);
- delete temp;
-}
-delete [] buf;
-infile.close();
-return 1;
-}