CurrencyMods02_12_06/
CurrencyMods02_12_06/banks/
CurrencyMods02_12_06/money/
// ==> This file will deal with moneyierence, and its awarding/subtracting...


#include "../mud.h"
#include "../character.h"
#include "../account.h"
#include "../storage.h"
#include "../auxiliary.h"
#include "../handler.h"
#include "../socket.h"
#include "../utils.h"
#include "../save.h"
#include "../object.h"
#include "../set_val/set_val.h"

#include "money.h"

/************************************************************************
*			auxiliary data for money			*
************************************************************************/
typedef struct money_data {
  int money;
} MONEY_DATA;

  MONEY_DATA *newMoneyData() {
  MONEY_DATA *data = malloc(sizeof(MONEY_DATA));
  data->money = 0;
  return data;
}

void deleteMoneyData(MONEY_DATA *data) {
  free(data);
}

void moneyDataCopyTo(MONEY_DATA *from, MONEY_DATA *to) {
  to->money = from->money;
}

MONEY_DATA *moneyDataCopy(MONEY_DATA *data) {
  MONEY_DATA *new_data = newMoneyData();
  moneyDataCopyTo(data, new_data);
  return new_data;
}

STORAGE_SET *moneyDataStore(MONEY_DATA *data) {
  STORAGE_SET *set = new_storage_set();
  store_int(set, "money", data->money);
  return set;
}

MONEY_DATA *moneyDataRead(STORAGE_SET *set) {
  MONEY_DATA *data = newMoneyData();
  data->money = read_int(set, "money");
  return data;
}

int charGetMoney(CHAR_DATA *ch)
{
MONEY_DATA *data = charGetAuxiliaryData(ch, "money_aux_data");
return data->money;
}

void charSetMoney(CHAR_DATA *ch, int new_money)
{
	MONEY_DATA *moneydata = charGetAuxiliaryData(ch, "money_aux_data");
	moneydata->money = new_money;
	return;
}

void do_get_money(CHAR_DATA *ch)
{
  int char_cash;
  int cash_change;
  char_cash = (charGetMoney(ch));
  cash_change = (char_cash +1);
  send_to_char(ch, "You get a gold coin.\r\n");
  charSetMoney(ch, cash_change);
}

COMMAND(cmd_pay)
{
  int payment;
  int char_money;
  int char_cash;
  int recv_cash;
  CHAR_DATA *recv = NULL;  // the person we're paying
  char_money = charGetMoney(ch);

  if(!parse_args(ch, TRUE, cmd, arg, "ch.room.noself int", &recv, &payment))
    return;
  if(charGetMoney == 0 || charGetMoney == NULL){
  send_to_char(ch, "You have no money to pay %s with.\r\n", charGetName(recv));
  }else if(char_money < payment){
  send_to_char(ch, "You only have %d gold coin%s.\r\n", charGetMoney(ch), (charGetMoney(ch) == 1 ? "" : "s"));
  }else if(payment < 0){
  send_to_char(ch, "You can't pay a negative amount.\r\n");
  }else{
  char_cash = (charGetMoney(ch) - payment);
  recv_cash = (charGetMoney(recv) + payment);
  charSetMoney(ch, char_cash);
  charSetMoney(recv, recv_cash);
  send_to_char(ch, "You pay %s %d gold coin%s.\r\n", charGetName(recv), payment, (payment == 1 ? "" : "s"));
  send_to_char(recv, "%s pays you %d gold coin%s.\r\n", charGetName(ch), payment, (payment == 1 ? "" : "s"));
  }
}
/************************************************************************
	Below here are all of the init_ functions for this file.
*************************************************************************/
void init_money(void)
{
	add_set("money", SET_CHAR, SET_TYPE_INT, charSetMoney, NULL);

	auxiliariesInstall("money_aux_data", newAuxiliaryFuncs(AUXILIARY_TYPE_CHAR, newMoneyData, 
		deleteMoneyData, moneyDataCopyTo, moneyDataCopy, moneyDataStore, moneyDataRead));
	add_cmd("pay", "pay", cmd_pay, POS_UNCONCIOUS, POS_FLYING, "player", TRUE, FALSE);
}