/
atm/
/* **************************************************************

ATM was recoded for futuristic type MUDs by Muerte

muerte22@hotmail.com I did some major changes but will take NO credit

away from the original coder. Thanks for help from Chil (B. Bailey) 

chil@gate.net and atm.c is done.



Original Code was:

  January 25th, 1998

  Gothar's Bank Code Version 1.2

  1997 Copyright <* FREEWARE *>

  If you use this code:

     1.Keep all the credits in the code.

     2.Use the help entry for bank

     3.Send a bug report,any comments or ideas

       Ian McCormick (aka Gothar)

       mcco0055@algonquinc.on.ca

************************************************************** */

/* N.B: READ this code before you ADD anything!!

 *      This is atm.c

 */

#if defined(macintosh)

#include <types.h>

#else

#include <sys/types.h>

#include <sys/time.h>

#endif

#include <ctype.h>

#include <stdio.h>

#include <time.h>

#include <string.h>

#include <stdlib.h>

#include "merc.h"

#include "recycle.h"





/*

 * Define Obj vnum for ATM.

 * --Chil

 */

#define OBJ_VNUM_ATM	3001





/* command procedures needed */

DECLARE_DO_FUN( do_help		);



void do_account (CHAR_DATA *ch, char *argument)

{

   long gold = 0, silver = 0;

   char buf[MAX_STRING_LENGTH];

   gold = ch->pcdata->gold_bank;

   silver = ch->pcdata->silver_bank;



  /* No NPC's, No pets, No imms,

   * No chainmail, No service! 

   */

   if( (IS_NPC(ch) || IS_SET(ch->act,ACT_PET)) 

        || (IS_IMMORTAL(ch)) )

   {

      send_to_char("Only players need money!\n\r", ch);

      return;

   }

   {

      sprintf( buf,"Your Account records show:\n\rYou have in your pocket:\n\r"

                   "  Gold:   %10ld\n\r  Silver: %10ld\n\r" 

                   "In your Account:\n\r"

                   "  Gold:   %10ld\n\r  Silver: %10ld\n\r",ch->gold, ch->silver,gold, silver); 

   }

   send_to_char(buf, ch);

   return;

}



void do_deposit (CHAR_DATA *ch, char *argument)

{

   OBJ_DATA *pObj;

   bool atm;

   long amount = 0; 

   char arg1[MAX_INPUT_LENGTH];

   char arg2[MAX_INPUT_LENGTH];

   char buf[MAX_STRING_LENGTH];



   /* No NPC's, No pets, No imms,

    * No chainmail, No service! 

    */

   if( (IS_NPC(ch) || IS_SET(ch->act,ACT_PET)) 

        || (IS_IMMORTAL(ch)) )

   {

      send_to_char("Only players need money!\n\r", ch);

      return;

   }



   for( pObj = ch->in_room->contents; pObj; pObj = pObj->next )

   {

	if( atm->vnum == OBJ_VNUM_ATM )

	    atm = TRUE;

   }



   if( !atm )

   {

      send_to_char("You must be near an ATM to deposit.\n\r",ch);

      return;

   }

   else  /* In the Bank */

   {

      argument = one_argument(argument,arg1);

      argument = one_argument(argument,arg2);

      if (arg1[0] == '\0'|| arg2[0] == '\0')

    {

         send_to_char("What would you like to deposit?\n\r", ch );

         send_to_char("GBS: Deposit <value> gold\n\r",ch);

         send_to_char("     Deposit <value> silver\n\r",ch);

         send_to_char("For more information Type 'help bank'.\n\r",ch);

         return;

    }





BLAHBLAH

    if( is_number( arg1 ) )

    {

        amount = atoi(arg1);

        if ( amount <= 0 )

        {

            send_to_char( "GBS: To deposit you must give money!\n\r", ch );

            send_to_char( "     For more information Type 'help bank'.\n\r",ch);

            return;

        }

        if(!str_cmp( arg2, "gold"))

        {

            if (ch->gold < amount)

            {

                send_to_char("GBS: You don't have that much gold.\n\r",ch);

                return;

            }

            else

            {

                ch->pcdata->gold_bank += amount;

                ch->gold -= amount;

                act("$n deposits gold into $s account.", ch,NULL,NULL,TO_ROOM);

                sprintf( buf, "GBS: You have deposited %ld Gold.\n\r   Account: %10ld.\n\r   Pocket: %8ld.\n\r",

                         amount, ch->pcdata->gold_bank, ch->gold);

                send_to_char( buf, ch);

                     return;

            }

        }

        if(!str_cmp( arg2, "silver"))

        {

            if (ch->silver < amount)

            {

                send_to_char("GBS: You don't have that much silver.\n\r",ch);

                return;

            }

            else

            {

                ch->pcdata->silver_bank += amount;

                ch->silver -= amount;

                act("$n deposits silver into $s account.", ch,NULL,NULL, TO_ROOM);

                sprintf( buf, "GBS: You have deposited %ld Silver.\n\r   Account: %10ld.\n\r   Pocket: %8ld.\n\r", amount, ch->pcdata->silver_bank, ch->silver);

                send_to_char( buf, ch);

                return;

            }

        }

    }



      send_to_char("The type of currency must be stated before the amount.\n\r",ch);

   }

   send_to_char( "ATM doesn't exist.\n\r", ch );

   return;

}





