/** * @file shop.h * @ingroup common * * Shop code * * This shop system is a completely re-coded one for CircleMUD^2, but was * based around the system originally created for CircleMUD by Jeff Fink. * * @author Greg Buxton * * @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 */ #ifndef __SHOP_H__ #define __SHOP_H__ #include "base.h" #include "structs.h" #include "dao.h" /** * @ingroup Shop * @defgroup ShopSalesTypes * Stores what item types shop trades in * @{ */ struct _shopBuyData_t { int type; /**< Type of item */ shopBuyData_t *next; /**< Next item in list */ }; /** * @} */ /** * @ingroup Shop * @defgroup ShopInventory * Stores what items the shop has in inventory * @{ */ struct _shopInventory_t { itemData_t *item; /**< Item in inventory */ int count; /**< Number of item in inventory */ shopInventory_t *next; /**< Next item in list */ }; /** * @} */ /** * @ingroup Shop * @defgroup ShopItems * Stores what items the shop produces * @{ */ struct _shopItems_t { itemData_t *item; /**< Pointer to object prototype */ char *sItem; /**< ID (zone:number) for item */ shopItems_t *next; /**< Next item in list */ }; /** * @} */ /** * @ingroup Shop * @defgroup ShopRooms * Stores what room the shop is in * @{ */ struct _shopRooms_t { roomData_t *room; /**< Pointer to room */ char *sRoom; /**< ID (zone:number) for room */ shopRooms_t *next; /**< Next room in list */ }; /** * @} */ /** * @ingroup Shop * @defgroup shopData_t * Shop structure * @{ */ struct _shopData_t { int vnum; /**< Number of the shop */ zoneData_t *zone; /**< Zone Shop is in */ shopItems_t *producing; /**< Items the shop sells */ shopInventory_t *inventory; /**< Items in shop inventory */ float profitForSale; /**< Factor to multiply cost with */ float profitForPurchase; /**< Factor to multiply cost with */ shopBuyData_t *type; /**< Which items to trade */ char *shopMissingItem; /**< Keeper hasn't got an item */ char *buyerMissingItem; /**< Player hasn't got an item */ char *shopCantAfford; /**< Keeper hasn't got cash */ char *playerCantAfford; /**< Player hasn't got cash */ char *noBuy; /**< Keeper dosn't buy such things */ char *itemSold; /**< Player buys item */ char *itemBought; /**< Player sells item */ char *sKeeper; /**< ID (zone:number) for keeper */ charData_t *keeper; /**< Mobile who owns the shop */ int flags; /**< Who does the shop trade with? */ shopRooms_t *inRoom; /**< Rooms shop is in */ int open1; /**< Shop opening hours 1 */ int open2; /**< Shop opening hours 2 */ int close1; /**< Shop closing hours 1 */ int close2; /**< Shop closing hours 2 */ }; /** * @} */ /** * Bits for who shop trades with * @{ */ #define TRADE_NOGOOD BIT_00 #define TRADE_NOEVIL BIT_01 #define TRADE_NONEUTRAL BIT_02 #define TRADE_NOMAGIC_USER BIT_03 #define TRADE_NOCLERIC BIT_04 #define TRADE_NOTHIEF BIT_05 #define TRADE_NOWARRIOR BIT_06 /** * @} */ /* Location of bitvectors */ #define SHOP_TRADE(shop) ((shop->flags)) /* Macros to check bit settings */ #define SHOP_TRADES(shop, t) (IS_SET(SHOP_TRADE(shop), (t))) #define MSG_NOT_OPEN_YET "Come back later!" /* * Function prototypes */ void shopData_loadShopsInZone(zoneData_t *zone, daoData_t *parentDao); void shop_addProducingItem(shopData_t *shop, itemData_t *item); void shopData_resolveInZone(zoneData_t *zone); void shopData_toDao(daoData_t *parentDao, shopData_t *shop); void shops_listInZone(char *buf, zoneData_t *zone); ACMD(do_list); ACMD(do_sell); ACMD(do_appraise); #endif /* __SHOP_H__ */