/** º£À̽º ½ºÅ³ @author -¹ÚÁØÅÂ,Áö¿Ï @since @remarks -2005.06.19 enter,leave,°ø¿ë ¸â¹ö º¯¼ö Ãß°¡ -Áö¿Ï -2005.06.20 ÆÄÀÏ À̵¿-Áö¿Ï -2005.12.15 ¼ø¼ö °¡»ó Ŭ·¡½º¿´À¸³ª Ưº°ÇÑ ½ºÅ³ ¿¬ÃâÀÌ ¾ø´ÂÇÑ ÀνºÅϽº¸¦ »ý¼ºÇؼ­ °ø¿ëÀ¸·Î ¾´´Ù. -2005.12.15 ÇÏÀ§ Ŭ·¡½º¿¡¼­ È£Ã⠵Ǵø SendSkillPacketÀ» »óÀ§·Î ¿Ã¸²-Áö¿Ï */ #pragma once class Clone; class Character; class StateBase; class SkillScriptInfo; struct EffectInfo; #define MAX_HIT 12 class StateSkill : public StateBase { public: StateSkill(); virtual ~StateSkill(); public: SLOTCODE GetSkillClassCode() {return m_dwSkillClassCode; } SLOTCODE GetSkillCode() { return m_dwSkillCode; } private: int GetStateKind() { return STATE::SKILL; } void Initialize(Object* pOwner); void OnForceChange(Object* pOwner); protected: void Finalize(Object* pOwner); // ¿å³ª¿À³× protected: virtual BOOL CanTransite(Object* pOwner, DWORD CurTime, StateBase* pToTransiteState) { return TRUE; } virtual STATECHANGE::TYPE OnStart(Object* pOwner, DWORD CurTime); virtual STATEPROCESS::TYPE OnProcess(Object* pOwner, DWORD CurTime,DWORD dwTick); virtual STATECHANGE::TYPE OnEnd(Object* pOwner, DWORD CurTime); virtual STATEPROCESS::TYPE LeaveProcess(Object* pOwner, DWORD CurTime,DWORD dwTick); //Áö¿Ï Ãß°¡ virtual VOID EnterProcess(Object* pOwner, DWORD CurTime,DWORD dwTick); protected: virtual BOOL OnProcessCustemEvent( int nEventIndex, Object* pOwner, DWORD CurTime,DWORD dwTick ) { return TRUE; } protected: // ÀÌ ÇÔ¼ö´Â ½ºÅ³À» Á÷Á¢ »ç¿ëÇϴ°æ¿ì, Áï HeroÀÎ °æ¿ì¿¡¸¸ ÀÛµ¿ÀÌ µÇ¹Ç·Î g_pHero¸¦ ¹Ù·Î »ç¿ëÇÑ´Ù BOOL SendSkillPacket(); // ´ë»óÀÇ ±ÙÁ¢À§Ä¡(Range)¸¦ ±¸ÇÑ´Ù. (µ¹Áø±âÀÇ ¸ñÇ¥À§Ä¡¸¦ ±¸ÇÒ‹š..) WzVector GetTargetNearPosition( const WzVector& StartPosition, Character* pTarget, float Range ); void ProcessStartAttackSerial(Character* pCharacter); void ProcessStartAnimation(Character* pCharacter); void ProcessStartDirection(Character* pCharacter); void ProcessStartSkillEffect(Character* pCharacter); BOOL ProcessMove(Character* pCharacter,float fSpeed,DWORD dwTick); void ProcessAnimationEvent(Character* pCharacter, DWORD CurTime, DWORD dwTick ); SkillScriptInfo* GetSkillInfo() { return m_pSkillScript; } BOOL StartSkillAnimation(Character* pCharacter, BOOL bLoop = FALSE ); BOOL CheckEvent(); BOOL ProcessHit(Character* pCharacter,int HitCount); BOOL CheckNotProcessedHitEvent(int HitCount); void ReleaseCastingEffect(); float GetAnimationRate() { return m_fRet; } void SetAnimationRate( float fRate ) { m_fRet = fRate; } private: SkillScriptInfo* m_pSkillScript; WzEvent m_event; //Ÿ°Ý Á¡µîÀÇ °ø°Ý ÇÁ·¹ÀÓ À̺¥Æ® float m_fRet; //¿¡´Ï¸ÞÀÌ¼Ç ÁøÃ´µµ protected: SLOTCODE m_dwSkillCode; SLOTCODE m_dwSkillClassCode; int m_iHitProcessed; int m_iHitCount; BOOL m_isCastAni; //ij½ºÆ® ¿¡´Ï°¡ ÀÖ³ª DWORD m_dwTotalCastTime; //ij½ºÆ® ½Ã°£ DWORD m_dwCurCastTime; //ij½ºÆ® ½Ã°£ HANDLE m_hCastHandle[2]; // ij½ºÆÃ ÀÌÆåÆ®¸¦ Á÷Á¢ »èÁ¦Çϱâ À§ÇÑ ÇÚµé DWORD m_dwStartProjectileKey; private: void _TestRecvDamageSkillEffect(Character* pCharacter); };