]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/gameserv.cpp
Changed configscript.cpp to a smaller shell script
[irc/gameservirc.git] / gameserv / gameserv.cpp
index 99d3c5efdc53f9a9e9c7c447c724e981c22a91f0..026b8f7ca43dcfbf486e021da48eb024985165c4 100644 (file)
@@ -133,15 +133,15 @@ char *weapons[WNA] = {  "Fists", "Stick", "Dagger", "Quarterstaff",  "Short Swor
                        "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};
@@ -463,6 +463,22 @@ void notice(const char *source, const char *dest, const char *fmt, ...)
     if (fmt[0] == '\0')
        return;
 
+    char *commanduse;
+    commanduse = new char[16];
+
+    #ifdef P10
+       if (isUsePrivmsg())
+           strcpy(commanduse, "P");
+       else
+           strcpy(commanduse, "N");
+    #else
+
+       if (isUsePrivmsg())
+           strcpy(commanduse, "PRIVMSG");
+       else
+           strcpy(commanduse, "NOTICE");
+    #endif
+
     va_list args;
     char *input;
     const char *t = fmt;
@@ -473,9 +489,9 @@ void notice(const char *source, const char *dest, const char *fmt, ...)
        dest++;
 
       #if !defined(P10)
-       sprintf(input, ":%s NOTICE %s :", source, dest);
+       sprintf(input, ":%s %s %s :", source, commanduse, dest);
       #else
-       sprintf(input, "%s O %s :", gsnum, dest);
+       sprintf(input, "%s %s %s :", gsnum, commanduse, dest);
       #endif
 
        dest--;
@@ -483,9 +499,9 @@ void notice(const char *source, const char *dest, const char *fmt, ...)
     else
     {
       #if !defined(P10)
-       sprintf(input, ":%s NOTICE %s :", source, dest);
+       sprintf(input, ":%s %s %s :", source, commanduse, dest);
       #else
-       sprintf(input, "%s O %s :", gsnum, dest);
+       sprintf(input, "%s %s %s :", gsnum, commanduse, dest);
       #endif
     }
 
@@ -513,6 +529,7 @@ void notice(const char *source, const char *dest, const char *fmt, ...)
     #endif
     sprintf(input, "%s%s", input, "\r\n");
     sock_puts(sock, input);
+    delete [] commanduse;
     delete [] input;
 va_end(args);
 }
@@ -608,12 +625,15 @@ void do_list(char *u)
 void do_logout(char *u)
 {
     aClient *user;
+    char *name = strtok(NULL, " ");
+
     if (!(user = find(u)))
     {
        notice(s_GameServ, u, "Fatal error. Cannot find aClient. "\
                "Buf: %s LOGOUT", u);
        log("Could not find aClient Buf: %s LOGOUT", 
                u);
+       return;
     }
     else if (isIgnore(user))
     {
@@ -622,18 +642,38 @@ void do_logout(char *u)
        #endif
        return;
     }
-    else if (!is_playing(user))
-    {
-       notice(s_GameServ, u, "You're not logged in!");
-    }
-    else if (is_fighting(user))
+
+    if (name)
     {
-       notice(s_GameServ, u, "You can't logout while fighting!");
+       if (!isAdmin(user))
+       {
+           notice(s_GameServ, u, "You must be a %S admin to use this command!");
+       }
+       else if (!(user = findplayer(name)))
+       {
+           notice(s_GameServ, u, "Couldn't find a player named %s", name);
+       }
+       else
+       {
+           notice(s_GameServ, u, "Logging out %s", user->stats->name);
+           logout(user);
+       }
     }
-    else
+    else if (!name)
     {
-       notice(s_GameServ, u, "You have left the fields. You have lived to kill another day!");
-       logout(user);
+       if (!is_playing(user))
+       {
+           notice(s_GameServ, u, "You're not logged in!");
+       }
+       else if (is_fighting(user))
+       {
+           notice(s_GameServ, u, "You can't logout while fighting!");
+       }
+       else
+       {
+           notice(s_GameServ, u, "You have left the fields. You have lived to kill another day!");
+           logout(user);
+       }
     }
 }
 
@@ -732,13 +772,17 @@ void do_register(char *u)
     {
         if (!is_playing(user))
         {
+           ListNode<aClient> *temp;
            user->stats = new Player(user);
            user->stats->client = user; // Set the backwards pointer
-           strcpy(user->stats->password, crypt(password, salt));
-           strcpy(user->stats->name, name);
+           user->stats->reset(); // set the user up
+           strncpy(user->stats->password, crypt(password, salt), 255);
+           strncpy(user->stats->name, name, 255);
            unsigned long hv = iHASH((unsigned char *) name);
            updateTS(user->stats);
-           players[hv].insertAtBack(user);
+           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);
            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);
@@ -871,104 +915,104 @@ void init_masters()
 
     strcpy(masters[0]->name, "Old Bones");
     strcpy(masters[0]->weapon, "Dull Sword Cane");
