// ShopCampPage.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "AdminToolClient.h" #include "ListCtrlSortClass.h" #include "ShopCampPage.h" #include "GridControlFactory.h" #include "ItemManageDlg.h" #include "GlobalFunctions.h" #include "PacketManager.h" #include "WindowMgr.h" #include #include #include #include #include #include #include ".\shopcamppage.h" // CShopCampPage ´ëÈ­ »óÀÚÀÔ´Ï´Ù. IMPLEMENT_DYNAMIC(CShopCampPage, CPropertyPage) CShopCampPage::CShopCampPage() : CDialog(CShopCampPage::IDD) , m_dwShopCampGold(0) , m_dwShopCampTax(0) , m_dwDocKey(0) , m_InShopCampList(false) , m_bSortListAsc(false) { INSERT_WINDOW(IDD_SHOPCAMPPAGE, static_cast(this)); } CShopCampPage::~CShopCampPage() { ERASE_WINDOW(IDD_SHOPCAMPPAGE); } void CShopCampPage::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_SHOPCAMPITEMLIST, m_ctrlShopCampItemList); DDX_Text(pDX, IDC_SHOPCAMPPAGE_GOLD, m_dwShopCampGold); DDX_Text(pDX, IDC_SHOPCAMPPAGE_TAX, m_dwShopCampTax); } BEGIN_MESSAGE_MAP(CShopCampPage, CDialog) ON_WM_CONTEXTMENU() ON_NOTIFY(NM_DBLCLK, MSG_SHOPCAMP_GRID, OnSHOPCAMPGridDblClick) ON_NOTIFY(NM_DBLCLK, IDC_SHOPCAMPITEMLIST, OnNMDblclkShopcampitemlist) ON_COMMAND(ID_SHOPCAMPITEMEDIT, OnUpdateItem) ON_COMMAND(ID_SHOPCAMPITEMREMOVE, OnRemoveItem) ON_BN_CLICKED(IDC_SHOPCAMPGOLD_UPDATE, OnBnClickedShopcampgoldUpdate) ON_BN_CLICKED(IDC_SHOPCAMPTAX_UPDATE, OnBnClickedShopcamptaxUpdate) ON_NOTIFY(LVN_COLUMNCLICK, IDC_SHOPCAMPITEMLIST, OnLvnColumnclickShopcampitemlist) ON_BN_CLICKED(IDC_SHOPCAMPPAGE_CLIP_BTN, OnBnClickedShopcamppageClipBtn) END_MESSAGE_MAP() void CShopCampPage::PostNcDestroy() { m_ctrlShopCampGrid.DestroyWindow(); CDialog::PostNcDestroy(); } BOOL CShopCampPage::OnInitDialog() { CDialog::OnInitDialog(); CRect rcGrid; rcGrid.left = 13; rcGrid.top = 25; rcGrid.right = 320; rcGrid.bottom = 273; m_ctrlShopCampGrid.Create(rcGrid, this, MSG_SHOPCAMP_GRID, WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE); InitializeItemGrid(m_ctrlShopCampGrid, 8, 10, FALSE, FALSE, RGB(0, 0, 0), RGB(215, 247, 255), RGB(172, 172, 172)); m_ctrlShopCampGrid.EnableSelection( FALSE ); m_ctrlShopCampItemList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB); m_ctrlShopCampItemList.InsertColumn(0, GetLocalString("SERIAL"), LVCFMT_LEFT, 130); m_ctrlShopCampItemList.InsertColumn(1, GetLocalString("ITEM_NAME"), LVCFMT_LEFT, 123); m_ctrlShopCampItemList.InsertColumn(2, GetLocalString("ITEM_TYPE"), LVCFMT_LEFT, 85); m_ctrlShopCampItemList.InsertColumn(3, GetLocalString("POS"), LVCFMT_LEFT, 50); m_ctrlShopCampItemList.InsertColumn(4, GetLocalString("QTY"), LVCFMT_LEFT, 50); SetUIString(this->m_hWnd, IDC_SHOPCAMPPAGE_01, "ADDED_STRING_158"); SetUIString(this->m_hWnd, IDC_SHOPCAMPPAGE_02, "ADDED_STRING_159"); SetUIString(this->m_hWnd, IDC_SHOPCAMPPAGE_03, "ADDED_STRING_160"); SetUIString(this->m_hWnd, IDC_SHOPCAMPPAGE_04, "ADDED_STRING_161"); SetUIString(this->m_hWnd, IDC_SHOPCAMPGOLD_UPDATE, "ADDED_STRING_162"); SetUIString(this->m_hWnd, IDC_SHOPCAMPTAX_UPDATE, "ADDED_STRING_163"); SetUIString(this->m_hWnd, IDC_SHOPCAMPPAGE_CLIP_BTN, "ADDED_STRING_165"); SetWindowText(GetLocalString("ADDED_STRING_240")); return TRUE; } void CShopCampPage::OnContextMenu(CWnd* pWnd, CPoint point) { /* if (((pWnd->GetSafeHwnd() == m_ctrlShopCampItemList.GetSafeHwnd()) && (m_ctrlShopCampItemList.GetSelectedCount() == 1) ) || ((pWnd->GetSafeHwnd() == m_ctrlShopCampItemList.GetSafeHwnd()) && (m_ctrlShopCampItemList.GetSelectedCount() == 1))) { CMenu muTemp, *pContextMenu; muTemp.LoadMenu(IDR_CONTEXTMENU); pContextMenu = muTemp.GetSubMenu(6); pContextMenu->ModifyMenu(0, MF_STRING | MF_BYPOSITION, ID_SHOPCAMPITEMEDIT, GetLocalString("MENU_024")); pContextMenu->ModifyMenu(1, MF_STRING | MF_BYPOSITION, ID_SHOPCAMPITEMREMOVE, GetLocalString("MENU_025")); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); if (pWnd->GetSafeHwnd() == m_ctrlShopCampItemList.GetSafeHwnd()) m_InShopCampList = true; } */ } void CShopCampPage::OnUpdateItem() { int Index; unsigned __int64 ItemID = 0; TCHAR szItemName[255]; TCHAR szTmp[50]; unsigned char cTakeType; UpdateData(true); if (true == m_InShopCampList) { cTakeType = TakeType::TS_EQUIP; Index = m_ctrlShopCampItemList.GetNextItem(-1, LVIS_SELECTED); if (-1 != Index) { m_ctrlShopCampItemList.GetItemText(Index, 0, szTmp, sizeof(szTmp)); m_ctrlShopCampItemList.GetItemText(Index, 1, szItemName, sizeof(szItemName)); ItemID = Math::Convert::StrToHex64(szTmp); } } else if (true == m_InShopCampList) { cTakeType = TakeType::TS_INVEN; Index = m_ctrlShopCampItemList.GetNextItem(-1, LVIS_SELECTED); if (-1 != Index) { m_ctrlShopCampItemList.GetItemText(Index, 0, szTmp, sizeof(szTmp)); m_ctrlShopCampItemList.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(); } */ CItemManageDlg dlg(CItemManageDlg::EDIT); dlg.DoModal(); m_InShopCampList = false; } // ¾ÆÀÌÅÛ »èÁ¦ void CShopCampPage::OnRemoveItem() { int Index; unsigned __int64 ItemID = 0; TCHAR szItemName[256]; TCHAR szTmp[50]; unsigned char cTakeType; UpdateData(true); if (true == m_InShopCampList) { cTakeType = TakeType::TS_EQUIP; Index = m_ctrlShopCampItemList.GetNextItem(-1, LVIS_SELECTED); if(-1 != Index) { m_ctrlShopCampItemList.GetItemText(Index, 0, szTmp, 50); m_ctrlShopCampItemList.GetItemText(Index, 1, szItemName, 256); ItemID = Math::Convert::StrToHex64(szTmp); } } else if (true == m_InShopCampList) { cTakeType = TakeType::TS_INVEN; Index = m_ctrlShopCampItemList.GetNextItem(-1, LVIS_SELECTED); if (-1 != Index) { m_ctrlShopCampItemList.GetItemText(Index, 0, szTmp, 50); m_ctrlShopCampItemList.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(GetLocalStrin g("ADDED_STRING_062"), FAILED); return; } */ } } /* if ((NULL != m_lpShopCampPageInfo) && (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); } */ /* CPacketMgr::GetInstance()->SendRemoveItem( m_lpInventoryPageInfo->GetServerGroup(), m_lpInventoryPageInfo->GetCID(), m_lpInventoryPageInfo->GetUID(), m_dwDocKey, ItemID, lpItem->GetPrototypeID(), stItemPos); */ m_InShopCampList = false; } void CShopCampPage::SetShopCampItem(PktAdminMgr::PktShopCampAck* lpPktShopCampAck) { GetDlgItem(IDC_SHOPCAMPGOLD_UPDATE)->EnableWindow(true); GetDlgItem(IDC_SHOPCAMPTAX_UPDATE)->EnableWindow(true); GetDlgItem(IDC_SHOPCAMPPAGE_CLIP_BTN)->EnableWindow(true); m_ctrlShopCampGrid.DeleteAllItems(); m_ctrlShopCampItemList.DeleteAllItems(); InitializeItemGrid(m_ctrlShopCampGrid, 8, 10, FALSE, FALSE, RGB(0, 0, 0), RGB(215, 247, 255), RGB(172, 172, 172)); if (NULL == lpPktShopCampAck) { return; } Item::CArrayContainer Inventory; Inventory.SerializeIn(lpPktShopCampAck->m_szItem, PktAdminMgr::MAX_ITEM_BUFFER); Item::CArrayContainer::iterator Itr = Inventory.begin(); Item::CItem* ShopCampItem = NULL; m_dwShopCampGold = lpPktShopCampAck->m_dwTempMoney; m_dwShopCampTax = lpPktShopCampAck->m_cTax; m_dwServerGroup = lpPktShopCampAck->m_dwServerGroup; m_dwCampID = lpPktShopCampAck->m_dwCampID; while(Itr != Inventory.end()) { ShopCampItem = (*Itr); if (NULL != ShopCampItem) { CString strItemSerial(_T("0x")), strQty, strItemPos; Item::ItemPos ItemPos = ShopCampItem->GetPos(); strQty.Format(_T("%d"), ShopCampItem->GetNumOrDurability()); strItemPos.Format(_T("X:%d Y:%d Z:%d"), ItemPos.GetXIndex(), ItemPos.GetYIndex(), ItemPos.GetZIndex()); strItemSerial.AppendFormat(_T("%016I64X"), ShopCampItem->GetUID()); const Item::ItemInfo& ItemInfo = ShopCampItem->GetItemInfo(); m_ctrlShopCampItemList.InsertItem(0, strItemSerial); m_ctrlShopCampItemList.SetItemText(0, 1, (LPCTSTR)ItemInfo.m_SpriteData.m_szName); m_ctrlShopCampItemList.SetItemText(0, 2, (LPCTSTR)ShopCampItem->GetItemTypeName()); m_ctrlShopCampItemList.SetItemText(0, 3, strItemPos); m_ctrlShopCampItemList.SetItemText(0, 4, strQty); ShopCampGridSet(ShopCampItem); } ++Itr; } UpdateData(false); } void CShopCampPage::ShopCampGridSet(Item::CItem *ShopCampItem) { Item::ItemPos ItemPos = ShopCampItem->GetPos(); const Item::ItemInfo& ItemInfo = ShopCampItem->GetItemInfo(); 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, ShopCampItem->GetUID()); m_ctrlShopCampGrid.SetItemText(nItemPosY, nItemPosX, strItemToolTip); for (unsigned int nPosX = nItemPosX; nPosX < (nItemPosX + nItemSizeX); nPosX++) { for (unsigned int nPosY = nItemPosY; nPosY < (nItemPosY + nItemSizeY); nPosY++) { m_ctrlShopCampGrid.SetItemBkColour(nPosY, nPosX, GetItemTypeColor(Item::ItemType::Type(ItemInfo.m_DetailData.m_cItemType))); } } m_ctrlShopCampGrid.Invalidate(); } void CShopCampPage::OnNMDblclkShopcampitemlist(NMHDR *pNMHDR, LRESULT *pResult) { if(1 == m_ctrlShopCampItemList.GetSelectedCount()) { m_InShopCampList = true; OnUpdateItem(); } *pResult = 0; } void CShopCampPage::OnBnClickedShopcampgoldUpdate() { UpdateData(true); CPacketMgr::GetInstance()->SendShopCampGold(m_dwServerGroup, m_dwCampID, m_dwShopCampGold); } void CShopCampPage::OnBnClickedShopcamptaxUpdate() { UpdateData(true); CPacketMgr::GetInstance()->SendShopCampTax(m_dwServerGroup, m_dwCampID, m_dwShopCampTax); } void CShopCampPage::OnBnClickedShopcamppageClipBtn() { ClippingListCtrl(m_ctrlShopCampItemList, 5, true); } void CShopCampPage::OnLvnColumnclickShopcampitemlist(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; } SortListWndItem(&m_ctrlShopCampItemList, m_iSortListItem); *pResult = 0; } void CShopCampPage::SortListWndItem(CListCtrl *lpListCtrl, const int iCol) { CListCtrlSortClass SortClass(lpListCtrl,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 CShopCampPage::OnSHOPCAMPGridDblClick(NMHDR *pNotifyStruct, LRESULT *pResult) { NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct; m_ctrlShopCampGrid.Invalidate(); }