//Casino Slots written by Nikola Sarcevic of Manga Nation
//V1.1 by DSL( Dave Leverich) of Top Secret. topsecret.wolfpaw.net:6942 (defunct)
//DSL is Skol/Zivilyn on Ansalonmud.com ansalon.wolfpaw.net:8679

// Helpfile
/*
The Casino Slots have ten possible results in each roll:  cherry, plum,
grape, watermelon, orange, lemon, bar, double bar, triple bar, or seven. 
Getting three of the same results in a row (this counts diagonally,
horizontally, or vertically) wins.  The amount you win from that particular
result depends on what it is, the result calculations are as follows:
{x
{RCHERRY{x (any) (any)  - Win your bet + 1/4 (horizontally only).
{RCHERRY CHERRY{x (any) - Win your bet + 1/2 (horizontally only).
{RCHERRY{x x3           - Win the amount you bet.
{mPLUM{x x3             - Win double the amount you bet.
{MGRAPE{x x3            - Win triple the amount you bet.
{RWATERMELON{x x3       - Win the amount you bet x 4.
{yORANGE{x x3           - Win the amount you bet x 5.
{YLEMON{x x3            - Win the amount you bet x 6.
{DBAR{x x3              - Win the amount you bet x 7.
{R2{DBAR{x x3             - Win the amount you bet x 8.
{R3{DBAR{x x3             - Win the amount you bet x 9.
{BSEVEN{x x3            - Win the amount you bet x 10.
{BSEVEN{x x6            - Jackpot, varies(must be aligned diagonally, both
                      ways making an 'X').
{x
You may bet 25 cents, 50 cents, 1/2/4/8/10 or 20 dollars.
SYNTAX:
     slot play .25, slot play 25 cents, slot play 25
     slot play 4, slot play 4 bucks, slot play 4 dollars... etc etc
{x
(Casino Slots written by Nikola Sarcevic of Manga Nation)
(Modified and heavily tweaked by Skol, Progressive Slots by Skol for Top Secret)
*/




//The main functions, in misc.c (or some other file you like).

// deduct bet from a character - This added by DSL to fix money problems in Slots

void deduct_bet (CHAR_DATA * ch, int bet)
{
    int silver = 0, gold = 0;

    silver = UMIN (ch->silver, bet);

    if (silver < bet)
    {
        gold = ((bet - silver + 99) / 100);
        silver = bet - 100 * gold;
    }

    ch->gold -= gold;
    ch->silver -= silver;

    if (ch->gold < 0)
    {
        bug ("deduct bet: gold %d < 0", ch->gold);
        ch->gold = 0;
    }
    if (ch->silver < 0)
    {
        bug ("deduct bet: silver %d < 0", ch->silver);
        ch->silver = 0;
    }
}


// - Slot Machines by Nikola(manga.thedigitalrealities.com port: 6969)
// This short function is for showing the result after it is selected.

void show_slot(CHAR_DATA *ch, int num)
{
    switch(num)
    {
        case 1:
          send_to_char("   {Rcherry{X   ",ch);
          break;
        case 2:
          send_to_char("    {mplum{X    ",ch);
          break;
        case 3:
          send_to_char("   {Mgrape{X    ",ch);
          break;
        case 4:
          send_to_char(" {Gwatermelon{X ",ch);
          break;
        case 5:
          send_to_char("   {yorange{X   ",ch);
          break;
        case 6:
          send_to_char("   {Ylemon{X    ",ch);
          break;
        case 7:
          send_to_char("    {Dbar{X     ",ch);
          break;
        case 8:
          send_to_char("    {Y2{Dbar{X    ",ch);
          break;
        case 9:
          send_to_char("    {R3{Dbar{X    ",ch);
          break;
        case 10:
          send_to_char("   {Bseven{X    ",ch);
          break;
    }
return;
}

// Rolls the slots.

int roll(void)
{
        int num;
        num = number_range(1,10);
        return num;
}



// The main Slots function

