Added increase_gold/bank funcs to prevent cash overflow

This commit is contained in:
JamDog 2010-11-26 14:08:54 +00:00
parent a95ac76ef7
commit 4892b22a51
13 changed files with 230 additions and 101 deletions

View file

@ -35,6 +35,10 @@ export (QQ's a zone into a tarball)
Xlist (mlist, olist, rlist, zlist, slist, tlist, qlist)
(lots of major bugfixes too)
@
[Nov 26 2010] - Jamdog
Bug-Fix: set level now allows GRGOD or higher to set to any mortal level
Advance command changed to work for both mortal and admin levels
Added increase_gold and increase_bank functions to prevent cash overflows
[Nov 25 2010] - Jamdog
Added diagonal directions with cedit toggle (default to 'off')
Bug-Fix: admin <player> default now targets the victim player

View file

@ -186,7 +186,7 @@ static void get_check_money(struct char_data *ch, struct obj_data *obj)
extract_obj(obj);
GET_GOLD(ch) += value;
increase_gold(ch, value);
if (value == 1)
send_to_char(ch, "There was 1 coin.\r\n");
@ -424,7 +424,7 @@ static void perform_drop_gold(struct char_data *ch, int amount, byte mode, room_
send_to_char(ch, "You drop some gold which disappears in a puff of smoke!\r\n");
}
GET_GOLD(ch) -= amount;
decrease_gold(ch, amount);
}
}
@ -590,7 +590,7 @@ ACMD(do_drop)
if (amount && (subcmd == SCMD_JUNK)) {
send_to_char(ch, "You have been rewarded by the gods!\r\n");
act("$n has been rewarded by the gods!", TRUE, ch, 0, 0, TO_ROOM);
GET_GOLD(ch) += amount;
increase_gold(ch, amount);
}
}
@ -663,8 +663,8 @@ static void perform_give_gold(struct char_data *ch, struct char_data *vict,
act(buf, TRUE, ch, 0, vict, TO_NOTVICT);
if (IS_NPC(ch) || (!ADM_FLAGGED(ch, ADM_MONEY)))
GET_GOLD(ch) -= amount;
GET_GOLD(vict) += amount;
decrease_gold(ch, amount);
increase_gold(vict, amount);
bribe_mtrigger(vict, ch, amount);
}
@ -1533,7 +1533,7 @@ ACMD(do_sac)
switch (rand_number(0, 5)) {
case 0:
send_to_char(ch, "You sacrifice %s to the Gods.\r\nYou receive one gold coin for your humility.\r\n", GET_OBJ_SHORT(j));
GET_GOLD(ch) += 1;
increase_gold(ch, 1);
break;
case 1:
send_to_char(ch, "You sacrifice %s to the Gods.\r\nThe Gods ignore your sacrifice.\r\n", GET_OBJ_SHORT(j));
@ -1548,15 +1548,15 @@ ACMD(do_sac)
break;
case 4:
send_to_char(ch, "Your sacrifice to the Gods is rewarded with %d gold coins.\r\n", GET_OBJ_COST(j));
GET_GOLD(ch) += GET_OBJ_COST(j);
increase_gold(ch, GET_OBJ_COST(j));
break;
case 5:
send_to_char(ch, "Your sacrifice to the Gods is rewarded with %d gold coins\r\n", (2*GET_OBJ_COST(j)));
GET_GOLD(ch) += (2*GET_OBJ_COST(j));
increase_gold(ch, (2*GET_OBJ_COST(j)));
break;
default:
send_to_char(ch, "You sacrifice %s to the Gods.\r\nYou receive one gold coin for your humility.\r\n", GET_OBJ_SHORT(j));
GET_GOLD(ch) += 1;
increase_gold(ch, 1);
break;
}
for (jj = j->contains; jj; jj = next_thing2) {

View file

@ -185,7 +185,7 @@ ACMD(do_steal)
percent -= 50;
/* No stealing if not allowed. If it is no stealing from Imm's or Shopkeepers. */
if (IS_ADMIN(vict, ADMLVL_IMMORT) || pcsteal || GET_MOB_SPEC(vict) == shop_keeper)
if (ADM_FLAGGED(vict, ADM_NOSTEAL) || pcsteal || GET_MOB_SPEC(vict) == shop_keeper)
percent = 101; /* Failure */
if (str_cmp(obj_name, "coins") && str_cmp(obj_name, "gold")) {
@ -253,14 +253,14 @@ ACMD(do_steal)
gold = (GET_GOLD(vict) * rand_number(1, 10)) / 100;
gold = MIN(1782, gold);
if (gold > 0) {
GET_GOLD(ch) += gold;
GET_GOLD(vict) -= gold;
increase_gold(ch, gold);
decrease_gold(vict, gold);
if (gold > 1)
send_to_char(ch, "Bingo! You got %d gold coins.\r\n", gold);
else
send_to_char(ch, "You manage to swipe a solitary gold coin.\r\n");
send_to_char(ch, "Bingo! You got %d gold coins.\r\n", gold);
else
send_to_char(ch, "You manage to swipe a solitary gold coin.\r\n");
} else {
send_to_char(ch, "You couldn't get any gold...\r\n");
send_to_char(ch, "You couldn't get any gold...\r\n");
}
}
}
@ -532,7 +532,7 @@ ACMD(do_split)
return;
}
GET_GOLD(ch) -= share * (num - 1);
decrease_gold(ch, share * (num - 1));
/* Abusing signed/unsigned to make sizeof work. */
len = snprintf(buf, sizeof(buf), "%s splits %d coins; you receive %d.\r\n",
@ -544,7 +544,7 @@ ACMD(do_split)
}
if (AFF_FLAGGED(k, AFF_GROUP) && IN_ROOM(k) == IN_ROOM(ch) &&
!IS_NPC(k) && k != ch) {
GET_GOLD(k) += share;
increase_gold(k, share);
send_to_char(k, "%s", buf);
}
@ -554,8 +554,8 @@ ACMD(do_split)
(IN_ROOM(f->follower) == IN_ROOM(ch)) &&
f->follower != ch) {
GET_GOLD(f->follower) += share;
send_to_char(f->follower, "%s", buf);
increase_gold(f->follower, share);
send_to_char(f->follower, "%s", buf);
}
}
send_to_char(ch, "You split %d coins among %d members -- %d coins each.\r\n",
@ -564,7 +564,7 @@ ACMD(do_split)
if (rest) {
send_to_char(ch, "%d coin%s %s not splitable, so you keep the money.\r\n",
rest, (rest == 1) ? "" : "s", (rest == 1) ? "was" : "were");
GET_GOLD(ch) += rest;
increase_gold(ch, rest);
}
} else {
send_to_char(ch, "How many coins do you wish to split with your group?\r\n");

View file

@ -1689,6 +1689,7 @@ ACMD(do_admin)
/* Copy current flags */
for (i=0; i<AD_ARRAY_MAX; i++) tmp_adm[i] = ADM_FLAGS(vict)[i];
set_default_admin_privs(vict, FALSE);
send_to_char(ch, "%s", CONFIG_OK);
/* Compare for changed flags */
for (i=0; i<AD_ARRAY_MAX; i++) {
if (tmp_adm[i] != ADM_FLAGS(vict)[i]) {
@ -1735,10 +1736,10 @@ ACMD(do_admin)
ACMD(do_advance)
{
struct char_data *victim;
char name[MAX_INPUT_LENGTH], level[MAX_INPUT_LENGTH];
char name[MAX_INPUT_LENGTH], level[MAX_INPUT_LENGTH], *buf;
int newlevel, oldlevel, i;
two_arguments(argument, name, level);
buf = two_arguments(argument, name, level);
if (*name) {
if (!(victim = get_char_vis(ch, name, NULL, FIND_CHAR_WORLD))) {
@ -1746,8 +1747,9 @@ ACMD(do_advance)
return;
}
} else {
send_to_char(ch, "Usage: %sadvance <player> <admin level>%s\r\n", QYEL, QNRM);
send_to_char(ch, "%s<admin level>%s may be a level name (e.g. mortal) or number.\r\n", QYEL, QNRM);
send_to_char(ch, "Usage: %sadvance <player> <mortal level>%s\r\n", QYEL, QNRM);
send_to_char(ch, "Usage: %sadvance <player> admin <admin level>%s\r\n", QYEL, QNRM);
send_to_char(ch, "%s<admin level>%s may be a level name (e.g. immortal) or number.\r\n", QYEL, QNRM);
return;
}
@ -1763,65 +1765,116 @@ ACMD(do_advance)
send_to_char(ch, "You must specify a level!\r\n");
return;
}
if ((newlevel = get_admin_level_by_string(level)) < 0) {
send_to_char(ch, "That's not a level!\r\n");
return;
}
if (newlevel > ADMLVL_IMPL) {
send_to_char(ch, "%s (level %d) is the highest possible admin level.\r\n", admin_level_names[ADMLVL_IMPL], ADMLVL_IMPL);
return;
}
if (newlevel > GET_ADMLEVEL(ch)) {
send_to_char(ch, "Yeah, right.\r\n");
return;
}
if (newlevel == GET_ADMLEVEL(victim)) {
send_to_char(ch, "They are already at that level.\r\n");
return;
}
oldlevel = GET_ADMLEVEL(victim);
if (newlevel < GET_ADMLEVEL(victim)) {
do_start(victim);
send_to_char(victim, "You are momentarily enveloped by darkness!\r\nYou feel somewhat diminished.\r\n");
} else {
act("$n makes some strange gestures. A strange feeling comes upon you,\r\n"
"Like a giant hand, light comes down from above, grabbing your body,\r\n"
"that begins to pulse with colored lights from inside.\r\n\r\n"
"Your head seems to be filled with demons from another plane as\r\n"
"your body dissolves to the elements of time and space itself.\r\n"
"Suddenly a silent explosion of light snaps you back to reality.\r\n\r\n"
"You feel slightly different.", FALSE, ch, 0, victim, TO_VICT);
}
/* Set MORTAL Level */
if (!is_abbrev(level, "admin")) {
if ((newlevel = atoi(level)) <= 0) {
send_to_char(ch, "That's not a valid mortal level!\r\n");
return;
}
if (newlevel > CONFIG_MAX_LEVEL) {
send_to_char(ch, "%d is the highest possible mortal level.\r\n", CONFIG_MAX_LEVEL);
return;
}
if (!IS_ADMIN(ch, ADMLVL_GRGOD) && newlevel > GET_LEVEL(ch)) {
send_to_char(ch, "You can't set above your own mortal level.\r\n");
return;
}
if (newlevel == GET_LEVEL(victim)) {
send_to_char(ch, "They are already at that mortal level.\r\n");
return;
}
oldlevel = GET_LEVEL(victim);
if (newlevel < GET_LEVEL(victim)) {
do_start(victim);
GET_LEVEL(victim) = newlevel;
send_to_char(victim, "You are momentarily enveloped by darkness!\r\nYou feel somewhat diminished.\r\n");
} else {
act("$n makes some strange gestures. A strange feeling comes upon you,\r\n"
"Like a giant hand, light comes down from above, grabbing your body,\r\n"
"that begins to pulse with colored lights from inside.\r\n\r\n"
"Your head seems to be filled with demons from another plane as\r\n"
"your body dissolves to the elements of time and space itself.\r\n"
"Suddenly a silent explosion of light snaps you back to reality.\r\n\r\n"
"You feel slightly different.", FALSE, ch, 0, victim, TO_VICT);
}
set_admin_level(victim, newlevel);
send_to_char(ch, "%s", CONFIG_OK);
send_to_char(ch, "%s", CONFIG_OK);
if (newlevel < oldlevel)
log("(GC) %s demoted %s from admin level %d to %d.",
GET_NAME(ch), GET_NAME(victim), oldlevel, newlevel);
else
log("(GC) %s has advanced %s to admin level %d (from %d)",
GET_NAME(ch), GET_NAME(victim), newlevel, oldlevel);
if (newlevel < oldlevel)
log("(GC) %s demoted %s from mortal level %d to %d.",
GET_NAME(ch), GET_NAME(victim), oldlevel, newlevel);
else
log("(GC) %s has advanced %s to mortal level %d (from %d)",
GET_NAME(ch), GET_NAME(victim), newlevel, oldlevel);
if (oldlevel >= ADMLVL_IMMORT && newlevel < ADMLVL_IMMORT) {
/* If they are no longer an immortal, remove the immortal only flags. */
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_LOG1);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_LOG2);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_NOHASSLE);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_HOLYLIGHT);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_SHOWVNUMS);
if (!PLR_FLAGGED(victim, PLR_NOWIZLIST))
run_autowiz();
} else if (oldlevel < ADMLVL_IMMORT && newlevel >= ADMLVL_IMMORT) {
SET_BIT_AR(PRF_FLAGS(victim), PRF_LOG2);
SET_BIT_AR(PRF_FLAGS(victim), PRF_HOLYLIGHT);
SET_BIT_AR(PRF_FLAGS(victim), PRF_SHOWVNUMS);
SET_BIT_AR(PRF_FLAGS(victim), PRF_AUTOEXIT);
for (i = 1; i <= MAX_SKILLS; i++)
SET_SKILL(victim, i, 100);
GET_OLC_ZONE(victim) = NOWHERE;
gain_exp_regardless(victim, level_exp(GET_CLASS(victim), newlevel) - GET_EXP(victim));
} else { /* Set ADMIN Level */
one_argument(buf, level);
if (!*level) {
send_to_char(ch, "You must specify a level!\r\n");
return;
}
if ((newlevel = get_admin_level_by_string(level)) < 0) {
send_to_char(ch, "That's not a level!\r\n");
return;
}
if (newlevel > ADMLVL_IMPL) {
send_to_char(ch, "%s (level %d) is the highest possible admin level.\r\n", admin_level_names[ADMLVL_IMPL], ADMLVL_IMPL);
return;
}
if (newlevel > GET_ADMLEVEL(ch)) {
send_to_char(ch, "Yeah, right.\r\n");
return;
}
if (newlevel == GET_ADMLEVEL(victim)) {
send_to_char(ch, "They are already at that level.\r\n");
return;
}
oldlevel = GET_ADMLEVEL(victim);
if (newlevel < GET_ADMLEVEL(victim)) {
do_start(victim);
send_to_char(victim, "You are momentarily enveloped by darkness!\r\nYou feel somewhat diminished.\r\n");
} else {
act("$n makes some strange gestures. A strange feeling comes upon you,\r\n"
"Like a giant hand, light comes down from above, grabbing your body,\r\n"
"that begins to pulse with colored lights from inside.\r\n\r\n"
"Your head seems to be filled with demons from another plane as\r\n"
"your body dissolves to the elements of time and space itself.\r\n"
"Suddenly a silent explosion of light snaps you back to reality.\r\n\r\n"
"You feel slightly different.", FALSE, ch, 0, victim, TO_VICT);
}
set_admin_level(victim, newlevel);
send_to_char(ch, "%s", CONFIG_OK);
if (newlevel < oldlevel)
log("(GC) %s demoted %s from admin level %d to %d.",
GET_NAME(ch), GET_NAME(victim), oldlevel, newlevel);
else
log("(GC) %s has advanced %s to admin level %d (from %d)",
GET_NAME(ch), GET_NAME(victim), newlevel, oldlevel);
if (oldlevel >= ADMLVL_IMMORT && newlevel < ADMLVL_IMMORT) {
/* If they are no longer an immortal, remove the immortal only flags. */
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_LOG1);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_LOG2);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_NOHASSLE);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_HOLYLIGHT);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_SHOWVNUMS);
if (!PLR_FLAGGED(victim, PLR_NOWIZLIST))
run_autowiz();
} else if (oldlevel < ADMLVL_IMMORT && newlevel >= ADMLVL_IMMORT) {
SET_BIT_AR(PRF_FLAGS(victim), PRF_LOG2);
SET_BIT_AR(PRF_FLAGS(victim), PRF_HOLYLIGHT);
SET_BIT_AR(PRF_FLAGS(victim), PRF_SHOWVNUMS);
SET_BIT_AR(PRF_FLAGS(victim), PRF_AUTOEXIT);
for (i = 1; i <= MAX_SKILLS; i++)
SET_SKILL(victim, i, 100);
GET_OLC_ZONE(victim) = NOWHERE;
}
}
save_char(victim);
}
@ -3119,7 +3172,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
break;
case 2: /* admlevel */
if ((IS_NPC(vict) || value > GET_ADMLEVEL(ch)) || value > ADMLVL_IMPL) {
send_to_char(ch, "You can't do that.\r\n");
send_to_char(ch, "You can't set above your own admin level.\r\n");
return (0);
}
RANGE(1, ADMLVL_IMPL);
@ -3262,8 +3315,12 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
SET_OR_REMOVE(PLR_FLAGS(vict), PLR_KILLER);
break;
case 26: /* level */
if ((!IS_NPC(vict) && value > GET_LEVEL(ch)) || value > CONFIG_MAX_LEVEL) {
send_to_char(ch, "You can't do that.\r\n");
if (!IS_NPC(vict) && !IS_ADMIN(ch, ADMLVL_GRGOD)) {
if (value > GET_LEVEL(ch)) {
send_to_char(ch, "You can't set higher than your own level.\r\n");
} else if (value > CONFIG_MAX_LEVEL) {
send_to_char(ch, "Maximum level is %d.\r\n", CONFIG_MAX_LEVEL);
}
return (0);
}
RANGE(1, CONFIG_MAX_LEVEL);

View file

@ -670,7 +670,7 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
if (!str_cmp(field, "gold")) {
if (subfield && *subfield) {
int addition = atoi(subfield);
GET_GOLD(c) += addition;
increase_gold(c, addition);
}
snprintf(str, slen, "%d", GET_GOLD(c));
}

View file

@ -837,7 +837,7 @@ int damage(struct char_data *ch, struct char_data *victim, int dam, int attackty
{
happy_gold = (long)(GET_GOLD(victim) * (((float)(HAPPY_GOLD))/(float)100));
happy_gold = MAX(0, happy_gold);
GET_GOLD(victim) += happy_gold;
increase_gold(victim, happy_gold);
}
local_gold = GET_GOLD(victim);
sprintf(local_buf,"%ld", (long)local_gold);

View file

@ -20,6 +20,7 @@
#include "dg_scripts.h"
#include "class.h"
#include "fight.h"
#include "screen.h"
/* local file scope function prototypes */
static int graf(int grafage, int p0, int p1, int p2, int p3, int p4, int p5, int p6);
@ -474,3 +475,63 @@ void point_update(void)
game_info("Happy hour has ended!");
}
}
/* Note: amt may be negative */
int increase_gold(struct char_data *ch, int amt)
{
int curr_gold;
curr_gold = GET_GOLD(ch);
if (amt < 0) {
GET_GOLD(ch) = MAX(0, curr_gold+amt);
/* Validate to prevent overflow */
if (GET_GOLD(ch) > curr_gold) GET_GOLD(ch) = 0;
} else {
GET_GOLD(ch) = MIN(MAX_GOLD, curr_gold+amt);
/* Validate to prevent overflow */
if (GET_GOLD(ch) < curr_gold) GET_GOLD(ch) = MAX_GOLD;
}
if (GET_GOLD(ch) == MAX_GOLD)
send_to_char(ch, "%sYou have reached the maximum gold!\r\n%sYou must spend it or bank it before you can gain any more.\r\n", QBRED, QNRM);
return (GET_GOLD(ch));
}
int decrease_gold(struct char_data *ch, int deduction)
{
int amt;
amt = (deduction * -1);
increase_gold(ch, amt);
return (GET_GOLD(ch));
}
int increase_bank(struct char_data *ch, int amt)
{
int curr_bank;
if (IS_NPC(ch)) return 0;
curr_bank = GET_BANK_GOLD(ch);
if (amt < 0) {
GET_BANK_GOLD(ch) = MAX(0, curr_bank+amt);
/* Validate to prevent overflow */
if (GET_BANK_GOLD(ch) > curr_bank) GET_BANK_GOLD(ch) = 0;
} else {
GET_BANK_GOLD(ch) = MIN(MAX_BANK, curr_bank+amt);
/* Validate to prevent overflow */
if (GET_BANK_GOLD(ch) < curr_bank) GET_BANK_GOLD(ch) = MAX_BANK;
}
if (GET_BANK_GOLD(ch) == MAX_BANK)
send_to_char(ch, "%sYou have reached the maximum bank balance!\r\n%sYou cannot put more into your account unless you withdraw some first.\r\n", QBRED, QNRM);
return (GET_BANK_GOLD(ch));
}
int decrease_bank(struct char_data *ch, int deduction)
{
int amt;
amt = (deduction * -1);
increase_bank(ch, amt);
return (GET_BANK_GOLD(ch));
}

