#include "aClient.h"
#include "config.h"
#include "extern.h"
+#include "player.h"
+#include "pouch.h"
#include "flags.h"
#include "list.h"
#include "level.h"
#include "sockhelp.h"
+#include "item.h"
#include <cctype>
#include <fstream>
+#include <stdlib.h>
+#include <list>
+#include <iterator>
-using std::ifstream;
-using std::ofstream;
-using std::ios;
+using namespace std;
#if defined(HAVE_CRYPT_H)
#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
notice(s_GameServ, sender->getNick(), "Hit Points: %d of %d", ni->stats->hp,
ni->stats->maxhp);
- sprintf(buf, "Strength: %d", ni->stats->strength + webonus[ni->stats->weapon]);
+ sprintf(buf, "Strength: %d", ni->stats->strength + webonus[ni->stats->wea]);
space = spaces(strlen(buf), " ");
notice(s_GameServ, sender->getNick(), "%s%sDefense: %d",
- buf, space, ni->stats->defense + arbonus[ni->stats->armor]);
+ buf, space, ni->stats->defense + arbonus[ni->stats->arm]);
delete [] space;
- sprintf(buf, "Armor: %s", armors[ni->stats->armor]);
+ sprintf(buf, "Armor: %s", armors[ni->stats->arm]);
space = spaces(strlen(buf), " ");
notice(s_GameServ, sender->getNick(), "%s%sWeapon: %s", buf, space,
- weapons[ni->stats->weapon]);
+ weapons[ni->stats->wea]);
delete [] space;
sprintf(buf, "Forest Fights: %d", ni->stats->forest_fights);
space = spaces(strlen(buf), " ");
notice(s_GameServ, sender->getNick(), "%s%sPlayer Fights: %d", buf, space, ni->stats->player_fights);
delete [] space;
- Pouch *inv = &ni->stats->inventory;
-
- notice(s_GameServ, u, "Potions");
- sprintf(buf, "Healing: %d", inv->Healing());
- space = spaces(strlen(buf), " ");
- notice(s_GameServ, sender->getNick(), "%s%sHP: %d", buf,
- space, inv->HP());
- delete [] space;
-
- sprintf(buf, "Strength: %d", inv->Strength());
- space = spaces(strlen(buf), " ");
- notice(s_GameServ, sender->getNick(), "%s%sDefense: %d", buf,
- space, inv->Defense());
- delete [] space;
+ showinventory(ni, ni);
}
else
{
}
else if (!name)
{
- notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|WEAPON|ARMOR|HP POTIONS|STRENGTH POTIONS|DEFENSE POTIONS|HEALING POTIONS|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
+ notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
return;
}
else if (!(target = findplayer(name)))
}
target->stats->bank = stringtoint(cmd2);
- notice(s_GameServ, u, "Bank balance changed to %s!", cmd2);
+
+ // Cheap bounds checking
+ if (target->stats->bank > 2000000000)
+ target->stats->bank = 2000000000;
+ else if (target->stats->bank < 0)
+ target->stats->bank *= -1;
+
+ notice(s_GameServ, u, "Bank balance changed to %ld!", target->stats->bank);
}
else if (stricmp(cmd, "PLAYER") == 0)
{
return;
}
target->stats->player_fights = stringtoint(cmd2);
- notice(s_GameServ, u, "Player fights changed to %s!", cmd2);
+
+ if (target->stats->player_fights < 0)
+ target->stats->player_fights *= -1;
+
+ notice(s_GameServ, u, "Player fights changed to %d!", target->stats->player_fights);
}
}
else if (stricmp(cmd, "FOREST") == 0)
notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] FOREST FIGHTS <NUMBER>");
return;
}
+
target->stats->forest_fights = stringtoint(cmd2);
- notice(s_GameServ, u, "Forest fights changed to %s!", cmd2);
+
+ if (target->stats->forest_fights < 0)
+ target->stats->forest_fights *= -1;
+
+ notice(s_GameServ, u, "Forest fights changed to %d!", target->stats->forest_fights);
}
}
else if (stricmp(cmd, "GOLD") == 0)
return;
}
target->stats->gold = stringtoint(cmd2);
- notice(s_GameServ, u, "Gold set to %s", cmd2);
+
+ if (target->stats->gold > 2000000000)
+ target->stats->gold = 2000000000;
+ else if (target->stats->gold < 0)
+ target->stats->gold *= -1;
+
+ notice(s_GameServ, u, "Gold set to %ld", target->stats->gold);
return;
}
}
}
target->stats->strength = stringtoint(cmd2);
- notice(s_GameServ, u, "Strength set to %s", cmd2);
+
+ if (target->stats->strength < 0)
+ target->stats->strength *= -1;
+
+ notice(s_GameServ, u, "Strength set to %d", target->stats->strength);
return;
}
}
}
target->stats->defense = stringtoint(cmd2);
- notice(s_GameServ, u, "Defense set to %s", cmd2);
+
+ if (target->stats->defense < 0)
+ target->stats->defense *= -1;
+
+ notice(s_GameServ, u, "Defense set to %d", target->stats->defense);
return;
}
}
return;
}
target->stats->hp = stringtoint(cmd2);
- notice(s_GameServ, u, "HP set to %s", cmd2);
+
+ if (target->stats->hp < 0)
+ target->stats->hp *= -1;
+
+ notice(s_GameServ, u, "HP set to %d", target->stats->hp);
return;
}
}
return;
}
target->stats->maxhp = stringtoint(cmd2);
- notice(s_GameServ, u, "MaxHP set to %s", cmd2);
+
+ if (target->stats->maxhp < 0)
+ target->stats->maxhp *= -1;
+
+ notice(s_GameServ, u, "MaxHP set to %d", target->stats->maxhp);
return;
}
}
}
target->stats->exp = stringtoint(cmd2);
- notice(s_GameServ, u, "Exp set to %s", cmd2);
+
+ if (target->stats->exp > 2000000000)
+ target->stats->exp = 2000000000;
+ else if (target->stats->exp < 0)
+ target->stats->exp *= -1;
+
+ notice(s_GameServ, u, "Exp set to %ld", target->stats->exp);
return;
}
}
return;
}
target->stats->level = stringtoint(cmd2);
- notice(s_GameServ, u, "Level set to %s", cmd2);
- return;
- }
- }
- else if (stricmp(cmd, "WEAPON") == 0)
- {
- if (!isAdmin(user))
- {
- notice(s_GameServ, u, "Admins Only!");
- return;
- }
- else
- {
- if (!cmd2)
- {
- notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] WEAPON <NUMBER>");
- return;
- }
- target->stats->weapon = stringtoint(cmd2);
- notice(s_GameServ, u, "Weapon set to %s", weapons[target->stats->weapon]);
- return;
- }
- }
- else if (stricmp(cmd, "ARMOR") == 0)
- {
- if (!isAdmin(user))
- {
- notice(s_GameServ, u, "Admins Only!");
- return;
- }
- else
- {
- if (!cmd2)
- {
- notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] ARMOR <NUMBER>");
- return;
- }
- target->stats->armor = stringtoint(cmd2);
- notice(s_GameServ, u, "Armor set to %s", armors[target->stats->armor]);
- return;
- }
- }
- else if (stricmp(cmd, "HP") == 0 && stricmp(cmd2, "POTIONS") == 0)
- {
- if (!isAdmin(user))
- {
- notice(s_GameServ, u, "Admins Only!");
- return;
- }
- else
- {
- cmd2 = strtok(NULL, " ");
- if (!cmd2)
- {
- notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] HP POTIONS <NUMBER>");
- return;
- }
- target->stats->inventory.setHP(stringtoint(cmd2));
- notice(s_GameServ, u, "HP Potions set to %s", cmd2);
- return;
- }
- }
- else if (stricmp(cmd, "HEALING") == 0 && stricmp(cmd2, "POTIONS") == 0)
- {
- if (!isAdmin(user))
- {
- notice(s_GameServ, u, "Admins Only!");
- return;
- }
- else
- {
- cmd2 = strtok(NULL, " ");
- if (!cmd2)
- {
- notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] HEALING POTIONS <NUMBER>");
- return;
- }
- target->stats->inventory.setHealing(stringtoint(cmd2));
- notice(s_GameServ, u, "Healing Potions set to %s", cmd2);
- return;
- }
- }
- else if (stricmp(cmd, "STRENGTH") == 0 && stricmp(cmd2, "POTIONS") == 0)
- {
- if (!isAdmin(user))
- {
- notice(s_GameServ, u, "Admins Only!");
- return;
- }
- else
- {
- cmd2 = strtok(NULL, " ");
- if (!cmd2)
- {
- notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] STRENGTH POTIONS <NUMBER>");
- return;
- }
- target->stats->inventory.setStrength(stringtoint(cmd2));
- notice(s_GameServ, u, "Strength Potions set to %s", cmd2);
- return;
- }
- }
- else if (stricmp(cmd, "DEFENSE") == 0 && stricmp(cmd2, "POTIONS") == 0)
- {
- if (!isAdmin(user))
- {
- notice(s_GameServ, u, "Admins Only!");
- return;
- }
- else
- {
- cmd2 = strtok(NULL, " ");
- if (!cmd2)
- {
- notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] DEFENSE POTIONS <NUMBER>");
- return;
- }
- target->stats->inventory.setDefense(stringtoint(cmd2));
- notice(s_GameServ, u, "Defense Potions set to %s", cmd2);
+ if (target->stats->level < 0)
+ target->stats->level = 1;
+ else if (target->stats->level > REALLEVELS)
+ target->stats->level = REALLEVELS;
+
+ notice(s_GameServ, u, "Level set to %d", target->stats->level);
return;
}
}
}
else if (stricmp(cmd2, "TRUE") == 0)
{
- notice(s_GameServ, u, "Target has been Resurrected!");
- target->addFlag(FLAG_ALIVE);
+ notice(s_GameServ, u, "%s has been Resurrected!", target->stats->name.c_str());
+ setAlive(target->stats);
}
else
{
- notice(s_GameServ, u, "Target is now dead!");
- target->remFlag(FLAG_ALIVE);
+ notice(s_GameServ, u, "%s is now dead!", target->stats->name.c_str());
+ clearAlive(target->stats);
}
}
}
}
else if (stricmp(cmd2, "TRUE") == 0)
{
- notice(s_GameServ, u, "Target has seen their master now.");
+ notice(s_GameServ, u, "%s has seen their master now.", target->stats->name.c_str());
target->addFlag(FLAG_MASTER);
}
else
{
- notice(s_GameServ, u, "Target has not seen their master now.");
+ notice(s_GameServ, u, "%s has not seen their master now.", target->stats->name.c_str());
target->remFlag(FLAG_MASTER);
}
}
else
{
notice(s_GameServ, u, "Unknown command: SET %s", cmd);
- notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|WEAPON|ARMOR|HP POTIONS|STRENGTH POTIONS|DEFENSE POTIONS|HEALING POTIONS|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
+ notice(s_GameServ, u, "SYNTAX: /msg %S SET [NAME] {PASSWORD|BANK BALANCE|PLAYER FIGHTS|FOREST FIGHTS|GOLD|STRENGTH|DEFENSE|HP|MAXHP|EXP|LEVEL|ALIVE|SEEN MASTER} {STRING|NUMBER|TRUE|FALSE}");
return;
}
}
{
notice(s_GameServ, u, "SYNTAX: /msg %S REGISTER NAME PASSWORD");
}
+ else if (stricmp(name, s_GameServ) == 0)
+ {
+ notice(s_GameServ, u, "You can't use %S as a name!");
+ return;
+ }
else if (!password)
{
notice(s_GameServ, u, "SYNTAX: /msg %S REGISTER NAME PASSWORD");
if (!is_playing(user))
{
ListNode<aClient> *temp;
- user->stats = new Player(user);
+ user->stats = new Player();
user->stats->client = user; // Set the backwards pointer
user->stats->reset(); // set the user up
user->stats->setPassword(password);
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');
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;
{
if (!is_playing(user))
return false;
- else if (user->stats->battle != NULL)
+ else if (user->stats->battle != NULL && is_playing(user->stats->battle))
{
return user->stats->battle->stats != NULL;
}
if (!is_playing(user))
return false;
else
- return (user->stats->level == LEVELS && master_fight(user));
+ return (isDragonFight(user->stats));
}
void do_fight(char *u)
{
void do_use(char *u)
{
+ /*
aClient *user;
Pouch *p;
}
end_turn(user); // If they're fighting, end their turn
+ */
+ return;
}
void do_run(char *u)
{
// Opponent's Hit
mhit = (fight->strength / 2) +
(rand() % (fight->strength / 2) - (user->stats->defense +
- arbonus[user->stats->armor]));
+ arbonus[user->stats->arm]));
}
else
{
// Opponent's Hit
- mhit = (((battle->stats->strength + webonus[battle->stats->weapon]) / 2) +
- (rand() % ((battle->stats->strength + webonus[battle->stats->weapon])) / 2) -
- (user->stats->defense + arbonus[user->stats->armor]));
+ mhit = (((battle->stats->strength + webonus[battle->stats->wea]) / 2) +
+ (rand() % ((battle->stats->strength + webonus[battle->stats->wea])) / 2) -
+ (user->stats->defense + arbonus[user->stats->arm]));
}
if (!player_fight(user))
{
delete nick;
}
-void do_attack(char *u)
-{
- int hit, mhit;
- aClient *ni, *battle; // The player and perhaps the player they're fighting
- Monster *fight; // The monster they may be fighting
-
- if (!(ni = find(u)))
- {
- notice(s_GameServ, u, "Fatal error in do_attack. Contact a(n) %S admin for help.");
- return;
- }
- else if (isIgnore(ni))
- {
- #ifdef DEBUGMODE
- log("Ignoring %s.", ni->getNick());
- #endif
- return;
- }
- else if (!is_playing(ni))
- {
- notice(s_GameServ, u, "You're not playing!");
- return;
- }
- else if (!is_fighting(ni))
- {
- notice(s_GameServ, u, "You're not in battle!");
- return;
- }
- else
- {
- if (!ni->stats->master) // This is not a master fight
- fight = ni->stats->fight; // Monster Could be NULL
- else // This IS a master fight
- fight = ni->stats->master; // Master Could be NULL
-
- battle = ni->stats->battle; // Player Could be NULL
-
- // One has to be !NULL based on the previous else if
- // We wouldn't be here if they were all NULL
- }
- updateTS(ni->stats);
-
- if (!player_fight(ni))
- {
- // Player's Hit
- hit = ((ni->stats->strength + webonus[ni->stats->weapon]) / 2) +
- (rand() % ((ni->stats->strength + webonus[ni->stats->weapon]) / 2));
-
- // Opponent's Hit
- mhit = (fight->strength / 2) +
- (rand() % (fight->strength / 2) - (ni->stats->defense +
- arbonus[ni->stats->armor]));
- }
- else
- {
- // Opponent's Hit
- mhit = (((battle->stats->strength + webonus[battle->stats->weapon]) / 2) +
- (rand() % ((battle->stats->strength + webonus[battle->stats->weapon])) / 2) -
- (ni->stats->defense + arbonus[ni->stats->armor]));
-
- // Player's Hit
- hit = (((ni->stats->strength + webonus[ni->stats->weapon]) / 2) +
- (rand() % ((ni->stats->strength + webonus[ni->stats->weapon])) / 2) -
- (battle->stats->defense + arbonus[battle->stats->armor]));
- }
-
- if (!player_fight(ni))
- {
- if (hit > 0)
- notice(s_GameServ, u, "You attack \1f%s\1f for \ 2%d\ 2 points!", fight->name.c_str(), hit);
- else
- notice(s_GameServ, u, "You miss \1f%s\1f completely!", fight->name.c_str());
-
- if (hit >= fight->hp)
- {
- if (master_fight(ni) && !dragon_fight(ni))
- {
- notice(s_GameServ, u, "You have bested %s!", fight->name.c_str());
- addNews(todaysnews, "%s has bested %s and moved "\
- "to level %d", ni->stats->name.c_str(), fight->name.c_str(),
- (ni->stats->level + 1));
- }
- else
- notice(s_GameServ, u, "You have killed \ 2%s\ 2!", fight->name.c_str());
-
- notice(s_GameServ, u, "%s", fight->death.c_str());
- notice(s_GameServ, u, "You recieve \ 2%d\ 2 experience and \ 2%d\ 2 gold!",
- fight->exp, fight->gold);
-
- if (dragon_fight(ni))
- {
- addNews(todaysnews, "%s is a true warrior! %s has beaten %s!!",
- ni->stats->name.c_str(), ni->stats->name.c_str(),
- ni->stats->master->name.c_str());
- ni->stats->master = NULL; // Don't progress in levels
- }
-
- // If your new experience (or gold) will be greater than 2 billion,
- // then set your exp to 2bil. (2 billion max)... otherwise add them.
- // This could be a problem with overflowing out of the sign bit.
- // Unsigned long int maybe? Leave it for now.
- ni->stats->exp += fight->exp;
- if (ni->stats->exp < 0 || ni->stats->exp > 2000000000)
- ni->stats->exp = 2000000000;
-
- ni->stats->gold += fight->gold;
- if (ni->stats->gold < 0 || ni->stats->gold > 2000000000)
- ni->stats->gold = 2000000000;
-
- if (master_fight(ni))
- {
- notice(s_GameServ, u, "You are now level %d!", ni->stats->level + 1);
- notice(s_GameServ, u, "You gain %d Strength, and %d Defense points!",
- strbonus[ni->stats->level - 1], defbonus[ni->stats->level - 1]);
-
- // Increase your level
-
- // Increase your maximum hit points
- ni->stats->maxhp += hpbonus[ni->stats->level - 1];
-
- // Heal the player by setting hp to their max
- ni->stats->hp = ni->stats->maxhp;
-
- // Add to your strength
- ni->stats->strength += strbonus[ni->stats->level - 1];
-
- // Add to your defensive power
- ni->stats->defense += defbonus[ni->stats->level - 1];
-
- ni->stats->level++;
-
- // Clear the pointer for your master
- ni->stats->master = NULL;
- }
-
- // They're dead so remove the pointer
- delete ni->stats->fight;
- ni->stats->fight = NULL;
- ni->stats->master = NULL;
-
- return;
- }
- else
- {
- if (hit > 0)
- fight->hp -= hit;
- if (mhit > 0)
- {
- notice(s_GameServ, u, "\1f%s\1f attacks with their \1f%s\1f for \ 2%d\ 2 damage!",
- fight->name.c_str(), fight->weapon.c_str(), mhit);
- }
- else if (mhit <= 0)
- notice(s_GameServ, u, "%s completely misses you!", fight->name.c_str());
-
- if (mhit >= ni->stats->hp)
- {
- if (!master_fight(ni))
- {
- notice(s_GameServ, u, "You have been \ 2\1fkilled\1f\ 2 by %s!", fight->name.c_str());
- notice(s_GameServ, u, "You lose all gold on hand and lose 10 percent "\
- "of your experience!");
- addNews(todaysnews, "%s has been killed by %s!",
- ni->stats->name.c_str(), fight->name.c_str());
- ni->stats->gold = 0;
- ni->stats->exp -= (long int)(ni->stats->exp * .10);
- ni->stats->hp = 0;
- ni->stats->fight = NULL;
- clearAlive(ni->stats);
- return;
- }
- else
- {
- notice(s_GameServ, u, "%s has bested you! You will have to wait "\
- "until tomorrow to try again", ni->stats->master->name.c_str());
- addNews(todaysnews, "%s tried to best %s and failed!",
- ni->stats->name.c_str(), fight->name.c_str());
- ni->stats->fight = NULL;
- ni->stats->master = NULL;
- return;
- }
- }
- else
- {
- if (mhit > 0)
- ni->stats->hp -= mhit;
- display_monster(u);
- return;
- }
- }
- }
- else if (player_fight(ni))
- {
-/* Offline fighting not available yet
- if (!(online = finduser(ni->stats->battle->nick)) || !nick_identified(online))
- {
- if (hit > 0)
- notice(s_GameServ, u, "You attack \1f%s\1f for \ 2%d\ 2 points!", battle->nick, hit);
- else
- notice(s_GameServ, u, "You miss \1f%s\1f completely!", battle->nick);
- if (hit >= battle->stats->hp)
- {
- notice(s_GameServ, u, "You have killed \ 2%s\ 2!", battle->nick);
-* notice(s_GameServ, u, "You recieve \ 2%d\ 2 experience and \ 2%ld\ 2 gold!",
- (long int)(battle->stats->exp * .10), battle->stats->gold);
- if (2000000000 - ni->stats->exp > (long int)(battle->stats->exp * .10))
- {
- ni->stats->exp += (long int)(battle->stats->exp * .10);
- battle->stats->exp -= (long int)(battle->stats->exp * .10);
- }
-* else
- {
- battle->stats->exp -= (long int)(battle->stats->exp * .10);
- ni->stats->exp = 2000000000;
- }
-
- if (2000000000 - ni->stats->gold > battle->stats->gold)
- {
-* ni->stats->gold += battle->stats->gold;
- battle->stats->gold = 0;
- }
- else
- {
- battle->stats->gold = 2000000000 - ni->stats->gold;
- ni->stats->gold = 2000000000;
- }
-* ni->stats->battle->stats->alive = 0;
- ni->stats->battle->battle = NULL;
- ni->stats->battle = NULL;
- return;
- }
- else
- {
- if (hit > 0)
-* battle->stats->hp -= hit;
- if (mhit > 0)
- {
- notice(s_GameServ, u, "\1f%s\1f hits you with their \1f%s\1f for \ 2%d\ 2 damage!",
- battle->nick, weapons[battle->stats->weapon], mhit);
- }
- else if (mhit <= 0)
- notice(s_GameServ, u, "%s completely misses you!", battle->nick);
-*
- if (mhit >= ni->stats->hp)
- {
- notice(s_GameServ, u, "You have been \ 2\1fkilled\1f\ 2 by %s!", battle->nick);
- if (2000000000 - battle->stats->gold > ni->stats->gold)
- {
- notice(s_GameServ, u, "%s took all your gold!", battle->nick);
- battle->stats->gold += ni->stats->gold;
-* ni->stats->gold = 0;
- }
- else
- {
- notice(s_GameServ, u, "You're lucky, %s couldn't carry all your gold.",
- battle->nick);
- ni->stats->gold -= (2000000000 - battle->stats->gold);
- notice(s_GameServ, u, "You were left dead with %d gold.",
-* (long int)ni->stats->gold);
- battle->stats->gold = 2000000000;
- }
- ni->stats->battle->battle = NULL;
- ni->stats->battle = NULL;
- ni->stats->alive = 0;
- return;
- }
-* else
- {
- if (mhit > 0)
- ni->stats->hp -= mhit;
- display_players(u);
- return;
- }
- }
- }
-* end offline fighting */
-
- if (is_playing(battle))
- {
- if (!isYourTurn(ni->stats))
- {
- notice(s_GameServ, u, "Please wait until %s decides what to do!",
- battle->stats->name.c_str());
- return;
- }
- if (hit > 0)
- {
- notice(s_GameServ, u, "You attack \1f%s\1f for \ 2%d\ 2 points!", battle->stats->name.c_str(), hit);
-
- notice(s_GameServ, battle->getNick(), "%s has hit you with their %s for "\
- "\ 2%d\ 2 damage!", ni->stats->name.c_str(),
- weapons[ni->stats->weapon], hit);
- }
- else
- {
- notice(s_GameServ, u, "You miss \1f%s\1f completely!", battle->stats->name.c_str());
- notice(s_GameServ, battle->getNick(), "%s misses you completely!", ni->stats->name.c_str());
- }
-
- if (hit >= battle->stats->hp)
- {
- notice(s_GameServ, u, "You have killed \ 2%s\ 2!", battle->stats->name.c_str());
- notice(s_GameServ, u, "You recieve \ 2%d\ 2 experience and \ 2%ld\ 2 gold!",
- (long int)(battle->stats->exp * .10), battle->stats->gold);
- notice(s_GameServ, battle->getNick(), "You have been killed by \ 2%s\ 2!",
- ni->stats->name.c_str());
- battle->stats->hp = 0;
- clearAlive(battle->stats);
-
- ni->stats->exp += (long int)(battle->stats->exp * .10);
- battle->stats->exp -= (long int)(battle->stats->exp * .10);
-
- if (ni->stats->exp < 0 || ni->stats->exp > 2000000000)
- ni->stats->exp = 2000000000;
-
- if (2000000000 - ni->stats->gold > battle->stats->gold)
- {
- notice(s_GameServ, battle->getNick(), "You lose ten percent of experience and "\
- "all gold on hand!");
- ni->stats->gold += battle->stats->gold;
- battle->stats->gold = 0;
- }
- else
- {
- battle->stats->gold = 2000000000 - ni->stats->gold;
- notice(s_GameServ, battle->getNick(), "You lose ten percent of your experience!");
-
- notice(s_GameServ, battle->getNick(), "However, %s could not carry all of your "\
- "gold.", ni->stats->name.c_str());
-
- notice(s_GameServ, battle->getNick(), "Luckily, you still have \ 2%ld\ 2 gold "\
- "left. All is not lost!", battle->stats->gold);
-
- ni->stats->gold = 2000000000;
- }
-
- clearYourTurn(ni->stats);
- clearYourTurn(battle->stats);
- battle->stats->battle = NULL;
- ni->stats->battle = NULL;
- return;
- }
- else
- {
- if (hit > 0)
- battle->stats->hp -= hit;
- clearYourTurn(ni->stats);
- setYourTurn(battle->stats);
- display_players(battle);
- notice(s_GameServ, u, "Please wait while %s decides what to do!",
- battle->stats->name.c_str());
- return;
- }
- }
- }
-}
-
void do_heal(char *u)
{
aClient *ni;
long int stringtoint(char *number)
{
+ return atol(number);
+/*
long int x, len = strlen(number), sum = 0;
if (len == 1)
return chartoint(number[0]);
for (x = len - 2; x >= 0; x--)
sum += chartoint(number[x]) * pow(10, abs(x - len + 1));
return sum;
+*/
}
long int pow(int x, int y)
clearYourTurn(it);
outfile << it->name.c_str() << ' ' << it->level << ' ' << it->exp << ' ' << it->gold << ' ' << it->bank << ' '
<< it->hp << ' ' << it->maxhp << ' ' << it->strength << ' ' << it->defense << ' '
- << it->armor << ' ' << it->weapon << ' '
+ << it->arm << ' ' << it->wea << ' '
<< it->forest_fights << ' ' << it->player_fights << ' '
- << it->getFlags() << ' ' << it->password << ' ' << it->inventory.Healing()
+ << it->getFlags() << ' ' << it->password << ' '
+/* fixing this << it->inventory.Healing()
<< ' ' << it->inventory.Strength() << ' ' << it->inventory.Defense() << ' ' << it->inventory.HP()
- << ' ' << it->lastlogin << endl;
+ << ' ' */ << it->lastlogin << endl;
ptr = ptr->Next();
}
}
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);
}
while (infile.getline(buf, 1024, '\n'))
- {
+ {
temp = new aClient;
tempname = strtok(buf, " ");
temp->stats = new Player(tempname);
p = temp->stats;
-
+
p->level = stringtoint(strtok(NULL, " "));
p->exp = stringtoint(strtok(NULL, " "));
p->gold = stringtoint(strtok(NULL, " "));
p->maxhp = stringtoint(strtok(NULL, " "));
p->strength = stringtoint(strtok(NULL, " "));
p->defense = stringtoint(strtok(NULL, " "));
- p->armor = stringtoint(strtok(NULL, " "));
- p->weapon = stringtoint(strtok(NULL, " "));
+ p->arm = stringtoint(strtok(NULL, " "));
+ p->wea = stringtoint(strtok(NULL, " "));
p->forest_fights = stringtoint(strtok(NULL, " "));
p->player_fights = stringtoint(strtok(NULL, " "));
p->setFlags(stringtoint(strtok(NULL, " ")));
+
+
password = strtok(NULL, " ");
p->password = password;
temp->setNick("Not Playing");
- #ifdef P10
+#ifdef P10
temp->setRealNick("Not Playing");
- #endif
-
- p->inventory.reset(); // Set inventory to all 0s
+#endif
+
+ p->inventory->clear(); // Set inventory to all 0s
// Old player databases didn't have these three extra values
// If they come up null, leave them to 0 as the default.
// On the next gameserv database save, it will save the values.
tempname = strtok(NULL, " ");
- if (tempname)
- p->inventory.setHealing(stringtoint(tempname));
-
+ // if (tempname)
+ // p->inventory.setHealing(stringtoint(tempname));
+
tempname = strtok(NULL, " ");
- if (tempname)
- p->inventory.setStrength(stringtoint(tempname));
-
+ //if (tempname)
+ // p->inventory.setStrength(stringtoint(tempname));
+
tempname = strtok(NULL, " ");
- if (tempname)
- p->inventory.setDefense(stringtoint(tempname));
-
+ //if (tempname)
+ // p->inventory.setDefense(stringtoint(tempname));
+
tempname = strtok(NULL, " ");
- if (tempname)
- p->inventory.setHP(stringtoint(tempname));
-
+ //if (tempname)
+ // p->inventory.setHP(stringtoint(tempname));
+
tempname = strtok(NULL, " ");
if (tempname)
- p->lastlogin = stringtoint(tempname);
+ p->lastlogin = stringtoint(tempname);
else
- p->lastlogin = time(NULL);
-
+ p->lastlogin = time(NULL);
+
unsigned long hv = iHASH((unsigned char *) temp->stats->name.c_str());
-
+
temp->stats->client = NULL;
players[hv].insertAtBack(temp);
delete temp;
- }
-delete [] buf;
-infile.close();
-return 1;
+ }
+ delete [] buf;
+ infile.close();
+ return 1;
}
bool passcmp(const char *encrypted, char *plaintext)
{
- char salt[3];
- char *plaintext2, *plainToencrypt;
- bool same = false;
-
- plaintext2 = new char[strlen(encrypted) + strlen(plaintext)]; // Extra
- strcpy(plaintext2, plaintext);
-
- salt[0] = encrypted[0];
- salt[1] = encrypted[1];
- salt[3] = '\0';
-
- plainToencrypt = crypt(plaintext2, salt);
-
- same = (strcmp((const char *)encrypted, plainToencrypt) == 0 ? true : false);
-
- delete []plaintext2;
-
- return same;
+ char salt[3];
+ char *plaintext2, *plainToencrypt;
+ bool same = false;
+
+ plaintext2 = new char[strlen(encrypted) + strlen(plaintext)]; // Extra
+ strcpy(plaintext2, plaintext);
+
+ salt[0] = encrypted[0];
+ salt[1] = encrypted[1];
+ salt[3] = '\0';
+
+ plainToencrypt = crypt(plaintext2, salt);
+
+ same = (strcmp((const char *)encrypted, plainToencrypt) == 0 ? true : false);
+
+ delete []plaintext2;
+
+ return same;
}
bool check_password(char *name, char *plaintext)
{
- aClient *client;
-
- if (!(client = findplayer(name)))
- return false;
- else
+ aClient *client;
+
+ if (!(client = findplayer(name)))
+ return false;
+ else
{
- return passcmp(client->stats->password.c_str(), plaintext);
+ return passcmp(client->stats->password.c_str(), plaintext);
}
}
void do_store(char *u)
{
- char *cmd = strtok(NULL, " ");
- char *item = strtok(NULL, " ");
- char *num = strtok(NULL, " ");
- char *space;
- int wep;
- aClient *user;
- Player *p;
-
- if (!cmd || !item)
+ char *cmd = strtok(NULL, " ");
+ char *item = strtok(NULL, " ");
+ char *num = strtok(NULL, " ");
+ char *space;
+ int wep;
+ aClient *user;
+ Player *p;
+
+ if (!cmd || !item)
{
- notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
- notice(s_GameServ, u, " \ 2STORE SELL {ARMOR | WEAPON}\ 2");
- notice(s_GameServ, u, " \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
- return;
+ notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
+ notice(s_GameServ, u, " \ 2STORE SELL {ARMOR | WEAPON}\ 2");
+ notice(s_GameServ, u, " \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+ return;
}
- else if (!(user = find(u)))
+ else if (!(user = find(u)))
{
- log("Fatal Error: could not find %s in client list", u);
- return;
+ log("Fatal Error: could not find %s in client list", u);
+ return;
}
- else if (isIgnore(user))
+ else if (isIgnore(user))
{
- #ifdef DEBUGMODE
- log("Ignoring %s.", user->getNick());
- #endif
- return;
+#ifdef DEBUGMODE
+ log("Ignoring %s.", user->getNick());
+#endif
+ return;
}
- else if (!is_playing(user))
+ else if (!is_playing(user))
{
- notice(s_GameServ, u, "You must be playing to use the store!");
- return;
+ notice(s_GameServ, u, "You must be playing to use the store!");
+ return;
}
- else if (!isAlive(user->stats))
+ else if (!isAlive(user->stats))
{
- notice(s_GameServ, u, "You are dead. Wait until tomorrow to purchase weapons and armor!");
- return;
+ notice(s_GameServ, u, "You are dead. Wait until tomorrow to purchase weapons and armor!");
+ return;
}
- updateTS(user->stats);
-
- if (stricmp(cmd, "LIST") == 0)
+ updateTS(user->stats);
+
+ if (stricmp(cmd, "LIST") == 0)
{
- if (stricmp(item, "WEAPONS") == 0)
+ if (stricmp(item, "WEAPONS") == 0)
{
- notice(s_GameServ, u, "Welcome to Kain's Armory");
- notice(s_GameServ, u, "Here are the weapons we have available for the killing, sire:");
- for (int x = 1; x < WNA; x++)
+ notice(s_GameServ, u, "Welcome to Kain's Armory");
+ notice(s_GameServ, u, "Here are the weapons we have available for the killing, sire:");
+ for (int x = 1; x < WNA; x++)
{
- space = spaces(strlen(weapons[x]), ".");
- notice(s_GameServ, u, "%s%d. %s%s%d",(x < 10 ? " " : ""), x, weapons[x], space, prices[x - 1]);
- free(space);
+ space = spaces(strlen(weapons[x]), ".");
+ notice(s_GameServ, u, "%s%d. %s%s%d",(x < 10 ? " " : ""), x, weapons[x], space, prices[x - 1]);
+ free(space);
}
- notice(s_GameServ, u, "To purchase a weapon, type /msg %S STORE BUY \ 2NUM\ 2.");
- notice(s_GameServ, u, "Where num. is the weapon number from the menu above.");
-
+ notice(s_GameServ, u, "To purchase a weapon, type /msg %S STORE BUY \ 2NUM\ 2.");
+ notice(s_GameServ, u, "Where num. is the weapon number from the menu above.");
+
}
- else if (stricmp(item, "ARMOR") == 0)
+ else if (stricmp(item, "ARMOR") == 0)
{
- notice(s_GameServ, u, "Welcome to Kain's Armory");
- notice(s_GameServ, u, "I hope you enjoy the fine armor we have available for your protection:");
- for (int x = 1; x < WNA; x++)
+ notice(s_GameServ, u, "Welcome to Kain's Armory");
+ notice(s_GameServ, u, "I hope you enjoy the fine armor we have available for your protection:");
+ for (int x = 1; x < WNA; x++)
{
- space = spaces(strlen(armors[x]), ".");
- notice(s_GameServ, u, "%s%d. %s%s%d",(x < 10 ? " " : ""), x, armors[x], space, prices[x - 1]);
- free(space);
+ space = spaces(strlen(armors[x]), ".");
+ notice(s_GameServ, u, "%s%d. %s%s%d",(x < 10 ? " " : ""), x, armors[x], space, prices[x - 1]);
+ free(space);
}
- notice(s_GameServ, u, "To purchase armor, type /msg %S store buy armor num.");
- notice(s_GameServ, u, "Where num. is the armor number from the menu above.");
-
-
+ notice(s_GameServ, u, "To purchase armor, type /msg %S store buy armor num.");
+ notice(s_GameServ, u, "Where num. is the armor number from the menu above.");
+
+
}
} else if (stricmp(cmd, "BUY") == 0) {
- if (!num)
+ if (!num)
{
- notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
- return;
+ notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+ return;
}
- else if (!isstringnum(num))
+ else if (!isstringnum(num))
{
- notice(s_GameServ, u, "You must specify a number between 1 and %d. Not %s!", WNA - 1, num);
- return;
+ notice(s_GameServ, u, "You must specify a number between 1 and %d. Not %s!", WNA - 1, num);
+ return;
}
- if (stricmp(item, "WEAPON") == 0)
+ if (stricmp(item, "WEAPON") == 0)
{
- wep = stringtoint(num);
- if (wep >= WNA || wep < 1)
+ wep = stringtoint(num);
+ if (wep >= WNA || wep < 1)
{
- notice(s_GameServ, u, "The number %d is out of range. The number you provide must be between 1 and %d.", wep, WNA - 1);
- return;
+ notice(s_GameServ, u, "The number %d is out of range. The number you provide must be between 1 and %d.", wep, WNA - 1);
+ return;
}
-
- p = user->stats;
-
- if (p->weapon != 0)
- notice(s_GameServ, u, "You have to sell your %s first!", weapons[p->weapon]);
- else if (p->gold < prices[wep - 1])
- notice(s_GameServ, u, "You don't have enough gold for %s!", weapons[wep]);
- else
+
+ p = user->stats;
+
+ if (p->wea != 0)
+ notice(s_GameServ, u, "You have to sell your %s first!", weapons[p->wea]);
+ else if (p->gold < prices[wep - 1])
+ notice(s_GameServ, u, "You don't have enough gold for %s!", weapons[wep]);
+ else
{
- notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", weapons[wep]);
- p->weapon = wep;
- p->gold -= prices[wep - 1];
+ notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", weapons[wep]);
+ p->wea = wep;
+ p->gold -= prices[wep - 1];
}
}
- else if (stricmp(item, "ARMOR") == 0)
+ else if (stricmp(item, "ARMOR") == 0)
{
- wep = stringtoint(num);
- if (wep >= WNA || wep < 1)
+ wep = stringtoint(num);
+ if (wep >= WNA || wep < 1)
{
- notice(s_GameServ, u, "The number %d is out of range. The number you provide must be between 1 and %d.", wep, WNA - 1);
- return;
+ notice(s_GameServ, u, "The number %d is out of range. The number you provide must be between 1 and %d.", wep, WNA - 1);
+ return;
}
-
- p = user->stats;
-
- if (p->armor != 0)
- notice(s_GameServ, u, "You have to sell your %s first!", armors[p->armor]);
- else if (p->gold < prices[wep - 1])
- notice(s_GameServ, u, "You don't have enough gold for %s!", armors[wep]);
- else
+
+ p = user->stats;
+
+ if (p->arm != 0)
+ notice(s_GameServ, u, "You have to sell your %s first!", armors[p->arm]);
+ else if (p->gold < prices[wep - 1])
+ notice(s_GameServ, u, "You don't have enough gold for %s!", armors[wep]);
+ else
{
- notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", armors[wep]);
- p->armor = wep;
- p->gold -= prices[wep - 1];
+ notice(s_GameServ, u, "You have purchased %s! Thanks for the gold!", armors[wep]);
+ p->arm = wep;
+ p->gold -= prices[wep - 1];
}
}
- else
+ else
{
- notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
- return;
+ notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+ return;
}
}
- else if (stricmp(cmd, "SELL" ) == 0)
+ else if (stricmp(cmd, "SELL" ) == 0)
{
- p = user->stats;
-
- if (stricmp(item, "WEAPON") == 0)
+ p = user->stats;
+
+ if (stricmp(item, "WEAPON") == 0)
{
- if (p->weapon == 0)
+ if (p->wea == 0)
{
- notice(s_GameServ, u, "You want me to chop off your hands?");
- return;
+ notice(s_GameServ, u, "You want me to chop off your hands?");
+ return;
}
- else if (p->gold == 2000000000)
+ else if (p->gold == 2000000000)
{
- notice(s_GameServ, u, "You have enough gold. I'll just take that off your hands, sire.");
- p->weapon = 0;
+ notice(s_GameServ, u, "You have enough gold. I'll just take that off your hands, sire.");
+ p->wea = 0;
}
- else if (2000000000 - p->gold < (prices[p->weapon - 1] / 2))
+ else if (2000000000 - p->gold < (prices[p->wea - 1] / 2))
{
- notice(s_GameServ, u, "Thank you for your business! You now have as much gold as you can carry.");
- notice(s_GameServ, u, "However, you have no weapon... can I interest you in the %s?", weapons[WNA - 1]);
- p->gold = 2000000000;
- p->weapon = 0;
+ notice(s_GameServ, u, "Thank you for your business! You now have as much gold as you can carry.");
+ notice(s_GameServ, u, "However, you have no weapon... can I interest you in the %s?", weapons[WNA - 1]);
+ p->gold = 2000000000;
+ p->wea = 0;
}
- else
+ else
{
- notice(s_GameServ, u, "Thank you for your business! You now have %d more gold but no weapon!", (prices[p->weapon - 1] / 2));
- p->gold += (prices[p->weapon - 1] / 2);
- p->weapon = 0;
+ notice(s_GameServ, u, "Thank you for your business! You now have %d more gold but no weapon!", (prices[p->wea - 1] / 2));
+ p->gold += (prices[p->wea - 1] / 2);
+ p->wea = 0;
}
}
- else if (stricmp(item, "ARMOR") == 0)
+ else if (stricmp(item, "ARMOR") == 0)
{
- p = user->stats;
-
- if (p->armor == 0)
+ p = user->stats;
+
+ if (p->arm == 0)
{
- notice(s_GameServ, u, "I don't think you can be any more naked...");
- return;
+ notice(s_GameServ, u, "I don't think you can be any more naked...");
+ return;
}
- if (p->gold == 2000000000)
+ if (p->gold == 2000000000)
{
- notice(s_GameServ, u, "You have enough gold. I'll just take that off your hands, sire.");
- p->armor = 0;
+ notice(s_GameServ, u, "You have enough gold. I'll just take that off your hands, sire.");
+ p->arm = 0;
}
- else if (2000000000 - p->gold < (prices[p->armor - 1] / 2))
+ else if (2000000000 - p->gold < (prices[p->arm - 1] / 2))
{
- notice(s_GameServ, u, "Thank you for your business! You now have as much gold as you can carry.");
- notice(s_GameServ, u, "However, you have no armor... can I interest you in %s?", armors[WNA - 1]);
- p->gold = 2000000000;
- p->armor = 0;
+ notice(s_GameServ, u, "Thank you for your business! You now have as much gold as you can carry.");
+ notice(s_GameServ, u, "However, you have no armor... can I interest you in %s?", armors[WNA - 1]);
+ p->gold = 2000000000;
+ p->arm = 0;
}
- else
+ else
{
- notice(s_GameServ, u, "Thank you for your business! You now have %d more gold but no armor!",
- (prices[p->armor - 1] / 2));
-
- p->gold += (prices[p->armor - 1] / 2);
- p->armor = 0;
+ notice(s_GameServ, u, "Thank you for your business! You now have %d more gold but no armor!",
+ (prices[p->arm - 1] / 2));
+
+ p->gold += (prices[p->arm - 1] / 2);
+ p->arm = 0;
}
}
- else
+ else
{
- notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
- notice(s_GameServ, u, " \ 2STORE SELL {ARMOR | WEAPON}\ 2");
- notice(s_GameServ, u, " \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+ notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
+ notice(s_GameServ, u, " \ 2STORE SELL {ARMOR | WEAPON}\ 2");
+ notice(s_GameServ, u, " \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
}
}
- else
+ else
{
- notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
- notice(s_GameServ, u, " \ 2STORE SELL {ARMOR | WEAPON}\ 2");
- notice(s_GameServ, u, " \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
- return;
+ notice(s_GameServ, u, "SYNTAX: STORE LIST {ARMOR | WEAPONS}");
+ notice(s_GameServ, u, " \ 2STORE SELL {ARMOR | WEAPON}\ 2");
+ notice(s_GameServ, u, " \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+ return;
}
}
void do_inventory(char *u)
updateTS(user->stats);
showinventory(user, user);
}
+
void showinventory(aClient *from, aClient *to)
{
- char *nick = to->getNick();
+ char *nick = to->getNick();
- if (!to)
- to = from;
- if (is_playing(from))
+ if (!to)
+ to = from;
+
+ if (is_playing(from))
{
- Pouch *p = &from->stats->inventory;
- notice(s_GameServ, nick, "Inventory for %s:", from->stats->name.c_str());
- notice(s_GameServ, nick, " Healing Potions: %d", p->Healing());
- notice(s_GameServ, nick, "Strength Potions: %d", p->Strength());
- notice(s_GameServ, nick, " Defense Potions: %d", p->Defense());
- notice(s_GameServ, nick, " HP Potions: %d", p->HP());
+ if (from->stats->inventory->isEmpty())
+ {
+ notice(s_GameServ, nick, "You aren't carrying anything");
+ return;
+ }
+
+ list <item*> *items;
+ items = from->stats->inventory->getItems();
+
+ list <item*>::iterator item_iter;
+ item_iter = items->begin();
+
+ notice(s_GameServ, nick, "Inventory for %s:", from->stats->name.c_str());
+ while (item_iter != items->end())
+ {
+ int x = 0;
+ notice(s_GameServ, nick, "%d.) %s", x, (*item_iter)->getName().c_str());
+ }
+
}
+
}
void do_tavern(char *u)
{
+ /*
char *cmd = strtok(NULL, " ");
long int price;
notice(s_GameServ, u, "Improper Syntax.");
notice(s_GameServ, u, "Type /msg %S HELP TAVERN for help");
}
+ */
+ return;
}
void do_bank(char *u)
"your %s, and venture into the hot, dark cave. "\
"You are surprised at the angle of descent as you climb "\
"lower and lower, deeper into the dragon's den.",
- armors[p->armor], weapons[p->weapon]);
+ armors[p->arm], weapons[p->wea]);
notice(s_GameServ, u, "You come to the end of the cave to find "\
"a tooth. It is a large tooth... bigger than your torso."\
" Suddenly the darkness lifts from the gleam of an eye "\
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)