toc/
toc/account/a/
toc/area/backup/
toc/area/imc/
toc/caste/
toc/caste/backup/
toc/clans/
toc/classes/
toc/crash/
toc/gods/
toc/guilds/
toc/lname/s/
toc/maps/backup/
toc/player/a/
toc/src/
toc/system/backup/
toc/tableprog/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |   \\._.//   *
 * -----------------------------------------------------------|   (0...0)   *
 * SMAUG 1.4 (C) 1994, 1995, 1996, 1998  by Derek Snider      |    ).:.(    *
 * -----------------------------------------------------------|    {o o}    *
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |   / ' ' \   *
 * Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek,      |~'~.VxvxV.~'~*
 * Tricops and Fireblade                                      |             *
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.     *
 * ------------------------------------------------------------------------ *
 *		            Rafermand Arena Code		            *
 ****************************************************************************
 *   The below code is custom code created for us in Rafermand, it allows   *
 *   players and immortals to fight in the arena at an equal level and      *
 *   skill.  It will allow for a few different kind of games and a few      *
 *   other things.                                                          *
 *   Part of this code includes the Arena snippet by Kevin Hoogheem, which  * 
 *   was ported by LrdElder.  The rest is Coded by Xerves                   *
 ****************************************************************************/
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/stat.h>
#ifndef WIN32
#include <dirent.h>
#endif
#include "mud.h"

#define ARENA_SVNUM 60001
#define ARENA_EVNUM 60061
#define PREP_START  60000 /* vnum of first prep room */
#define PREP_END    60000 /* vnum of last prep room */
#define ARENA_END   60069 /* vnum of last real arena room */
#define ROBJ_START 13060
#define UOBJ_START 13250
#define ARENA_SPOTION  13050
#define ARENA_EPOTION  13053

void start_arena();
void show_jack_pot();
void do_game();
int num_in_arena();
void find_game_winner();
void do_end_game();
void start_game();
void silent_end();
void find_bet_winners(CHAR_DATA * winner, bool type);

int ppl_challenged = 0;
int ppl_in_arena = 0;
int ppl_at_start = 0;
int in_start_arena = 0;
int start_time;
int game_length;
int lo_lim;
int hi_lim;
int game_type;
int time_to_start;
int time_left_in_game;
int arena_pot;
int bet_pot;
int barena = 0;
int arena_ritem = 0;
int arena_uitem = 0;

extern int parsebet(const int currentbet, char *s);
extern int advatoi(char *s);
extern void read_obj_arena(CHAR_DATA * ch, char *argument);

//type 0 - win 1 - losses 2 - ties 3 - games 4 - numavg 5 - update 6 - kill 7 - pkill
//8 - pdeath 9 - pranking
//Updates the barena linked list, global
void update_barena(CHAR_DATA * ch, int type)
{
   BARENA_DATA *bdata;

   if (barena == 0)
      return;

   if (type == 0)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->wins += 1;
            return;
         }
      }
   }
   if (type == 1)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->losses += 1;
            return;
         }
      }
   }
   if (type == 2)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->ties += 1;
            return;
         }
      }
   }
   if (type == 3)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->games += 1;
            return;
         }
      }
   }
   if (type == 4)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->numavg += num_in_arena();
            return;
         }
      }
   }
   if (type == 5)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            return;
         }
      }
      CREATE(bdata, BARENA_DATA, 1);
      bdata->wins = 0;
      bdata->losses = 0;
      bdata->ties = 0;
      bdata->games = 0;
      bdata->numavg = 0;
      bdata->pkills = ch->pcdata->pkills;
      bdata->pdeaths = ch->pcdata->pdeaths;
      bdata->pranking = 0;
      bdata->name = STRALLOC(ch->name);
      LINK(bdata, first_barena, last_barena, next, prev);
      return;
   }
   if (type == 6)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->kills += 1;
            return;
         }
      }
   }
   if (type == 7)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->pkills = ch->pcdata->pkills;
            return;
         }
      }
   }
   if (type == 8)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->pdeaths = ch->pcdata->pdeaths;
            return;
         }
      }
   }
   if (type == 9)
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (!str_cmp(bdata->name, ch->name))
         {
            bdata->pranking = ch->pcdata->pranking;
            return;
         }
      }
   }
}

