foundationI_fluffos_v1/
foundationI_fluffos_v1/bin/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/ChangeLog.old/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/Win32/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/compat/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/compat/simuls/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/include/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/clone/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/command/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/data/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/etc/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/include/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/inherit/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/inherit/master/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/log/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/single/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/single/tests/compiler/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/single/tests/efuns/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/single/tests/operators/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/testsuite/u/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/tmp/
foundationI_fluffos_v1/fluffos-2.9-ds2.12/windows/
foundationI_fluffos_v1/lib/
foundationI_fluffos_v1/lib/cmds/ambassador/
foundationI_fluffos_v1/lib/cmds/database/
foundationI_fluffos_v1/lib/cmds/soul/
foundationI_fluffos_v1/lib/daemon/include/
foundationI_fluffos_v1/lib/daemon/save/
foundationI_fluffos_v1/lib/daemon/services/
foundationI_fluffos_v1/lib/daemon/soul/
foundationI_fluffos_v1/lib/doc/build/
foundationI_fluffos_v1/lib/doc/build/room/
foundationI_fluffos_v1/lib/doc/build/virtual/
foundationI_fluffos_v1/lib/doc/driver/
foundationI_fluffos_v1/lib/doc/efun/
foundationI_fluffos_v1/lib/doc/etc/
foundationI_fluffos_v1/lib/doc/help/creator/
foundationI_fluffos_v1/lib/doc/help/hm/
foundationI_fluffos_v1/lib/doc/help/user/
foundationI_fluffos_v1/lib/doc/lpc/basic/
foundationI_fluffos_v1/lib/doc/lpc/data_types/
foundationI_fluffos_v1/lib/doc/lpc/etc/
foundationI_fluffos_v1/lib/doc/lpc/intermediate/
foundationI_fluffos_v1/lib/doc/lpc/types/
foundationI_fluffos_v1/lib/doc/mudlib/
foundationI_fluffos_v1/lib/doc/mudlib/features/
foundationI_fluffos_v1/lib/domains/Examples/etc/
foundationI_fluffos_v1/lib/domains/Examples/room/
foundationI_fluffos_v1/lib/domains/Examples/virtual/
foundationI_fluffos_v1/lib/domains/Examples/virtual/exaA/
foundationI_fluffos_v1/lib/domains/Examples/virtual/exaB/
foundationI_fluffos_v1/lib/domains/Examples/weapon/
foundationI_fluffos_v1/lib/domains/Standard/
foundationI_fluffos_v1/lib/domains/Standard/pools/
foundationI_fluffos_v1/lib/domains/Standard/std/
foundationI_fluffos_v1/lib/domains/Standard/xtra/
foundationI_fluffos_v1/lib/include/
foundationI_fluffos_v1/lib/news/
foundationI_fluffos_v1/lib/secure/cfg/
foundationI_fluffos_v1/lib/secure/cmds/adm/
foundationI_fluffos_v1/lib/secure/cmds/ambassador/
foundationI_fluffos_v1/lib/secure/cmds/mortal/
foundationI_fluffos_v1/lib/secure/etc/
foundationI_fluffos_v1/lib/secure/etc/approval/
foundationI_fluffos_v1/lib/secure/etc/elections/
foundationI_fluffos_v1/lib/secure/etc/mudlib/
foundationI_fluffos_v1/lib/secure/etc/quests/
foundationI_fluffos_v1/lib/secure/save/daemon/
foundationI_fluffos_v1/lib/secure/save/postal/d/descartes/
foundationI_fluffos_v1/lib/secure/save/users/d/
foundationI_fluffos_v1/lib/secure/std/
foundationI_fluffos_v1/lib/std/obj/
foundationI_fluffos_v1/lib/std/room/
foundationI_fluffos_v1/lib/std/user/
foundationI_fluffos_v1/lib/std/virtual/
foundationI_fluffos_v1/old/
foundationI_fluffos_v1/win32/
/*    /std/container.c
 *    from Nightmare IV
 *    object inherited by all objects with inventories
 *    created by Descartes of Borg 940212
 */

#include <std.h>
#include <config.h>
#include "container.h"

inherit OBJECT;

static private int __Encumbrance, __MaxEncumbrance;

varargs int receive_objects(object ob) {
    if(!ob) ob = previous_object();
    if((int)ob->query_mass() + query_encumbrance() > query_max_encumbrance())
      return 0;
    return 1;
}

int release_objects(object ob) { return 1; }

string describe_living_contents(object *exclude) {
    object *inv;
    mapping list;
    string *shorts;
    string tmp, ret;
    int i, x;

    if(!(i = sizeof(inv = query_living_contents() - exclude))) return "";
    list = allocate_mapping(i);
    while(i--) {
        if((int)inv[i]->query_invis()) {
            if(creatorp(inv[i])) continue;
            else if(random(101) < (int)this_player()->query_level())
              tmp = "a shadow";
            else continue;
        }
        else if(!(tmp = (string)inv[i]->query_short()))
          tmp = (string)inv[i]->query_name();
        if(!tmp) continue;
        if(!list[tmp]) list[tmp] = ({ inv[i] });
        else list[tmp] += ({ inv[i] });
    }
    i = sizeof(shorts = keys(list));
    ret = "";
    while(i--) {
        if((x=sizeof(list[shorts[i]])) < 2) 
          ret = sprintf("%s%s\n", ret, capitalize(shorts[i]));
        else ret = sprintf("%s%s\n", ret,
          capitalize(consolidate(x, shorts[i])));
    }
    return ret;
}

string describe_item_contents(object *exclude) {
    object *inv;
    mapping list;
    string ret, tmp;
    string *shorts;
    int i, x;

    list = allocate_mapping(i=sizeof(inv=query_item_contents()-exclude));
    while(i--) {
        if((int)inv[i]->query_invis()) continue;
        if(!(tmp = (string)inv[i]->query_short()))
          tmp = (string)inv[i]->query_name();
        if(!tmp || tmp == "") continue;
        if(!list[tmp]) list[tmp] = ({ inv[i] });
        else list[tmp] += ({ inv[i] });
    }
    if(!(i = sizeof(shorts = keys(list)))) return "";
    if((x=sizeof(list[shorts[--i]])) == 1) ret = capitalize(shorts[i]);
    else ret = capitalize(consolidate(x, shorts[i]));
    if(!i) return sprintf("%s %s here.", ret, (x<2 ? "is" : "are"));
    else if(i==1)
      return sprintf("%s and %s are here.", ret,
        consolidate(sizeof(list[shorts[0]]), shorts[0]));
    else {
        while(i--) {
            if(!i) ret = sprintf("%s, and ", ret);
            else ret = sprintf("%s, ", ret);
            ret = sprintf("%s%s", ret, consolidate(sizeof(list[shorts[i]]),
              shorts[i]));
        }
    }
    return sprintf("%s are here.", ret);
}

void add_encumbrance(int x) {
    if(x + query_encumbrance() > query_max_encumbrance()) return;
    if((__Encumbrance += x) < 0) __Encumbrance = 0;
}

int query_encumbrance() { return __Encumbrance; }

void set_max_encumbrance(int x) { __MaxEncumbrance = x; } 

int query_max_encumbrance() { return __MaxEncumbrance; }

float query_encumbered() {
    return percent(query_encumbrance(), query_max_encumbrance());
}

object *query_living_contents() { 
    return filter_array(all_inventory(this_object()), "filter_living",
      this_object());
}

object *query_item_contents() {
    return filter_array(all_inventory(this_object()),"filter_items",
      this_object());
}

static int filter_living(object ob) { return living(ob); }

static int filter_items(object ob) { return !living(ob); }