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: shop.h                                        Part of CircleMUD *
*  Usage: shop file definitions, structures, constants                    *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
************************************************************************ */
/*
 * This file contains the functions to load the world files into memory
 * into the stock CircleMUD arrays.
 *
 * You should update this code to match the code in your MUD if it's been
 * changed from stock in any way.
 */

#ifndef __SHOP_H__
#define __SHOP_H__

#include "dao.h"

struct shop_buy_data {
   int type;
   char *keywords;
};

#define BUY_TYPE(i)             ((i).type)
#define BUY_WORD(i)             ((i).keywords)

struct shop_data {
   room_vnum vnum;              /* Virtual number of this shop          */
   obj_vnum *producing;         /* Which item to produce (virtual)      */
   float profit_buy;            /* Factor to multiply cost with         */
   float profit_sell;           /* Factor to multiply cost with         */
   struct shop_buy_data *type;  /* Which items to trade                 */
   char *no_such_item1;         /* Message if keeper hasn't got an item */
   char *no_such_item2;         /* Message if player hasn't got an item */
   char *missing_cash1;         /* Message if keeper hasn't got cash    */
   char *missing_cash2;         /* Message if player hasn't got cash    */
   char *do_not_buy;            /* If keeper dosn't buy such things     */
   char *message_buy;           /* Message when player buys item        */
   char *message_sell;          /* Message when player sells item       */
   int   temper1;               /* How does keeper react if no money    */
   int   bitvector;             /* Can attack? Use bank? Cast here?     */
   mob_rnum      keeper;        /* The mobile who owns the shop (rnum)  */
   int   with_who;              /* Who does the shop trade with?        */
   room_vnum *in_room;          /* Where is the shop?                   */
   int   open1, open2;          /* When does the shop open?             */
   int   close1, close2;        /* When does the shop close?            */
   int   bankAccount;           /* Store all gold over 15000 (disabled) */
   int   lastsort;              /* How many items are sorted in inven?  */
   SPECIAL (*func);             /* Secondary spec_proc for shopkeeper   */
};


#define MAX_TRADE       5       /* List maximums for compatibility      */
#define MAX_PROD        5       /*      with shops before v3.0          */
#define VERSION3_TAG    "v3.0"  /* The file has v3.0 shops in it!       */
#define MAX_SHOP_OBJ    100     /* "Soft" maximum for list maximums     */


/* Pretty general macros that could be used elsewhere */
#define IS_GOD(ch)              (!IS_NPC(ch) && (GET_LEVEL(ch) >= LVL_GOD))
#define END_OF(buffer)          ((buffer) + strlen((buffer)))


/* Possible states for objects trying to be sold */
#define OBJECT_DEAD             0
#define OBJECT_NOTOK            1
#define OBJECT_OK               2
#define OBJECT_NOVAL            3


/* Types of lists to read */
#define LIST_PRODUCE            0
#define LIST_TRADE              1
#define LIST_ROOM               2


/* Whom will we not trade with (bitvector for SHOP_TRADE_WITH()) */
#define TRADE_NOGOOD            (1 << 0)
#define TRADE_NOEVIL            (1 << 1)
#define TRADE_NONEUTRAL         (1 << 2)
#define TRADE_NOMAGIC_USER      (1 << 3)
#define TRADE_NOCLERIC          (1 << 4)
#define TRADE_NOTHIEF           (1 << 5)
#define TRADE_NOWARRIOR         (1 << 6)


struct stack_data {
   int data[100];
   int len;
} ;

#define S_DATA(stack, index)    ((stack)->data[(index)])
#define S_LEN(stack)            ((stack)->len)


/* Which expression type we are now parsing */
#define OPER_OPEN_PAREN         0
#define OPER_CLOSE_PAREN        1
#define OPER_OR                 2
#define OPER_AND                3
#define OPER_NOT                4
#define MAX_OPER                4


#define SHOP_NUM(i)             (shop_index[(i)].vnum)
#define SHOP_KEEPER(i)          (shop_index[(i)].keeper)
#define SHOP_OPEN1(i)           (shop_index[(i)].open1)
#define SHOP_CLOSE1(i)          (shop_index[(i)].close1)
#define SHOP_OPEN2(i)           (shop_index[(i)].open2)
#define SHOP_CLOSE2(i)          (shop_index[(i)].close2)
#define SHOP_ROOM(i, num)       (shop_index[(i)].in_room[(num)])
#define SHOP_BUYTYPE(i, num)    (BUY_TYPE(shop_index[(i)].type[(num)]))
#define SHOP_BUYWORD(i, num)    (BUY_WORD(shop_index[(i)].type[(num)]))
#define SHOP_PRODUCT(i, num)    (shop_index[(i)].producing[(num)])
#define SHOP_BANK(i)            (shop_index[(i)].bankAccount)
#define SHOP_BROKE_TEMPER(i)    (shop_index[(i)].temper1)
#define SHOP_BITVECTOR(i)       (shop_index[(i)].bitvector)
#define SHOP_TRADE_WITH(i)      (shop_index[(i)].with_who)
#define SHOP_SORT(i)            (shop_index[(i)].lastsort)
#define SHOP_BUYPROFIT(i)       (shop_index[(i)].profit_buy)
#define SHOP_SELLPROFIT(i)      (shop_index[(i)].profit_sell)
#define SHOP_FUNC(i)            (shop_index[(i)].func)

#define NOTRADE_GOOD(i)         (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOGOOD))
#define NOTRADE_EVIL(i)         (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOEVIL))
#define NOTRADE_NEUTRAL(i)      (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NONEUTRAL))
#define NOTRADE_MAGIC_USER(i)   (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOMAGIC_USER))
#define NOTRADE_CLERIC(i)       (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOCLERIC))
#define NOTRADE_THIEF(i)        (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOTHIEF))
#define NOTRADE_WARRIOR(i)      (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOWARRIOR))



#define WILL_START_FIGHT        (1 << 0)
#define WILL_BANK_MONEY         (1 << 1)

#define SHOP_KILL_CHARS(i)      (IS_SET(SHOP_BITVECTOR(i), WILL_START_FIGHT))
#define SHOP_USES_BANK(i)       (IS_SET(SHOP_BITVECTOR(i), WILL_BANK_MONEY))


#define MIN_OUTSIDE_BANK        5000
#define MAX_OUTSIDE_BANK        15000

#define MSG_NOT_OPEN_YET        "Come back later!"
#define MSG_NOT_REOPEN_YET      "Sorry, we have closed, but come back later."
#define MSG_CLOSED_FOR_DAY      "Sorry, come back tomorrow."
#define MSG_NO_STEAL_HERE       "$n is a bloody thief!"
#define MSG_NO_SEE_CHAR         "I don't trade with someone I can't see!"
#define MSG_NO_SELL_ALIGN       "Get out of here before I call the guards!"
#define MSG_NO_SELL_CLASS       "We don't serve your kind here!"
#define MSG_NO_USED_WANDSTAFF   "I don't buy used up wands or staves!"
#define MSG_CANT_KILL_KEEPER    "Get out of here before I call the guards!"


void boot_the_shops(FILE *shop_f, char *filename, int rec_count);
void shopData_toDao(daoData_t *parentDao, struct shop_data *shop);

#endif /* __SHOP_H__ */