/* ========================================================================== * ÆÄ ÀÏ : DeathMatchObject.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : ¹Ú°æÈñ * ÀÛ ¼º ÀÏ : 2008-09-04 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "BaseDeathMatch.h" struct sLeaderInfo { unsigned long mLeaderIdx; /// ¼öÀå idx unsigned long mLeaderChangeTime; /// ¼öÀå º¯°æ ½Ã°£ unsigned long mLeaderDieCnt; /// ¼öÀå Á×Àº ¼ö }; struct sStoneInfo { unsigned long mStoneIdx; /// ¼®»ó idx unsigned long mStoneRegenTime; /// ¼®»ó ¸®Á¨ }; class cDeathMatchObject : public cBaseDeathMatch { public: cDeathMatchObject(); virtual ~cDeathMatchObject(); /// ¸Þ¸ð¸®Ç®¿¡¼­ °´Ã¼ °ø°£À» ÇÒ´ç¹ÞÀ½ void* operator new( size_t n ); /// ¸Þ¸ð¸®Ç®¿¡¼­ ÇÒ´ç ¹ÞÀº °´Ã¼¸¦ Á¦°ÅÇØÁÜ void operator delete( void* ptr, size_t n ); virtual bool Init( unsigned short DMIdx, sLevelForceInfo* pLevelForceInfo ); void Process( unsigned long elapsedTime, unsigned long accumTime ); void LeaderProcess( unsigned long elapsedTime, unsigned long accumTime ); void StoneProcess( unsigned long elapsedTime, unsigned long accumTime ); virtual void OutMember( unsigned long playerIdx, ePVPDM_TEAM_TYPE teamType ); /// Á¡¼ö º¯°æ virtual void ScoreUpdate( unsigned long killIdx, ePVPDM_TEAM_TYPE killerTeam, unsigned long deadIdx, ePVPDM_TEAM_TYPE deadTeam ); void StoneScoreUpdate( ePVPDM_TEAM_TYPE killerTeam, unsigned long killerIdx ); /// °á°ú ó¸® void Result(); void SyncStoneHP( unsigned long teamType, unsigned long hp ); void DeleteStone( unsigned long teamType, unsigned long lastAttacker ); private: /// ÇÁ·Î¼¼½º ºÎÇÏ ¹æÁö unsigned long mLeaderTimePass; sLeaderInfo mLeaderInfo[ePVPDM_TEAMTYPE_MAX]; sStoneInfo mStoneInfo[ePVPDM_TEAMTYPE_MAX]; unsigned long mNextLogTime; }; const int FLAG_MAX = 7; struct sFlagInfo { /// ¸®Á¨µÈ ±ê¹ß Á¤º¸ unsigned long mFlagIndex; unsigned long mFlagPointIndex; /// ÇöÀç ±ê¹ß ¼ÒÀ¯ÀÚ unsigned long mFlagOwnerIndex; ePVPDM_TEAM_TYPE mFlagOwnerTeam; /// ±ê¹ßÀ» °Ô¾çÇØ¼­ ¸®Á¨ÇؾߵǴÂÁö üũ unsigned long mNewFlagWaitTime; bool mNewFlagGen; /// À¯Àúµé¿¡°Ô ±ê¹ßÀ§Ä¡¸¦ ÁÖ±âÀû ¾Ë·ÁÁִ½ð£ unsigned long mSendFlagPosTime; }; struct sHoistInfo { unsigned long mObjectIdx; unsigned long mRegenIdx; unsigned long mNextRegenTime; }; ////////////////////////////////////////////////////////////////////////// class cDeathMatch2Object : public cBaseDeathMatch { public: cDeathMatch2Object(); virtual ~cDeathMatch2Object(); /// ¸Þ¸ð¸®Ç®¿¡¼­ °´Ã¼ °ø°£À» ÇÒ´ç¹ÞÀ½ void* operator new( size_t n ); /// ¸Þ¸ð¸®Ç®¿¡¼­ ÇÒ´ç ¹ÞÀº °´Ã¼¸¦ Á¦°ÅÇØÁÜ void operator delete( void* ptr, size_t n ); virtual bool Init( unsigned short DMIdx, sLevelForceInfo* pLevelForceInfo ); virtual void Process( unsigned long elapsedTime, unsigned long accumTime ); virtual void OutMember( unsigned long playerIdx, ePVPDM_TEAM_TYPE teamType ); virtual void SendFight( unsigned long fightTime ); /// Á¡¼ö º¯°æ void ScoreUpdate( unsigned long killIdx, ePVPDM_TEAM_TYPE killerTeam, unsigned long deadIdx, ePVPDM_TEAM_TYPE deadTeam ); /// äÁý °´Ã¼ »óÅ º¯°æ½Ã È£Ãâ void ChangeGatheringState( unsigned long gIdx, unsigned long playerIdx ); /// °á°ú ó¸® void Result(); void RegenFlag( unsigned char aryPos, float x, float y ); bool DelInfRegenFlag( unsigned long playerIdx, float x, float y ); bool IsGathering( unsigned long playerIdx, unsigned long gatheringIdx ); protected: /// ±ê¹ß & ±ê¹ßÆ÷ÀÎÆ® °»½Å ó¸® void FlagProcess( unsigned long accumTime ); /// Á¨ Áֱ⠰»½Å void EnableNewGen(); void EnableNewGen( unsigned char aryPos ); /// void RegenNewFlag( unsigned char aryPos ); void RegenHoist( bool first ); /// msg ¹ß¼Û void SendFlagInfo( unsigned char aryPos, bool newGen ); void SendFlagPos( unsigned char aryPos ); protected: typedef tHashMap cLongMap; /// ÃÖÃÊ °Ô¾çÆÀ ePVPDM_TEAM_TYPE mFirstFlagTeam; unsigned char mFlagCnt; sFlagInfo mFlagInfo[FLAG_MAX]; /// °Ô¾ç Æ÷ÀÎÆ®(äÁý)ÆÀº° ¸®Á¨ ½Ã°£ unsigned char mAHoistCnt; sHoistInfo mAteamHoist[FLAG_MAX]; unsigned char mBHoistCnt; sHoistInfo mBteamHoist[FLAG_MAX]; };