/* * objects.h * Header file for objects * ____ _ * | _ \ ___ __ _| |_ __ ___ ___ * | |_) / _ \/ _` | | '_ ` _ \/ __| * | _ < __/ (_| | | | | | | \__ \ * |_| \_\___|\__,_|_|_| |_| |_|___/ * * 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 OBJECTS_H_ #define OBJECTS_H_ #define OBJ_KEY_LENGTH 20 #define OBJ_FLAG_ARRAY_SIZE 32 #include "alchemy.h" enum Material { NO_MATERIAL = 0, WOOD = 1, GLASS = 2, CLOTH = 3, PAPER = 4, IRON = 5, STEEL = 6, MITHRIL = 7, ADAMANTIUM = 8, STONE = 9, ORGANIC = 10, BONE = 11, LEATHER = 12, DARKMETAL = 13, CRYSTAL = 14, MAX_MATERIAL }; class Object: public MudObject { // Static class functions public: static Object* getNewPotion(); // Creates a new blank potion object public: Object(); ~Object(); Object& operator=(const Object& o); bool operator==(const Object& o) const; bool operator!=(const Object& o) const; protected: short weight; short bulk; // item bulk rating. short maxbulk; Size size; short type; short wearflag; // Where/if it can be worn short armor; // AC adjustment short quality; // Quality of the item (1-30) for auto adjustment of AC short adjustment; short numAttacks; // Number of attacks this weapon offers (IE: cat'o nine tails) short shotsmax; // Shots before breakage short shotscur; short magicpower; short level; int requiredSkill; // Required amount of skill gain to use this object short minStrength; short clan; short special; short questnum; // Quest fulfillment number bstring effect; long effectDuration; short effectStrength; short max_unique; unsigned long coinCost; unsigned long shopValue; long made; // the time this object was created short keyVal; // key # value to match exit int lotteryCycle; short lotteryNumbers[6]; int recipe; Material material; // SubType: For Armor - The type of armor it is, ie: cloth, leather, chain, plate, etc // For Weapons - The weapon class it is, sword, dagger, etc // For Alchemy - The type of device it is, mortar and pestle, etc bstring subType; char flags[OBJ_FLAG_ARRAY_SIZE]; // Max object flags - 256 short delay; short extra; bstring questOwner; int uniqueId; protected: void doCopy(const Object& o); void selectRandom(); // become a random object // Public member variables public: CatRef info; // Strings bstring description; bstring version; // What version of the mud this object was saved under bstring lastMod; // Last staff member to modify object. char key[3][OBJ_KEY_LENGTH]; // key 3 hold object index char use_output[80]; // String output by successful use char use_attack[50]; Dice damage; otag *first_obj; // objects contained inside class Object *parent_obj; // object this is in class BaseRoom *parent_room; // room this is in class Creature *parent_crt; // creature this is in CatRef in_bag[3]; // items preloaded inside bags struct lasttime lasttime[4]; // Last-time-used variables - Used for envenom and enchant right now Range deed; Money value; // coin value // where we store refund information - this never needs to be loaded // or saved from file because if they log, they cant refund! Money refund; MapMarker *compass; // for compass objects // List of effects that are conferred by this item. Name, duration, and strength. // std::list<ConferredEffect*> conferredEffects; std::list<CatRef> randomObjects; bool isAlchemyPotion(); bool consumeAlchemyPotion(Creature* consumer); bool addAlchemyEffect(int num, const AlchemyEffect &ae); // Map of effects that are on this item for alchemy purposes, used for herbs and potions objects std::map<int, AlchemyEffect> alchemyEffects; private: // Functions public: void init(bool selRandom=true); // Xml - Loading int readFromXml(xmlNodePtr rootNode); void loadAlchemyEffects(xmlNodePtr curNode); // Xml - Saving int saveToXml(xmlNodePtr rootNode, int permOnly, LoadType saveType=LS_FULL, int quantity=1) const; int saveToFile(); // Flags bool flagIsSet(int flag) const; // * void setFlag(int flag); // * void clearFlag(int flag); // * bool toggleFlag(int flag); // * char* cmpName(); void escapeText(); // Placement of the object etc void addObj(Object *toAdd); // Add an object to this object void addToRoom(BaseRoom* room); void deleteFromRoom(); void popBag(Creature* creature, bool quest=true, bool drop=true, bool steal=true, bool bodypart=true, bool dissolve=false); // Get short getDelay() const; short getExtra() const; short getWeight() const; int getActualWeight() const; short getBulk() const; int getActualBulk() const; short getMaxbulk() const; short getWeaponDelay() const; float getLocationModifier() const; float getTypeModifier() const; unsigned short getKey() const; Size getSize() const; short getType() const; // * short getWearflag() const; // * short getArmor() const; short getQuality() const; short getAdjustment() const; short getNumAttacks() const; short getShotsmax() const; // * short getShotscur() const; // * short getMagicpower() const; short getLevel() const; int getRequiredSkill() const; short getMinStrength() const; short getClan() const; short getSpecial() const; short getQuestnum() const; bstring getEffect() const; long getEffectDuration() const; short getEffectStrength() const; short getMaxUnique() const; unsigned long getCoinCost() const; unsigned long getShopValue() const; long getMade() const; int getLotteryCycle() const; short getLotteryNumbers(short i) const; int getRecipe() const; Material getMaterial() const; bstring getCompass(const Creature* creature, bool useName); bstring getVersion() const; bstring getQuestOwner() const; bstring getObjStr(const Creature* viewer = NULL, int flags = 0, int num = 0) const; const bstring getSubType() const; const bstring getWeaponType() const; const bstring getArmorType() const; const bstring getWeaponCategory() const; const bstring getWeaponVerb() const; const bstring getWeaponVerbPlural() const; const bstring getWeaponVerbPast() const; bool isQuestOwner(const Player* player) const; bstring getWearName(); int getUniqueId() const; // Set void setKey(unsigned short k); bool setWeaponType(const bstring& newType); bool setArmorType(const bstring& newType); bool setSubType(const bstring& newType); void setMade(); void setDelay(int newDelay); void setExtra(int x); void setWeight(short w); void setBulk(short b); void setMaxbulk(short b); void setSize(Size s); void setType(short t); void setWearflag(short w); void setArmor(short a); void setQuality(short q); void setAdjustment(short a); void setNumAttacks(short n); void setShotsmax(short s); void setShotscur(short s); void decShotscur(short s=1); void incShotscur(short s=1); void setMagicpower(short m); void setMagicrealm(short m); void setLevel(short l); void setRequiredSkill(int s); void setMinStrength(short s); void setClan(short c); void setSpecial(short s); void setQuestnum(short q); void setEffect(bstring e); void setEffectDuration(long d); void setEffectStrength(short s); void setMaxUnique(short m); void setCoinCost(unsigned long c); void setShopValue(unsigned long v); void setLotteryCycle(int c); void setLotteryNumbers(short i, short n); void setRecipe(int r); void setMaterial(Material m); void setQuestOwner(const Player* player); void setUniqueId(int id); void clearEffect(); // Adjust things void killUniques(); void loadContainerContents(); void nameCoin(bstring type, unsigned long value); void randomEnchant(int bonus = 0); int adjustArmor(); void tempPerm(); void track(Player* player); // Check conditions bool doRestrict(Creature* creature, bool p); bool raceRestrict(const Creature* creature) const; bool raceRestrict(const Creature* creature, bool p) const; bool classRestrict(const Creature* creature) const; bool classRestrict(const Creature* creature, bool p) const; bool clanRestrict(const Creature* creature) const; bool clanRestrict(const Creature* creature, bool p) const; bool levelRestrict(const Creature* creature, bool p=false) const; bool skillRestrict(const Creature* creature, bool p=false) const; bool alignRestrict(const Creature* creature, bool p=false) const; bool sexRestrict(const Creature* creature, bool p=false) const; bool strRestrict(const Creature* creature, bool p=false) const; bool lawchaoRestrict(const Creature* creature, bool p=false) const; bool showAsSame(const Player* player, const Object* Object) const; bool isHeavyArmor() const; bool isMediumArmor() const; bool isLightArmor() const; bool needsTwoHands() const; bool isQuestValid() const; // Is this object valid for a quest? bstring showAlchemyEffects(Creature *creature = NULL); bstring statObj(int statFlags); double winterProtection() const; void addDarkness(); void remDarkness(); bool isKey(const Room* room, const Exit* exit) const; }; #endif /*OBJECTS_H_*/