#include "SunClientPrecompiledHeader.h" #include "uienchantman.h" #include "interfacemanager.h" #ifdef __NA_001358_ENCHANT_UNIFICATION #include "InstantEnchantParser.h" #include #include "ItemManager.h" #include "SCItemSlot.h" #include "uiSystemMan/uiSystemMan.h" #include "GlobalFunc.h" #include "SoundEffect.h" #else //__NA_001358_ENCHANT_UNIFICATION #ifdef _NA_003966_20111227_ADD_ENCHANT #include "EnchantDialog3.h" #else #include "EnchantDialog2.h" #endif #endif //__NA_001358_ENCHANT_UNIFICATION #ifdef _NA_003966_20111227_ADD_ENCHANT TCHAR local_dialog_id[] = _T("0710"); TCHAR local_dialog_resource_path[] = _T("Data\\Interface\\71_enchant2.iwz"); #else TCHAR local_dialog_id[] = _T("0710"); TCHAR local_dialog_resource_path[] = _T("Data\\Interface\\71_enchant.iwz"); #endif uiEnchantMan::uiEnchantMan(InterfaceManager *pUIMan): uiBaseMan(pUIMan) { #ifdef __NA_001358_ENCHANT_UNIFICATION m_bPendingPacket = false; m_bPendingAsk = false; #else //__NA_001358_ENCHANT_UNIFICATION m_pEnchantDialog = NULL; #endif //__NA_001358_ENCHANT_UNIFICATION } //------------------------------------------------------------------------------ /** */ void uiEnchantMan::OnInitialize() { #ifdef __NA_001358_ENCHANT_UNIFICATION //no operation #else //__NA_001358_ENCHANT_UNIFICATION m_pEnchantDialog = new EnchantDialog; if( !g_InterfaceManager.LoadInterface( m_pEnchantDialog, local_dialog_resource_path, StrToWzID(local_dialog_id), FALSE ) ) { } #ifdef _NA_003966_20111227_ADD_ENCHANT m_pEnchantDialog->SetDialogKey(StrToWzID(local_dialog_id)); #endif // _NA_003966_20111227_ADD_ENCHANT #endif //__NA_001358_ENCHANT_UNIFICATION } #ifdef __NA_001358_ENCHANT_UNIFICATION bool uiEnchantMan::AskInstantEnchant() { uiSystemMan* pUIMan = GET_DIALOG_MANAGER(uiSystemMan, UIMAN_SYSTEM); SCSlotContainer* pContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); if(pUIMan && pContainer) { SCItemSlot& rTargetItemSlot = (SCItemSlot&)pContainer->GetSlot( m_TargetItemPos ); TCHAR szTemp1[INTERFACE_STRING_LENGTH] = {0, }; TCHAR szTemp2[INTERFACE_STRING_LENGTH] = {0, }; TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0, }; GameFunc::GetItemName(&rTargetItemSlot, rTargetItemSlot.GetItemInfo(), szTemp1, INTERFACE_STRING_LENGTH); g_InterfaceManager.GetInterfaceString(723,szTemp2,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH, "%s%s", szTemp1, szTemp2); pUIMan->Sys_Confirm(NULL, GlobalFunc::UseInstantEnchantGem, NULL/*szTitle*/, szMessage); m_bPendingAsk = true; } else return false; return true; } bool uiEnchantMan::CheckEnableEnchant() { if(m_bPendingAsk || m_bPendingPacket) return false; SCSlotContainer* pContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); SCItemSlot& rEnchantItemSlot = (SCItemSlot&)pContainer->GetSlot( m_InstantEnchantPos ); SCItemSlot& rTargetItemSlot = (SCItemSlot&)pContainer->GetSlot( m_TargetItemPos ); if ( !rEnchantItemSlot.GetItemInfo() || eITEMTYPE_ENCHANT != rEnchantItemSlot.GetItemInfo()->m_wType ) { assert(!"Is not InstantEnchantGems"); return false; } tag_InstantEnchantScriptInfo* pInfo = InstantEnchantParser::Instance()->GetInstantEnchantInfo(rEnchantItemSlot.GetItemInfo()->m_Code, rTargetItemSlot.GetItemInfo()->m_LV); if(!pInfo) { return false; } if ( NULL == rTargetItemSlot.GetItemInfo() ) { return false; } if (ST_ITEM != rTargetItemSlot.GetSlotType() || (!rTargetItemSlot.GetItemInfo()->IsWeapon() && !rTargetItemSlot.GetItemInfo()->IsArmor() #ifdef _NA002823_WINGS_EQUIPMENTS_EXTENTION && (rTargetItemSlot.IsWingItem() == false) #endif //_NA002823_WINGS_EQUIPMENTS_EXTENTION )) { // À߸øµÈ ÀÎæƮ ´ë»óÀÔ´Ï´Ù. TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0, }; g_InterfaceManager.GetInterfaceString( 725, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); return false; } if( pInfo->byEnchantMinLV > rTargetItemSlot.GetEnchant()+1 || pInfo->byEnchantMaxLV < rTargetItemSlot.GetEnchant()+1 ) { // ´ë»ó ¾ÆÀÌÅÛÀÇ ÀÎæƮ ·¹º§À» È®ÀÎÇØ ÁֽʽÿÀ. TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0, }; g_InterfaceManager.GetInterfaceString( 726, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); return false; } return true; } void uiEnchantMan::SendPacketInstantEnchant() { MSG_CG_ITEM_INSTANT_ENCHANT_SYN Msg; Msg.m_PotonItemPos = GetInstantEnchantPos(); Msg.m_TargetItemPos = GetTargetItemPos(); if (GlobalFunc::SendPacket( CI_GAMESERVERIDX, &Msg, sizeof(Msg))) { m_bPendingPacket = true; #ifdef _DEV_VER GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_OUPUT_DEBUG, "Send InstantEnchant Packet" ); #endif } } void uiEnchantMan::OnEnchantPacketAck(MSG_BASE * pMsg) { MSG_CG_ITEM_INSTANT_ENCHANT_ACK* pRecvMsg = (MSG_CG_ITEM_INSTANT_ENCHANT_ACK*)pMsg; m_bPendingPacket = false; TCHAR szMessage[MAX_MESSAGE_LENGTH]; switch(pRecvMsg->m_ResultCode) { case RC::RC_ITEM_ENCHANT_SUCCESS: { SCSlotContainer* pContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); if(pContainer) { // Æ÷Åæ ¼Ò¸ð(?) SCItemSlot& rInstantEnchantItemSlot = (SCItemSlot&)pContainer->GetSlot( m_InstantEnchantPos ); ItemManager::Instance()->SpendItem( SI_INVENTORY, rInstantEnchantItemSlot.GetCode(), 1 ); // ÀÎæƮ ¾÷ SCItemSlot& rTargetItemSlot = (SCItemSlot&)pContainer->GetSlot( m_TargetItemPos ); rTargetItemSlot.SetEnchant(rTargetItemSlot.GetEnchant() + 1); // ÀÎæƮ¿¡ ¼º°øÇß½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( 724, szMessage, MAX_MESSAGE_LENGTH ); g_SoundEffect.PlayUI( UI_SOUND_COMPOSE_ENCHANT_SUCCESS ); } } break; case RC::RC_ITEM_ENCHANT_FAILED: { SCSlotContainer* pContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); if (pContainer) { // Æ÷Åæ ¼Ò¸ð(?) SCItemSlot& rInstantEnchantItemSlot = (SCItemSlot&)pContainer->GetSlot(m_InstantEnchantPos); ItemManager::Instance()->SpendItem(SI_INVENTORY, rInstantEnchantItemSlot.GetCode(), 1); // ÀÎæƮ°¡ ½ÇÆÐÇß½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(727, szMessage); g_SoundEffect.PlayUI(UI_SOUND_COMPOSE_ENCHANT_FAIL); } } break; case RC::RC_ITEM_ENCHANT_FAILED_AND_ENCHNAT_DOWN: { SCSlotContainer* pContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); if (pContainer) { // Æ÷Åæ ¼Ò¸ð(?) SCItemSlot& rInstantEnchantItemSlot = (SCItemSlot&)pContainer->GetSlot(m_InstantEnchantPos); ItemManager::Instance()->SpendItem(SI_INVENTORY, rInstantEnchantItemSlot.GetCode(), 1); // ÀÎæƮ ´Ù¿î SCItemSlot& rTargetItemSlot = (SCItemSlot&)pContainer->GetSlot(m_TargetItemPos); rTargetItemSlot.SetEnchant(rTargetItemSlot.GetEnchant() - 1); BASE_ITEMINFO* itemInfo = rTargetItemSlot.GetItemInfo(); assert(itemInfo); // ¸Þ½ÃÁö Ãâ·Â TCHAR szItemName[128], szItemName2[128], szTemp[64]; TCHAR szTempMessage[MAX_MESSAGE_LENGTH] = {0,}; GameFunc::GetItemName(&rTargetItemSlot, rTargetItemSlot.GetItemInfo(), szTemp, 64); Sprintf(szItemName, "%s %+d", szTemp, rTargetItemSlot.GetEnchant() + 1); Sprintf(szItemName2, "%s %+d", szTemp, rTargetItemSlot.GetEnchant()); // 5318 ÀÎæƮ¿¡ ½ÇÆÐÇÏ¿©, %s°¡ %s·Î ´Ù¿îµÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(5318, szTempMessage); Sprintf(szMessage, szTempMessage, szItemName, szItemName2); g_SoundEffect.PlayUI(UI_SOUND_COMPOSE_ENCHANT_FAIL); } } break; case RC::RC_ITEM_ENCHANT_FAILED_AND_DESTROY: { SCSlotContainer* pContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); if(pContainer) { // Æ÷Åæ ¼Ò¸ð(?) SCItemSlot& rInstantEnchantItemSlot = (SCItemSlot&)pContainer->GetSlot( m_InstantEnchantPos ); ItemManager::Instance()->SpendItem( SI_INVENTORY, rInstantEnchantItemSlot.GetCode(), 1 ); // ¾ÆÀÌÅÛ ÆÄ±« SCItemSlot& rTargetItemSlot = (SCItemSlot&)pContainer->GetSlot( m_TargetItemPos ); BASE_ITEMINFO* itemInfo = rTargetItemSlot.GetItemInfo(); assert( itemInfo ); TCHAR szTemp[64] = {0,}; TCHAR szItemName[256] = {0,}; GameFunc::GetItemName(&rTargetItemSlot, rTargetItemSlot.GetItemInfo(), szTemp, 64); Snprintf(szItemName, 255, "%s +%d", szTemp, rTargetItemSlot.GetEnchant() ); pContainer->DeleteSlot( m_TargetItemPos, NULL ); // 5319 ÀÎæƮ¿¡ ½ÇÆÐ ÇÏ¿©, %s°¡ ¼Ò¸ê µÇ¾ú½À´Ï´Ù. TCHAR szTempMessage[MAX_MESSAGE_LENGTH] = { '\0', }; g_InterfaceManager.GetInterfaceString( 5319, szTempMessage ); Snprintf( szMessage, INTERFACE_STRING_LENGTH - 1, szTempMessage, szItemName ); g_SoundEffect.PlayUI( UI_SOUND_COMPOSE_ENCHANT_FAIL ); } } break; } GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, szMessage); GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_TOP_SHOW, szMessage); } void uiEnchantMan::OnEnchantPacketNak(MSG_BASE * pMsg) { MSG_CG_ITEM_INSTANT_ENCHANT_NAK* pRecvMsg = (MSG_CG_ITEM_INSTANT_ENCHANT_NAK*)pMsg; m_bPendingPacket = false; ItemManager::Instance()->NoticeReasonItemErrorCode( pRecvMsg->m_ResultCode ); } #endif //__NA_001358_ENCHANT_UNIFICATION