ProcessResult CFieldIOCPSocket::Process_FC_SHOP_BUY_COLOR_ITEM(const char* pPacket, int nLength, int &nBytesUsed){
DECLARE_MESSAGE_AND_CHECK_SIZE(pPacket, nLength, nBytesUsed, T_FC_SHOP_BUY_COLOR_ITEM,
MSG_FC_SHOP_BUY_COLOR_ITEM, pBuyColorItem);
if(FALSE == IsValidCharacter())
{
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_INVALID_CHARACTER);
return RES_BREAK;
}
//////////////////////////////////////////////////////////////////////////
// 2008-08-18 by dhjin, 1ÃÊ ÅÒ ½Ã½ºÅÛ ±âȹ¾È
if(!this->CheckOneSecondTermSystem())
{
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_INTERVAL_SYSTEM_SECOND, m_dwMSTermSystem);
return RES_BREAK;
}
if(INVALID_UNIQUE_NUMBER != m_peerTraderCharacterUniqueNumber
&& 0 != m_peerTraderCharacterUniqueNumber)
{
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_ITEM_TRADING);
return RES_BREAK;
}
///////////////////////////////////////////////////////////////////////////////
// 2007-09-13 by cmkwon, º£Æ®³² 2Â÷Æнº¿öµå ±¸Çö - T_FC_SHOP_BUY_COLOR_ITEM ¿äû½Ã 2Â÷Æнº¿öµå üũ
if(FALSE == this->CheckSecondaryPasswordLock())
{
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_SECPASS_LOCKED);
return RES_BREAK;
}
ITEM *pColorItem = ms_pFieldIOCP->GetItemInfo(pBuyColorItem->ItemNum);
if(NULL == pColorItem)
{// ItemNum üũ
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_PROTOCOL_ITEM_KIND_NOT_MATCHED);
return RES_BREAK;
}
if (0 != pColorItem->ReqMinLevel
&& pColorItem->ReqMinLevel > m_character.Level)
{// ÃÖ¼Ò ÇÊ¿ä ·¹º§ üũ
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_PROTOCOL_REQ_MINLEVEL_NOT_MATCHED);
return RES_BREAK;
}
if (0 != pColorItem->ReqMaxLevel
&& pColorItem->ReqMaxLevel < m_character.Level)
{// ÃÖ´ë ÇÊ¿ä ·¹º§ üũ
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_PROTOCOL_REQ_MAXLEVEL_NOT_MATCHED);
return RES_BREAK;
}
if(NULL == m_pCurrentBuildingNPC)
{
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_COMMON_INVALID_BUILDINGKIND);
return RES_BREAK;
}
if (m_pCurrentBuildingNPC->BuildingKind != BUILDINGKIND_TUNING_COLOR)
{// BuildKind üũ
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_PROTOCOL_BUILDING_KIND_NOT_MATCHED);
return RES_BREAK;
}
mt_auto_lock igLock(&m_ItemManager.m_mapItemGeneral); // lock m_mapItemGeneral
ITEM_GENERAL *pArmorItemGen = GetAttachItemGeneralByPosition(POS_CENTER);
if(NULL == pArmorItemGen
|| ITEMKIND_DEFENSE != pArmorItemGen->Kind)
{// ¾Æ¸Ó ¾ÆÀÌÅÛ Ã¼Å©
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_INVALID_ARMOR_ITEM);
return RES_BREAK;
}
if(pArmorItemGen->ItemInfo->SourceIndex != COLORItemNum_TO_ArmorSourceIndex(pColorItem->ItemNum))
{// ItemNum üũ
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_PROTOCOL_INVALID_ITEMNUM, 1);
return RES_BREAK;
}
int nColorCost = pColorItem->Price;
// 2006-02-08 by cmkwon, ¼¼·ÂºÐÆ÷ ¼¼±Ý Àû¿ë
float fTotalTexPercent = ms_pFieldIOCP->GetInfluenceTypeDistirbutionTexPercent(m_character.InfluenceType);
int nTotalTexSPI = CAtumSJ::GetItemTexSPI(nColorCost, fTotalTexPercent);
nColorCost += nTotalTexSPI; // 2006-02-08 by cmkwon, ¼¼±ÝÀ» ´õÇÑ´Ù.
ITEM_GENERAL *pMoney = m_ItemManager.GetFirstItemGeneralByItemNum(MONEY_ITEM_NUMBER);
if (pMoney == NULL
|| pMoney->CurrentCount < nColorCost)
{
if(NULL == pMoney)
{// 2006-10-16 by cmkwon, SPI ¾ÆÀÌÅÛÀÌ ¾øÀ» °æ¿ì Ãß°¡
m_ItemManager.InsertItemBaseByItemNum(MONEY_ITEM_NUMBER, 0, IUT_GENERAL);
}
SendErrorMessage(T_FC_SHOP_BUY_COLOR_ITEM, ERR_PROTOCOL_NOT_ENOUGH_MONEY);
return RES_BREAK;
}
///////////////////////////////////////////////////////////////////////////////
// 2005-12-06 by cmkwon, »ö»ó °ª°ú SPI °¨¾× ó¸®
pArmorItemGen->ColorCode = pColorItem->ItemNum;
this->UpdateItemRenderInfo(POS_CENTER, TRUE);
m_ItemManager.UpdateItemCountByPointer(pMoney, -nColorCost, IUT_SHOP); // update money
///////////////////////////////////////////////////////////////////////////////
// 2005-12-06 by cmkwon, DB Update
QPARAM_STORE_UPDATE_COLORCODE *pQParam = new QPARAM_STORE_UPDATE_COLORCODE;
pQParam->ItemUniqueNumber = pArmorItemGen->UniqueNumber;
pQParam->ColorCode = pArmorItemGen->ColorCode;
ms_pFieldIOCP->m_pAtumDBManager->MakeAndEnqueueQuery(QT_StoreUpdateColorCode, this, m_character.AccountUniqueNumber, pQParam);
///////////////////////////////////////////////////////////////////////////////
// 2005-12-06 by cmkwon, Ŭ¶óÀ̾ðÆ®·Î Àü¼ÛÇÔ
INIT_MSG_WITH_BUFFER(MSG_FC_SHOP_BUY_COLOR_ITEM_OK, T_FC_SHOP_BUY_COLOR_ITEM_OK, pSMsg, SendBuf);
pSMsg->ItemUID64 = pArmorItemGen->UniqueNumber;
pSMsg->ColorCode = pArmorItemGen->ColorCode;
SendAddData(SendBuf, MSG_SIZE(MSG_FC_SHOP_BUY_COLOR_ITEM_OK));
igLock.auto_unlock_cancel(); // 2007-10-05 by cmkwon,
// 2007-08-27 by dhjin, ÆÇ°øºñ ó¸®
this->SetExpediencyFundW(m_character.InfluenceType, nColorCost);
return RES_RETURN_TRUE;
}