/***************************************************************************  
 *                          SMAUG Banking Support Code                     *
 ***************************************************************************
 *                                                                         *
 * This code may be used freely, as long as credit is given in the help    *
 * file. Thanks.                                                           *
 *								           *
 *                                        -= Minas Ravenblood =-           *
 *                                 Implementor of The Apocalypse Theatre   *
 *                                      (email: krisco7@hotmail.com)       *
 *									   *
 ***************************************************************************


/* Install */

This is quite easy to install, just follow these steps:

1.) Edit mud.h and add a field to the pc_data structure called 'balance'.

2.) Edit DB.C and SAVE.C to save/read the "Balance" field. (if you do not
    know how to do this, see the docs in /dist/doc)

3.) Cut and Paste this code into SHOPS.C

4.) Add an ACT_BANKER mob flag.

5.) Add do_bank to mud.h and tables.c

6.) Create a help file. (Don't forget to gimme a plug! :>)

7.) Create a command bank with cedit. Recommended level is 2.

8.) Set the banker flag on a mob of your choice, and enjoy your new
    banking system.

/* Note */
  
  I'm not sure if this code contains any bugs. I have not found any, but I
have not thoroughly tested it, as I do not have any players yet. (Don't have
a site! :<) You might wanna give it a once over and see if you can spot
anything.

/*
 * The Code 
 */

/* You can add this or just put it in the do_bank code. I don't really know
   why I made a seperate function for this, but I did. If you do add it,
   don't forget to declare it */
CHAR_DATA *find_banker( CHAR_DATA *ch )
{
  CHAR_DATA *banker;
  
  for ( banker = ch->in_room->first_person; banker; banker = banker->next_in_room )
    if ( IS_NPC( banker ) && IS_SET( banker->act, ACT_BANKER ) )
      break;

  return banker;
}

/* SMAUG Bank Support
 * Coded by Minas Ravenblood for The Apocalypse Theatre
 * (email: krisco7@hotmail.com)
 */
