nightmare3_fluffos_v2/
nightmare3_fluffos_v2/bin/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/ChangeLog.old/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/Win32/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/compat/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/compat/simuls/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/include/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/clone/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/command/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/data/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/etc/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/include/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/inherit/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/inherit/master/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/log/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/compiler/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/efuns/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/operators/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/u/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/tmp/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/windows/
nightmare3_fluffos_v2/lib/cmds/ambassador/
nightmare3_fluffos_v2/lib/cmds/database/
nightmare3_fluffos_v2/lib/cmds/hm/
nightmare3_fluffos_v2/lib/cmds/soul/
nightmare3_fluffos_v2/lib/daemon/cfg/
nightmare3_fluffos_v2/lib/daemon/cfg/mon_races/
nightmare3_fluffos_v2/lib/daemon/cfg/races/
nightmare3_fluffos_v2/lib/daemon/include/
nightmare3_fluffos_v2/lib/daemon/save/
nightmare3_fluffos_v2/lib/daemon/services/
nightmare3_fluffos_v2/lib/daemon/soul/
nightmare3_fluffos_v2/lib/doc/
nightmare3_fluffos_v2/lib/doc/TestPlans/
nightmare3_fluffos_v2/lib/doc/approval/
nightmare3_fluffos_v2/lib/doc/approval/QC/
nightmare3_fluffos_v2/lib/doc/approval/balance/
nightmare3_fluffos_v2/lib/doc/build/
nightmare3_fluffos_v2/lib/doc/build/armours/
nightmare3_fluffos_v2/lib/doc/build/economy/
nightmare3_fluffos_v2/lib/doc/build/etc/
nightmare3_fluffos_v2/lib/doc/build/monster/
nightmare3_fluffos_v2/lib/doc/build/room/
nightmare3_fluffos_v2/lib/doc/build/virtual/
nightmare3_fluffos_v2/lib/doc/build/weapon/
nightmare3_fluffos_v2/lib/doc/classes/
nightmare3_fluffos_v2/lib/doc/efun/
nightmare3_fluffos_v2/lib/doc/etc/
nightmare3_fluffos_v2/lib/doc/help/creator/
nightmare3_fluffos_v2/lib/doc/help/hm/
nightmare3_fluffos_v2/lib/doc/law/
nightmare3_fluffos_v2/lib/doc/lpc/basic/
nightmare3_fluffos_v2/lib/doc/lpc/data_types/
nightmare3_fluffos_v2/lib/doc/lpc/etc/
nightmare3_fluffos_v2/lib/doc/lpc/intermediate/
nightmare3_fluffos_v2/lib/doc/lpc/types/
nightmare3_fluffos_v2/lib/doc/mudlib/
nightmare3_fluffos_v2/lib/doc/mudlib/features/
nightmare3_fluffos_v2/lib/domains/Examples/etc/
nightmare3_fluffos_v2/lib/domains/Examples/room/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/exaA/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/exaB/
nightmare3_fluffos_v2/lib/domains/Examples/weapon/
nightmare3_fluffos_v2/lib/domains/Praxis/
nightmare3_fluffos_v2/lib/domains/Praxis/adm/
nightmare3_fluffos_v2/lib/domains/Praxis/attic/
nightmare3_fluffos_v2/lib/domains/Praxis/cemetary/
nightmare3_fluffos_v2/lib/domains/Praxis/cemetary/mon/
nightmare3_fluffos_v2/lib/domains/Praxis/data/
nightmare3_fluffos_v2/lib/domains/Praxis/death/
nightmare3_fluffos_v2/lib/domains/Praxis/mountains/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/armour/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/magic/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/weapon/
nightmare3_fluffos_v2/lib/domains/Praxis/orc_valley/
nightmare3_fluffos_v2/lib/domains/Praxis/quests/
nightmare3_fluffos_v2/lib/domains/Praxis/standardOld/
nightmare3_fluffos_v2/lib/include/
nightmare3_fluffos_v2/lib/log/
nightmare3_fluffos_v2/lib/log/errors/
nightmare3_fluffos_v2/lib/log/reports/
nightmare3_fluffos_v2/lib/log/watch/
nightmare3_fluffos_v2/lib/news/
nightmare3_fluffos_v2/lib/secure/cfg/
nightmare3_fluffos_v2/lib/secure/cmds/ambassador/
nightmare3_fluffos_v2/lib/secure/cmds/mortal/
nightmare3_fluffos_v2/lib/secure/save/users/d/
nightmare3_fluffos_v2/lib/secure/std/
nightmare3_fluffos_v2/lib/std/hm/
nightmare3_fluffos_v2/lib/std/living/
nightmare3_fluffos_v2/lib/std/room/
nightmare3_fluffos_v2/lib/std/user/
nightmare3_fluffos_v2/lib/std/virtual/
nightmare3_fluffos_v2/lib/www/
nightmare3_fluffos_v2/lib/www/errors/
nightmare3_fluffos_v2/lib/www/gateways/
nightmare3_fluffos_v2/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); }