]> jfr.im git - irc/gameservirc.git/commitdiff
Added the USE command and a few other changes to code
authorkainazzzo <redacted>
Sat, 29 Nov 2003 08:25:15 +0000 (08:25 +0000)
committerkainazzzo <redacted>
Sat, 29 Nov 2003 08:25:15 +0000 (08:25 +0000)
git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@75 bc333340-6410-0410-a689-9d09f3c113fa

gameserv/c_forest.cpp
gameserv/extern.h
gameserv/gameserv.cpp
gameserv/helpfiles/help
gameserv/helpfiles/use [new file with mode: 0644]
gameserv/pouch.h

index df681627ba79a8fbc7c9f0e85a59417f426e2623..9f35cdce2af85b50e0cce09eb02475239dd93299 100644 (file)
@@ -68,7 +68,8 @@ void do_forest(char *u)
            {
                p->fight = new Monster(monsters[p->level - 1][num]);
                notice(s_GameServ, u, "You have found \ 2%s\ 2!", p->fight->name);
-               p->fight->hp = p->fight->maxhp;
+               if (p->fight->hp < p->fight->maxhp)
+                   p->fight->hp = p->fight->maxhp;
 
                p->battle = NULL; // Just to make sure
                p->master = NULL; // Just to make sure
index 99ed2563bfdb0ce6a51e2d58c1f1bca3222ec2f0..c9e1f1152a0a78d9324f163201a779007b49ac63 100644 (file)
@@ -136,7 +136,7 @@ E void do_run(char *u);
 E void do_stats(char *u);
 E void do_store(char *u);
 E void do_tavern(char *u);
-E void do_visit(char *u);
+E void do_use(char *u);
 E void see_mystic(char *u);
 
 E void showstats(const char *u, const char *nick);
index 92e6aee0a84032f720c8dda1c608475707d9f09b..fff3388044b4d7d8c32605381d23305756cb5b7c 100644 (file)
@@ -68,6 +68,7 @@ bool master_fight(aClient *user);
 void display_help(char *u, char *file = NULL);
 void display_monster(char *u);
 void display_players(char *u);
+void display_players(aClient *user);
 long int chartoint(char ch);
 int isstringnum(char *num);
 long int pow (int x, int y);
@@ -102,11 +103,13 @@ void do_run(char *u);
 void do_stats(char *u);
 void do_store(char *u);
 void do_tavern(char *u);
+void do_use(char *u);
 void see_master(char *u);
 
 void showstats(const char *u, const char *nick);
 void showinventory(aClient *from, aClient *to = NULL);
 void showBankBalance(const char *u);
+void end_turn(aClient *user);
 
 #define WNA 16
 char *weapons[WNA] = {  "Fists", "Stick", "Dagger", "Quarterstaff",  "Short Sword", 
@@ -167,6 +170,8 @@ void gameserv(char *source, char *buf)
        do_attack(source);
     } else if (stricmp(cmd, "RUN") == 0) {
        do_run(source);
+    } else if (stricmp(cmd, "USE") == 0) {
+       do_use(source);
     } else if (stricmp(cmd, "HEAL") == 0) {
        do_heal(source);
     } else if (stricmp(cmd, "INVENTORY") == 0) {
@@ -1935,8 +1940,22 @@ void display_players(char *u)
                                                        battle->stats->hp);
 
        notice(s_GameServ, u, "Here are your commands:");
-       notice(s_GameServ, u, "/msg %s attack", s_GameServ);
-       notice(s_GameServ, u, "/msg %s run", s_GameServ);
+       notice(s_GameServ, u, "/msg %S attack");
+       notice(s_GameServ, u, "/msg %S run");
+       notice(s_GameServ, u, "What will you do?");
+    }
+}
+void display_players(aClient *user)
+{
+    char *u = user->getNick();
+    if (is_playing(user) && player_fight(user))
+    {
+       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->getNick(), 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");
        notice(s_GameServ, u, "What will you do?");
     }
 }
@@ -2102,6 +2121,77 @@ void do_fight(char *u)
         display_players(u);
     }
 }
