/** \~russian  .
 *
 *      :
 * - >, <, ==, >=, <=, !=   .     @c bool.
 * - +=, -=, *=, /=, =   .     GameVar.
 * - +, -, *, /   .     @c int.
 *
 * \~english Represents game variable.
 *
 * For the GameVar class following types of the operations are overloaded:
 * - >, <, ==, >=, <=, !=  logical operators. The type of returning value  @c bool.
 * - +=, -=, *=, /=, =  operators of appropriation. The type of returning value  GameVar.
 * - +, -, *, /  arithmetic operators. The type of returning value  @c int.
 *
 * \~ @ingroup Server
 */

class GameVar
{
public:
    /** \~russian    .
     *
     * @return   .
     */
    int GetValue();

    /** \~russian     .
     *
     * @return    .
     */
    int GetMin();

    /** \~russian     .
     *
     * @return    .
     */
    int GetMax();

    /** \~russian ,    .
     *
     * @return @c true    ; @c false   .
     */
    bool IsQuest();

    /** \~russian      ,     @b FOQUEST.MSG.
     *
     * @return     @b FOQUEST.MSG,    .
     */
    uint GetQuestStr();

    /**
     * \~russian @name   
     * \~english @name Overloaded equality operators
     */
    //@{

    int opCmp(const GameVar&);
    int opCmp(const int);

    bool opEquals(const GameVar&);
    bool opEquals(const int);

    //@}

    /**
     * \~russian @name   
     * \~english @name Overloaded assignment operators
     */
    //@{

    GameVar& opAssign(const GameVar&);
    GameVar& opAssign(const int);

    GameVar& opDivAssign(const GameVar&);
    GameVar& opDivAssign(const int);

    GameVar& opMulAssign(const GameVar&);
    GameVar& opMulAssign(const int);

    GameVar& opSubAssign(const GameVar&);
    GameVar& opSubAssign(const int);

    GameVar& opAddAssign(const GameVar&);
    GameVar& opAddAssign(const int);

    //@}

    /**
     * \~russian @name   
     * \~english @name Overloaded arithmetic operators
     */
    //@{

    int opAdd(const GameVar&);
    int opAdd(const int);

    int opSub(const GameVar&);
    int opSub(const int);

    int opDiv(const GameVar&);
    int opDiv(const int);

    int opMul(const GameVar&);
    int opMul(const int);

    //@}
}

