159 lines
5.4 KiB
C++
159 lines
5.4 KiB
C++
|
|
#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;
|
|
};
|