/* ************************************************************************ * 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. * ************************************************************************ */ struct shop_buy_data { int type; char *keywords; } ; #define BUY_TYPE(i) ((i).type) #define BUY_WORD(i) ((i).keywords) struct shop_data { int vnum; /* Virtual number of this shop */ int *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? focus here? */ int keeper; /* The mobil who owns the shop (virtual)*/ int with_who; /* Who does the shop trade with? */ int *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 GET_OBJ_NUM(obj) (obj->item_number) #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 #define TRADE_NOEVIL 2 #define TRADE_NONEUTRAL 4 #define TRADE_NOHuman 8 #define TRADE_NONamek 16 #define TRADE_NOicer 32 #define TRADE_NOsaiyan 64 #define TRADE_NOMAJIN 128 #define TRADE_NOANDROID 256 #define TRADE_NODEMON 512 #define TRADE_NOHALF_BREED 1024 #define TRADE_NOARLIEN 2048 #define TRADE_NOKONATSU 4096 #define TRADE_NOCHANGELING 8192 #define TRADE_NOKAIO 16384 #define TRADE_NOTRUFLE 32768 #define TRADE_NOALIEN 65536 #define TRADE_NOTUGUIL 131072 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_Human(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOHuman)) #define NOTRADE_Namek(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NONamek)) #define NOTRADE_icer(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOicer)) #define NOTRADE_MAJIN(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOMAJIN)) #define NOTRADE_ANDROID(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOANDROID)) #define NOTRADE_DEMON(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NODEMON)) #define NOTRADE_HALF_BREED(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOHALF_BREED)) #define NOTRADE_ARLIAN(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOARLIAN)) #define NOTRADE_KONATSU(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOKONATSU)) #define NOTRADE_CHANGELING(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOCHANGELING)) #define NOTRADE_KAIO(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOKAIO)) #define NOTRADE_TRUFFLE(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOTRUFFLE)) #define NOTRADE_ALIEN(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOALIEN)) #define NOTRADE_TUGUIL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOTUGUIL)) #define NOTRADE_saiyan(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOsaiyan)) #define WILL_START_FIGHT 1 #define WILL_BANK_MONEY 2 #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_SCOUTERSTAFF "I don't buy used up scouters or other elctronics!" #define MSG_CANT_KILL_KEEPER "Get out of here before I call the guards!"