void do_startarena(CHAR_DATA * ch, char *argument)
{
   char arg1[MIL];
   char buf[MSL];
   int v1, v2;

   v1 = v2 = 0;

   if (IS_NPC(ch))
   {
      send_to_char("This command is not for NPCs.\n\r", ch);
      return;
   }
   if (get_trust(ch) < LEVEL_IMM && ch->pcdata->caste < caste_Knight)
   {
      send_to_char("Huh?\n\r", ch);
      return;
   }

   if (argument[0] == '\0')
   {
      send_to_char("Syntax: [start time] [end time]   or just type start.\n\r", ch);
      return;
   }
   if (!str_cmp(argument, "start"))
   {
      do_chaos(ch, "1 5 1 8 1");
      return;
   }
   argument = one_argument(argument, arg1);

   if (isdigit(arg1[0]))
      v1 = atoi(arg1);
   if (isdigit(argument[0]))
      v2 = atoi(argument);

   if (v1 > 3)
   {
      send_to_char("Max time for start is 3 minutes.\n\r", ch);
      return;
   }
   if (v2 > 15)
   {
      send_to_char("Max time for a game is 15 minutes.\n\r", ch);
      return;
   }
   if (atoi(arg1) < 1 || atoi(argument) < 1)
   {
      send_to_char("Syntax: <start time> <end time>  (must be greater than 0)\n\r", ch);
      return;
   }

   sprintf(buf, "1 5 %d %d 1", v1, v2);
   do_chaos(ch, buf);
   return;
}



