
//BEGIN ENTITY METHODS

	virtual bool IsClient()			{ return false; }
	virtual bool IsNPC()			{ return false; }
	virtual bool IsMob()			{ return false; }
	virtual bool IsCorpse()			{ return false; }
	virtual bool IsPlayerCorpse()	{ return false; }
	virtual bool IsNPCCorpse()		{ return false; }
	virtual bool IsObject()			{ return false; }
//	virtual bool IsGroup()			{ return false; }
	virtual bool IsDoor()			{ return false; }
	virtual bool IsTrap()			{ return false; }
	virtual bool IsBeacon()			{ return false; }
	
	Client* CastToClient();
	NPC*    CastToNPC();
	Mob*    CastToMob();
	Corpse*	CastToCorpse();
//	Object* CastToObject();
//	Group*	CastToGroup();
//	Doors*	CastToDoors();
//	Trap*	CastToTrap();
//	Beacon*	CastToBeacon();
	
//BEGIN MOB METHODS
	int16& GetID();
	virtual Const_char * GetName();
	void Depop(bool StartSpawnTimer = true);
	
	void	RogueAssassinate(Mob* other);
	bool	BehindMob(Mob* other = 0, float playerx = 0.0f, float playery = 0.0f);
	void SetLevel(uint8 in_level, bool command = false);
	
	uint32 GetSkill(SkillType skill_num);
	void SendWearChange(int8 material_slot);
	sint32 GetEquipment(int8 material_slot);	// returns item id
	sint32 GetEquipmentMaterial(int8 material_slot);
	sint32 GetEquipmentColor(int8 material_slot);
	bool IsMoving();
	void GoToBind();
	void Gate();
	bool Attack(Mob* other, int Hand = 13, bool FromRiposte = false)
	virtual void Damage(Mob* from, sint32 damage, int16 spell_id, SkillType attack_skill, bool avoidable = true, sint8 buffslot = -1, bool iBuffTic = false) {};

	void Heal();
	void SetMaxHP();
	int32 GetLevelCon(int8 iOtherLevel);
	void SetHP(sint32 hp);
	void DoAnim(const int animnum, int type=1);
	void ChangeSize(float in_size, bool bNoRestriction = false);
	void GMMove(float x, float y, float z, float heading = 0.01);
	void SendPosUpdate(int8 iSendToSelf = 0);
	void SendPosition();
	bool HasProcs();
	//bool CheckLos(Mob* other);
	bool IsInvisible(Mob *other = 0);
	void SetInvisible(bool state);
	bool FindBuff(int16 spellid);
	bool	FindType(int8 type, bool bOffensive = false, int16 threshold = 100);
	sint8	GetBuffSlotFromType(int8 type);
	void	MakePet(int16 spell_id, const char* pettype, const char *name=NULL);
	virtual inline int16	GetBaseRace();
	virtual inline int8	GetBaseGender();
	virtual inline int8	GetDeity();
	inline const int16&	GetRace();
	inline const int8&	GetGender();
	inline const int8&	GetTexture();
	inline const int8&	GetHelmTexture();
	inline const int8&	GetClass();
	inline const uint8&	GetLevel();
	Const_char * GetCleanName();
	inline Mob*			GetTarget();
	virtual inline void	SetTarget(Mob* mob);
	virtual inline float		GetHPRatio();

	bool IsWarriorClass();
	virtual inline const sint32&	GetHP();
	virtual inline const sint32&	GetMaxHP();
	virtual float GetWalkspeed();
	virtual float GetRunspeed();
	virtual int GetCasterLevel(int16 spell_id);
	virtual inline const sint32&	GetMaxMana();
	virtual inline const sint32&	GetMana();
	virtual void SetMana(sint32 amount);
	virtual inline float			GetManaRatio();

	inline virtual int16	GetAC();
	inline virtual int16	GetATK();
	inline virtual sint16	GetSTR();
	inline virtual sint16	GetSTA();
	inline virtual sint16	GetDEX();
	inline virtual sint16	GetAGI();
	inline virtual sint16	GetINT();
	inline virtual sint16	GetWIS();
	inline virtual sint16	GetCHA();
	inline virtual sint16	GetMR();
	inline virtual sint16	GetFR();
	inline virtual sint16	GetDR();
	inline virtual sint16	GetPR();
	inline virtual sint16	GetCR();

	inline virtual sint16  GetMaxSTR();
	inline virtual sint16  GetMaxSTA();
	inline virtual sint16  GetMaxDEX();
	inline virtual sint16  GetMaxAGI();
	inline virtual sint16  GetMaxINT();
	inline virtual sint16  GetMaxWIS();
	inline virtual sint16  GetMaxCHA();

	virtual float GetActSpellRange(int16 spell_id, float range);
	virtual sint32  GetActSpellDamage(int16 spell_id, sint32 value);
	virtual sint32  GetActSpellHealing(int16 spell_id, sint32 value);
	virtual sint32 GetActSpellCost(int16 spell_id, sint32 cost);
	virtual sint32 GetActSpellDuration(int16 spell_id, sint32 duration);
	virtual sint32 GetActSpellCasttime(int16 spell_id, sint32 casttime);
	double ResistSpell(uint8 ressit_type, int16 spell_id, Mob *caster);
	uint16 GetSpecializeSkillValue(int16 spell_id) const;

	int32 GetNPCTypeID();
	bool IsTargeted();

	inline const float&	GetX();
	inline const float&	GetY();
	inline const float&	GetZ();
	inline const float&	GetHeading();
	inline const float&	GetSize();

	void	SetFollowID(int32 id);
	int32	GetFollowID();

	virtual void	Message(int32 type, const char* message, ...);
	virtual void	Message_StringID(int32 type, int32 string_id, int32 distance = 0);
	void Say(const char *format, ...);
	void Shout(const char *format, ...);
	void Emote(const char *format, ...);
	void InterruptSpell(int16 spellid = 0xFFFF);

	virtual void	CastSpell(int16 spell_id, int16 target_id, int16 slot = 10, sint32 casttime = -1, sint32 mana_cost = -1);
	bool	IsImmuneToSpell(int16 spell_id, Mob *caster);
	void	BuffFadeBySpellID(int16 spell_id);
	void	BuffFadeByEffect(int effectid, int skipslot = -1);
	void	BuffFadeAll();
	void	BuffFadeBySlot(int slot, bool iRecalcBonuses = true);

	int	CanBuffStack(int16 spellid, int8 caster_level, bool iFailIfOverwrite = false);
	inline bool	IsCasting();
	int16	CastingSpellID();

	void	SetAppearance(EmuAppearance app, bool iIgnoreSelf = true);

	inline EmuAppearance	GetAppearance();
	inline const int8&	GetRunAnimSpeed();
	inline void			SetRunAnimSpeed(sint8 in);

	void	SetPetID(int16 NewPetID);
	inline const	int16&	GetPetID();
	void	SetOwnerID(int16 NewOwnerID);
	inline const	int16&	GetOwnerID();
	inline const	int16&	GetPetType();

	inline const	int8&	GetBodyType();
	virtual void    Stun(int duration);

	void	Spin();
	void	Kill();

	inline void	SetInvul(bool invul);
	inline bool	GetInvul();
	inline void	SetExtraHaste(int Haste);
	virtual int GetHaste();
	int		GetMonkHandToHandDamage(void);

	bool	CanThisClassDoubleAttack(void);
	bool	CanThisClassDualWield(void);
	bool	CanThisClassRiposte(void);
	bool	CanThisClassDodge(void);
	bool	CanThisClassParry(void);

	int	GetMonkHandToHandDelay(void);
	int8	GetClassLevelFactor();
	void	Mesmerize();
	inline bool	IsMezzed();
	inline bool	IsStunned();

	void StartEnrage();
	bool IsEnraged();

	FACTION_VALUE GetReverseFactionCon(Mob* iOther);
	inline const bool&	IsAIControlled();
	inline const float& GetAggroRange();
	inline const float& GetAssistRange();

	inline void			SetPetOrder(Mob::eStandingPetOrder i);
	inline const Mob::eStandingPetOrder& GetPetOrder();
	inline const bool&	IsRoamer();
	inline const bool   IsRooted();

	void AddToHateList(Mob* other, sint32 hate = 0, sint32 damage = 0, bool iYellForHelp = true, bool bFrenzy = false, bool iBuffTic = false);
	void SetHate(Mob* other, sint32 hate = 0, sint32 damage = 0);
	int32 GetHateAmount(Mob* tmob, bool is_dam = false);
	int32 GetDamageAmount(Mob* tmob);
	Mob* GetHateTop();
	Mob* GetHateDamageTop(Mob* other);
	Mob* GetHateRandom();
	bool IsEngaged();
	bool HateSummon();
	void FaceTarget(Mob* MobToFace = 0, bool update = false);
	void SetHeading(float iHeading);
	void WipeHateList();

	inline bool	CheckAggro(Mob* other);

	sint8				CalculateHeadingToTarget(float in_x, float in_y);
	bool				CalculateNewPosition(float x, float y, float z, float speed, bool checkZ = false);
	bool				CalculateNewPosition2(float x, float y, float z, float speed, bool checkZ = false);
	float				CalculateDistance(float x, float y, float z);
	void				SendTo(float new_x, float new_y, float new_z);
	void				SendToFixZ(float new_x, float new_y, float new_z);
	void				NPCSpecialAttacks(const char* parse, int permtag);
	inline int32&		DontHealMeBefore();
	inline int32&		DontBuffMeBefore();
	inline int32&		DontDotMeBefore();
	inline int32&		DontRootMeBefore();
	inline int32&		DontSnareMeBefore();

	sint16	GetResist(int8 type);
	Mob*	GetShieldTarget();
	void	SetShieldTarget(Mob* mob);
	bool	Charmed();
	int32	GetLevelHP(int8 tlevel);
	int32	GetZoneID() const;
	int16	CheckAggroAmount(int16 spellid);
	int16	CheckHealAggroAmount(int16 spellid);
	virtual int32 GetAA(int32 aa_id);
	bool DivineAura();

	void				AddFeignMemory(Client* attacker);
	void				RemoveFromFeignMemory(Client* attacker);
	void				ClearFeignMemory();
	
//END MOB METHODS





	
	