void do_slot(CHAR_DATA *ch, char *argument) 
{
        OBJ_DATA *slot=NULL, *obj;
        char arg1[MAX_INPUT_LENGTH];
        char arg2[MAX_INPUT_LENGTH];
        char buf[MSL];
        bool CanPlay = TRUE;
        bool winner = FALSE;
        int winnings=0, basebet=0;
        int sa=0, sb=0, sc=0, sd=0, se=0, sf=0, sg=0, sh=0, si=0;

        argument = one_argument( argument, arg1 );
        argument = one_argument( argument, arg2 );

        // No mobs playing slots
        if(IS_NPC(ch))
        {
          send_to_char("Mobs cannot gamble.\n\r",ch);
          return;
        }

	    // Check the room for the object.
        for ( obj = object_list; obj != NULL; obj = obj->next )
        {
          if(!obj->in_room)
            continue;
          if(obj->in_room != ch->in_room)
            continue;
          if (obj->item_type == ITEM_SLOT_MACHINE )
          {
            slot = obj;
            break;
          }
        }
        // No Slot Machine, end it.
        if(slot == NULL)
        {
          send_to_char("There's no slot machine here.\n\r",ch);
          return;
        }

        if(arg1[0] == '\0')
        {
         switch (number_range (0,4))
            {
            case 0:
                send_to_char("The lovely waitress walks up and says '{gYou need to type Slot Play (amount){x'\n\r"
                             "She then turns away and walks off with a sultry swing to her perfect behind.\n\r",ch);
                   break;
            case 1:
                   send_to_char("A rather homely waitress passes by with the drink tray.\n\r"
                                "The waitress says '{gHey, you gotta type 'Slot Play (amount){x'\n\r"
                                "She turns and walks away with a limp.\n\r",ch);
                   break;
            case 2:
                   send_to_char("An amazing waitress walks over and bends down in front of you at the machine.\n\r"
                                "The waitress says '{gSugar, you need to type 'Slot Play (amount){x'\n\r"
                                "\n\r...You're not sure if you heard her though, has her amazing breasts brushed your arm!\n\r",ch);
                   break;
            case 3:
                   send_to_char("A waiter named Juan walks up with a swinging gate.\n\r"
                                "Juan says with a Cuban accent '{gHoney, you need to type 'Slot Play (amount){x'\n\r"
                                "He gives you a wink and walks away with a saunter.\n\r",ch);
                   break;
            case 4:
                   send_to_char("An amazing waitress walks over and bends down giving you an eyefull.\n\r"
                                "The waitress says '{gSugar, you need to type 'Slot Play (amount){x'\n\r"
                                "\n\r",ch);
                   send_to_char("{r      ,8X--------8,{x                  {r`88,\n\r"
                                "{r     ,8X---------X8,{x     I,          {r8X-8,\n\r"
                                "{r    ,8X-----------X8,{x     I,        {r`8X-88,\n\r"
                                "{r   ,8X-------------X8b,{x    I,        {r8XXX-88I,\n\r"
                                "{r   8X----------------XX8,{x   I        {r8XX---XX8,\n\r"
                                "{r  8X-------------------X8,{x  I        {r8X------XX8,\n\r",ch);
                   send_to_char("{r  8X------Xz--zX--------X8,{x 8        {r8X-----X---X8,\n\r"
                                "{r  8X-------XzzX---------X8,{x 8       {r(8X------XXX-8,\n\r"
                                "{r  `8X--------------------X,{x 8,     {r,8X---------X8\n\r"
                                "{r    88X------------------X,{x 8     {r,8X---------X8{x\n\r"
                                "\n\r...But you barely hear a word as your eyes are glued to her phenomenal chest.\n\r",ch);
                   break;
            default:
                   send_to_char("You have to use the proper syntax, slot play (bet amount).\n\r", ch);
            }
           return;
        }


	//Now for the fun part.

        else if(!strcmp(arg1, "play"))
        {
          if(arg2[0] == '\0')
          {
         switch (number_range (0,4)) // A little humor and spice for the mistyped or 
            {
            case 0:
                send_to_char("The lovely waitress walks up and says '{gYou need to type Slot Play (amount){x'\n\r"
                             "She then turns away and walks off with a sultry swing to her perfect behind.\n\r",ch);
                   break;
            case 1:
                   send_to_char("A rather homely waitress passes by with the drink tray.\n\r"
                                "The waitress says '{gHey, you gotta type 'Slot Play (amount){x'\n\r"
                                "She turns and walks away with a limp.\n\r",ch);
                   break;
            case 2:
                   send_to_char("An amazing waitress walks over and bends down in front of you at the machine.\n\r"
                                "The waitress says '{gSugar, you need to type 'Slot Play (amount){x'\n\r"
                                "\n\r...You're not sure if you heard her though, has her amazing breasts brushed your arm!\n\r",ch);
                   break;
            case 3:
                   send_to_char("A waiter named Juan walks up with a swinging gate.\n\r"
                                "Juan says with a Cuban accent '{gHoney, you need to type 'Slot Play (amount){x'.\n\r"
                                "He gives you a wink and walks away with a saunter.\n\r",ch);
                   break;
            case 4:
                   send_to_char("An amazing waitress walks over and bends down giving you an eyefull.\n\r"
                                "The waitress says '{gSugar, you need to type 'Slot Play (amount){x'.\n\r"
                                "\n\r",ch);
                   send_to_char("{r      ,8X--------8,{x                  {r`88,\n\r"
                                "{r     ,8X---------X8,{x     I,          {r8X-8,\n\r"
                                "{r    ,8X-----------X8,{x     I,        {r`8X-88,\n\r"
                                "{r   ,8X-------------X8b,{x    I,        {r8XXX-88I,\n\r"
                                "{r   8X----------------XX8,{x   I        {r8XX---XX8,\n\r"
                                "{r  8X-------------------X8,{x  I        {r8X------XX8,\n\r",ch);
                   send_to_char("{r  8X------Xz--zX--------X8,{x 8        {r8X-----X---X8,\n\r"
                                "{r  8X-------XzzX---------X8,{x 8       {r(8X------XXX-8,\n\r"
                                "{r  `8X--------------------X,{x 8,     {r,8X---------X8\n\r"
                                "{r    88X------------------X,{x 8     {r,8X---------X8{x\n\r"
                                "\n\r...But you barely hear a word as your eyes are glued to her phenomenal chest.\n\r",ch);
                   break;
            default:
                   send_to_char("You have to use the proper syntax, slot play (bet amount).\n\r", ch);
            }
           return;
          }


   //I made it so that only certain amounts can be wagered, it would be
   //entirely possible to remove this and go with however much they want
   //to wager, however I added this to give the slots a touch of reality. - NS

   // I completely changed the argument structure, to allow people some freedom in how
   // they call money, you'll see below. - DSL

  if ((!strcmp(arg2, "quarter"))
   || (!strcmp(arg2, "25"))
   || (!strcmp(arg2, "25 cents"))
   || (!strcmp(arg2, ".25")))
    {
      CanPlay = TRUE;
      basebet = 25;
    }
  else if ((!strcmp(arg2, "50 cents"))
   || (!strcmp(arg2, "50"))
   || (!strcmp(arg2, ".50")))
    {
      CanPlay = TRUE;
      basebet = 50;
    }
  else if ((!strcmp(arg2, "1 buck"))
   || (!strcmp(arg2, "1"))
   || (!strcmp(arg2, "1 dollar"))
   || (!strcmp(arg2, "dollar"))
   || (!strcmp(arg2, "buck"))
   || (!strcmp(arg2, "100")))
    {
      CanPlay = TRUE;
      basebet = 100;
    }
  else if ((!strcmp(arg2, "2 bucks"))
   || (!strcmp(arg2, "2"))
   || (!strcmp(arg2, "2 dollars"))
   || (!strcmp(arg2, "200")))
    {
      CanPlay = TRUE;
      basebet = 200;
    }
  else if ((!strcmp(arg2, "4 bucks"))
   || (!strcmp(arg2, "4"))
   || (!strcmp(arg2, "4 dollars"))
   || (!strcmp(arg2, "400")))
    {
      CanPlay = TRUE;
      basebet = 400;
    }
  else if ((!strcmp(arg2, "8 bucks"))
   || (!strcmp(arg2, "8"))
   || (!strcmp(arg2, "8 dollars"))
   || (!strcmp(arg2, "800")))
    {
      CanPlay = TRUE;
      basebet = 800;
    }
  else if ((!strcmp(arg2, "10 bucks"))
   || (!strcmp(arg2, "10"))
   || (!strcmp(arg2, "10 dollars"))
   || (!strcmp(arg2, "1000")))
    {
      CanPlay = TRUE;
      basebet = 1000;
    }
  else if ((!strcmp(arg2, "20 bucks"))
   || (!strcmp(arg2, "20"))
   || (!strcmp(arg2, "20 dollars"))
   || (!strcmp(arg2, "2000")))
    {
      CanPlay = TRUE;
      basebet = 2000;
    }
  else
    {
      CanPlay = FALSE;
      send_to_char("You can bet a quarter, 50 cents, 1,2,4,8,10 or 20 dollars.\n\r", ch);
      return;
    }

     // The original gold/silver check was buggy...
     // Had to change it all, funky math and it messed up, so I changed it. - DSL

        if ((ch->silver + 100 * ch->gold) < basebet)
        {
        switch (number_range (0, 5))
           {
           case 0:
              send_to_char ("Man, you're so pour you could afford the cheap drinks here.\n\r", ch);
              break;
           case 1:
              send_to_char ("You scrounge through your pockets and find some...\n\r"
                            " ...lint... but not enough money to play.\n\r", ch);
              break;
           case 2:
              send_to_char ("Someone must have lifted your wallet pal, you don't have enough cash.\n\r", ch);
              break;
           case 3:
              send_to_char ("You got a copier that makes $100s?\n\r"
                            "Because you don't have the greenbacks baby.\n\r", ch);
              break;
           case 4:
              send_to_char ("Go hold up a liquor store or something, you don't have enough to cover that bet.\n\r", ch);
              break;
           case 5:
              send_to_char ("With what, wooden nickles? Get more cash.\n\r", ch);
              break;
           default:
              send_to_char ("You don't have that much money.\n\r", ch);
              break;
           }
            return;
        }

        deduct_bet (ch, basebet);
        // Progressive jackpot DSL... IT WORKS!!
        if (slot->value[0] == SLOT_IS_PROGRESSIVE)
        slot->value[1] += basebet;

	    //'gold' and 'silver' are 'dollars' and 'cents',

          if(basebet == 25)
          {
            send_to_char ("You put a quarter into the slot machine and pull the handle.\n\r",ch);
            act("$n puts a coin in the slot machine and pulls the handle.",ch,NULL,NULL,TO_ROOM);
          }
          else if(basebet == 50)
          {
            send_to_char ("You put two quarters into the slot machine and pull the handle.\n\r",ch);
            act("$n puts a couple coins in the slot machine and pulls the handle.",ch,NULL,NULL,TO_ROOM);
          }
          else if(basebet == 100)
          {
            send_to_char("You slide a dollar into the slot machine and pull the handle.\n\r",ch);
            act("$n slides a dollar in the slot machine and pulls the handle.",ch,NULL,NULL,TO_ROOM);
          }
          else if(basebet > 100)
          {
            sprintf(buf,"You slide %d dollars into the slot machine and pull the handle.\n\r",basebet/100);
            send_to_char(buf,ch);
            act("$n slides some bills in the slot machine and pulls the handle.",ch,NULL,NULL,TO_ROOM);
         }
        send_to_char ("The machine spins and whirs for a bit.\n\r", ch);

        // A slight wait for mortals
        if (!IS_IMMORTAL(ch))
        WAIT_STATE (ch, PULSE_VIOLENCE / 3);

	      //Roll the slots!
          sa = roll();
          sb = roll();
          sc = roll();
          sd = roll();
          se = roll();
          sf = roll();
          sg = roll();
          sh = roll();
          si = roll();

	  //The following section reveals the slots to the player.

            send_to_char ("                    .--------.\n\r", ch);
            send_to_char ("                    |Jackpot |\n\r", ch);
            send_to_char ("   _________________|________|_________________\n\r", ch);
            send_to_char ("  |==____________==____________==____________==|\n\r", ch);
            send_to_char ("  |||            ||            ||            |||\n\r", ch);
            send_to_char ("  |||",ch);
            show_slot(ch,sa);
            send_to_char(                  "||",ch);
            show_slot(ch,sb);
            send_to_char(                                "||",ch);
            show_slot(ch,sc);
            send_to_char(                                              "||| __\n\r", ch);
            send_to_char ("  |||____________||____________||____________|||(__)\n\r", ch);
            send_to_char ("  |==____________==____________==____________==| ||\n\r", ch);
            send_to_char ("  |||            ||            ||            ||| ||\n\r", ch);
            send_to_char ("  |||",ch);
            show_slot(ch,sd);
            send_to_char(                  "||",ch);
            show_slot(ch,se);
            send_to_char(                                "||",ch);
            show_slot(ch,sf);
            send_to_char(                                              "||| ||\n\r",ch);
            send_to_char ("  |||____________||____________||____________|||_//\n\r", ch);
            send_to_char ("  |==____________==____________==____________==|_/\n\r", ch);
            send_to_char ("  |||            ||            ||            |||\n\r", ch);
            send_to_char ("  |||",ch);
            show_slot(ch,sg);
            send_to_char(                  "||",ch);
            show_slot(ch,sh);
            send_to_char(                                "||",ch);
            show_slot(ch,si);
            send_to_char(                                              "|||\n\r",ch);
            send_to_char ("  |||____________||____________||____________|||\n\r", ch);
            send_to_char ("  |==________________________________________==|\n\r", ch);
            send_to_char ("  | |________________________________________| |\n\r", ch);
            send_to_char ("  |  |      TOP SECRET - SLOT MACHINES      |  |\n\r", ch);
            send_to_char (" _|  |______________________________________|  |_\n\r", ch);
            send_to_char ("(________________________________________________)\n\r", ch);


	  //Decide whether or not they won.

          if(sa == 1 && sb != 1)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet + (basebet/4);
          }
          else if(sa == 1 && sb == 1 && sc != 1)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet + (basebet/2);
          }

          if(sd == 1 && se != 1)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet + (basebet/4);
          }
          else if(sd == 1 && se == 1 && sf != 1)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet + (basebet/2);
          }

          if(sg == 1 && sh != 1)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet + (basebet/4);
          }
          else if(sg == 1 && sh == 1 && si != 1)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet + (basebet/2);
          }

          if(sa == sb && sb == sc)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet * sb;
          }

          if(sd == se && se == sf)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet * se;
          }

          if(sg == sh && sh == si)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet * sh;
          }

          if(sa == se && se == si)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet * se;
          }

          if(sg == se && se == sc)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet * se;
          }

          if(sa == sd && sd == sg)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet * sd;
          }

          if(sb == se && se == sh)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet * se;
          }

          if(sc == sf && sf == si)
          {
            if(winner == FALSE)
              winner = TRUE;
            winnings += basebet * sf;
          }

	  //This is the JACKPOT!  It gives a special message and is therefore
	  //separated from the regular winning check.  I have never hit the
	  //jackpot, so I don't really know if it works right. :-p - NS

      // But I have, it works perfectly now. - DSL
          if(sa == 10 && se == 10 && si == 10 && sg == 10 && sc == 10)
          {
            send_to_char("The red light on top of your machine lights up and spins!!!\n\r\n\r\n\r", ch);
            send_to_char("{WWOOHOOOO!!!{x\n\r{R",ch);
            send_to_char("       ___   ____       ____      ___   ___ \n\r"
                         "      |   |.'    `.   .'    `.   |   | |   |\n\r"
                         "      |   ||    _  `-.|    _  `-.|   | |   |\n\r"
                         "      |   ||   | `   ||   | `   ||   | |   |\n\r"
                         "      |   ||   |_|   ||   | |__.'|   |_/  .'\n\r"
                         " ___  |   ||    _    ||   |  ___ |    _   `.\n\r"
                         "|   | |   ||   | |   ||   | |   ||   | `   |\n\r"
                         "|   | |   ||   | |   ||   | |   ||   | |   |\n\r"
                         "|   `_|   ||   | |   ||   |_/   ||   | |   |\n\r"
                         "`-._____.-'|___| |___|`-._____.-'|___| |___|\n\r", ch);
            send_to_char("      ____       ____      _________  ___ \n\r"
                         "    .'    `.   .'    `.   |         ||   |\n\r"
                         "    |    _  `-.|    _  `-.|__     __||   |\n\r"
                         "    |   | `   ||   | `   |   |   |   |   |\n\r"
                         "    |   | |   ||   | |   |   |   |   |   |\n\r"
                         "    |   |_/   ||   | |   |   |   |   |   |\n\r"
                         "    |    ___.-'|   | |   |   |   |   |___|\n\r"
                         "    |   |      |   | |   |   |   |   _____\n\r"
                         "    |   |      |   |_/   |   |   |   |   |\n\r"
                         "    |___|      `-._____.-'   |___|   |___|\n\r{x", ch);

            act("The red light on top of $n's slot machine lights up and spins!", ch,NULL,NULL,TO_ROOM);
            act       ("{R       ___   ____       ____      ___   ___ \n\r"
                         "      |   |.'    `.   .'    `.   |   | |   |\n\r"
                         "      |   ||    _  `-.|    _  `-.|   | |   |\n\r"
                         "      |   ||   | `   ||   | `   ||   | |   |\n\r"
                         "      |   ||   |_|   ||   | |__.'|   |_/  .'\n\r"
                         " ___  |   ||    _    ||   |  ___ |    _   `.\n\r"
                         "|   | |   ||   | |   ||   | |   ||   | `   |\n\r"
                         "|   | |   ||   | |   ||   | |   ||   | |   |\n\r"
                         "|   `_|   ||   | |   ||   |_/   ||   | |   |\n\r"
                         "`-._____.-'|___| |___|`-._____.-'|___| |___|", ch, NULL, NULL, TO_ROOM);
            act       ("{R      ____       ____      _________  ___ \n\r"
                         "    .'    `.   .'    `.   |         ||   |\n\r"
                         "    |    _  `-.|    _  `-.|__     __||   |\n\r"
                         "    |   | `   ||   | `   |   |   |   |   |\n\r"
                         "    |   | |   ||   | |   |   |   |   |   |\n\r"
                         "    |   |_/   ||   | |   |   |   |   |   |\n\r"
                         "    |    ___.-'|   | |   |   |   |   |___|\n\r"
                         "    |   |      |   | |   |   |   |   _____\n\r"
                         "    |   |      |   |_/   |   |   |   |   |\n\r"
                         "    |___|      `-._____.-'   |___|   |___|{x", ch, NULL, NULL, TO_ROOM);
            if (slot->value[0] == SLOT_IS_PROGRESSIVE)
            {
//                winnings += basebet * 200; // Was 50
                winnings += slot->value[1];
                slot->value[1] = 500000; // Reset the machine to $5,000
                send_to_char ("A guard pushes a money cart out and unlocks the machine.\n\r"
                              "He proceeds to put a large amount of money back into it.\n\r", ch);
                act ("$n sits back as a guard pushes a money cart out and unlocks $s machine.\n\r"
                     "The guard proceeds to put a large sum of money into the machine.\n\r"
                     "He then turns and pushes the cart away.", ch, NULL, NULL, TO_ROOM);

            }
            else
            {
                  winnings += slot->value[1];
            }
            if(winnings < 100)
            {
              sprintf(buf,"{WYou receive %d cents!{x\n\r",winnings);
              send_to_char(buf,ch);
              ch->silver += winnings;
            }
            else if(winnings == 100)
            {
              send_to_char("{WYou won a buck!{x\n\r",ch);
              ch->gold += 1;
            }
            else if(winnings > 100) // I added in cents so that the player got ALL the winnings. - DSL
            {
              sprintf(buf,"{WYou won $%d.%2.2d!{X\n\r",winnings/100, (winnings - ((winnings/100) * 100)));
              send_to_char(buf,ch);
              ch->gold += winnings/100;
              ch->silver += (winnings - ((winnings/100) * 100));
            }
          }

	  //Regular winner.

          else if(winner == TRUE)
          {
            send_to_char("{YDING! DING! DING! A winner!{X\n\r",ch);
            act("$n's slot machine flashes and makes loud noises.",ch,NULL,NULL,TO_ROOM);
            if(winnings < 100)
            {
              sprintf(buf,"{WYou won %d cents!{X\n\r",winnings);
              send_to_char(buf,ch);
              ch->silver += winnings;
            }
            else if(winnings == 100)
            {
              send_to_char("{WYou won a buck!{X\n\r",ch);
              ch->gold += 1;
            }
            else if(winnings > 100)
            {
              sprintf(buf,"{WYou won $%d.%2.2d!{X\n\r",winnings/100, (winnings - ((winnings/100) * 100)));
              send_to_char(buf,ch);
              ch->gold += winnings/100;
              ch->silver += (winnings - ((winnings/100) * 100));
            }
            if (slot->value[0] == SLOT_IS_PROGRESSIVE)
              {
                  slot->value[1] -= winnings;
                  if (slot->value[1] <= 0) // No negative amounts now ;p - DSL
                  {
                     slot->value[1] = 250000;
                     send_to_char ("A guard pushes a money cart out and unlocks the machine.\n\r"
                                   "He proceeds to put a large amount of money back into it.\n\r", ch);
                     act ("$n sits back as a guard pushes a money cart out and unlocks $s machine.\n\r"
                          "The guard proceeds to put a large sum of money into the machine.\n\r"
                          "He then turns and pushes the cart away.", ch, NULL, NULL, TO_ROOM);
                  }
              }
          }

	  //Loser. :(

          else
          {
         switch (number_range (0,21)) // A little humor and spice for the mistyped or 
            {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                  send_to_char("\n\r{RDamn.{x\n\rThe one arm bandit struck again... you lost.\n\r",ch);
                   break;
            case 10:
            case 11:
            case 12:
            case 13:
            case 14:
            case 15:
            case 16:
            case 17:
            case 18:
                   send_to_char("\n\rHOLY CRAP!!! You won... not a damned thing.\n\r",ch);
                   break;
            case 19:
                   send_to_char("\n\rAn beautiful waitress walks over and whispers into your ear \"{yYou lost hon{x\".\n\r",ch);
                   break;
            case 20:
                   send_to_char("\n\rYou see a sign flashing near the door that reads \n\r"
                                "\"1-800-NO-GAMBLE\"\n\r"
                                "Then below it \"Gamblers Anonymous\"... You lost pal.\n\r",ch);
                   break;
            case 21:
                   send_to_char("\n\rA sexy chick walks by with her tits bouncing like melons.\n\r"
                                "\n\r",ch);
                   send_to_char("{b      ,8X--------8,{x                  {b`88,\n\r"
                                "{b     ,8X---------X8,{x     I,          {b8X-8,\n\r"
                                "{b    ,8X-----------X8,{x     I,        {b`8X-88,\n\r"
                                "{b   ,8X-------------X8b,{x    I,        {b8XXX-88I,\n\r"
                                "{b   8X----------------XX8,{x   I        {b8XX---XX8,\n\r"
                                "{b  8X-------------------X8,{x  I        {b8X------XX8,\n\r",ch);
                   send_to_char("{b  8X------Xz--zX--------X8,{x 8        {b8X-----X---X8,\n\r"
                                "{b  8X-------XzzX---------X8,{x 8       {b(8X------XXX-8,\n\r"
                                "{b  `8X--------------------X,{x 8,     {b,8X---------X8\n\r"
                                "{b    88X------------------X,{x 8     {b,8X---------X8{x\n\r"
                                "\n\r...You were so mesmerized you didn't even notice that you lost your bet.\n\r",ch);
                   break;
            default:
                   send_to_char("\n\rHey, does one of each count for anything?\n\r Well shit, try again.\n\r", ch);
            }
          }
        return;
        }
        else
        {
          send_to_char("Slot commands{W: <{XPLAY{W>{X\n\rFor more information see {W'{XHELP SLOTS{W'{X.\n\r",ch);
          return;
        }
