// ==> 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);
}