Files
Leviathan/Client/Game/game/Player/SGamePlayer.h
T
2026-06-01 12:46:52 +02:00

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