void do_bank( CHAR_DATA *ch, char *argument )
{
  CHAR_DATA *banker;
  char arg1[MIL];
  char buf [MSL];
  int amount;
  
  if ( !( banker = find_banker( ch ) ) )
  {
    send_to_char( "You can't seem to find a banker.\n\r", ch );
    return;
  }
  
  if ( IS_NPC( ch ) )
  {
    sprintf( buf, "Sorry, %s, we don't do business with mobs.", ch->short_descr );
    do_say( banker, buf );
    return;
  }
  
  if ( argument[0] == '\0' )
  {
    do_say( banker, "If you need help, see HELP BANK." );
    return;
  }
  
  argument = one_argument( argument, arg1 );
  
  if ( !str_cmp( arg1, "balance" ) )
  {
    int total = ch->pcdata->balance + ch->gold;
    
    set_char_color( AT_GREEN, ch );
    sprintf( buf, "You are carrying %d gold coin%s.\n\r", ch->gold, (ch->gold == 1) ? "" : "s" );
    send_to_char( buf, ch );
    sprintf( buf, "You also have %d gold coin%s in the bank.\n\r",
             ch->pcdata->balance, (ch->pcdata->balance == 1) ? "" : "s" );
    send_to_char( buf, ch );
    sprintf( buf, "Making a total of %d gold coin%s.\n\r",
             total, (total == 1) ? "" : "s" );
    send_to_char( buf, ch );
    return;
  }
             
  if ( !str_cmp( arg1, "deposit" ) )
  {
    char arg2[MIL];
    
    argument = one_argument( argument, arg2 );
    
    if ( arg2 == '\0' )
    {
      sprintf( buf, "%s How much gold do you wish to deposit?", ch->name );
      do_tell( banker, buf );
      return;
    }
    
    if ( str_cmp( arg2, "all" ) && !is_number( arg2 ) )
    {
      sprintf( buf, "%s How much gold do you wish to deposit?", ch->name );
      do_tell( banker, buf );
      return;
    }
    
    if ( !str_cmp( arg2, "all" ) )
      amount = ch->gold;
    else
      amount = atoi( arg2 );
    
    if ( amount > ch->gold )
    {
      sprintf( buf, "%s Sorry, but you don't have that much gold to deposit.",
      	       ch->name );
      do_tell( banker, buf );
      return;
    }
    
    if ( amount <= 0 )
    {
      sprintf( buf, "%s Oh, I see.. I didn't know i was doing business with a comedian.",
               ch->name );
      do_tell( banker, buf );
      return;
    }
    
    ch->gold		-= amount;
    ch->pcdata->balance	+= amount;
    sprintf( buf, "You deposit %d gold coin%s.\n\r", amount, (amount != 1) ? "s" : "" );
    set_char_color( AT_PLAIN, ch );
    send_to_char( buf, ch );
    sprintf( buf, "$n deposits %d gold coin%s.\n\r", amount, (amount != 1) ? "s" : "" );
    act( AT_PLAIN, buf, ch, NULL, NULL, TO_ROOM );
    return;
  }
  
  if ( !str_cmp( arg1, "withdraw" ) )
  {
    char arg2[MIL];
    
    argument = one_argument( argument, arg2 );
    
    if ( arg2 == '\0' )
    {
      sprintf( buf, "%s How much gold do you wish to withdraw?", ch->name );
      do_tell( banker, buf );
      return;
    }
    if ( str_cmp( arg2, "all" ) && !is_number( arg2 ) )
    { 
      sprintf( buf, "%s How much gold do you wish to withdraw?", ch->name );
      do_tell( banker, buf );
      return;
    }
    
    if ( !str_cmp( arg2, "all" ) )
      amount = ch->pcdata->balance;    
    else
      amount = atoi( arg2 );
    
    if ( amount > ch->pcdata->balance )
    {
      sprintf( buf, "%s But you do not have that much gold in your account!",
      	       ch->name );
      do_tell( banker, buf );
      return;
    }
    
    if ( amount <= 0 )
    {
      sprintf( buf, "%s Oh I see.. I didn't know i was doing business with a comedian.",
               ch->name );
      do_tell( banker, buf );
      return;
    }
    
    ch->pcdata->balance	-= amount;
    ch->gold		+= amount;
    sprintf( buf, "You withdraw %d gold coin%s.\n\r", amount, (amount != 1) ? "s" : "" );
    set_char_color( AT_PLAIN, ch );
    send_to_char( buf, ch );
    sprintf( buf, "$n withdraws %d gold coin%s.\n\r", amount, (amount != 1) ? "s" : "" );
    act( AT_PLAIN, buf, ch, NULL, NULL, TO_ROOM );
    return;
  }
  
  if ( !str_cmp( arg1, "transfer" ) )
  {
    CHAR_DATA *victim;
    char arg2[MIL];
    char arg3[MIL];
    
    argument = one_argument( argument, arg2 );
    argument = one_argument( argument, arg3 );
    
    if ( arg2 == '\0' || arg3 == '\0' )
    {
      sprintf( buf, "%s How much gold do you wish to send to who?", ch->name );
      do_tell( banker, buf );
      return;
    }
    if ( str_cmp( arg2, "all" ) && !is_number( arg2 ) )
    {
      sprintf( buf, "%s How much gold do you wish to send to who?", ch->name );
      do_tell( banker, buf );
      return;
    }
    
    if ( !( victim = get_char_world( ch, arg3 ) ) )
    {
      sprintf( buf, "%s %s could not be located.", ch->name, capitalize(arg3) );
      do_tell( banker, buf );
      return;
    }
    
    if ( IS_NPC( victim ) )
    {
      sprintf( buf, "%s We do not do business with mobiles...", ch->name );
      do_tell( banker, buf );
      return;
    }
    
    if ( !str_cmp( arg2, "all" ) )
      amount = ch->pcdata->balance;
    else
      amount = atoi( arg2 );
    
    if ( amount > ch->pcdata->balance )
    {
      sprintf( buf, "%s You are very generous, but you don't have that much gold!", ch->name );
      do_tell( banker, buf );
      return;
    }
    
    if ( amount <= 0 )
    {
      sprintf( buf, "%s Oh I see.. I didn't know I was doing business with a comedian.", ch->name );
      do_tell( banker, buf );
      return;
    }
    
    ch->pcdata->balance     -= amount;
    victim->pcdata->balance += amount;
    sprintf( buf, "You transfer %d gold coin%s to %s's bank account.\n\r",
             amount, (amount != 1) ? "s" : "", victim->name );
    set_char_color( AT_GREEN, ch );
    send_to_char( buf, ch );
    sprintf( buf, "%s just transferred %d gold coin%s to your bank account.\n\r",
             ch->name, amount, (amount != 1) ? "s" : "" );
    set_char_color( AT_GREEN, victim );
    send_to_char( buf, victim );
    return;
  }
  
  if ( !str_cmp( arg1, "help" ) )
  {
    do_help( ch, "bank" );
    return;
  }
  return;
}



 =============================================================================
/   ______ _______ ____   _____   ___ __    _ ______    ____  ____   _____   /
\  |  ____|__   __|  _ \ / ____\ / _ \| \  / |  ____|  / __ \|  _ \ / ____\  \
/  | |__     | |  | |_| | |     | |_| | |\/| | |___   | |  | | |_| | |       /
/  | ___|    | |  | ___/| |   __|  _  | |  | | ____|  | |  | |  __/| |   ___ \
\  | |       | |  | |   | |___| | | | | |  | | |____  | |__| | |\ \| |___| | /
/  |_|       |_|  |_|  o \_____/|_| |_|_|  |_|______|o \____/|_| \_|\_____/  \
\                                                                            /
 ============================================================================

------------------------------------------------------------------------------
ftp://ftp.game.org/pub/mud      FTP.GAME.ORG      http://www.game.org/ftpsite/
------------------------------------------------------------------------------

 This file came from FTP.GAME.ORG, the ultimate source for MUD resources.

------------------------------------------------------------------------------