#include "stdafx.h" #include "CollectionStateInfo.h" #include "CollectionParser.h" #include "Collection.h" #include __IMPL_CUSTOMPOOL_PTR( CollectionStateInfo ) CollectionStateInfo::CollectionStateInfo() : m_Collector(0) , m_stat(collectable) , m_pData(NULL) , m_pCollection(NULL) , m_pMapObjectInfo(NULL) { SetVector(&m_CollectorPos,0,0,0); m_Timer.DisableCheckTime(); } bool CollectionStateInfo::Init( Collection* pCollection, CHARGUID Collector, WzVector& CollectorPos ) { MAPOBJECT_INFO* pMapInfo = pCollection->GetMapObjectInfo(); m_pData = _FindCollectionInfo(pMapInfo->CollectionID); if( NULL == m_pData ) { char ch[5] = {0,}; SUNLOG( eCRITICAL_LOG, "CollectionStateInfo::Init ½ºÅ©¸³Æ®¿¡¼­ (%s)Á¤º¸¸¦ ãÀ»¼ö ¾ø½À´Ï´Ù.", WzIDToString(ch,pMapInfo->CollectionID) ); return false; } m_pMapObjectInfo = pMapInfo; m_pCollection = pCollection; m_Collector = Collector; m_CollectorPos = CollectorPos; return true; } void CollectionStateInfo::Release() { m_pData = NULL; m_pCollection = NULL; m_pMapObjectInfo = NULL; m_stat = collectable; m_Collector = 0; SetVector(&m_CollectorPos,0,0,0); m_Timer.DisableCheckTime(); } bool CollectionStateInfo::StartCollect() { return collectable == m_stat ? _ChangeStat() : false; } bool CollectionStateInfo::StartRespawn() { if( Collected == m_stat ) { m_pCollection = NULL; m_Collector = 0; SetVector(&m_CollectorPos,0,0,0); return _ChangeStat(); } return false; } // äÁýÁß,äÁý¿Ï·á¿¡·¯½Ã Ãë¼Ò. bool CollectionStateInfo::CanCancel(CHARGUID Collector) { if( Collecting != m_stat && Collected != m_stat ) return false; if( Collector != m_Collector ) return false; return true; } void CollectionStateInfo::Cancel() { m_stat = cancel; _ChangeStat(); } // Active() È£Ãâ // 0- false¸®ÅÏ »óŰª : collectable (äÁý°¡´É) // 1- false¸®ÅÏ »óŰª : Collecting (äÁýÁß) // 2- true¸®ÅÏ »óŰª : Collecting (äÁý¿Ï·á) // Active() È£Ãâ // 3- false¸®ÅÏ »óŰª : Collected (äÁýÇßÀ½, ½ºÆù°¡´É) // 4- false¸®ÅÏ »óŰª : Respawning (½ºÆùÁß) // 5- true¸®ÅÏ »óŰª : Respawning (½ºÆù¿Ï·á) // 6- false¸®ÅÏ »óŰª : cancel (Ãë¼Ò) bool CollectionStateInfo::update(BYTE* stat) { bool retval = false; *stat = m_stat; if( m_Timer.IsExpired() ) retval = _ChangeStat(); return retval; } bool CollectionStateInfo::_ChangeStat() { // m_DelayCollectionRespawnTime »ç¿ë ÀÌÀ¯ : // äÁý¹°ÀÇ È°¼ºÈ­ ÆÐŶÀ» ¹Ù·Î º¸³»¸é(¸®½ºÆù ½Ã°£ '0' ) Ŭ¶ó¿¡¼­ ¹«½Ã µÉ¼ö ÀÖÀ½. (Ŭ¶ó¿¡¼­ äÁý ¿Ï·á ¸ð¼ÇÁß) // Ŭ¶ó¿¡¼­ ¿Ï·á ÆÐŶÀ» ´Ê°Ô º¸³¾°æ¿ì(¸®½ºÆù ½Ã°£ '0' ) äÁý °¡´É ÆÐŶÀÌ(´À³¦Ç¥) Ŭ¶ó¿¡ °¥¼ö ÀÖÀ½. static const DWORD& Delay = ServerOptionParserEx::Instance()->GetServerOption().m_DelayCollectionRespawnTime; switch(m_stat) { case collectable: // äÁý ½ÃÀ۽à m_Timer.SetTimer( m_pData->m_dwCollectingTime ); break; case Collecting: // äÁý ¿Ï·á½Ã m_Timer.DisableCheckTime(); break; case Collected: //¸®½ºÆù ½ÃÀ۽à m_Timer.SetTimer( m_pData->m_dwRespawnTime + Delay ); break; case Respawning: //¸®½ºÆù ¿Ï·á½Ã m_Timer.DisableCheckTime(); break; default: //case cancel: m_Timer.DisableCheckTime(); m_stat = cancel; return false; } if( spawn == ++m_stat ) //¸®½ºÆù ¿Ï·á½Ã -> ½ºÆù»óÅÂ==äÁý°¡´É»óÅ m_stat = collectable; return true; } CollectionInfo* CollectionStateInfo::_FindCollectionInfo( WzID CollectionID ) { return const_cast(CollectionParser::Instance()->FindCollectionInfo(CollectionID)); }