Files
Client/Server/AdminTool/AdminToolClient/ShopCampPage.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

455 lines
13 KiB
C++

// 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 <stdlib.h>
#include <Utility/Math/Math.h>
#include <Item/Item.h>
#include <Item/Container/ItemContainer.h>
#include <Character/ModifyCharacter.h>
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
#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<CWnd*>(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<LPNMLISTVIEW>(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();
}