/* ==================================================================== * ÆÄ ÀÏ : Player.h * ¸ñ Àû : Ç÷¹ÀÌ¾î °ü¸® * ÀÛ ¼º ÀÚ : Á¤¼º´ë * ÀÛ ¼º ÀÏ : 2006.08.29 * ÁÖÀÇ»çÇ× : * =================================================================== */ #pragma once #include "BaseObject.h" #include "Player_Common.h" #include "StatusCalc_Client.h" enum eVEHICLE_ANIMATIONTYPE { V_ANITYPE_IDLE1 = 1, /// ´ë±â V_ANITYPE_IDLE2 = 2, /// ´ë±âº¸Á¶ V_ANITYPE_RUN = 3, /// ´Þ¸®±â V_ANITYPE_JUMP = 4, /// Á¡ÇÁ }; enum eREADY_TRANSSTATE { eReady_None = 0, eReady_TransformMonster, eReady_RestoreMonster, }; struct sReadyTransform { unsigned char readState; unsigned long chgMonIdx; sReadyTransform() { readState = eReady_None; chgMonIdx = 0; } }; class cPathFinder; class cPlayerSceneNodeParam; class cActorManagerForPartition; enum eGATHERING_TYPE; class cPlayer : public cBaseObject { public: cPlayer( unsigned char type = eOBJECTTYPE_PLAYER ); virtual ~cPlayer(); inline virtual unsigned long GetObjectID() { return mPlayerInfo.CharacterIdx; } /// »ý¼ººÎ virtual bool Create( sPlayerInfo* pBaseInfo, sPlayerWearInfo* pWearInfo, sPlayerWeaponInfo* pWeaponInfo, sPlayerExrInfo* pExrInfo, NiPoint3 sPos, NiMatrix3 sRot = NiMatrix3::IDENTITY, float fScale = 1.0f ); virtual void ReCreate( char race, char gender ); /// °´Ã¼ÀÇ ±×·¡ÇÈ µ¥ÀÌÅÍ¿¡ ´ëÇÑ Á¦°Å virtual void RemoveObjectSceneNode(); /// °»½ÅºÎ virtual void Update( unsigned long deltaTime, unsigned long accumTime ); /// »óŰ»½ÅºÎ virtual void IdleUpdate( unsigned long deltaTime ); virtual void DieUpdate() {} virtual void MoveUpdate( unsigned long deltaTime ); virtual void PushPullUpdate( unsigned long deltaTime ); virtual bool RushUpdate( unsigned long deltaTime ); virtual void RushSkillStop() {} /// °´Ã¼ À̵¿ virtual bool Move( float x, float y ); virtual void SetActionMove( float tPosX, float tPosY, float range ); virtual void ClearActionMoveRange() { mActionMoveRange = 0; } virtual bool GetDummyPos( unsigned int dummyId, NiPoint3& pos ); virtual inline LPTSTR GetName() { return mPlayerInfo.strName; } virtual inline void SetName( LPTSTR name ); virtual inline char GetGender() { return mPlayerInfo.Gender; } virtual inline char GetRace() { return mPlayerInfo.Race; } virtual inline void SetGender( char gender ) { mPlayerInfo.Gender = gender; } virtual inline void SetRace( char race ) { mPlayerInfo.Race = race; } inline NiPoint3 GetDesireDir() { return mDesiredDir; } inline sPlayerInfo* GetPlayerInfo() { return &mPlayerInfo; } inline sPlayerExrInfo* GetPlayerExrInfo() { return &mPlayerExrInfo; } virtual void EquipWeaponInfo( eWEAPON_STATE state, sPlayerWeaponInfo* pInfo ); virtual void EquipWearInfo( eWEAR_TYPE type, unsigned long itemIdx ); virtual void EquipCostumeInfo( unsigned char type, unsigned long itemIdx ); virtual void EquipCostumeAcceInfo( unsigned char type, unsigned long itemIdx ); inline eWEAPON_STATE GetWeaponState() { return mPlayerWeaponState; } inline unsigned long GetLeftWeaponIdx() { return mPlayerWeaponInfo.WeaponIdx[eHAND_LEFT]; } inline unsigned long GetRightWeaponIdx() { return mPlayerWeaponInfo.WeaponIdx[eHAND_RIGHT]; } float GetAttackSpeed() { return mPlayerExrInfo.mAttackSpeed; } virtual void SetAttackSpeed( float speed ) { mPlayerExrInfo.mAttackSpeed = speed; } /// 061123 wonju void SetPathFinder( cPathFinder* pathFinder ); bool SetDesiredDir(NiPoint3 CurrentPos, NiPoint3 TargetPos, unsigned long delay = 0 ); inline unsigned int GetRaceGender(){ return (mPlayerInfo.Race*eGENDER_MAX + mPlayerInfo.Gender); } ////////////////////////////////////////////////////////////////////////// /// PlayerÀÇ »óÅ Á¤º¸¸¦ º¯È­ virtual unsigned int GetState() { return mPlayerExrInfo.mState; } virtual void SetState( unsigned char state , bool bShowAni = true ); /// ºÎȰ½Ã Çൿ virtual void Rebirth(); /// ¾É±â/¼­±â virtual void SitDown(); virtual void StandUp(); virtual bool IsPossibleSitDown() { return (mSitDownFlag==false); } virtual void SetIdleFlag( unsigned char flag ); eSTOPFLAG GetStopFlag() { return (eSTOPFLAG)mPlayerExrInfo.mStateStop; } virtual void SetStopFlag( unsigned char flag ); void ShowWeapon( bool show ); void ShowNameGauge( bool show ); virtual void PartyIn_Init(); virtual void PartyOut_Init(); ////////////////////////////////////////////////////////////////////////// /// 070115 PKH Á÷¾÷ ePLAYER_JOB GetJob() { return mPlayerInfo.Job; } virtual void SetJob( ePLAYER_JOB job ) { mPlayerInfo.Job = job; } /// 070115 PKH Ç÷¹ÀÌ¾î ·¹º§ unsigned char GetLevel() { return mPlayerInfo.Level; } virtual void SetLevel( unsigned char level ) { mPlayerInfo.Level = level; } /// HP, MP ¼ÂÆÃ unsigned long GetHP() { return mPlayerExrInfo.RestHP; } unsigned long GetMP() { return mPlayerExrInfo.RestMP; } void SetMaxHP( unsigned long maxHP ) { mPlayerExrInfo.MaxHP = maxHP; } void SetMaxMP( unsigned long maxMP ) { mPlayerExrInfo.MaxMP = maxMP; } virtual unsigned long GetMaxHP() { return mPlayerExrInfo.MaxHP; } virtual unsigned long GetMaxMP() { return mPlayerExrInfo.MaxMP; } virtual void HPChange( unsigned long objectHP, unsigned long objectMaxHP ); virtual void HPChangeDie( unsigned long objectMaxHP, cBaseObject* pAttacker, unsigned char attackType ); virtual void MPChange( unsigned long objectMP, unsigned long objectMaxMP ); virtual void AddBuff( unsigned long uniqueIdx, cInfluenceObject* p ); virtual void DelBuff( unsigned long uniqueIdx ); virtual void AddDeBuff( unsigned long uniqueIdx, cInfluenceObject* p ); virtual void DelDeBuff( unsigned long uniqueIdx ); virtual long GetMoveSpeed() { return mPlayerExrInfo.mMoveSpeed; } virtual void SetMoveSpeed( long moveSpeed ); virtual unsigned long GetTitleIndex() { return mPlayerExrInfo.mTitleIndex; } void SetRemoveDropItem( unsigned int idx ); bool ChangeBaseWear( unsigned int part ); void ResetBaseFace(); void SetEmotionFace( unsigned long faceIdx ); void SetStaticFace( unsigned long faceIdx ); /// ¾ÆÀÌÅÛ ÇØÃ¼ bool UnEquipWearItem( unsigned long itemIdx ); void UnEquipWeaponItem( eHAND_TYPE handType ); void ActiveChatBubble( LPTSTR msg, unsigned long color ); void ActiveTarotBubble( LPTSTR title, unsigned long color ); void ActiveUserSellBubble( LPTSTR title, unsigned long color ); void DeActiveTarotBubble(); void DeActiveUserSellBubble(); virtual cEffectSceneNode* SetLinkdEffect( unsigned int num, const char* nif, NiTransform* trans, bool bLoop=false, bool bFollow=true ); virtual cEffectSceneNode* SetLinkdDamage( unsigned int num, const char* nif, NiTransform* trans, bool IsMiss, bool zFalse ); virtual void PlayerAttack( unsigned long uIdx, unsigned long skillIdx, cBaseObject* pTarget ); virtual void PlayerUseSkill( unsigned long uIdx, unsigned long skillIdx, unsigned char skillStep, cBaseObject* pTarget ); virtual void PlayerUseSkill( unsigned long uIdx, unsigned long skillIdx, unsigned char skillStep, NiPoint3 fieldPos ); virtual void PlayerMapChangeSkill( unsigned long uIdx, unsigned long skillIdx ); virtual void PlayerVehicleSkill( unsigned long uIdx, unsigned long skillIdx ); virtual void PlayerBlinkSkill( unsigned long uIdx, unsigned long skillIdx, unsigned char skillStep, NiPoint3 blinkPos ); virtual void ApplyDamageDrama( int damage, unsigned int damageType, cBaseObject* pAttacker = 0 ); /// SetState() skill->processActive() ¿Ü »ç¿ë ÇÏÁö ¸¶½Ã¿À!! virtual void ChangeAnimation( ePLAYER_ANIMATIONTYPE type ); virtual void ChangeAnimation_TransMon( unsigned int type ); /// virtual void UpdateSkillAnimation( unsigned int aniIdx, bool checkWeapon = false ); /// ¿ÀºêÁ§Æ®ÀÇ °Å¸® üũ ¼öÁ¤ °Å¸® - Àû¿ë ¹üÀ§ float GetFixedObjectSize(); virtual void SetFixedObjectSizeScale( unsigned short size, bool init ); /// À̵¿Á¤Áö virtual void SetCantMove( bool /*cantMove*/ ) {} virtual void SetSleep( bool /*sleep*/ ) {} virtual void SetStun( bool /*stun*/ ) {} void SetDuelEffect(); void ClearDuelEffect(); void SetItemMixEffect(); void ClearItemMixEffect(); void SetItemEnhanceEffect(); void ClearItemEnhanceEffect(); void SetItemGatheringEffect( eGATHERING_TYPE gatheringType ); void ClearItemGatheringEffect(); void SetItemDisjointSound(); void ClearItemDisjointSound(); /// ¸ó½ºÅÍ ¿ÜÇü º¯½Å virtual bool TransformMonster( unsigned long monsterClassIdx ); virtual void RestoreMonster(); bool IsTransformMonster() { return (mPlayerExrInfo.mChgMonsterIdx != 0); } unsigned long GetTransMonsterClassIdx() { return mPlayerExrInfo.mChgMonsterIdx; } void ReadyTransform( unsigned char readyState, unsigned long chgMonIdx ); /// Å»°Í ó¸® virtual void RideVehicle( unsigned long vehicleIdx ); virtual void AlightVehicle(); bool IsRideVehicle(); virtual bool IsDie() { return (GetState()==eOBJECT_STATE_DIE); } virtual void FadeOutObject() {} /// ¼¼·Â virtual void SetForceType( unsigned char forceType ) { mPlayerExrInfo.mForceType = forceType; } unsigned char GetForceType() { return mPlayerExrInfo.mForceType; } inline unsigned char GetPVPTeam() { return mPlayerExrInfo.mPvPDMTeamType; } virtual inline void SetTitle( unsigned long titleIdx ); virtual inline void SetPartyIndex( unsigned long partyIndex ); unsigned long GetPartyIndex() { return mPlayerExrInfo.mPartyIndex; } virtual inline void SetPartyUnionIndex( unsigned long unionIndex ); unsigned long GetPartyUnionIndex() { return mPlayerExrInfo.mPartyUnionIndex; } virtual inline void SetGuild( unsigned long guildIndex, unsigned char guildposition, LPCTSTR guildName, tm markRegistDate, bool useMark ); virtual inline void SetGuildPosition( unsigned char guildPosition ); virtual inline void ChangeGuildMarkRegistDate( tm markRegistDate, bool useMark ); virtual inline void ClearGuild(); unsigned long GetGuildIndex() { return mPlayerExrInfo.mGuildIndex; } unsigned char GetGuildPosition() { return mPlayerExrInfo.mGuildPosition; } LPCTSTR GetGuildName() { return mPlayerExrInfo.mGuildName; } void SetTodayWord( LPCTSTR word, unsigned long color ); /// virtual bool GatheringStart( unsigned long gaderIdx, unsigned long gatherClassIdx, NiPoint3 targetPos ); virtual void GatheringEnd(); void UpdateHelmetState( bool show ); /// jump virtual bool Jump(); void SetJumpFlag( bool flag ); bool IsJumping() { return mJumping; } bool IsJumpProcess() { return mJumpProcess; } void UpdateNameCardTextValue(); virtual void SetSkillPushPull( float posX, float posY ); virtual void SetSkillRush( float posX, float posY, sObject target ); protected: /// ±âº»À¸·Î Á¦°øµÇ´Â ¸Ó¸®¿Í ¾ó±¼¿¡ ´ëÇÑ ±³Ã¼ bool SetBaseFace(); virtual bool ChangeBaseHair( unsigned int hairIdx, unsigned int hairColorIdx ); virtual bool ChangeFaceTexture( unsigned int faceIdx, bool base = false ); /// °ø°Ý Á¾·á virtual void EndAttack() {} /// ¾Ö´Ï¸ÞÀÌ¼Ç °ü°è ó¸® virtual void Interpret( unsigned long time ); virtual void InterpretEvent( unsigned long id, float checkTime, cActorManagerForPartition* pActor ); virtual void InterpretVehicle( unsigned long time ); virtual void InterpretEvent_Vehicle( unsigned long id, float checkTime, cActorManagerForPartition* pActor ); /// ¾ÆÀÌÅÛ ÀåÂø bool EquipWearItem( unsigned long itemIndex ); bool EquipAccessoryItem( unsigned char costumPos, unsigned long itemIndex ); virtual bool EquipWeaponItem( sPlayerWeaponInfo* info ); virtual void ChangeWeaponState( eWEAPON_STATE state ); virtual cDynamicSceneNode* CreateSceneNode( cPlayerSceneNodeParam* param ); void ResetState(); void DesiredDirProcess( unsigned long delta ); void FaceProcess( unsigned long delta ); /// monster transform process virtual void Update_TransMon( unsigned long deltaTime, unsigned long accumTime ); virtual void SetState_TransMon( unsigned char state , bool bShowAni ); virtual void Interpret_TransMon( unsigned long time ); virtual void InterpretEvent_TransMon( unsigned long id, float checkTime, cActorManagerForPartition* pActor ); virtual void ApplyDamageDrama_TransMon( int damage, unsigned int damageType, cBaseObject* pAttacker ); protected: /// À̵¿½Ã ¸ñÀûÁö ÁÂÇ¥ float mGotoX; float mGotoY; /// À̵¿½Ã ¹æÇâ ¹× NiPoint3 mDesiredDir; /// À̵¿½Ã °Å¸® üũ.. float mActionMoveRange; NiPoint3 mTargetPos; /// ¸ñÀûÁö ÁÂÇ¥ /// °´Ã¼ÀÇ Á¤º¸ ±¸Á¶Ã¼ sPlayerInfo mPlayerInfo; sPlayerExrInfo mPlayerExrInfo; sPlayerWearInfo mPlayerWearInfo; cStringT mTarotTitle; cStringT mSellTitle; /// ¸µÅ©µÇ´Â ÄÚ½ºÆ¬ À妽º (Object Data Manager Á¦°Å¿ë) unsigned long mCostumeObjectIndex[eCOSTUME_MAX]; /// ¹«±â Á¤º¸ sPlayerWeaponInfo mPlayerWeaponInfo; unsigned long mGatheringToolObj; /// Âø¿ë ¹«±â¿¡ ´ëÇÑ »óÅ Á¤º¸ eWEAPON_STATE mPlayerWeaponState; /// ¹«±â ±×·¡ÇÈ À妽º (ObjectDataManager Á¦°Å¿ë) unsigned long mWeaponObjectIndex[eHAND_ALL]; unsigned long mWeaponObjectEffect[eHAND_ALL]; /// ±æÃ£±â cPathFinder* mPathFinder; //cPathNodeSet mPathNodeSet; ePLAYER_ANIMATIONTYPE mAnimationType; unsigned int mDamageAfterAnim; /// ¾É(¼­)´ÂÁß = true bool mSitDownFlag; /// ¾Ö´Ï µ¿ÀÛ Á¾·á½Ã¿¡ µå¶ø¿ë À̹ÌÁö¸¦ Á¦°Å Çϱâ À§ÇÑ º¯¼ö unsigned int mRemoveDropItemIdx; bool mShowWeapon; /// ¿ÀºêÁ§Æ®ÀÇ °Å¸® üũ ¼öÁ¤ °Å¸® - Àû¿ë ¹üÀ§ float mFixedObjectSize; /// unsigned long mDelay; float mAngle; float mAccumAngle; NiPoint3 mAxis; /// 3ÃÊÀ¯Áö¿ë Ç¥Á¤ unsigned long mEmotionCommandIdx; unsigned long mEmotionRemainTime; /// ´«±ô¹ÚÀÓ °ü·Ã unsigned long mWinkFaceIdx; unsigned long mWinkTime; unsigned long mWinkRemainTime; unsigned long mDuelEffectIdx; cEffectSceneNode* mDuelEffect; unsigned long mSitDownEffectIdx; cEffectSceneNode* mSitDownEffect; unsigned long mItemMixEffectIdx; cEffectSceneNode* mItemMixEffect; unsigned long mItemMixSoundIdx; cSoundSceneNode* mItemMixSoundNode; unsigned long mItemEnhanceEffectIdx; cEffectSceneNode* mItemEnhanceEffect; unsigned long mItemEnhanceSoundIdx; cSoundSceneNode* mItemEnhanceSoundNode; unsigned long mItemGatheringEffectIdx; cEffectSceneNode* mItemGatheringEffect; unsigned long mItemDisjointSoundIdx; cSoundSceneNode* mItemDisjointSoundNode; sReadyTransform mReadyTransformInfo; bool mJumping; bool mJumpProcess; /// check jump time unsigned long mJumpRemainTime; NiPoint2 mPushPullPos; /// ¼¼·Â Á¤º¸ //unsigned char mForceType; /// eFORCE_TYPE }; inline void cPlayer::SetName( LPTSTR name ) { Sstrncpy( mPlayerInfo.strName, MAX_NAME_BUFFER_SIZE, name, MAX_NAME_SIZE ); // ::_tcsncpy( mPlayerInfo.strName, name, MAX_NAME_SIZE ); // mPlayerInfo.strName[MAX_NAME_SIZE] = 0; }