/** * @file item.c * @ingroup item * * Item based code * * @author Geoff Davis <geoff@circlemudsquared.org> * @author Greg Buxton <greg@circlemudsquared.org> * * @par Copyright: * Copyright (C) 2006 Geoff Davis <geoff@circlemudsquared.org><br> * Greg Buxton <greg@circlemudsquared.org> * * @par * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University<br> * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * * @par * All rights reserved. See license.doc for complete information. * * @package cs * @version 1.0 */ #define __ITEM_C__ #include "sysdep.h" #include "structs.h" #include "utils.h" #include "main.h" #include "dao.h" #include "db.h" #include "interpreter.h" #include "extraDesc.h" /* * Included here */ /* ITEM_x (ordinal object types) */ const char *item_types[] = { /* 00 */ "Undefined", /* 01 */ "Light", /* 02 */ "Scroll", /* 03 */ "Wand", /* 04 */ "Staff", /* 05 */ "Weapon", /* 06 */ "RangedWeapon", /* 07 */ "Ammunition", /* 08 */ "Treasure", /* 09 */ "Armor", /* 10 */ "Potion", /* 11 */ "Worn", /* 12 */ "Other", /* 13 */ "Trash", /* 14 */ "Trap", /* 15 */ "Container", /* 16 */ "Note", /* 17 */ "LiquidContainer", /* 18 */ "Key", /* 19 */ "Food", /* 20 */ "Money", /* 21 */ "Pen", /* 22 */ "Boat", /* 23 */ "Fountain", "\n" }; /* * External variables. */ extern const char *item_types[]; /** * Convert an item to its DAO representation. * @param parentDao the container DAO to contain the item's DAO * @param item the item to be converted * @return none */ void itemData_toDao(daoData_t *parentDao, struct obj_data *item) { if (parentDao == NULL) { log("itemData_toDao(): invalid 'parentDao' daoData_t."); } else if (item == NULL) { log("itemData_toDao(): invalid 'item' struct obj_data."); } else { /* Declare some temporary buffer space. */ char temp[MAX_STRING_LENGTH] = {'\0'}; /* Declare some working DAO pointers. */ daoData_t *itemDao = NULL, *subContainerDao = NULL, *flagsDao = NULL; /* Declare an iterator variable. */ register int i = 0; itemDao = dao_newChild(parentDao, "%d", GET_OBJ_VNUM(item)); if (item->name && *(item->name) != '\0') { dao_newScalar(itemDao, "keywords", "%s", item->name); } if (item->description && *(item->description) != '\0') { dao_newScalar(itemDao, "description", "%s", item->description); } if (item->short_description && *(item->short_description) != '\0') { dao_newScalar(itemDao, "shortDescription", "%s", item->short_description); } if (item->action_description && *(item->action_description) != '\0') { dao_newScalar(itemDao, "actionDescription", "%s", item->action_description); } if (item->ex_description) { extraDescData_listToDao(itemDao, item->ex_description); } flagsDao = dao_newChild(itemDao, "flags"); sprinttype(item->obj_flags.type_flag, item_types, temp, sizeof(temp)); dao_newScalar(flagsDao, "type", "%s", temp); dao_newScalar(flagsDao, "weight", "%d", item->obj_flags.weight); dao_newScalar(flagsDao, "cost", "%d", item->obj_flags.cost); dao_newScalar(flagsDao, "costPerDay", "%d", item->obj_flags.cost_per_day); dao_newScalar(flagsDao, "timer", "%d", item->obj_flags.timer); subContainerDao = dao_newChild(flagsDao, "values"); for (i = 0; i < 4; i++) { snprintf(temp, sizeof(temp), "value%d", i + 1); dao_newScalar(subContainerDao, temp, "%d", item->obj_flags.value[i]); } subContainerDao = NULL; if (item->obj_flags.wear_flags != 0UL) { subContainerDao = dao_newChild(flagsDao, "wearFlags"); dao_newScalar(subContainerDao, "take", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_TAKE))); dao_newScalar(subContainerDao, "finger", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_FINGER))); dao_newScalar(subContainerDao, "neck", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_NECK))); dao_newScalar(subContainerDao, "body", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_BODY))); dao_newScalar(subContainerDao, "head", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_HEAD))); dao_newScalar(subContainerDao, "legs", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_LEGS))); dao_newScalar(subContainerDao, "feet", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_FEET))); dao_newScalar(subContainerDao, "hands", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_HANDS))); dao_newScalar(subContainerDao, "arms", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_ARMS))); dao_newScalar(subContainerDao, "shield", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_SHIELD))); dao_newScalar(subContainerDao, "about", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_ABOUT))); dao_newScalar(subContainerDao, "waist", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_WAIST))); dao_newScalar(subContainerDao, "wrist", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_WRIST))); dao_newScalar(subContainerDao, "wield", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_WIELD))); dao_newScalar(subContainerDao, "hold", YESNO(IS_SET(item->obj_flags.wear_flags, ITEM_WEAR_HOLD))); } subContainerDao = NULL; if (item->obj_flags.extra_flags != 0UL) { subContainerDao = dao_newChild(flagsDao, "extraFlags"); dao_newScalar(subContainerDao, "glow", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_GLOW))); dao_newScalar(subContainerDao, "hum", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_HUM))); dao_newScalar(subContainerDao, "noRent", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_NORENT))); dao_newScalar(subContainerDao, "noDonate", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_NODONATE))); dao_newScalar(subContainerDao, "noInvis", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_NOINVIS))); dao_newScalar(subContainerDao, "invisible", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_INVISIBLE))); dao_newScalar(subContainerDao, "magic", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_MAGIC))); dao_newScalar(subContainerDao, "noDrop", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_NODROP))); dao_newScalar(subContainerDao, "blessed", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_BLESS))); dao_newScalar(subContainerDao, "antiGood", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_ANTI_GOOD))); dao_newScalar(subContainerDao, "antiEvil", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_ANTI_EVIL))); dao_newScalar(subContainerDao, "antiNeutral", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_ANTI_NEUTRAL))); dao_newScalar(subContainerDao, "antiMagicUser", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_ANTI_MAGIC_USER))); dao_newScalar(subContainerDao, "antiCleric", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_ANTI_CLERIC))); dao_newScalar(subContainerDao, "antiThief", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_ANTI_THIEF))); dao_newScalar(subContainerDao, "antiWarrior", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_ANTI_WARRIOR))); dao_newScalar(subContainerDao, "noSell", YESNO(IS_SET(item->obj_flags.extra_flags, ITEM_NOSELL))); } } }