-    masters[0]->strength = 25;
+    masters[0]->strength = 30;
     masters[0]->gold = 0;
     masters[0]->exp = 0;
-    masters[0]->maxhp = 30;
-    masters[0]->hp = 30;
+    masters[0]->maxhp = 35;
+    masters[0]->hp = 35;
     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!");
 
     strcpy(masters[1]->name, "Master Chang");
     strcpy(masters[1]->weapon, "Nanchaku");
-    masters[1]->strength = 35;
+    masters[1]->strength = 45;
     masters[1]->gold = 0;
     masters[1]->exp = 0;
-    masters[1]->maxhp = 40;
-    masters[1]->hp = 40;
+    masters[1]->maxhp = 51;
+    masters[1]->hp = 51;
     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.");
 
     strcpy(masters[2]->name, "Chuck Norris");
     strcpy(masters[2]->weapon, "Ranger Kick");
-    masters[2]->strength = 95;
+    masters[2]->strength = 83;
     masters[2]->gold = 0;
     masters[2]->exp = 0;
-    masters[2]->maxhp = 70;
-    masters[2]->hp = 70;
+    masters[2]->maxhp = 100;
+    masters[2]->hp = 100;
     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!");
 
 
     strcpy(masters[3]->name, "Mr. Miagi");
     strcpy(masters[3]->weapon, "Petrified Bonsai");
-    masters[3]->strength = 130;
+    masters[3]->strength = 159;
     masters[3]->gold = 0;
     masters[3]->exp = 0;
-    masters[3]->maxhp = 120;
-    masters[3]->hp = 120;
+    masters[3]->maxhp = 165;
+    masters[3]->hp = 165;
     strcpy(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 = 145;
+    masters[4]->strength = 260;
     masters[4]->gold = 0;
     masters[4]->exp = 0;
-    masters[4]->maxhp = 200;
-    masters[4]->hp = 200;
+    masters[4]->maxhp = 232;
+    masters[4]->hp = 232;
     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!");
 
     strcpy(masters[5]->name, "Jet Li");
     strcpy(masters[5]->weapon, "Motorcycle");
-    masters[5]->strength = 170;
+    masters[5]->strength = 325;
     masters[5]->gold = 0;
     masters[5]->exp = 0;
-    masters[5]->maxhp = 400;
-    masters[5]->hp = 400;
+    masters[5]->maxhp = 504;
+    masters[5]->hp = 504;
     strcpy(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 = 195;
+    masters[6]->strength = 380;
     masters[6]->gold = 0;
     masters[6]->exp = 0;
-    masters[6]->maxhp = 600;
-    masters[6]->hp = 600;
+    masters[6]->maxhp = 1078;
+    masters[6]->hp = 1078;
     strcpy(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 = 220;
+    masters[7]->strength = 462;
     masters[7]->gold = 0;
     masters[7]->exp = 0;
-    masters[7]->maxhp = 800;
-    masters[7]->hp = 800;
+    masters[7]->maxhp = 2207;
+    masters[7]->hp = 2207;
     strcpy(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 = 285;
+    masters[8]->strength = 511;
     masters[8]->gold = 0;
     masters[8]->exp = 0;
-    masters[8]->maxhp = 1200;
-    masters[8]->hp = 1200;
+    masters[8]->maxhp = 2780;
+    masters[8]->hp = 2780;
     strcpy(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 = 375;
+    masters[9]->strength = 618;
     masters[9]->gold = 0;
     masters[9]->exp = 0;
-    masters[9]->maxhp = 1800;
-    masters[9]->hp = 1800;
+    masters[9]->maxhp = 3046;
+    masters[9]->hp = 3046;
     strcpy(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 = 590;
+    masters[10]->strength = 725;
     masters[10]->gold = 0;
     masters[10]->exp = 0;
-    masters[10]->maxhp = 2500;
-    masters[10]->hp = 2500;
+    masters[10]->maxhp = 3988;
+    masters[10]->hp = 3988;
     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.");
 }
 
@@ -1211,7 +1255,7 @@ void do_fight(char *u)
        // 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->level);
+               battle->stats->name);
     }
     else if (battle->stats->level - ni->stats->level > maxafightdistance)
     {
@@ -1303,7 +1347,7 @@ void do_use(char *u)
        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 += 3 + rand() % 8; // 3-10 Strength Added
+       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();
     }
@@ -1317,7 +1361,7 @@ void do_use(char *u)
        int olddefense = user->stats->defense;
        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 += 3 + rand() % 8; // 3 - 10 Defense Added
+       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();
     }
@@ -1330,7 +1374,9 @@ void do_use(char *u)
        }
        int oldHP = user->stats->maxhp;
        notice(s_GameServ, u, "You feel your life growing longer as you drink the green glowing liquid.");
-       user->stats->maxhp += 5 + rand() % 6; // 5-10 Maxhp
+       user->stats->maxhp += 2 + 
+       (rand() % 100 > 70 ? (rand() % 7) : (rand() % 2) );
+
        notice(s_GameServ, u, "You gain %d Maximum hit points!", user->stats->maxhp - oldHP);
        p->decHP();
     }
