/**************************************************
* Original Code By : Gothar
* Rewriten by : Wiccaan
* Addons : None
* Removes : - Thief System
* - Share System
*
* Contact Gothar : mcco0055@algonquinc.on.ca
* Contact Wiccaan : wiccaan@comcast.net
*
* Beings that this code has been rewriten
* by Wiccaan, Gothar may not be able to
* help with this.
* Credit goes to Gothar beings that he wrote it.
* Wiccaan just redid it.
***************************************************/
#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"
/*
* These are the vnums for your bank.
* You can use more then one.
* Beings that there isnt a bank in your mud yet,
* Im putting a random number instead.
*/
/* Be sure to change this and add the area to your mud */
#define ROOM_VNUM_BANK 3360
/* Declare procedures that will be used */
DECLARE_DO_FUN( do_help );
/* Now for the code */
/* do_account is your balace, you can change this to do_balance if you want.
* if you do change it, make sure to change the tables in interp.c and .h.
*/
void do_account (CHAR_DATA *ch, char *argument)
{
long gold = 0;
long silver = 0;
char buf[MAX_STRING_LENGTH];
gold = ch->pcdata->gold_bank;
silver = ch->pcdata->silver_bank;
/* IMM's, pet's, and npc's dont need bank accounts so we will remove them */
if( (IS_NPC(ch) || IS_SET(ch->act,ACT_PET))
|| (IS_IMMORTAL(ch)) )
{
send_to_char("Only players need accounts.\n\r",ch);
return;
}
if(ch->in_room != get_room_index(ROOM_VNUM_BANK))
{
send_to_char("You must be at the bank!\n\r", ch);
}
else if (ch->in_room == get_room_index(ROOM_VNUM_BANK))
{
sprintf( buf, "You have Gold: %10ld Silver: %10ld in your account.\n\r",gold, silver);
send_to_char(buf, ch);
}
}
/* do_deposit is to put money in the bank */
void do_deposit (CHAR_DATA *ch, char *argument)
{
long amount = 0;
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
/* Remove IMM's, pet's, and npc's again */
if( (IS_NPC(ch) || IS_SET(ch->act,ACT_PET))
|| (IS_IMMORTAL(ch)) )
{
send_to_char("Only players need a bank account.\n\r",ch);
return;
}
/* If not in bank let them know */
if(ch->in_room != get_room_index(ROOM_VNUM_BANK))
{
send_to_char("You must be at the bank!\n\r", ch);
return;
}
else /* If they are in the bank */
{
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if (arg1[0] =='\0' || arg2[0] =='\0')
{
send_to_char("How much do you want to deposit?\n\r", ch);
send_to_char("Commands are:\n\r", ch);
send_to_char("Deposite <value> gold\n\r", ch);
send_to_char("Deposite <value> silver\n\r", ch);
return;
}
if(ch->in_room == get_room_index(ROOM_VNUM_BANK))
{
if ( is_number( arg1 ) )
{
amount = atoi(arg1);
if ( amount <= 0)
{
send_to_char( "To deposit money, you must give money!\r\n", ch);
send_to_char( "For more help type 'help bank'.\r\n", ch);
return;
}
/* If they are depositing gold */
if(!str_cmp( arg2, "gold"))
{
if (ch->gold < amount)
{
send_to_char("You dont have that much gold.\n\r", ch);
return;
}
else
{
ch->pcdata->gold_bank += amount;
ch->gold -= amount;
act("$n has deposited some gold into $s account.", ch, NULL, NULL, TO_ROOM);
sprintf( buf, "You have deposited %ld Gold.\n\r Account: %10ld.\n\r You still hold %8ld gold.\n\r", amount, ch->pcdata->gold_bank, ch->gold);
send_to_char( buf, ch);
return;
}
}
/* If they are depositing silver */
if(!str_cmp( arg2, "silver"))
{
if (ch->silver < amount)
{
send_to_char("You dont have that much silver.\n\r", ch);
return;
}
else
{
ch->pcdata->silver_bank += amount;
ch->silver -= amount;
act("$n has deposited some silver into $s account.", ch, NULL, NULL, TO_ROOM);
sprintf( buf , "You have deposited %ld Silver.\n\r Account: %10ld silver.\n\r You still hold %8ld silver.\n\r", amount, ch->pcdata->silver_bank, ch->silver);
send_to_char( buf, ch);
return;
}
}
}
}
}
return;
}
void do_withdraw (CHAR_DATA *ch, char *argument)
{
long amount = 0;
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
/* Remove IMM's, pet's, and npc's again */
if( (IS_NPC(ch) || IS_SET(ch->act,ACT_PET))
|| (IS_IMMORTAL(ch)) )
{
send_to_char("Only players need have a bank account.\n\r", ch);
return;
}
/* If not in bank let them know */
if(ch->in_room != get_room_index(ROOM_VNUM_BANK))
{
send_to_char("You must be at the bank!\n\r", ch);
}
else /* If they are in the bank */
{
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if (arg1[0] == '\0' || arg2[0] == '\0')
{
send_to_char("How much do you want to withdraw?\n\r", ch);
send_to_char("Commands are:\n\r", ch);
send_to_char("Withdraw <value> gold\n\r", ch);
send_to_char("Withdraw <value> silver\n\r", ch);
return;
}
if(ch->in_room == get_room_index(ROOM_VNUM_BANK))
{
if( is_number( arg1 ) )
{
amount = atoi(arg1);
if ( amount <= 0 )
{
send_to_char("To withdraw that amount, you have to have it in the bank first.\n\r", ch);
send_to_char("For more help type 'help bank'.\n\r", ch);
return;
}
/* If they are withdrawing gold */
if(!str_cmp( arg2, "gold"))
{
if (ch->pcdata->gold_bank < amount)
{
send_to_char("You dont 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.\n\r", ch, NULL, NULL, TO_ROOM);
sprintf( buf, "You have withdrawn %ld Gold.\n\r Account: %10ld gold.\n\r You now hold: %8ld gold.\n\r", amount, ch->pcdata->gold_bank, ch->gold);
send_to_char( buf, ch);
return;
}
}
/* If they are withdrawing silver */
if(!str_cmp( arg2, "silver"))
{
if (ch->pcdata->silver_bank < amount)
{
send_to_char("You dont 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.\n\r", ch, NULL, NULL, TO_ROOM);
sprintf( buf, "You have withdrawn %ld Silver.\n\r Account: %10ld silver.\n\r You now hold: %8ld silver.\n\r", amount, ch->pcdata->silver_bank, ch->silver);
send_to_char( buf, ch);
return;
}
}
}
}
}
return;
}