#include "SunClientPrecompiledHeader.h" #include "itemmanager.h" #include #include #include #include "QuickSlot.h" #include "MouseHandler.h" #include "EquipmentContainer.h" #include #include "Hero.h" #include "InventoryDialog.h" #include "ShopDialog.h" #ifdef _NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM #include "uiBankMan/uiBankDialog.h" #else #include "BankDialog.h" #endif //_NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM #include "InterfaceManager.h" #include "Item.h" #include "ObjectManager.h" #include "QuickContainer.h" #include "ChatDialog.h" #include "ItemCompositeparser.h" #include "SCSkillSlot.h" #include "SkillInfoParser.h" #include "StyleSlot.h" #include "StyleContainer.h" #include "SoundEffect.h" #include "globalfunc.h" #include "EnduranceDialog.h" #include "ItemAttrCalculator.h" #include "uiSystemMan/uiSystemMan.h" #include "uiFateItemSystemMan/uiFateItemSystemMan.h" #include "uiFateItemSystem/uiFateItemSystem.h" #include "HeroEquipmentContainer.h" #ifdef __NA_001358_ENCHANT_UNIFICATION #include "uiEnchantMan/uiEnchantMan.h" #else //__NA_001358_ENCHANT_UNIFICATION #include "EnchantDialog2.h" #endif //__NA_001358_ENCHANT_UNIFICATION #include "LotteryInventoryDialog.h" #include "uiItemStatChangeSysMan/uiItemStatChangeSysMan.h" #include "uiItemStatChangeSys/uiItemStatChangeSys.h" #include "uiPetMan/uiPetMan.h" #include "uiPetNameSetting/uiPetNameSetting.h" #include "RiderInventoryDialog.h" #include "RiderContainer.h" #include "SkillAttrCalculator.h" #include "uiBattleScoreMan\uiBattleScoreMan.h" #include "InventoryFilterDialog.h" #include "SceneBase.h" #include "uiItemCompositeMan/uiItemCompositeMan.h" #include "uiItemCube.h" #include "uiSocketComposite/uiSocketComposite.h" #include "uiSocketMan/uiSocketMan.h" #include "uiAssistMan/uiAssistMan.h" #include "uiAskSocketIdentifyDialog/uiAskSocketIdentifyDialog.h" #include "uiAskSocketRecreateDialog/uiAskSocketRecreateDialog.h" #include "uiCharacterStatusMan/uiCharacterStatusMan.h" #include "Char_SkillDialog.h" #include "HeroData.h" using namespace RC; VOID ItemManager::OnRecvItemSync(MSG_BASE * pMsg ) { switch (pMsg->m_byProtocol) { case CG_SYNC_ALLFIELDITEMS_CMD: { MSG_CG_SYNC_ALLFIELDITEMS_CMD * pRecvMsg = (MSG_CG_SYNC_ALLFIELDITEMS_CMD *) pMsg; ////////////////////////////////////////////////////////////////////////// // ¾ÆÀÌÅÛ ¸®½ºÆ®¸¦ ¹Þ¾Æ¼­ ó¸®ÇÑ´Ù. BOOL bResult = FALSE; for (int i = 0; i < pRecvMsg->m_byCount; ++i) { bResult = ItemManager::Instance()->AddFieldItem(&pRecvMsg->m_pFieldItemRenderInfo[i]); __asm nop; } } break; case CG_SYNC_FIELDITEM_ENTER_BRD: { // À§¿¡²¨¶û °°ÀÌ AddFieldItem() ÇÔ¼ö·Î ó¸®ÇÏÀÚ. MSG_CG_SYNC_FIELDITEM_ENTER_BRD * pRecvMsg = (MSG_CG_SYNC_FIELDITEM_ENTER_BRD *)pMsg; ItemManager::Instance()->AddFieldItem(&pRecvMsg->m_ItemRenderInfo); if (pRecvMsg->m_dwFromMonsterKey) { Item *pItem = (Item *)g_ObjectManager.GetObject(pRecvMsg->m_ItemRenderInfo.m_dwObjectKey); if(pItem) { pItem->HideItem(); pItem->SetDropMonsterID(pRecvMsg->m_dwFromMonsterKey); } } } break; case CG_SYNC_FIELDITEM_LEAVE_BRD: { MSG_CG_SYNC_FIELDITEM_LEAVE_BRD * pRecvMsg = (MSG_CG_SYNC_FIELDITEM_LEAVE_BRD *)pMsg; for( int i = 0; i < pRecvMsg->m_byCount; ++i ) { Item * pItem = static_cast(g_ObjectManager.GetObject(pRecvMsg->m_dwObjectKey[i]) ); if (pItem == NULL) continue; g_ObjectManager.Delete(pRecvMsg->m_dwObjectKey[i]); } } break; } } //---------------------------------------------------------------------------- /** */ VOID ItemManager::OnrecvItemComposite(MSG_BASE * pMsg) { TCHAR szMessage[MAX_MESSAGE_LENGTH]; switch( pMsg->m_byProtocol ) { case CG_ITEM_SOCKET_FILL_ACK: { MSG_CG_ITEM_SOCKET_FILL_ACK * pRecvMsg = (MSG_CG_ITEM_SOCKET_FILL_ACK *)pMsg; SCSlotContainer * pAtContainer = (SCSlotContainer *)ItemManager::Instance()->GetContainer(SI_INVENTORY); SCItemSlot & rItemSlot = (SCItemSlot &)pAtContainer->GetSlot( pRecvMsg->m_TargetPos ); SCItemSlot & rCrystalSlot = (SCItemSlot &)pAtContainer->GetSlot( pRecvMsg->m_SocketItemPos ); // »ç¿ëÇÑ ÀÎþƮ º¸¼®ÀÇ Ä«¿îÆ® Çϳª³»¸°´Ù. SCItemSlot DeleteCrystalItemSlot; if (rCrystalSlot.IsOverlap()) { if (rCrystalSlot.GetNum() > 1 ) { rCrystalSlot.SetNum( rCrystalSlot.GetNum()-1 ); pAtContainer->UpdateSlot(pRecvMsg->m_SocketItemPos, rCrystalSlot ); } else { pAtContainer->DeleteSlot(pRecvMsg->m_SocketItemPos, &DeleteCrystalItemSlot); assert(eITEMTYPE_SOCKET_ZARD == DeleteCrystalItemSlot.GetItemInfo()->m_wType && "º¸¼®À̾ƴѵ¥ Áö¿ü´Ù´Ï!!!!"); } } else { pAtContainer->DeleteSlot(pRecvMsg->m_SocketItemPos, &DeleteCrystalItemSlot); assert(eITEMTYPE_SOCKET_ZARD == DeleteCrystalItemSlot.GetItemInfo()->m_wType && "º¸¼®À̾ƴѵ¥ Áö¿ü´Ù´Ï!!!!"); } // °á°ú ¹° ¼¼ÆÃ SCItemSlot InsertItemSlot(pRecvMsg->m_TargetItemStream); pAtContainer->DeleteSlot(pRecvMsg->m_TargetPos, NULL); pAtContainer->InsertSlot(pRecvMsg->m_TargetPos, InsertItemSlot); // »ç¿îµå Ãâ·Â ItemManager::Instance()->PlaySlotSound(eSLOT_SOUND_TYPE_PUT, (SCSlot *)&InsertItemSlot); TCHAR szResult[256]; TCHAR szItemName[256]; g_InterfaceManager.GetItemName(rItemSlot.GetCode(), szItemName, 256); // %s ¿É¼Ç Ãß°¡°¡ ¼º°øÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( eST_ITEM_OPTION_ADD_SUCCESS, szMessage, MAX_MESSAGE_LENGTH ); _stprintf(szResult, szMessage, szItemName ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szResult); } break; case CG_ITEM_SOCKET_FILL_NAK: { MSG_CG_ITEM_SOCKET_FILL_NAK * pRecvMsg = (MSG_CG_ITEM_SOCKET_FILL_NAK *)pMsg; if (pRecvMsg->m_dwErrorCode == RC_ITEM_SOCKET_FAILED_TO_FILL_BY_GRADE)// ¼ÒÄÏ¿¡ ÃÖ´ë »ç¿ë°¡´ÉÇÑ µî±ÞÀÇ °¹¼ö°¡ ³Ñ¾ú´Ù. { TCHAR error_message[INTERFACE_STRING_LENGTH] = {0,}; TCHAR temp_message[INTERFACE_STRING_LENGTH] = {0,}; TCHAR item_name[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetItemName(pRecvMsg->target_item_code, item_name); g_InterfaceManager.GetInterfaceString(65017, temp_message, INTERFACE_STRING_LENGTH); sprintf(error_message, temp_message, item_name); //65017 [%s] Àåºñ¿¡´Â ´õ ÀÌ»ó ÇØ´çµî±ÞÀÇ Àðµå ¿É¼ÇÀ» Ãß°¡ÇÒ ¼ö ¾ø½À´Ï´Ù. GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, error_message); } else { NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); } } break; case CG_ITEM_EXTRASTONE_USE_ACK: { MSG_CG_ITEM_EXTRASTONE_USE_ACK * pRecvMsg = (MSG_CG_ITEM_EXTRASTONE_USE_ACK *)pMsg; ItemManager::Instance()->DeleteItem(SI_INVENTORY, MouseHandler::Instance()->GetCrystalPos(), 1); SCSlotContainer * pContainer = ItemManager::Instance()->GetContainer( SI_INVENTORY ); if (!pContainer ) return; assert( !pContainer->IsEmpty( MouseHandler::Instance()->GetPendingTargetPos() ) ); SCItemSlot & rItemSlot = (SCItemSlot &)pContainer->GetSlot( MouseHandler::Instance()->GetPendingTargetPos() ); rItemSlot.SetNOptionAttr(pRecvMsg->m_NOptionAttrValueIndex); // ¿¢½ºÆ®¶ó ½ºÅæÀ» Àû¿ëÇß½À´Ï´Ù. const int c_iApplyExtraStone = 5302; g_InterfaceManager.GetInterfaceString(c_iApplyExtraStone, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, szMessage); } break; case CG_ITEM_EXTRASTONE_USE_NAK: { MSG_CG_ITEM_EXTRASTONE_USE_NAK * pRecvMsg = (MSG_CG_ITEM_EXTRASTONE_USE_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_byErrorCode); } break; case CG_ITEM_SOCKET_EXTRACT_SUCCESS_ACK: case CG_ITEM_SOCKET_EXTRACT_FAILED_ACK: case CG_ITEM_SOCKET_EXTRACT_NAK: case CG_ITEM_ACCESSORY_CREATE_ACK: case CG_ITEM_ACCESSORY_CREATE_NAK: { g_InterfaceManager.NetworkProc(InterfaceManager::DIALOG_ITEM_ETC_COMPOSE, pMsg); } break; } } VOID ItemManager::OnrecvItemEnchant(MSG_BASE * pMsg) { g_InterfaceManager.NetworkProc(InterfaceManager::DIALOG_ENCHANT, pMsg); } VOID ItemManager::ParsePacket( MSG_BASE * pMsg ) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; TCHAR szText[INTERFACE_STRING_LENGTH]; // TODO: // ÇÔ¼ö·Î Â¥¸£Àå.. -_-; switch( pMsg->m_byProtocol ) { case CG_SECURE_POLICY_PATTERN03_SIMPLEX_SNK_CMD: { ISecureWorkNode::OnMsgRecvSignal::SimplexSNK_T3( pMsg, 0 ); } break; case CG_ITEM_PICK_MONEY_ACK: { MSG_CG_ITEM_PICK_MONEY_ACK * pRecvMsg = (MSG_CG_ITEM_PICK_MONEY_ACK *)pMsg; LONGLONG CurrentMoney = 0; if (g_pHero) { CurrentMoney = g_pHero->GetMoney(); g_pHero->SetMoney(pRecvMsg->m_Money); } TCHAR szChatResult[INTERFACE_STRING_LENGTH] = {0,}; LONGLONG acquiredMoney = pRecvMsg->m_Money - CurrentMoney; int bonusMoney = 0; if( pRecvMsg->m_BonusRatio > 0) { bonusMoney = (int ) ceil( (float) acquiredMoney * ( (float) pRecvMsg->m_BonusRatio / (100.f + (float) pRecvMsg->m_BonusRatio) ) ); } if( bonusMoney > 0) { //5095 %I64u ÇÏÀÓÀ» ȹµæÇÏ¿´½À´Ï´Ù.(Ãß°¡ ÇÏÀÓ %d ȹµæ) g_InterfaceManager.GetInterfaceString(5095, szMessage); Snprintf(szChatResult, INTERFACE_STRING_LENGTH-1, szMessage, acquiredMoney - bonusMoney, bonusMoney); } else { // %I64u ÇÏÀÓ¸¦ ȹµæÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( eST_CODE_GET_MONEY, szMessage, MAX_MESSAGE_LENGTH ); _stprintf(szChatResult, szMessage, acquiredMoney); } #ifdef _DEV_VER TCHAR szDebugMessage[INTERFACE_STRING_LENGTH] ={0,}; Snprintf(szDebugMessage, INTERFACE_STRING_LENGTH -1,"DEBUG!! ȹµæ ÇÏÀÓ = %I64u , BonusRatio = %d" , acquiredMoney, pRecvMsg->m_BonusRatio ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szDebugMessage); #endif //_DEV_VER // µ·ÁÖ¾ú´Ù´Â ¸Þ½ÃÁö ¶Ù¿î´Ù. GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szChatResult, CHAT_TYPE_SYSTEM); uiBattleScoreMan* pBattleScoreMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BATTLE_SCORE)); if (CurrentMoney>0 && pBattleScoreMan) { pBattleScoreMan->RefreshInfo(0, acquiredMoney); } if( GAMEOPTION->GetPickUpItemNotify() ) { GameFramework::GetCurrentScene()->InserCenterTextMessage( szChatResult, PICK ); } } break; case CG_ITEM_DESTROY_DURA_CMD: { MSG_CG_ITEM_DESTROY_DURA_CMD * pRecvMsg = (MSG_CG_ITEM_DESTROY_DURA_CMD *)pMsg; SCSlotContainer * pFromContainer = (SCSlotContainer *)GetContainer(pRecvMsg->m_SlotIndex); if(pFromContainer) { SCSlot & rFromSlot = pFromContainer->GetSlot( pRecvMsg->m_SlotPos); TCHAR szName1[INTERFACE_STRING_LENGTH]; BASE_ITEMINFO * pItemInfo = ItemInfoParser::Instance()->GetItemInfo(rFromSlot.GetCode()); if (pItemInfo) { g_InterfaceManager.GetItemName( rFromSlot.GetCode(), szName1, INTERFACE_STRING_LENGTH ); g_InterfaceManager.GetInterfaceString( eST_ITEM_DESTROY_DURA, szText, INTERFACE_STRING_LENGTH ); _stprintf( szMessage, szText,szName1); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); pFromContainer->DeleteSlot(pRecvMsg->m_SlotPos, NULL); MouseHandler::Instance()->RemoveItemAtHand(); } } } break; case CG_ITEM_PICK_BRD: { MSG_CG_ITEM_PICK_BRD * pRecvMsg = (MSG_CG_ITEM_PICK_BRD *)pMsg; Object * pObj = g_ObjectManager.GetObject( pRecvMsg->m_dwObjKey ); TCHAR szName1[INTERFACE_STRING_LENGTH]; BASE_ITEMINFO * pItemInfo = ItemInfoParser::Instance()->GetItemInfo(pRecvMsg->m_ItemCode); if (pItemInfo && pObj) { g_InterfaceManager.GetItemName( pRecvMsg->m_ItemCode, szName1, INTERFACE_STRING_LENGTH ); g_InterfaceManager.GetInterfaceString( eST_ITEM_PICK, szText, INTERFACE_STRING_LENGTH ); _stprintf( szMessage, szText,pObj->GetName(),szName1 ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); } } break; case CG_ITEM_USE_BRD: { MSG_CG_ITEM_USE_BRD * pRecvMsg = (MSG_CG_ITEM_USE_BRD *)pMsg; if( Player* pObject = g_ObjectManager.GetPlayer(pRecvMsg->m_dwObjKey) ) { Player* pPlayer=(Player*)pObject; pPlayer->CreateWasteItemEffect(pPlayer, pRecvMsg->m_ItemCode); } } break; //#ifdef _NA_006372_20130108_BADGE_ITEM case CG_ITEM_USE_TOGGLE_ACK: { MSG_CG_ITEM_USE_TOGGLE_ACK* pRecvMsg = (MSG_CG_ITEM_USE_TOGGLE_ACK*)pMsg; if( pRecvMsg->toggle_item_type_ == kToggleItem_Badge ) { if( xGetHeroData()->GetBadgeItemData().IsActive() == true ) { POSTYPE current_equiped_item_position = xGetHeroData()->GetBadgeItemData().GetItemPosition(); if( SCItemSlot* pItem = ItemManager::Instance()->GetInventoryItem( current_equiped_item_position ) ) { pItem->OnUnEquip(); } } // Ȱ¼º if( pRecvMsg->is_equipped_ == true ) { if( SCItemSlot* pItem = ItemManager::Instance()->GetInventoryItem( pRecvMsg->item_pos_ ) ) { pItem->OnEquip(); nsSlot::TOGGLE_ITEMS data; data.is_equiped_ = pRecvMsg->is_equipped_; data.item_pos_ = pRecvMsg->item_pos_; data.item_code_ = pItem->GetCode(); xGetHeroData()->SetBadgeItemData(data); g_pHero->RefreshBadgeItemEffect(); g_pHero->UpdateItemAttrCalculator(); g_pHero->UpdateSkillAttr(); break; } } // ºñȰ¼º nsSlot::TOGGLE_ITEMS data; data.clear(); xGetHeroData()->SetBadgeItemData(data); g_pHero->RefreshBadgeItemEffect(); g_pHero->UpdateItemAttrCalculator(); g_pHero->UpdateSkillAttr(); } else if( pRecvMsg->toggle_item_type_ == kToggleItem_PCBang ) { if( xGetHeroData()->GetPCBangItemData().IsActive() == true ) { POSTYPE current_equiped_item_position = xGetHeroData()->GetPCBangItemData().GetItemPosition(); if( SCItemSlot* pItem = ItemManager::Instance()->GetInventoryItem( current_equiped_item_position ) ) { pItem->OnUnEquip(); } } // Ȱ¼º if( pRecvMsg->is_equipped_ == true ) { if( SCItemSlot* pItem = ItemManager::Instance()->GetInventoryItem( pRecvMsg->item_pos_ ) ) { pItem->OnEquip(); nsSlot::TOGGLE_ITEMS data; data.is_equiped_ = pRecvMsg->is_equipped_; data.item_pos_ = pRecvMsg->item_pos_; data.item_code_ = pItem->GetCode(); xGetHeroData()->SetPCBangItemData(data); g_pHero->RefreshPCBangItemEffect(); g_pHero->UpdateItemAttrCalculator(); g_pHero->UpdateSkillAttr(); break; } } // ºñȰ¼º nsSlot::TOGGLE_ITEMS data; data.clear(); xGetHeroData()->SetPCBangItemData(data); g_pHero->RefreshPCBangItemEffect(); g_pHero->UpdateItemAttrCalculator(); g_pHero->UpdateSkillAttr(); } } break; //#endif //_NA_006372_20130108_BADGE_ITEM case CG_ITEM_PICK_MONEY_NAK: { MSG_CG_ITEM_PICK_MONEY_NAK * pRecvMsg = (MSG_CG_ITEM_PICK_MONEY_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); Item *pItem = (Item *)g_ObjectManager.GetObject( pRecvMsg->m_dwFieldItemObjectKey ); if( pItem ) { pItem->SetSendPickPacket( FALSE ); pItem->InitState(STATE::ITEM_DROP_STATE, g_CurTime); } // CG_ITEM_PICK_MONEY_NAK WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); #if defined( _DEBUG ) g_InterfaceManager.ShowMessageBox( _T("CG_ITEM_PICK_MONEY_NAK"), 10000, &Color, 0 ); #endif } break; case CG_ITEM_DIVIDE_ACK: { MSG_CG_ITEM_DIVIDE_ACK * pRecvMsg = (MSG_CG_ITEM_DIVIDE_ACK *)pMsg; MoveItemWithDiv(); MouseHandler::Instance()->RemoveItemAtHand(); //GS_BUG_FIX:°»½ÅÀ§Ä¡°¡ Ʋ¸®´Ù ºÐÇÒÇÒ¶§ °¹¼ö¼ÂÆÃÀ߸øµÊ UpdateQuickInfo(); //Àκ¥³»¿¡¼­ ¾ÆÀÌÅÛÀ» ºÐ¸®ÇÏ´Â °æ¿ì¿£ Äù½ºÆ® Á¤º¸¸¦ °»½ÅÇÒ ÇÊ¿ä ¾ø´Ù. //g_InterfaceManager.UpdateQuestInfo();// Äù½ºÆ® Á¤º¸ °»½Å } break; case CG_ITEM_DIVIDE_NAK: { MSG_CG_ITEM_DIVIDE_NAK * pRecvMsg = (MSG_CG_ITEM_DIVIDE_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_byErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); } break; case CG_ITEM_MOVE_ACK: { MSG_CG_ITEM_MOVE_ACK * pRecvMsg = (MSG_CG_ITEM_MOVE_ACK *)pMsg; QuickContainer* quick_container = (QuickContainer*)g_pHero->GetQuickContainer(); if (quick_container) { if ((pRecvMsg->m_fromIndex == SI_INVENTORY || pRecvMsg->m_fromIndex == SI_EQUIPMENT) && (pRecvMsg->m_toIndex == SI_INVENTORY || pRecvMsg->m_toIndex == SI_EQUIPMENT)) { quick_container->set_is_item_move(true); } } MoveItem( pRecvMsg->m_fromIndex, pRecvMsg->m_toIndex, pRecvMsg->m_fromPos, pRecvMsg->m_toPos, pRecvMsg->move_quantity_); if (quick_container) { quick_container->set_is_item_move(false); } MouseHandler::Instance()->RemoveItemAtHand(); } break; case CG_ITEM_MOVE_NAK: { MSG_CG_ITEM_MOVE_NAK * pRecvMsg = (MSG_CG_ITEM_MOVE_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); } break; // ---------------------------------------------------------------------------------------- // »õ·Î »ý±ä QUICK ¸µÅ© À̵¿ ó¸® case CG_ITEM_QUICK_LINKITEM_ACK: { MSG_CG_ITEM_QUICK_LINKITEM_ACK * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKITEM_ACK *)pMsg; SCSlotContainer * pFromContainer = (SCSlotContainer *)GetContainer(SI_INVENTORY); // ÄüÀ¸·Î ¸µÅ© QuickContainer * pQuickDlg = (QuickContainer * )GetItemContainerDialog(SI_QUICK); SCSlot & rFromSlot = pFromContainer->GetSlot( pRecvMsg->m_OrgPos); QuickLinkItem( SI_INVENTORY, pRecvMsg->m_OrgPos, pRecvMsg->m_ToPos, rFromSlot.GetCode()); MouseHandler::Instance()->RollbackItemAtHand(); TCHAR szName1[INTERFACE_STRING_LENGTH]; BASE_ITEMINFO * pItemInfo = ItemInfoParser::Instance()->GetItemInfo(rFromSlot.GetCode()); if (pItemInfo) { g_InterfaceManager.GetItemName( rFromSlot.GetCode(), szName1, INTERFACE_STRING_LENGTH ); // [%s] ¾ÆÀÌÅÛÀ» µî·Ï ÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( eST_ITEM_QUICK_LINKITEM, szText, INTERFACE_STRING_LENGTH ); _stprintf( szMessage, szText, szName1 ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); } } break; case CG_ITEM_QUICK_LINKITEM_NAK: { MSG_CG_ITEM_QUICK_LINKITEM_NAK * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKITEM_NAK *)pMsg; #if defined( _DEBUG ) g_InterfaceManager.ShowMessageBox( _T("CG_ITEM_QUICK_LINKITEM_NAK"), 10000, NULL, 0 ); #endif NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); } break; case CG_ITEM_QUICK_LINKSKILL_ACK: { MSG_CG_ITEM_QUICK_LINKSKILL_ACK * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKSKILL_ACK *)pMsg; SCSlotContainer * pFromContainer = (SCSlotContainer *)GetContainer(SI_SKILL); // ÄüÀ¸·Î ¸µÅ© QuickContainer * pQuickDlg = (QuickContainer * )GetItemContainerDialog(SI_QUICK); SCSkillSlot * pSkillSlot = NULL; //¸µÅ©¸¦ °É¾îÁØ´Ù. QuickLinkSkill( SI_SKILL, pRecvMsg->m_SkillCode, pRecvMsg->m_ToPos); MouseHandler::Instance()->RemoveItemAtHand(); pSkillSlot = const_cast(this->GetSkillSlotByCode( pRecvMsg->m_SkillCode ) ); if (pSkillSlot) { TCHAR szSkillName[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( pSkillSlot->GetSkillInfo()->m_dwSkillNcode, szSkillName, INTERFACE_STRING_LENGTH); // [%s] ½ºÅ³À» µî·Ï Çß½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( eST_ITEM_QUICK_LINKSKILL, szText, INTERFACE_STRING_LENGTH); _stprintf( szMessage, szText, szSkillName ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage); // ½ºÅ³ µî·Ï ÇÏ´Â ¼Ò¸® ItemManager::Instance()->PlaySlotSound(eSLOT_SOUND_TYPE_LINK, pSkillSlot); } } break; case CG_ITEM_QUICK_LINKSKILL_NAK: { MSG_CG_ITEM_QUICK_LINKSKILL_NAK * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKSKILL_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); } break; case CG_ITEM_QUICK_UNLINK_ACK: { MSG_CG_ITEM_QUICK_UNLINK_ACK * pRecvMsg = (MSG_CG_ITEM_QUICK_UNLINK_ACK *)pMsg; SCSlotContainer * pContainer = GetContainer(SI_QUICK); assert(pContainer); if(!pContainer) return; QuickSlot & rQuickSlot = (QuickSlot &)pContainer->GetSlot(pRecvMsg->m_atPos); switch ( rQuickSlot.GetOrgSlotType() ) { case ST_ITEM: { TCHAR szName1[INTERFACE_STRING_LENGTH]; BASE_ITEMINFO * pItemInfo = ItemInfoParser::Instance()->GetItemInfo(rQuickSlot.GetOrgCode()); if (pItemInfo) { g_InterfaceManager.GetItemName(rQuickSlot.GetOrgCode(), szName1, INTERFACE_STRING_LENGTH); // [%s] ¾ÆÀÌÅÛÀ» ÇØÁ¦ ÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(eST_ITEM_QUICK_UNLINK_ITEM, szText, INTERFACE_STRING_LENGTH); _stprintf(szMessage,szText, szName1); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage); } } break; case ST_SKILL: { SCSkillSlot * pSkillSlot = const_cast(this->GetSkillSlotByCode( rQuickSlot.GetOrgCode()) ); if (pSkillSlot) { TCHAR szSkillName[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( pSkillSlot->GetSkillInfo()->m_dwSkillNcode, szSkillName, INTERFACE_STRING_LENGTH); // [%s] ½ºÅ³À» ÇØÁ¦ ÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( eST_ITEM_QUICK_UNLINK_SKILL, szText, INTERFACE_STRING_LENGTH); _stprintf(szMessage, szText, szSkillName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage); } } break; } pContainer->DeleteSlot(pRecvMsg->m_atPos, NULL); MouseHandler::Instance()->RemoveItemAtHand(); ItemManager::Instance()->PlaySlotSound(eSLOT_SOUND_TYPE_UNLINK, (SCSlot *)&rQuickSlot); } break; case CG_ITEM_QUICK_UNLINK_NAK: { MSG_CG_ITEM_QUICK_UNLINK_NAK * pRecvMsg = (MSG_CG_ITEM_QUICK_UNLINK_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); } break; case CG_ITEM_QUICK_MOVE_ACK: { MSG_CG_ITEM_QUICK_MOVE_ACK * pRecvMsg = (MSG_CG_ITEM_QUICK_MOVE_ACK *)pMsg; SCSlotContainer * pFromContainer = ItemManager::Instance()->GetContainer( SI_QUICK ); QuickSlot & rQuickSlot = (QuickSlot &)pFromContainer->GetSlot(pRecvMsg->m_fromPos); ItemManager::Instance()->SimplexMoveLinkItem( SI_QUICK, pRecvMsg->m_fromPos, pRecvMsg->m_toPos ); MouseHandler::Instance()->RemoveItemAtHand(); } break; case CG_ITEM_QUICK_MOVE_NAK: { MSG_CG_ITEM_QUICK_MOVE_NAK * pRecvMsg = (MSG_CG_ITEM_QUICK_MOVE_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); } break; /////////////////////////////////////////////////////////////////////////////////////////// case CG_ITEM_PICK_ACK: { MSG_CG_ITEM_PICK_ACK * pRecvMsg = (MSG_CG_ITEM_PICK_ACK *)pMsg; ItemManager::Instance()->InsertInventoryTotalInfo( PICK, pRecvMsg->m_ItemInfo); } break; case CG_ITEM_PICK_NAK: { MSG_CG_ITEM_PICK_NAK * pRecvMsg = (MSG_CG_ITEM_PICK_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); Item *pItem = (Item *)g_ObjectManager.GetObject( pRecvMsg->m_dwFieldItemObjectKey ); if( pItem ) { pItem->SetSendPickPacket( FALSE ); pItem->InitState(STATE::ITEM_DROP_STATE, g_CurTime); } } break; case CG_ITEM_DROP_ACK: { MSG_CG_ITEM_DROP_ACK * pRecvMsg = (MSG_CG_ITEM_DROP_ACK *)pMsg; SCItemSlot DropItem; SCSlotContainer * pContainer = GetContainer(pRecvMsg->m_atIndex); assert(pContainer); if(!pContainer) return; assert(!pContainer->IsEmpty( pRecvMsg->m_atPos )); SCSlot & rDropSlot = pContainer->GetSlot( pRecvMsg->m_atPos ); pContainer->DeleteSlot(pRecvMsg->m_atPos, &DropItem); MouseHandler::Instance()->RemoveItemAtHand(); } break; case CG_ITEM_PK_DROP_ITEM_CMD: { MSG_CG_ITEM_PK_DROP_ITEM_CMD * pRecvMsg = (MSG_CG_ITEM_PK_DROP_ITEM_CMD *)pMsg; SCItemSlot DropItem; SCSlotContainer * pContainer = GetContainer(pRecvMsg->m_atIndex); assert(pContainer); if(!pContainer) return; assert(!pContainer->IsEmpty( pRecvMsg->m_atPos )); SCSlot & rDropSlot = pContainer->GetSlot( pRecvMsg->m_atPos ); SLOTCODE itemCode=rDropSlot.GetCode(); pContainer->DeleteSlot(pRecvMsg->m_atPos, &DropItem); MouseHandler::Instance()->RemoveItemAtHand(); TCHAR szName[INTERFACE_STRING_LENGTH] ={0,}; g_InterfaceManager.GetItemName(itemCode, szName, INTERFACE_STRING_LENGTH); TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp[INTERFACE_STRING_LENGTH]; // PK·Î ÀÎÇØ [%s] ¾ÆÀÌÅÛÀ» ¶³¾î¶ß·È½À´Ï´Ù. 5132 g_InterfaceManager.GetInterfaceString(eST_PKED_AND_DROP_ITEM , szTemp ,INTERFACE_STRING_LENGTH); Sprintf(szMessage, szTemp, szName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } break; case CG_ITEM_DROP_NAK: { MSG_CG_ITEM_DROP_NAK * pRecvMsg = (MSG_CG_ITEM_DROP_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); // CG_ITEM_DROP_NAK WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); #if defined( _DEBUG ) g_InterfaceManager.ShowMessageBox( _T("CG_ITEM_DROP_NAK"), 10000, &Color, 0 ); #endif } break; case CG_ITEM_COMBINE_ACK: { MSG_CG_ITEM_COMBINE_ACK * pRecvMsg = (MSG_CG_ITEM_COMBINE_ACK *)pMsg; SCSlotContainer * pFromContainer = GetContainer( pRecvMsg->m_fromIndex ); SCSlotContainer * pToContainer = GetContainer( pRecvMsg->m_toIndex ); SCSlot & rToSlot = (pToContainer->GetSlot(pRecvMsg->m_toPos)); SCSlot & rFromSlot = (pFromContainer->GetSlot(pRecvMsg->m_fromPos)); CODETYPE ItemCode = rToSlot.GetCode(); BASE_ITEMINFO * pItemInfo = ItemInfoParser::Instance()->GetItemInfo( ItemCode ); WORD wToCount = rToSlot.GetNum(); WORD wFromCount = rFromSlot.GetNum(); WORD wCombineCount = wToCount + wFromCount; SCItemSlot & rItemToSlot = (SCItemSlot &)rToSlot; MouseHandler::Instance()->SetDivideItemOff(); if (pRecvMsg->combine_quantity_ == 0 && wCombineCount > rItemToSlot.GetMaxNum()) { WORD wRemainCount = wCombineCount - rItemToSlot.GetMaxNum(); rToSlot.SetNum( rItemToSlot.GetMaxNum() ); rFromSlot.SetNum( (DURATYPE)wRemainCount ); MouseHandler::Instance()->RollbackItemAtHand(); } else { SCItemSlot ItemSlot; if (pRecvMsg->combine_quantity_ != 0)//³ª´«°æ¿ì { rToSlot.SetNum(pRecvMsg->combine_quantity_); WORD wRemainCount = wCombineCount - pRecvMsg->combine_quantity_; rFromSlot.SetNum((DURATYPE)wRemainCount); } else { rToSlot.SetNum( (DURATYPE)wCombineCount ); pFromContainer->DeleteSlot( pRecvMsg->m_fromPos, &ItemSlot); } MouseHandler::Instance()->RemoveItemAtHand(); } g_InterfaceManager.UpdateQuestInfo();// Äù½ºÆ® Á¤º¸ °»½Å ItemManager::Instance()->PlaySlotSound(eSLOT_SOUND_TYPE_PUT, (SCSlot *)&rToSlot); } break; case CG_ITEM_COMBINE_NAK: { MSG_CG_ITEM_COMBINE_NAK * pRecvMsg = (MSG_CG_ITEM_COMBINE_NAK *)pMsg; MouseHandler::Instance()->RollbackItemAtHand(); NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); #if defined( _DEBUG ) // CG_ITEM_COMBINE_NAK WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); g_InterfaceManager.ShowMessageBox( _T("CG_ITEM_COMBINE_NAK"), 10000, &Color, 0 ); #endif } break; case CG_ITEM_DELETE_CMD: { MSG_CG_ITEM_DELETE_CMD * pRecvMsg = (MSG_CG_ITEM_DELETE_CMD *)pMsg; // »èÁ¦ÇÏ·Á´Â ¾ÆÀÌÅÛÀÌ PC¹æÈ¿°ú¾ÆÀÌÅÛÀΰæ¿ì, if( xGetHeroData()->GetPCBangItemData().IsActive() == true ) { if( pRecvMsg->m_atIndex == SI_INVENTORY && pRecvMsg->m_atPos == xGetHeroData()->GetPCBangItemData().GetItemPosition() ) { POSTYPE current_equiped_item_position = xGetHeroData()->GetPCBangItemData().GetItemPosition(); if( SCItemSlot* pItem = ItemManager::Instance()->GetInventoryItem( current_equiped_item_position ) ) { pItem->OnUnEquip(); } // ÇØÁ¦ nsSlot::TOGGLE_ITEMS data; data.clear(); xGetHeroData()->SetPCBangItemData(data); g_pHero->RefreshPCBangItemEffect(); g_pHero->UpdateItemAttrCalculator(); g_pHero->UpdateSkillAttr(); } } DeleteItemCmd(pRecvMsg->m_atIndex, pRecvMsg->m_atPos, 1, (eITEM_DELETE_RESULT)pRecvMsg->m_byReason); } break; case CG_ITEM_EXTRAINVENTORY_ADD_CMD: { MSG_CG_ITEM_EXTRAINVENTORY_ADD_CMD * pRecvMsg = (MSG_CG_ITEM_EXTRAINVENTORY_ADD_CMD *)pMsg; if (g_pHero) { g_pHero->ResizeInventoryTotalInfo(pRecvMsg->m_ExtraInventoryTabCount); } // 5871 Á¤»óÀûÀ¸·Î ÅÜÀÌ È®Àå µÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(5871, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } break; case CG_ITEM_USE_ACK: { MSG_CG_ITEM_USE_ACK * pRecvMsg = (MSG_CG_ITEM_USE_ACK *)pMsg; // ¾ÆÀÌÅÛÀ» »ç¿ëÇØ¶ó. switch (pRecvMsg->m_atIndex) { case SI_INVENTORY: { MessageforItem(pRecvMsg->m_atPos); UseInventoryItem(pRecvMsg->m_atIndex, pRecvMsg->m_atPos); } break; case SI_EQUIPMENT: { } break; } } break; case CG_ITEM_USE_NAK: { MSG_CG_ITEM_USE_NAK * pRecvMsg = (MSG_CG_ITEM_USE_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_ErrorCode); #if defined( _DEBUG ) // CG_ITEM_USE_NAK WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); g_InterfaceManager.ShowMessageBox( _T("CG_ITEM_USE_NAK"), 10000, &Color, 0 ); #endif } break; case CG_ITEM_USE_MOTION_BRD: { MSG_CG_ITEM_USE_MOTION_BRD* pRecvMsg = (MSG_CG_ITEM_USE_MOTION_BRD*)pMsg; Object* pObj = g_ObjectManager.GetObject(pRecvMsg->m_dwAttackerKey); if (pObj && pObj->IsKindOfObject(PLAYER_OBJECT)) { Player* pPlayer = (Player*)pObj; BASE_ITEMINFO* pItemInfo = ItemInfoParser::Instance()->GetItemInfo(pRecvMsg->m_ItemCode); if (pItemInfo) { switch (pItemInfo->m_wType) { case eITEMTYPE_TORCH: case eITEMTYPE_POLLEN: case eITEMTYPE_FIRECRACKER: case eITEMTYPE_MINE: { PLAYER_ACTION action; ZeroMemory(&action, sizeof(action)); action.ActionID = ACTION_FIRECRACKER; action.FIRECRACKER.dwItemCode = pRecvMsg->m_ItemCode; action.FIRECRACKER.vTargetPos = pRecvMsg->m_wvMainTargetPos; pPlayer->PutAction(&action); } break; } } } } break; case CG_ITEM_USE_MOTION_NAK: { MSG_CG_ITEM_USE_MOTION_NAK * pRecvMsg = (MSG_CG_ITEM_USE_MOTION_NAK *) pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_byErrorCode); } break; case CG_ITEM_SELL_ACK: { MSG_CG_ITEM_SELL_ACK * pRecvMsg = (MSG_CG_ITEM_SELL_ACK *)pMsg; SCItemSlot DeleteSlot; SCSlotContainer * pContainer = GetContainer(pRecvMsg->m_atIndex); assert(pContainer); if(!pContainer) return; if (pRecvMsg->sell_quantity_ != 0) { pContainer->DeleteSlot(pRecvMsg->m_atPos, &DeleteSlot); DeleteSlot.SetNum((DeleteSlot.GetNum() - pRecvMsg->sell_quantity_)); pContainer->InsertSlot(pRecvMsg->m_atPos, DeleteSlot); DeleteSlot.SetNum(pRecvMsg->sell_quantity_); } else { pContainer->DeleteSlot(pRecvMsg->m_atPos, &DeleteSlot); } ShopDialog * pShopDlg = (ShopDialog *)g_InterfaceManager.GetDialog( InterfaceManager::DIALOG_SHOP ); if( pShopDlg ) { // ÆÇ¸ÅÇÑ ¾ÆÀÌÅÛ È÷½ºÅ丮 ¸ñ·Ï¿¡ Ãß°¡. pShopDlg->PushHistorySlot(DeleteSlot); } if (0 == DeleteSlot.GetCode()) { // ºñ¿öÀÖ¾ú´Âµ¥ ¾îÄÉÆÈ¾Ò´Ù³Ä? // ¾î·°Å³ª ¼­¹ö¿¡¼­ Ç϶ó°í ÇÏ´Ï ±×³É ÇØ¾ß°ÚÁö¸¸ // Å×½ºÆ®¿ëÀ¸·Î ³öµÐ´Ù. assert("CG_ITEM_SELL_ACK"); } if (MouseHandler::Instance()->IsExistItemAtHand()) { MouseHandler::Instance()->RemoveItemAtHand(); } assert(g_pHero); if(!g_pHero) return; g_pHero->SetMoney(pRecvMsg->m_Money); } break; case CG_ITEM_SELL_NAK: { MSG_CG_ITEM_SELL_NAK * pRecvMsg = (MSG_CG_ITEM_SELL_NAK *)pMsg; if (MouseHandler::Instance()->IsExistItemAtHand()) { MouseHandler::Instance()->RollbackItemAtHand(); } NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); } break; case CG_ITEM_DELETE_ACK: { MSG_CG_ITEM_DELETE_ACK * pRecvMsg = (MSG_CG_ITEM_DELETE_ACK *)pMsg; SCSlotContainer * pContainer = GetContainer(SI_INVENTORY); if ( pContainer ) { pContainer->DeleteSlot( GetPendingDeleteItemPos(),NULL); } MouseHandler::Instance()->UnLockWasteDeleteItem(); } break; case CG_ITEM_DELETE_NAK: { MSG_CG_ITEM_DELETE_NAK * pRecvMsg = (MSG_CG_ITEM_DELETE_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_byErrorCode); MouseHandler::Instance()->UnLockWasteDeleteItem(); } break; case CG_ITEM_CHANGE_DURA_CMD: { MSG_CG_ITEM_CHANGE_DURA_CMD * pRecvMsg = (MSG_CG_ITEM_CHANGE_DURA_CMD *)pMsg; SCSlotContainer * pContainer = ItemManager::Instance()->GetContainer( SI_EQUIPMENT ); if ( pContainer ) { assert( !pContainer->IsEmpty( pRecvMsg->m_EquipPos ) ); if ( !pContainer->IsEmpty( pRecvMsg->m_EquipPos ) ) { SCItemSlot & rItemSlot = (SCItemSlot &)pContainer->GetSlot( pRecvMsg->m_EquipPos ); assert( rItemSlot.GetCode() == pRecvMsg->m_ItemCode ); rItemSlot.SetDura( pRecvMsg->m_Dura ); g_pHero->GetHeroEquipContainer()->OnChangedEquipItemDurability(rItemSlot); #ifdef _NA_000000_20120417_EQUIPMENTS_CALCULATOR_CHANGES_FOR_DEAD ItemAttrCalculator itemCalc(*(g_pHero->GetPlayerAttribute()), g_pHero->GetEquipmentContainer()); itemCalc.EquipAll(!!g_pHero->GetPCBangMode(), false, g_pHero->GetLevel()); g_pHero->GetPlayerAttribute()->Update(); #endif //_NA_000000_20120417_EQUIPMENTS_CALCULATOR_CHANGES_FOR_DEAD } if (g_pHero) { if (0 == pRecvMsg->m_Dura) { // ³»±¸µµ°¡ 0ÀÌ µÇ¾úÀ» ¶§ ¿ÜÇü °»½ÅÀ» ÇØÁà¾ß ÇÑ´Ù. g_pHero->RefreshAppearRender(); GlobalFunc::EquipmentPlayerRefreshAppearRender(); TCHAR szName[INTERFACE_STRING_LENGTH] ={0,}; g_InterfaceManager.GetItemName(pRecvMsg->m_ItemCode, szName, INTERFACE_STRING_LENGTH); TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp[INTERFACE_STRING_LENGTH] ={0,}; //5147 %sÀÇ ³»±¸µµ°¡ 0À̵Ǿú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( 5147 , szTemp ,INTERFACE_STRING_LENGTH); Sprintf(szMessage, szTemp , szName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } EnduranceDIalog* pEnduranceDlg = static_cast (g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_ENDURANCE)); if(pEnduranceDlg) { pEnduranceDlg->UpdateEquipEnduranceState(); } } } break; case CG_ITEM_REPAIR_DURA_ACK: { MSG_CG_ITEM_REPAIR_DURA_ACK * pRecvMsg = (MSG_CG_ITEM_REPAIR_DURA_ACK *)pMsg; if ( pRecvMsg->m_bAllRepair ) { // Equip¿¡ ÀÖ´Â ¸ðµç ¾ÆÀÌÅÛÀÇ ³»±¸·ÂÀ» Ç®·Î ä¿öÁà¶ó RepairItemAll( SI_EQUIPMENT ); // 5950 ÀåÂøµÈ ¾ÆÀÌÅÛÀÌ ¸ðµÎ ¼ö¸®µÇ¾ú½À´Ï´Ù. TCHAR szMessage[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString(5950, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CENTER_SHOW, szMessage); } else { // ƯÁ¤ ¾ÆÀÌÅÛ¿¡ ³»±¸·ÂÀ» ä¿öÁà¶ó. RepairItem( pRecvMsg->m_SlotIndex, pRecvMsg->m_SlotPos ); SCSlotContainer * pContainer = GetContainer(pRecvMsg->m_SlotIndex); if ( pContainer ) { SCSlot & rSlot = pContainer->GetSlot( pRecvMsg->m_SlotPos ); // ¸Þ½ÃÁö Ãâ·Â TCHAR szName[INTERFACE_STRING_LENGTH] ={0,}; TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szResult[INTERFACE_STRING_LENGTH] = {0,}; // 5951 [%s]¾ÆÀÌÅÛÀÌ ¼ö¸®µÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(5951, szMessage, INTERFACE_STRING_LENGTH); g_InterfaceManager.GetItemName(rSlot.GetCode(), szName, INTERFACE_STRING_LENGTH); Snprintf( szResult, INTERFACE_STRING_LENGTH-1, szMessage, szName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szResult); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CENTER_SHOW, szResult); SCItemSlot & rItemSlot = (SCItemSlot &)rSlot; if(rItemSlot.IsLimited()) { ZeroMemory(szMessage, sizeof(szMessage)); // 6055 Àåºñ ¼ö¸®·Î ÀÎÇØ ÃÖ´ë ³»±¸µµ°¡ 2°¨¼ÒÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(6055, szMessage, INTERFACE_STRING_LENGTH); uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_Verify(szMessage); } } } if ( g_pHero ) { g_pHero->SetMoney( pRecvMsg->m_Money ); g_pHero->UpdateItemAttrCalculator(); g_pHero->UpdateSkillAttr(); g_pHero->RefreshAppearRender(); } GlobalFunc::EquipmentPlayerRefreshAppearRender(); EnduranceDIalog* pEnduranceDlg = static_cast (g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_ENDURANCE)); if(pEnduranceDlg) { pEnduranceDlg->UpdateEquipEnduranceState(); } } break; case CG_ITEM_REPAIR_DURA_NAK: { MSG_CG_ITEM_REPAIR_DURA_NAK * pRecvMsg = (MSG_CG_ITEM_REPAIR_DURA_NAK *)pMsg; MouseHandler::Instance()->RollbackItemAtHand(); NoticeReasonItemErrorCode(pRecvMsg->m_byErrorCode); } break; case CG_ITEM_EXCHANGE_ACK: { SCItemSlot DeleteSlot; MSG_CG_ITEM_EXCHANGE_ACK * pRecvMsg = (MSG_CG_ITEM_EXCHANGE_ACK *)pMsg; if (MouseHandler::Instance()->IsExistItemAtHand()) { MouseHandler::Instance()->RemoveItemAtHand(); } SCSlotContainer * pContainer = GetContainer(m_PendingExchangeContainIdx); assert(pContainer); if(!pContainer) return; pContainer->DeleteSlot(m_PendingExchangeItemPos, NULL); this->InsertInventoryTotalInfo(PICK, pRecvMsg->m_tagInventory ); } break; case CG_ITEM_EXCHANGE_NAK: { MSG_CG_ITEM_EXCHANGE_NAK * pRecvMsg = (MSG_CG_ITEM_EXCHANGE_NAK *)pMsg; if (MouseHandler::Instance()->IsExistItemAtHand()) { MouseHandler::Instance()->RollbackItemAtHand(); } NoticeReasonItemErrorCode(pRecvMsg->m_byErrorCode); } break; case CG_ITEM_BUY_ACK: { MSG_CG_ITEM_BUY_ACK * pRecvMsg = (MSG_CG_ITEM_BUY_ACK *)pMsg; InsertInventoryTotalInfo( BUY, pRecvMsg->m_TotalInfo ); assert(g_pHero); if(!g_pHero) return; if (pRecvMsg->m_ShopType == SHOP_TYPE_OF_ACCUMULATE) { uiCharacterStatusMan* character_status_manager = GET_DIALOG_MANAGER(uiCharacterStatusMan, UIMAN_CHARACTERSTATUS); if (character_status_manager != NULL) { character_status_manager->set_accumulate_point((DWORD)pRecvMsg->m_Money); } } else // ÀÏ¹Ý ÇÏÀÓ, // ȤÀº ¾ÆÀÌÅÛ(»ó°ü¾øÀ½) { g_pHero->SetMoney(pRecvMsg->m_Money); } } break; case CG_ITEM_BUY_NAK: { MSG_CG_ITEM_BUY_NAK * pRecvMsg = (MSG_CG_ITEM_BUY_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); // MSG_CG_ITEM_BUY_NAK WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); #if defined( _DEBUG ) g_InterfaceManager.ShowMessageBox( _T("MSG_CG_ITEM_BUY_NAK"), 10000, &Color, 0 ); #endif } break; case CG_ITEM_INVENTORY_PWD_LOCKING_ACK: case CG_ITEM_INVENTORY_PWD_LOCKING_NAK: case CG_ITEM_INVENTORY_PWD_SETTING_ACK: case CG_ITEM_INVENTORY_PWD_SETTING_NAK: case CG_ITEM_INVENTORY_PWD_CHECK_ACK: g_InterfaceManager.NetworkProc( InterfaceManager::DIALOG_INVENTORY, pMsg); break; case CG_ITEM_EXTRASTONE_USE_ACK: case CG_ITEM_EXTRASTONE_USE_NAK: case CG_ITEM_SOCKET_FILL_SYN: case CG_ITEM_SOCKET_FILL_ACK: case CG_ITEM_SOCKET_FILL_NAK: case CG_ITEM_ACCESSORY_CREATE_ACK: case CG_ITEM_ACCESSORY_CREATE_NAK: { this->OnrecvItemComposite(pMsg); } break; case CG_ITEM_ENCHANT_SUCCESS_ACK: case CG_ITEM_ENCHANT_FAILED_ACK: case CG_ITEM_ENCHANT_NAK: { this->OnrecvItemEnchant(pMsg); } break; case CG_ITEM_COMPOSE_SUCCESS_ACK: case CG_ITEM_COMPOSE_FAILED_ACK: case CG_ITEM_COMPOSE_NAK: { } break; case CG_ITEM_CRYSTALIZE_SUCCESS_ACK: case CG_ITEM_CRYSTALIZE_FAILED_ACK: case CG_ITEM_CRYSTALIZE_NAK: { } break; case CG_ITEM_USE_RANDOM_ITEM_ACK: { //this->UnsetPKBool(ePKBOOL_ITEM_COMPOSITE_CRYSTALIZE); MSG_CG_ITEM_USE_RANDOM_ITEM_ACK * pRecvMsg = (MSG_CG_ITEM_USE_RANDOM_ITEM_ACK *)pMsg; // ƯÁ¤ À§Ä¡ÀÇ ·£´ý ¾ÆÀÌÅÛÀ» ¼ÒºñÇÑ´Ù. POSTYPE pTargetPos; MouseHandler::Instance()->GetRandomItemPOS(pTargetPos); ItemManager::Instance()->DeleteItem( SI_INVENTORY, pTargetPos, 1, COMPOSE_USE ); ItemManager::Instance()->InsertInventoryTotalInfo( CREATE, pRecvMsg->m_ItemInfo ); //Àκ¥Å丮´Â ¶ôÇ®±â uiInventoryMan* inventory_manager = GET_DIALOG_MANAGER(uiInventoryMan, UIMAN_INVENTORY); if (inventory_manager != NULL) { inventory_manager->UnlockInventoryUI(); } } break; case CG_ITEM_USE_RANDOM_ITEM_NAK: { //this->UnsetPKBool(ePKBOOL_ITEM_COMPOSITE_CRYSTALIZE); MSG_CG_ITEM_USE_RANDOM_ITEM_NAK * pRecvMsg = (MSG_CG_ITEM_USE_RANDOM_ITEM_NAK *)pMsg; ItemManager::Instance()->NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); //Àκ¥Å丮´Â ¶ôÇ®±â uiInventoryMan* inventory_manager = GET_DIALOG_MANAGER(uiInventoryMan, UIMAN_INVENTORY); if (inventory_manager != NULL) { inventory_manager->UnlockInventoryUI(); } } break; case CG_ITEM_LOSE_ACK: { MSG_CG_ITEM_LOSE_ACK * pRecvMsg = (MSG_CG_ITEM_LOSE_ACK *)pMsg; DeleteInventoryTotalInfo(QUEST_DELETE, SI_INVENTORY, pRecvMsg->m_ItemInfo); } break; case CG_ITEM_OBTAIN_ITEM_CMD: { MSG_CG_ITEM_OBTAIN_ITEM_CMD * pRecvMsg = (MSG_CG_ITEM_OBTAIN_ITEM_CMD *)pMsg; InsertInventoryTotalInfo(REWARD, pRecvMsg->m_tagInventory); } break; #ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM case CG_ITEM_OBTAIN_ITEM_NAK: { MSG_CG_ITEM_OBTAIN_ITEM_NAK * pRecvMsg = (MSG_CG_ITEM_OBTAIN_ITEM_NAK *)pMsg; TCHAR error_string[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetStringRewardError( pRecvMsg->m_byErrorCode, error_string, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Error( eOUTPUT_MSG_CHAT, error_string); } break; #endif //_NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM // ¼ÒÀ¯±Ç ¼Ò¸ê case CG_ITEM_FREE_OWNERSHIP_BRD: { MSG_CG_ITEM_FREE_OWNERSHIP_BRD * pRecvMsg = (MSG_CG_ITEM_FREE_OWNERSHIP_BRD *)pMsg; Item *pItem = (Item *)g_ObjectManager.GetObject(pRecvMsg->m_dwObjectKey); if (pItem) { pItem->SetOwner(0); } } break; case CG_ITEM_BLOCKC_CMD: { MSG_CG_ITEM_BLOCKC_CMD * pRecvMsg = (MSG_CG_ITEM_BLOCKC_CMD *)pMsg; SCSlotContainer * pContainer = GetContainer(pRecvMsg->m_SlotIdx); assert(pContainer); if ( pContainer ) { // Á¤»óÀûÀÎ À§Ä¡ À̸鼭 // ÇØ´ç À§Ä¡¿¡ ¾ÆÀÌÅÛÀÌ ÀÖ¾î¾ßÇÔ. if ( pRecvMsg->m_SlotPos >= 0 && pRecvMsg->m_SlotPos < pContainer->GetMaxSlotNum() && !pContainer->IsEmpty( pRecvMsg->m_SlotPos ) ) { SCSlot & rSlot = pContainer->GetSlot( pRecvMsg->m_SlotPos ); assert( ST_ITEM == rSlot.GetSlotType() ); if ( ST_ITEM == rSlot.GetSlotType() ) { SCItemSlot & rItemSlot = (SCItemSlot &)rSlot; rItemSlot.SetBlocked(TRUE); // ½Ã¸®¾ó Áߺ¹À¸·Î ÀÎÇØ ¾ÆÀÌÅÛÀ» »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù. ¿î¿µÆÀ¿¡ ½Å°íÇØ Áֽñ⠹ٶø´Ï´Ù. 5024 g_InterfaceManager.GetInterfaceString(eST_ITEM_SERIAL_DUPLICATE , szMessage ,INTERFACE_STRING_LENGTH); uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_Verify(szMessage); } } } } break; case CG_ITEM_CHANGE_ITEM_INFO_CMD: { MSG_CG_ITEM_CHANGE_ITEM_INFO_CMD * pRecvMsg = (MSG_CG_ITEM_CHANGE_ITEM_INFO_CMD *)pMsg; SCSlotContainer * pAtContainer = GetContainer(pRecvMsg->m_SlotIndex); if ( pAtContainer ) { assert( !pAtContainer->IsEmpty( pRecvMsg->m_SlotPos ) ); assert( pRecvMsg->m_SlotPos < pAtContainer->GetMaxSlotNum() ); if (pRecvMsg->m_SlotPos >= pAtContainer->GetMaxSlotNum()) { GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("ÇØ´ç½½·Ô À§Ä¡°¡ À߸øµÈ À§Ä¡¿¡ °»½ÅµÇ·ÁÇÑ´Ù. ÇØ´ç ¸Þ½ÃÁö¸¦ º¸¸é ÇÁ·Î±×·¥ÆÀ¿¡ ¾Ë·ÁÁֽñ⠹ٶø´Ï´Ù.") ); return; } SCItemSlot ItemSlot(pRecvMsg->m_ItemStream); if (g_pHero) { g_pHero->OnUseItemWithCoolTime(ItemSlot.GetCode()); } pAtContainer->DeleteSlot(pRecvMsg->m_SlotPos, NULL); // ±âÁ¸Á¤º¸¸¦ Á¦°ÅÇØÁØ´Ù. ( ¾ÆÀÌÄÜ ¸®¼Ò½º¶§¹®¿¡ ¸ÕÀú Áö¿öÁØ´Ù ) pAtContainer->InsertSlot(pRecvMsg->m_SlotPos, ItemSlot); if( ItemSlot.GetItemInfo() ) { BYTE charge_subtype = ItemSlot.GetItemRuleInfo().charge_sub_type; TCHAR szText[INTERFACE_STRING_LENGTH] = {0,}; if (charge_subtype == eCHARGE_SUB_COORDINATE) { // 5936 ÇöÀç ÁÂÇ¥¸¦ ¼º°øÀûÀ¸·Î ÀúÀå ÇÏ¿´½À´Ï´Ù g_InterfaceManager.GetInterfaceString(5936, szText, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szText); } else if(ItemManager::CanPeriodExtend(&ItemSlot) == true) //<- ±â°£¿¬Àå °¡´É ¾ÆÀÌÅÛ Àϰæ¿ì { #ifdef __NA_001358_ENCHANT_UNIFICATION // no operation #else //__NA_001358_ENCHANT_UNIFICATION EnchantDialog * pDlg = (EnchantDialog *)g_InterfaceManager.GetDialog( InterfaceManager::DIALOG_ENCHANT ); if(pDlg) { //·°Å°¾ÆÀÌÅÛÀÇ °æ¿ì ÀÎþ¼º°ø½Ã¸Þ½ÃÁö ¸·±â if(pDlg->IsVisibleWindow() && pDlg->IsPendingEnchant(pRecvMsg->m_SlotPos)) { break; } } #endif //__NA_001358_ENCHANT_UNIFICATION TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,}; AskSocketIdentifyDialog* socket_identify_dialog = static_cast(GET_CAST_DIALOG(AskSocketIdentifyDialog, IM_ASSIST_MANAGER::SOCKET_IDENTIFY_DIALOG)); bool is_socket_identify = false; if (socket_identify_dialog) { is_socket_identify = socket_identify_dialog->is_socket_identify(); socket_identify_dialog->set_is_socket_identify(false); } if (socket_identify_dialog == false) { if(ItemSlot.IsExpiredWaitTime()) { //6867 %s ¾ÆÀÌÅÛÀÇ ±â°£ÀÌ ¸¸·áµÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( 6867,szTemp); } else { if( ItemSlot.IsExpiredTime() ) { //6867 %s ¾ÆÀÌÅÛÀÇ ±â°£ÀÌ ¸¸·áµÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( 6867,szTemp); } else { //6868 %s ¾ÆÀÌÅÛÀÇ ±â°£¿¬ÀåÀÌ ¿Ï·áµÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( 6868,szTemp); } } } TCHAR szItemName[INTERFACE_STRING_LENGTH] ={0,}; g_InterfaceManager.GetItemName(ItemSlot.GetCode(), szItemName); Snprintf(szText, INTERFACE_STRING_LENGTH-1, szTemp , szItemName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szText); } else if (charge_subtype == eCHARGE_SUB_COORDINATE_EX) { GlobalFunc::SetWayPointItemPending(false); } } } } break; case CG_ITEM_SOCKET_EXTRACT_SUCCESS_ACK: { MSG_CG_ITEM_SOCKET_EXTRACT_SUCCESS_ACK * pRecvMsg = (MSG_CG_ITEM_SOCKET_EXTRACT_SUCCESS_ACK *) pMsg; SCSlotContainer * pAtContainer = GetContainer(SI_INVENTORY); if( !pAtContainer ) return; SCItemSlot & rChargeItemSlot = (SCItemSlot &)pAtContainer->GetSlot( pRecvMsg->m_ChargeIntemPos ); // »ç¿ëÇÑ ÀÎþƮ º¸¼®ÀÇ Ä«¿îÆ® Çϳª³»¸°´Ù. SCItemSlot DeleteChargeItemSlot; if (rChargeItemSlot.IsOverlap()) { if (rChargeItemSlot.GetNum() > 1 ) { rChargeItemSlot.SetNum( rChargeItemSlot.GetNum()-1 ); pAtContainer->UpdateSlot(pRecvMsg->m_ChargeIntemPos, rChargeItemSlot ); } else { pAtContainer->DeleteSlot(pRecvMsg->m_ChargeIntemPos, &DeleteChargeItemSlot); assert(eITEMTYPE_SOCKETEXTRACT == DeleteChargeItemSlot.GetItemInfo()->m_wType && "¼ÒÄÏ(À¯·á)¾ÆÀÌÅÛÀ̾ƴѵ¥ Áö¿ü´Ù´Ï!!!!"); } } else { pAtContainer->DeleteSlot(pRecvMsg->m_ChargeIntemPos, &DeleteChargeItemSlot); assert(eITEMTYPE_SOCKETEXTRACT == DeleteChargeItemSlot.GetItemInfo()->m_wType && "¼ÒÄÏ(À¯·á)¾ÆÀÌÅÛÀ̾ƴѵ¥ Áö¿ü´Ù´Ï!!!!"); } // ¾ÆÀÌÅÛ Ã¤¿ö ÁÖ±â SCItemSlot InsertItemSlot(pRecvMsg->m_TargetItemStream); pAtContainer->DeleteSlot(pRecvMsg->m_TargetPos, NULL); pAtContainer->InsertSlot(pRecvMsg->m_TargetPos, InsertItemSlot); DWORD string_code = 0; TCHAR item_name[INTERFACE_STRING_LENGTH] = {0,}; TCHAR error_message[INTERFACE_STRING_LENGTH] = {0,}; TCHAR temp_string[INTERFACE_STRING_LENGTH] = {0,}; SCItemSlot &item_slot = (SCItemSlot &)pAtContainer->GetSlot(pRecvMsg->m_TargetPos); g_InterfaceManager.GetItemName(item_slot.GetCode(), item_name); switch(MouseHandler::Instance()->GetSocketRemoveType()) { case kZardGrade1: string_code = 5879; //[%s]ÀÇ ÇÏ±Þ ¼ÒÄÏ ¿É¼ÇÀ» »èÁ¦ÇÏ¿´½À´Ï´Ù. break; case kZardGrade2: string_code = 5913; //[%s]ÀÇ Áß±Þ ¼ÒÄÏ ¿É¼ÇÀ» »èÁ¦ÇÏ¿´½À´Ï´Ù. break; case kZardGrade3: string_code = 5880; //[%s]ÀÇ »ó±Þ ¼ÒÄÏ ¿É¼ÇÀ» »èÁ¦ÇÏ¿´½À´Ï´Ù. break; case kZardGrade4: string_code = 5914; //[%s]ÀÇ ÃÖ»ó±Þ ¼ÒÄÏ ¿É¼ÇÀ» »èÁ¦ÇÏ¿´½À´Ï´Ù. break; } if (string_code != 0) { g_InterfaceManager.GetInterfaceString(string_code, temp_string, INTERFACE_STRING_LENGTH); Sprintf(error_message, temp_string, item_name); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, error_message); } else { assert(!"ItemManager_PacketProc.cpp: not found zard_grade (Àðµå µî±ÞÀÌ À߸ø µÇ¾ú½À´Ï´Ù)"); } MouseHandler::Instance()->SetTryRemoveSocket(FALSE); MouseHandler::Instance()->RemoveMouseState(MouseHandler::SOCKET_REMOVE ); } break; case CG_ITEM_SOCKET_EXTRACT_NAK: { MSG_CG_ITEM_SOCKET_EXTRACT_NAK * pRecvMsg = (MSG_CG_ITEM_SOCKET_EXTRACT_NAK *) pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); MouseHandler::Instance()->SetTryRemoveSocket(FALSE); MouseHandler::Instance()->RemoveMouseState(MouseHandler::SOCKET_REMOVE ); } break; case CG_ITEM_INIT_STAT_ACK: { MSG_CG_ITEM_INIT_STAT_ACK * pRecvMsg = (MSG_CG_ITEM_INIT_STAT_ACK *)pMsg; DeleteItem( SI_INVENTORY, pRecvMsg->m_ItemSlotPos, pRecvMsg->m_wDecreaseValue, DELETE_STAT_INIT_ITEM ); } break; case CG_ITEM_INIT_STAT_NAK: { MSG_CG_ITEM_INIT_STAT_NAK * pRecvMsg = (MSG_CG_ITEM_INIT_STAT_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_ErrorCode); } break; case CG_ITEM_STAT_ONE_CHANGE_CMD: { MSG_CG_ITEM_STAT_ONE_CHANGE_CMD * pRecvMsg = (MSG_CG_ITEM_STAT_ONE_CHANGE_CMD *)pMsg; if (!g_pHero) return; eATTR_TYPE attrType = (eATTR_TYPE)pRecvMsg->m_AttrType; assert( attrType < eATTR_MAX && attrType >= 0 ); if(eATTR_TYPE_INVALID != attrType) { (*g_pHero->GetPlayerAttribute())[attrType][eATTR_KIND_BASE] = pRecvMsg->m_dwValue; g_pHero->GetPlayerAttribute()->Update(); } BASE_PLAYERINFO* pPlayInfo = g_pHero->GetCharInfo(); pPlayInfo->m_iRemainStat = pRecvMsg->m_iRemainStat; // updateÇÑ ½ºÅÝÀ» ¾ò¾î¿Â´Ù. g_pHero->GetPlayerAttribute()->GetCharInfo( pPlayInfo ); g_pHero->UpdateItemAttrCalculator(); g_pHero->UpdateSkillAttr(); } break; case CG_ITEM_STAT_ALL_CHANGE_CMD: { MSG_CG_ITEM_STAT_ALL_CHANGE_CMD * pRecvMsg = (MSG_CG_ITEM_STAT_ALL_CHANGE_CMD *)pMsg; if (!g_pHero) return; (*g_pHero->GetPlayerAttribute())[eATTR_STR][eATTR_KIND_BASE] = pRecvMsg->m_sStrength; (*g_pHero->GetPlayerAttribute())[eATTR_DEX][eATTR_KIND_BASE] = pRecvMsg->m_sDexterity; (*g_pHero->GetPlayerAttribute())[eATTR_VIT][eATTR_KIND_BASE] = pRecvMsg->m_sVitality; (*g_pHero->GetPlayerAttribute())[eATTR_INT][eATTR_KIND_BASE] = pRecvMsg->m_sInteligence; (*g_pHero->GetPlayerAttribute())[eATTR_SPR][eATTR_KIND_BASE] = pRecvMsg->m_sSpirit; (*g_pHero->GetPlayerAttribute())[eATTR_EXPERTY1][eATTR_KIND_BASE] = pRecvMsg->m_sSkillStat1; (*g_pHero->GetPlayerAttribute())[eATTR_EXPERTY2][eATTR_KIND_BASE] = pRecvMsg->m_sSkillStat2; BASE_PLAYERINFO* pPlayInfo = g_pHero->GetCharInfo(); pPlayInfo->m_iRemainStat = pRecvMsg->m_iRemainStat; g_pHero->GetPlayerAttribute()->Update(); // updateÇÑ ½ºÅÝÀ» ¾ò¾î¿Â´Ù. g_pHero->GetPlayerAttribute()->GetCharInfo( pPlayInfo ); g_pHero->UpdateItemAttrCalculator(); g_pHero->UpdateSkillAttr(); uiCharacterStatusMan::RefreshSimulationPlayerAttributes(); g_pHero->RefreshAppearRender(); GlobalFunc::EquipmentPlayerRefreshAppearRender(); // 5886 Á¤»óÀûÀ¸·Î ¸ðµç ½ºÅÈÀÌ ÃʱâÈ­ µÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( 5886, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, szMessage); } break; #ifdef __NA_001027_20080423_RANDOM_REWARD_EVENT_ case CG_ITEM_EXCHANGE_REWARD_ITEM_ACK: { MSG_CG_ITEM_EXCHANGE_REWARD_ITEM_ACK * pRecvMsg = (MSG_CG_ITEM_EXCHANGE_REWARD_ITEM_ACK*) pMsg; InsertInventoryTotalInfo(REWARD, pRecvMsg->m_ItemInfo); } break; case CG_ITEM_EXCHANGE_REWARD_ITEM_NAK: { MSG_CG_ITEM_EXCHANGE_REWARD_ITEM_NAK * pRecvMsg = ( MSG_CG_ITEM_EXCHANGE_REWARD_ITEM_NAK* )pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_ErrorCode); } break; #endif case CG_ITEM_HAMMER_OF_ALCHEMIST_ACK: { MSG_CG_ITEM_HAMMER_OF_ALCHEMIST_ACK * pRecvMsg = (MSG_CG_ITEM_HAMMER_OF_ALCHEMIST_ACK *) pMsg; UseInventoryItem(SI_INVENTORY, pRecvMsg->m_ChargeItemPos); MouseHandler::Instance()->SetTryUseChageItem(FALSE); SCItemSlot ResultItme(pRecvMsg->m_TargetItemStream); // »ý¼ºµÈ ¾ÆÀÌÅÛÀ» Àκ¥Å丮¿¡ ³Ö¾îÁØ´Ù. SCSlotContainer * pFromContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); if( ! pFromContainer ) break; pFromContainer->DeleteSlot(pRecvMsg->m_TargetItemPos , NULL); pFromContainer->InsertSlot(pRecvMsg->m_TargetItemPos , ResultItme); } break; case CG_ITEM_HAMMER_OF_ALCHEMIST_NAK: { MSG_CG_ITEM_HAMMER_OF_ALCHEMIST_NAK * pRecvMsg = (MSG_CG_ITEM_HAMMER_OF_ALCHEMIST_NAK *) pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); MouseHandler::Instance()->SetTryUseChageItem(FALSE); } break; case CG_ITEM_EXTEND_CASH_SLOT_CMD: { MSG_CG_ITEM_EXTEND_CASH_SLOT_CMD * pRecvMsg = (MSG_CG_ITEM_EXTEND_CASH_SLOT_CMD *) pMsg; HeroEquipmentContainer * pEquipContainer = (HeroEquipmentContainer *)ItemManager::Instance()->GetItemContainerDialog(SI_EQUIPMENT); if( pEquipContainer ) { pEquipContainer->ChargeItemExtendSlot(pRecvMsg->m_ExtraEquipCashSlotCount); } // À¯·á ¾ÆÀÌÅÛ ½½·ÔÀÌ È®ÀåµÇ¾ú½À´Ï´Ù 5871 GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, g_InterfaceManager.GetInterfaceString( 5871 ) ); } break; case CG_ITEM_SETITEM_CHANGE_BRD: { //Çϴ°Š¾ø´Ù. } break; case CG_ITEM_VALIDATION_OF_REIHALT_ACK: { uiFateItemSystem* pFateItemSystem= GET_CAST_DIALOG( uiFateItemSystem, IM_FATEITEM_SYSTEM::FATEITEM_DLG ); if( pFateItemSystem ) { MSG_CG_ITEM_VALIDATION_OF_REIHALT_ACK * pRecvMsg = ( MSG_CG_ITEM_VALIDATION_OF_REIHALT_ACK *) pMsg; //6327 ·°Å° ¾ÆÀÌÅÛ ´É·ÂÄ¡¸¦ °áÁ¤ÁßÀÔ´Ï´Ù, GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, g_InterfaceManager.GetInterfaceString(6327)); pFateItemSystem->SetTargetItemPos(pRecvMsg->m_TargetItemPos); //ÁÖÀÇ: ¹Ù·Î Àκ¥Å丮¿¡ ³Ö¾îÁִ°ÍÀÌ ¾Æ´Ï¶ó, °×ºí UI°¡ ¿Ï·áµÈ ÈÄ¿¡ Àκ¥Å丮¿¡ ¾ÆÀÌÅÛÀ» ³Ö¾îÁÙ°ÍÀÓ. SCItemSlot ResultItme(pRecvMsg->m_TargetItemStream); pFateItemSystem->SetResultItem(ResultItme); pFateItemSystem->SetFateItemProcessState(eFIS_RESULT_SUCCESS); } } break; case CG_ITEM_VALIDATION_OF_REIHALT_NAK: { MSG_CG_ITEM_VALIDATION_OF_REIHALT_NAK * pRecvMsg = ( MSG_CG_ITEM_VALIDATION_OF_REIHALT_NAK *) pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); //6330 ·°Å°¾ÆÀÌÅÛ ÀÎÁõ¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù. ´Ù½Ã ½ÃµµÇØ ÁֽʽÿÀ. GlobalFunc::OutputMsg_SysMsg(g_InterfaceManager.GetInterfaceString(6330)); //uiFateItemSystem * pFateItemSystem = ( uiFateItemSystem *) g_InterfaceManager.GetUserInterface(UI_FATE_ITEM_SYSTEM); uiFateItemSystem* pFateItemSystem= GET_CAST_DIALOG( uiFateItemSystem, IM_FATEITEM_SYSTEM::FATEITEM_DLG ); if( pFateItemSystem ) { pFateItemSystem->SetTargetItemLock(FALSE); pFateItemSystem->SetFateItemProcessState(eFIS_END); pFateItemSystem->InitBaseAtributeCaption(); } } break; case CG_ITEM_REPURCHASE_ACK: { MSG_CG_ITEM_REPURCHASE_ACK * pRecvMsg = (MSG_CG_ITEM_REPURCHASE_ACK *) pMsg; assert(g_pHero); if( !g_pHero) return; InsertInventoryTotalInfo( BUY, pRecvMsg->m_TotalInfo ); g_pHero->SetMoney(pRecvMsg->m_Money); ShopDialog * pShopDlg = (ShopDialog *)g_InterfaceManager.GetDialog( InterfaceManager::DIALOG_SHOP ); if( pShopDlg ) { pShopDlg->PopHistorySlot(); pShopDlg->SetPendingHistorySlot(-1); } } break; case CG_ITEM_REPURCHASE_NAK: { MSG_CG_ITEM_REPURCHASE_NAK * pRecvMsg = (MSG_CG_ITEM_REPURCHASE_NAK *) pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_ErrorCode); ShopDialog * pShopDlg = (ShopDialog *)g_InterfaceManager.GetDialog( InterfaceManager::DIALOG_SHOP ); if( pShopDlg ) { pShopDlg->SetPendingHistorySlot(-1); } } break; case CG_ITEM_EQUIP_ETHER_DEVICE_ACK: { MSG_CG_ITEM_EQUIP_ETHER_DEVICE_ACK * pRecvMsg = (MSG_CG_ITEM_EQUIP_ETHER_DEVICE_ACK *) pMsg; if( pRecvMsg->m_Result == RC_ITEM_SUCCESS ) { SCSlotContainer * pContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); if( pContainer ) { //¹«±â¿¡ ¿¡Å׸£ »ç¿ë°¡´ÉÇϵµ·Ï ¼ÂÆÃ SCItemSlot & rItemSlot = (SCItemSlot &) pContainer->GetSlot(pRecvMsg->m_WeaponItemPos); rItemSlot.SetEquipEtherDevice(TRUE); // ¿¡Å׸£ ÀåÂø ¾ÆÀÌÅÛ »èÁ¦Çϱâ SCItemSlot & rDeviceItemSlot = (SCItemSlot &) pContainer->GetSlot(pRecvMsg->m_DeviceItemPos); SCItemSlot DeleteSlot; if (rDeviceItemSlot.IsOverlap()) { if (rDeviceItemSlot.GetNum() > 1 ) { rDeviceItemSlot.SetNum( rDeviceItemSlot.GetNum()-1 ); pContainer->UpdateSlot(pRecvMsg->m_DeviceItemPos, rDeviceItemSlot ); } else { pContainer->DeleteSlot(pRecvMsg->m_DeviceItemPos, &DeleteSlot); assert(eITEMTYPE_ETHER_DEVICE == DeleteSlot.GetItemInfo()->m_wType); } } else { pContainer->DeleteSlot(pRecvMsg->m_DeviceItemPos, &DeleteSlot); assert(eITEMTYPE_ETHER_DEVICE == DeleteSlot.GetItemInfo()->m_wType); } MouseHandler::Instance()->SetMouseState( MouseHandler::NONE ); //¼º°ø ¸Þ¼¼Áö »Ñ¸®±â TCHAR szWeaponName[INTERFACE_STRING_LENGTH] ={0,}; g_InterfaceManager.GetItemName( rItemSlot.GetCode(), szWeaponName, INTERFACE_STRING_LENGTH -1 ); //6129 %s¿¡ ¿¡Å׸£ ¹æÃâÀåÄ¡¸¦ ÀåÂøÇÏ¿´½À´Ï´Ù. GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, g_InterfaceManager.GetInterfaceString(6129) , szWeaponName); } } else { NoticeReasonItemErrorCode(pRecvMsg->m_Result); } } break; case CG_ITEM_FIXED_AMOUNT_EX_ITEM_FIRE_UP_ACK: { MSG_CG_ITEM_FIXED_AMOUNT_EX_ITEM_FIRE_UP_ACK * pRecvMsg = (MSG_CG_ITEM_FIXED_AMOUNT_EX_ITEM_FIRE_UP_ACK *) pMsg; #ifdef _DEV_VER GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, _T("CG_ITEM_FIXED_AMOUNT_EX_ITEM_FIRE_UP_ACK:%d"),pRecvMsg->m_ResultCode); #endif if( pRecvMsg->m_ResultCode == RC_ITEM_SUCCESS ) { SCSlotContainer * pContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); if( pContainer ) { //6159 %s ¾ÆÀÌÅÛÀÌ È°¼ºÈ­µÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(6159,szText); SCItemSlot & rItemSlot = (SCItemSlot &)pContainer->GetSlot( pRecvMsg->m_FireUpItemPos); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szText,g_InterfaceManager.GetInterfaceString(rItemSlot.GetItemInfo()->m_NCode) ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } else { NoticeReasonItemErrorCode(pRecvMsg->m_ResultCode); } } break; #ifdef _NA_004035_20120227_COSTUME_ITEM case CG_ITEM_USE_COSTUME_ACK: { MSG_CG_ITEM_USE_COSTUME_ACK* message = (MSG_CG_ITEM_USE_COSTUME_ACK*)pMsg; if( message->is_equipped_costume_ == true ) { if( SCItemSlot* item = GetInventoryItem( message->costume_item_pos_ ) ) { item->OnEquip(); g_pHero->SetActivedCostumeItemSlotIndex( message->costume_item_pos_ ); g_pHero->SetCostumeItemCode( item->GetCode() ); g_pHero->RefreshAppearRender(TRUE); g_pHero->UpdateSkillAttr(); if( Player* pPlayer = (Player*)g_ObjectManager.GetObject(EQUIPMENT_CHARACTER_KEY) ) { pPlayer->SetCostumeItemCode( item->GetCode() ); pPlayer->RefreshAppearRender(TRUE); } } } else { if( g_pHero->GetCostumeItemCode() != 0 ) { if( SCItemSlot* item = GetInventoryItem( g_pHero->GetActivedCostumeItemSlotIndex() ) ) { item->OnUnEquip(); } } g_pHero->SetActivedCostumeItemSlotIndex( INVALID_SLOT_POS ); g_pHero->SetCostumeItemCode(0); g_pHero->RefreshAppearRender(TRUE); g_pHero->UpdateSkillAttr(); if( Player* pPlayer = (Player*)g_ObjectManager.GetObject(EQUIPMENT_CHARACTER_KEY) ) { pPlayer->SetCostumeItemCode(0); pPlayer->RefreshAppearRender(TRUE); } } } break; case CG_ITEM_USE_COSTUME_BRD: { MSG_CG_ITEM_USE_COSTUME_BRD* message = (MSG_CG_ITEM_USE_COSTUME_BRD*)pMsg; if( Character* character = g_ObjectManager.GetCharacter( message->object_key_) ) { character->SetCostumeItemCode( message->costume_item_code_ ); character->RefreshAppearRender(); } } break; #endif //_NA_004035_20120227_COSTUME_ITEM #ifdef _NA_008633_20160104_ADD_DECORATECOSTUME case CG_ITEM_USE_DECORATE_COSTUME_ACK: { MSG_CG_ITEM_USE_DECORATE_COSTUME_ACK* message = (MSG_CG_ITEM_USE_DECORATE_COSTUME_ACK*)pMsg; if( message->is_equipped_costume_ == true ) { if( SCItemSlot* item = GetInventoryItem( message->deco_costume_item_pos_ ) ) { item->OnEquip(); g_pHero->SetActivedDecorateCostumeItemSlotIndex( message->deco_costume_item_pos_ ); g_pHero->SetDecorateCostumeItemCode( item->GetCode() ); g_pHero->RefreshAppearRender(TRUE); g_pHero->UpdateSkillAttr(); if( Player* pPlayer = (Player*)g_ObjectManager.GetObject(EQUIPMENT_CHARACTER_KEY) ) { pPlayer->SetDecorateCostumeItemCode( item->GetCode() ); pPlayer->RefreshAppearRender(TRUE); } } } else { if( g_pHero->GetDecorateCostumeItemCode() != 0 ) { if( SCItemSlot* item = GetInventoryItem( g_pHero->GetActivedDecorateCostumeItemSlotIndex() ) ) { item->OnUnEquip(); } } g_pHero->SetActivedDecorateCostumeItemSlotIndex( INVALID_SLOT_POS ); g_pHero->SetDecorateCostumeItemCode(0); g_pHero->RefreshAppearRender(TRUE); g_pHero->UpdateSkillAttr(); if( Player* pPlayer = (Player*)g_ObjectManager.GetObject(EQUIPMENT_CHARACTER_KEY) ) { pPlayer->SetDecorateCostumeItemCode(0); pPlayer->RefreshAppearRender(TRUE); } } } break; case CG_ITEM_USE_DECORATE_COSTUME_BRD: { MSG_CG_ITEM_USE_DECORATE_COSTUME_BRD* message = (MSG_CG_ITEM_USE_DECORATE_COSTUME_BRD*)pMsg; if( Character* character = g_ObjectManager.GetCharacter( message->object_key_) ) { character->SetDecorateCostumeItemCode( message->deco_costume_item_code_ ); character->RefreshAppearRender(); } } break; #endif // _NA_008633_20160104_ADD_DECORATECOSTUME case CG_ITEM_USE_PET_ITEM_ACK: { MSG_CG_ITEM_USE_PET_ITEM_ACK * pRecvMsg = (MSG_CG_ITEM_USE_PET_ITEM_ACK *) pMsg; //ÇØ´ç¸Þ½ÃÁöÄÚµå int iResultCode = 0; if(!g_pHero) break; switch(pRecvMsg->m_Result) { //6393 ÆêÀ» ¼Òȯ ÇÏ¿´½À´Ï´Ù. case RC_ITEM_SUMMON_SUMMON_SUCCESS: { SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_INVENTORY); if(!pContainer)break; SCItemSlot & rItemSlot = (SCItemSlot &)pContainer->GetSlot(pRecvMsg->m_PetItemPos); //Æê±â°£Á¦ rItemSlot.StartQuantity(); g_pHero->CreatePetSummon(rItemSlot.GetImageItemInfo()->m_wSkillCode); //Æê»ý¼º g_pHero->UpdatePetInfo(pRecvMsg->m_PetItemPos); //Æê¾÷µ¥ÀÌÆ® iResultCode = 6393; rItemSlot.SetUserBlocked(TRUE); }break; //6394 ÇØÁ¦ ¼º°ø case RC_ITEM_SUMMON_RETURN_SUCCESS: { g_pHero->DeletePetSummon();//Æê¼Òȯ ÇØÁ¦ g_pHero->UpdateSkillAttr();//Æê¿É¼Ç ÇØÁ¦ iResultCode = 6394; //Æê±â°£Á¦ SCItemSlot & rItemSlot = (SCItemSlot &)g_pHero->GetSlotContainer(SI_INVENTORY)->GetSlot(g_pHero->GetPetItemPos()); rItemSlot.EndQuantity(); rItemSlot.SetUserBlocked(FALSE); //Æê ÀÚµ¿¼Òȯ(¼ÒȯÆÐŶÀü¼Û) if(g_pHero->IsPetChange()) { g_pHero->PetChangeOFF(); MSG_CG_ITEM_USE_PET_ITEM_SYN SendPacket; SendPacket.m_PetItemPos = g_pHero->PetChangePos(); GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket) ); } }break; //6395 ÆêÀÌ ¼Òȯ ÁßÀÔ´Ï´Ù.ÇØÁ¦ ÈÄ »ç¿ë ÇÏ½Ã±æ ¹Ù¶ø´Ï´Ù. case RC_ITEM_SUMMON_ALREADY_SUMMONED: iResultCode = 6395;break; //6396 ÆÖ ¾ÆÀÌÅÛÀÌ ¾Æ´Ï¿©¼­ »ç¿ë ÇÒ ¼ö ¾ø½À´Ï´Ù. case RC_ITEM_SUMMON_NOT_PET_ITEM: iResultCode = 6396;break; //?? ¼ÒȯµÈ ÆêÀÌ ¾ø´Âµ¥ RETURN ÇÏ·Á°í ÇÔ case RC_ITEM_SUMMON_NOT_SUMMONED_PET: iResultCode = 6397;break; //?? ¼ÒȯµÈ ÆêÀ̶û ÇØÁ¦ÇÏ·Á´Â ¾ÆÀÌÅÛÀÌ ¼­·Î ´Ù¸§. case RC_ITEM_SUMMON_MISMATCH_PET_ITEM: iResultCode = 6395;break; //6391 Æ÷¸¸°¨ÀÌ ºÎÁ·ÇÏ¿© ÆêÀ» ¼ÒȯÇÒ¼ö¾ø½À´Ï´Ù. case RC_ITEM_CAN_NOT_SUMMON_FULLNESS_ZERO: iResultCode = 6391;break; //6397 ¼ÒȯµÈ ÆêÀÌ ¾øÀ½ case RC_ITEM_NOT_SUMMONED_PET: iResultCode = 6397;break; } if(iResultCode!=0) { g_InterfaceManager.GetInterfaceString(iResultCode,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } break; case CG_ITEM_USE_CHANGE_PET_NAME_ITEM_ACK: { MSG_CG_ITEM_USE_CHANGE_PET_NAME_ITEM_ACK* pRecvMsg = (MSG_CG_ITEM_USE_CHANGE_PET_NAME_ITEM_ACK*)pMsg; uiPetNameSetting* pPetNameDlg = GET_CAST_DIALOG(uiPetNameSetting, IM_PET_MANAGER::PET_NAME_DLG); if (!pPetNameDlg) { break; } if (pRecvMsg->m_ResultCode == RC_ITEM_SUCCESS) { pPetNameDlg->SetPetName(); } else { pPetNameDlg->ShowInterface(FALSE); NoticeReasonItemErrorCode(pRecvMsg->m_ResultCode); } } break; case CG_ITEM_USE_PANDORA_ITEM_ACK: { if(g_pHero == NULL) { break; } MSG_CG_ITEM_USE_PANDORA_ITEM_ACK * pRecvMsg = (MSG_CG_ITEM_USE_PANDORA_ITEM_ACK*) pMsg; LotteryInventoryDialog* pPandoraDlg= GET_CAST_DIALOG( LotteryInventoryDialog, IM_INVENTORY_MANAGER::LOTTERYINVEN_DLG ); if(!pPandoraDlg) return; g_InterfaceManager.UnLockDlgs(); if(pRecvMsg->m_Identity) { //ÆÇµµ¶ó¾ÆÀÌÅÛ¼ÂÆÃ pPandoraDlg->ShowInterface(TRUE); pPandoraDlg->MoveCenter(); pPandoraDlg->CreatePandoraSlot(pRecvMsg->m_PandoraItemStream); g_InterfaceManager.LockDlgs(IM_INVENTORY_MANAGER::LOTTERYINVEN_DLG,TRUE); pPandoraDlg->SetPandoraBoxName(); } else { pPandoraDlg->SetLotteryOpenStatus(FALSE); } } break; case CG_ITEM_MOVE_PANDORA_ITEM_ACK: { if (!g_pHero) { break; } MSG_CG_ITEM_MOVE_PANDORA_ITEM_ACK* pRecvMsg = (MSG_CG_ITEM_MOVE_PANDORA_ITEM_ACK*) pMsg; switch (pRecvMsg->m_Result) { case RC_ITEM_LOTTO_CONCRETIZE_SUCCESS: { LotteryInventoryDialog* pPandoraDlg = GET_CAST_DIALOG(LotteryInventoryDialog, IM_INVENTORY_MANAGER::LOTTERYINVEN_DLG); ItemManager::Instance()->InsertInventoryTotalInfo(PICK, pRecvMsg->m_InventoryInfo); if (pPandoraDlg == NULL) { break; } //ÆÇµµ¶ó¾ÆÀÌÅÛÀº Àç¼³Á¤ÇÑ´Ù. if (pRecvMsg->m_Remove) { SCSlotContainer* pContainer = GetContainer(SI_INVENTORY); if (pContainer) { pPandoraDlg->SendItemCloseSync(); pContainer->DeleteSlot(pPandoraDlg->GetInvenPos(), NULL); } g_InterfaceManager.UnLockDlgs(); pPandoraDlg->ShowInterface(FALSE); } else { pPandoraDlg->CreatePandoraSlot(pRecvMsg->m_PandoraItemStream); } } break; default: { //6133 ¾ÆÀÌÅÛ À̵¿À» ½ÇÆÐÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(6133,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } } break; case CG_ITEM_MOVE_PANDORA_ITEM_NAK: { //ÆÇµµ¶ó ¾ÆÀÌÅÛ Move Nak! MSG_CG_ITEM_MOVE_PANDORA_ITEM_NAK* pRecvMsg = (MSG_CG_ITEM_MOVE_PANDORA_ITEM_NAK*) pMsg; g_InterfaceManager.UnLockDlgs(); if (pRecvMsg->m_Result == RC_ITEM_HAVENOTSPACE) { NoticeReasonItemErrorCode(pRecvMsg->m_Result); } else { //6133 ¾ÆÀÌÅÛ À̵¿À» ½ÇÆÐÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(6133,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } break; case CG_ITEM_USE_PANDORA_ITEM_NAK: { //ÆÇµµ¶ó ¾ÆÀÌÅÛ Use Nak! MSG_CG_ITEM_USE_PANDORA_ITEM_NAK * pRecvMsg = (MSG_CG_ITEM_USE_PANDORA_ITEM_NAK*) pMsg; if(pRecvMsg->m_Result!=0) { uiInventoryMan* inventory_manager = GET_DIALOG_MANAGER(uiInventoryMan, UIMAN_INVENTORY); if (inventory_manager != NULL) { inventory_manager->UnlockInventoryUI(); } if(pRecvMsg->m_Result==242) {//Ôö¼ÓÏä×ÓÔ¿³× by:Ê®ÀïÆÂ½£Éñ 2021-08-02 SCSlotContainer* pAtContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); SCItemSlot& rItemSlot = (SCItemSlot & )pAtContainer->GetSlot(pRecvMsg->m_InventoryPos); TCHAR szKeyItemName[MAX_PATH]={0}; TCHAR system_message[INTERFACE_STRING_LENGTH] = {'\0', }; const BASE_ITEMINFO* item_info = rItemSlot.GetItemInfo(); g_InterfaceManager.GetItemName(item_info->m_BoxKeyIndex,szKeyItemName,MAX_PATH); g_InterfaceManager.GetInterfaceStringFormat(system_message, INTERFACE_STRING_LENGTH - 1,70734,szKeyItemName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, system_message); } else { //6132 ÆÇµµ¶óÀÇ »óÀÚ ¿­±â¸¦ ½ÇÆÐÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(6132,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } } break; //============================================================ // ÃßÈÄ FIX½Ã ÆÐŶÁ¤¸® //============================================================ case CG_ITEM_PANDORABOX_CLOSE_ACK: { //ó¸®ÇÒ°Å ¾øÀ½ } break; case CG_ITEM_PANDORABOX_CLOSE_NAK: { MSG_CG_ITEM_PANDORABOX_CLOSE_NAK * pRecvMsg = (MSG_CG_ITEM_PANDORABOX_CLOSE_NAK*) pMsg; if(pRecvMsg->m_Result) { //6132 ÆÇµµ¶óÀÇ »óÀÚ ¿­±â¸¦ ½ÇÆÐÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(6132,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } break; case CG_ITEM_ACTIVE_ETHER_BULLET_ACK: { //DESC:ÁÖÀΰøÀÌ ¿¡Å׸£ÅºÈ¯¿¡´ëÇÑ ÀåÀü.ÇØÁ¦¿¡´ëÇÑ ACK if (!g_pHero) { return; } //ÆÐŶ´ë±âÇ®±â g_pHero->SetEtherWaitPacket(false); MSG_CG_ITEM_ACTIVE_ETHER_BULLET_ACK* pRecvMsg = (MSG_CG_ITEM_ACTIVE_ETHER_BULLET_ACK*)pMsg; if (RC_ITEM_SUCCESS == pRecvMsg->m_ResultCode) { //SUCCESS Á¶°Ç: ÀåÀü or ÇØÁ¦ bool bCharge = !(g_pHero->GetEthreActive()); if (bCharge) { g_pHero->SetEtherChargePos(g_pHero->GetEthreInfo().byEtherChargePos); g_pHero->SetEtherActive(pRecvMsg->m_BulletEffectCode); g_pHero->SetEtherItemLock(FALSE, TRUE); } else { g_pHero->SetEtherItemLock(FALSE,FALSE); g_pHero->SetEtherActive(0); g_pHero->UpdateSkillAttr(); //±³Ã¼»óŶó¸é if (g_pHero->GetEthreInfo().bChange) { //±³Ã¼ÀåÀü g_pHero->SetEtherWaitPacket(true); MSG_CG_ITEM_ACTIVE_ETHER_BULLET_SYN SendPacket; g_pHero->EtherChangeOFF(); SendPacket.m_bActive = TRUE; SendPacket.m_ActiveBulletItemPos = g_pHero->GetEthreInfo().ChangePos; g_pHero->SetEtherChargePos(SendPacket.m_ActiveBulletItemPos); GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } else { _asm nop; } } g_pHero->CreateEtherWeaponEffect(false, bCharge); } else { NoticeReasonItemErrorCode(pRecvMsg->m_ResultCode); } } break; case CG_ITEM_ETHER_ACTIVE_STATE_BRD: { //DESC:´Ù¸¥À¯ÀúµéÀÌ ¿¡Å׸£ÅºÈ¯ ÀåÀü.ÇØÁ¦ if(!g_pHero) return; MSG_CG_ITEM_ETHER_ACTIVE_STATE_BRD * pRecvMsg = (MSG_CG_ITEM_ETHER_ACTIVE_STATE_BRD*)pMsg; Player* pPlayer = (Player*)g_ObjectManager.GetObject(pRecvMsg->m_dwPlayerKey); if(!pPlayer) { assert(!"CG_ITEM_ETHER_ACTIVE_STATE_BRD:Ç÷¹ÀÌ¾î ¾øÀ½"); return; } if(pRecvMsg->m_bActive) { pPlayer->SetEtherActive(pRecvMsg->m_BulletEffectCode); pPlayer->CreateEtherWeaponEffect(false,TRUE); } else { pPlayer->SetEtherActive(0); pPlayer->CreateEtherWeaponEffect(false,FALSE); } } break; case CG_ITEM_INACTIVE_ETHER_BULLET_CMD: { //TODO:¿©±â¼­´Â ¿¡Å׸£ÀåÀüÀ» °­Á¦ÇØÁ¦ if(!g_pHero) return; //ÀåÀü¾ÆÀÌÅÛÀ» ¾ò¾î¿Â´Ù g_pHero->SetEtherItemLock(FALSE,FALSE); g_pHero->SetEtherActive(0); g_pHero->SetEtherWaitPacket(false); g_pHero->CreateEtherWeaponEffect(false,FALSE); g_pHero->UpdateSkillAttr(); } break; case CG_ITEM_USE_CMD: { if(!g_pHero) return; MSG_CG_ITEM_USE_CMD * pRecvMsg = (MSG_CG_ITEM_USE_CMD*)pMsg; SCSlotContainer * pContainer = GetContainer(SI_INVENTORY); if( !pContainer ) return; //¿¡Å׸£ źȯ¼Ò¸ðÆÐŶ SCItemSlot & rBulletItemSlot = (SCItemSlot &) pContainer->GetSlot(pRecvMsg->m_ItemPos); SCItemSlot DeleteBulletSlot; if (rBulletItemSlot.IsOverlap()) { if (rBulletItemSlot.GetNum() > 1 ) { rBulletItemSlot.SetNum( rBulletItemSlot.GetNum()-1 ); pContainer->UpdateSlot(pRecvMsg->m_ItemPos, rBulletItemSlot ); if(g_pHero) g_pHero->CreateEtherWeaponEffect(TRUE); } else { pContainer->DeleteSlot(pRecvMsg->m_ItemPos, &DeleteBulletSlot); assert(eITEMTYPE_ETHER_BULLET == DeleteBulletSlot.GetItemInfo()->m_wType); } } else { pContainer->DeleteSlot(pRecvMsg->m_ItemPos,&DeleteBulletSlot); assert(eITEMTYPE_ETHER_BULLET == DeleteBulletSlot.GetItemInfo()->m_wType); } } break; //------------------------------------------------------------------------------ /** Å»°Í°ü·Ã ÆÐŶ ó¸®(¼Òȯ.ÇØÁ¦.ij½ºÆÃ½ÃÀÛ.ij½ºÆÃÃë¼Ò) */ case CG_ITEM_RIDER_CONTROL_BRD: { MSG_CG_ITEM_RIDER_CONTROL_BRD * pRecvMsg = (MSG_CG_ITEM_RIDER_CONTROL_BRD*)pMsg; if(pRecvMsg->header.result==pRecvMsg->header.eRet_Success) { switch(pRecvMsg->header.request) { case pRecvMsg->header.eCmd_SyncRider: { SerialRiderSyncCommand(&pRecvMsg->header,&pRecvMsg->data); } break; case pRecvMsg->header.eReq_SummonStart: { SerialRiderCastingStart(&pRecvMsg->header,&pRecvMsg->data); } break; case pRecvMsg->header.eReq_SummonCancel: { SerialRiderCastingCancle(&pRecvMsg->header,&pRecvMsg->data); } break; case pRecvMsg->header.eReq_Summon: { SerialRiderSummon(&pRecvMsg->header,&pRecvMsg->data); } break; case pRecvMsg->header.eReq_SummonBattleRelease: case pRecvMsg->header.eReq_SummonRelease: { SerialRiderSummonRelease(&pRecvMsg->header,&pRecvMsg->data); } break; default: { _asm nop; } break; } } else { SerialRiderFail(&pRecvMsg->header,&pRecvMsg->data); } } break; //------------------------------------------------------------------------------ /** Å»°Í°ü·Ã ÆÄÃ÷ÆÐŶ ó¸®(¿Î½Ì,ÀÌÅ¢.¾ðÀÌÅ¢) */ case CG_ITEM_RIDER_CONTROL_PARTS_BRD: { MSG_CG_ITEM_RIDER_CONTROL_PARTS_BRD* pRecvMsg = (MSG_CG_ITEM_RIDER_CONTROL_PARTS_BRD*)pMsg; if(pRecvMsg->header.result==pRecvMsg->header.eRet_Success) { switch(pRecvMsg->header.request) { case pRecvMsg->header.eReq_WaxGloss://¶óÀÌ´õÆÄÃ÷¿Î½º { SerialRiderWaxGloss(&pRecvMsg->header,&pRecvMsg->data); } break; case pRecvMsg->header.eReq_EquipParts://¶óÀÌ´õÆÄÃ÷ÀÌÅ¢ { SerialRiderPartEquip(&pRecvMsg->header,&pRecvMsg->data); } break; case pRecvMsg->header.eReq_UnEquipParts://¶óÀÌ´õÆÄÃ÷¾ðÀÌÅ¢ { SerialRiderPartUnEquip(&pRecvMsg->header,&pRecvMsg->data); } break; } } else { SerialRiderFail(&pRecvMsg->header,&pRecvMsg->data); } } break; case CG_ITEM_ETHERIA_CONTROL_BRD: case CG_ITEM_ETHERIA_CONTROL_ACK: { // ¿¡Å׸®¾Æ ÃßÃâ.Á¶ÇÕ°ü·Ã ÆÐŶ µÎ°á°ú ¸ðµÎ ¿äÆÐŶÀÇ·Î ÅëÇÕ°ü¸®µÈ´Ù MSG_CG_ITEM_ETHERIA_CONTROL_ACK* recv_msg = (MSG_CG_ITEM_ETHERIA_CONTROL_ACK*)pMsg; EtheriaControl* header = &recv_msg->header; EtheriaControlData* data = &recv_msg->data; switch(header->request) { case header->eReq_Extract: { SerialEtheriaExtract(header, data); } break; case header->eReq_Combine: { SerialEtheriaCombination(header, data); } break; case header->eReq_CastingStart: { SerialEtheriaCastingStart(header, data); } break; case header->eReq_CastingCancel: { SerialEtheriaCastingCancle(header, data); } break; default: { _asm nop; } break; } } break; case CG_ITEM_STAT_CHANGE_USE_ACK: { MSG_CG_ITEM_STAT_CHANGE_USE_ACK* pRecvMsg = (MSG_CG_ITEM_STAT_CHANGE_USE_ACK*)pMsg; int ItemCnt = pRecvMsg->m_ItemCount; uiItemStatChangeSys* pDlg = GET_CAST_DIALOG( uiItemStatChangeSys, IM_ITEM_STAT_CHANGE_MANAGER::ITEM_STAT_CHANGE ); if(pDlg) { pDlg->SetSlotInfo(pRecvMsg->m_ItemCount, &pRecvMsg->m_ItemCodes[0], pRecvMsg->m_atPos, pRecvMsg->m_ChangeItemPos); pDlg->ShowInterface(TRUE); } MouseHandler::Instance()->RemoveMouseState( MouseHandler::ITEM_STAT_CHANGE ); } break; case CG_ITEM_STAT_CHANGE_USE_NAK: { MSG_CG_ITEM_STAT_CHANGE_USE_NAK* pRecvMsg = (MSG_CG_ITEM_STAT_CHANGE_USE_NAK*)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_ErrorCode); MouseHandler::Instance()->RemoveMouseState( MouseHandler::ITEM_STAT_CHANGE ); } break; case CG_ITEM_STAT_CHANGE_SELECT_ACK: { MSG_CG_ITEM_STAT_CHANGE_SELECT_ACK* pRecvMsg = (MSG_CG_ITEM_STAT_CHANGE_SELECT_ACK*)pMsg; InventoryDialog* inventory_dialog = static_cast(ItemManager::Instance()->GetItemContainerDialog(SI_INVENTORY)); if (inventory_dialog) { inventory_dialog->SetUpdateQuest(false); g_pHero->SetInventoryTotalInfo(pRecvMsg->m_InventoryInfo); inventory_dialog->SetUpdateQuest(true); } MouseHandler::Instance()->RemoveMouseState( MouseHandler::ITEM_STAT_CHANGE ); } break; case CG_ITEM_STAT_CHANGE_SELECT_NAK: { MSG_CG_ITEM_STAT_CHANGE_SELECT_NAK* pRecvMsg = (MSG_CG_ITEM_STAT_CHANGE_SELECT_NAK*)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_ErrorCode); MouseHandler::Instance()->RemoveMouseState( MouseHandler::ITEM_STAT_CHANGE ); } break; case CG_ITEM_IDENTIFY_POSSESSION_ACK: { MSG_CG_ITEM_IDENTIFY_POSSESSION_ACK* pRecvMsg = (MSG_CG_ITEM_IDENTIFY_POSSESSION_ACK*)pMsg; if ( pRecvMsg->m_ResultCode == RC::RC_ITEM_SUCCESS ) { POSTYPE AtPos, EQPos; MouseHandler::Instance()->GetPossessionItemPOS(AtPos, EQPos); SCSlotContainer * pAtContainer = ItemManager::Instance()->GetContainer(SI_INVENTORY); SCItemSlot & rItemSlot = (SCItemSlot &)pAtContainer->GetSlot(AtPos); rItemSlot.SetIdentifyPossession(TRUE); if ( EQPos == 255 ) { ItemManager::Instance()->GetEquipPosition(rItemSlot, EQPos); } ItemManager::Instance()->SendItemMoveMsg( SI_INVENTORY, SI_EQUIPMENT, AtPos, EQPos); } } break; #ifdef __NA_001358_ENCHANT_UNIFICATION case CG_ITEM_INSTANT_ENCHANT_ACK: { uiEnchantMan* pUIMan = GET_DIALOG_MANAGER(uiEnchantMan, UIMAN_ENCHANT); if (pUIMan) { pUIMan->OnEnchantPacketAck(pMsg); } } break; case CG_ITEM_INSTANT_ENCHANT_NAK: { uiEnchantMan* pUIMan = GET_DIALOG_MANAGER(uiEnchantMan, UIMAN_ENCHANT); if (pUIMan) { pUIMan->OnEnchantPacketNak(pMsg); } } break; #endif //__NA_001358_ENCHANT_UNIFICATION case CG_ITEM_QUERY_ACCUMULATE_POINT_ITEM_ACK: case CG_ITEM_QUERY_ACCUMULATE_POINT_ITEM_NAK: case CG_ITEM_USE_ACCUMULATE_POINT_ACK: case CG_ITEM_USE_ACCUMULATE_POINT_NAK: // uiCharacterStatusMan::NetworkProc() ¿¡¼­ ó¸® break; case CG_ITEM_INVENTORY_CONFIG_CHANGE_ACK: { MSG_CG_ITEM_INVENTORY_CONFIG_CHANGE_ACK* recive_packet = (MSG_CG_ITEM_INVENTORY_CONFIG_CHANGE_ACK*)pMsg; InventoryFilterDialog* inventory_filter_dialog = GET_CAST_DIALOG(InventoryFilterDialog, IM_INVENTORY_MANAGER::INVEN_FILTER_DLG); inventory_filter_dialog->SetItemInventoryConfig(recive_packet->changed); } break; case CG_ITEM_CUBE_COMPOSE_OR_DECOMPOSE_ACK: case CG_ITEM_GET_COMPOSITION_OR_DECOMPOSITION_HISTORIES_ACK: g_InterfaceManager.NetworkProc(IM_ITEM_COMPOSITE_MANAGER::ITEM_CUBE, pMsg); break; /*case CG_ITEM_IDENTIFY_SOCKET_ACK: { // TODO:¼­¹ö ÀÛ¾÷ ÇÊ¿ä!! MSG_CG_ITEM_IDENTIFY_SOCKET_ACK* recive_packet = (MSG_CG_ITEM_IDENTIFY_SOCKET_ACK*)pMsg; int i = recive_packet->error_code_; } break;*/ case CG_ITEM_RECREATE_SOCKET_ACK: { MSG_CG_ITEM_RECREATE_SOCKET_ACK* recive_packet = (MSG_CG_ITEM_RECREATE_SOCKET_ACK*)pMsg; TCHAR item_name[INTERFACE_STRING_LENGTH] = {0,}; TCHAR string_buffer[INTERFACE_STRING_LENGTH] = {0,}; TCHAR result_message[INTERFACE_STRING_LENGTH] = {0,}; AskSocketRecreateDialog* socket_recreate_dialog = static_cast(GET_CAST_DIALOG(AskSocketRecreateDialog, IM_ASSIST_MANAGER::SOCKET_RECREATE_DIALOG)); if (socket_recreate_dialog != NULL) { DWORD item_code = socket_recreate_dialog->item_code(); g_InterfaceManager.GetItemName(item_code, item_name, INTERFACE_STRING_LENGTH); } if (recive_packet->result_code == RC::RC_ITEM_SUCCESS) { //48276 %s Àåºñ¿¡ ¼ÒÄÏÀÌ »ý¼ºµÇ¾ú½À´Ï´Ù. ÃàÇÏÇÕ´Ï´Ù! g_InterfaceManager.GetInterfaceString(48276, string_buffer, INTERFACE_STRING_LENGTH); Sprintf(result_message, string_buffer, item_name); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, result_message); } else if (recive_packet->result_code == RC::RC_ITEM_SOCKET_FAILED_TO_EXTRACT_BY_RATIO) { //48275 %s Àåºñ¿¡ ¼ÒÄÏ È®·üÀ» 1¹ø ´õ ºÎ¿©ÇßÀ¸³ª, ¾Æ¹« º¯È­µµ ÀϾÁö ¾Ê¾Ò½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(48275, string_buffer, INTERFACE_STRING_LENGTH); Sprintf(result_message, string_buffer, item_name); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, result_message); } else { NoticeReasonItemErrorCode(recive_packet->result_code); } } break; #ifdef _NA_0_20111012_ITEM_DATE_EXTEND case CG_ITEM_USE_EXTEND_DATE_NAK: { MSG_CG_ITEM_USE_EXTEND_DATE_NAK* pRecvMsg = (MSG_CG_ITEM_USE_EXTEND_DATE_NAK*)pMsg; NoticeReasonItemErrorCode(pRecvMsg->error_code_); } break; case CG_ITEM_USE_EXTEND_DATE_ACK: { MSG_CG_ITEM_USE_EXTEND_DATE_ACK* pRecvMsg = (MSG_CG_ITEM_USE_EXTEND_DATE_ACK*)pMsg; ItemManager::Instance()->IncItemCount( SI_INVENTORY, pRecvMsg->extend_item_position_, -1 ); SCSlotContainer* pContainer = ItemManager::Instance()->GetContainer( SI_INVENTORY ); // °á°ú ¹° ¼¼ÆÃ SCItemSlot InsertItemSlot(pRecvMsg->target_item_stream_); pContainer->DeleteSlot(pRecvMsg->target_item_position_, NULL); pContainer->InsertSlot(pRecvMsg->target_item_position_, InsertItemSlot); } break; #endif//_NA_0_20111012_ITEM_DATE_EXTEND #ifdef _NA_003740_20111122_RANDOM_ITEM case CG_ITEM_RANDOMIZE_ACK: { MSG_CG_ITEM_RANDOMIZE_ACK* pRecvMsg = (MSG_CG_ITEM_RANDOMIZE_ACK*)pMsg; if( pRecvMsg->result_code == RC::RC_ITEM_SUCCESS ) { if( SCSlotContainer* container = ItemManager::Instance()->GetContainer( SI_INVENTORY ) ) { SCItemSlot& slot = (SCItemSlot&)container->GetSlot( pRecvMsg->target_item_pos ); TCHAR item_name[MAX_ITEMNAME_LENGTH]; g_InterfaceManager.GetItemName( slot.GetItemCode(), item_name ); TCHAR message[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( 70582, message, INTERFACE_STRING_LENGTH); //[%s] ¾ÆÀÌÅÛ¿¡ ¼º°øÀûÀ¸·Î ¿É¼ÇÀÌ ºÎ¿©µÇ¾ú½À´Ï´Ù. TCHAR buffer[INTERFACE_STRING_LENGTH]; wsprintf( buffer, message, item_name ); GlobalFunc::OutputMsg_SysMsg(buffer); } } } break; #endif case CG_ITEM_ZARD_COMPOSE_ACK: { g_InterfaceManager.NetworkProc(IM_SOCKET_MANAGER::SOCKET_COMPOSITE, pMsg); } break; { assert( !"À߸øµÈ Item ÇÁ·ÎÅäÄÝÀÌ µé¾î ¿Ô½À´Ï´Ù." ); } } } VOID ItemManager::OnRecvStyleLink(MSG_BASE * pMsg ) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; TCHAR szText[INTERFACE_STRING_LENGTH]; switch( pMsg->m_byProtocol ) { case CG_STYLE_LINK_ACK: { MSG_CG_STYLE_LINK_ACK * pRecvMsg = (MSG_CG_STYLE_LINK_ACK *)pMsg; //¸µÅ©¸¦ °É¾îÁØ´Ù. StyleLink( pRecvMsg->m_StyleCode, pRecvMsg->m_ToPos); MouseHandler::Instance()->RemoveItemAtHand(); SCSkillSlot * pSkillSlot = const_cast( this->GetSkillSlotByCode( pRecvMsg->m_StyleCode) ); if (pSkillSlot) { TCHAR szSkillName[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( pSkillSlot->GetSkillInfo()->m_dwSkillNcode, szSkillName, INTERFACE_STRING_LENGTH); // %s ½ºÅ¸ÀÏÀ» µî·Ï ÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( eST_STYLE_LINK, szText, INTERFACE_STRING_LENGTH); _stprintf(szMessage, szText, szSkillName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage); } } break; case CG_STYLE_LINK_NAK: { MSG_CG_ITEM_QUICK_LINKSKILL_NAK * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKSKILL_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_dwErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); } break; case CG_STYLE_UNLINK_ACK: { MSG_CG_STYLE_UNLINK_ACK * pRecvMsg = (MSG_CG_STYLE_UNLINK_ACK *)pMsg; SCSlotContainer * pContainer = GetContainer(SI_STYLE); StyleSlot & rStyleSlot = (StyleSlot &)pContainer->GetSlot(pRecvMsg->m_atPos); SCSkillSlot * pSkillSlot = const_cast( this->GetSkillSlotByCode( rStyleSlot.GetOrgCode()) ); if (pSkillSlot) { TCHAR szSkillName[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( pSkillSlot->GetSkillInfo()->m_dwSkillNcode, szSkillName, INTERFACE_STRING_LENGTH); // %s ½ºÅ¸ÀÏÀ» ÇØÁ¦ ÇÏ¿´½À´Ï´Ù. g_InterfaceManager.GetInterfaceString( eST_STYLE_UNLINK, szText, INTERFACE_STRING_LENGTH); Sprintf(szMessage, szText, szSkillName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage); } pContainer->DeleteSlot(pRecvMsg->m_atPos, NULL); MouseHandler::Instance()->RemoveItemAtHand(); } break; case CG_STYLE_UNLINK_NAK: { MSG_CG_STYLE_UNLINK_NAK * pRecvMsg = (MSG_CG_STYLE_UNLINK_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_byErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); } break; case CG_STYLE_LINKMOVE_ACK: { MSG_CG_STYLE_LINKMOVE_ACK * pRecvMsg = (MSG_CG_STYLE_LINKMOVE_ACK *)pMsg; ItemManager::Instance()->SimplexMoveLinkItem( SI_STYLE, pRecvMsg->m_fromPos, pRecvMsg->m_toPos ); MouseHandler::Instance()->RemoveItemAtHand(); } break; case CG_STYLE_LINKMOVE_NAK: { MSG_CG_STYLE_LINKMOVE_NAK * pRecvMsg = (MSG_CG_STYLE_LINKMOVE_NAK *)pMsg; NoticeReasonItemErrorCode(pRecvMsg->m_byErrorCode); MouseHandler::Instance()->RollbackItemAtHand(); } break; } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ ¼Òȯ */ void ItemManager::SerialRiderSummon(RiderControl* header,RiderControlData* data) { if(data->data_type!=data->eDataType_ItemAction) { return; } Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->item_action.requester); if(!pPlayer) { assert(!"PlayerKey¾øÀ½:SerialRiderSummon"); return; } RiderContainer* pContainer = (RiderContainer*)pPlayer->GetSlotContainer(SI_RIDER); if(!pContainer) { assert(!"ÄÁÅ×À̳ʾøÀ½:SerialRiderSummon"); return; } DWORD dwRiderCode =0; //ÁÖÀΰøÀ϶§´Â ¾ÆÀÌÅÛÁ¤º¸¸¦ÂüÁ¶ if(pPlayer==g_pHero) { //step1:¶óÀÌ´õ ¾ÆÀÌÅÛÀ» ¾ò¾î¿Í¼­ ÆÐŶÀÇ·Î ¹ÞÀº ½ºÆ®¸²À»CopyÇÑ´Ù g_pHero->m_RiderInfo.m_RiderItemPos = header->args.summon.slot_pos; SCItemSlot & rItemSlot = (SCItemSlot &)GetContainer(SI_INVENTORY)->GetSlot(header->args.summon.slot_pos); if(rItemSlot.IsRiderItem() && rItemSlot.GetItemInfo()) { //¡Ü¿É¼Ç°è»ê 1:±¸½½·Ô ¿É¼Ç¸¦Á¦°Å SkillAttrCalculator SkillCalc(*(g_pHero->GetPlayerAttribute())); #ifdef _PCBANG_POLICY_CHANGE_POST_EXPIRED BOOL IsPcRoom = g_pHero->GetPCRoomStatus()==CHANGE_PCROOM_STATUS::eStatus_PcRoom; #else BOOL IsPcRoom = g_pHero->GetPCBangMode(); #endif//_PCBANG_POLICY_CHANGE_POST_EXPIRED SkillCalc.ApplyRidingRider(false,IsPcRoom, rItemSlot,data->item_action.update_bits); //¼­¹ö·Î¹ÞÀº ¾ÆÀÌÅÛ½ºÆ®¸²À¸·Î °»½ÅÇϱ⋚¹®¿¡ ±âÁ¸½Ã¸®¾óÀº ¹Ýµå½Ã¹é¾÷ÇØ¾ßµÈ´Ù DBSERIAL backup_serial = rItemSlot.GetSerial(); rItemSlot.Copy(data->item_action.item_slot); rItemSlot.SetSerial(backup_serial); //¡Ü¿É¼Ç°è»ê 2:½Å½½·Ô ¿É¼Ç¸¦Ãß°¡ SkillCalc.ApplyRidingRider(true,IsPcRoom,rItemSlot,data->item_action.update_bits); //step2:ij½ºÆÃÀÌ ³¡³ª°í ¶óÀÌ´õÀκ¥ÀÌ °»½ÅµÇ¾î¾ßÇÑ´Ù dwRiderCode = pContainer->CopyItem(rItemSlot); if(dwRiderCode!=0) { //¶óÀÌ´õ¸¦¼Òȯ g_pHero->CreateRider(dwRiderCode,TRUE); //¶óÀÌ´õÆÄÃ÷¸¦°»½Å g_pHero->RefreshRider(); //6441 Å»°ÍÀ» ¼ÒȯÇÏ¿´½À´Ï´Ù. TCHAR szMessage[MAX_MESSAGE_LENGTH]; g_InterfaceManager.GetInterfaceString(6441,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } }//case Ç÷¹À̾î: Ç÷¹À̾î¼ÒȯÆÐŶÀÌ ¿ÔÀ»°æ¿ì Ç÷¹À̾îÀÇ Ä³½ºÆÃ¾Ö´Ï¸¦¾ø¾ÖÁØ´Ù. else { //step1:¾ÆÀÌÅÛÁ¤º¸¸¦ ÀÏ´Ü º¹»çÇÑ´Ù. SCItemSlot ItemSlot; ItemSlot.Copy(data->item_action.item_slot); //¶óÀÌ´õÄÁÅ×À̳ʰ»½Å dwRiderCode = pContainer->CopyItem(ItemSlot); if(dwRiderCode!=0) { pPlayer->CreateRider(dwRiderCode,TRUE); //¶óÀÌ´õÆÄÃ÷°»½Å pPlayer->RefreshRider(); } //¼Òȯij½ºÆÃ ¹Ù·ÎÃë¼Ò½ÃÄÑÁØ´Ù if(pPlayer->GetCurState()==STATE::SUMMON_RIDER) { if(pPlayer->GetNextState() == STATE::NONE) { pPlayer->SetNextState(STATE::IDLE,g_CurTime); } pPlayer->CommitChangeState(g_CurTime); } } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ ¼ÒÈ¯ÇØÁ¦ */ void ItemManager::SerialRiderSummonRelease(RiderControl* header,RiderControlData* data) { if(data->data_type!=data->eDataType_Actor) { return; } Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->actor.requester); if(!pPlayer) { assert(!"Ç÷¹À̾îŰ¾øÀ½"); return; } if(pPlayer==g_pHero) { SCItemSlot & rItemToSlot = (SCItemSlot &)GetContainer(SI_INVENTORY)->GetSlot(header->args.summon.slot_pos); //step1:½½·ÔÀÇ ¶ôÀ» Ç®¾îÁØ´Ù. if(rItemToSlot.IsRiderItem()) { //¡Ü¿É¼Ç°è»ê 1:½½·Ô ¿É¼Ç¸¦Á¦°Å(RiderSummonStatusÅëÇØ¾ò´Â´Ù) nsSlot::RiderUpdateBits uBit = rItemToSlot.RiderSummonStatus(FALSE); SkillAttrCalculator SkillCalc(*(g_pHero->GetPlayerAttribute())); #ifdef _PCBANG_POLICY_CHANGE_POST_EXPIRED BOOL IsPcRoom = g_pHero->GetPCRoomStatus()==CHANGE_PCROOM_STATUS::eStatus_PcRoom; #else BOOL IsPcRoom = g_pHero->GetPCBangMode(); #endif//_PCBANG_POLICY_CHANGE_POST_EXPIRED SkillCalc.ApplyRidingRider(false,IsPcRoom,rItemToSlot,uBit); } if(header->result_code==RC::RC_RIDER_SUMMON_RELEASED_BY_HIT) { ResultRiderMessage(header->result_code); } else { //6442:Å»°ÍÀ» ÇØÁ¦ÇÏ¿´½À´Ï´Ù. TCHAR szMessage[MAX_MESSAGE_LENGTH]; g_InterfaceManager.GetInterfaceString(6442,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } g_pHero->DestroyRider(); //step2:ÀÚµ¿Å»°Íº¯°æÃ³¸®(ÇØÁ¦ÈÄ ¹Ù·Î ¼Òȯij½ºÆÃÀ» º¸³½´Ù) if(g_pHero->m_RiderInfo.m_bChangeRider) { g_pHero->m_RiderInfo.m_bChangeRider= FALSE; MSG_CG_ITEM_RIDER_CONTROL_SYN SendMsg; SendMsg.header.request = SendMsg.header.eReq_SummonStart; g_pHero->m_RiderInfo.m_RiderItemPos = g_pHero->m_RiderInfo.m_RiderChangePos; SendMsg.header.args.casting_start.slot_pos = g_pHero->m_RiderInfo.m_RiderChangePos; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendMsg, sizeof(SendMsg) ); } } else { pPlayer->DestroyRider(); } } //------------------------------------------------------------------------------ /** ¼­¹ö¿Í µ¿±âÈ­¸¦¸ÂÃß±âÀ§ÇÑ */ void ItemManager::SerialRiderSyncCommand(RiderControl* header,RiderControlData* data) { if(data->data_type!=data->eDataType_ItemAction) { return; } Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->item_action.requester); //º»Àο¡°Ô¸¸¿Â´Ù if(pPlayer==g_pHero) { SCItemSlot & rItemSlot = (SCItemSlot &)GetContainer(SI_INVENTORY)->GetSlot(header->args.sync.where); if(rItemSlot.IsRiderItem() ) { //¹Ù·Î ±³Ã¼±â¶§¹®¿¡ ½Ã¸®¾óÀº ¹é¾÷ÇÑ´Ù DBSERIAL backup_serial = rItemSlot.GetSerial(); if(rItemSlot.IsRiderSummoned()) { //¡Ü¿É¼Ç°è»ê 1:±¸½½·Ô ¿É¼Ç¸¦Á¦°Å SkillAttrCalculator SkillCalc(*(g_pHero->GetPlayerAttribute())); #ifdef _PCBANG_POLICY_CHANGE_POST_EXPIRED BOOL IsPcRoom = g_pHero->GetPCRoomStatus()==CHANGE_PCROOM_STATUS::eStatus_PcRoom; #else BOOL IsPcRoom = g_pHero->GetPCBangMode(); #endif//_PCBANG_POLICY_CHANGE_POST_EXPIRED SkillCalc.ApplyRidingRider(false,IsPcRoom,rItemSlot,data->item_action.update_bits); rItemSlot.Copy(data->item_action.item_slot); //¡Ü¿É¼Ç°è»ê 2:½Å½½·Ô ¿É¼Ç¸¦Ãß°¡ SkillCalc.ApplyRidingRider(true,IsPcRoom,rItemSlot,data->item_action.update_bits); } else { //¡Ü´Ù¸¥¾ÆÀÌÅÛÀǰæ¿ì¿¡´Â Copy·Î ³¡³­´Ù rItemSlot.Copy(data->item_action.item_slot); } rItemSlot.SetSerial(backup_serial); } } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ ij½ºÆÃ½ÃÀÛ */ void ItemManager::SerialRiderCastingStart(RiderControl* header,RiderControlData* data) { if(data->data_type!=data->eDataType_Actor) { return; } Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->actor.requester); assert(pPlayer && "Ç÷¹À̾îŰ¾øÀ½"); if(pPlayer) { PLAYER_ACTION action; ZeroMemory(&action,sizeof(action)); action.ActionID = ACTION_SUMMON_RIDER; if(pPlayer==g_pHero) { g_pHero->m_RiderInfo.m_bSendSummon = FALSE; g_pHero->m_RiderInfo.m_bCancelSummon = FALSE; action.RIDEROBJECT.ItemPos = g_pHero->m_RiderInfo.m_RiderItemPos; RiderInventoryDialog *pRiderContainer = (RiderInventoryDialog *)GetContainer(SI_RIDER); if(pRiderContainer) { pRiderContainer->ShowInterface(FALSE); } } else { action.RIDEROBJECT.ItemPos = 0; } pPlayer->PutAction(&action); } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ ij½ºÆÃÃë¼Ò */ void ItemManager::SerialRiderCastingCancle(RiderControl* header,RiderControlData* data) { if(data->data_type!=data->eDataType_Actor) { return; } Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->actor.requester); assert(pPlayer && "Ç÷¹À̾îŰ¾øÀ½"); if( pPlayer == g_pHero ) { // ¼Òȯ »óŰ¡ µÇÁöµµ ¾Ê¾Ò´Âµ¥ Ãë¼Ò ÆÐŶºÎÅÍ ¹Þ´Â°æ¿ì°¡ À־.. (¾×¼ÇÅ¥¿¡¼­ ¾ÆÁ÷ ´ë±âÁßÀΰæ¿ì) g_pHero->m_RiderInfo.m_bCancelSummon = TRUE; return; } if(pPlayer) { if(pPlayer->GetCurState()==STATE::SUMMON_RIDER) { if(pPlayer->GetNextState() == STATE::NONE) pPlayer->SetNextState(STATE::IDLE,g_CurTime); pPlayer->CommitChangeState(g_CurTime); } } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ¾ÆÀÌÅÛ ¿Î½Ì */ void ItemManager::SerialRiderWaxGloss(RiderControl* header,RiderControlData* data) { SCSlotContainer* pContainer= GetContainer(SI_INVENTORY); if(!pContainer) { return; } //HeroÄÁÅ×ÀÌ³Ê SCItemSlot & rItemToSlot = (SCItemSlot &)pContainer->GetSlot(header->args.wax_gloss.to_parts); SCItemSlot & rItemFromSlot = (SCItemSlot &)pContainer->GetSlot(header->args.wax_gloss.from_wax); DBSERIAL backup_serial = rItemToSlot.GetSerial(); SCItemSlot DeleteSlot; if(rItemFromSlot.IsOverlap()) { if (rItemFromSlot.GetNum() > 1 ) { rItemFromSlot.SetNum( rItemFromSlot.GetNum()-1 ); pContainer->UpdateSlot(header->args.wax_gloss.from_wax, rItemFromSlot ); } else { pContainer->DeleteSlot(header->args.wax_gloss.from_wax, &DeleteSlot); assert(eITEMTYPE_WAX == DeleteSlot.GetItemInfo()->m_wType); } } else { pContainer->DeleteSlot(header->args.wax_gloss.from_wax, &DeleteSlot); assert(eITEMTYPE_WAX == DeleteSlot.GetItemInfo()->m_wType); } if(rItemToSlot.IsContainValidItem()) { int nPreEnChant = rItemToSlot.GetEnchant(); rItemToSlot.Copy(data->item_action.item_slot); rItemToSlot.SetSerial(backup_serial); int nCurEnChant = rItemToSlot.GetEnchant(); //6447 ¿Î½º ¾ÆÀÌÅÛÀÌ Àû¿ë µÇ¾ú½À´Ï´Ù. int iStringIdx = 6447; //µ¿ÀÏÇÑÈ¿°ú¾ÆÀÌÅÛÀ» »ç¿ëÇßÀ»¶§ if(nPreEnChant==nCurEnChant) { //6448 °°Àº¾ÆÀÌÅÛÈ¿°ú°¡ Àû¿ëµÇ¾ú½À´Ï´Ù. iStringIdx = 6448; } else { //¹«±¤ÅÃÀ϶§ if(nCurEnChant==0) { //6450 ¿Î½º ¾ÆÀÌÅÛ È¿°ú°¡ »ç¶óÁ³½À´Ï´Ù. iStringIdx = 6450; } } TCHAR szMessage[MAX_MESSAGE_LENGTH]; g_InterfaceManager.GetInterfaceString(iStringIdx,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ¾ÆÀÌÅÛ ÀÌÅ¢ */ void ItemManager::SerialRiderPartEquip(RiderControl* header,RiderControlData* data) { //Ç÷¹À̾î Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->item_action.requester); if(!pPlayer) { assert(!"PlayerKey ¾øÀ½:SerialRiderPartEquip"); return; } RiderContainer *pRiderContainer = (RiderContainer *)pPlayer->GetSlotContainer(SI_RIDER); if(!pRiderContainer) { assert(!"ÄÁÅ×À̳ʾøÀ½:SerialRiderPartEquip"); return; } //ÁÖÀΰø if(pPlayer==g_pHero) { //step1:¾ÆÀÌÅÛ°ü·Ã 󸮺κРPOSTYPE RiderPos = header->args.equip.to.value - eRIDER_PARTS_POS::StartIndex; //step2:Àκ¥¿¡¼­ ¶óÀÌ´õ½½·ÔÀ» °¡Á®¿Í¼­ ÆÐŶÀÇ·Î ¹ÞÀº ½ºÆ®¸²À» º¹»çÈÄ ÀåÂøµÉ¾ÆÀÌÅÛÁ¦°Å SCItemSlot & rItemFromSlot = (SCItemSlot &)GetContainer(SI_INVENTORY)->GetSlot(g_pHero->m_RiderInfo.m_RiderItemPos); if(rItemFromSlot.IsRiderItem()) { //¡Ü¿É¼Ç°è»ê 1:±¸½½·Ô ¿É¼Ç¸¦Á¦°Å #ifdef _PCBANG_POLICY_CHANGE_POST_EXPIRED BOOL IsPcRoom = g_pHero->GetPCRoomStatus()==CHANGE_PCROOM_STATUS::eStatus_PcRoom; #else BOOL IsPcRoom = g_pHero->GetPCBangMode(); #endif//_PCBANG_POLICY_CHANGE_POST_EXPIRED SkillAttrCalculator SkillCalc(*(g_pHero->GetPlayerAttribute())); SkillCalc.ApplyRidingRider(false,IsPcRoom,rItemFromSlot,data->item_action.update_bits); DBSERIAL backup_serial = rItemFromSlot.GetSerial(); rItemFromSlot.Copy(data->item_action.item_slot); rItemFromSlot.SetSerial(backup_serial); //¡Ü¿É¼Ç°è»ê 2:½Å½½·Ô ¿É¼Ç¸¦Ãß°¡ SkillCalc.ApplyRidingRider(true,IsPcRoom,rItemFromSlot,data->item_action.update_bits); BOOL bRet = GetContainer(SI_INVENTORY)->DeleteSlot(header->args.equip.from,NULL); pRiderContainer->CopyItem(rItemFromSlot); pPlayer->RefreshRider(); //6443 Àåºñ¸¦ ÀåÂøÇÏ¿´½À´Ï´Ù. TCHAR szMessage[MAX_MESSAGE_LENGTH]; g_InterfaceManager.GetInterfaceString(6443,szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } else { assert(!"¶óÀÌ´õ ¾ÆÀÌÅÛ ½½·ÔÀ§Ä¡¿À·ù"); } } else { SCItemSlot ItemSlot; ItemSlot.Copy(data->item_action.item_slot); pRiderContainer->CopyItem(ItemSlot); pPlayer->RefreshRider(); } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ¾ÆÀÌÅÛ ¾ðÀÌÅ¢ */ void ItemManager::SerialRiderPartUnEquip(RiderControl* header,RiderControlData* data) { Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->item_action.requester); if(!pPlayer) { assert(!"PlayerKey ¾øÀ½:SerialRiderPartUnEquip"); return; } RiderContainer* pContainer = (RiderContainer*)pPlayer->GetSlotContainer(SI_RIDER); if(!pContainer ) { assert(!"ÄÁÅ×À̳ʾøÀ½:SerialRiderPartUnEquip"); return; } //ÁÖÀΰøÀΰ¡? if (pPlayer == g_pHero) { POSTYPE InvenPos = header->args.unequip.to; POSTYPE RiderPos = header->args.unequip.from.value- eRIDER_PARTS_POS::StartIndex; SCItemSlot & rItemRider = (SCItemSlot &)GetContainer(SI_INVENTORY)->GetSlot(header->args.unequip.where); SCItemSlot & rItemToSlot = (SCItemSlot &)GetContainer(SI_RIDER)->GetSlot(RiderPos); DBSERIAL backup_serial = rItemRider.GetSerial(); //¡Ü¿É¼Ç°è»ê 1:±¸½½·Ô ¿É¼Ç¸¦Á¦°Å SkillAttrCalculator SkillCalc(*(g_pHero->GetPlayerAttribute())); #ifdef _PCBANG_POLICY_CHANGE_POST_EXPIRED BOOL IsPcRoom = g_pHero->GetPCRoomStatus()==CHANGE_PCROOM_STATUS::eStatus_PcRoom; #else BOOL IsPcRoom = g_pHero->GetPCBangMode(); #endif//_PCBANG_POLICY_CHANGE_POST_EXPIRED if (g_pHero->IsRiding()) { SkillCalc.ApplyRidingRider(false,IsPcRoom,rItemRider,data->item_action.update_bits); } //step1:¶óÀÌ´õ¾ÆÀÌÅÛ¿¡¼­ ÆÄÃ÷¾ÆÀÌÅÛÀ» ²ôÁý¾î³½´Ù SCItemSlot NewItemPart; rItemRider.UnEquipRiderParts(header->args.unequip.from,&NewItemPart); //step2:ÆÐŶÀÇ·Î ¹ÞÀº¾ÆÀÌÅÛÀ» ¶óÀÌ´õ¾ÆÀÌÅÛ¿¡ ¼ÂÆÃÇÔ rItemRider.Copy(data->item_action.item_slot); rItemRider.SetSerial(backup_serial); //¡Ü¿É¼Ç°è»ê 2:½Å½½·Ô ¿É¼Ç Ãß°¡ if (g_pHero->IsRiding()) { SkillCalc.ApplyRidingRider(true,IsPcRoom,rItemRider,data->item_action.update_bits); } //step3:²ôÁý¾î³½ ÆÄÃ÷¾ÆÀÌÅÛÀ» Àκ¥½½·Ô¿¡ ³Ö¾îÁØ´Ù. GetContainer(SI_INVENTORY)->InsertSlot(InvenPos,NewItemPart); pContainer->CopyItem(rItemRider); pPlayer->RefreshRider(); //6444 Àåºñ¸¦ ÇØÁ¦ÇÏ¿´½À´Ï´Ù. //ÀÎÅÍÆäÀ̽ºÀÇ ½ºÆ®¸µ »çÀÌÁî¿¡ ¸¶Ãç¼­ º¯°æ, TCHAR szMessage[MAX_MESSAGE_LENGTH]; g_InterfaceManager.GetInterfaceString(6444,szMessage,MAX_MESSAGE_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } else { SCItemSlot ItemSlot; ItemSlot.Copy(data->item_action.item_slot); Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->item_action.requester); pContainer->CopyItem(ItemSlot); pPlayer->RefreshRider(); } } //------------------------------------------------------------------------------ /** Á¸À̵¿½Ã È£ÃâÇÔÀ¸·Î½á..Å»°ÍÀ̼ÒȯµÇ¾îÀÖ´ÂÁöüũ */ void ItemManager::CheckRiderSummon() { SCSlotContainer * pAtContainer = GetContainer(SI_INVENTORY); if(!pAtContainer) { return; } for (int i = 0; i < pAtContainer->GetMaxSlotNum(); ++i) { if (pAtContainer->IsEmpty(i)) continue; SCItemSlot & rItemSlot =(SCItemSlot&) pAtContainer->GetSlot(i); if(rItemSlot.IsRiderItem() && rItemSlot.IsRiderSummoned()) { RiderInventoryDialog *pRiderContainer = (RiderInventoryDialog *)GetContainer(SI_RIDER); if(pRiderContainer) { memset(&(g_pHero->m_RiderInfo),0,sizeof(RIDER_INFO)); SkillAttrCalculator SkillCalc(*(g_pHero->GetPlayerAttribute())); rItemSlot.RiderSummonStatus(FALSE); nsSlot::RiderUpdateBits bits = rItemSlot.RiderSummonStatus(TRUE); #ifdef _PCBANG_POLICY_CHANGE_POST_EXPIRED BOOL IsPcRoom = g_pHero->GetPCRoomStatus()==CHANGE_PCROOM_STATUS::eStatus_PcRoom; #else BOOL IsPcRoom = g_pHero->GetPCBangMode(); #endif//_PCBANG_POLICY_CHANGE_POST_EXPIRED SkillCalc.ApplyRidingRider(true,IsPcRoom,rItemSlot,bits); g_pHero->m_RiderInfo.m_RiderItemPos= i; pRiderContainer->ReloadRider(rItemSlot); return; } } } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ ½ÇÆÐ */ void ItemManager::SerialRiderFail(RiderControl* header,RiderControlData* data) { #ifdef _DEBUG switch(header->result) { case header->eRet_Failed:break; case header->eRet_ItemFailed:break;// ref: RC::RC_ITEM_~~ case header->eRet_RoomFailed:break;// ref: RC::RC_ROOM_~~ case header->eRet_StatusFailed:break;// ref: RC::RC_STATUS_~~ } #endif//_DEBUG ResultRiderMessage(header->result_code); if ((header->request==header->eReq_SummonRelease) || (header->request==header->eReq_SummonBattleRelease)) { if(g_pHero->m_RiderInfo.m_bChangeRider) { g_pHero->m_RiderInfo.m_bChangeRider =FALSE; } } //FailÀε¥ µ¥ÀÌÅÍ Å¸ÀÔ°ª¿¡µû¶ó ÆÐŶ󸮰¡ ´Þ¶óÁø´Ù. switch(data->data_type) { case data->eDataType_Actor: { Player *pPlayer = (Player*)g_ObjectManager.GetObject(data->actor.requester); assert(pPlayer && "Ç÷¹À̾îŰ¾øÀ½"); if(pPlayer) { //¼Òȯij½ºÆÃ ¹Ù·ÎÃë¼Ò½ÃÄÑÁØ´Ù if(pPlayer->GetCurState()==STATE::SUMMON_RIDER) { if(pPlayer->GetNextState() == STATE::NONE) { pPlayer->SetNextState(STATE::IDLE,g_CurTime); } pPlayer->CommitChangeState(g_CurTime); } } } break; default: { if(g_pHero->m_RiderInfo.m_bSendSummon) { g_pHero->m_RiderInfo.m_bSendSummon = FALSE; } } break; } } //------------------------------------------------------------------------------ /** ¶óÀÌ´õ ½ÇÆÐ¸Þ½ÃÁö */ void ItemManager::ResultRiderMessage(WORD wCode) { int iStringCode=0; switch(wCode) { case RC_RIDER_FAILED: iStringCode = 0;break;// ½ÇÆÐ (Normal) #ifdef _DEV_VER case RC_RIDER_UNEXPECTED_FAILED: iStringCode = 6457;break;// ½ÇÆÐ (Unexpected) case RC_RIDER_CANT_FIND_INFO: iStringCode = 6458;break;// ¶óÀÌ´õ¿¡ °ü·ÃµÈ Á¤º¸¸¦ ãÀ» ¼ö ¾ø´Ù. #endif//_DEV_VER case RC_RIDER_NOT_RIDER_ITEM: iStringCode = 6459;break;// ¶óÀÌ´õ ¾ÆÀÌÅÛ ¾Æ´Ô case RC_RIDER_TIME_EXPIRED: iStringCode = 6460;break;// ±â°£ ¸¸·áµÈ ¾ÆÀÌÅÛ case RC_RIDER_MISMATCH_SUMMON_RIDER: iStringCode = 6463;break;// ¼ÒȯµÈ »óÅÂÀÇ ¶óÀÌ´õ¿Í ÇØÁ¦ÇÏ·Á´Â ¶óÀÌ´õ°¡ Ʋ¸®´Ù. case RC_RIDER_SUMMON_CASTING: iStringCode = 6464;break;// ¼Òȯ ij½ºÆÃ ÁßÀÔ´Ï´Ù. case RC_RIDER_ALREADY_SUMMONED: iStringCode = 6461;break;// ÀÌ¹Ì ¼ÒȯµÇ¾î ÀÖ½À´Ï´Ù. case RC_RIDER_ALREADY_SUMMON_RELEASED: iStringCode = 6462;break;// ÀÌ¹Ì ¼Òȯ ÇØÁ¦µÇ¾î ÀÖ½À´Ï´Ù. case RC_RIDER_SUMMON_RELEASED_BY_HIT: iStringCode = 6465;break;// ¼º°ø ´ÙÄ¡°Å³ª Áװųª ÇØ¼­ ¼Òȯ ÇØÁ¦µË´Ï´Ù. } //¸Þ½ÃÁöÃâ·Â if(0 != iStringCode) { TCHAR szMessage[MAX_MESSAGE_LENGTH]={0,}; g_InterfaceManager.GetInterfaceString(iStringCode, szMessage); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } //-------------------------------------------------------------------------------------------------- /** ¿¡Å׸®¾Æ ÃßÃâ°á°ú(S2C) (1)¼±ÅþÆÀÌÅÛÀ̹ٲî°í + (2)»õ·Î¿î¾ÆÀÌÅÛµµ »ý±è */ void ItemManager::SerialEtheriaExtract(EtheriaControl* header,EtheriaControlData* data) { // ACK: Àκ¥ ¶ôÁ¦°Å uiInventoryMan* inventory_manager = GET_DIALOG_MANAGER(uiInventoryMan, UIMAN_INVENTORY); if (inventory_manager != NULL) { inventory_manager->UnlockInventorySlot(header->args.extract.slot_pos); inventory_manager->UnlockInventorySlot(header->args.extract.etherealizer_pos); } InventoryDialog* inven = GET_CAST_DIALOG(InventoryDialog, IM_INVENTORY_MANAGER::INVEN_DLG); if (inven == NULL) { return; } // ½ÇÆÐ ¸Þ½ÃÁö if (header->result != header->eRet_Success) { //6115:¿¡Å׸®¾Æ ÃßÃâÀÌ ½ÇÆÐÇÏ¿´½À´Ï´Ù. GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, g_InterfaceManager.GetInterfaceString(6115)); NoticeReasonItemErrorCode(header->result_code); return; } //ÆÐŶ¿¡·¯: header¿Ídata°¡ ºÒÀÏÄ¡ if ((data->data_type == data->eDataType_Extract) || (data->data_type == data->eDataType_Changed)) { // no operation } else { return; } //(0)»ç¿ëµÈ ¾ÆÀÌÅÛÀº Á¦°Å³ª or °»½Å POSTYPE use_pos = header->args.extract.etherealizer_pos; SCItemSlot& use_item = (SCItemSlot &)inven->GetSlot(use_pos); if (use_item.IsContainValidItem()) { DBSERIAL backup_serial = use_item.GetSerial(); SCItemSlot delete_slot; if (use_item.IsOverlap() && (use_item.GetNum() > 1)) { use_item.SetNum(use_item.GetNum() - 1); inven->UpdateSlot(use_pos, use_item ); } else { inven->DeleteSlot(use_pos, &delete_slot); } } //(1)¼±ÅþÆÀÌÅÛ ÀÏ´Ü Á¦°ÅµÊ inven->DeleteSlot(header->args.extract.slot_pos, NULL); if (data->data_type == data->eDataType_Changed) { // ²®µ¥±âÀϼöµµÀÖ°í or ¿¡Å׸®¾ÆÀϼöµµÀÖ´Ù SCItemSlot change_item(data->changed.changed_item); inven->InsertSlot(header->args.extract.slot_pos, change_item); } else { // ¼±ÅõȾÆÀÌÅÛÀº ²®µ¥±â°¡µÈ´Ù SCItemSlot shell_item(data->extract.shell_item); inven->InsertSlot(header->args.extract.slot_pos, shell_item); // ¿¡Å׸®¾Æ°¡ »õ·Î »ý¼ºµÈ´Ù SCItemSlot etheria_item; etheria_item.Copy(data->extract.etheria_item.m_Stream); inven->InsertSlot(data->extract.etheria_item.m_Pos, etheria_item); } //6114:¿¡Å׸®¾Æ ÃßÃâÀÌ ¼º°øÇÏ¿´½À´Ï´Ù. GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, g_InterfaceManager.GetInterfaceString(6114)); } //-------------------------------------------------------------------------------------------------- /** ¿¡Å׸®¾Æ Á¶ÇÕ°á°ú(S2C) (1)Á¶ÇյɾÆÀÌÅÛÀÌ ¹Ù²î°í + (2)¿¡Å׸®¾Æ´ÂÁ¦°ÅµÊ */ void ItemManager::SerialEtheriaCombination(EtheriaControl* header,EtheriaControlData* data) { if (header->result == header->eRet_Success) { //¿¡Å׸®¾Æ Á¶ÇÕ SUCCESS!! SCSlotContainer* inventory = GetContainer(SI_INVENTORY); if (inventory == NULL ) { return; } //ÆÐŶ¿¡·¯: header¿Ídata°¡ ºÒÀÏÄ¡ if (data->data_type != data->eDataType_Combine) { return; } //Á¶ÇյɾÆÀÌÅÛ½½·Ô¾ò¾î¿Â´Ù SCItemSlot& original_item = (SCItemSlot&)inventory->GetSlot(header->args.combine.to_shell); // ¾ÆÀÌÅÛ½½·Ô¹«È¿Ã¼Å© if (original_item.IsContainValidItem() == FALSE) { return; } //(1)Á¶ÇÕ¾ÆÀÌÅÛ¹Ù²î°í (²®µ¥±â°¡ µÇ¾î¹ö¸²) inventory->DeleteSlot(header->args.combine.to_shell, NULL); SCItemSlot combine_item(data->combine.combined_item); inventory->InsertSlot(header->args.combine.to_shell, combine_item); //(2)¿¡Å׸®¾Æ ½½·ÔÁ¦°Å inventory->DeleteSlot(header->args.combine.from_etheria, NULL); //6117:¿¡Å׸®¾Æ Á¶ÇÕÀÌ ¼º°øÇÏ¿´½À´Ï´Ù GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, g_InterfaceManager.GetInterfaceString(6117)); } else { // ½ÇÆÐ¸Þ½ÃÁö Ãâ·Â NoticeReasonItemErrorCode(header->result_code); } } //-------------------------------------------------------------------------------------------------- /** ¿¡Å׸®¾Æ ij½ºÆÃ½ÃÀÛ(S2C) */ void ItemManager::SerialEtheriaCastingStart(EtheriaControl* header,EtheriaControlData* data) { Player* player_ptr = static_cast(g_ObjectManager.GetObject(data->actor.requester)); bool is_hero = (player_ptr == g_pHero); if (header->result == header->eRet_Success) { if (player_ptr->IsKindOfObject(PLAYER_OBJECT) == FALSE) { return; } //ÃßÃ⠾׼ǽÃÀÛ PLAYER_ACTION action; ZeroMemory(&action,sizeof(action)); action.ActionID = ACTION_ETHERIA_EXTRACT; action.ETHERIA.slot_pos = header->args.casting.slot_pos; action.ETHERIA.etherealizer_pos = header->args.casting.etherealizer_pos; player_ptr->PutAction(&action); } else { // ½ÇÆÐ¸Þ½ÃÁö Ãâ·Â NoticeReasonItemErrorCode(header->result_code); if (is_hero == false) { return; } //½ÇÆÐ½Ã ¾ð¶ô uiInventoryMan* inventory_manager = GET_DIALOG_MANAGER(uiInventoryMan, UIMAN_INVENTORY); if (inventory_manager != NULL) { inventory_manager->UnlockInventorySlot(header->args.casting.slot_pos); inventory_manager->UnlockInventorySlot(header->args.casting.etherealizer_pos); } } } //-------------------------------------------------------------------------------------------------- /** ¿¡Å׸®¾Æ ij½ºÆÃÃë¼Ò(S2C) */ void ItemManager::SerialEtheriaCastingCancle(EtheriaControl* header,EtheriaControlData* data) { Player* player_ptr = static_cast(g_ObjectManager.GetObject(data->actor.requester)); bool is_hero = (player_ptr == g_pHero); if (player_ptr && player_ptr->IsKindOfObject(PLAYER_OBJECT)) { if (player_ptr->GetCurState() == STATE::ETHERIA_EXTRACT) { if (player_ptr->GetNextState() == STATE::NONE) { player_ptr->SetNextState(STATE::IDLE,g_CurTime); } player_ptr->CommitChangeState(g_CurTime); } } uiAssistMan* assist_manager = GET_DIALOG_MANAGER(uiAssistMan, UIMAN_ASSIST); uiInventoryMan* inventory_manager = GET_DIALOG_MANAGER(uiInventoryMan, UIMAN_INVENTORY); if ((assist_manager == NULL) || (inventory_manager == NULL)) { return; } POSTYPE slot_pos, use_pos; assist_manager->GetItemCustomizePos(slot_pos, use_pos); inventory_manager->UnlockInventorySlot(slot_pos); inventory_manager->UnlockInventorySlot(use_pos); } //-------------------------------------------------------------------------------------------------- /** ij¸¯ÅÍ Ä¿½ºÅ͸¶ÀÌ¡ °á°úÆÐŶ */ void ItemManager::SerialCharCustomize(void* recv_packet) { MSG_CG_CHARINFO_CHANGE_APPEARANCE_BRD* data = (MSG_CG_CHARINFO_CHANGE_APPEARANCE_BRD*)recv_packet; if (data->result_ != RC_ITEM_SUCCESS) { NoticeReasonItemErrorCode(data->result_); return; } Player* player_ptr = static_cast(g_ObjectManager.GetObject(data->player_key_)); if (player_ptr == NULL) { assert(!"CG_CHARINFO_CHANGE_APPEARANCE_BRD ÇØ´ç Player¾øÀ½"); return; } ChangeCharacterAppearanceTypeConst::ValueType change_type = data->character_appearance_.appearance_type_; if (change_type & ChangeCharacterAppearanceTypeConst::kFace) { player_ptr->SetPartVariation(PLAYER_VARIATION_FACE, data->character_appearance_.face_); } if (change_type & ChangeCharacterAppearanceTypeConst::kHair) { player_ptr->SetPartVariation(PLAYER_VARIATION_HAIR, data->character_appearance_.hair_); } if (change_type & ChangeCharacterAppearanceTypeConst::kHeight) { player_ptr->SetHeightVariation(data->character_appearance_.height_); } bool is_changed_gender = false; if (change_type & ChangeCharacterAppearanceTypeConst::kGender) { GenderType::Value gender_type = static_cast(data->character_appearance_.gender); if (gender_type != player_ptr->GetGender()) { is_changed_gender = true; } player_ptr->SetGender(gender_type); player_ptr->TransformGenderType(); } else { player_ptr->RefreshAppearRender(); } if (is_changed_gender) { player_ptr->CreateEffectAtHead(StrToWzID("A766"), 0.0f); } else { player_ptr->CreateEffectAtHead(StrToWzID("A716"), 0.0f); } if (player_ptr == g_pHero) { InventoryDialog* inventory = GET_CAST_DIALOG(InventoryDialog, IM_INVENTORY_MANAGER::INVEN_DLG); if (inventory == NULL) { return; } POSTYPE use_pos = data->item_position_; SCItemSlot& use_item = (SCItemSlot &)inventory->GetSlot(use_pos); if (use_item.IsContainValidItem()) { DBSERIAL backup_serial = use_item.GetSerial(); if (use_item.IsOverlap() && (use_item.GetNum() > 1)) { use_item.SetNum(use_item.GetNum() - 1); inventory->UpdateSlot(use_pos, use_item); } else { inventory->DeleteSlot(use_pos, NULL); } } HeroEquipmentContainer * container_ptr = g_pHero->GetHeroEquipContainer(); if (container_ptr) { container_ptr->RefreshVariation(); } } }