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>
This commit is contained in:
@@ -0,0 +1,474 @@
|
||||
// ItemUpgradeSimulatorDlg.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "ItemUpgradeSimulator.h"
|
||||
#include "ItemUpgradeSimulatorDlg.h"
|
||||
|
||||
#include <Item/Item.h>
|
||||
#include <Item/ItemMgr.h>
|
||||
#include <Item/ItemFactory.h>
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
|
||||
// CItemUpgradeSimulatorDlg <20><>ȭ <20><><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
|
||||
CItemUpgradeSimulatorDlg::CItemUpgradeSimulatorDlg(CWnd* pParent /*=NULL*/)
|
||||
: CDialog(CItemUpgradeSimulatorDlg::IDD, pParent)
|
||||
, m_szItemName(_T(""))
|
||||
, m_nGemType(0)
|
||||
, m_nMineralType(0)
|
||||
{
|
||||
m_simData.m_dwUsedMoney = 0LL;
|
||||
m_simData.m_dwSacrificeItem = 0L;
|
||||
m_simData.m_dwUsedMineral = 0L;
|
||||
|
||||
memset(m_simData.m_dwSucceededUpgrade, 0, sizeof(m_simData.m_dwSucceededUpgrade));
|
||||
memset(m_simData.m_dwFailedUpgrade, 0, sizeof(m_simData.m_dwFailedUpgrade));
|
||||
|
||||
memset(m_simData.m_dwUsedGems, 0, sizeof(m_simData.m_dwUsedGems));
|
||||
|
||||
m_simData.m_usPrototypeID = 0;
|
||||
m_simData.m_lpMineral = 0;
|
||||
|
||||
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
||||
}
|
||||
|
||||
void CItemUpgradeSimulatorDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
|
||||
DDX_Text(pDX, IDC_ITEM_SACRIFICE, m_simData.m_dwSacrificeItem);
|
||||
DDX_Text(pDX, IDC_TOTAL_MINERAL, m_simData.m_dwUsedMineral);
|
||||
DDX_Text(pDX, IDC_TOTAL_USEDMONEY, m_simData.m_dwUsedMoney);
|
||||
|
||||
DDX_Text(pDX, IDC_ITEMNAME, m_szItemName);
|
||||
|
||||
DDX_Radio(pDX, IDC_MINERAL_SILVIN, m_nMineralType);
|
||||
DDX_Radio(pDX, IDC_GEM_RUBY, m_nGemType);
|
||||
|
||||
DDX_Control(pDX, IDC_CURRENT_ITEM, m_ResultList);
|
||||
DDX_Control(pDX, IDC_GEM_USED, m_GemUsedList);
|
||||
DDX_Control(pDX, IDC_UPGRADE_LOG, m_UpgradeResultList);
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CItemUpgradeSimulatorDlg, CDialog)
|
||||
ON_WM_SYSCOMMAND()
|
||||
ON_WM_PAINT()
|
||||
ON_WM_QUERYDRAGICON()
|
||||
//}}AFX_MSG_MAP
|
||||
ON_BN_CLICKED(IDC_START, OnBnClickedStart)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CItemUpgradeSimulatorDlg <20><EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>
|
||||
|
||||
BOOL CItemUpgradeSimulatorDlg::OnInitDialog()
|
||||
{
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
// <20>ý<EFBFBD><C3BD><EFBFBD> <20><EFBFBD><DEB4><EFBFBD> "<22><><EFBFBD><EFBFBD>..." <20><EFBFBD> <20><EFBFBD><D7B8><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
|
||||
// IDM_ABOUTBOX<4F><58> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>մϴ<D5B4>.
|
||||
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
|
||||
ASSERT(IDM_ABOUTBOX < 0xF000);
|
||||
|
||||
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
||||
if (pSysMenu != NULL)
|
||||
{
|
||||
CString strAboutMenu;
|
||||
strAboutMenu.LoadString(IDS_ABOUTBOX);
|
||||
if (!strAboutMenu.IsEmpty())
|
||||
{
|
||||
pSysMenu->AppendMenu(MF_SEPARATOR);
|
||||
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
||||
}
|
||||
}
|
||||
|
||||
// <20><> <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><> â<><C3A2> <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ũ<EFBFBD><C5A9> <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
SetIcon(m_hIcon, TRUE); // ū <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
SetIcon(m_hIcon, FALSE); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
// TODO: <20><><EFBFBD> <20>߰<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
|
||||
m_ResultList.InsertColumn(0, _T(""), LVCFMT_LEFT, 80);
|
||||
m_ResultList.InsertColumn(1, _T(""), LVCFMT_LEFT, 150);
|
||||
|
||||
m_GemUsedList.InsertColumn(0, _T(""), LVCFMT_LEFT, 80);
|
||||
m_GemUsedList.InsertColumn(1, _T(""), LVCFMT_LEFT, 50);
|
||||
|
||||
m_UpgradeResultList.InsertColumn(0, _T(""), LVCFMT_LEFT, 50);
|
||||
m_UpgradeResultList.InsertColumn(1, _T(""), LVCFMT_LEFT, 120);
|
||||
|
||||
return TRUE; // <20><>Ʈ<EFBFBD>ѿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> TRUE<55><45> <20><>ȯ<EFBFBD>մϴ<D5B4>.
|
||||
}
|
||||
|
||||
void CItemUpgradeSimulatorDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||||
{
|
||||
CDialog::OnSysCommand(nID, lParam);
|
||||
}
|
||||
|
||||
// <20><>ȭ <20><><EFBFBD>ڿ<EFBFBD> <20>ּ<EFBFBD>ȭ <20><><EFBFBD>߸<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20>Ʒ<EFBFBD> <20>ڵ尡 <20>ʿ<EFBFBD><CABF>մϴ<D5B4>. <20><><EFBFBD><EFBFBD>/<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> MFC <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
void CItemUpgradeSimulatorDlg::OnPaint()
|
||||
{
|
||||
if (IsIconic())
|
||||
{
|
||||
CPaintDC dc(this); // <20><EFBFBD><D7B8>⸦ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD>ؽ<EFBFBD>Ʈ
|
||||
|
||||
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
||||
|
||||
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>簢<EFBFBD><E7B0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB5A5> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
int cxIcon = GetSystemMetrics(SM_CXICON);
|
||||
int cyIcon = GetSystemMetrics(SM_CYICON);
|
||||
CRect rect;
|
||||
GetClientRect(&rect);
|
||||
int x = (rect.Width() - cxIcon + 1) / 2;
|
||||
int y = (rect.Height() - cyIcon + 1) / 2;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B8>ϴ<EFBFBD>.
|
||||
dc.DrawIcon(x, y, m_hIcon);
|
||||
}
|
||||
else
|
||||
{
|
||||
CDialog::OnPaint();
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ּ<EFBFBD>ȭ<EFBFBD><C8AD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ȿ<EFBFBD> Ŀ<><C4BF><EFBFBD><EFBFBD> ǥ<>õǵ<C3B5><C7B5><EFBFBD> <20>ý<EFBFBD><C3BD>ۿ<EFBFBD><DBBF><EFBFBD>
|
||||
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
||||
HCURSOR CItemUpgradeSimulatorDlg::OnQueryDragIcon()
|
||||
{
|
||||
return static_cast<HCURSOR>(m_hIcon);
|
||||
}
|
||||
|
||||
const TCHAR* GradeToString(Item::EquipType::Grade eGrade)
|
||||
{
|
||||
const TCHAR* szGradeString = _T("Unknown");
|
||||
|
||||
switch(eGrade)
|
||||
{
|
||||
case Item::EquipType::AAA_GRADE: szGradeString = _T("AAA"); break;
|
||||
case Item::EquipType::AA_GRADE: szGradeString = _T("AA"); break;
|
||||
case Item::EquipType::A_GRADE: szGradeString = _T("A"); break;
|
||||
case Item::EquipType::B_GRADE: szGradeString = _T("B"); break;
|
||||
case Item::EquipType::C_GRADE: szGradeString = _T("C"); break;
|
||||
case Item::EquipType::D_GRADE: szGradeString = _T("D"); break;
|
||||
case Item::EquipType::F_GRADE: szGradeString = _T("F"); break;
|
||||
case Item::EquipType::X_GRADE: szGradeString = _T("X"); break;
|
||||
};
|
||||
|
||||
return szGradeString;
|
||||
}
|
||||
|
||||
namespace Item
|
||||
{
|
||||
const int MAX_EQUIP_TYPE = 6;
|
||||
const int MAX_TYPE_NUM = 2;
|
||||
|
||||
using namespace Attribute;
|
||||
|
||||
Type aryExceptAttr[MAX_EQUIP_TYPE][Item::MAX_GEM_KIND][MAX_TYPE_NUM] =
|
||||
{
|
||||
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB6><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD> <09><><EFBFBD>̾Ƹ<CCBE><C6B8><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{ { ARMOR, NONE }, { MAX_HP, NONE }, { HP_REGEN, NONE }, { MAGIC_RESIST, NONE }, { EVADE, NONE } }, // <20>Ƹ<EFBFBD>
|
||||
{ { MIN_DAMAGE, MAX_DAMAGE }, { MAX_MP, NONE }, { MP_REGEN, NONE }, { CRITICAL, NONE }, { HIT_RATE, NONE } }, // <20><><EFBFBD><EFBFBD>
|
||||
{ { MIN_DAMAGE, MAX_DAMAGE }, { MAX_MP, NONE }, { MP_REGEN, NONE }, { CRITICAL, NONE }, { HIT_RATE, NONE } }, // <20>Ѽչ<D1BC><D5B9><EFBFBD>
|
||||
{ { MIN_DAMAGE, MAX_DAMAGE }, { MAX_MP, NONE }, { MP_REGEN, NONE }, { CRITICAL, NONE }, { HIT_RATE, NONE } }, // <20><><EFBFBD>չ<EFBFBD><D5B9><EFBFBD>
|
||||
{ { MAGIC_POWER, MAX_DAMAGE }, { MAX_MP, NONE }, { MP_REGEN, NONE }, { CRITICAL, NONE }, { HIT_RATE, NONE } }, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{ { MAX_HP, NONE}, { MAX_MP, NONE }, { MP_REGEN, NONE }, { BLOCK, NONE }, { HP_REGEN, NONE } }, // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Item::Attribute::Type GetSacrificePos(Item::CEquipment& item, Item::CEquipment& sacrifice, Item::CItem& gem)
|
||||
{
|
||||
short usEquipAttr[Item::Attribute::MAX_ATTRIBUTE_NUM];
|
||||
short usSacrificeAttr[Item::Attribute::MAX_ATTRIBUTE_NUM];
|
||||
|
||||
item.GetAttribute(usEquipAttr, Item::Attribute::MAX_ATTRIBUTE_NUM);
|
||||
sacrifice.GetAttribute(usSacrificeAttr, Item::Attribute::MAX_ATTRIBUTE_NUM);
|
||||
|
||||
int nGemIndex = gem.GetPrototypeID() - 1911;
|
||||
int nType = 0;
|
||||
|
||||
Item::CItemType::ArrayType arrayType = static_cast<Item::CItemType::ArrayType>(
|
||||
Item::CItemType::GetEquipType(item.GetItemInfo().m_DetailData.m_dwFlags));
|
||||
|
||||
switch(arrayType)
|
||||
{
|
||||
case Item::CItemType::ARMOUR_TYPE: nType = 0; break;
|
||||
case Item::CItemType::DAGGER_TYPE: nType = 1; break;
|
||||
case Item::CItemType::ONEHANDED_TYPE: nType = 2; break;
|
||||
case Item::CItemType::LONGRANGE_TYPE: nType = 2; break;
|
||||
case Item::CItemType::TWOHANDED_TYPE: nType = 3; break;
|
||||
case Item::CItemType::STAFF_TYPE: nType = 4; break;
|
||||
case Item::CItemType::SHIELD_TYPE: nType = 5; break;
|
||||
}
|
||||
|
||||
int nMinValue = INT_MAX;
|
||||
int nMinIndex = Item::Attribute::MAX_ATTRIBUTE_NUM;
|
||||
|
||||
int nIndex = 0;
|
||||
for (nIndex = 0; nIndex < Item::Attribute::MAX_ATTRIBUTE_NUM; ++nIndex)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>1. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ռ<EFBFBD><D5BC>Ѵ<EFBFBD>.
|
||||
if (nIndex != Item::aryExceptAttr[nType][nGemIndex][0] &&
|
||||
nIndex != Item::aryExceptAttr[nType][nGemIndex][1] &&
|
||||
item.CanOptionGraft(arrayType, static_cast<Item::Attribute::Type>(nIndex)))
|
||||
{
|
||||
if (usEquipAttr[nIndex] <= usSacrificeAttr[nIndex])
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><> ũ<><C5A9>.
|
||||
break;
|
||||
}
|
||||
else if (usEquipAttr[nIndex] < nMinValue)
|
||||
{
|
||||
nMinValue = usEquipAttr[nIndex];
|
||||
nMinIndex = nIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (nIndex == Item::Attribute::MAX_ATTRIBUTE_NUM &&
|
||||
nMinIndex != Item::Attribute::MAX_ATTRIBUTE_NUM)
|
||||
{
|
||||
nIndex = nMinIndex;
|
||||
}
|
||||
|
||||
ASSERT(nIndex != Item::Attribute::MAX_ATTRIBUTE_NUM);
|
||||
return static_cast<Item::Attribute::Type>(nIndex);
|
||||
}
|
||||
|
||||
Item::CEquipment* CreateResultItem(SimulateData& simData,
|
||||
Item::EquipType::Grade eGrade, Item::CItem& Gem)
|
||||
{
|
||||
Item::CItem* lpItem = Item::CItemFactory::GetInstance().CreateItem(simData.m_usPrototypeID);
|
||||
Item::CEquipment* lpEquipment = Item::CEquipment::DowncastToEquipment(lpItem);
|
||||
|
||||
DWORD dwUsedGold = 0;
|
||||
unsigned char cMaxDurOut = 0;
|
||||
|
||||
if (0 != lpEquipment)
|
||||
{
|
||||
// C<><EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̴´<CCB4>.
|
||||
lpEquipment->AddRandomOption(Item::EquipType::C_GRADE, 0);
|
||||
|
||||
while(eGrade < lpEquipment->GetItemGrade().m_eItemGrade)
|
||||
{
|
||||
// 10<31><30><EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
while (lpEquipment->GetUpgradeLevel() < 10)
|
||||
{
|
||||
dwUsedGold = 0;
|
||||
simData.m_lpMineral->SetNumOrDurability(UCHAR_MAX);
|
||||
|
||||
unsigned char cUpgradeLevel = lpEquipment->GetUpgradeLevel();
|
||||
|
||||
if (Item::CEquipment::S_SUCCESS ==
|
||||
lpEquipment->UpgradeItem(*simData.m_lpMineral, ULONG_MAX, dwUsedGold, cMaxDurOut))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
if (cUpgradeLevel < lpEquipment->GetUpgradeLevel())
|
||||
{
|
||||
++simData.m_dwSucceededUpgrade[lpEquipment->GetUpgradeLevel() - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
++simData.m_dwFailedUpgrade[lpEquipment->GetUpgradeLevel()];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
|
||||
}
|
||||
|
||||
simData.m_dwUsedMoney += dwUsedGold;
|
||||
simData.m_dwUsedMineral += (UCHAR_MAX - simData.m_lpMineral->GetNumOrDurability());
|
||||
}
|
||||
|
||||
// 10<31><30><EFBFBD><EFBFBD> <20>ϼ<EFBFBD> <20>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5<><35> <20>ڴ´<DAB4>.
|
||||
for (int nGemInstallCount = 0; nGemInstallCount < 5; ++nGemInstallCount)
|
||||
{
|
||||
Gem.SetNumOrDurability(UCHAR_MAX);
|
||||
|
||||
if (Item::CEquipment::S_SUCCESS ==
|
||||
lpEquipment->InstallSocket(Gem))
|
||||
{
|
||||
simData.m_dwUsedGems[Gem.GetPrototypeID() - 1911] +=
|
||||
(UCHAR_MAX - Gem.GetNumOrDurability());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (eGrade < lpEquipment->GetItemGrade().m_eItemGrade)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD≯<EFBFBD> <20><><EFBFBD>̾<EFBFBD>, <20>ƴϸ<C6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
unsigned short usSacrificedItemGem =
|
||||
(lpEquipment->GetItemInfo().m_DetailData.m_dwFlags & Item::DetailData::ARMOR)
|
||||
? 1914 : 1911;
|
||||
|
||||
Item::CItem* lpGem = &Gem;
|
||||
|
||||
if (Gem.GetPrototypeID() != usSacrificedItemGem)
|
||||
{
|
||||
lpGem = Item::CItemFactory::GetInstance().CreateItem(usSacrificedItemGem);
|
||||
}
|
||||
|
||||
if (0 != lpGem)
|
||||
{
|
||||
Item::CEquipment* lpSacrifice =
|
||||
CreateResultItem(simData, lpEquipment->GetItemGrade().m_eItemGrade, *lpGem);
|
||||
|
||||
if (0 != lpSacrifice)
|
||||
{
|
||||
dwUsedGold = 0;
|
||||
|
||||
if (Item::CEquipment::S_SUCCESS ==
|
||||
lpEquipment->OptionGraft(lpSacrifice, true,
|
||||
GetSacrificePos(*lpEquipment, *lpSacrifice, Gem), ULONG_MAX, dwUsedGold))
|
||||
{
|
||||
++simData.m_dwSacrificeItem;
|
||||
simData.m_dwUsedMoney += dwUsedGold;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
DELETE_ITEM(lpSacrifice);
|
||||
}
|
||||
|
||||
if (lpGem != &Gem)
|
||||
{
|
||||
DELETE_ITEM(lpGem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DELETE_ITEM(lpItem);
|
||||
}
|
||||
|
||||
return lpEquipment;
|
||||
}
|
||||
|
||||
void CItemUpgradeSimulatorDlg::OnBnClickedStart()
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
UpdateData(TRUE);
|
||||
|
||||
const Item::ItemInfo* lpItemInfo =
|
||||
Item::CItemMgr::GetInstance().GetItemInfoFromItemName(m_szItemName);
|
||||
|
||||
if (0 != lpItemInfo)
|
||||
{
|
||||
m_simData.m_dwUsedMoney = 0LL;
|
||||
m_simData.m_dwSacrificeItem = 0L;
|
||||
m_simData.m_dwUsedMineral = 0L;
|
||||
|
||||
memset(m_simData.m_dwSucceededUpgrade, 0, sizeof(m_simData.m_dwSucceededUpgrade));
|
||||
memset(m_simData.m_dwFailedUpgrade, 0, sizeof(m_simData.m_dwFailedUpgrade));
|
||||
|
||||
memset(m_simData.m_dwUsedGems, 0, sizeof(m_simData.m_dwUsedGems));
|
||||
|
||||
m_simData.m_usPrototypeID = lpItemInfo->m_usProtoTypeID;
|
||||
|
||||
m_simData.m_lpMineral = Item::CItemFactory::GetInstance().CreateItem(m_nMineralType + 2001);
|
||||
Item::CItem* lpGem = Item::CItemFactory::GetInstance().CreateItem(m_nGemType + 1911);
|
||||
|
||||
if (0 != m_simData.m_lpMineral && 0 != lpGem)
|
||||
{
|
||||
Item::CEquipment* lpEquipment =
|
||||
CreateResultItem(m_simData, Item::EquipType::AAA_GRADE, *lpGem);
|
||||
|
||||
if (0 != lpEquipment)
|
||||
{
|
||||
// <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD>ڽ<EFBFBD><DABD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
|
||||
CString szText;
|
||||
int nCount = 0;
|
||||
|
||||
Item::Grade::GradeInfo gradeInfo = lpEquipment->GetItemGrade();
|
||||
|
||||
szText.SetString(GradeToString(gradeInfo.m_eItemGrade));
|
||||
for(nCount = 0; nCount < gradeInfo.m_cPlus; ++nCount) { szText.Append(_T("+")); }
|
||||
|
||||
m_ResultList.DeleteAllItems();
|
||||
m_ResultList.InsertItem(0, "Grade");
|
||||
m_ResultList.SetItemText(0, 1, szText);
|
||||
|
||||
short Attributes[Item::Attribute::MAX_ATTRIBUTE_NUM];
|
||||
lpEquipment->GetAttribute(Attributes, Item::Attribute::MAX_ATTRIBUTE_NUM);
|
||||
|
||||
int nInsertIndex = 1;
|
||||
for(nCount = 0; nCount < Item::Attribute::MAX_ATTRIBUTE_NUM; ++nCount)
|
||||
{
|
||||
if (0 != Attributes[nCount])
|
||||
{
|
||||
szText.Format("%d (%s)", Attributes[nCount],
|
||||
GradeToString(gradeInfo.m_aryAttributeGrade[nCount]));
|
||||
|
||||
m_ResultList.InsertItem(nInsertIndex,
|
||||
Item::Attribute::Attributes[nCount].GetTypeName());
|
||||
|
||||
m_ResultList.SetItemText(nInsertIndex, 1, szText);
|
||||
|
||||
++nInsertIndex;
|
||||
}
|
||||
}
|
||||
|
||||
m_GemUsedList.DeleteAllItems();
|
||||
|
||||
const TCHAR* szGemText[] =
|
||||
{ _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD>̾Ƹ<EFBFBD><EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") };
|
||||
|
||||
for(nCount = 0; nCount < Item::MAX_GEM_KIND; ++nCount)
|
||||
{
|
||||
m_GemUsedList.InsertItem(nCount, szGemText[nCount]);
|
||||
szText.Format("%d", m_simData.m_dwUsedGems[nCount]);
|
||||
m_GemUsedList.SetItemText(nCount, 1, szText);
|
||||
}
|
||||
|
||||
m_UpgradeResultList.DeleteAllItems();
|
||||
|
||||
for(nCount = 0; nCount < 10; ++nCount)
|
||||
{
|
||||
szText.Format(_T("%d<>ܰ<EFBFBD>"), nCount);
|
||||
m_UpgradeResultList.InsertItem(nCount, szText);
|
||||
|
||||
szText.Format(_T("(%d<><64><EFBFBD><EFBFBD>/%d<><64><EFBFBD><EFBFBD>)"),
|
||||
m_simData.m_dwSucceededUpgrade[nCount],
|
||||
m_simData.m_dwFailedUpgrade[nCount]);
|
||||
|
||||
m_UpgradeResultList.SetItemText(nCount, 1, szText);
|
||||
}
|
||||
|
||||
DELETE_ITEM(lpEquipment);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DELETE_ITEM(m_simData.m_lpMineral);
|
||||
DELETE_ITEM(lpGem);
|
||||
}
|
||||
}
|
||||
|
||||
UpdateData(FALSE);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user