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>
455 lines
13 KiB
C++
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();
|
|
}
|
|
|