foundation2_fluffos_v1/
foundation2_fluffos_v1/bin/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/ChangeLog.old/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/Win32/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/compat/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/compat/simuls/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/include/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/clone/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/command/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/data/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/etc/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/include/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/inherit/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/inherit/master/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/log/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/single/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/single/tests/compiler/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/single/tests/efuns/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/single/tests/operators/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/testsuite/u/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/tmp/
foundation2_fluffos_v1/fluffos-2.9-ds2.13/windows/
foundation2_fluffos_v1/lib/cfg/
foundation2_fluffos_v1/lib/cmds/adm/
foundation2_fluffos_v1/lib/daemon/save/
foundation2_fluffos_v1/lib/daemon/services/
foundation2_fluffos_v1/lib/daemon/soul/
foundation2_fluffos_v1/lib/doc/build/
foundation2_fluffos_v1/lib/doc/classes/
foundation2_fluffos_v1/lib/doc/driver/
foundation2_fluffos_v1/lib/doc/driver/applies/
foundation2_fluffos_v1/lib/doc/driver/applies/interactive/
foundation2_fluffos_v1/lib/doc/driver/concepts/
foundation2_fluffos_v1/lib/doc/driver/driver/
foundation2_fluffos_v1/lib/doc/driver/efuns/arrays/
foundation2_fluffos_v1/lib/doc/driver/efuns/buffers/
foundation2_fluffos_v1/lib/doc/driver/efuns/calls/
foundation2_fluffos_v1/lib/doc/driver/efuns/compile/
foundation2_fluffos_v1/lib/doc/driver/efuns/filesystem/
foundation2_fluffos_v1/lib/doc/driver/efuns/floats/
foundation2_fluffos_v1/lib/doc/driver/efuns/functions/
foundation2_fluffos_v1/lib/doc/driver/efuns/general/
foundation2_fluffos_v1/lib/doc/driver/efuns/mappings/
foundation2_fluffos_v1/lib/doc/driver/efuns/numbers/
foundation2_fluffos_v1/lib/doc/driver/efuns/parsing/
foundation2_fluffos_v1/lib/doc/driver/lpc/constructs/
foundation2_fluffos_v1/lib/doc/driver/lpc/types/
foundation2_fluffos_v1/lib/doc/driver/platforms/
foundation2_fluffos_v1/lib/doc/efun/
foundation2_fluffos_v1/lib/doc/etc/
foundation2_fluffos_v1/lib/doc/faq/
foundation2_fluffos_v1/lib/doc/help/creator/
foundation2_fluffos_v1/lib/doc/help/player/
foundation2_fluffos_v1/lib/doc/lpc/basic/
foundation2_fluffos_v1/lib/doc/lpc/data_types/
foundation2_fluffos_v1/lib/doc/lpc/etc/
foundation2_fluffos_v1/lib/doc/lpc/intermediate/
foundation2_fluffos_v1/lib/doc/lpc/types/
foundation2_fluffos_v1/lib/doc/mudlib/
foundation2_fluffos_v1/lib/doc/mudlib/Features/
foundation2_fluffos_v1/lib/domains/Examples/armour/
foundation2_fluffos_v1/lib/domains/Examples/etc/
foundation2_fluffos_v1/lib/domains/Examples/npc/
foundation2_fluffos_v1/lib/domains/Examples/room/
foundation2_fluffos_v1/lib/domains/Examples/virtual/
foundation2_fluffos_v1/lib/domains/Examples/virtual/exaA/
foundation2_fluffos_v1/lib/domains/Examples/virtual/exaB/
foundation2_fluffos_v1/lib/domains/Examples/weapon/
foundation2_fluffos_v1/lib/domains/School/doc/
foundation2_fluffos_v1/lib/domains/School/room/
foundation2_fluffos_v1/lib/domains/School/room/Classes/
foundation2_fluffos_v1/lib/domains/School/room/Offices/
foundation2_fluffos_v1/lib/domains/Standard/
foundation2_fluffos_v1/lib/domains/Standard/pools/
foundation2_fluffos_v1/lib/domains/Standard/std/
foundation2_fluffos_v1/lib/domains/Standard/xtra/
foundation2_fluffos_v1/lib/include/
foundation2_fluffos_v1/lib/lib/obj/
foundation2_fluffos_v1/lib/news/
foundation2_fluffos_v1/lib/save/
foundation2_fluffos_v1/lib/secure/cfg/
foundation2_fluffos_v1/lib/secure/cmds/player/
foundation2_fluffos_v1/lib/secure/lib/
foundation2_fluffos_v1/old/
foundation2_fluffos_v1/win32/
/* /lib/item.c
 * from the Foundation II LPC Library
 * inheritable object for all tangible game objects
 * created by Descartes of Borg 950207
 */

#include <lib.h>
#include <daemons.h>
#include <config.h>
#include "item.h"

inherit LIB_OBJECT;
inherit LIB_MOVE;

private int Invis, Mass;
private mixed PreventDrop, PreventGet, PreventPut;

/***********          /lib/item.c modal functions          ***********/

int CanGet(object ob) {
    mixed val;

    if(!ob) return 0;
    if( !(val = GetPreventGet()) && !GetProperty("keep") ) return 1;
    else if( stringp(val) ) {
        message("my_action", val, ob);
        return 0;
    }
    else if( functionp(val) ) return (int)evaluate(val, ob);
    else if( stringp(GetProperty("keep")) ) {
        if( (string)ob->GetKeyName() == GetProperty("keep") ) return 1;
        return 0;
    }
    return 1;
}

int CanDrop(object ob) {
    mixed val;

    if( !(val = GetPreventDrop()) ) return 1;
    else if( stringp(val) ) {
        message("my_action", val, ob);
        return 0;
    }
    else if( functionp(val) ) return (int)evaluate(val, ob);
    else return 1;
}

int CanPut(object ob) {
    mixed val;

    if( !(val = GetPreventPut()) ) return 1;
    else if(stringp(val)) {
        message("my_action", val, ob);
        return 0;
    }
    else if( functionp(val) ) (int)evaluate(val, ob);
    else return 1;
}

/***********       /lib/item.c data manipulation functions      ***********/

int SetMass(int x) {
    if( x < 0 ) x = 0;
    return (Mass = x);
}

int AddMass(int x) { 
    if( Mass + x < 0 ) x = -Mass;
    if( environment() ) environment()->AddCarriedMass(x);
    return (Mass -= x);
}

int GetMass() { return Mass; }

mixed SetInvis(mixed val) {
    if( intp(val) ) return (Invis = val);
    else if( functionp(val) && !Invis ) return (Invis = val);
    else return Invis;
}

varargs int GetInvis(object ob) {
    if( !ob ) ob = (this_player() || previous_object());
    if( functionp(Invis) ) return (int)evaluate(Invis, ob);
    else return Invis;
}

mixed SetPreventGet(mixed val) {
    if(!stringp(val) && !functionp(val)) 
      error("Bad argument 1 to SetPreventGet().\n");
    return (PreventGet = val);
}

mixed GetPreventGet() { return PreventGet; }

mixed SetPreventDrop(mixed val) {
    if( !stringp(val) && !functionp(val) ) 
      error("Bad argument 1 to SetPreventDrop().\n");
    return (PreventDrop = val);
}

mixed GetPreventDrop() { return PreventDrop; }

mixed SetPreventPut(mixed val) {
    if(!stringp(val) && !functionp(val))
      error("Bad argument 1 to SetPreventPut().\n");
    return (PreventPut = val);
}

mixed GetPreventPut() { return PreventPut; }