/* ==================================================================== * ÆÄ ÀÏ : * ¸ñ Àû : * ÀÛ ¼º ÀÚ : Á¤¼º´ë * ÀÛ ¼º ÀÏ : 2006.08.29 * * Ãß°¡³»¿ë : * Ãß°¡³¯Â¥ ÀÛ¾÷ÀÚ Ãß°¡³»¿ë * 2006.08.29 Á¤¼º´ë »ý¼º * * ÁÖÀÇ»çÇ× : * =================================================================== */ #pragma once #include "Player.h" #include "Skill_Common.h" #include "Sphere.h" //#include "PlayerSceneNode.h" class cSkillExecuter; class cMapPortalSceneNode; // ¹æ¾î±¸ ¼¼Æ® Á¶ÇÕ //#define ARMOR_SETS_NONE 0x0000 //#define ARMOR_SETS_ROBES 0x001F //#define ARMOR_SETS_LIGHT_ARMOR 0x03E0 //#define ARMOR_SETS_HEAVY_ARMOR 0x7C00 // ¹æ¾î±¸ ¼¼Æ® Á¶ÇÕ #define ARMOR_SETS_NONE 0x0000 #define ARMOR_SETS_ROBES 0x0001 #define ARMOR_SETS_LIGHT 0x0002 #define ARMOR_SETS_HEAVY 0x0004 //#define ROBES_HAT 0x0001 //#define ROBES_UPPER 0x0002 //#define ROBES_LOWER 0x0004 //#define ROBES_ONEPIECE 0x0006 //#define ROBES_HANDS 0x0008 //#define ROBES_FEET 0x0010 // //#define LIGHT_ARMOR_HAT 0x0020 //#define LIGHT_ARMOR_UPPER 0x0040 //#define LIGHT_ARMOR_LOWER 0x0080 //#define LIGHT_ARMOR_ONEPIECE 0x00C0 //#define LIGHT_ARMOR_HANDS 0x0100 //#define LIGHT_ARMOR_FEET 0x0200 // //#define HEAVY_ARMOR_HAT 0x0400 //#define HEAVY_ARMOR_UPPER 0x0800 //#define HEAVY_ARMOR_LOWER 0x1000 //#define HEAVY_ARMOR_ONEPIECE 0x1800 //#define HEAVY_ARMOR_HANDS 0x2000 //#define HEAVY_ARMOR_FEET 0x4000 enum eAfterAction { eAfterAction_None = 0, /// À̵¿ÈÄ eAfterAction_Attack, eAfterAction_ItemPick, eAfterAction_UseTargetSkill, eAfterAction_UseFieldSkill, eAfterAction_NpcTalk, eAfterAction_UseTarotStore, eAfterAction_UseStall, /// ³ëÁ¡»óÀÌ¿ë eAfterAction_MapChange, eAfterAction_GatheringPick, /// °ø°ÝÈÄ eAfterAction_Move, }; enum eStateInfo_Type { eSTATE_NORMAL, /// º¸Åë »óÅ eSTATE_PLUS, /// Áõ°¡È¿°ú eSTATE_MINUS, /// °¨¼ÒÈ¿°ú eSTATE_OVERLAPPLUS, /// Áõ°¡ Áßøȿ°ú eSTATE_OVERLAPMINUS, /// °¨¼Ò Áßøȿ°ú }; struct sAfterAction { eAfterAction mActionType; NiPoint3 mDestPos; float mRange; sObject mTarget; /// type¿¡ µû¶ó ÀúÀå Á¤º¸¸¦ ´Þ¸®ÇÑ´Ù.. unsigned long mExData1; unsigned long mExData2; }; enum eWaitMove_Type { eWAITMOVE_NONE = 0, eWAITMOVE_MOUSE, eWAITMOVE_KEY, }; enum eNpcFunc; class cNpc; class cHero : public cPlayer { friend class cSkillExecuter; public: cHero( unsigned char type = eOBJECTTYPE_HERO ); virtual ~cHero(); /// °´Ã¼ »ý¼º virtual bool Create( sPlayerInfo* pBaseInfo, sPlayerWearInfo* pWearInfo, sPlayerWeaponInfo* pWeaponInfo, sPlayerExrInfo* pExrInfo, NiPoint3 sPos, NiMatrix3 sRot = NiMatrix3::IDENTITY, float fScale = 1.0f ); /// TODO : °´Ã¼ Àç»ý¼º virtual void ReCreate( char race, char gender ); /// ÁøÀÔ ½ÃÁ¡¿¡ µî·Ï bool GameIn( unsigned long channelNum ); /// void SetHeroInfoNet( MSGROOT* pInfo ); virtual void SetState( unsigned char state , bool bShowAni = true ); virtual void SitDown(); virtual void StandUp(); void ToggleIdleFlag(); void ToggleSitDown(); /// ½Å±Ô °æ·Î Ž»ö.. bool ResetMovePath( NiPoint2 start, NiPoint2 goal ); bool ResetActionMovePath( float destX, float destY, float range ); /// 󸮺Πvoid Update( unsigned long deltaTime, unsigned long accumTime ); void AttackUpdate( unsigned long deltaTime, unsigned long accumTime ); virtual void MoveUpdate( unsigned long deltaTime ); virtual void IdleUpdate( unsigned long deltaTime ); void FollowMoveUpdate( unsigned long deltaTime ); void FollowIdleUpdate(); /// ¸®½º³Ê¸¦ ºÎÂø void AttachListener(); NiPoint3 GetDirection() const; const NiMatrix3& GetRotate() const; /// °æ°è ±¸ const cSphere& GetBoundSphere() const; const NiPoint3& GetCenter() const; virtual void SetTargetObject( unsigned char type, unsigned long idx ); inline sHeroInfo* GetHeroInfo() { return &mHeroInfo; } inline sPlayerExrInfo* GetHeroExrInfo() { return &mPlayerExrInfo; } /// ½ºÅÝ const sStatus1* GetStatus1() { return &mStatus1; } void SetStatus1( ePLAYER_STATUS statusBase, float value ); //void SetStatus1Passive( ePLAYER_STATUS statusBase, float value ); float GetStatusBaseTotal( ePLAYER_STATUS statusBase ); float GetStatusPlusTotal( ePLAYER_STATUS statusBase ); const sStatus1* GetStatus1Plus() { return &mStatus1Plus; } void SetStatus1Plus( ePLAYER_STATUS statusBasePlus, float value ); const sStatus1* GetStatus1Per() { return &mStatus1Per; } void SetStatus1Per( ePLAYER_STATUS statusBasePer, float value ); const sStatus2* GetStatus2() { return &mStatus2; } void SetStatus2( ePLAYER_STATUS_EXT extStatus, float value ); const sStatusEtc* GetStatusEtc() { return &mStatusEtc; } void SetStatusEtc( ePLAYER_STATUS_EXT_ADD statusAdd, float value ); void SetOriMpMax( unsigned long maxMP ) { mOriMaxMP = maxMP; } unsigned long GetOriMpMax() { return mOriMaxMP; } /// MP ¼Ò¸ð·® Áõ°¡/°¨¼Ò È¿°ú unsigned long CalcUseMPExt( unsigned long originUseMP ); /// ij½ºÆÃ ½Ã°£ Áõ°¡/°¨¼Ò È¿°ú unsigned long CalcCastingExt( unsigned long originCastingTime ); float CalcStatusSkillRange( float skillRange, eRANGETYPE mRangeType, bool IsNormalAttack ); void SetSkillLevel( unsigned char skillLevel ) { mHeroInfo.SkillLevel = skillLevel; } unsigned char GetSkillLevel() { return mHeroInfo.SkillLevel; } void SetSkillPointRemain( unsigned short sp, unsigned short total ) { mHeroInfo.SkillPointRemain = sp; mHeroInfo.SkillPointTotal = total; } unsigned long GetSkillPointRemain(){ return mHeroInfo.SkillPointRemain;} unsigned long GetSkillPointTotal() { return mHeroInfo.SkillPointTotal; } unsigned long GetUsedSkillPoint() { return mHeroInfo.SkillPointTotal - mHeroInfo.SkillPointRemain; } void SetJobUsedSkillPoint( unsigned int count, unsigned short* values ); unsigned short GetJobUsedSkillPoint( unsigned int jobLevel ); void InitJobUsedSkillPoint(); /// 070508 PKH ½ºÅÝ Áõ°¨(»ö»ó) ŸÀÔ void InitStatusInfoType(); void SetBaseStatusInfoType( ePLAYER_STATUS pos, eStateInfo_Type type ) { mStatusBaseInfoType[pos] = static_cast(type); } eStateInfo_Type GetBaseStatusInfoType( ePLAYER_STATUS pos ) { return static_cast(mStatusBaseInfoType[pos]); } void SetExtStatusInfoType( ePLAYER_STATUS_EXT pos, eStateInfo_Type type ) { mStatusExtInfoType[pos] = static_cast(type); } eStateInfo_Type GetExtStatusInfoType( ePLAYER_STATUS_EXT pos ) { return static_cast(mStatusExtInfoType[pos]); } void SetExp( unsigned long exp ) { mHeroInfo.Exp = exp; } void SetSxp( unsigned long exp ) { mHeroInfo.SkillExp = exp; } void SetLoseExp( unsigned long exp ) { mHeroInfo.mLoseExp = exp; } inline unsigned short GetMapNum() { return mMapNum; } inline void SetMapNum( unsigned short mapNum ) { mMapNum = mapNum; } inline unsigned char GetMapMode() { return mMapMode; } inline void SetMapMode( unsigned char mapMode ) { mMapMode = mapMode; } inline unsigned long GetChannelNum() { return mChannelNum; } inline unsigned long GetAreaNameIdx() { return mAreaNameIdx; } void SetAreaNameIdx( unsigned long idx ); /// hero´Â max°ªÀ» ¹Þ¾Æ ó¸®ÇÒ ÇÊ¿ä ¾ø´Ù. 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 ); /// hero¿¡¼­ ¾Æ¹« ó¸® ÇÏÁö ¾Ê´Â´Ù. virtual void PlayerAttack( unsigned long, unsigned long, cBaseObject*, float ) {} 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*/ ) {} inline void SetWaitMoveFlag( unsigned int flag ) { mWaitMoveFlag = flag; } virtual bool EquipWeaponItem( sPlayerWeaponInfo* info ); virtual void EquipWeaponInfo( eWEAPON_STATE state, sPlayerWeaponInfo* pInfo ); virtual void ChangeWeaponState( eWEAPON_STATE state ); /// ÈÄó¸® void AfterAttack( cBaseObject* pTarget ); void AfterItemPick( unsigned long idx, float destX, float destY ); void AfterUseSkill( cBaseObject* pTarget ); void AfterUseSkill( NiPoint3 fieldPos ); void AfterNpcTalk( unsigned long npcIdx ); void AfterNpcTalk( cNpc* pNpc ); void AfterUseTarotStore( cPlayer* pPlayer ); void AfterMapChange( cMapPortalSceneNode* portalNode ); void AfterUseStall( cPlayer* pPlayer ); void AfterGatheringPick( unsigned long idx, unsigned long classIdx, float destX, float destY ); inline sAfterAction* GetCurrentAfterAction() { return &mAfterAction; } bool IsProcessAfterAction(); void SetLevel( unsigned char level ); inline void CalcStatus() { mIsCalcStatus = true; } void NowCalcStatus(); inline void UpdateHeroInfo() { mIsUdateHeroInfo = true; } /// ÁÖÀÇ : targetÁöÁ¤ - °ø°ÝÈÄ ½ºÅ³ ¹ßµ¿ /// targetÁöÁ¤ ¾ÈÇÔ - ½ºÅ³ ÀåÂø void WaitWeaponSwitch() { mWaitWeaponSwitch = true; } bool IsWeaponChanging() { return mSwitchWeaponFlag; } void SetWeaponChangeFlag( bool val ); inline bool CheckSwichDelay() { return (mSwitchWeaponTime != 0); } virtual bool IsPossibleSitDown(); 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 void BlinkBuffIcon( unsigned long uniqueIdx, unsigned long influenceIdx ); virtual void BlinkDeBuffIcon( unsigned long uniqueIdx, unsigned long influenceIdx ); inline unsigned long GetMoney() { return mMoney; } void SetMoney( unsigned long money ) { mMoney = money; } inline unsigned long GetDeposit() { return mDeposit; } void SetDeposit( unsigned long money ) { mDeposit = money; } inline unsigned long GetTarotPoint() { return mHeroInfo.TarotPoint; } void SetTarotPoint( unsigned long point ) { mHeroInfo.TarotPoint = point; } unsigned long GetPVPPoint( unsigned char forceType ); void SetPVPPoint( unsigned long point, unsigned char forceType ); unsigned long GetMaxWeight() { return FloatToInt( mStatus2.mMaxWeight ); } /// Âø¿ë ¾ÆÀÌÅÛ ¼¼Æ® °»½Å void ResetArmorSets(); unsigned short GetArmorSets() { return mArmorSets; } virtual void ApplyDamageDrama( int damage, unsigned int damageType, cBaseObject* pAttacker = 0 ); unsigned long GetNpcIdx() { return mNpcIdx; } void OpenNpcTalk( unsigned long npcIndex, bool setUI = true ); void CloseNpcTalk( bool sendMsg = true ); bool IsOpenNpcTalk(); void SetNpcFunc( eNpcFunc npcType ) { mNpcFuncType = npcType; } inline eNpcFunc GetNpcFunc() { return mNpcFuncType; } void CloseBySummonItem( char nCategory, char nProtocal ); virtual void SetFixedObjectSizeScale( unsigned short size, bool init ); void ActiveQuestText( LPCTSTR msg, unsigned long color ); void ActivePosition( float x, float y ); bool ReActivePosition(); void DeActivePosition(); /// ã¾Æ°¡±â ±â´É bool IsActiveFindPositon() { return mIsFindPosition; } void StopFindPos(); /// °áÅõ ½Åû/Æ÷±â void DuelRequest( unsigned long playerIdx = 0 ); void DuelGiveUp(); /// °áÅõ ¼ö¶ô/°ÅºÎ â Ãâ·Â void ViewMsgDuelReq( unsigned long duelReqPlayerIdx ); /// ¼ö¶ô°ÅÀý ¸Þ¼¼Áö ó¸® void DuelNoStartMsg( int errorCode ); /// °áÅõºÒ°¡ ¸Þ¼¼Áö ó¸® void SetCantMove( bool cantMove ) { mCantMove = cantMove; } void SetCantSkill( bool cantSkill, unsigned char attributeType ); bool IsCantSkill( unsigned long skillIdx );// { return mCantSkill == true || mIsSleep == true || mIsStun == true; } bool IsCantMove() { return mCantMove == true || mIsSleep == true || mIsStun == true; } bool IsAvoidMonLook(){ return mIsAvoidMonLook == true; } void SetSleep( bool sleep ); void SetStun( bool stun ); void SetAvoidMonLook( bool avoidMonLook ); void SetStaticFaceReq( unsigned long faceIdx ); void CheckTabTargetObject(); //void CheckTabPartyObject(); void ClearTabTargetList(); /// ¾ËÆÄ void SetAlphaBlended( float alpha ); virtual bool TransformMonster( unsigned long monsterClassIdx ); virtual void RestoreMonster(); void SetForceType( unsigned char forceType ); void SetFirePoint( unsigned long firePoint ); void SetFireFriendly( unsigned long fireFriendly ); void SetWaterPoint( unsigned long waterPoint ); void SetWaterFriendly( unsigned long waterFriendly ); void SetWindPoint( unsigned long windPoint ); void SetWindFriendly( unsigned long windFriendly ); void SetEarthPoint( unsigned long earthPoint ); void SetEarthFriendly( unsigned long earthFriendly ); unsigned long GetFirePoint() { return mHeroInfo.mFirePoint; } unsigned long GetWaterPoint() { return mHeroInfo.mWaterPoint; } unsigned long GetWindPoint() { return mHeroInfo.mWindPoint; } unsigned long GetEarthPoint() { return mHeroInfo.mEarthPoint; } void SetFieldEffRadius( float r ); void UpdateFieldTargetEffect( NiPoint3 center ); /// ÀüÁ÷ void SetJob( ePLAYER_JOB job ); /// ÆÄƼ ¼¼ÆÃ void SetPartyIndex( unsigned long partyIndex ); /// ÆÄƼ ·ë À妽º void SetPartyRoomIndex( unsigned short roomIndex ) { mPartyRoomIndex = roomIndex; } unsigned short GetPartyRoomIndex() { return mPartyRoomIndex; } /// ±æµå ¼¼ÆÃ void SetGuild( unsigned long guildIndex, unsigned char guildposition, LPCTSTR guildName, tm markRegistDate, bool useMark ); void UseMapChangeSkill( unsigned long skillIdx, unsigned short slotIdx ); void UseCashMapChangeSkill( unsigned long skillIdx, unsigned short slotIdx, unsigned short mapIndex, float mapX, float mapY ); void UseVehicleSkill( unsigned long skillIdx, unsigned short slotIdx ); bool GatheringStart( unsigned long gaderIdx, unsigned long gatherClassIdx, NiPoint3 targetPos ); void GatheringEnd(); bool GatheringCancel(); bool CheckGatheringEnable( unsigned long gaderClassIdx, unsigned char teamType ); /// bool ItemMixCancel(); bool ItemEnhanceCancel(); /// »óȲ¿¡ µû¸¥ npc ´ëÈ­»óÅ Ãë¼Ò bool NpcSpeechCancel(); /// Å»°Í ó¸® virtual void RideVehicle( unsigned long vehicleIdx ); virtual void AlightVehicle(); /// ¿À´ÃÀÇ ÇѸ¶µð ¹Ì¸®º¸±â void PreviewTodayWord( LPCTSTR word, unsigned long color ); /// ±æµå¸¶Å© ¹Ì¸®º¸±â void PreviewGuildMark( NiTexture* tex ); /// ±æµå¸¶Å© ±âÁ¸Á¤º¸·Î °»½Å void UpdateGuildMark(); /// Á¶ÇÕ Á÷¾÷ üũ bool CheckHeroMakeSkill( unsigned long makeSkillIdx ); /// Á¶ÇÕ½Àµæ ½ºÅ³ ÀúÀå void SetMixSkillFirst( unsigned char skill1, unsigned char step ); void SetMixSkillSecond( unsigned char skill2, unsigned char step ); void UpdateMixSkillExp( unsigned char skillIndex, unsigned long exp ); void PartyIn_Init() {} void PartyOut_Init() {} /// Keyboard Move inline bool IsKeyMoving() { return mIsKeyMove; } inline bool IsGoContinue() { return mGoCountinue; } void UpdateKeyState(); void CheckSendMoveMsg( unsigned long delta, bool force ); void GoCountinueMove(); void StopCountinueMove(); /// jump virtual bool Jump(); unsigned long GetFollowPlayerIndex(){ return mFollowPlayerIndex; } bool RequestFollowPlayer( unsigned long idx ); void ReleaseFollowPlayer(); bool IsFollowing(){ return mIsFollowing; } void ClearMoveFlag(); // ¸ÊüÀÎÁö·Î ÀÎÇÑ »óÅ Ãë¼Ò ¿äû void CancelByMapchange(); void SetMapPortalSkipTime( unsigned long time ); bool IsEnemy( cPlayer* player ); void UseBlinkSkill( unsigned long skillIdx, unsigned char skillStep, bool isForward ); void SetPos_ResetCam( NiPoint3 pos ); /// ½½·Ô Á¦ÇÑ À妽º °¡Á®¿À±â unsigned short GetBagEndSlot() { return mHeroInfo.BagEnd; } unsigned short GetWearCardEndSlot() { return mHeroInfo.WearEnd; } unsigned short GetWareHouseEndSlot() { return mHeroInfo.WareHouseEnd; } unsigned short GetMakeSkillEnd() { return mHeroInfo.MakeSkillEnd; } void SetTitle( unsigned long titleIdx ); // »ìÆìº¸±â ¿äû void RequestLookPlayer( unsigned long playerIndex ); virtual void SetSkillRush( float posX, float posY, sObject target, unsigned long nextSkill, unsigned char nextStep, bool blink ); virtual bool RushUpdate( unsigned long deltaTime ); virtual void RushSkillStop() { mRushSkill = 0; mRushStep = 0; mRushBlink = false; } protected: /// ¾Ö´Ï¸ÞÀÌ¼Ç °ü°è ó¸® virtual void Interpret( unsigned long time ); virtual void InterpretVehicle( unsigned long time ); virtual void InterpretEvent( unsigned long id, float checkTime, cActorManagerForPartition* pActor ); virtual void InterpretEvent_Vehicle( unsigned long id, float checkTime, cActorManagerForPartition* pActor ); /// À̵¿ virtual bool Move( float x, float y ); virtual bool ActionMove( float x, float y, float range ); void StopAfterAction(); /// ½ÇÁ¦ ±âº» °ø°Ý ½ÃÀÛ (³×Æ®¿öÅ© ÆÐŶ ¹ß¼Û) bool StartAttack( unsigned long attackIdx, cBaseObject* pTarget ); /// ½ÇÁ¦ ½ºÅ³ ½ÃÀÛ (³×Æ®¿öÅ© ÆÐŶ ¹ß¼Û) void UseTargetSkill( unsigned long skillIdx, unsigned char skillStep, cBaseObject* pTarget ); void UseFieldSkill( unsigned long skillIdx, unsigned char skillStep, NiPoint3 fieldPos ); void UseRushTargetSkill(); void AutoActionClear(); void ProcessAfterAction( NiPoint3& heroPos ); /// player¿¡¼­¸¸ »ç¿ëÇϰí Ȥ½Ã ¸ð¸£´Â hero¿¡¼­ÀÇ »ç¿ëÀ» ¸·´Â´Ù. virtual void SetActionMove( float, float, float ) {} virtual cDynamicSceneNode* CreateSceneNode( cPlayerSceneNodeParam* param ); //virtual void ClearAllBuff(); //virtual void ClearAllDeBuff(); /// 090302 PKH Á×¾úÀ»¶§ »èÁ¦µÇÁö ¾Ê´Â È¿°ú ó¸® Æ÷ÇÔ virtual void ClearAllBuff( bool delDieInf ); virtual void ClearAllDeBuff( bool delDieInf ); void ProcessDelayFlag( unsigned long deltaTime ); /// monster transform process virtual void Update_TransMon( unsigned long deltaTime, unsigned long accumTime ); virtual void Interpret_TransMon( unsigned long time ); void InterpretEvent_TransMon( unsigned long id, float checkTime, cActorManagerForPartition* pActor ); virtual void ApplyDamageDrama_TransMon( int damage, unsigned int damageType, cBaseObject* pAttacker ); bool StartAttack_Mon( unsigned long attackIdx, cBaseObject* pTarget ); void UseTargetSkill_TransMon( unsigned long skillIdx, cBaseObject* pTarget ); void UseFieldSkill_TransMon( unsigned long skillIdx, NiPoint3 fieldPos ); /// key move void KeyMoveUpdate( unsigned long deltaTime ); bool SetDesiredDir( NiPoint3 dir ); bool IsEnableKeyMove(); bool EnableGateMovePos( NiPoint2 startPos, float& x, float& y ); protected: float mDefaultCameraOffset; float mCameraOffset; sHeroInfo mHeroInfo; tArray mJobUsedSkillPoint; /// hero info window update Çʿ俩ºÎ. bool mIsUdateHeroInfo; /// status Àç°è»ê Çʿ俩ºÎ. bool mIsCalcStatus; /// ¼Ò¼Ó map¹øÈ£.. unsigned short mMapNum; unsigned char mMapMode; /// unsigned long mChannelNum; /// unsigned long mAreaNameIdx; /// ½ºÅÝ1 ±âº»°ª sStatus1 mStatus1; /// ½ºÅÝ1 +°ª sStatus1 mStatus1Plus; sStatus1 mStatus1Per; /// ½ºÅÝ2 ÃÖÁ¾°ª sStatus2 mStatus2; /// ½ºÅÝ¿Ü ½ºÅÝ sStatusEtc mStatusEtc; /// µ¥¹ÌÁö °è»ê¿ë ¼ø°£È¿°ú º¯¼ö sDamageCalc mDamageCalc; /// mp % ¼Ò¸ð½Ã °è»êµÉ ¼öÄ¡ unsigned long mOriMaxMP; /// 070508 PKH ½ºÅÝ Áõ°¨(»ö»ó) ŸÀÔ unsigned char mStatusBaseInfoType[ePLAYER_STATUS_LEVEL]; unsigned char mStatusExtInfoType[ePLAYER_STATUS_EXT_MAX]; /// Âø¿ëÇÑ ¾ÆÀÌÅÛ ¼¼Æ® unsigned short mArmorSets; /// µ· Á¤º¸ unsigned long mMoney; /// â°í º¸°ü¾× Á¤º¸ unsigned long mDeposit; /// À̵¿ ÈÄ Ã³¸® sAfterAction mAfterAction; /// ¹«±â ±³Ã¼ ´ë±â bool mWaitWeaponSwitch; /// ´ë±â ½ºÅ³ sSkillInfo mWaitSkill; /// °ø°ÝÁß À̵¿ ´ë±â - ÁÖÀÇ : Attack»óÅ¿¡¼­¸¸ À¯È¿ÇÏ´Ù unsigned int mWaitMoveFlag; NiPoint2 mWaitMovePos; /// Á÷¾÷±ºÀÌ magic/shaman°è¿­ÀÎÁö üũ bool mMageJobType; unsigned long mRushSkill; unsigned char mRushStep; bool mRushBlink; /// ´ëÈ­ÁßÀÎ npc À妽º unsigned long mNpcIdx; /// ÀÌ¿ëÁßÀÎ npc ŸÀÔ eNpcFunc mNpcFuncType; /// À̵¿ ºÒ°¡ bool mCantMove; /// ½ºÅ³ »ç¿ë ºÒ°¡ bool mCantSkillPhy; /// ½ºÅ³ »ç¿ë ºÒ°¡ bool mCantSkillMag; /// ¼ö¸é bool mIsSleep; /// ½ºÅÏ bool mIsStun; /// ¸ó½ºÅÍ ¼±°ø ÀÎ½Ä È¸ÇÇ bool mIsAvoidMonLook; unsigned long mSumKeyMoveDeltaTime; /// ±æÃ£±â static const unsigned int MAX_PATH_COUNT = 2048; static const unsigned int MAX_PATH_DIST = 30000; NiPoint2 mPathArray[MAX_PATH_COUNT]; unsigned int mPathIndex; unsigned int mPathCount; //unsigned long mDuelReqPlayerIdx; /// ÆòÈ­ toggle unsigned long mPeaceToggleTime; bool mPeaceToggleFlag; unsigned long mSwitchWeaponTime; bool mSwitchWeaponFlag; // typedef tPointerList cMoveTargetEffect; // cMoveTargetEffect mMoveTargetList; unsigned long mMoveTargetEffectIdx; cEffectSceneNode* mMoveTargetEffect; /// ¸ó½ºÅÍ ÅÇŸ°ÙÀ» À§ÇÑ ¼³Á¤ NiTPointerList mTabTargetList; /// Keyboard Move enum { MOVE_NONE = 0, MOVE_W = (1 << 0), MOVE_S = (1 << 1), MOVE_A = (1 << 2), MOVE_D = (1 << 3), }; bool mIsKeyMove; bool mGoCountinue; //bool mSendKeyMoveMsg; unsigned long mCheckSendTime; /// ã¾Æ°¡±â ±â´É bool mIsFindPosition; unsigned char mFindPosCnt; NiPoint2 mFindPos; /// µû¶ó°¡±â Ç÷¹±× bool mIsFollowing; unsigned long mFollowUpdateTime; unsigned long mFollowPlayerIndex; /// ¸ÊÆ÷Å» üũ unsigned long mMapPortalSkipTime; bool mAutoAttackFlag; // ÆÄƼ ·ë À妽º unsigned short mPartyRoomIndex; }; inline bool cHero::IsProcessAfterAction() { return (mAfterAction.mActionType != eAfterAction_None); }