/*
* OBJ_DATA CLASS
*/
#define ANTI_HUMAN 0
#define ANTI_ELF 1
#define ANTI_GNOME 2
#define ANTI_DWARF 3
#define ANTI_HALFLING 4
#define ANTI_ENT 5
#define ANTI_CENTAUR 6
#define ANTI_LIZARD 7
#define ANTI_OGRE 8
#define ANTI_TROLL 9
#define ANTI_ORC 10
#define ANTI_GOBLIN 11
#define ANTI_VYAN 12
#define ANTI_MAGE 14
#define ANTI_PSIONIC 20
#define ANTI_MONK 21
#define ANTI_UNUSED1 23
#define ANTI_UNUSED2 24
#define ANTI_UNUSED3 25
#define ANTI_GOOD 26
#define ANTI_NEUTRAL 27
#define ANTI_EVIL 28
#define ANTI_LAWFUL 29
#define ANTI_CHAOTIC 31
#define MAX_ANTI 32
#define ITEM_TAKE 0
#define ITEM_WEAR_FINGER 1
#define ITEM_WEAR_NECK 2
#define ITEM_WEAR_BODY 3
#define ITEM_WEAR_HEAD 4
#define ITEM_WEAR_LEGS 5
#define ITEM_WEAR_FEET 6
#define ITEM_WEAR_HANDS 7
#define ITEM_WEAR_ARMS 8
#define ITEM_UNUSED2 9
#define ITEM_UNUSED3 10
#define ITEM_WEAR_WAIST 11
#define ITEM_WEAR_WRIST 12
#define ITEM_HELD_R 13
#define ITEM_HELD_L 14
#define ITEM_WEAR_UNUSED0 15
#define ITEM_WEAR_UNUSED1 16
#define ITEM_WEAR_UNUSED2 17
#define ITEM_WEAR_UNUSED3 18
#define ITEM_WEAR_HORSE_BODY 19
#define ITEM_WEAR_HORSE_BACK 20
#define ITEM_WEAR_HORSE_FEET 21
#define MAX_ITEM_WEAR 22
#define ITEM_LIGHT 1
#define ITEM_SCROLL 2
#define ITEM_WAND 3
#define ITEM_STAFF 4
#define ITEM_WEAPON 5
#define ITEM_GEM 6
#define ITEM_SPELLBOOK 7
#define ITEM_TREASURE 8
#define ITEM_ARMOR 9
#define ITEM_POTION 10
#define ITEM_REAGENT 11
#define ITEM_FURNITURE 12
#define ITEM_TRASH 13
#define ITEM_CROSS 14
#define ITEM_CONTAINER 15
#define ITEM_LOCK_PICK 16
#define ITEM_DRINK_CON 17
#define ITEM_KEY 18
#define ITEM_FOOD 19
#define ITEM_MONEY 20
#define ITEM_KEYRING 21
#define ITEM_BOAT 22
#define ITEM_CORPSE 23
#define ITEM_UNUSED 24
#define ITEM_FOUNTAIN 25
#define ITEM_WHISTLE 26
#define ITEM_TRAP 27
#define ITEM_LIGHT_PERM 28
#define ITEM_BANDAGE 29
#define ITEM_BOUNTY 30
#define ITEM_GATE 31
#define ITEM_ARROW 32
#define ITEM_SKIN 33
#define ITEM_BODY_PART 34
#define ITEM_CHAIR 35
#define ITEM_TABLE 36
#define ITEM_BOOK 37
#define ITEM_PIPE 38
#define ITEM_TOBACCO 39
#define ITEM_DECK_CARDS 40
#define ITEM_FIRE 41
#define ITEM_GARROTE 42
#define MAX_ITEM 43
#define MAT_PAPER 0
#define MAT_WOOD 1
#define MAT_LEATHER 2
#define MAT_UNUSED1 3
#define MAT_CLOTH 4
#define MAT_GLASS 5
#define MAT_STONE 6
#define MAT_BONE 7
#define MAT_FLESH 8
#define MAT_ORGANIC 9
#define MAT_UNUSED2 10
#define MAT_BRONZE 11
#define MAT_IRON 12
#define MAT_STEEL 13
#define MAT_MITHRIL 14
#define MAT_ADAMANTINE 15
#define MAT_ELECTRUM 16
#define MAT_SILVER 17
#define MAT_GOLD 18
#define MAT_COPPER 19
#define MAT_PLATINUM 20
#define MAT_KRYNITE 21
#define MAX_MATERIAL 22
#define OBJ_COPPER 12
#define OBJ_SILVER 14
#define OBJ_GOLD 2
#define OBJ_PLATINUM 16
#define OBJ_CORPSE_NPC 10
#define OBJ_CORPSE_PC 11
#define OBJ_BALL_OF_LIGHT 21
#define OBJ_CROSS 109
#define OBJ_LOCK_PICK 127
#define OBJ_ASTRAL_GATE 270
#define OBJ_GLASS_VIAL 389
#define OBJ_RECALL 1021
#define OBJ_COLLAR 2141
#define OBJ_DAGGER 3208
#define OFLAG_GLOW 0
#define OFLAG_HUM 1
#define OFLAG_DARK 2
#define OFLAG_LOCK 3
#define OFLAG_EVIL 4
#define OFLAG_IS_INVIS 5
#define OFLAG_MAGIC 6
#define OFLAG_NODROP 7
#define OFLAG_SANCT 8
#define OFLAG_FLAMING 9
#define OFLAG_BACKSTAB 10
#define OFLAG_NO_DISARM 11
#define OFLAG_NOREMOVE 12
#define OFLAG_INVENTORY 13
#define OFLAG_NO_SHIELD 14
#define OFLAG_NO_MAJOR 15
#define OFLAG_NOSHOW 16
#define OFLAG_NOSACRIFICE 17
#define OFLAG_WATER_PROOF 18
#define OFLAG_APPRAISED 19
#define OFLAG_NO_SELL 20
#define OFLAG_NO_JUNK 21
#define OFLAG_IDENTIFIED 22
#define OFLAG_RUST_PROOF 23
#define OFLAG_BODY_PART 24
#define OFLAG_CHAIR 25
#define OFLAG_NOSAVE 26
#define OFLAG_BURNING 27
#define OFLAG_ADDITIVE 28
#define OFLAG_GOOD 29
#define OFLAG_THE 30
#define OFLAG_REPLICATE 31
#define OFLAG_KNOWN_LIQUID 32
#define OFLAG_POISON_COATED 33
#define OFLAG_NO_AUCTION 34
#define OFLAG_NO_ENCHANT 35
#define OFLAG_COPIED 36
#define OFLAG_RANDOM_METAL 37
#define OFLAG_COVER 38
#define MAX_OFLAG 39
#define RESTR_BLADED 0
#define RESTR_NO_HIDE 1
#define RESTR_NO_SNEAK 2
#define RESTR_DISHONORABLE 3
#define MAX_RESTRICTION 4
/*
* OBJ_CLSS_DATA
*/
extern obj_clss_data* obj_index_list [ MAX_OBJ_INDEX ];
class Obj_Clss_Data
{
public:
affect_array affected;
extra_array extra_descr;
oprog_data* oprog;
char* singular;
char* plural;
char* before;
char* after;
char* prefix_singular;
char* prefix_plural;
char* long_s;
char* long_p;
char* creator;
char* last_mod;
time_t date;
int vnum;
int fakes;
int item_type;
int extra_flags [ 2 ];
int size_flags;
int restrictions;
int anti_flags;
int materials;
int wear_flags;
int layer_flags;
int affect_flags [ AFFECT_INTS ];
int count;
int limit;
int weight;
int cost;
int level;
int value [ 4 ];
int repair;
int durability;
int blocks;
int light;
Obj_Clss_Data ( );
~Obj_Clss_Data ( );
const char* Name ( );
const char* Name ( int );
const char* Keywords ( );
int metal ( );
};
bool can_extract ( obj_clss_data*, char_data* );
void load_objects ( void );
void junk_obj ( char_data*, obj_data* );
char* name_before ( obj_clss_data* );
char* name_brief ( obj_clss_data*, int = 1 );
const char* after_descr ( obj_clss_data* );
const char* before_descr ( obj_clss_data* );
/*
* OBJ_DATA
*/
extern obj_array obj_list;
class Obj_Data : public Thing_Data
{
public :
affect_array affected;
extra_data* extra_descr;
obj_clss_data* pIndexData;
player_data* save;
char* source;
char* label;
char* singular;
char* plural;
char* before;
char* after;
pfile_data* owner;
int extra_flags [ 2 ];
int size_flags;
int materials;
int weight;
int value [ 4 ];
int timer;
int condition;
int rust;
int age;
int layer;
Obj_Data( obj_clss_data* );
virtual ~Obj_Data( );
/* BASIC */
int Type ( ) { return OBJ_DATA; }
void Extract ( );
void Extract ( int );
/* NAME/KEYWORDS */
const char* Keywords ( char_data* );
const char* Name ( char_data* = NULL, int = 1, bool = FALSE );
const char* Seen_Name ( char_data*, int = 1, bool = FALSE );
const char* Show ( char_data*, int = 1 );
const char* condition_name ( char_data*, bool = FALSE );
const char* Location ( content_array* = NULL );
void Look_At ( char_data* );
bool Seen ( char_data* );
/* TO/FROM */
void To ( content_array* );
void To ( thing_data* );
thing_data* From ( int = 1 );
/* PROPERTIES */
int Weight ( int = -1 );
int Light ( int = -1 );
int Empty_Weight ( int = -1 );
int Number ( int = -1 );
int Capacity ( );
int Empty_Capacity ( );
bool Damaged ( );
int Cost ( );
bool Belongs ( char_data* );
bool droppable( ) { return !is_set( extra_flags, OFLAG_NODROP ); }
bool removable( ) { return !is_set( extra_flags, OFLAG_NOREMOVE ); }
bool paper( ) { return is_set( &materials, MAT_PAPER ); }
bool glass( ) { return is_set( &materials, MAT_GLASS ); }
bool wood( ) { return is_set( &materials, MAT_WOOD ); }
bool stone( ) { return is_set( &materials, MAT_STONE ); }
int metal ( );
bool is_cloth ( );
bool is_leather ( );
/* SAVING THROWS */
int vs_fire ( );
int vs_acid ( );
int vs_cold ( );
};
/*
* FUNCTIONS
*/
obj_data* create ( obj_clss_data*, int = 1 );
obj_data* duplicate ( obj_data*, int = 1 );
void set_owner ( obj_data*, char_data*, char_data* );
void set_owner ( obj_data*, pfile_data* );
void set_owner ( pfile_data*, thing_array& );
bool read_object ( FILE*, content_array&, char* );
void write_object ( FILE*, content_array& );
bool is_same ( obj_data*, obj_data* );
int armor_class ( obj_data* );
void rust_object ( obj_data*, int );
void condition_abbrev ( char*, obj_data*, char_data* );
void age_abbrev ( char*, obj_data*, char_data* );
bool newbie_abuse ( char_data* );
const char* light_name ( int );
void open_object ( char_data*, obj_data* );
void close_object ( char_data*, obj_data* );
/*
* OBJECT ARGUMENTS
*/
obj_data* find_type ( thing_array&, int );
obj_data* find_vnum ( thing_array&, int );
/*
* ARRAY ROUTINES
*/
void rehash ( char_data*, thing_array& );
void rehash_weight ( char_data*, thing_array& );
void sort_objects ( char_data*, thing_array&, thing_data*, int,
thing_array*, thing_func** );
void page_publ ( char_data*, thing_array*, const char*,
thing_data* = NULL,
const char* = empty_string,
const char* = empty_string );
void page_priv ( char_data*, thing_array*, const char*,
thing_data* = NULL,
const char* = empty_string,
const char* = empty_string );
void send_priv ( char_data*, thing_array*, const char*,
thing_data* );
void send_publ ( char_data*, thing_array*, const char*,
const char* );
thing_func stolen;
thing_func corpse;
thing_func cursed;
thing_func same;
thing_func wont_fit;
thing_func cant_take;
thing_func sat_on;
thing_func many;
thing_func heavy;
thing_func forbidden;
thing_func gotten;
thing_func put;
thing_func drop;
thing_func paper;
thing_func glass;
extern const char* unlock_msg [];
extern const char* lock_msg [];
/*
* INLINE UTILITIES
*/
inline char_data* carried_by( obj_data* )
{
return NULL;
}
inline obj_clss_data* get_obj_index( int vnum )
{
if( vnum < 0 || vnum >= MAX_OBJ_INDEX )
return NULL;
return obj_index_list[vnum];
}
inline int repair_condition( obj_data* obj )
{
return obj->pIndexData->durability-5*obj->age;
};
/*
* FOOD ROUTINES
*/
extern const char* cook_word [];
bool eat ( char_data*, obj_data* );
bool drink ( char_data*, obj_data* );
/*
* NAME ROUTINES
*/
extern bool include_empty;
extern bool include_liquid;
extern bool include_closed;
/*
* OBJECT TRANSFER ROUTINES
*/
void drop_contents ( obj_data* );
/*
* MONEY ROUTINES
*/
int monetary_value ( obj_data* );
bool remove_silver ( char_data* );
void split_money ( char_data*, int, bool );
void add_coins ( char_data*, int, char* = NULL );
/*
* WEIGHT FUNCTIONS
*/
bool can_carry ( char_data*, obj_data*, bool = TRUE );