// Shows the rankings in the Battle Arena
void do_rankings(CHAR_DATA * ch, char *argument)
{
   BARENA_DATA *bdata;
   int x;
   int max = 0;
   int navg = 0;
   int times = 0;
   int fnd = 0;

   if (argument[0] == '\0')
   {
      send_to_char("rankings <argument>\n\rArena arguments = wins losses ties games numavg kills\n\rPkill arguments = pkills pdeaths pranking\n\r",
         ch);
      return;
   }
   if (!str_cmp(argument, "pkills"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->pkills > max)
         {
            max = bdata->pkills;
         }
      }
      if (max == 0)
      {
         send_to_char("There are no one with pkills yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  PKills    PDeaths   PRanking\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; x--)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->pkills == x)
               {
                  ch_printf(ch, "&G&W%-20s  %-4d&c&w    &R [&C%-4d      %-4d    &R]\n\r", bdata->name, bdata->pkills, bdata->pdeaths,
                     bdata->pranking);
                  times++;
               }
            }
         }
      }
   }
   if (!str_cmp(argument, "pdeaths"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->pdeaths > max)
         {
            max = bdata->pdeaths;
         }
      }
      if (max == 0)
      {
         send_to_char("There are no one with pdeaths yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  PDeaths   PKills    PRanking\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; x--)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->pdeaths == x)
               {
                  ch_printf(ch, "&G&W%-20s  %-4d&c&w    &R [&C%-4d      %-4d    &R]\n\r", bdata->name, bdata->pdeaths, bdata->pkills,
                     bdata->pranking);
                  times++;
               }
            }
         }
      }
   }
   if (!str_cmp(argument, "pranking"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->pranking > max)
         {
            max = bdata->pranking;
         }
      }
      if (max == 0)
      {
         send_to_char("There are no one with a pranking yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  PRanking  PKills    PDeaths\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; x--)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->pranking == x)
               {
                  ch_printf(ch, "&G&W%-20s  %-4d&c&w   &R  [&C%-4d      %-4d   &R]\n\r", bdata->name, bdata->pranking, bdata->pkills, bdata->pdeaths);
                  times++;
               }
            }
         }
      }
   }
   if (!str_cmp(argument, "kills"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->kills > max)
         {
            max = bdata->kills;
         }
      }
      if (max == 0)
      {
         send_to_char("There are no one with kills yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  Kills     Wins  Losses  Ties  Games  Numavg\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; x--)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->kills == x)
               {
                  navg = 0;
                  if (bdata->numavg && bdata->games)
                     navg = bdata->numavg / bdata->games;
                  ch_printf(ch, "&G&W%-20s  %-4d&c&w   &R [&C%-4d  %-4d    %-4d  %-5d  %-2d    &R]\n\r", bdata->name, bdata->kills, bdata->wins,
                     bdata->losses, bdata->ties, bdata->games, navg);
                  times++;
               }
            }
         }
      }
   }
   if (!str_cmp(argument, "wins"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->wins > max)
         {
            max = bdata->wins;
         }
      }
      if (max == 0)
      {
         send_to_char("There are no one with wins yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  Wins      Losses  Kills  Ties  Games  Numavg\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; x--)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->wins == x)
               {
                  navg = 0;
                  if (bdata->numavg && bdata->games)
                     navg = bdata->numavg / bdata->games;
                  ch_printf(ch, "&G&W%-20s  %-4d&c&w    &R [&C%-4d    %-4d   %-4d  %-5d  %-2d    &R]\n\r", bdata->name, bdata->wins, bdata->losses,
                     bdata->kills, bdata->ties, bdata->games, navg);
                  times++;
               }
            }
         }
      }
   }
   if (!str_cmp(argument, "losses"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->losses > max)
         {
            max = bdata->losses;
         }
      }
      if (max == 0)
      {
         send_to_char("There are no one with losses yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  Losses    Wins   Kills  Ties  Games  Numavg\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; x--)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->losses == x)
               {
                  navg = 0;
                  if (bdata->numavg && bdata->games)
                     navg = bdata->numavg / bdata->games;
                  ch_printf(ch, "&G&W%-20s  %-4d&c&w    &R [&C%-4d   %-4d   %-4d  %-5d  %-2d    &R]\n\r", bdata->name, bdata->losses, bdata->wins,
                     bdata->kills, bdata->ties, bdata->games, navg);
                  times++;
               }
            }
         }
      }
   }
   if (!str_cmp(argument, "ties"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->ties > max)
         {
            max = bdata->ties;
         }
      }
      if (max == 0)
      {
         send_to_char("There are no one with ties yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  Ties      Wins  Losses   Kills  Games  Numavg\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; x--)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->ties == x)
               {
                  navg = 0;
                  if (bdata->numavg && bdata->games)
                     navg = bdata->numavg / bdata->games;
                  ch_printf(ch, "&G&W%-20s  %-4d&c&w    &R [&C%-4d  %-4d     %-4d   %-5d  %-2d    &R]\n\r", bdata->name, bdata->ties, bdata->wins,
                     bdata->losses, bdata->kills, bdata->games, navg);
                  times++;
               }
            }
         }
      }
   }
   if (!str_cmp(argument, "games"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->games > max)
         {
            max = bdata->games;
         }
      }
      if (max == 0)
      {
         send_to_char("No one has participated in Battle Arena yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  Games     Wins  Losses   Kills  Ties  Numavg\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; x--)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->games == x)
               {
                  navg = 0;
                  if (bdata->numavg && bdata->games)
                     navg = bdata->numavg / bdata->games;
                  ch_printf(ch, "&G&W%-20s  %-5d&c&w   &R [&C%-4d  %-4d     %-4d   %-4d  %-2d    &R]\n\r", bdata->name, bdata->games, bdata->wins,
                     bdata->losses, bdata->kills, bdata->ties, navg);
                  times++;
               }
            }
         }
      }
   }
   if (!str_cmp(argument, "numavg"))
   {
      for (bdata = first_barena; bdata; bdata = bdata->next)
      {
         if (bdata->numavg && bdata->games && bdata->numavg / bdata->games > max)
         {
            max = bdata->numavg / bdata->games;
         }
      }
      if (max == 0)
      {
         send_to_char("There is not a person with numavg yet.\n\r", ch);
         return;
      }
      else
      {
         send_to_char
            ("&G&WName                  Numavg    Wins  Losses   Kills  Ties  Games\n\r&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&R-&B-&c&w\n\r",
            ch);
         for (x = max; x > 0; --x)
         {
            fnd = 0;
            if (times >= 10)
               return;
            for (bdata = first_barena; bdata; bdata = bdata->next)
            {
               if (bdata->numavg && bdata->games && bdata->numavg / bdata->games == x)
               {
                  navg = 0;
                  if (bdata->numavg && bdata->games)
                     navg = bdata->numavg / bdata->games;
                  ch_printf(ch, "&G&W%-20s  %-2d&c&w      &R [&C%-4d  %-4d     %-4d   %-4d  %-5d&R]\n\r", bdata->name, navg, bdata->wins,
                     bdata->losses, bdata->kills, bdata->ties, bdata->games);
                  times++;
               }
            }
         }
      }
   }
   return;
}

