Files
2026-06-01 12:46:52 +02:00

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();
};