857 lines
25 KiB
C++
857 lines
25 KiB
C++
|
|
|
|
#pragma once
|
|
|
|
#include <Windows.h>
|
|
#include "K3DTypes.h"
|
|
#include <mmo/ArType.h>
|
|
#include "SGameAvatarEx.h"
|
|
#include "SkillBaseFile.h"
|
|
|
|
//#include <string>
|
|
|
|
//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<Key_EVENT_NEW>* srcEvent, KEventKeyRes<Key_EVENT_NEW>* & 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<Key_EVENT_NEW>* pEvent00_eff,
|
|
KEventKeyRes<Key_EVENT_NEW>* pEvent00_sound,
|
|
KEventKeyRes<Key_EVENT_NEW>* pEvent00_motion_effect,
|
|
KEventKeyRes<Key_EVENT_NEW>* pEvent01,
|
|
KEventKeyRes<Key_EVENT_NEW>* pEvent02,
|
|
KEventKeyRes<Key_EVENT_NEW>* pEvent03,
|
|
KEventKeyRes<Key_EVENT_NEW>* pEvent04,
|
|
KEventKeyRes<Key_EVENT_NEW>* pEvent05,
|
|
KEventKeyRes<Key_EVENT_NEW>* pEvent06 );
|
|
|
|
|
|
virtual void Process( DWORD dwTime );
|
|
|
|
bool ProcessingDamage();
|
|
protected:
|
|
void _processDamage( struct SMSG_DAMAGE * pDamage, int & nHitCnt, int nKeyHandleID, int nKeyTime );
|
|
void _processEvent( KEventKeyRes<Key_EVENT_NEW>* 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<Key_EVENT_NEW>* m_pEventHandle00_effect;
|
|
KEventKeyRes<Key_EVENT_NEW>* m_pEventHandle00_sound;
|
|
KEventKeyRes<Key_EVENT_NEW>* m_pEventHandle00_motion_effect;
|
|
KEventKeyRes<Key_EVENT_NEW>* m_pEventHandle01;
|
|
KEventKeyRes<Key_EVENT_NEW>* m_pEventHandle02;
|
|
KEventKeyRes<Key_EVENT_NEW>* m_pEventHandle03;
|
|
KEventKeyRes<Key_EVENT_NEW>* m_pEventHandle04;
|
|
KEventKeyRes<Key_EVENT_NEW>* m_pEventHandle05;
|
|
KEventKeyRes<Key_EVENT_NEW>* m_pEventHandle06;
|
|
|
|
std::vector<int> 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<Key_EVENT_NEW>* 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<int> 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();
|
|
}; |