View file

@ -313,7 +313,7 @@ static void postmaster_send_mail(struct char_data *ch, struct char_data *mailman
act(buf, FALSE, mailman, 0, ch, TO_VICT);
if (!ADM_FLAGGED(ch, ADM_MONEY))
GET_GOLD(ch) -= STAMP_PRICE;
decrease_gold(ch, STAMP_PRICE);
SET_BIT_AR(PLR_FLAGS(ch), PLR_MAILING); /* string_write() sets writing. */

View file

@ -315,12 +315,12 @@ void generic_complete_quest(struct char_data *ch)
if ((IS_HAPPYHOUR) && (IS_HAPPYGOLD)) {
happy_gold = (int)(QST_GOLD(rnum) * (((float)(100+HAPPY_GOLD))/(float)100));
happy_gold = MAX(happy_gold, 0);
GET_GOLD(ch) += happy_gold;
increase_gold(ch, happy_gold);
send_to_char(ch,
"You have been awarded %d gold coins for your service.\r\n",
happy_gold);
} else {
GET_GOLD(ch) += QST_GOLD(rnum);
increase_gold(ch, QST_GOLD(rnum));
send_to_char(ch,
"You have been awarded %d gold coins for your service.\r\n",
QST_GOLD(rnum));

View file

@ -583,7 +583,7 @@ static void shopping_buy(char *arg, struct char_data *ch, struct char_data *keep
charged = buy_price(obj, shop_nr, keeper, ch);
goldamt += charged;
if (!ADM_FLAGGED(ch, ADM_MONEY))
GET_GOLD(ch) -= charged;
decrease_gold(ch, charged);
last_obj = obj;
obj = get_purchase_obj(ch, arg, keeper, shop_nr, FALSE);
@ -612,7 +612,7 @@ static void shopping_buy(char *arg, struct char_data *ch, struct char_data *keep
do_tell(keeper, buf, cmd_tell, 0);
}
if (!IS_GOD(ch) && obj && !OBJ_FLAGGED(obj, ITEM_QUEST)) {
GET_GOLD(keeper) += goldamt;
increase_gold(keeper, goldamt);
if (SHOP_USES_BANK(shop_nr))
if (GET_GOLD(keeper) > MAX_OUTSIDE_BANK) {
SHOP_BANK(shop_nr) += (GET_GOLD(keeper) - MAX_OUTSIDE_BANK);
@ -773,7 +773,7 @@ static void shopping_sell(char *arg, struct char_data *ch, struct char_data *kee
goldamt += charged;
if (!IS_SET(SHOP_BITVECTOR(shop_nr), HAS_UNLIMITED_CASH))
GET_GOLD(keeper) -= charged;
decrease_gold(keeper, charged);
sold++;
obj_from_char(obj);
@ -793,7 +793,7 @@ static void shopping_sell(char *arg, struct char_data *ch, struct char_data *kee
do_tell(keeper, buf, cmd_tell, 0);
}
GET_GOLD(ch) += goldamt;
increase_gold(ch, goldamt);
strlcpy(tempstr, times_message(0, name, sold), sizeof(tempstr));
snprintf(tempbuf, sizeof(tempbuf), "$n sells %s.", tempstr);
@ -807,7 +807,7 @@ static void shopping_sell(char *arg, struct char_data *ch, struct char_data *kee
if (GET_GOLD(keeper) < MIN_OUTSIDE_BANK) {
goldamt = MIN(MAX_OUTSIDE_BANK - GET_GOLD(keeper), SHOP_BANK(shop_nr));
SHOP_BANK(shop_nr) -= goldamt;
GET_GOLD(keeper) += goldamt;
increase_gold(keeper, goldamt);
}
}

View file

@ -193,7 +193,7 @@ SPECIAL(dump)
if (GET_LEVEL(ch) < 3)
gain_exp(ch, value);
else
GET_GOLD(ch) += value;
increase_gold(ch, value);
}
return (TRUE);
}
@ -311,8 +311,8 @@ static void npc_steal(struct char_data *ch, struct char_data *victim)
/* Steal some gold coins */
gold = (GET_GOLD(victim) * rand_number(1, 10)) / 100;
if (gold > 0) {
GET_GOLD(ch) += gold;
GET_GOLD(victim) -= gold;
increase_gold(ch, gold);
decrease_gold(victim, gold);
}
}
}
@ -621,7 +621,7 @@ SPECIAL(pet_shops)
send_to_char(ch, "You don't have enough gold!\r\n");
return (TRUE);
}
GET_GOLD(ch) -= PET_PRICE(pet);
decrease_gold(ch, PET_PRICE(pet));
pet = read_mobile(GET_MOB_RNUM(pet), REAL);
GET_EXP(pet) = 0;
@ -674,8 +674,8 @@ SPECIAL(bank)
send_to_char(ch, "You don't have that many coins!\r\n");
return (TRUE);
}
GET_GOLD(ch) -= amount;
GET_BANK_GOLD(ch) += amount;
decrease_gold(ch, amount);
increase_bank(ch, amount);
send_to_char(ch, "You deposit %d coins.\r\n", amount);
act("$n makes a bank transaction.", TRUE, ch, 0, FALSE, TO_ROOM);
return (TRUE);
@ -688,8 +688,8 @@ SPECIAL(bank)
send_to_char(ch, "You don't have that many coins deposited!\r\n");
return (TRUE);
}
GET_GOLD(ch) += amount;
GET_BANK_GOLD(ch) -= amount;
increase_gold(ch, amount);
decrease_bank(ch, amount);
send_to_char(ch, "You withdraw %d coins.\r\n", amount);
act("$n makes a bank transaction.", TRUE, ch, 0, FALSE, TO_ROOM);
return (TRUE);

View file

@ -642,6 +642,9 @@
#define MAX_HELP_ENTRY MAX_STRING_LENGTH /**< Max size of help entry */
#define MAX_COMPLETED_QUESTS 1024 /**< Maximum number of completed quests allowed */
#define MAX_GOLD 2140000000 /**< Maximum possible on hand gold (2.14 Billion) */
#define MAX_BANK 2140000000 /**< Maximum possible in bank gold (2.14 Billion) */
/** Define the largest set of commands for a trigger.
* 16k should be plenty and then some. */
#define MAX_CMD_LENGTH 16384

View file

@ -130,6 +130,10 @@ void gain_condition(struct char_data *ch, int condition, int value);
void point_update(void);
void update_pos(struct char_data *victim);
void run_autowiz(void);
int increase_gold(struct char_data *ch, int amt);
int decrease_gold(struct char_data *ch, int amt);
int increase_bank(struct char_data *ch, int amt);
int decrease_bank(struct char_data *ch, int amt);
/* in class.c */
void advance_level(struct char_data *ch);