/**
* @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)));
}
}
}