/** \~russian  NPC.
 *
 ** \~english Reprsents NPC plan.
 *
 ** \~
 * @ingroup Server
 * @nosubgrouping
 */

class NpcPlane
{
public:
    /**
     * \~russian @name  
     * \~english @name General fields
     * \~ @weight 300
     */
    //@{

    /** \~russian  . */
    /** \~english Plane identifier. */
    int Identifier;

    /** \~russian   . */
    /** \~english Extended plane identifier. */
    uint IdentifierExt;

    /** \~russian  . . @link PlanesTypes Planes types@endlink. */
    int Type;

    /** \~russian  .
     *
     *         
     *  @link PlanesDefaultPriority Planes default priority@endlink.
     */
    uint Priority;

    /** \~russian  . */
    NpcPlane@ Child;

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

    //@}

    /** @name AI_PLANE_ATTACK
     * @weight 200
     */
    //@{

    /** \~russian  ID  . */
    uint Attack_TargId;

    /** \~russian       .
     *
     *         Attack_MinHp,
     *  NPC   .
     */
    int Attack_MinHp;

    /** (?) */
    bool Attack_IsGag;

    /** (?) */
    uint16 Attack_GagHexX;

    /** (?) */
    uint16 Attack_GagHexY;

    /** (?) */
    uint16 Attack_LastHexX;

    /** (?) */
    uint16 Attack_LastHexY;

    //@}

    /** @name AI_PLANE_WALK
     * @weight 190
     */
    //@{

    /** \~russian - ,     . */
    uint16 Walk_HexX;

    /** \~russian Y- ,     . */
    uint16 Walk_HexY;

    /** \~russian ,      ,     .
     *
     *  : 0  -, 1  , 2  -  ..
     */
    uint8 Walk_Dir;

    /** \~russian ,         .
     *
     *    0,      .
     */
    uint Walk_Cut;

    //@}

    /** @name AI_PLANE_PICK
     * @weight 180
     */
    //@{

    /** \~russian - ,    . */
    uint16 Pick_HexX;

    /** \~russian Y- ,    . */
    uint16 Pick_HexY;

    /** \~russian ID  .
     *
     * .  @b ITEMPID.H.
     */
    uint16 Pick_Pid;

    /** (?) */
    uint Pick_UseItemId;

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

    //@}

    /** @name AI_PLANE_MISC
     * @weight 170
     */
    //@{

    /** \~russian ,     . */
    uint Misc_WaitSecond;

    /** \~russian  .
     *
     * . @b scripts.lst  @b _scripts.fos.
     */
    int Misc_ScriptId;

    /** \~russian      .
     *
     *   (. @b template.fos):
     * @code
     * void plane_FuncName(Critter& npc);
     * @endcode
     *
     * @param  funcName   .
     *
     * @return @c true     ;
     *         @c false    .
     */
    bool Misc_SetScript(string& funcName);

    //@}

    /**
     * \~russian @name  
     * \~english @name General methods
     * \~ @weight 100
     */
    //@{

    /** \~russian   . */
    NpcPlane@ GetCopy();

    /** \~russian   .
     *
     * @param  child
     *
     * @return (?)
     *
     */
    NpcPlane@+ SetChild(NpcPlane& child);

    //@}
}