return;
}


//-----------------------------END MAIN FUNCTIONS-------------------------

//----------------------------- In merc.h -------------------------
#define ITEM_SLOT_MACHINE 70 
// 70 being an available number, switch if you've used it already.
#define SLOT_IS_PROGRESSIVE  (A)
#define SLOT_NO_PROGRESSIVE  (B) // SLOT_NORMAL would sound better ;p -DSL


//----------------------------- In tables.h -------------------------
extern  const   struct  flag_type   slot_machine_flags[];
// with the rest of the external calls

//----------------------------- In tables.c -------------------------
// In:
//const struct flag_type type_flags[] =

// Add to the end (before the NULL line):
     {  "slot_machine", ITEM_SLOT_MACHINE,  TRUE    },

// Below container flags struct
const struct flag_type slot_machine_flags[]=
{
    {  "is_progressive",	SLOT_IS_PROGRESSIVE,	TRUE	},
    {  "no_progressive",	SLOT_NO_PROGRESSIVE,	TRUE	},
    {  NULL,			0,					0		}
};

//----------------------------- In olc_act.c -------------------------
// In:
//const struct olc_help_type help_table[] = {

// add to the end:
    {"slot_machine", slot_machine_flags, "Slots Flags."},

// In show_obj_values, add in:
       case ITEM_SLOT_MACHINE:
            sprintf (buf,
                     "[v0] Progressive      [%s]\n\r"
                     "[v1] Jackpot          [%6d]\n\r",
                     flag_string (slot_machine_flags, obj->value[0]),
                     obj->value[1]);
            send_to_char (buf, ch);
            break;

