// CharInventoryPage.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "AdminToolClient.h" #include "ListCtrlSortClass.h" #include "CharInventoryPage.h" #include "GridControlFactory.h" #include "ItemManageDlg.h" #include "GlobalFunctions.h" #include "PacketManager.h" #include #include #include #include #include #include // CCharInventoryPage ´ëÈ­ »óÀÚÀÔ´Ï´Ù. IMPLEMENT_DYNAMIC(CCharInventoryPage, CPropertyPage) CCharInventoryPage::CCharInventoryPage() : CPropertyPage(CCharInventoryPage::IDD) , m_lpInventoryPageInfo( NULL ) , m_dwInventoryGold(0) , m_dwDocKey(0) , m_InInventoryList(false) , m_InEquipList(false) , m_bSortListAsc(false) { } CCharInventoryPage::~CCharInventoryPage() { } void CCharInventoryPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); DDX_Control(pDX, IDC_INVENTORYTAB, m_ctrlInventoryTab); DDX_Control(pDX, IDC_EQUIPITEMLIST, m_ctrlEquipItemList); DDX_Control(pDX, IDC_INVENTORYITEMLIST, m_ctrlInventoryItemList); DDX_Text(pDX, IDC_INVENTORY_GOLD, m_dwInventoryGold); } BEGIN_MESSAGE_MAP(CCharInventoryPage, CPropertyPage) ON_WM_CONTEXTMENU() ON_NOTIFY(NM_CLICK, MSG_INVENTORY_GRID, OnInventoryGridClick) ON_NOTIFY(NM_DBLCLK, MSG_INVENTORY_GRID, OnInventoryGridDblClick) ON_NOTIFY(TCN_SELCHANGE, IDC_INVENTORYTAB, OnTcnSelchangeInventorytab) ON_BN_CLICKED(IDC_ITEMMAKE, OnBnClickedItemmake) ON_NOTIFY(NM_DBLCLK, IDC_EQUIPITEMLIST, OnNMDblclkEquipitemlist) ON_NOTIFY(NM_DBLCLK, IDC_INVENTORYITEMLIST, OnNMDblclkInventoryitemlist) ON_COMMAND(ID_INVENITEMEDIT, OnUpdateItem) ON_COMMAND(ID_INVENITEMREMOVE, OnRemoveItem) ON_BN_CLICKED(IDC_EQUIP_RESET, OnBnClickedEquipReset) ON_BN_CLICKED(IDC_INVEN_RESET, OnBnClickedInvenReset) ON_BN_CLICKED(IDC_INVENGOLD_UPDATE, OnBnClickedInvenGoldUpdate) ON_COMMAND(ID_STORE_COPY, OnStoreCopy) ON_NOTIFY(LVN_COLUMNCLICK, IDC_EQUIPITEMLIST, OnLvnColumnclickitemlist) ON_NOTIFY(LVN_COLUMNCLICK, IDC_INVENTORYITEMLIST, OnLvnColumnclickitemlist) ON_BN_CLICKED(IDC_INVENPAGE_EQUIPCLIP_BTN, OnBnClickedInvenpageEguipclipBtn) ON_BN_CLICKED(IDC_INVENPAGE_INVENCLIP_BTN, OnBnClickedInvenpageInvenclipBtn) END_MESSAGE_MAP() // CCharInventoryPage ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. BOOL CCharInventoryPage::OnInitDialog() { CPropertyPage::OnInitDialog(); CRect rcGrid; rcGrid.left = 23; rcGrid.top = 55; rcGrid.right = 209; rcGrid.bottom = 240; m_ctrlInventoryGrid.Create(rcGrid, this, MSG_INVENTORY_GRID, WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE); InitializeItemGrid(m_ctrlInventoryGrid, 6, 6, FALSE, FALSE, RGB(0, 0, 0), RGB(215, 247, 255), RGB(172, 172, 172)); m_ctrlInventoryGrid.EnableSelection( FALSE ); m_ctrlInventoryTab.InsertItem(0, _T("¥°"), 0); m_ctrlInventoryTab.InsertItem(1, _T("¥±"), 0); m_ctrlInventoryTab.InsertItem(2, _T("¥²"), 0); m_ctrlInventoryTab.InsertItem(3, _T("¥³"), 0); m_ctrlEquipItemList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB); m_ctrlInventoryItemList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB); m_ctrlEquipItemList.InsertColumn(0, GetLocalString("SERIAL"), LVCFMT_LEFT, 130); m_ctrlEquipItemList.InsertColumn(1, GetLocalString("ITEM_NAME"), LVCFMT_LEFT, 123); m_ctrlEquipItemList.InsertColumn(2, GetLocalString("ITEM_TYPE"), LVCFMT_LEFT, 85); m_ctrlEquipItemList.InsertColumn(3, GetLocalString("POS"), LVCFMT_LEFT, 50); m_ctrlEquipItemList.InsertColumn(4, GetLocalString("QTY"), LVCFMT_LEFT, 50); m_ctrlInventoryItemList.InsertColumn(0, GetLocalString("SERIAL"), LVCFMT_LEFT, 130); m_ctrlInventoryItemList.InsertColumn(1, GetLocalString("ITEM_NAME"), LVCFMT_LEFT, 123); m_ctrlInventoryItemList.InsertColumn(2, GetLocalString("ITEM_TYPE"), LVCFMT_LEFT, 85); m_ctrlInventoryItemList.InsertColumn(3, GetLocalString("POS"), LVCFMT_LEFT, 50); m_ctrlInventoryItemList.InsertColumn(4, GetLocalString("QTY"), LVCFMT_LEFT, 50); SetUIString(this->m_hWnd, IDC_INVENPAGE_01, "IDC_INVENPAGE_01"); SetUIString(this->m_hWnd, IDC_INVENPAGE_02, "IDC_INVENPAGE_02"); SetUIString(this->m_hWnd, IDC_INVENPAGE_03, "IDC_INVENPAGE_03"); SetUIString(this->m_hWnd, IDC_INVENPAGE_04, "IDC_INVENPAGE_04"); SetUIString(this->m_hWnd, IDC_INVENGOLD_UPDATE, "IDC_INVENGOLD_UPDATE"); SetUIString(this->m_hWnd, IDC_EQUIP_RESET, "IDC_EQUIP_RESET"); SetUIString(this->m_hWnd, IDC_INVENPAGE_EQUIPCLIP_BTN, "IDC_INVENPAGE_EQUIPCLIP_BTN"); SetUIString(this->m_hWnd, IDC_INVEN_RESET, "IDC_INVEN_RESET"); SetUIString(this->m_hWnd, IDC_INVENPAGE_INVENCLIP_BTN, "IDC_INVENPAGE_INVENCLIP_BTN"); return TRUE; } bool CCharInventoryPage::SetInventoryPageData(unsigned int dwDocKey, CModifyCharacter* lpModifyCharInfo) { if((0 != dwDocKey) && (NULL != lpModifyCharInfo)) { m_lpInventoryPageInfo = lpModifyCharInfo; m_dwDocKey = dwDocKey; GetDlgItem(IDC_INVENGOLD_UPDATE)->EnableWindow(true); GetDlgItem(IDC_EQUIP_RESET)->EnableWindow(true); GetDlgItem(IDC_INVEN_RESET)->EnableWindow(true); GetDlgItem(IDC_INVENPAGE_EQUIPCLIP_BTN)->EnableWindow(true); GetDlgItem(IDC_INVENPAGE_INVENCLIP_BTN)->EnableWindow(true); return true; } else { return false; } } // Àκ¥Å丮 ÆäÀÌÁö ¼ÂÆÃ void CCharInventoryPage::SetInventoryPage(CModifyCharacter* lpModifyCharInfo) { SetEquip(lpModifyCharInfo); SetInventoryItem(lpModifyCharInfo); } // Àåºñ ¾ÆÀÌÅÛÀ» ¸®½ºÆ® ÄÁÆ®·Ñ¿¡ ¼ÂÆÃ void CCharInventoryPage::SetEquip(CModifyCharacter* lpModifyCharacter) { m_ctrlEquipItemList.DeleteAllItems(); if(NULL == lpModifyCharacter) return; Item::CEquipmentsContainer& Equip = lpModifyCharacter->GetEquipments(); Item::CItemContainer::iterator Itr = Equip.begin(); while(Itr != Equip.end()) { Item::CItem* lpEquipItem = (*Itr); if(NULL != lpEquipItem) { CString serial(_T("0x")); CString quantity; CString realItemPos; Item::ItemPos ItemPos = lpEquipItem->GetPos(); quantity.Format(_T("%d"), lpEquipItem->GetNumOrDurability()); realItemPos.Format(_T("X:%d Y:%d Z:%d"), ItemPos.GetXIndex(), ItemPos.GetYIndex(), ItemPos.GetZIndex()); serial.AppendFormat(_T("%016I64X"), lpEquipItem->GetUID()); const Item::ItemInfo& ItemInfo = lpEquipItem->GetItemInfo( ); m_ctrlEquipItemList.InsertItem(0, serial); m_ctrlEquipItemList.SetItemText(0, 1, (LPCTSTR)ItemInfo.m_SpriteData.m_szName); m_ctrlEquipItemList.SetItemText(0, 2, (LPCTSTR)lpEquipItem->GetItemTypeName()); m_ctrlEquipItemList.SetItemText(0, 3, realItemPos); m_ctrlEquipItemList.SetItemText(0, 4, quantity); // Áߺ¹ ½Ã¸®¾ó ¾ÆÀÌÅÛ Ã¼Å© std::pair returnPair = lpModifyCharacter->m_ModifyCharItemSerialInfo.insert(lpEquipItem->GetUID()); if(!returnPair.second) { lpModifyCharacter->m_OverlapSerialInfo.push_back(lpEquipItem->GetUID()); lpModifyCharacter->SetOwnCopyItemState(true); } } ++Itr; } } // Àκ¥Å丮 ¾ÆÀÌÅÛÀ» ¸®½ºÆ® ÄÁÆ®·Ñ°ú ±×¸®µå¿¡ ¼ÂÆÃ void CCharInventoryPage::SetInventoryItem(CModifyCharacter* lpModifyCharacter) { m_ctrlInventoryGrid.DeleteAllItems(); m_ctrlInventoryItemList.DeleteAllItems(); InitializeItemGrid(m_ctrlInventoryGrid, 6, 6, FALSE, FALSE, RGB(0, 0, 0), RGB(215, 247, 255), RGB(172, 172, 172)); if (NULL == lpModifyCharacter) { return; } Item::CArrayContainer& Inventory = lpModifyCharacter->GetInventory(); Item::CArrayContainer::iterator Itr = Inventory.begin(); Item::CItem* InventoryItem = NULL; m_dwInventoryGold = lpModifyCharacter->GetGold(); while(Itr != Inventory.end()) { InventoryItem = (*Itr); if (NULL != InventoryItem) { CString strItemSerial(_T("0x")), strQty, strItemPos; Item::ItemPos ItemPos = InventoryItem->GetPos(); strQty.Format(_T("%d"), InventoryItem->GetNumOrDurability()); strItemPos.Format(_T("X:%d Y:%d Z:%d"), ItemPos.GetXIndex(), ItemPos.GetYIndex(), ItemPos.GetZIndex()); strItemSerial.AppendFormat(_T("%016I64X"), InventoryItem->GetUID()); const Item::ItemInfo& ItemInfo = InventoryItem->GetItemInfo(); m_ctrlInventoryItemList.InsertItem(0, strItemSerial); m_ctrlInventoryItemList.SetItemText(0, 1, (LPCTSTR)ItemInfo.m_SpriteData.m_szName); m_ctrlInventoryItemList.SetItemText(0, 2, (LPCTSTR)InventoryItem->GetItemTypeName()); m_ctrlInventoryItemList.SetItemText(0, 3, strItemPos); m_ctrlInventoryItemList.SetItemText(0, 4, strQty); InventoryGridSet(InventoryItem, m_ctrlInventoryTab.GetCurSel()); std::pair returnPair = lpModifyCharacter->m_ModifyCharItemSerialInfo.insert(InventoryItem->GetUID()); if(!returnPair.second) { lpModifyCharacter->m_OverlapSerialInfo.push_back(InventoryItem->GetUID()); lpModifyCharacter->SetOwnCopyItemState(true); } } ++Itr; } UpdateData(false); } void CCharInventoryPage::InventoryGridSet(Item::CItem* InventoryItem, unsigned int nTab) { Item::ItemPos ItemPos = InventoryItem->GetPos(); const Item::ItemInfo& ItemInfo = InventoryItem->GetItemInfo(); if (nTab == ItemPos.GetZIndex()) { CString strItemToolTip; unsigned int nItemPosX = ItemPos.GetXIndex(); unsigned int nItemPosY = ItemPos.GetYIndex(); unsigned int nItemSizeX = ItemInfo.m_DetailData.m_cXSize; unsigned int nItemSizeY = ItemInfo.m_DetailData.m_cYSize; strItemToolTip.Format(GetLocalString("FORMAT_002"), ItemInfo.m_SpriteData.m_szName, InventoryItem->GetUID()); m_ctrlInventoryGrid.SetItemText(nItemPosY, nItemPosX, strItemToolTip); for (unsigned int nPosX = nItemPosX; nPosX < (nItemPosX + nItemSizeX); nPosX++) { for (unsigned int nPosY = nItemPosY; nPosY < (nItemPosY + nItemSizeY); nPosY++) { m_ctrlInventoryGrid.SetItemBkColour(nPosY, nPosX, GetItemTypeColor(Item::ItemType::Type(ItemInfo.m_DetailData.m_cItemType))); } } m_ctrlInventoryGrid.Invalidate(); } } void CCharInventoryPage::OnTcnSelchangeInventorytab(NMHDR *pNMHDR, LRESULT *pResult) { if (NULL == m_lpInventoryPageInfo) { return; } m_ctrlInventoryGrid.DeleteAllItems(); InitializeItemGrid(m_ctrlInventoryGrid, 6, 6, FALSE, FALSE, RGB(0, 0, 0), RGB(215, 247, 255), RGB(172, 172, 172)); if (NULL != m_lpInventoryPageInfo) { Item::CArrayContainer& Inventory = m_lpInventoryPageInfo->GetInventory(); Item::CArrayContainer::iterator Itr = Inventory.begin(); Item::CItem* InventoryItem = NULL; while(Itr != Inventory.end()) { InventoryItem = (*Itr); if (NULL != InventoryItem) { Item::ItemPos Pos = InventoryItem->GetPos(); if (Pos.GetZIndex() == m_ctrlInventoryTab.GetCurSel()) { switch(m_ctrlInventoryTab.GetCurSel()) { case 0: InventoryGridSet(InventoryItem, 0); break; case 1: InventoryGridSet(InventoryItem, 1); break; case 2: InventoryGridSet(InventoryItem, 2); break; case 3: InventoryGridSet(InventoryItem, 3); break; default: Report(GetLocalString("MSG_0116"), FAILED); break; } } } ++Itr; } } *pResult = 0; } // Àκ¥Å丮 Á¤º¸ ÆäÀÌÁöÀÇ ÄÁÅØ½ºÆ® ¸Þ´º void CCharInventoryPage::OnContextMenu(CWnd* pWnd, CPoint point) { if (((pWnd->GetSafeHwnd() == m_ctrlEquipItemList.GetSafeHwnd()) && (m_ctrlEquipItemList.GetSelectedCount() == 1) ) || ((pWnd->GetSafeHwnd() == m_ctrlInventoryItemList.GetSafeHwnd()) && (m_ctrlInventoryItemList.GetSelectedCount() == 1))) { CMenu muTemp, *pContextMenu; muTemp.LoadMenu(IDR_CONTEXTMENU); pContextMenu = muTemp.GetSubMenu(6); pContextMenu->ModifyMenu(0, MF_STRING | MF_BYPOSITION, ID_INVENITEMEDIT, GetLocalString("MENU_024")); pContextMenu->ModifyMenu(1, MF_STRING | MF_BYPOSITION, ID_INVENITEMREMOVE, GetLocalString("MENU_025")); pContextMenu->ModifyMenu(3, MF_STRING | MF_BYPOSITION, ID_STORE_COPY, GetLocalString("MENU_026")); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); if (pWnd->GetSafeHwnd() == m_ctrlEquipItemList.GetSafeHwnd()) m_InEquipList = true; if (pWnd->GetSafeHwnd() == m_ctrlInventoryItemList.GetSafeHwnd()) m_InInventoryList = true; } } // ±×¸®µå ´õºí Ŭ¸¯½Ã À̺¥Æ® ó¸® void CCharInventoryPage::OnInventoryGridDblClick(NMHDR *pNotifyStruct, LRESULT* /*pResult*/) { NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct; m_ctrlInventoryGrid.Invalidate(); } // ±×¸®µå Ŭ¸¯½Ã À̺¥Æ® ó¸® void CCharInventoryPage::OnInventoryGridClick(NMHDR *pNotifyStruct, LRESULT* /*pResult*/) { NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct; if (true == g_bItemGrab) { /* 2005-06-16 QA½Ç ¿äû if (3 == m_ctrlInventoryTab.GetCurSel()) { Report(GetLocalString("ADDED_STRING_059"), CAUTION); return; } */ g_stMyItemInfo.m_stItemInfo.m_cTakePos = TakeType::TS_INVEN; g_stMyItemInfo.m_stItemInfo.m_cXPos = pItem->iColumn; g_stMyItemInfo.m_stItemInfo.m_cYPos = pItem->iRow; g_stMyItemInfo.m_stItemInfo.m_cZPos = m_ctrlInventoryTab.GetCurSel(); // µå¶ø °¡´É ¿©ºÎ ÆÇº°¿ë º¯¼ö CPoint GrabbedItemPos, GrabbedItemSize; GrabbedItemPos.x = g_stMyItemInfo.m_stItemInfo.m_cXPos; GrabbedItemPos.y = g_stMyItemInfo.m_stItemInfo.m_cYPos; GrabbedItemSize.x = g_stMyItemInfo.m_SizeX; GrabbedItemSize.y = g_stMyItemInfo.m_SizeY; if (NULL != m_lpInventoryPageInfo && NULL != m_dwDocKey) { if (TRUE == IsEnableItemDrop(GrabbedItemPos, GrabbedItemSize)) { CPacketMgr::GetInstance()->SendCreateItem(m_lpInventoryPageInfo->GetServerGroup(), m_lpInventoryPageInfo->GetCID(), m_lpInventoryPageInfo->GetUID(), m_dwDocKey, g_stMyItemInfo.m_stItemInfo); if (g_stMyItemInfo.m_nModeIndex == g_stMyItemInfo.CREATE_SINGLE) { g_bItemGrab = FALSE; } } else { Report(GetLocalString("MSG_0117"), CAUTION); } } else { Report(GetLocalString("MSG_0118"), CAUTION); } } } // ÇØ´ç ÁÂÇ¥ÀÇ ±×¸®µå¿¡ ÇöÀç ÁýÇôÀÖ´Â ¾ÆÀÌÅÛÀ» ³õÀ» ¼ö ÀÖ´Â Áö ÆÇº°ÇÏ´Â ÇÔ¼ö BOOL CCharInventoryPage::IsEnableItemDrop(CPoint selGridCoordinates, CPoint selItemSize) { int nIsEnableCell = 0; // ºñ¾îÀÖ´Â ¼¿ÀÇ °³¼ö // ±×¸®µå °Ë»ö½Ã 6 X 6 ÀÇ ±×¸®µå ¼¿À» ¹þ¾î³ªÁö ¾Êµµ·Ï ÃʱâÈ­ int maxGridSearchColumn = (selGridCoordinates.x + selItemSize.x > 5) ? 6 : selGridCoordinates.x + selItemSize.x; int maxGridSearchRow = (selGridCoordinates.y + selItemSize.y > 5) ? 6 : selGridCoordinates.y + selItemSize.y; // ±×¸®µå °Ë»ö for (int nColumn = selGridCoordinates.x; nColumn < maxGridSearchColumn; nColumn++) { for (int nRow = selGridCoordinates.y; nRow < maxGridSearchRow; nRow++) { COLORREF clrDefaultCellColor = RGB(215, 247, 255); // µðÆúÆ® »ö»óÀ¸·Î ä¿öÁ®ÀÖ´Â ±×¸®µå(ºñ¾îÀÖ´Â ±×¸®µå)ÀÎÁö È®ÀÎ if (4278190080 == m_ctrlInventoryGrid.GetItemBkColour(nRow, nColumn)) nIsEnableCell++; } } // ¾ÆÀÌÅÛ Å©±â ¸¸Å­ÀÇ ºó ¼¿ÀÌ ÀÖÀ¸¸é TRUE ¸®ÅÏ, ¾Æ´Ï¸é FALSE ¸®ÅÏ if (nIsEnableCell == (selItemSize.x * selItemSize.y)) return TRUE; else return FALSE; } // ¾ÆÀÌÅÛ »ý¼º ¹öư Ŭ¸¯ void CCharInventoryPage::OnBnClickedItemmake() { CItemManageDlg dlg(CItemManageDlg::CREATE); dlg.DoModal(); } // ¾ÆÀÌÅÛ ¼öÁ¤ void CCharInventoryPage::OnUpdateItem() { int Index; unsigned __int64 ItemID = 0; TCHAR szItemName[255]; TCHAR szTmp[50]; unsigned char cTakeType; UpdateData(true); if (true == m_InEquipList) { cTakeType = TakeType::TS_EQUIP; Index = m_ctrlEquipItemList.GetNextItem(-1, LVIS_SELECTED); if (-1 != Index) { m_ctrlEquipItemList.GetItemText(Index, 0, szTmp, sizeof(szTmp)); m_ctrlEquipItemList.GetItemText(Index, 1, szItemName, sizeof(szItemName)); ItemID = Math::Convert::StrToHex64(szTmp); } } else if (true == m_InInventoryList) { cTakeType = TakeType::TS_INVEN; Index = m_ctrlInventoryItemList.GetNextItem(-1, LVIS_SELECTED); if (-1 != Index) { m_ctrlInventoryItemList.GetItemText(Index, 0, szTmp, sizeof(szTmp)); m_ctrlInventoryItemList.GetItemText(Index, 1, szItemName, sizeof(szItemName)); ItemID = Math::Convert::StrToHex64(szTmp); const Item::ItemInfo *ItemInfo = Item::CItemMgr::GetInstance().GetItemInfoFromItemName(szItemName); if (NULL == ItemInfo) { Report(GetLocalString("ADDED_STRING_060"), FAILED); return; } /* 2005-06-16 QA½Ç ¿äû else if(Item::ItemType::QUEST_ITEM == ItemInfo->m_DetailData.m_cItemType) { Report(GetLocalString("ADDED_STRING_061"), FAILED); return; } */ } } if ((NULL != m_lpInventoryPageInfo) && (ItemID != 0) && (NULL != m_dwDocKey)) { g_stMyItemInfo.m_nModeIndex = MyItemInfo::EDIT; g_stMyItemInfo.m_dwItemSerial = ItemID; _tcscpy(g_stMyItemInfo.m_szItemName, szItemName); g_stMyItemInfo.m_cTakeType = cTakeType; g_stMyItemInfo.m_lpModifyCharInfo = m_lpInventoryPageInfo; g_stMyItemInfo.m_dwDocKey = m_dwDocKey; Item::CItem* lpItem = g_stMyItemInfo.m_lpModifyCharInfo->UIDbyItem(ItemID, cTakeType); //g_stMyItemInfo.m_stItemInfo = lpItem->GetItemInfo(); CItemManageDlg dlg(CItemManageDlg::EDIT); dlg.DoModal(); } m_InEquipList = m_InInventoryList = false; } // ¾ÆÀÌÅÛ »èÁ¦ void CCharInventoryPage::OnRemoveItem() { int Index; unsigned __int64 ItemID = 0; TCHAR szItemName[256]; TCHAR szTmp[50]; unsigned char cTakeType; UpdateData(true); if (true == m_InEquipList) { cTakeType = TakeType::TS_EQUIP; Index = m_ctrlEquipItemList.GetNextItem(-1, LVIS_SELECTED); if(-1 != Index) { m_ctrlEquipItemList.GetItemText(Index, 0, szTmp, 50); m_ctrlEquipItemList.GetItemText(Index, 1, szItemName, 256); ItemID = Math::Convert::StrToHex64(szTmp); } } else if (true == m_InInventoryList) { cTakeType = TakeType::TS_INVEN; Index = m_ctrlInventoryItemList.GetNextItem(-1, LVIS_SELECTED); if (-1 != Index) { m_ctrlInventoryItemList.GetItemText(Index, 0, szTmp, 50); m_ctrlInventoryItemList.GetItemText(Index, 1, szItemName, 256); ItemID = Math::Convert::StrToHex64(szTmp); const Item::ItemInfo *ItemInfo = Item::CItemMgr::GetInstance().GetItemInfoFromItemName(szItemName); if (NULL == ItemInfo) { Report(GetLocalString("ADDED_STRING_060"), FAILED); return; } /* 2005-06-16 QA½Ç ¿äû else if(Item::ItemType::QUEST_ITEM == ItemInfo->m_DetailData.m_cItemType) { Report(GetLocalString("ADDED_STRING_062"), FAILED); return; } */ } } if ((NULL != m_lpInventoryPageInfo) && (ItemID != 0) && (NULL != m_dwDocKey)) { g_stMyItemInfo.m_nModeIndex = MyItemInfo::REMOVE; g_stMyItemInfo.m_dwItemSerial = ItemID; CopyMemory(g_stMyItemInfo.m_szItemName, szItemName, 256); g_stMyItemInfo.m_cTakeType = cTakeType; g_stMyItemInfo.m_lpModifyCharInfo = m_lpInventoryPageInfo; g_stMyItemInfo.m_dwDocKey = m_dwDocKey; Item::CItem* lpItem = m_lpInventoryPageInfo->UIDbyItem(ItemID, cTakeType); Item::ItemPos stItemPos = lpItem->GetPos(); CPacketMgr::GetInstance()->SendRemoveItem( m_lpInventoryPageInfo->GetServerGroup(), m_lpInventoryPageInfo->GetCID(), m_lpInventoryPageInfo->GetUID(), m_dwDocKey, ItemID, lpItem->GetPrototypeID(), stItemPos); } m_InEquipList = m_InInventoryList = false; } void CCharInventoryPage::PostNcDestroy() { m_ctrlInventoryGrid.DestroyWindow(); CPropertyPage::PostNcDestroy(); } void CCharInventoryPage::OnNMDblclkEquipitemlist(NMHDR *pNMHDR, LRESULT *pResult) { if(1 == m_ctrlEquipItemList.GetSelectedCount()) { m_InEquipList = true; OnUpdateItem(); } *pResult = 0; } void CCharInventoryPage::OnNMDblclkInventoryitemlist(NMHDR *pNMHDR, LRESULT *pResult) { if(1 == m_ctrlInventoryItemList.GetSelectedCount()) { m_InInventoryList = true; OnUpdateItem(); } *pResult = 0; } void CCharInventoryPage::OnBnClickedEquipReset() { CPacketMgr::GetInstance()->SendItemContainerReset(m_lpInventoryPageInfo->GetServerGroup(), m_lpInventoryPageInfo->GetUID(), m_lpInventoryPageInfo->GetCID(), m_dwDocKey, TakeType::TS_EQUIP); } void CCharInventoryPage::OnBnClickedInvenReset() { CPacketMgr::GetInstance()->SendItemContainerReset(m_lpInventoryPageInfo->GetServerGroup(), m_lpInventoryPageInfo->GetUID(), m_lpInventoryPageInfo->GetCID(), m_dwDocKey, TakeType::TS_INVEN); } void CCharInventoryPage::OnBnClickedInvenGoldUpdate() { UpdateData(true); CPacketMgr::GetInstance()->SendInvenGold( m_lpInventoryPageInfo->GetUID(), m_lpInventoryPageInfo->GetCID(), m_lpInventoryPageInfo->GetServerGroup(), m_dwDocKey, m_dwInventoryGold); } void CCharInventoryPage::OnStoreCopy() { CListCtrl* lpItemList; unsigned char cTakeType; __int64 ItemUID; TCHAR szTmp[256]; if (true == m_InEquipList) { cTakeType = TakeType::TS_EQUIP; lpItemList = &m_ctrlEquipItemList; } else if (true == m_InInventoryList) { cTakeType = TakeType::TS_INVEN; lpItemList = &m_ctrlInventoryItemList; } else { return; } int Index = lpItemList->GetNextItem(-1, LVIS_SELECTED); if (-1 < Index) { lpItemList->GetItemText(Index, 0, szTmp, sizeof(szTmp)); ItemUID = Math::Convert::StrToHex64( szTmp ); } else { Report(GetLocalString("MSG_0119"), FAILED); return; } PktAdminMgr::CreateItemInfo MkStoreInfo; Item::CItem* lpItem = m_lpInventoryPageInfo->UIDbyItem(ItemUID, cTakeType); if (NULL != lpItem) { MkStoreInfo.m_cNumOrDurability = lpItem->GetNumOrDurability(); Item::CEquipment* lpEquipment = Item::CEquipment::DowncastToEquipment(lpItem); if (NULL != lpEquipment) { for(int nIndex = 0; nIndex < Item::EquipmentInfo::MAX_RUNE_SOCKET_NUM; ++nIndex) { MkStoreInfo.m_usRuneSocket[nIndex] = lpEquipment->GetRuneSocket(nIndex); } MkStoreInfo.m_cMaxDurability = lpEquipment->GetMaxNumOrDurability(); MkStoreInfo.m_cCurrentSocketNum = lpEquipment->GetCurrentSocketNum(); MkStoreInfo.m_cMaxSocketNum = lpEquipment->GetMaxSocketNum(); MkStoreInfo.m_cUpgradeLevel = lpEquipment->GetUpgradeLevel(); MkStoreInfo.m_cSeasonRecord = lpEquipment->GetSeasonRecord(); MkStoreInfo.m_cCoreLevel = lpEquipment->GetCoreLevel(); lpEquipment->GetAttribute(MkStoreInfo.m_usAttribute, sizeof(MkStoreInfo.m_usAttribute)); lpEquipment->GetSocket(MkStoreInfo.m_cSocket, sizeof(MkStoreInfo.m_cSocket)); } } char StoreBuffer[PktAdminMgr::PktAdminStoreInsert::MAX_ITEM_INFO]; TCHAR szItemName[64]; unsigned long dwStoreBufferLength = 0; _tcsncpy(szItemName, CONV_CLISTR(lpItem->GetItemInfo().m_SpriteData.m_szName), 64); MkStoreInfo.AdminStore_Out(StoreBuffer, dwStoreBufferLength); CPacketMgr::GetInstance()->SendPktAdminStoreInsert( (unsigned char)m_lpInventoryPageInfo->GetServerGroup(), CONV_CLISTR(m_lpInventoryPageInfo->GetName()), szItemName, StoreBuffer); m_InEquipList = m_InInventoryList = false; } void CCharInventoryPage::OnLvnColumnclickitemlist(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); if(pNMLV->iSubItem == m_iSortListItem) { m_bSortListAsc = !m_bSortListAsc; } else { m_iSortListItem = pNMLV->iSubItem; m_bSortListAsc = true; } if(pNMLV->hdr.idFrom == IDC_EQUIPITEMLIST) { SortListWndItem(&m_ctrlEquipItemList, m_iSortListItem); } else if(pNMLV->hdr.idFrom == IDC_INVENTORYITEMLIST) { SortListWndItem(&m_ctrlInventoryItemList, m_iSortListItem); } *pResult = 0; } void CCharInventoryPage::SortListWndItem(CListCtrl* pListCtrl, const int iCol) { CListCtrlSortClass SortClass(pListCtrl,iCol); switch(m_iSortListItem) { case SORT_TYPE::SERIAL: SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE); break; case SORT_TYPE::NAME: SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE); break; case SORT_TYPE::TYPE: SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING); break; case SORT_TYPE::COORDINATE: SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE); break; case SORT_TYPE::QUANTITY: SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT); break; } } void CCharInventoryPage::OnBnClickedInvenpageEguipclipBtn() { ClippingListCtrl(m_ctrlEquipItemList, 5, true); } void CCharInventoryPage::OnBnClickedInvenpageInvenclipBtn() { ClippingListCtrl(m_ctrlInventoryItemList, 5, true); }