void do_withdraw (CHAR_DATA *ch, char *argument)

{

   OBJ_DATA pObj;

   bool atm;

   long amount = 0; 

   char arg[MAX_INPUT_LENGTH];

   char arg2[MAX_INPUT_LENGTH];

   char buf[MAX_STRING_LENGTH];



   /* No NPC's, No pets, No imms,

    * No chainmail, No service! 

    */

   if( (IS_NPC(ch) || IS_SET(ch->act,ACT_PET)) 

        || (IS_IMMORTAL(ch)) )

   {

      send_to_char("Only players need money!\n\r", ch);

      return;

   }



   for( pObj = ch->in_room->contents; pObj; pObj = pObj->next )

   {

	if( atm->vnum == OBJ_VNUM_ATM )

	    atm = TRUE;

   }



   if( !atm )

   {

      send_to_char("You must be near an ATM to withdraw.\n\r",ch);

      return;

   }

   else  /* In the Bank */

   {

      argument = one_argument( argument, arg );

      argument = one_argument( argument, arg2 );

      if (arg[0] == '\0'|| arg2[0] == '\0')

      {

         send_to_char("How much to withdraw away?\n\r", ch );

         {

            send_to_char("GBS: Withdraw <value> gold\n\r",ch);

            send_to_char("     Withdraw <value> silver\n\r",ch);

         }

         send_to_char("For more information Type 'help bank'.\n\r",ch);

         return;

      }



      if( is_number( arg ) )

      {

          amount = atoi(arg);

          if ( amount <= 0 )

          {

              send_to_char( "GBS: To withdraw you must give an amount!\n\r", ch );

              send_to_char( "     For information Type 'help bank'.\n\r",ch);

              return;

          }

          if(!str_cmp( arg2, "gold"))

          {

              if (ch->pcdata->gold_bank < amount)

              {

                  send_to_char("GBS: You don't have that much gold in your account.\n\r",ch);

                  return;

              }

              else

              {

                  ch->pcdata->gold_bank -= amount;

                  ch->gold += amount;

                  act("$n withdraws gold from $s account.", ch,NULL,NULL, TO_ROOM);

                  sprintf( buf, "GBS: You have withdrawn %ld Gold.\n\r   Account: %10ld.\n\r   Pocket: %8ld.\n\r", amount, ch->pcdata->gold_bank, ch->gold);

                  send_to_char( buf, ch);

                  return;

              }

          }

          if(!str_cmp( arg2, "silver"))

          {

              if (ch->pcdata->silver_bank < amount)

              {

                  send_to_char("GBS: You don't have that much silver in your account.\n\r",ch);

                  return;

              }

              else

              {

                  ch->pcdata->silver_bank -= amount;

                  ch->silver += amount;

                  act("$n withdraws silver from $s account.", ch,NULL,NULL, TO_ROOM);

                  sprintf( buf, "GBS: You have withdrawn %ld Silver.\n\r   Account: %10ld.\n\r   Pocket: %8ld.\n\r", amount, ch->pcdata->silver_bank, ch->silver);

                  send_to_char( buf, ch);

                  return;

              }

          }

      }

      else

      {

          send_to_char("The type of currency must be stated before the amount.\n\r",ch);

      }

   }

   return;

}





void do_change (CHAR_DATA *ch, char *argument)

{

   OBJ_DATA *pObj;

   bool atm;

   int amount = 0,change = 0;

   char buf [MAX_STRING_LENGTH];

   char arg [MAX_INPUT_LENGTH];





   for( pObj = ch->in_room->contents; pObj; pObj = pObj->next )

   {

	if( atm->vnum == OBJ_VNUM_ATM )

	    atm = TRUE;

   }



   if(!atm)

   {

      send_to_char("You must be near an ATM to change currency.\n\r",ch);

      return;

   }

   else  /* In the Bank */

   {

      /* No NPC's, No pets, No imms,

       * No chainmail, No service! 

       */

      if( (IS_NPC(ch) || IS_SET(ch->act,ACT_PET)) 

           || (IS_IMMORTAL(ch)) )

      {

         send_to_char("Only players need to change currency!\n\r", ch);

         return;

      }

      {

         argument = one_argument( argument, arg );

         if ( is_number( arg ) )

         {

 	      amount = atoi(arg);

	      if ( amount <= 0 )

            {

               send_to_char("GBS: How much silver do you wish to exchange?\n\r",ch);

               return;

            }

            else

            {

               if(ch->silver < amount )

               {

                  sprintf(buf, "GBS: You can only change %ld silver.\n\r",ch->silver);

                  send_to_char( buf, ch);

                  return;

               }

               else

               {

                  change = ((int)ch->silver - amount)/100;

                  ch->gold += change;

                  ch->silver -= amount;

                  sprintf( buf, "GBS: You have changed %d Silver.\n\rYou have recieved %d Gold.\n\r", amount, change);

                  send_to_char( buf, ch);

                  return;

               }

            }

         }

         else

         {

            send_to_char("GBS: Exchange syntax:\n\r",ch);

            send_to_char("     Exhange <value> i.e. change 120\n\r",ch);

            send_to_char("     So 1200 silver exchanges into 12 gold.\n\r",ch);

            send_to_char("GBS: Doesn't profit from currency exchange!\n\r",ch);

            return;

         }

      }

   } 

   return;

}





/* **************** This is the End of atm.c *************** */