circlemud_squared_0.5.153/cnf/
circlemud_squared_0.5.153/etc/
circlemud_squared_0.5.153/etc/etc/
circlemud_squared_0.5.153/etc/house/
circlemud_squared_0.5.153/etc/misc/
circlemud_squared_0.5.153/etc/plralias/A-E/
circlemud_squared_0.5.153/etc/plralias/F-J/
circlemud_squared_0.5.153/etc/plralias/K-O/
circlemud_squared_0.5.153/etc/plralias/P-T/
circlemud_squared_0.5.153/etc/plralias/U-Z/
circlemud_squared_0.5.153/etc/plralias/ZZZ/
circlemud_squared_0.5.153/etc/plrobjs/
circlemud_squared_0.5.153/etc/plrobjs/A-E/
circlemud_squared_0.5.153/etc/plrobjs/F-J/
circlemud_squared_0.5.153/etc/plrobjs/K-O/
circlemud_squared_0.5.153/etc/plrobjs/P-T/
circlemud_squared_0.5.153/etc/plrobjs/U-Z/
circlemud_squared_0.5.153/etc/plrobjs/ZZZ/
circlemud_squared_0.5.153/etc/text/
circlemud_squared_0.5.153/etc/text/help/
circlemud_squared_0.5.153/src/util/
circlemud_squared_0.5.153/src/util/worldconv/
/**
 * @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)));
    }
  }
}