/
LIB3/
LIB3/D/ADMIN/
LIB3/D/ADMIN/OBJ/
LIB3/D/ADMIN/ROOM/W/
LIB3/D/HOME/
LIB3/D/HOME/CITY/ARENA/
LIB3/D/HOME/CITY/ITEMS/
LIB3/D/HOME/CITY/POSTOFFI/
LIB3/DOC/
LIB3/GLOBAL/SPECIAL/
LIB3/GLOBAL/VIRTUAL/
LIB3/NET/
LIB3/NET/CONFIG/
LIB3/NET/DAEMON/CHARS/
LIB3/NET/GOPHER/
LIB3/NET/INHERIT/
LIB3/NET/OBJ/
LIB3/NET/SAVE/
LIB3/NET/VIRTUAL/
LIB3/OBJ/B_DAY/
LIB3/OBJ/HANDLERS/TERM_TYP/
LIB3/PLAYERS/B/
LIB3/PLAYERS/N/
LIB3/ROOM/
LIB3/SAVE/
LIB3/SAVE/BOARDS/
LIB3/SAVE/ENVIRON/
LIB3/SAVE/POST/
LIB3/STD/COMMANDS/SHADOWS/
LIB3/STD/CREATOR/
LIB3/STD/DOM/
LIB3/STD/EFFECTS/
LIB3/STD/EFFECTS/HEALING/
LIB3/STD/EFFECTS/OTHER/
LIB3/STD/EFFECTS/POISONS/
LIB3/STD/ENVIRON/
LIB3/STD/GUILDS/
LIB3/STD/LIQUIDS/
LIB3/STD/ROOM/
LIB3/STD/TRIGGER/SHADOW/
LIB3/W/
LIB3/W/BANNOR/
LIB3/W/NEWSTYLE/
#include "move_failures.h"
#include "money.h"
inherit "/failsafe/move";
/* this will also handle value... */

static int weight;
mixed *money_array;

create() {
  money_array = ({ });
}

void set_weight(int w) { weight = w; }
int query_weight() { return weight; }

int adjust_money(int amt, string type) {
  int i;
  if ((i=member_array(type, money_array)) == -1) {
    i = sizeof(money_array);
    money_array += ({ type, amt });
  } else
    money_array[i+1] += amt;
  if (amt <= 0) {
    money_array = delete(money_array, i, 2);
    return 0;
  }
  return money_array[i+1];
}

mixed *query_money_array() { return money_array; }
int query_money(string type) { 
  int i;
 
  if ((i=member_array(type, money_array)) == -1)
    return 0;
  return money_array[i+1];
}

int query_value() { return (int)MONEY_HAND->query_total_value(money_array); }

move(mixed dest, mixed messout, mixed messin) {
  int i;
  object from;

  from = environment();
  if (!dest->add_weight(weight))
    return MOVE_TOO_HEAVY;
  i = ::move(dest, messout, messin);
  if (from && i == MOVE_OK)
    from->add_weight(-weight);
  return i;
}