+void do_use(char *u)
+{
+    aClient *user;
+    Pouch *p;
+
+    char *item = strtok(NULL, " ");
+
+    if (!item)
+    {
+       notice(s_GameServ, u, "SYNTAX: USE ITEM");
+       notice(s_GameServ, u, "Type /msg %S HELP USE for more information.");
+       return;
+    }
+    else if (!(user = find(u)))
+    {
+       notice(s_GameServ, u, "Fatal Error in do_use. Contact a(n) %S Admin");
+       return;
+    }
+    else if (!is_playing(user))
+    {
+       notice(s_GameServ, u, "You must be playing to use items!");
+       return;
+    }
+
+    p = &user->stats->inventory;
+
+    if (stricmp(item, "HEALTH") == 0)
+    {
+       if (p->Healing() <= 0)
+       {
+           notice(s_GameServ, u, "You are out of Health Potions!");
+           return;
+       }
+       int oldhealth = user->stats->hp;
+       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);
+       p->decHealing();
+    }
+    else if (stricmp(item, "STRENGTH") == 0)
+    {
+       if (p->Strength() <= 0)
+       {
+           notice(s_GameServ, u, "You are out of Strength Potions!");
+           return;
+       }
+       int oldstrength = user->stats->strength;
+       notice(s_GameServ, u, "As you grip the flask containing pure power, you feel adrenaline coarse through your veins!");
+       notice(s_GameServ, u, "In one swallow you drink the potion and feel your muscle fibers bulging andgrowing!");
+       user->stats->strength += rand() % 3;
+       notice(s_GameServ, u, "You gain %d Strength points!", user->stats->strength - oldstrength);
+       p->decStrength();
+    }
+    else if (stricmp(item, "DEFENSE") == 0)
+    {
+       if (p->Defense() <= 0)
+       {
+           notice(s_GameServ, u, "You are out of Defense Potions!");
+           return;
+       }
+       int olddefense = user->stats->strength;
+       notice(s_GameServ, u, "You drink the foul tasting viscous liquid while pinching your nose in disgust.");
+       notice(s_GameServ, u, "It tasted bad, but you feel like you are unbeatable!");
+       user->stats->defense += rand() % 3;
+       notice(s_GameServ, u, "You gain %d Defense points!", user->stats->defense - olddefense);
+       p->decDefense();
+    }
+
+    end_turn(user); // If they're fighting, end their turn
+}
 void do_run(char *u)
 {
     aClient *user;
@@ -2142,6 +2232,90 @@ void do_run(char *u)
     }
     p->battle = NULL;
 }
+
+void end_turn(aClient *user)
+{
+    char *nick, *u = user->getNick();
+    Monster *fight;
+    aClient *battle;
+    int mhit;
+
+    nick = new char[strlen(user->getNick()) + 1];
+
+    if (!user || !is_playing(user) || !is_fighting(user))
+       goto endturn;
+
+    if (!player_fight(user) && !master_fight(user))
+       fight = user->stats->fight;
+    else
+       fight = user->stats->master;
+    battle = user->stats->battle;
+
+    if (!player_fight(user))
+    {
+        // Opponent's Hit
+        mhit = (fight->strength / 2) +
+               (rand() % (fight->strength / 2) - (user->stats->defense +
+                arbonus[user->stats->armor]));
+    }
+    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]));
+    }
+    if (!player_fight(user))
+    {
+
+        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);
+        }
+        else if (mhit <= 0)
+            notice(s_GameServ, u, "%s completely misses you!", fight->name);
+
+        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 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->fight = NULL;
+               user->stats->alive = false;
+                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);
+                user->stats->fight = NULL;
+                user->stats->master = NULL;
+               goto endturn;
+            }
+        }
+        else
+        {
+            if (mhit > 0)
+                user->stats->hp -= mhit;
+            display_monster(u);
+            goto endturn;
+        }
+    }
+    else
+    {
+        user->stats->yourturn = 0;
+        battle->stats->yourturn = 1;
+        display_players(battle);
+    }
+endturn:
+    delete nick;
+}
+
 void do_attack(char *u)
 {
     int hit, mhit;
@@ -2149,11 +2323,16 @@ void do_attack(char *u)
     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 (!is_playing(ni))
     {
        notice(s_GameServ, u, "You're not playing!");
        return;
     }
-    else if (!ni->stats->fight && !ni->stats->battle && !ni->stats->master)
+    else if (!is_fighting(ni))
     {
        notice(s_GameServ, u, "You're not in battle!");
        return;
index 4c5f9a17d1527c1545cab0735901dabc32c67e7c..e4e9b205b55cee829f776d00c0821e7044cab509 100644 (file)
@@ -18,5 +18,6 @@ Here are the basic commands available to everyone:
     \ 2STATS\ 2           \1fGet a stats listing of you or another player in the realm\1f
     \ 2STORE\ 2           \1fBuy and Sell weapons and armor\1f
     \ 2TAVERN\ 2          \1fBuy and Sell Potions\1f
+    \ 2USE\ 2             \1fUse Items in your Inventory\1f
 
 Further help on individual commands can be accessed by typing /msg %S \ 2HELP\ 2 \ 2\1fcommand\1f\ 2
diff --git a/gameserv/helpfiles/use b/gameserv/helpfiles/use
new file mode 100644 (file)
index 0000000..1b14aca
--- /dev/null
@@ -0,0 +1,6 @@
+This command lets you use items and potions that you may be carrying.
+
+SYNTAX: /msg %S USE {HEALTH | STRENGTH | DEFENSE}
+Example: /msg %S USE HEALTH
+Example: /msg %S USE STRENGTH
+Example: /msg %S USE DEFENSE
index ece1c7149086d1c2a7d985d9f8799b6042205d91..74176799a099d7a9cdd27f2dc586a3769a33dc44 100644 (file)
@@ -25,6 +25,10 @@ class Pouch {
     // Add one Defense potion
     int incDefense() { return setDefense(Defense() + 1); };
 
+    int decHealing() { return setHealing(Healing() - 1); };
+    int decStrength() { return setStrength(Strength() - 1); };
+    int decDefense() { return setDefense(Defense() - 1); };
+
     // Reset all potions to 0
     void reset() { setHealing(0); setStrength(0); setDefense(0); };