roh/conf/area/
roh/game/talk/
roh/help/
roh/monsters/ocean/
roh/objects/ocean/
roh/player/
roh/rooms/area/1/
roh/rooms/misc/
roh/rooms/ocean/
roh/src-2.44b/
/*
 * alchemy.cpp
 *   Alchmey classes, functions, and other handlers
 *   ____            _
 *  |  _ \ ___  __ _| |_ __ ___  ___
 *  | |_) / _ \/ _` | | '_ ` _ \/ __|
 *  |  _ <  __/ (_| | | | | | | \__ \
 *  |_| \_\___|\__,_|_|_| |_| |_|___/
 *
 * 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 _ALCHEMY_H
#define	_ALCHEMY_H

//class XmlNodePtr;

class AlchemyInfo {
public:
    AlchemyInfo(xmlNodePtr rootNode);
    bstring getDisplayString();
    
    bstring name;
    bool positive;

    // Standard duration and strength for this effect - will be modified by alchemy skill,
    // equipment quality, and herb quality
    long baseDuration;
    short baseStrength;

    bstring action; // effect, python
    bool throwable; // Can this be thrown at a door/creature/etc
    bstring pythonScript; // if action == python, or if throwable, needs to handle both
};

class AlchemyEffect {
private:
    bstring     effect;
    short       quality;

    long	duration;
    short	strength;

public:
    AlchemyEffect();
    AlchemyEffect(xmlNodePtr curNode);
    AlchemyEffect(const AlchemyEffect &ae);
    
    int saveToXml(xmlNodePtr rootNode);

    // Combine with another effect and caculate the average quality of the two
    void combineWith(const AlchemyEffect &ae);

    // Apply this effect to the creature:
    bool apply(Creature* target);

    bstring getEffect();
    long getDuration();
    short getStrength();
    short getQuality();

};


#endif	/* _ALCHEMY_H */