X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/a51f0dcd433a69431a61f5918808f6b998a8e8ab..016a160fafb037639d840c29dfede4b73ce52109:/gameserv/gameserv.cpp diff --git a/gameserv/gameserv.cpp b/gameserv/gameserv.cpp index e8bc8b4..fbe8ded 100644 --- a/gameserv/gameserv.cpp +++ b/gameserv/gameserv.cpp @@ -111,6 +111,7 @@ void do_register(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); @@ -207,6 +208,8 @@ void gameserv(char *source, char *buf) 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) { @@ -470,7 +473,7 @@ void notice(const char *source, const char *dest, const char *fmt, ...) if (isUsePrivmsg()) strcpy(commanduse, "P"); else - strcpy(commanduse, "N"); + strcpy(commanduse, "O"); #else if (isUsePrivmsg()) @@ -576,6 +579,8 @@ char *strtok(char *str, const char *delim) 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); @@ -591,25 +596,29 @@ void do_list(char *u) ListNode *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); + #else + notice(s_GameServ, u, "IRC: %s Game: %s", temp->getData()->getNick(), + temp->getData()->stats->name); + #endif + } temp = temp->Next(); } @@ -1220,19 +1229,21 @@ void do_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); - * } - */ + +/* 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); + display_players(u); + } +*/ else if (stricmp(ni->stats->name, battle->stats->name) == 0) { notice(s_GameServ, u, "Are you trying to commit suicide!?"); @@ -1497,6 +1508,7 @@ void end_turn(aClient *user) "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; @@ -1676,6 +1688,7 @@ void do_attack(char *u) "of your experience!"); 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; @@ -2695,6 +2708,69 @@ void do_bank(char *u) } +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."); + 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; @@ -2745,41 +2821,43 @@ void do_master(char *u) 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!