#pragma once #include #include "K3DTypes.h" #include #include "SGameAvatarEx.h" #include "SkillBaseFile.h" //#include //SGameAvatarEx 들이 수행할 일들~ //공격, 스킬, 명령 등 ////////////////////////////////////////////////////////////////////////// /// SGameWork class SGameWork { public: enum { STEP_00 = 0 , STEP_01, STEP_02, STEP_03, STEP_04, STEP_05 , STEP_06, STEP_07, STEP_08, STEP_09, STEP_10 , STEP_11, STEP_12, STEP_13, STEP_14, STEP_15 , STEP_16, STEP_17, STEP_18, STEP_19, }; enum WORK_TYPE { WORK_ATTACKEX, WORK_AIMINGBOW, WORK_SHOOTINGBOW, WORK_NONE, }; SGameWork( class SGameAvatarEx *pOwner, int nCount=1, DWORD dwKeepTime=0 ); virtual ~SGameWork(); virtual void Process( DWORD dwTime ); virtual void *PerformMsg( struct SGameMessage * pMsg ) { return (void*)0; } virtual void SetDamegeMsg( struct SMSG_ATTACK * pAttackMsg ) {} virtual void SetDamegeInfo( const struct SStateInfo * pStateInfo ) {} virtual void CastCancel() { ForceEnd(); } virtual void ForceEnd() { m_bEnd = TRUE; } virtual void SetEnd( BOOL bEnd ) { m_bEnd = bEnd; } virtual BOOL IsEnd() { return m_bEnd; } // 2010.06.14 - prodongi //void SetStep( int nStep ) { m_nStep = nStep; } void SetStep( int nStep ); int GetStep() { return m_nStep; } virtual bool ProcessingDamage() { assert( false && "SGameWork ProcessingDamage()" ); return false; } void SetDamageDisplayName( struct SMSG_DAMAGE* pDamage, class SGameAvatarEx* pTarget ); void SetWorkType( WORK_TYPE nWorkType ); WORK_TYPE GetWorkType() { return m_nWorkType; } void SetOwner( SGameAvatarEx* pOwner ) { m_pOwner = pOwner; } protected: void _setEvent( KEventKeyRes* srcEvent, KEventKeyRes* & dstEvent ); int m_nCount; ///< 반 복 횟수 DWORD m_dwStartTime; ///< 시작 시간 DWORD m_dwKeepTime; ///< 지속 시간 DWORD m_dwTime; ///< 현재 시간 SGameAvatarEx * m_pOwner; BOOL m_bEnd; int m_nStep; WORK_TYPE m_nWorkType; }; ////////////////////////////////////////////////////////////////////////// /// SWorkAttackEx : 공격 처리 class SWorkAttackEx : public SGameWork { public: SWorkAttackEx( class SGameAvatarEx * pOwner, const AR_HANDLE target, float fAttackPlayRate ); virtual void SetDamegeMsg( struct SMSG_ATTACK * pAttackMsg ); virtual void SetDamegeInfo( const struct SStateInfo * pStateInfo ); virtual ~SWorkAttackEx(); void SetEventHandle( const DWORD dwStartTime, const unsigned short attack_speed, KEventKeyRes* pEvent00_eff, KEventKeyRes* pEvent00_sound, KEventKeyRes* pEvent00_motion_effect, KEventKeyRes* pEvent01, KEventKeyRes* pEvent02, KEventKeyRes* pEvent03, KEventKeyRes* pEvent04, KEventKeyRes* pEvent05, KEventKeyRes* pEvent06 ); virtual void Process( DWORD dwTime ); bool ProcessingDamage(); protected: void _processDamage( struct SMSG_DAMAGE * pDamage, int & nHitCnt, int nKeyHandleID, int nKeyTime ); void _processEvent( KEventKeyRes* event, DWORD eventTime ); void _ondamage( struct SMSG_DAMAGE * pDamage, int & nHitCnt, int nKeyHandleID, int nKeyTime ); DWORD m_dwMaxTime; ///< 공격 전체 프레임 DWORD m_dwHalfTime; ///< 공격 전체 1/2 프레임 DWORD m_dwStartTime; ///< 공격 시작 시간 DWORD m_dwEndTime; ///< 공격 끝나는 시간 float m_fAttackRate; ///< 공격 속도 AR_HANDLE m_Target; ///< 타겟 class SGameAvatarEx * m_pTarget; struct SMSG_DAMAGE* m_pDamageSet[4]; int m_nSwingCnt; int m_nHitCount; int m_nMaxHitCount; float m_fAttackPlayRate; KEventKeyRes* m_pEventHandle00_effect; KEventKeyRes* m_pEventHandle00_sound; KEventKeyRes* m_pEventHandle00_motion_effect; KEventKeyRes* m_pEventHandle01; KEventKeyRes* m_pEventHandle02; KEventKeyRes* m_pEventHandle03; KEventKeyRes* m_pEventHandle04; KEventKeyRes* m_pEventHandle05; KEventKeyRes* m_pEventHandle06; std::vector m_vFX_List; }; ////////////////////////////////////////////////////////////////////////// /// SWorkEmotion : Emotion 처리 class SWorkEmotion : public SGameWork { public: SWorkEmotion( class SGameAvatarEx * pOwner, struct SGameMessage * pMsg ); virtual ~SWorkEmotion(); bool SetEmotion( int nEmotionID ); virtual void Process( DWORD dwTime ); protected: int m_nEmotionID; }; ////////////////////////////////////////////////////////////////////////// /// SWorkWarp : Warp 처리 class SWorkWarp : public SGameWork { public: SWorkWarp( class SGameAvatarEx * pOwner, struct SCMSG_WARP * pMsg ); virtual ~SWorkWarp(); virtual void Process( DWORD dwTime ); protected: struct SCMSG_WARP * m_pWarpMsg; }; ////////////////////////////////////////////////////////////////////////// /// SWorkAttack : 공격 class SWorkAttack : public SGameWork { public: SWorkAttack( class SGameAvatarEx * pOwner, K3DVector & targetpos, AR_HANDLE targetID, int nDamage, int nRest_hp, int nAttackMsec ); virtual ~SWorkAttack(); virtual void Process( DWORD dwTime ); protected: K3DVector m_TargetPos; AR_HANDLE m_TargetID; int m_nDamage; int m_nRest_hp; int m_nAttackMsec; }; ////////////////////////////////////////////////////////////////////////// //SWorkGoodPosSearch /// 적절한 이동 위치 탐색 class SWorkGoodPosSearch : public SGameWork { public: SWorkGoodPosSearch( class SGameAvatarEx * pOwner, AR_HANDLE hMaster ); virtual ~SWorkGoodPosSearch(); virtual void Process( DWORD dwTime ); protected: K3DVector m_GoodPos; ///< 퇴각 위치 AR_HANDLE m_hMaster; ///< 주인님 }; ////////////////////////////////////////////////////////////////////////// /// SWorkPickUp : 줍기 class SWorkPickUp : public SGameWork { public: SWorkPickUp( class SGameAvatarEx * pOwner, class SGameAvatarEx* pItem ); virtual ~SWorkPickUp(); virtual void Process( DWORD dwTime ); }; ////////////////////////////////////////////////////////////////////////// /// 연출 앉기 class SWorkAniSit : public SGameWork { public: SWorkAniSit( class SGameAvatarEx * pOwner, DWORD dwTime ); ~SWorkAniSit(); virtual void *PerformMsg( struct SGameMessage * pMsg ); virtual void Process( DWORD dwTime ); }; ////////////////////////////////////////////////////////////////////////// /// 연출 서기 class SWorkAniStandUp : public SGameWork { public: SWorkAniStandUp( class SGameAvatarEx * pOwner, DWORD dwTime ); ~SWorkAniStandUp(); virtual void Process( DWORD dwTime ); }; ////////////////////////////////////////////////////////////////////////// /// 활 조준 class SWorkAimingBow : public SGameWork { public: SWorkAimingBow( class SGameAvatarEx * pOwner, AR_HANDLE hTarger, char bowtype ); ~SWorkAimingBow(); virtual void Process( DWORD dwTime ); virtual void ForceEnd(); protected: std::string m_strFX_01; ///< 시전 효과 std::string m_strFX_02; ///< 발사체 효과 int m_nEffectID[2]; AR_HANDLE m_hTarget; class SGameAvatarEx * m_pTarget; int m_nTypeBow; }; ////////////////////////////////////////////////////////////////////////// /// 활 발사 class SWorkShootingBow : public SGameWork { public: SWorkShootingBow( class SGameAvatarEx * pOwner, AR_HANDLE hTarger, char bowtype ); ~SWorkShootingBow(); virtual void SetDamegeInfo( const struct SStateInfo * pStateInfo ); virtual void Process( DWORD dwTime ); bool ProcessingDamage(); protected: std::string m_strFX_03; ///< 발사 효과 int m_nEffectID; AR_HANDLE m_hTarget; class SGameAvatarEx * m_pTarget; int m_nTypeBow; SGameMessage * m_pAttackMsg; }; //============================================================================================== /// 돌진 class SWorkRush_Shove : public SGameWork { public: SWorkRush_Shove( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX, const struct SStateInfo * pStateInfo ); virtual ~SWorkRush_Shove(); public: virtual void Process( DWORD dwTime ); protected: int m_nFireMotionID; float m_fPlayRate; _SKILL_FX* m_pSkillFX; }; //********************************************************************************************************************************** //********************************************************************************************************************************** //============================================================================================== class SNewSkill : public SGameWork { public: SNewSkill( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SNewSkill(); enum SKILL_MODE { SKILLMODE_CAST, SKILLMODE_FIRE, }; virtual void SetDamegeInfo( const struct SStateInfo * pStateInfo ); virtual void SetActionSkillEvent( const struct SStateInfo * pStateInfo ); void SetSkillMode( SKILL_MODE bMode ); SKILL_MODE GetSkillMode() { return m_nMode; } void SetPlayRate( float fPlayRate ); /// by 정동섭. 발사모션 길이조절용 void SetPlayRateAfterFire( float fPlayRate ) { m_fPlayRateAfterFire = fPlayRate; } void SetStartTime( DWORD dwStartTime ); void SetTarget( AR_HANDLE handle, class SGameAvatarEx* pTarget ); /// 마법류 시전 모션이 상황에 따라 변한다. void SetFireMotionID( int nFireMotionID ); void SetCastingTime( AR_TIME time ); virtual void Process( DWORD dwTime ); virtual void ForceEnd(); virtual bool ProcessingDamage(); void SetIsMeleeSkill(bool b) { m_bIsMeleeSkill = b; } float CalcCurrentAniTimeTime( SGameAvatarEx* pAvatar ); protected: void _processDefCast( DWORD dwTime ); void _processDefFire( DWORD dwTime ); void _processView(); void _processEventSet( DWORD dwTime ); void _processEvent( KEventKeyRes* event, DWORD eventTime ); void _getEventSet(); void _addFX( int nStage_Type ); void _addEffect( const AR_HANDLE & owner, const AR_HANDLE & attack, const AR_HANDLE & target, const int & nFX_ID, const int & nFX_pos, int nAnitype = SEQTYPE_NORMAL, float fPlayRate = 4.8f ); void _addEffect( const AR_HANDLE & target, const int & nFX_ID, const int & nFX_pos ); virtual void _processDamage(); void _processDamageMulti(); virtual void OnEventHit() {} virtual void OnEventSwing() {} virtual void OnEventEtc() {} _SKILL_FX* m_pSkillFX; SKILL_MODE m_nMode; ///< Cast, Fire float m_fPlayRate; // float m_fPlayRateAfterFire; ///< Fire 시작 후 complete 들어올 때까지 애니메이션 속도를 조정하기 위한 변수by 정동섭 AR_HANDLE m_hTarget; class SGameAvatarEx * m_pTarget; struct SMSG_DAMAGE * m_pDamage; struct SMSG_SKILL_EVENT* m_pSkillEvent; struct SMSG_SKILL_EVENT* m_pActionSkillEvent; int m_nCurHitIndex; ///< 현재 힛트 인덱스 int m_nHitCnt; ///< 전체 힛트 수 struct EVENT_SET * m_pEventSet; int m_nFireMotionID; int m_nEndFireMotionID; int m_nFxID; bool m_bIsSelfSkill; DWORD m_dwCatingTime; std::vector m_vFX_List; bool m_bIsMeleeSkill; }; //New Skill 시스템 ///소환 연출 class SWorkSummonCall : public SNewSkill { private: K3DVector m_vPos; int m_nFXID; public: void SetPosition( K3DVector* vPos ) { m_vPos = *vPos; } SWorkSummonCall( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkSummonCall(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 역소환 연출 class SWorkSummonReCall : public SNewSkill { public: SWorkSummonReCall( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkSummonReCall(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 무기 휘두르기 : 단타 => 캐스팅,시전에 모션이 포함 되어 있어서, 연출 데이타는 없다. class SWorkWeaponSwingHit : public SNewSkill { public: SWorkWeaponSwingHit( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkWeaponSwingHit(); virtual void Process( DWORD dwTime ); /// 2010.10.07 epic6에서 적용 안되서 추가함 - prodongi //virtual void _processDamage(); protected: virtual void OnEventHit(); virtual void OnEventSwing(); virtual void OnEventEtc(); bool m_bMultiAttack; }; //============================================================================================== /// 방패 휘두르기 : 단타 class SWorkShieldSwingHit : public SNewSkill { public: SWorkShieldSwingHit( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkShieldSwingHit(); virtual void Process( DWORD dwTime ); protected: virtual void OnEventHit(); virtual void OnEventSwing(); virtual void OnEventEtc(); bool m_bMultiAttack; }; //============================================================================================== /// 무기 휘두르기 : 3분할 모션 연타 class SWorkWeaponSwing_3Motion : public SNewSkill { public: SWorkWeaponSwing_3Motion( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkWeaponSwing_3Motion(); virtual void Process( DWORD dwTime ); virtual void _processDamage(); void SetCurHitCount( int nCurHitCount ); bool ProcessingDamage(); bool CurrentlyAnimationIsFire(); protected: virtual void OnEventHit(); virtual void OnEventSwing(); virtual void OnEventEtc(); int* m_pLocalFireMotionID; int m_nCurHitCount; unsigned char m_cMaxHitCount; }; //============================================================================================== /// 무기 휘두르기 : 단일모션 연타 class SWorkWeaponSwing_ContinuousHits : public SNewSkill { public: SWorkWeaponSwing_ContinuousHits( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkWeaponSwing_ContinuousHits(); virtual void Process( DWORD dwTime ); virtual void _processDamage(); bool ProcessingDamage(); protected: virtual void OnEventHit(); virtual void OnEventSwing(); virtual void OnEventEtc(); }; //============================================================================================== /// 무기 휘두르기 : 질 class SWorkWeaponSwing_Zeal : public SNewSkill { public: SWorkWeaponSwing_Zeal( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkWeaponSwing_Zeal(); virtual void Process( DWORD dwTime ); virtual void _processDamage(); bool ProcessingDamage(); bool CurrentlyAnimationIsFire(); protected: virtual void OnEventHit(); int* m_pLocalFireMotionID; int m_nCurMotionID; unsigned char m_cMaxHitCount; }; //============================================================================================== /// 무기 휘두르기 스킬 : 단타 + 흡수체발생 151 class SWorkWeaponSwing_Leech : public SNewSkill { public: SWorkWeaponSwing_Leech( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkWeaponSwing_Leech(); virtual void Process( DWORD dwTime ); protected: virtual void OnEventHit(); virtual void OnEventSwing(); virtual void OnEventEtc(); }; //============================================================================================== //class SWorkFlashMove_WeaponSwing; //순간이동 + 무기 휘두르기 스킬 : 단타 172 //class //무기 휘두르기 스킬 : 단타 + 지연효과 173 //class //스톱 & 반격 174 //============================================================================================== /// 활 쏘기 스킬 : 기본형 201 class SWorkBowShoot : public SNewSkill { private: std::string m_strFX_01; ///< 시전 효과 std::string m_strFX_02; ///< 발사체 효과 std::string m_strFX_03; ///< 발사체 효과 int m_nEffectID[3]; bool ProcessingDamage(); public: SWorkBowShoot( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkBowShoot(); virtual void Process( DWORD dwTime ); }; //class //활 쏘기 스킬 : 기본형 + 발사체투과 211 //============================================================================================== /// 활 쏘기 스킬 : 기본형 + 대상밀려남 212 class SWorkBowShoot_Shove : public SNewSkill { public: SWorkBowShoot_Shove( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkBowShoot_Shove(); }; //============================================================================================== /// 활 쏘기 스킬 : 기본형 + 흡수체발생 251 class SWorkBowShoot_Leech : public SNewSkill { public: SWorkBowShoot_Leech( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkBowShoot_Leech(); }; //============================================================================================== /// 셀프 스킬 301 class SWorkSelf : public SNewSkill { public: SWorkSelf( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkSelf(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 발동 스킬 : 발사체 없음 401 class SWorkMotion : public SNewSkill { private: bool ProcessingDamage(); public: SWorkMotion( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkMotion(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 발동 스킬 : 발사체 없음 + 흡수체발생 402 class SWorkMotion_Leech : public SNewSkill { private: bool ProcessingDamage(); public: SWorkMotion_Leech( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkMotion_Leech(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 발동 스킬 : 크리처에 발동FX 출력 + 흡수체발생 403 class SWorkMotion_SummonMotion_Leech : public SNewSkill { public: SWorkMotion_SummonMotion_Leech( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkMotion_SummonMotion_Leech(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 발동 스킬 : 발동형 발사체FX출력 411 class SWorkMotion_FXMotion : public SNewSkill { public: SWorkMotion_FXMotion( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkMotion_FXMotion(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 발동 스킬 : 발동형 발사체FX 다중출력 412 class SWorkMotion_FXMotionMultiple : public SNewSkill { public: SWorkMotion_FXMotionMultiple( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkMotion_FXMotionMultiple(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 슈팅 스킬 : 슈팅형 발사체FX 501 class SWorkShoot_FXShoot : public SNewSkill { public: SWorkShoot_FXShoot( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkShoot_FXShoot(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 슈팅 스킬 : 슈팅형 발사체FX 다중출력 502 class SWorkShoot_FXShootMultiple : public SNewSkill { public: SWorkShoot_FXShootMultiple( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkShoot_FXShootMultiple(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 슈팅 스킬 : 슈팅형 발사체FX 투과 발사 503 class SWorkShoot_FXShootPenetrate : public SNewSkill { public: SWorkShoot_FXShootPenetrate( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkShoot_FXShootPenetrate(); virtual void Process( DWORD dwTime ); }; /// 2011.03.23 뭐하는 클래스인가,, - prodongi //============================================================================================== /// 슈팅 스킬 : 슈팅형 발사체FX 연쇄 발사 504 class SWorkShoot_FXShootChain : public SNewSkill { public: SWorkShoot_FXShootChain( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkShoot_FXShootChain(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 지면 지속 스킬 : 지속발동체FX 가동 601 class SWorkGround_FXContinue : public SNewSkill { public: SWorkGround_FXContinue( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); virtual ~SWorkGround_FXContinue(); virtual void Process( DWORD dwTime ); }; //============================================================================================== /// 밀어내기 class SWorkKnockBack : public SNewSkill { public: SWorkKnockBack( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX, const SkillResult* pSkillResult ); virtual ~SWorkKnockBack(); virtual void Process( DWORD dwTime ); bool ProcessingDamage(); protected: float m_fKnockBackSpeed; K3DVector m_vKnockBackPosition; DWORD m_dwAddHitDelayTime; DWORD m_dwAddFireDelayTime; int m_nFxSubHitID; int m_nFxSubFireID; int m_nFxSubHitPos; int m_nFxSubFirePos; }; //============================================================================================== /// 돌진공격 class SChargeAttack : public SNewSkill { public: SChargeAttack( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX, const SkillResult* pSkillResult ); virtual ~SChargeAttack(); virtual void Process( DWORD dwTime ); bool ProcessingDamage(); private: DWORD m_dwAddHitDelayTime; DWORD m_dwAddFireDelayTime; int m_nFxSubHitID; int m_nFxSubFireID; int m_nFxSubHitPos; int m_nFxSubFirePos; }; //class //발동 & 발산 스킬 : 대상을 중심으로 FX조각들을 평면적으로 발산 602 //class //발산 스킬 : 자신의 정면 범위에 FX 발산 603 //class //슈팅 & 지연효과 : 슈팅형 발사체 FX 출력 & 히트후 지정시간후 폭발 처리 & 다수 피해 701 //============================================================================================== /// 타기 class SWorkMount : public SGameWork { protected: AR_HANDLE m_hCreatrue; class SGameAvatarEx * m_pCreature; DWORD m_dwOldTime; public: virtual void Process( DWORD dwTime ); public: SWorkMount( class SGameAvatarEx * pOwner, AR_HANDLE hTarger ); ~SWorkMount(); }; //============================================================================================== /// 내리기 class SWorkUnMount : public SGameWork { protected: AR_HANDLE m_hCreatrue; class SGameAvatarEx * m_pCreature; char m_Flag; DWORD m_dwOldTime; public: virtual void Process( DWORD dwTime ); public: SWorkUnMount( class SGameAvatarEx * pOwner, AR_HANDLE hTarger, char Flag ); ~SWorkUnMount(); }; //============================================================================================== /// 애니 없이 타기 class SWorkMountWithOutAnimation : public SGameWork { private: AR_HANDLE m_hCreatrue; class SGameAvatarEx * m_pCreature; int m_nFXID; int m_nFXPos; public: virtual void Process( DWORD dwTime ); public: SWorkMountWithOutAnimation( class SGameAvatarEx * pOwner, AR_HANDLE hTarger, int nFXID, int nFXPos ); ~SWorkMountWithOutAnimation(); }; //============================================================================================== /// 애니 없이 내리기 class SWorkUnMountWithOutAnimation : public SGameWork { private: AR_HANDLE m_hCreatrue; class SGameAvatarEx * m_pCreature; int m_nFXID; int m_nFXPos; public: virtual void Process( DWORD dwTime ); public: SWorkUnMountWithOutAnimation( class SGameAvatarEx * pOwner, AR_HANDLE hTarger, int nFXID, int nFXPos ); ~SWorkUnMountWithOutAnimation(); }; //============================================================================================== /// 광역 공격 class SWorkMultiAttack : public SGameWork { protected: K3DVector m_vStartDir; DWORD m_dwOldTime; DWORD m_dwRotationTime; float m_fCheckAngle; float m_fRangeAngle; struct TargetInfo { AR_HANDLE hTarget; bool bCheckDamage; TargetInfo( AR_HANDLE _hTarget ) : hTarget( _hTarget ), bCheckDamage(false) {} }; std::vector< TargetInfo > m_vTargetInfo; public: bool CheckCrash( const K3DVector & vView, const K3DVector & vTarget ); void SetTargetList( std::vector< AR_HANDLE > & vTargetList ); public: virtual void Process( DWORD dwTime ); public: SWorkMultiAttack( class SGameAvatarEx * pOwner ); ~SWorkMultiAttack(); }; //============================================================================================== /// 노동기술 class SWorkingSkill : public SNewSkill { private: const char* m_szSwapWeaponName; bool m_bHideWeapon; void HideNSwapWeapon(); public: virtual void Process( DWORD dwTime ); virtual void CastCancel(); virtual bool ProcessingDamage(); public: SWorkingSkill( class SGameAvatarEx * pOwner, _SKILL_FX* pSkillFX ); ~SWorkingSkill(); };