#include "stdafx.h" #include #include #include namespace ItemData { // ¾ÆÀÌÅÛ ÁÂÇ¥¸¦ ¸¸µç´Ù. Item::ItemPos MakeItemPos(unsigned char cPos, unsigned char cX, unsigned char cY, unsigned char cZ) { Item::ItemPos itemPos; itemPos.m_cPos = cPos; if(IsArrayContainer(cPos)) { itemPos.SetPos(cX, cY, cZ); } else { itemPos.m_cIndex = cX; } return itemPos; } // ¾ÆÀÌÅÛÀ§Ä¡°¡ ÀûÁ¤ÇÑÀ§Ä¡ÀÎÁö È®ÀÎ.. inline bool IsArrayContainer(unsigned char cTakePos) { switch(cTakePos) { case TakeType::TS_INVEN: case TakeType::TS_EXCHANGE: case TakeType::TS_DEPOSIT: case TakeType::TS_STALL: return true; } return false; } // ¾ÆÀÌÅÛ º¹»ç.. Item::CItem* CloneItem(Item::CItem* lpSrcItem, PktAdminMgr::CreateItemInfo EquipInfo) { if (0 != lpSrcItem) { Item::CEquipment* lpEquipment = Item::CEquipment::DowncastToEquipment(lpSrcItem); if (0 != lpEquipment) { Item::CItem* lpNewItem = Item::CItemFactory::GetInstance().CreateItem(lpEquipment->GetItemInfo()); Item::CEquipment* lpNewEquipment = Item::CEquipment::DowncastToEquipment(lpNewItem); if(0 == lpNewEquipment) { DELETE_ITEM(lpNewItem); } else { lpNewEquipment->SetNumOrDurability(lpSrcItem->GetNumOrDurability()); static_cast(lpNewEquipment)->AdjustData(EquipInfo); DETLOG0(g_Log, "Item::CEquipment* º¹»ç ¾ÆÀÌÅÛÀ» »ý¼ºÇß½À´Ï´Ù."); return lpNewEquipment; } } else { Item::CItem* lpItem = new Item::CItem(lpSrcItem->GetItemInfo()); if (0 != lpItem) { lpItem->SetNumOrDurability(lpSrcItem->GetNumOrDurability()); DETLOG0(g_Log, "Item::CItem* º¹»ç ¾ÆÀÌÅÛÀ» »ý¼ºÇß½À´Ï´Ù."); return lpItem; } } } else { ERRLOG0(g_Log, "¿øº» ¾ÆÀÌÅÛÀÌ NULLÀÔ´Ï´Ù"); } return NULL; } // ¸®Åϰª : // ³»°¡ »ç¿ëÇÒ¼ö ÀÖÀ¸¸é true »ç¿ëÇÒ¼ö ¾øÀ¸¸é false // ¸®ÅϰªÀÌ false && bisLock°¡ false¸é ³»°¡ â°í¿¡ ¶ôÀ» °É°í »ç¿ëÇϸéµÈ´Ù. bool CDepositLock::isUse( unsigned long dwUID, unsigned long dwCID, CPacketDispatch* lpPacketDispatch, bool& bisLock ) { isDepositPos Pos = m_DepositUser.find( dwUID ); if( Pos != end( ) ) { bisLock = true; DepositInfo& Info = Pos->second; if( ( dwCID == Info.m_dwCID ) && ( Info.m_lpPacketDispatch == lpPacketDispatch ) ) { return true; } } else { bisLock = false; } return false; } // â°í Àá±ÝÁ¤º¸¸¦ ÀúÀåÇÑ´Ù void CDepositLock::DepositLock( unsigned long dwUID, unsigned long dwCID, CPacketDispatch* lpPacketDispatch ) { m_DepositUser.insert( std::make_pair( dwUID, DepositInfo( dwCID, lpPacketDispatch ) ) ); } // â°í Àá±ÝÁ¤º¸¸¦ ÇØÁö.. void CDepositLock::DepositUnLock( unsigned long dwUID ) { isDepositPos Pos = m_DepositUser.find( dwUID ); if( Pos != end( ) ) m_DepositUser.erase( Pos ); } // â°í¸¦ µ¶Á¡ÇϰíÀÖ´Â °ü¸®ÀÚÀÇ Dispatch¸¦ °¡Á®¿Â´Ù. CPacketDispatch* CDepositLock::GetDispatch( unsigned long dwUID ) { isDepositPos Pos = m_DepositUser.find( dwUID ); if( Pos != end( ) ) { DepositInfo& Info = Pos->second; return Info.m_lpPacketDispatch; } return NULL; } // â°í Àá±Ý Á¤º¸¸¦ °¡Á®¿Â´Ù. bool CDepositLock::GetLockInfo( unsigned long dwUID, CDepositLock::DepositInfo& Info ) { isDepositPos Pos = m_DepositUser.find( dwUID ); if( Pos != end( ) ) { Info = Pos->second; return true; } return false; } // ÇØ´ç Dispatch¸¦ °¡Áö°í Àִ â°í Àå±ÝÁ¤º¸¸¦ ¸ðµÎ ÇØÁöÇÑ´Ù. void CDepositLock::RemoveAllSelectDispatch( CPacketDispatch* lpPacketDispatch ) { isDepositPos Pos = m_DepositUser.begin( ); for(;Pos != end( );) { DepositInfo& Info = Pos->second; if( Info.m_lpPacketDispatch == lpPacketDispatch ) { m_DepositUser.erase( Pos++ ); } else { ++Pos; } } } };