/*
* property.h
* Header file for properties
* ____ _
* | _ \ ___ __ _| |_ __ ___ ___
* | |_) / _ \/ _` | | '_ ` _ \/ __|
* | _ < __/ (_| | | | | | | \__ \
* |_| \_\___|\__,_|_|_| |_| |_|___/
*
* Permission to use, modify and distribute is granted via the
* Creative Commons - Attribution - Non Commercial - Share Alike 3.0 License
* http://creativecommons.org/licenses/by-nc-sa/3.0/
*
* Copyright (C) 2007-2009 Jason Mitchell, Randi Mitchell
* Contributions by Tim Callahan, Jonathan Hseu
* Based on Mordor (C) Brooke Paul, Brett J. Vickers, John P. Freeman
*
*/
#ifndef PROPERTY_H_
#define PROPERTY_H_
// PropType enum in mud.h
enum PropLog {
LOG_PARTIAL = 0,
LOG_NONE = 1,
LOG_ALL = 2
};
#define PROP_LOG_SIZE 30
class PartialOwner {
public:
PartialOwner();
void load(xmlNodePtr rootNode);
void save(xmlNodePtr rootNode) const;
void defaultFlags(PropType type);
bstring getName() const;
void setName(bstring str);
bool flagIsSet(int flag) const;
void setFlag(int flag);
void clearFlag(int flag);
bool toggleFlag(int flag);
protected:
bstring name;
char flags[4]; // 32 max
};
class Property {
public:
Property();
void load(xmlNodePtr rootNode);
void save(xmlNodePtr rootNode) const;
int getGuild() const;
bstring getOwner() const;
bstring getName() const;
bstring getDateFounded() const;
bstring getLocation() const;
PropType getType() const;
bstring getTypeStr() const;
PropLog getLogType() const;
bstring getLogTypeStr() const;
void setGuild(int g);
void setOwner(bstring str);
void setName(bstring str);
void setDateFounded();
void setLocation(bstring str);
void setType(PropType t);
void setLogType(PropLog t);
void addRange(CatRef cr);
void addRange(bstring area, int low, int high);
bool isOwner(bstring str) const;
bool belongs(CatRef cr) const;
void rename(Player *player);
void destroy();
bool expelOnRemove() const;
void expelToExit(Player* player, bool offline);
std::map<int, MudFlag>* getFlagList();
PartialOwner* getPartialOwner(bstring pOwner);
bool isPartialOwner(bstring pOwner);
void assignPartialOwner(bstring pOwner);
void unassignPartialOwner(bstring pOwner);
int viewLogFlag() const;
bstring getLog() const;
void appendLog(bstring user, const char *fmt, ...);
void clearLog();
bstring show(bool isOwner=false, bstring player="", int *i=0);
std::list<Range> ranges;
std::list<PartialOwner> partialOwners;
bool flagIsSet(int flag) const;
void setFlag(int flag);
void clearFlag(int flag);
bool toggleFlag(int flag);
static bstring getTypeStr(PropType propType);
static bstring getTypeArea(PropType propType);
static bool usePropFlags(PropType propType);
static bool canEnter(const Player* player, const Room* room, bool p);
static bool goodNameDesc(const Player* player, bstring str, bstring fail, bstring disallow);
static bool goodExit(const Player* player, const BaseRoom* room, const char *type, bstring xname);
static bool isInside(const Player* player, const Room* room, Property** p);
static bool requireInside(const Player* player, const Room* room, Property** p, PropType propType = PROP_NONE);
static void descEdit(Socket* sock, char *str);
static void manage(Player* player, cmd* cmnd, PropType propType, int x);
static void guildRoomSetup(Room *room, const Guild* guild, bool outside);
static void houseRoomSetup(Room *room, const Player* player, bool outside);
static void roomSetup(Room *room, PropType propType, const Player* player, const Guild* guild, bool outside=false);
static void linkRoom(BaseRoom* inside, BaseRoom* outside, bstring xname);
static Room* makeNextRoom(Room* r1, PropType propType, CatRef cr, bool exits, const Player* player, const Guild* guild, BaseRoom* room, bstring xname, const char *go, const char *back, bool save);
static int rotateHouse(char *dir1, char *dir2, int rotation);
static bool houseCanBuild(AreaRoom* aRoom, BaseRoom* room);
protected:
bstring owner;
bstring name;
bstring dateFounded;
bstring location;
PropType type;
PropLog logType;
std::list<bstring> log;
// for guildhalls and shops, points to guild
int guild;
char flags[4]; // 32 max
};
#endif /*PROPERTY_H_*/