void do_bet(CHAR_DATA * ch, char *argument)
{
   char arg[MIL];
   char buf[MIL];
   char buf1[MIL];
   int newbet;

   argument = one_argument(argument, arg);
   one_argument(argument, buf1);

   if (IS_NPC(ch))
   {
      send_to_char("Mobs cant bet on the arena.\r\n", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      send_to_char("Usage: bet <player> <amt>\r\n", ch);
      return;
   }
   else if (!in_start_arena && !ppl_challenged)
   {
      send_to_char("Sorry the arena is closed, wait until it opens up to bet.\r\n", ch);
      return;
   }
   else if (ppl_in_arena)
   {
      send_to_char("Sorry Arena has already started, no more bets.\r\n", ch);
      return;
   }
   else if (ch->in_room->vnum == PREP_START)
      send_to_char("Sorry, you cannot bet while you are in the Arena.\n\r", ch);
   else if (!(ch->pcdata->betted_on = get_char_world(ch, arg)))
      send_to_char("No such person exists in Rafermand.\n\r", ch);
   else if (ch->pcdata->betted_on == ch)
      send_to_char("That doesn't make much sense, does it?\r\n", ch);
   else if (!IN_ARENA(ch->pcdata->betted_on))
      send_to_char("Sorry that person is not in the arena.\r\n", ch);
   else
   {
      if (GET_BET_AMT(ch) > 0)
      {
         send_to_char("Sorry you have already bet.\r\n", ch);
         return;
      }
      GET_BETTED_ON(ch) = ch->pcdata->betted_on;
      newbet = parsebet(bet_pot, buf1);
      if (newbet == 0)
      {
         send_to_char("Bet some gold why dont you!\r\n", ch);
         return;
      }
      if (newbet > ch->gold)
      {
         send_to_char("You don't have that much money!\n\r", ch);
         return;
      }
      if (newbet > 10000000)
      {
         send_to_char("Sorry the House max is 10 million.\r\n", ch);
         return;
      }

      ch->gold -= newbet;
      arena_pot += (newbet / 2);
      bet_pot += (newbet / 2);
      GET_BET_AMT(ch) = newbet;
      sprintf(buf, "You place %d coins on %s.\r\n", newbet, PERS_MAP(ch->pcdata->betted_on, ch));
      send_to_char(buf, ch);
      sprintf(buf, "&w&RINFO: &w&W$n has placed %d coins on $N.", newbet);
      act(AT_RED, buf, ch, NULL, ch->pcdata->betted_on, TO_MUD);
      act(AT_RED, buf, ch, NULL, ch->pcdata->betted_on, TO_VICT);
   }
}

/* Take care of updating the player */
void do_arena(CHAR_DATA * ch, char *argument)
{
   if (IS_NPC(ch))
   {
      send_to_char("Mobs cannot play in the arena.\r\n", ch);
      return;
   }
   if (!in_start_arena)
   {
      send_to_char("The killing fields are closed right now.\r\n", ch);
      return;
   }
   
   if (get_player_statlevel(ch) < lo_lim || get_player_statlevel(ch) > hi_lim)
   {
      send_to_char("You are not in the required statlevel to fight in the arena.\n\r", ch);
      return;
   }

   if (IN_ARENA(ch))
   {
      send_to_char("You are in the arena already\r\n", ch);
      return;
   }
   else
   {
      act(AT_RED, "$n has been whisked away to the killing fields.", ch, NULL, NULL, TO_ROOM);
      update_players_map(ch, -1, -1, -1, 1, get_room_index(PREP_START));
      act(AT_WHITE, "$n is droped from the sky.", ch, NULL, NULL, TO_ROOM);
      send_to_char("You have been taken to the killing fields\r\n", ch);
      do_look(ch, "auto");
      act(AT_RED, "&w&RINFO: &w&W$n has joined the blood bath.", ch, NULL, NULL, TO_MUD);
      ppl_at_start++;
      ch->hit = ch->max_hit;
      ch->mana = ch->max_mana;
      ch->move = ch->max_move;
      return;
   }
}

void do_chaos(CHAR_DATA * ch, char *argument)
{
   char arg1[MIL], arg2[MIL], arg3[MIL];

   if (argument[0] == '\0')
   {
      send_to_char("Syntax:  chaos <low plevel limit> <hi plevel limit> <start delay> <round length>\n\r", ch);
      return;
   }
   
   argument = one_argument(argument, arg1);
   argument = one_argument(argument, arg2);
   argument = one_argument(argument, arg3);
   
   lo_lim = atoi(arg1);
   hi_lim = atoi(arg2);
   start_time = atoi(arg3);
   game_length = atoi(argument);
   
   if ((lo_lim || hi_lim || start_time || game_length) <= 0)
   {
      send_to_char("All values must be greater than 0.\r\n", ch);
      return;
   }

   if (lo_lim >= hi_lim)
   {
      send_to_char("Low Level needs to be less than High Level.\r\n", ch);
      return;
   }

   ppl_in_arena = 0;
   in_start_arena = 1;
   time_to_start = start_time;
   time_left_in_game = 0;
   ppl_at_start = 0;
   arena_pot = 0;
   bet_pot = 0;
   barena = 1;
   start_arena();

}

void start_arena()
{
   char buf1[MIL];
   char buf[MIL];
   DESCRIPTOR_DATA *d;

   if (!(ppl_challenged))
   {
      if (time_to_start == 0)
      {
         in_start_arena = 0;
         show_jack_pot();
         ppl_in_arena = 1; /* start the blood shed */
         time_left_in_game = game_length;
         start_game();
         return;
      }
      else
      {
         if (time_to_start > 1)
         {
            sprintf(buf1, "&WThe Killing Fields are open to Power levels &R%d &Wthru &R%d\r\n", lo_lim, hi_lim);
            sprintf(buf1, "%s%d &Whours to start\r\n", buf1, time_to_start);
            sprintf(buf1, "%s\r\nType &Rarena &Wto enter.\r\n", buf1);
         }
         else
         {
            sprintf(buf1, "&WThe Killing Fields are open to Power levels &R%d &Wthru &R%d\r\n", lo_lim, hi_lim);
            sprintf(buf1, "%s1 &Whour to start\r\n", buf1);
            sprintf(buf1, "%s\r\nType &Rarena &Wto enter.\r\n", buf1);
         }
      }
      for (d = first_descriptor; d; d = d->next)
      {
         if (d->connected == CON_PLAYING)
         {
            if ((d->character->level >= lo_lim && d->character->level <= hi_lim) || game_type == 1)
               send_to_char(buf1, d->character);
            else
            {
               sprintf(buf, "&WThe arena has been opened. &R%d &Whour(s) to start.\r\n", time_to_start);
               sprintf(buf, "%sPlace your bets!!!\r\n", buf);
               send_to_char(buf, d->character);
            }
         }
      }
      /* echo_to_all(AT_WHITE, buf1, ECHOTAR_ALL); */
      time_to_start--;
   }
   else
   {
      if (!(ppl_in_arena))
      {
         if (time_to_start == 0)
         {
            ppl_challenged = 0;
            show_jack_pot();
            ppl_in_arena = 1; /* start the blood shed */
            time_left_in_game = 5;
            start_game();
         }
         else
         {
            if (time_to_start > 1)
            {
               sprintf(buf1, "&w&RINFO: &w&WThe dual will start in %d hours. Place your bets!", time_to_start);
            }
            else
            {
               sprintf(buf1, "&w&RINFO: &w&WThe dual will start in 1 hour. Place your bets!");
            }
            act(AT_RED, buf1, supermob, NULL, NULL, TO_MUD);
            time_to_start--;
         }
      }
   }
}

void start_game()
{
   CHAR_DATA *i;
   DESCRIPTOR_DATA *d;
   int toroom;

   for (d = first_descriptor; d; d = d->next)
      if (!d->connected)
      {
         i = d->character;
         if (d->connected == CON_PLAYING)
         {
            if (i && i->in_room && i->in_room->vnum == PREP_START)
            {
               toroom = number_range(ARENA_SVNUM, ARENA_EVNUM);
               send_to_char("\r\nThe floor falls out from bellow, droping you in the arena\r\n", i);
               update_players_map(i, -1, -1, -1, 1, get_room_index(toroom));
               do_look(i, "auto");
               //type 0 - win 1 - losses 2 - ties 3 - games 4 - numavg 5 - update 
               update_barena(i, 5);
               if (num_in_arena() > 1)
               {
                  update_barena(i, 3);
                  update_barena(i, 4);
               }
            }
         }
      }
   do_game();
}

void do_game()
{
   char buf[MIL];

   if (num_in_arena() == 1)
   {
      ppl_in_arena = 0;
      ppl_challenged = 0;
      find_game_winner();
   }
   else if (time_left_in_game == 0)
   {
      do_end_game();
   }
   else if (num_in_arena() == 0)
   {
      ppl_in_arena = 0;
      ppl_challenged = 0;
      silent_end();
   }
   else if (time_left_in_game % 5)
   {
      sprintf(buf, "&w&RINFO: &w&WWith %d hours left in the game there are %d players left.", time_left_in_game, num_in_arena());
   }
   else if (time_left_in_game == 1)
   {
      sprintf(buf, "&w&RINFO: &w&WWith 1 hour left in the game there are %d players left.", num_in_arena());
   }
   else if (time_left_in_game <= 4)
   {
      sprintf(buf, "&w&RINFO: &w&WWith %d hours left in the game there are %d players left.", time_left_in_game, num_in_arena());
   }
   act(AT_RED, buf, supermob, NULL, NULL, TO_MUD);
   time_left_in_game--;
}

void find_game_winner()
{
   char buf[MIL];
   char buf2[MIL];
   CHAR_DATA *i;
   DESCRIPTOR_DATA *d;
   int vnum = 0;

   for (d = first_descriptor; d; d = d->next)
   {
      i = d->character;
      if (d->connected == CON_PLAYING)
      {
         if (IN_ARENA(i) && (i->level < LEVEL_IMMORTAL))
         {
            i->hit = i->max_hit;
            i->mana = i->max_mana;
            i->move = i->max_move;
            i->pcdata->challenged = NULL;

            if (!IS_NPC(i) && i->pcdata->clan)
               vnum = i->pcdata->clan->recall;

            if (!vnum)
               vnum = ROOM_VNUM_TEMPLE;

            char_from_room(i);
            char_to_room(i, get_room_index(vnum));
            do_look(i, "auto");
            act(AT_YELLOW, "$n falls from the sky.", i, NULL, NULL, TO_ROOM);
            if (time_left_in_game == 1)
            {
               act(AT_RED, "&w&RINFO: &w&WAfter 1 hour of battle $n is declared the winner", i, NULL, NULL, TO_MUD);
            }
            else
            {
               sprintf(buf, "&w&RINFO: &w&WAfter %d hours of battle $n is declared the winner", game_length - time_left_in_game);
               act(AT_RED, buf, i, NULL, NULL, TO_MUD);
            }
            i->gold += arena_pot;
            sprintf(buf, "You have been awarded %d coins for winning the arena\r\n", (arena_pot));
            send_to_char(buf, i);
            sprintf(buf2, "&w&RINFO: &w&W$n awarded %d coins for winning arena", (arena_pot));
            act(AT_RED, buf2, i, NULL, NULL, TO_MUD);
            find_bet_winners(i, TRUE);
            //type 0 - win 1 - losses 2 - ties 3 - games 4 - numavg 5 - update 
            if (ppl_at_start > 1)
               update_barena(i, 0);
            ppl_in_arena = 0;
            ppl_challenged = 0;
         }
      }
   }
   save_barena_data();
}

void show_jack_pot()
{
   char buf1[MIL];

   sprintf(buf1, "\r\nMay the CHAOS BEGIN!!!!!!!!!\r\n");
   sprintf(buf1, "%sThe jack pot for this arena is %d coins\r\n", buf1, arena_pot);
   sprintf(buf1, "%s%d coins have been bet on this arena.\r\n\r\n", buf1, bet_pot);
   echo_to_all(AT_WHITE, buf1, ECHOTAR_ALL);

}

void silent_end()
{
   ppl_in_arena = 0;
   ppl_challenged = 0;
   in_start_arena = 0;
   start_time = 0;
   game_length = 0;
   time_to_start = 0;
   time_left_in_game = 0;
   arena_pot = 0;
   bet_pot = 0;
   act(AT_RED, "&w&RINFO: &w&WIt looks like no one was brave enough to enter the Arena.", supermob, NULL, NULL, TO_MUD);
}

void do_end_game()
{
   char buf[MIL];
   CHAR_DATA *i;
   DESCRIPTOR_DATA *d;

   for (d = first_descriptor; d; d = d->next)
      if (!d->connected)
      {
         i = d->character;
         if (d->connected == CON_PLAYING)
         {
            if (IN_ARENA(i))
            {
               i->hit = i->max_hit;
               i->mana = i->max_mana;
               i->move = i->max_move;
               i->pcdata->challenged = NULL;
               stop_fighting(i, TRUE);
               char_from_room(i);
               char_to_room(i, get_room_index(ROOM_VNUM_TEMPLE));
               do_look(i, "auto");
               act(AT_TELL, "$n falls from the sky.", i, NULL, NULL, TO_ROOM);
               //type 0 - win 1 - losses 2 - ties 3 - games 4 - numavg 5 - update 
               update_barena(i, 2);
            }
         }
      }
   sprintf(buf, "&w&RINFO: &w&WAfter %d hours of battle the Match is a draw", game_length);
   act(AT_RED, buf, NULL, NULL, NULL, TO_MUD);
   find_bet_winners(NULL, FALSE);
   time_left_in_game = 0;
   ppl_in_arena = 0;
   ppl_challenged = 0;
   save_barena_data();
}

int num_in_arena()
{
   CHAR_DATA *i;
   DESCRIPTOR_DATA *d;
   int num = 0;

   for (d = first_descriptor; d; d = d->next)
   {
      i = d->character;
      if (d->connected == CON_PLAYING)
      {
         if (IN_ARENA(i))
         {
            if (i->level < LEVEL_IMMORTAL)
               num++;
         }
      }
   }
   return num;
}

void do_awho(CHAR_DATA * ch, char *argument)
{
   DESCRIPTOR_DATA *d;
   CHAR_DATA *tch;
   char buf[MIL];
   char buf2[MIL];
   char buf3[MIL];
   int num = num_in_arena();

   if (num == 0)
   {
      send_to_char("There is no one in the arena right now.\r\n", ch);
      return;
   }

   sprintf(buf, "&W  Players in the &BRafermand&W Arena\r\n");
   sprintf(buf, "%s-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-", buf);
   sprintf(buf, "%s&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-\r\n", buf);
   sprintf(buf, "%sGame Length = &R%-3d   &WTime To Start &R%-3d\r\n", buf, game_length, time_to_start);
   sprintf(buf, "%s&WLevel Limits &R%d &Wto &R%d\r\n", buf, lo_lim, hi_lim);
   sprintf(buf, "%s         &WJackpot = &R%d\r\n", buf, arena_pot);
   sprintf(buf, "%s&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B", buf);
   sprintf(buf, "%s-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B-&W-&B\r\n", buf);
   send_to_char(buf, ch);
   for (d = first_descriptor; d; d = d->next)
      if (!d->connected)
      {
         if (d->connected == CON_PLAYING)
         {
            tch = d->character;
            if (IN_ARENA(tch) && (tch->level < LEVEL_IMMORTAL))
            {
               if (tch->pcdata->clan)
               {
                  CLAN_DATA *pclan = tch->pcdata->clan;

                  strcpy(buf3, pclan->name);
               }
               else
                  strcpy(buf3, "");
               sprintf(buf2, "&W%s         %-11.11s\n\r", PERS_MAP(tch, ch), buf3);
               send_to_char(buf2, ch);
            }
         }
      }
   return;
}

void do_ahall(CHAR_DATA * ch, char *argument)
{
   return;
   /*
      char site[MIL], format[MAX_INPUT_LENGTH], *timestr;
      char format2[MIL];
      struct hall_of_fame_element *fame_node;

      char buf[MIL];
      char buf2[MIL];

      if (!fame_list)
      {
      send_to_char("No-one is in the Hall of Fame.\r\n", ch);
      return;
      }

      sprintf(buf2, "&B|---------------------------------------|\r\n");
      strcat(buf2, "| &WPast Winners of The Rafermand Arena&B  |\r\n");
      strcat(buf2, "|---------------------------------------|\r\n\r\n"); 

      send_to_char(buf2, ch);
      strcpy(format, "%-25.25s  %-10.10s  %-16.16s\r\n");
      sprintf(buf, format,
      "&RName",
      "&RDate",
      "&RAward Amt");
      send_to_char(buf, ch);
      sprintf(buf, format,
      "&B---------------------------------",
      "&B---------------------------------",
      "&B---------------------------------");

      send_to_char(buf, ch);
      strcpy(format2, "&W%-25.25s  &R%-10.10s  &Y%-16d\r\n");
      for (fame_node = fame_list; fame_node; fame_node = fame_node->next)
      {
      if (fame_node->date)
      {
      timestr = asctime(localtime(&(fame_node->date)));
      *(timestr + 10) = 0;
      strcpy(site, timestr);
      }
      else
      strcpy(site, "Unknown");
      sprintf(buf, format2, fame_node->name, site, fame_node->award);
      send_to_char(buf, ch);
      }
      return; */
}


/* Type = 0(False) - Tie    1(True) - Winner */
void find_bet_winners(CHAR_DATA * winner, bool type)
{
   DESCRIPTOR_DATA *d;
   CHAR_DATA *wch;

   char buf1[MIL];

   for (d = first_descriptor; d; d = d->next)
      if (!d->connected)
      {
         wch = d->character;
         if (type == TRUE)
         {
            if ((!IS_NPC(wch)) && (GET_BET_AMT(wch) > 0) && (GET_BETTED_ON(wch) == winner))
            {
               sprintf(buf1, "You have won %d coins on your bet.\r\n", (GET_BET_AMT(wch)) * 2);
               send_to_char(buf1, wch);
               wch->gold += GET_BET_AMT(wch) * 2;
               GET_BETTED_ON(wch) = NULL;
               GET_BET_AMT(wch) = 0;
            }
            else
            {
               GET_BETTED_ON(wch) = NULL;
               GET_BET_AMT(wch) = 0;
            }
         }
         else
         {
            if ((!IS_NPC(wch)) && (GET_BET_AMT(wch) > 0))
            {
               sprintf(buf1, "Due to a tie, you will be returned %d coins on your bet.\n\r", GET_BET_AMT(wch));
               send_to_char(buf1, wch);
               wch->gold += GET_BET_AMT(wch);
               GET_BETTED_ON(wch) = NULL;
               GET_BET_AMT(wch) = 0;
            }
            else
            {
               GET_BETTED_ON(wch) = NULL;
               GET_BET_AMT(wch) = 0;
            }
         }

      }
}

void do_challenge(CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char buf[MIL];
   char arg1[MIL];
   int type = 0;


   if (argument[0] == '\0')
   {
      send_to_char("Syntax: challenge <player>\n\r", ch);
      return;
   }
   argument = one_argument(argument, arg1);

   if ((victim = get_char_world(ch, arg1)) == NULL)
   {
      send_to_char("&WThat character is not of these realms!\n\r", ch);
      return;
   }
   if (((ch->level > LEVEL_IMMORTAL) || (victim->level > LEVEL_IMMORTAL)) && type != 1)
   {
      send_to_char("Sorry, Immortal's are not allowed to participate in the arena.\n\r", ch);
      return;
   }

   if (IS_NPC(victim))
   {
      send_to_char("&WYou cannot challenge mobiles!\n\r", ch);
      return;
   }
   if (victim->name == ch->name)
   {
      send_to_char("&WYou cannot challenge yourself!", ch);
      return;
   }

   if (num_in_arena() > 0)
   {
      send_to_char("&WSomeone is already in the arena!\n\r", ch);
      return;
   }
   sprintf(buf, "&R%s &Whas challenged you to a non-fatal dual!\n\r", PERS_MAP(ch, victim));
   send_to_char(buf, victim);
   send_to_char("&WPlease either accept or decline the challenge.\n\r\n\r", victim);
  
   act(AT_RED, "&w&RINFO:  &w&W$n has challenged $N to a non-fatal dual!!!", ch, NULL, victim, TO_MUD);
   victim->pcdata->challenged = ch;
}

void do_accept(CHAR_DATA * ch, char *argument)
{
   if (num_in_arena() > 0)
   {
      send_to_char("Please wait until the current arena is closed before you accept.\n\r", ch);
      return;
   }
   if (IS_NPC(ch))
   {
      send_to_char("You cannot fight in the arena silly mob.\n\r", ch);
      return;
   }

   if (!(ch->pcdata->challenged))
   {
      send_to_char("You have not been challenged!\n\r", ch);
      return;
   }
   else
   {
      CHAR_DATA *dch;

      dch = ch->pcdata->challenged;
      act(AT_RED, "&w&RINFO:  &w&W$n has accepted $N's challenge!", ch, NULL, dch, TO_MUD);
      ch->pcdata->challenged = NULL;
      update_players_map(ch, -1, -1, -1, 1, get_room_index(PREP_START));
      do_look(ch, "auto");
      update_players_map(dch, -1, -1, -1, 1, get_room_index(PREP_START));
      do_look(dch, "auto");
      barena = 0;
      ppl_in_arena = 0;
      ppl_challenged = 1;
      time_to_start = 2;
      ppl_at_start = 2;
      time_left_in_game = 0;
      arena_pot = 0;
      bet_pot = 0;
      start_arena();
      return;
   }
}

void do_decline(CHAR_DATA * ch, char *argument)
{
   if (IS_NPC(ch))
   {
      send_to_char("You cannot fight in the Arena you silly mob.\n\r", ch);
      return;
   }
   if (ch->pcdata->challenged)
   {
      act(AT_RED, "&w&RINFO: &w&W$n has DECLINED %N's challenge! WHAT A WUSS!!!\n\r", ch, NULL, ch->pcdata->challenged, TO_MUD);
      ch->pcdata->challenged = NULL;
      return;
   }
   else
   {
      send_to_char("You have not been challenged!\n\r", ch);
      return;
   }
}