@@ -1986,6 +2032,7 @@ int save_gs_dbase()
     while(ptr)
     {
        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 << ' '
@@ -2302,6 +2349,13 @@ void do_store(char *u)
            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)
 {
@@ -2386,10 +2440,10 @@ void do_tavern(char *u)
     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", 1000 * p->level + (p->exp / 10));
-       notice(s_GameServ, u, "2. Strength Potions for %ld Gold", 2050 * p->level + (p->exp / 10));
-       notice(s_GameServ, u, "3. Defense Potions for %ld Gold", 2000 * p->level + (p->exp / 10));
-       notice(s_GameServ, u, "4. HP Potions for %ld Gold", 2300 * p->level + (p->exp / 10));
+       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!");
@@ -2409,10 +2463,10 @@ void do_tavern(char *u)
        {
            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", 1000 * p->level + (p->exp / 10));
-           notice(s_GameServ, u, "2. Strength Potions for %ld Gold", 2050 * p->level + (p->exp / 10));
-           notice(s_GameServ, u, "3. Defense Potions for %ld Gold", 2000 * p->level + (p->exp / 10));
-           notice(s_GameServ, u, "4. HP Potions for %ld Gold", 2300 * p->level + (p->exp / 10));
+           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!");
            return;
@@ -2420,7 +2474,7 @@ void do_tavern(char *u)
        switch(num)
        {
            case 1:
-               price = (1000 * p->level) + (p->exp / 10);
+               price = (100 * p->level) + (p->exp / 10);
                if (p->gold >= price)
                {
                    notice(s_GameServ, u, "One healing potion coming right up!");
@@ -2431,7 +2485,7 @@ void do_tavern(char *u)
                    notice(s_GameServ, u, "You don't have enough gold!");
                break;
            case 2:
-               price = (2050 * p->level) + (p->exp / 10);
+               price = (205 * p->level) + (p->exp / 10);
                if (p->gold >= price)
                {
                    notice(s_GameServ, u, "One strength boost coming right up!");
@@ -2442,7 +2496,7 @@ void do_tavern(char *u)
                    notice(s_GameServ, u, "You don't have enough gold!");
                break;
            case 3:
-               price = (2000 * p->level) + (p->exp / 10);
+               price = (200 * p->level) + (p->exp / 10);
                if (p->gold >= price)
                {
                    notice(s_GameServ, u, "One defense boost coming right up!");
@@ -2453,7 +2507,7 @@ void do_tavern(char *u)
                    notice(s_GameServ, u, "You don't have enough gold!");
                break;
            case 4:
-               price = (2300 * p->level) + (p->exp / 10);
+               price = (230 * p->level) + (p->exp / 10);
                if (p->gold >= price)
                {
                    notice(s_GameServ, u, "One HP Potion coming right up!");
@@ -2509,7 +2563,11 @@ void do_bank(char *u)
        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)
     {
@@ -2651,6 +2709,11 @@ void do_master(char *u)
        #endif
        return;
     }
+    else if (!is_playing(user))
+    {
+       notice(s_GameServ, u, "You must be playing to see your master!");
+       return;
+    }
     else if (is_fighting(user))
     {
        notice(s_GameServ, u, "You're in the middle of a fight! Pay attention!");
@@ -2661,13 +2724,9 @@ void do_master(char *u)
        notice(s_GameServ, u, "You're dead. Wait until tomorrow to see your master!");
        return;
     }
-    else if (!is_playing(user))
-    {
-       notice(s_GameServ, u, "You must be playing to see your master!");
-       return;
-    }
 
     updateTS(user->stats);
+
     char *cmd = strtok(NULL, " ");
     Player *p = user->stats;
     long int need = 0;
@@ -2855,7 +2914,7 @@ void do_refresh(char *u)
        notice(s_GameServ, u, "Refreshing everyone's stats!");
        refreshall();
     }
-    else if ((user = findbyrealnick(nick)))
+    else if ((user = findplayer(nick)))
     {
        if (is_playing(user))
        {
@@ -2943,7 +3002,7 @@ void timeOutEvent(Player *p)
 {
     aClient *user = findplayer(p->name);
 
-    if (!user) // then they're not playing
+    if (!user || !p->client) // then they're not playing
        return;
 
     char *nick = user->getNick();
@@ -2988,6 +3047,8 @@ void timeOutEvent(Player *p)
     }
     else if (!player_fight(user))
     {
+      if (isAlive(user->stats) && user->stats->gold > 0)
+      {
        // Place fun stuff here :)
        int randnum = 1 + rand() % 100; // 1-100
        #define GSN(s) notice(s_GameServ, nick, s)
@@ -3026,7 +3087,7 @@ void timeOutEvent(Player *p)
            GSN2("They stole %d gold from you!", stolen);
            user->stats->gold -= stolen;
        }
-
+      }
 
        // Always log out the user
        logout(user);