#include "extern.h"
#include "flags.h"
#include "list.h"
+#include "level.h"
#include "sockhelp.h"
#include <cctype>
#endif
-// this will be hash.cpp start
-// thank you wcampbel
-unsigned long sHASH(const unsigned char *name);
-unsigned long iHASH(const unsigned char *name);
-List<aClient> players[U_TABLE_SIZE];
-// this will be hash.cpp end
-
-Monster *monsters[LEVELS][MONSTERS]; // Monsters per level. Total = MONSTERS * LEVELS
Monster boss; // The boss monster
+Level levels[LEVELS]; // The newest way to store monsters
Monster *masters[LEVELS]; // A master for each level
bool shuttingdown;
bool timedOut(Player *p);
-void updateTS(Player *p);
+void updateTS(Player *p);
void timeOutEvent(Player *p);
bool is_playing(char *u); // True if the given nickname in the clients list is playing.
void updateTS(Player *p);
void reset(Player *p);
void init_masters();
-void init_monsters();
bool load_monsters();
+bool load_levels();
void delete_monsters();
void delete_masters();
void do_admin(char *u);
void do_attack(char *u);
void do_bank(char *u);
+void do_check(char *u);
void do_fight(char *u);
void do_heal(char *u);
void do_help(char *u);
void do_list(char *u);
void do_logout(char *u);
void do_master(char *u);
+void do_dragon(char *u);
void do_play(char *u);
void do_quitg(char *u);
void do_reset(char *u);
"Chain Saw", "Poison Sword", "Flame Sword", "Earth Hammer",
"Light Saber", "Masamune", "Mystical Sword"};
-char *armors[WNA] = { "Nothing", "Clothes", "Leather Vest", "Chain Mail", "Plate Armor",
+char *armors[WNA] = { "Birthday Suit", "Clothes", "Leather Vest", "Chain Mail", "Plate Armor",
"Full Body Armor", "Magic Mail", "Graphite Suit", "Steel Suit",
"Force Field", "Armor of Light", "Mythril Vest", "DemiGod Armor",
"Hades' Cloak", "Dragon Scales", "Adamantium"};
int prices[WNA - 1] = {200, 1000, 3000, 10000, 30000, 100000, 150000, 200000, 400000,
1000000, 4000000, 10000000, 40000000, 100000000, 400000000};
-int webonus[WNA] = {1, 10, 15, 25, 35, 45, 65, 85, 125, 185, 255, 355, 505, 805, 1205, 1805};
-int arbonus[WNA] = {1, 2, 4, 10, 15, 25, 35, 50, 75, 100, 150, 225, 300, 400, 600, 1000};
+int webonus[WNA] = {2, 10, 15, 25, 35, 45, 65, 85, 125, 185, 255, 355, 505, 805, 1205, 1805};
+int arbonus[WNA] = {2, 3, 5, 10, 15, 25, 35, 50, 75, 100, 150, 225, 300, 400, 600, 1000};
int hpbonus[11] = {10, 15, 20, 30, 50, 75, 125, 185, 250, 350, 550};
int strbonus[11] = {5, 7, 10, 12, 20, 35, 50, 75, 110, 150, 200};
log("Source: %s Command: %s", source, cmd);
#endif
- struct tm *tm;
- time_t ti;
- time(&ti);
- tm = localtime(&ti);
-
- int curday = tm->tm_mday;
-
- if (curday != day)
- {
- refreshall();
- day = curday;
- save_day(); // here i come to save the day!
- }
-
if (strnicmp(cmd, "\1PING", 6) == 0)
{
char *ts;
do_fight(source);
} else if (stricmp(cmd, "ATTACK") == 0) {
do_attack(source);
+ } else if (stricmp(cmd, "CHECK") == 0) {
+ do_check(source);
} else if (stricmp(cmd, "RUN") == 0) {
do_run(source);
} else if (stricmp(cmd, "USE") == 0) {
do_inventory(source);
} else if (stricmp(cmd, "MASTER") == 0) {
do_master(source);
+ } else if (stricmp(cmd, "DRAGON") == 0) {
+ do_dragon(source);
} else if (stricmp(cmd, "STORE") == 0) {
do_store(source);
} else if (stricmp(cmd, "BANK") == 0) {
do_list(source);
} else if (stricmp(cmd, "LOGOUT") == 0) {
do_logout(source);
+ } else if (stricmp(cmd, "NEWS") == 0) {
+ do_news(source);
} else if (stricmp(cmd, "REGISTER") == 0) {
do_register(source);
} else if (stricmp(cmd, "IDENTIFY") == 0) {
char *rest = strtok(NULL, "");
raw("%s", rest);
}
+ } else if (stricmp(cmd, "PRINT") == 0) {
+ for (int x = 0; x < LEVELS; x++)
+ levels[x].monsters.print();
+ } else if (stricmp(cmd, "RANDOM") == 0) {
+ char *rstr = strtok(NULL, "");
+ range trange;
+ trange.setRange(rstr);
+ notice(s_GameServ, source, "Random number in that range: %d", trange.random());
#endif
} else {
aClient *user;
}
else if (ni->stats)
{
- notice(s_GameServ, sender->getNick(), "Stats for %s:", ni->stats->name);
+ notice(s_GameServ, sender->getNick(), "Stats for %s:", ni->stats->name.getString());
sprintf(buf, "Experience: %ld", ni->stats->exp);
space = spaces(strlen(buf), " ");
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;
}
else
{
- notice(s_GameServ, u, "%s is not playing!", ni->stats->name);
+ notice(s_GameServ, u, "%s is not playing!", ni->stats->name.getString());
}
delete [] buf;
}
if (isUsePrivmsg())
strcpy(commanduse, "P");
else
- strcpy(commanduse, "N");
+ strcpy(commanduse, "O");
#else
if (isUsePrivmsg())
}
#endif
+void do_check(char *u)
+{
+ int days, hours, minutes, seconds;
+ long complete;
+ complete = (lastrefresh + refreshperiod) - time(NULL);
+ days = complete / 86400;
+ hours = (complete % 86400) / 3600;
+ minutes = (complete % 86400) % 3600 / 60;
+ seconds = (complete % 86400) % 3600 % 60;
+
+ notice(s_GameServ, u, "Time left to next refresh: %dd %dh %dm %ds",
+ days, hours, minutes, seconds);
+}
+
void do_list(char *u)
{
aClient *user;
+ char *cmd = strtok(NULL, " ");
+
if (!(user = find(u)))
{
log("Fatal Error: Couldn't find %s in the client list", u);
ListNode<aClient> *temp;
bool header = false;
+
for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
{
temp = players[x].First();
if (!players[x].isEmpty())
{
- if (!header)
- {
- notice(s_GameServ, u, "People Playing:");
- header = true;
- }
while(temp)
{
- #ifdef P10
- notice(s_GameServ, u, "IRC: %s Game: %s", temp->getData()->getRealNick(),
- temp->getData()->stats->name);
- #else
- notice(s_GameServ, u, "IRC: %s Game: %s", temp->getData()->getNick(),
- temp->getData()->stats->name);
- #endif
+ if (cmd || is_playing(temp->getData()))
+ {
+ if (!header)
+ {
+ notice(s_GameServ, u, "Players:");
+ header = true;
+ }
+ #ifdef P10
+ notice(s_GameServ, u, "IRC: %s Game: %s", temp->getData()->getRealNick(),
+ temp->getData()->stats->name.getString());
+ #else
+ notice(s_GameServ, u, "IRC: %s Game: %s", temp->getData()->getNick(),
+ temp->getData()->stats->name.getString());
+ #endif
+ }
temp = temp->Next();
}
}
else
{
- notice(s_GameServ, u, "Logging out %s", user->stats->name);
+ notice(s_GameServ, u, "Logging out %s", user->stats->name.getString());
logout(user);
}
}
{
ListNode<aClient> *it;
aClient *temp;
- unsigned long hv = iHASH((unsigned char *) user->stats->name);
+ unsigned long hv = iHASH((unsigned char *) user->stats->name.getString());
it = players[hv].Find(user);
if (!it)
user->stats = new Player(user);
user->stats->client = user; // Set the backwards pointer
user->stats->reset(); // set the user up
- strncpy(user->stats->password, crypt(password, salt), 255);
- strncpy(user->stats->name, name, 255);
+ user->stats->password = crypt(password, salt);
+ user->stats->name = name;
+
unsigned long hv = iHASH((unsigned char *) name);
updateTS(user->stats);
temp = players[hv].insertAtBack_RLN(user);
temp->setPtr(user); // This is an extra step, but necessary for now
- notice(s_GameServ, u, "Player %s registered with password %s.", user->stats->name, password);
+ // Update the last login time
+ user->stats->lastlogin = time(NULL);
+
+ notice(s_GameServ, u, "Player %s registered with password %s.", user->stats->name.getString(), password);
notice(s_GameServ, u, "Write this password down. If you lose it, there is no way to retrieve it!");
- log("Nickname %s registered player %s.", u, user->stats->name);
+ log("Nickname %s registered player %s.", u, user->stats->name.getString());
setPlaying(user); // set the playing flag
}
else
}
else {
ListNode<aClient> *temp;
- unsigned long hv = iHASH((unsigned char *) p->stats->name);
+ unsigned long hv = iHASH((unsigned char *) p->stats->name.getString());
temp = players[hv].Find(p);
if (!temp)
{
strtok(NULL, ""));
return;
}
- user->stats = new Player(p->stats->name);
+ user->stats = new Player(p->stats->name.getString());
#ifdef DEBUGMODE
log("Setting data for identified");
#endif
#ifdef DEBUGMODE
- log("Player %s IRC: %s Identified", user->stats->name,
+ log("Player %s IRC: %s Identified", user->stats->name.getString(),
user->getNick());
#endif
setPlaying(user); // set the playing flag
temp->setPtr(user);
- notice(s_GameServ, u, "Password Accepted. Identified.");
+
+ // Update the last login time
+ user->stats->lastlogin = time(NULL);
+
+ notice(s_GameServ, u, "Password Accepted. Identified.");
+ showNews(u, todaysnews);
}
}
else
{
updateTS(user->stats);
- showstats(u, user->stats->name);
+ showstats(u, user->stats->name.getString());
}
}
else
for (int x = 0; x < LEVELS; x++)
masters[x] = new Monster;
- strcpy(masters[0]->name, "Old Bones");
- strcpy(masters[0]->weapon, "Dull Sword Cane");
- masters[0]->strength = 25;
+ masters[0]->name = "Old Bones";
+ masters[0]->weapon = "Dull Sword Cane";
+ masters[0]->strength = 32;
masters[0]->gold = 0;
masters[0]->exp = 0;
- masters[0]->maxhp = 30;
- masters[0]->hp = 30;
- strcpy(masters[0]->death, "You have done well my student, but the road is long. Use your new strength with humility and honor as you progress in levels!");
+ masters[0]->maxhp = 35;
+ masters[0]->hp = 35;
+ masters[0]->death = "You have done well my student, but the road is long. Use your new strength with humility and honor as you progress in levels!";
- strcpy(masters[1]->name, "Master Chang");
- strcpy(masters[1]->weapon, "Nanchaku");
- masters[1]->strength = 35;
+ masters[1]->name = "Master Chang";
+ masters[1]->weapon = "Nanchaku";
+ masters[1]->strength = 48;
masters[1]->gold = 0;
masters[1]->exp = 0;
- masters[1]->maxhp = 40;
- masters[1]->hp = 40;
- strcpy(masters[1]->death, "You try to make out what Master Chang is saying, but the only thing you catch is something about a grasshopper.");
+ masters[1]->maxhp = 51;
+ masters[1]->hp = 51;
+ masters[1]->death = "You try to make out what Master Chang is saying, but the only thing you catch is something about a grasshopper.";
- strcpy(masters[2]->name, "Chuck Norris");
- strcpy(masters[2]->weapon, "Ranger Kick");
- masters[2]->strength = 95;
+ masters[2]->name = "Chuck Norris";
+ masters[2]->weapon = "Ranger Kick";
+ masters[2]->strength = 88;
masters[2]->gold = 0;
masters[2]->exp = 0;
- masters[2]->maxhp = 70;
- masters[2]->hp = 70;
- strcpy(masters[2]->death, "Be strong, and keep your goals in site. Drink milk, and don't do drugs. One day you may be fighting next to me as a Texas Ranger YEEHAW!");
+ masters[2]->maxhp = 100;
+ masters[2]->hp = 100;
+ masters[2]->death = "Be strong, and keep your goals in site. Drink milk, and don't do drugs. One day you may be fighting next to me as a Texas Ranger YEEHAW!";
- strcpy(masters[3]->name, "Mr. Miagi");
- strcpy(masters[3]->weapon, "Petrified Bonsai");
- masters[3]->strength = 130;
+ masters[3]->name = "Mr. Miagi";
+ masters[3]->weapon = "Petrified Bonsai";
+ masters[3]->strength = 169;
masters[3]->gold = 0;
masters[3]->exp = 0;
- masters[3]->maxhp = 120;
- masters[3]->hp = 120;
- strcpy(masters[3]->death, "Skill comes from repeating the correct but seemingly mundane actions. Wax ON, wax OFF!");
+ masters[3]->maxhp = 165;
+ masters[3]->hp = 165;
+ masters[3]->death = "Skill comes from repeating the correct but seemingly mundane actions. Wax ON, wax OFF!";
- strcpy(masters[4]->name, "Jackie Chan");
- strcpy(masters[4]->weapon, "Kung Fu Kick");
- masters[4]->strength = 156;
+ masters[4]->name = "Jackie Chan";
+ masters[4]->weapon = "Kung Fu Kick";
+ masters[4]->strength = 275;
masters[4]->gold = 0;
masters[4]->exp = 0;
- masters[4]->maxhp = 200;
- masters[4]->hp = 200;
- strcpy(masters[4]->death, "I like to let people talk who like to talk... it's easier to find out how full of it they really are!");
+ masters[4]->maxhp = 232;
+ masters[4]->hp = 232;
+ masters[4]->death = "I like to let people talk who like to talk... it's easier to find out how full of it they really are!";
- strcpy(masters[5]->name, "Jet Li");
- strcpy(masters[5]->weapon, "Motorcycle");
- masters[5]->strength = 180;
+ masters[5]->name = "Jet Li";
+ masters[5]->weapon = "Motorcycle";
+ masters[5]->strength = 347;
masters[5]->gold = 0;
masters[5]->exp = 0;
- masters[5]->maxhp = 400;
- masters[5]->hp = 400;
- strcpy(masters[5]->death, "Failure is a fuel for excuses. It's the doing the do, that makes the making.");
+ masters[5]->maxhp = 504;
+ masters[5]->hp = 504;
+ masters[5]->death = "Failure is a fuel for excuses. It's the doing the do, that makes the making.";
- strcpy(masters[6]->name, "Muhammad Ali");
- strcpy(masters[6]->weapon, "Quick Jab");
- masters[6]->strength = 200;
+ masters[6]->name = "Muhammad Ali";
+ masters[6]->weapon = "Quick Jab";
+ masters[6]->strength = 515;
masters[6]->gold = 0;
masters[6]->exp = 0;
- masters[6]->maxhp = 600;
- masters[6]->hp = 600;
- strcpy(masters[6]->death, "It's just a job. Grass grows, birds fly, waves pound the sand. I beat people up.");
+ masters[6]->maxhp = 1078;
+ masters[6]->hp = 1078;
+ masters[6]->death = "It's just a job. Grass grows, birds fly, waves pound the sand. I beat people up.";
- strcpy(masters[7]->name, "Li Mu Bai");
- strcpy(masters[7]->weapon, "Green Destiny");
- masters[7]->strength = 225;
+ masters[7]->name = "Li Mu Bai";
+ masters[7]->weapon = "Green Destiny";
+ masters[7]->strength = 655;
masters[7]->gold = 0;
masters[7]->exp = 0;
- masters[7]->maxhp = 800;
- masters[7]->hp = 800;
- strcpy(masters[7]->death, "No growth without resistance. No action without reaction. No desire without restraint.");
+ masters[7]->maxhp = 2207;
+ masters[7]->hp = 2207;
+ masters[7]->death = "No growth without resistance. No action without reaction. No desire without restraint.";
- strcpy(masters[8]->name, "Jimmy Wang Yu");
- strcpy(masters[8]->weapon, "Flying Guillotine");
- masters[8]->strength = 290;
+ masters[8]->name = "Jimmy Wang Yu";
+ masters[8]->weapon = "Flying Guillotine";
+ masters[8]->strength = 819;
masters[8]->gold = 0;
masters[8]->exp = 0;
- masters[8]->maxhp = 1200;
- masters[8]->hp = 1200;
- strcpy(masters[8]->death, "You have beaten the one armed boxer. Proceed with caution!");
+ masters[8]->maxhp = 2780;
+ masters[8]->hp = 2780;
+ masters[8]->death = "You have beaten the one armed boxer. Proceed with caution!";
- strcpy(masters[9]->name, "Wong Fei Hung");
- strcpy(masters[9]->weapon, "Drunken Boxing");
- masters[9]->strength = 385;
+ masters[9]->name = "Wong Fei Hong";
+ masters[9]->weapon = "Drunken Boxing";
+ masters[9]->strength = 1014;
masters[9]->gold = 0;
masters[9]->exp = 0;
- masters[9]->maxhp = 1800;
- masters[9]->hp = 1800;
- strcpy(masters[9]->death, "Hiccup! Monkey drinks master's wine!");
+ masters[9]->maxhp = 3046;
+ masters[9]->hp = 3046;
+ masters[9]->death = "Hiccup! Monkey drinks master's wine!";
- strcpy(masters[10]->name, "Bruce Lee");
- strcpy(masters[10]->weapon, "Fists of fury");
- masters[10]->strength = 600;
+ masters[10]->name = "Bruce Lee";
+ masters[10]->weapon = "Fists of fury";
+ masters[10]->strength = 1286;
masters[10]->gold = 0;
masters[10]->exp = 0;
- masters[10]->maxhp = 2500;
- masters[10]->hp = 2500;
- strcpy(masters[10]->death, "You must learn to concentrate. It is like a finger pointing away to the moon... DONT concentrate on the finger, or you will miss all the heavenly glory.");
-}
-
-void init_monsters()
-{
- #ifdef DEBUGMODE
- log("Calling delete_monsters");
- #endif
-
- delete_monsters();
-
- for (int x = 0; x < LEVELS; x++)
- for (int y = 0; y < MONSTERS; y++)
- monsters[x][y] = new Monster();
+ masters[10]->maxhp = 3988;
+ masters[10]->hp = 3988;
+ masters[10]->death = "You must learn to concentrate. It is like a finger pointing away to the moon... DONT concentrate on the finger, or you will miss all the heavenly glory.";
}
void delete_monsters()
{
for (int x = 0; x < LEVELS; x++)
- for (int y = 0; y < MONSTERS; y++)
- if (monsters[x][y])
- delete monsters[x][y];
+ levels[x].monsters.deleteNodes();
}
void delete_masters()
Player *ni = user->stats;
notice(s_GameServ, u, "Your Hitpoints: \ 2%d\ 2", ni->hp);
- notice(s_GameServ, u, "%s's Hitpoints: \ 2%d\ 2", ni->fight->name, ni->fight->hp);
+ notice(s_GameServ, u, "%s's Hitpoints: \ 2%d\ 2", ni->fight->name.getString(), ni->fight->hp);
notice(s_GameServ, u, "Here are your commands:");
notice(s_GameServ, u, "/msg %S attack");
notice(s_GameServ, u, "/msg %S run");
{
aClient *battle = user->stats->battle;
notice(s_GameServ, u, "Your Hitpoints: \ 2%d\ 2", user->stats->hp);
- notice(s_GameServ, u, "%s's Hitpoints: \ 2%d\ 2", battle->stats->name, battle->stats->hp);
+ notice(s_GameServ, u, "%s's Hitpoints: \ 2%d\ 2", battle->stats->name.getString(), battle->stats->hp);
notice(s_GameServ, u, "Here are your commands:");
notice(s_GameServ, u, "/msg %S attack");
notice(s_GameServ, u, "/msg %S run");
{
if (!is_playing(user))
return false;
- else
- return user->stats->battle != NULL;
+ else if (user->stats->battle != NULL)
+ {
+ return user->stats->battle->stats != NULL;
+ }
+ return false;
}
bool master_fight(char *u)
{
notice(s_GameServ, u, "You can't attack %s while they aren't playing!", nick);
}
-/*
- * Offline fighting not implemented yet.
- * else if (!(fight = finduser(nick)))
- * {
- * ni->stats->battle = battle;
- * battle->battle = ni;
- * ni->yourturn = 1;
- * battle->yourturn = 0;
- * notice(s_GameServ, u, "You decide to fight %s while they're not online!",
- * battle->stats->name);
- * display_players(u);
- * }
- */
- else if (stricmp(ni->stats->name, battle->stats->name) == 0)
+
+/* offline fighting not available yet
+ else if (!(fight = finduser(nick)))
+ {
+ ni->stats->battle = battle;
+ battle->battle = ni;
+ setYourTurn(ni->stats);
+ clearYourTurn(battle->stats);
+
+ notice(s_GameServ, u, "You decide to fight %s while they're "\
+ "not in the realm!",
+ battle->stats->name.getString());
+ display_players(u);
+ }
+*/
+ else if (stricmp(ni->stats->name.getString(), battle->stats->name.getString()) == 0)
{
notice(s_GameServ, u, "Are you trying to commit suicide!?");
}
}
else if (player_fight(battle))
{
- notice(s_GameServ, u, "%s is fighting %s already!", battle->stats->name, battle->stats->battle->stats->name);
+ notice(s_GameServ, u, "%s is fighting %s already!", battle->stats->name.getString(),
+ battle->stats->battle->stats->name.getString());
}
else if (master_fight(battle))
{
- notice(s_GameServ, u, "%s is fighting their master!", battle->stats->name);
+ notice(s_GameServ, u, "%s is fighting their master!", battle->stats->name.getString());
}
else if (is_fighting(battle))
{
- notice(s_GameServ, u, "%s is fighting %s already!", battle->stats->name, battle->stats->fight->name);
+ notice(s_GameServ, u, "%s is fighting %s already!", battle->stats->name.getString(),
+ battle->stats->fight->name.getString());
}
else if (ni->stats->level - battle->stats->level > maxbfightdistance)
{
// You can't fight someone below you by more than X level(s)
// level 12 can fight level (12 - X) but not < (12 - X)
notice(s_GameServ, u, "You may not fight %s. You're too strong!",
- battle->stats->name);
+ battle->stats->name.getString());
}
else if (battle->stats->level - ni->stats->level > maxafightdistance)
{
// You can't fight someone above you by more than X level(S)
// level 1 can fight level (1 + X), but not > (1 + X)
notice(s_GameServ, u, "%s, do you really have a death wish? Try the forest you "\
- "weakling!", ni->stats->name);
+ "weakling!", ni->stats->name.getString());
}
else
{
// Initiate Battle sequence!
ni->stats->player_fights -= 1;
- notice(s_GameServ, u, "You challenge %s to an online duel!", battle->stats->name);
- notice(s_GameServ, battle->getNick(), "%s has challenged you to an online duel!", ni->stats->name);
+ notice(s_GameServ, u, "You challenge %s to an online duel!", battle->stats->name.getString());
+ notice(s_GameServ, battle->getNick(), "%s has challenged you to an online duel!",
+ ni->stats->name.getString());
notice(s_GameServ, battle->getNick(), "%s gets to go first "\
- "because they initiated!", ni->stats->name);
- notice(s_GameServ, battle->getNick(), "Please wait while %s decides what to do.", ni->stats->name);
+ "because they initiated!", ni->stats->name.getString());
+ notice(s_GameServ, battle->getNick(), "Please wait while %s decides what to do.",
+ ni->stats->name.getString());
display_players(ni);
}
}
p = &user->stats->inventory;
- if (stricmp(item, "HEALTH") == 0)
+ if (stricmp(item, "HEALING") == 0)
{
if (p->Healing() <= 0)
{
- notice(s_GameServ, u, "You are out of Health Potions!");
+ notice(s_GameServ, u, "You are out of Healing Potions!");
return;
}
- int oldhealth = user->stats->hp;
+ int oldhealing = user->stats->hp;
+ user->stats->hp += (10 * user->stats->level) + (rand() % 10) * user->stats->level;
+ if (user->stats->hp - user->stats->maxhp >= 100)
+ {
+ user->stats->hp = user->stats->maxhp + 100;
+
+ if (oldhealing >= (user->stats->maxhp + 100))
+ {
+ notice(s_GameServ, u, "You cannot hold anymore HP!");
+ return;
+ }
+ }
+
notice(s_GameServ, u, "You hastiliy gulp down the flask of cool life-giving waters.");
notice(s_GameServ, u, "Rejuvination spreads throughout your body.");
- user->stats->hp += (10 * user->stats->level) + (rand() % 10) * user->stats->level;
- notice(s_GameServ, u, "You gain %d HP!", user->stats->hp - oldhealth);
+ notice(s_GameServ, u, "You gain %d HP!", user->stats->hp - oldhealing);
p->decHealing();
+ if (player_fight(user))
+ {
+ notice(s_GameServ, user->stats->battle->getNick(),
+ "%s has used a healing potion!");
+ }
}
else if (stricmp(item, "STRENGTH") == 0)
{
user->stats->strength += 1 + (rand() % 10 >= 8 ? 1 : 0); // 1-2
notice(s_GameServ, u, "You gain %d Strength points!", user->stats->strength - oldstrength);
p->decStrength();
+ if (player_fight(user))
+ {
+ notice(s_GameServ, user->stats->battle->getNick(),
+ "%s has used a strength potion!");
+ }
}
else if (stricmp(item, "DEFENSE") == 0)
{
user->stats->defense += 1 + (rand() % 10 >= 8 ? 1 : 0); // 1-2
notice(s_GameServ, u, "You gain %d Defense points!", user->stats->defense - olddefense);
p->decDefense();
+ if (player_fight(user))
+ {
+ notice(s_GameServ, user->stats->battle->getNick(),
+ "%s has used a defense potion!");
+ }
}
else if (stricmp(item, "HP") == 0)
{
notice(s_GameServ, u, "You gain %d Maximum hit points!", user->stats->maxhp - oldHP);
p->decHP();
+ if (player_fight(user))
+ {
+ notice(s_GameServ, user->stats->battle->getNick(),
+ "%s has used a HP potion!");
+ }
}
else
{
- notice(s_GameServ, u, "SYNTAX: /msg %S USE {HEALTH | STRENGTH | DEFENSE}");
+ notice(s_GameServ, u, "SYNTAX: /msg %S USE {HEALING | STRENGTH | DEFENSE | HP}");
return;
}
notice(s_GameServ, u, "You run in place... try fighting next time.");
else if (!player_fight(user) && !master_fight(user))
{
- notice(s_GameServ, u, "You run away from \ 2%s\ 2 like a little baby!", p->fight->name);
+ notice(s_GameServ, u, "You run away from \ 2%s\ 2 like a little baby!", p->fight->name.getString());
delete p->fight;
p->fight = NULL;
}
else if (player_fight(user) && isYourTurn(p))
{
- notice(s_GameServ, u, "You run away from \ 2%s\ 2 like a little baby!", p2->name);
- notice(s_GameServ, p->battle->getNick(), "\ 2%s\ 2 ran away from you like a little baby!", p->name);
+ notice(s_GameServ, u, "You run away from \ 2%s\ 2 like a little baby!", p2->name.getString());
+ notice(s_GameServ, p->battle->getNick(), "\ 2%s\ 2 ran away from you like a little baby!",
+ p->name.getString());
p2->battle = NULL;
}
else if (player_fight(user) && !isYourTurn(p))
{
- notice(s_GameServ, u, "It is not your turn. Please wait until \ 2%s\ 2 decides what to do.", p2->name);
+ notice(s_GameServ, u, "It is not your turn. Please wait until \ 2%s\ 2 decides what to do.",
+ p2->name.getString());
}
else if (master_fight(user))
{
- notice(s_GameServ, u, "You cannot run from \ 2%s\ 2! FIGHT!", p->master->name);
+ notice(s_GameServ, u, "You cannot run from \ 2%s\ 2! FIGHT!", p->master->name.getString());
}
p->battle = NULL;
}
if (mhit > 0)
{
notice(s_GameServ, u, "\1f%s\1f attacks with their \1f%s\1f for \ 2%d\ 2 damage!",
- fight->name, fight->weapon, mhit);
+ fight->name.getString(), fight->weapon.getString(), mhit);
}
else if (mhit <= 0)
- notice(s_GameServ, u, "%s completely misses you!", fight->name);
+ notice(s_GameServ, u, "%s completely misses you!", fight->name.getString());
if (mhit >= user->stats->hp)
{
if (!master_fight(user))
{
- notice(s_GameServ, u, "You have been \ 2\1fkilled\1f\ 2 by %s!", fight->name);
+ notice(s_GameServ, u, "You have been \ 2\1fkilled\1f\ 2 by %s!", fight->name.getString());
notice(s_GameServ, u, "You lose all gold on hand and lose 10 percent "\
"of your experience!");
user->stats->gold = 0;
user->stats->exp -= (long int)(user->stats->exp * .10);
+ user->stats->hp = 0;
user->stats->fight = NULL;
clearAlive(user->stats);
goto endturn;
else
{
notice(s_GameServ, u, "%s has bested you! You will have to wait "\
- "until tomorrow to try again", user->stats->master->name);
+ "until tomorrow to try again", user->stats->master->name.getString());
user->stats->fight = NULL;
user->stats->master = NULL;
goto endturn;
if (!player_fight(ni))
{
if (hit > 0)
- notice(s_GameServ, u, "You attack \1f%s\1f for \ 2%d\ 2 points!", fight->name, hit);
+ notice(s_GameServ, u, "You attack \1f%s\1f for \ 2%d\ 2 points!", fight->name.getString(), hit);
else
- notice(s_GameServ, u, "You miss \1f%s\1f completely!", fight->name);
+ notice(s_GameServ, u, "You miss \1f%s\1f completely!", fight->name.getString());
if (hit >= fight->hp)
{
if (master_fight(ni))
- notice(s_GameServ, u, "You have bested %s!", fight->name);
+ {
+ notice(s_GameServ, u, "You have bested %s!", fight->name.getString());
+ addNews(todaysnews, "%s has bested %s and moved "\
+ "to level %d", ni->stats->name.getString(), fight->name.getString(),
+ (ni->stats->level + 1));
+ }
else
- notice(s_GameServ, u, "You have killed \ 2%s\ 2!", fight->name);
+ notice(s_GameServ, u, "You have killed \ 2%s\ 2!", fight->name.getString());
- notice(s_GameServ, u, "%s", fight->death);
+ notice(s_GameServ, u, "%s", fight->death.getString());
notice(s_GameServ, u, "You recieve \ 2%d\ 2 experience and \ 2%d\ 2 gold!",
fight->exp, fight->gold);
// 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 = ( (ni->stats->exp + fight->exp) > 2000000000 ? 2000000000 :
- ni->stats->exp + fight->exp);
-
- ni->stats->gold = (ni->stats->gold + fight->gold > 2000000000 ? 2000000000 :
- ni->stats->gold + fight->gold);
+ 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))
{
strbonus[ni->stats->level - 1], defbonus[ni->stats->level - 1]);
// Increase your level
- ni->stats->level++;
// Increase your maximum hit points
ni->stats->maxhp += hpbonus[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;
}
if (mhit > 0)
{
notice(s_GameServ, u, "\1f%s\1f attacks with their \1f%s\1f for \ 2%d\ 2 damage!",
- fight->name, fight->weapon, mhit);
+ fight->name.getString(), fight->weapon.getString(), mhit);
}
else if (mhit <= 0)
- notice(s_GameServ, u, "%s completely misses you!", fight->name);
+ notice(s_GameServ, u, "%s completely misses you!", fight->name.getString());
if (mhit >= ni->stats->hp)
{
if (!master_fight(ni))
{
- notice(s_GameServ, u, "You have been \ 2\1fkilled\1f\ 2 by %s!", fight->name);
+ notice(s_GameServ, u, "You have been \ 2\1fkilled\1f\ 2 by %s!", fight->name.getString());
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.getString(), fight->name.getString());
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);
+ "until tomorrow to try again", ni->stats->master->name.getString());
+ addNews(todaysnews, "%s tried to best %s and failed!",
+ ni->stats->name.getString(), fight->name.getString());
ni->stats->fight = NULL;
ni->stats->master = NULL;
return;
if (!isYourTurn(ni->stats))
{
notice(s_GameServ, u, "Please wait until %s decides what to do!",
- battle->stats->name);
+ battle->stats->name.getString());
return;
}
if (hit > 0)
{
- notice(s_GameServ, u, "You attack \1f%s\1f for \ 2%d\ 2 points!", battle->stats->name, hit);
+ notice(s_GameServ, u, "You attack \1f%s\1f for \ 2%d\ 2 points!", battle->stats->name.getString(), hit);
notice(s_GameServ, battle->getNick(), "%s has hit you with their %s for "\
- "\ 2%d\ 2 damage!", ni->stats->name,
+ "\ 2%d\ 2 damage!", ni->stats->name.getString(),
weapons[ni->stats->weapon], hit);
- clearYourTurn(ni->stats);
- setYourTurn(battle->stats);
- display_players(battle);
}
else
{
- notice(s_GameServ, u, "You miss \1f%s\1f completely!", battle->stats->name);
- notice(s_GameServ, battle->getNick(), "%s misses you completely!", ni->stats->name);
- clearYourTurn(ni->stats);
- setYourTurn(battle->stats);
- display_players(battle);
+ notice(s_GameServ, u, "You miss \1f%s\1f completely!", battle->stats->name.getString());
+ notice(s_GameServ, battle->getNick(), "%s misses you completely!", ni->stats->name.getString());
}
+
if (hit >= battle->stats->hp)
{
- notice(s_GameServ, u, "You have killed \ 2%s\ 2!", battle->stats->name);
+ notice(s_GameServ, u, "You have killed \ 2%s\ 2!", battle->stats->name.getString());
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);
+ ni->stats->name.getString());
battle->stats->hp = 0;
clearAlive(battle->stats);
- 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 += (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 your experience!");
notice(s_GameServ, battle->getNick(), "However, %s could not carry all of your "\
- "gold.", ni->stats->name);
+ "gold.", ni->stats->name.getString());
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;
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);
-
+ battle->stats->name.getString());
return;
}
}
{
it = ptr->getData()->stats;
clearYourTurn(it);
- outfile << it->name << ' ' << it->level << ' ' << it->exp << ' ' << it->gold << ' ' << it->bank << ' '
- << it->hp << ' ' << it->maxhp << ' ' << it->strength << ' ' << it->defense << ' '
- << it->armor << ' ' << it->weapon << ' '
+ outfile << it->name.getString() << ' ' << it->level << ' ' << it->exp << ' ' << it->gold << ' '
+ << it->bank << ' ' << it->hp << ' ' << it->maxhp << ' ' << it->strength << ' ' << it->defense
+ << ' ' << it->armor << ' ' << it->weapon << ' '
<< it->forest_fights << ' ' << it->player_fights << ' '
- << it->getFlags() << ' ' << it->password << ' ' << it->inventory.Healing()
- << ' ' << it->inventory.Strength() << ' ' << it->inventory.Defense() << ' ' << it->inventory.HP() << endl;
+ << it->getFlags() << ' ' << it->password.getString() << ' ' << it->inventory.Healing()
+ << ' ' << it->inventory.Strength() << ' ' << it->inventory.Defense() << ' ' << it->inventory.HP()
+ << ' ' << it->lastlogin << endl;
ptr = ptr->Next();
}
}
return 0;
}
+ for (int x = 0; x < U_TABLE_SIZE; x++)
+ {
+ ListNode<aClient> *tempNode;
+ tempNode = players[x].First();
+ while (tempNode)
+ {
+ if (tempNode->getData()->stats->client)
+ logout(tempNode->getData()->stats->client);
+ tempNode = tempNode->Next();
+ }
+ players[x].deleteNodes();
+ }
+
while (infile.getline(buf, 1024, '\n'))
{
temp = new aClient;
p->setFlags(stringtoint(strtok(NULL, " ")));
password = strtok(NULL, " ");
- strcpy(p->password, password);
+ p->password = password;
+
temp->setNick("Not Playing");
#ifdef P10
temp->setRealNick("Not Playing");
tempname = strtok(NULL, " ");
if (tempname)
p->inventory.setHP(stringtoint(tempname));
- unsigned long hv = iHASH((unsigned char *) temp->stats->name);
+
+ tempname = strtok(NULL, " ");
+ if (tempname)
+ p->lastlogin = stringtoint(tempname);
+ else
+ p->lastlogin = time(NULL);
+
+ unsigned long hv = iHASH((unsigned char *) temp->stats->name.getString());
temp->stats->client = NULL;
players[hv].insertAtBack(temp);
return false;
else
{
- return passcmp(client->stats->password, plaintext);
+ return passcmp(client->stats->password.getString(), plaintext);
}
}
p->gold -= prices[wep - 1];
}
}
+ else
+ {
+ notice(s_GameServ, u, "SYNTAX: \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
+ }
}
else if (stricmp(cmd, "SELL" ) == 0)
{
notice(s_GameServ, u, " \ 2STORE BUY {ARMOR | WEAPON} \1fNUMBER\1f\ 2");
}
}
+ 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;
+ }
}
void do_inventory(char *u)
{
if (is_playing(from))
{
Pouch *p = &from->stats->inventory;
- notice(s_GameServ, nick, "Inventory for %s:", from->stats->name);
+ notice(s_GameServ, nick, "Inventory for %s:", from->stats->name.getString());
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());
aClient *user;
Player *p;
+
if (!(user = find(u)))
{
notice(s_GameServ, u, "Fatal Error. See a %S admin for help");
}
else if (stricmp(cmd, "LIST") == 0)
{
- notice(s_GameServ, u, "Here is a list of what we have to offer:");
- notice(s_GameServ, u, "1. Healing Potions for %ld Gold", 100 * p->level + (p->exp / 10));
- notice(s_GameServ, u, "2. Strength Potions for %ld Gold", 205 * p->level + (p->exp / 10));
- notice(s_GameServ, u, "3. Defense Potions for %ld Gold", 200 * p->level + (p->exp / 10));
- notice(s_GameServ, u, "4. HP Potions for %ld Gold", 230 * p->level + (p->exp / 10));
- notice(s_GameServ, u, "To buy a potion, type /msg %S TAVERN BUY #");
- notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 1 buys a healing potion!");
- notice(s_GameServ, u, "By something will ya!");
+ notice(s_GameServ, u, "Here is a list of what we have to offer:");
+ notice(s_GameServ, u, "1. Healing Potions for %ld Gold",
+ 1000 * p->level * 4);
+ notice(s_GameServ, u, "2. Strength Potions for %ld Gold",
+ 2500 * p->level * 4);
+ notice(s_GameServ, u, "3. Defense Potions for %ld Gold",
+ 3000 * p->level * 4);
+ notice(s_GameServ, u, "4. HP Potions for %ld Gold",
+ 2000 * p->level * 4);
+ notice(s_GameServ, u, "To buy a potion, type /msg %S TAVERN BUY #");
+ notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 1 buys a healing potion!");
}
else if (stricmp(cmd, "BUY") == 0)
{
char *chnum = strtok(NULL, " ");
- int num = stringtoint(chnum);
if (!chnum)
{
notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 1");
return;
}
+ int num = stringtoint(chnum);
+
if (num < 1 || num > 4)
{
notice(s_GameServ, u, "Invalid Choice!");
notice(s_GameServ, u, "Here is a list of what we have to offer:");
- notice(s_GameServ, u, "1. Healing Potions for %ld Gold", 100 * p->level + (p->exp / 10));
- notice(s_GameServ, u, "2. Strength Potions for %ld Gold", 205 * p->level + (p->exp / 10));
- notice(s_GameServ, u, "3. Defense Potions for %ld Gold", 200 * p->level + (p->exp / 10));
- notice(s_GameServ, u, "4. HP Potions for %ld Gold", 230 * p->level + (p->exp / 10));
+ notice(s_GameServ, u, "1. Healing Potions for %ld Gold",
+ 1000 * p->level * 4);
+ notice(s_GameServ, u, "2. Strength Potions for %ld Gold",
+ 2500 * p->level * 4);
+ notice(s_GameServ, u, "3. Defense Potions for %ld Gold",
+ 3000 * p->level * 4);
+ notice(s_GameServ, u, "4. HP Potions for %ld Gold",
+ 2000 * p->level * 4);
notice(s_GameServ, u, "To buy a potion, type /msg %S TAVERN BUY #");
notice(s_GameServ, u, "Example: /msg %S TAVERN BUY 1 buys a healing potion!");
return;
switch(num)
{
case 1:
- price = (100 * p->level) + (p->exp / 10);
+ price = (1000 * p->level * 4);
if (p->gold >= price)
{
notice(s_GameServ, u, "One healing potion coming right up!");
notice(s_GameServ, u, "You don't have enough gold!");
break;
case 2:
- price = (205 * p->level) + (p->exp / 10);
+ price = 2500 * p->level * 4;
if (p->gold >= price)
{
notice(s_GameServ, u, "One strength boost coming right up!");
notice(s_GameServ, u, "You don't have enough gold!");
break;
case 3:
- price = (200 * p->level) + (p->exp / 10);
+ price = 3000 * p->level * 4;
if (p->gold >= price)
{
notice(s_GameServ, u, "One defense boost coming right up!");
notice(s_GameServ, u, "You don't have enough gold!");
break;
case 4:
- price = (230 * p->level) + (p->exp / 10);
+ price = 2000 * p->level * 4;
if (p->gold >= price)
{
notice(s_GameServ, u, "One HP Potion coming right up!");
notice(s_GameServ, u, "You must be playing to use the bank!");
return;
}
-
+ else if (is_fighting(user))
+ {
+ notice(s_GameServ, u, "You can't go to the bank during a fight!");
+ return;
+ }
updateTS(user->stats);
if (stricmp(cmd, "BALANCE") == 0)
{
notice(s_GameServ, u, "I don't know how to convert alphabet letters into currency, sire!");
return;
}
-
+ if (stringtoint(amount) < 0)
+ {
+ notice(s_GameServ, u, "Sorry. This bank is not licensed "\
+ "to handle such sums of cash, noble Lord.");
+ return;
+ }
p = user->stats;
if (stricmp(cmd, "DEPOSIT") == 0)
}
+void do_dragon(char *u)
+{
+ aClient *user;
+
+ if (!(user = find(u)))
+ {
+ notice(s_GameServ, u, "Fatal error. Contact a(n) %S admin. buf: %s", strtok(NULL, ""));
+ return;
+ }
+ else if (isIgnore(user))
+ {
+ #ifdef DEBUGMODE
+ log("Ignoring %s.", user->getNick());
+ #endif
+ return;
+ }
+ else if (!is_playing(user))
+ {
+ notice(s_GameServ, u, "You must be playing to fight the dragon!");
+ return;
+ }
+ else if (is_fighting(user))
+ {
+ notice(s_GameServ, u, "You are already in a fight. How will you fight the almighty dragon!?");
+ return;
+ }
+ else if (!isAlive(user->stats))
+ {
+ notice(s_GameServ, u, "You're dead. Wait until tomorrow to see your master!");
+ return;
+ }
+ else if (user->stats->level < REALLEVELS)
+ {
+ notice(s_GameServ, u, "You fool! Only those strong enough "\
+ "to vanquish any foe should DARE fight the dragon!");
+ notice(s_GameServ, u, "To put it in terms you can understand: "\
+ "You are too weak. You must be Level %d!", REALLEVELS);
+ return;
+ }
+
+ updateTS(user->stats);
+
+ Player *p = user->stats;
+ p->fight = new Monster(&boss);
+ notice(s_GameServ, u, "You approach the dragon's lair cautiously.");
+ notice(s_GameServ, u, "The stench of sulfer fills the air as a "\
+ "deep, red fog rolls in. The air is filled with the "\
+ "heated mist of deadly fire from beyond the cave "\
+ "entrance.");
+ notice(s_GameServ, u, "You adjust your %s, tighten your grip on "\
+ "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->level - 1], weapons[p->level - 1]);
+ 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 "\
+ " staring into your soul! The eye is large... HUGE!");
+ 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!");
+ display_monster(u);
+}
+
void do_master(char *u)
{
aClient *user;
switch(p->level)
{
case 1:
- need = 100;
+ need = 200;
break;
case 2:
- need = 400;
+ need = 800;
break;
case 3:
- need = 1000;
+ need = 2000;
break;
case 4:
- need = 4000;
+ need = 8000;
break;
case 5:
- need = 10000;
+ need = 20000;
break;
case 6:
- need = 40000;
+ need = 80000;
break;
case 7:
- need = 100000;
+ need = 200000;
break;
case 8:
- need = 400000;
+ need = 800000;
break;
case 9:
- need = 1000000;
+ need = 2000000;
break;
case 10:
- need = 4000000;
+ need = 8000000;
break;
case 11:
- need = 10000000;
+ need = 20000000;
break;
- case 12:
+
+ case REALLEVELS:
need = p->exp + 1;
- notice(s_GameServ, u, "You are at level 12. You are the master. What's left? The DRAGON!");
+ notice(s_GameServ, u, "You are at level %d. You are the master. What's left? The DRAGON!", REALLEVELS);
+ return;
break;
default:
need = p->exp + 1; // Unknown level... don't let them fight a fake master!
see_master(u);
}
else
- notice(s_GameServ, u, "You are not worthy of fighting %s! You need %ld more experience.", masters[p->level - 1]->name, (need - p->exp));
+ notice(s_GameServ, u, "You are not worthy of fighting %s! You need %ld more experience.",
+ masters[p->level - 1]->name.getString(), (need - p->exp));
return;
}
else if (stricmp(cmd, "QUESTION") == 0)
{
if (p->exp >= need)
- notice(s_GameServ, u, "%s looks you up and down and decides you are more ready than you will ever be.", masters[p->level - 1]->name);
+ notice(s_GameServ, u, "%s looks you up and down and decides you are more ready than you will ever be.",
+ masters[p->level - 1]->name.getString());
else
- notice(s_GameServ, u, "You pathetic fool! You are no match for %s, %s!", masters[p->level - 1]->name, p->name);
+ notice(s_GameServ, u, "You pathetic fool! You are no match for %s, %s!",
+ masters[p->level - 1]->name.getString(), p->name.getString());
return;
}
void reset(Player *p)
{
+ myString *myname;
+ myname = new myString(p->name);
+
if (!p)
return;
p->reset();
+ p->name = *myname;
+
+ delete myname;
}
void updateTS(Player *p)
return;
#ifdef DEBUGMODE
- log("Old timestamp for %s: %ld", p->name, p->lastcommand);
+ log("Old timestamp for %s: %ld", p->name.getString(), p->lastcommand);
#endif
p->lastcommand = time(NULL);
#ifdef DEBUGMODE
- log("New timestamp for %s: %ld", p->name, p->lastcommand);
+ log("New timestamp for %s: %ld", p->name.getString(), p->lastcommand);
#endif
}
void timeOutEvent(Player *p)
{
- aClient *user = findplayer(p->name);
+ aClient *user = findplayer(p->name.getString());
if (!user || !p->client) // then they're not playing
return;
notice(s_GameServ, nick, "You timed out "\
"during a fight. You lose your turn!");
notice(s_GameServ, p->battle->getNick(),
- "%s hesitated for too long. Your move.", p->name);
+ "%s hesitated for too long. Your move.", p->name.getString());
clearYourTurn(p);
setYourTurn(p->battle->stats);
notice(s_GameServ, p->battle->getNick(),
"You and %s timed out at the same time."\
" Don't fight if you're just going to "\
- "sit there!", p->name);
+ "sit there!", p->name.getString());
notice(s_GameServ, user->getNick(),
"You and %s timed out at the same time."\
" Don't fight if you're just going to "\
- "sit there!", p->battle->stats->name);
+ "sit there!", p->battle->stats->name.getString());
logout(p->battle);
logout(user);
return;
notice(s_GameServ, u, "Resetting everyone's stats!");
resetall();
}
- else if ((user = findbyrealnick(nick)))
+ else if ((user = findplayer(nick)))
{
if (is_playing(user))
{
}
else
{
- #ifdef P10
- notice(s_GameServ, u, "%s is not playing.", user->getRealNick());
- #else
- notice(s_GameServ, u, "%s is not playing.", user->getNick());
- #endif
+ notice(s_GameServ, u, "Resetting %s", user->stats->name.getString());
+ reset(user->stats);
}
}
else
}
}
+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)
+ return false;
+ }
+
+ delete []filename;
+ return true;
+}
bool load_monsters()
{
+ char *filename;
ifstream infile;
- infile.open("monsters.dat");
-
char *buf;
+ buf = new char[2048];
- if (infile.fail())
+ 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 monsters.dat");
+ log("Error opening %s", filename);
return false;
}
- init_monsters();
- buf = new char[2048];
#ifdef DEBUGMODE
- log("Loading monsters from monsters.dat");
+ log("Loading monsters from %s", filename);
#endif
- for (int l = 0; l < REALLEVELS; l++)
- {
- for (int m = 0; m < MONSTERS;)
+ while (infile.getline(buf, 2048))
{
- infile.getline(buf, 2048);
+ if (buf[0] == '^')
+ break;
if (buf[0] == '\n' || buf[0] == '\0' || buf[0] == '#')
continue;
- else
- {
- strcpy(monsters[l][m]->name, strtok(buf, "~"));
- strcpy(monsters[l][m]->weapon, strtok(NULL, "~"));
- monsters[l][m]->strength = stringtoint(strtok(NULL, "~"));
- monsters[l][m]->gold = stringtoint(strtok(NULL, "~"));
- monsters[l][m]->exp = stringtoint(strtok(NULL, "~"));
- monsters[l][m]->maxhp = stringtoint(strtok(NULL, "~"));
- monsters[l][m]->hp = monsters[l][m]->maxhp;
- strcpy(monsters[l][m]->death, strtok(NULL, ""));
- m++;
- }
+ Monster *temp;
+ temp = new Monster;
+
+ temp->name = strtok(buf, "~");
+ temp->weapon = strtok(NULL, "~");
+ temp->death = strtok(NULL, "~");
+
+ levels[level - 1].monsters.insertAtBack_RLN(temp);
+ delete temp;
}
+ delete [] filename;
+ infile.close();
}
delete [] buf;
return true;
}
-
-// this will be hash.cpp start
-// thank you wcampbel
-unsigned long sHASH(const unsigned char *name)
-{
- unsigned long h = 0, g;
-
- while (*name)
- {
- h = (h << 4) + (*name++); // Case sensitive for numerics
- if ((g = (h & 0xF0000000)))
- h ^= g >> 24;
- h &= ~g;
- }
- return h % U_TABLE_SIZE;
-}
-
-unsigned long iHASH(const unsigned char *name)
-{
- unsigned long h = 0, g;
-
- while (*name)
- {
- h = (h << 4) + tolower(*name++);
- if ((g = (h & 0xF0000000)))
- h ^= g >> 24;
- h &= ~g;
- }
- return h % U_TABLE_SIZE;
-}
-
-// this will be hash.cpp end