/************************************************************************
Realms of Aurealis James Rhone aka Vall of RoA
plshop.h Header file for plshop.c. Most
stucture and define definitions
related to Online Player Shop
Creation (OLPSC).
******** 100% Completely Original Code ********
*** BE AWARE OF ALL RIGHTS AND RESERVATIONS ***
******** 100% Completely Original Code ********
All rights reserved henceforth.
Please note that no guarantees are associated with any code from
Realms of Aurealis. All code which has been released to the general
public has been done so with an 'as is' pretense. RoA is based on both
Diku and CircleMUD and ALL licenses from both *MUST* be adhered to as well
as the RoA license. *** Read, Learn, Understand, Improve ***
*************************************************************************/
#ifndef ROA_PLSHOP_H
#define ROA_PLSHOP_H
#define MAX_PLSHOPS 100
#define TOP_PLSHOPS 20
#define MAX_SIMUL 50
#define PLSHOP_DIR "plshops"
// for plshop types
#define PLSHOP_NORMAL 0
#define PLSHOP_PUB 1
// for plshop flags
#define PLS_OPEN (1 << 0)
#define PLS_LANDTAX (1 << 1)
#define PLS_ITEMTAX (1 << 2)
#define PLS_LANDTAX_OWED (1 << 3)
#define PERDAY 0
#define PERWEEK 1
#define PERMONTH 2
#define PERYEAR 3
// race/class flags for race_class bitvector
#define PLS_NO_HUMAN (1 << 0)
#define PLS_NO_ELF (1 << 1)
#define PLS_NO_HALF_ELF (1 << 2)
#define PLS_NO_ORC (1 << 3)
#define PLS_NO_OGRE (1 << 4)
#define PLS_NO_DROW (1 << 5)
#define PLS_NO_DWARF (1 << 6)
#define PLS_NO_PIXIE (1 << 7)
#define PLS_NO_NIXIE (1 << 8)
#define PLS_NO_DRAGON (1 << 9)
// now for classes
#define PLS_NO_MAGE (1 << 10)
#define PLS_NO_BARD (1 << 11)
#define PLS_NO_RANGER (1 << 12)
#define PLS_NO_WARRIOR (1 << 13)
#define PLS_NO_CLERIC (1 << 14)
#define PLS_NO_SHAMAN (1 << 15)
#define PLS_NO_THIEF (1 << 16)
#define PLS_NO_WARLOCK (1 << 17)
#define PLS_NO_MONK (1 << 18)
#define PLS_NO_MADEPT (1 << 19)
#define PLS_NO_DRUID (1 << 20)
typedef struct plshop_data {
int owner_idnum; // need owner's id for lookups
chdata *owner; // maintain ptr to owner while logged in
int shopkeep_vnum; // to load shopkeep
chdata *shopkeep; // maintain ptr to shopkeep
int shop_rvnum; // vnum of main shop room (shortcut perhaps)
rmdata *location; // maintain ptr to location (shortcut perhaps)
int plshop_id; // unique idnum of this shop;
int gold; // how much gold do it have now mon
int type; // PLSHOP_NORMAL, PLSHOP_PUB, etc
int bitv; // PS_LANDTAX, PS_ITEMTAX, etc
int rc_bitv; // anti race/class bitvector
int minlevel; // minlevel can sell to
int maxlevel; // maxlevel can sell to
int max_sell; // max # of items can sell @ 1 time
int markup; // profit per object for owner
int item_tax; // sales tax rate per item
int land_tax; // property tax charge per month
int keeper_cut; // what percentage does keeper keep
// shop statistics
int days_open; // mud days since grand opening
int gold_today; // how much sales today
int averages[4]; // averages[PERDAY], averages[PERWEEK], etc
int item_tax_paid; // accum of item taxes paid
int land_tax_paid; // accum of land tax paid
int keeper_paid; // accum of keeper's cut
int gross_income; // gross income
int net_income; // net income, actual profit
struct plshop_data *global_next; // next in global LL of plshops
struct plshop_data *next; // next in character's LL of plshops
} plshop;
// merely for showing top shops by gross income
typedef struct shoplist {
int shop_id;
int gross_income;
} shlist;
#define PLS_TYPE(ptr) ((ptr)->type)
#define PLS_FLAGS(ptr) ((ptr)->bitv)
#define PLS_FLAGGED(i, f) (IS_SET(PLS_FLAGS((i)), (f)))
#define PLS_RCFLAGS(ptr) ((ptr)->rc_bitv)
#define PLS_RCFLAGGED(i, f) (IS_SET(PLS_RCFLAGS((i)), (f)))
#define PLS_PERDAY(ptr) ((ptr)->averages[PERDAY])
#define PLS_PERWEEK(ptr) ((ptr)->averages[PERWEEK])
#define PLS_PERMONTH(ptr) ((ptr)->averages[PERMONTH])
#define PLS_PERYEAR(ptr) ((ptr)->averages[PERYEAR])
// function prototypes
void save_plshops(void);
void remove_char_plshops(chdata *ch);
plshop *in_own_shop(chdata *ch);
BOOL load_plshopkeep_objs(chdata *mob);
void save_plshopkeep_objs(chdata *mob);
void daily_plshop_update(void);
void monthly_plshop_update(void);
void yearly_plshop_update(void);
plshop *get_shopkeeps_plshop(int mvnum);
BOOL check_plshop_rcflags(chdata *ch, plshop *s);
#endif /* ROA_PLSHOP_H */