#pragma once #include "SGameAvatarEx.h" static const ENC_INT nDefaultContentID( XFastRandom() ); class SGamePlayer : public SGameAvatarEx { public: SGamePlayer( ENC_INT nContentID = nDefaultContentID ); virtual ~SGamePlayer(); SGamePlayer* GetLocalPlayer(); /// 사용자 입력 응답(Server) virtual void OnNetInput( struct SGameMessage * pMsg ); virtual void SetItemCodeLevel( int nIndex, ItemBase::ItemCode code, int nLevel ); virtual ItemBase::ItemCode GetItemCode( int nIndex ); virtual int GetItemLevel( int nIndex ); virtual ItemBase::ItemClass GetItemClass( int nIndex ); // 2010.08.12 - prodongi //virtual void SetCreature(AR_HANDLE hCreature) { m_hCreature = hCreature; } virtual void SetCreature(AR_HANDLE hCreature, bool enter); virtual void SetMountMode(); virtual void SetAttackMode(); virtual void SetNormalMode(); virtual AR_HANDLE GetCreature() { return m_hCreature; } /// 현재 장착하고 있는 아이템 클래스 얻기 virtual int GetItemClass(); /// 재질 virtual int GetMaterial(); virtual AR_UNIT GetAttackRange(); virtual void RefreshItemWearEx( class KSeqAvatarEx * pAvatarEx, std::vector< WEAR_DATA >& wearlist ); virtual void RefreshItemWear( class KSeqAvatarEx * pAvatarEx /*const char * pFileName, int nItemClass, int nWearType, int nItemLevel*/ ); virtual void OnChangeState( SObjectState::ID stateid, const SStateInfo &info ); virtual void SetViewVector( const K3DVector &tpos ); virtual void Damage(); virtual void Default( bool bForce=false ); virtual void Default3(); // virtual void MDefault(); virtual void Walk( bool bLoop = false, int nAniType = ANI_WALK ); virtual void Run( bool bAutoRun = false, int nAniType = ANI_RUN ); virtual void Rush( int nAniType = ANI_RUN, float fPlayRate = 4.8f * 3.0f /*기본 3배속*/ ); bool IsBuyBooth() { return !!(GetStatus() & TS_ENTER::PlayerInfo::FLAG_BUY_BOOTH); } bool IsSellBooth() { return !!(GetStatus() & TS_ENTER::PlayerInfo::FLAG_SELL_BOOTH); } bool IsBooth() { return IsBuyBooth() || IsSellBooth(); } void SetBoothName( const char *szName ) { m_strBoothName = szName; onChangeBoothName(); } const std::string & GetBoothName() const { return m_strBoothName; } virtual void Cast01(); virtual void Cast02(bool bLoop=true); virtual void Fire( int nAniID ); virtual bool Process( DWORD time, unsigned long uProcessBitVector=0 ); /// 던지기 virtual void Throw() ; /// 줍기 virtual void PickUp(); virtual void PickUpEx(); /// 앉은 상태 및 앉기 일어서기 등 에니 처리 virtual void SitProcess( int nAniType, int nType = SEQTYPE_NORMAL ); /// 앉기 virtual void StandUp( DWORD time = 0 ); virtual ANI_LIST_EX SGamePlayer::GetDefaultAnimation(); virtual void NPlayAnimation( int nType, int nAniType = SEQTYPE_NORMAL, float fPlayRate = 4.8f ); /// 스킬 사용 가능 한가? virtual bool IsUseSkill_complete() { return m_bIsUseSkill_complete; } virtual bool MotionCancel(); bool IsStateRide(); SGameAvatarEx* GetRiderCreatureObject( bool bOnlyTransportCreature = false ); void AvatarClipTestByCreature( struct K3DVector *pFrustum ); void AvatarRotationByCreature(); void SetEnhanceCheatLevel( int nLevel ) { m_nEnhanceCheatLevel = nLevel; } int GetEnhanceCheatLevel() { return m_nEnhanceCheatLevel; } virtual void SetDefaultView(); void CheatWhirlWindSkill( std::vector< AR_HANDLE > & vTargetList ); void AddMeshPart( ANIPART nAniPart, MPART nMeshPart, const char* szMeshFileName ); void AddDecoMeshPart( ANIPART nAniPart, MDECOPART nDecoMeshPart, const char* szMeshFileName ); void AddAttachItemPart( ANIPART nAniPart, ATTACH nAttachPart, const char* szMeshFileName ); /// sonador #2.1.6 크리쳐 기린(spirit_qilin) 테스트 void SetRunNWalkAniSpeedDefault(); void SetRunNWalkAniSpeedMount(); void SetRunNWalkAniSpeed( struct _MONSTER_INFO_FILE* pMonsterInfo ); void SetRunNWalkAniSpeed( struct _SUMMON_INFO_FILE* pSummonInfo ); /// 2.1.16 변신 효과 중첩시 아바타 사라지는 오류 수정 void UnDisguise( unsigned int stateHandle = 0 ); virtual int GetPlayerMDefAniID() const; // sonador #2.1.6 virtual int GetPlayerMWalkAniID() const; // sonador #2.1.6 virtual int GetPlayerMRunAniID() const; // sonador #2.1.6 private: void ItemWear( WEAR_DATA& WearData, class KSeqAvatarEx * pAvatarEx ); protected: void CalcCreatureRunPlayRate( float fSpeed ); void CalcCreatureWalkPlayRate( float fSpeed ); void SetPlayerViewVector( const K3DVector& vTargetPos ); virtual void onChangeBoothName() {} /// sonador 1.8.13 아바타 IDLE 모션 동작 구현 void _processIdle(); void _resetIdleTime() { m_dwIdleTime = m_dwTime; } // DWORD m_dwIdleTime; // //플레이어 사용 //Item ItemBase::ItemCode m_NudeItemCode[ItemBase::MAX_ITEM_WEAR]; ///< 처음 아무것도 안입은 장비, 종족의 기본값 ItemBase::ItemCode m_ItemCode[ItemBase::MAX_ITEM_WEAR]; ///< 장착 시작하면 입는 장비 int m_ItemLevel[ItemBase::MAX_ITEM_WEAR]; ///< 장착 시작하면 입는 장비 static SGamePlayer* m_pLocalPlayer; bool m_bIsUseSkill_complete; std::string m_strBoothName; ///< 노점 이름 SObjectState::ID m_idPrevState; AR_HANDLE m_hCreatureMounthandle; int m_nEnhanceCheatLevel; bool m_bWaitingAttackCancel; int m_nPrevAniType; float m_fStandardWalkPlayRate; float m_fStandardRunPlayRate; float m_fRdbScale; float m_fWalkSpeed; float m_fPlayRate; };