#pragma once #include #include #include class Player; class NPC; #define CHAO_USE_STORE (1<<0) //»óÁ¡À̿밡´É #define CHAO_USE_RANKUP (1<<1) //·©Å©¾÷ À̿밡´É #define CHAO_USE_CRYSTALIZE (1<<2) //°áÁ¤È­ À̿밡´É #define CHAO_USE_ENCHANT (1<<3) //ÀÎþƮ À̿밡´É #define CHAO_USE_COMPOSE (1<<4) //Á¶ÇÕ À̿밡´É #define CHAO_USE_PORTAL (1<<5) //Æ÷Å» À̿밡´É #define CHAO_USE_QUEST (1<<6) //Äù½ºÆ® À̿밡´É #define CHAO_USE_EVENT (1<<7) //À̺¥Æ® À̿밡´É #ifdef __CN_0_20090617_PRE_CHAO_USE_FLAG #define PRE_CHAO_USE_FLAG ( (1<<8)-1 ) // Áß±¹Àº ¸ðµÎ À̿밡´É #else #define PRE_CHAO_USE_FLAG ( CHAO_USE_QUEST ) #endif #define FUL_CHAO_USE_FLAG ( 0 ) class ChaoState { typedef STLX_HASH_MAP HASHMAP_BADFRIEND; enum { NOTIFY_CHAOTIME_UPDATE_CYCLE = 60 * 60 * 1000 }; public: ChaoState( Player *pPlayer ); ~ChaoState(); VOID Init(); VOID Update(); VOID OnDead(); VOID StartBoradoriState( Player *pTarget ); VOID DecreaseChaoTime( WORD wDecSeconds ); VOID KillMonster( NPC *pNPC ); eCHAO_STATE GetChaoState(); VOID ClearChaoState(); VOID SendLeavedChaoTime(); BOOL IsBoradori() { return m_bBoradori; } BOOL IsChaoState() { return GetChaoState() == eCHAO_STATE_CHAO; } // ¸®º¥Áö ¸®½ºÆ® BOOL FindBadFriend( DWORD dwCharGuid ); BOOL AddBadFriend( STRUCT_REVENGE_INFO & RevengeInfo ); BOOL RemoveBadFriend( DWORD dwCharGuid ); inline VOID ClearBadFriend() { m_mapBadFriend.clear(); } BOOL IsRevengeName( const TCHAR * ptszRevengeName ); VOID SetRevengeName( const TCHAR * ptszRevengeName ); RC::eREVENGE_RESULT TrackRevenge( const TCHAR * ptszRevengeName, POSTYPE atPos ); // ¸®º¥Áö ´ë»óÀ¸·Î ¿öÇÁ BOOL DeleteRevengeStone( POSTYPE atPos ); // Ä«¿À »óÅ VOID UpChaoState(); VOID DownChaoState(); // º¸¶óµ¹ÀÌ »óÅ VOID EndBoradoriState(); // ¸®º¥Áö ¸®½ºÆ® VOID RequestRemoveBadFriend( DWORD dwCharGuid ); // ¸®º¥Áö ´ë»ó »èÁ¦ ¿äû BOOL CanUseFuction( DWORD Flag ); bool HostilityRelationCheck(Player *pTarget); private: VOID SetChaoState( eCHAO_STATE eChaoState ); public: VOID SetChaoEndTime( time_t EndTime ); public: time_t GetChaoEndTime(); private: Player * m_pPlayer; util::Timer m_NotifyTimer; // 1½Ã°£ °£°ÝÀ¸·Î Ä«¿ÀÀÇ ³²Àº½Ã°£À» ¾Ë·ÁÁØ´Ù. BOOL m_bBoradori; // º¸¶óµ¹ÀÌ »óÅÂÀΰ¡ util::Timer m_BoradoriTimer; // º¸¶óµ¹ÀÌ À¯Áö½Ã°£ HASHMAP_BADFRIEND m_mapBadFriend; // ¸®º¥Áö(³ª»ÛÄ£±¸) ¸®½ºÆ® TCHAR m_ptszRevengeName[MAX_CHARNAME_LENGTH+1]; // ¸®º¥Áö µî·Ï ¿¹»ó À¯ÀúÀ̸§ };