/* * effects.h * effects on creatures * ____ _ * | _ \ ___ __ _| |_ __ ___ ___ * | |_) / _ \/ _` | | '_ ` _ \/ __| * | _ < __/ (_| | | | | | | \__ \ * |_| \_\___|\__,_|_|_| |_| |_|___/ * * 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 EFFECTS_H_ #define EFFECTS_H_ #define EFFECT_MAX_DURATION 10800 #define EFFECT_MAX_STRENGTH 5000 #include <iostream> // Actions to be taken by the effect function enum EffectType { NO_EFFECT_TYPE, GOOD_EFFECT, NEUTRAL_EFFECT, BAD_EFFECT, MAX_EFFECT_TYPE }; // Forward Delcaration class Creature; // Typedefs typedef bool(*EffectFn)(EffectInfo* effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); typedef struct { bstring name; bstring display; bstring oppositeEffect; bstring selfStrAdd; bstring roomStrAdd; bstring selfStrDel; bstring roomStrDel; EffectFn effFn; bool needsPulse; // Does this effect need to be pulsed? EffectType type; } EffectList, *effectPtr; // Effects that are conferred from spells or items class ConferredEffect { private: bstring name; // Name of the effect int strength; // Strength of the effect int duration; // How long this effect will last }; // Information about an effect on a creature class EffectInfo { private: bstring name; // Which effect is this bstring pOwner; // Who cast this effect (player) time_t lastMod; // When did we last update duration long duration; // How much longer will this effect last int strength; // How strong is this effect (for overwriting effects) int extra; // Extra info effectPtr myEffect; // Pointer to the effect listing Creature* parentCreature; // Who are we effecting BaseRoom* parentRoom; Exit* parentExit; public: EffectInfo(); EffectInfo(bstring pName, time_t pLastMod, long pDuration, int pStrength, Creature* cParent=0, BaseRoom* rParent=0, Exit* xParent=0, const Creature* owner=0); EffectInfo(xmlNodePtr rootNode, EffectParentType type); virtual ~EffectInfo(); bool compute(void* applier, ApplyFrom aFrom); bool add(void); bool apply(void); bool willOverWrite(EffectInfo* existingEffect) const; friend std::ostream& operator<<(std::ostream& out, const EffectInfo& eff); void setParentCreature(Creature* parent); void setParentRoom(BaseRoom* parent); void setParentExit(Exit* parent); const bstring& getName() const; bstring getDisplayName() const; const bstring& getOwner() const; bool isOwner(const Creature* owner) const; time_t getLastMod() const; long getDuration() const; int getStrength() const; int getExtra() const; Creature* getParentCreature() const; BaseRoom* getParentRoom() const; Exit* getParentExit() const; BaseRoom* getRoom() const; effectPtr getEffect() const; bool isPermanent() const; bool updateLastMod(time_t t); bool pulse(time_t t); bool remove(bool show = true); void setOwner(const Creature* owner); void setStrength(int pStrength); void setExtra(int pExtra); void setDuration(long pDuration); void save(xmlNodePtr rootNode) const; bool isCurse() const; bool isDisease() const; bool isPoison() const; }; effectPtr findEffect(const bstring& effect, EffectParentType type); EffectFn findEffectFn(const bstring& effect, EffectParentType type); bool effectPoison(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectDisease(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectCurse(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectVisibility(EffectInfo* effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectBeneficial(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectShield(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectDetect(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectDarkInfra(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectLanguages(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectGravity(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectResist(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectVuln(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectImmune(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectNatural(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectStatRaise(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectStatLower(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectGeneric(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectWall(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); bool effectRoomDoT(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); // Weapon Resist, Vuln, Immune bool effectWeaponRVI(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); // Death Sickness! bool effectDeathSickness(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); // Petrify, hold person, etc bool effectDisable(EffectInfo *effect, Creature* target, EffectAction action, void* applier, ApplyFrom aFrom); #endif /*EFFECTS_H_*/