// In set_obj_values, add in:

        case ITEM_SLOT_MACHINE: 
	    switch ( value_num ) 
	    { 
	        default: 
		    do_help( ch, "ITEM_SLOT_MACHINE" ); 
	            return FALSE; 
            case 0: 
                send_to_char( "PROGRESSIVE VALUE SET.\n\r\n\r", ch); 
                ALT_FLAGVALUE_SET( pObj->value[0], slot_machine_flags, argument );
                break; 
	        case 1: 
	            send_to_char( "JACKPOT SET.\n\r\n\r", ch ); 
	            pObj->value[1] = atoi( argument ); 
	            break; 
	    } 
        break; 
//----------------------------- In olc_act.c -------------------------
// In: save_object, in switch (pObjIndex->item_type)
// Add in:
        case ITEM_SLOT_MACHINE:
	        fprintf( fp, "%d %d %d %d %d\n",
		             pObjIndex->value[0],
                     pObjIndex->value[1],
                     pObjIndex->value[2],
                     pObjIndex->value[3],
                     pObjIndex->value[4]);
            break;


//----------------------------- In db.c -------------------------
// In OBJ_DATA *create_object (OBJ_INDEX_DATA *pObjIndex, int level)
// In the switch (obj->item_type) below case ITEM_FOOD:
// Add in:
        case ITEM_SLOT_MACHINE:

//----------------------------- In db2.c -------------------------
// in load_objects (FILE * fp)
// in switch (pObjIndex->item_type)
// Add in:
            case ITEM_SLOT_MACHINE:
                pObjIndex->value[0]		= fread_flag(fp);
                pObjIndex->value[1]		= fread_number(fp);
                pObjIndex->value[2]		= fread_number(fp);
                pObjIndex->value[3]		= fread_number(fp);
                pObjIndex->value[4]     = fread_number(fp);
                break;

// Then in convert_objects (void)
// Below case '0':
// Add in:
case ITEM_SLOT_MACHINE:


//----------------------------- In interp.c -------------------------
// in miscellaneous cmds
    {"slots",  do_slot,  POS_RESTING, 0, LOG_NORMAL, 1}, // Nikola's Slot Machines

//----------------------------- In interp.h -------------------------
DECLARE_DO_FUN( do_slot          ); // Nikola's Slot Machines

//That should be it.
// Let me know if there are pieces missing
// DSL/Skol/Ziv - zivilyn@ansalonmud.com
// or daveleverich@comcast.net