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