727 lines
18 KiB
C++
727 lines
18 KiB
C++
// ItemDropManagerDlg.cpp : 구현 파일
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ItemDropManager.h"
|
|
#include "ItemDropManagerDlg.h"
|
|
#include ".\itemdropmanagerdlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
#define MAX_MONSTER_KILL_COUNT 1000000000
|
|
#define MIN_MONSTER_KILL_COUNT 1
|
|
#define MAX_PLAYER_LEVEL 100
|
|
#define MIN_PLAYER_LEVEL 1
|
|
#define MAX_MONSTER_LEVEL 100
|
|
#define MIN_MONSTER_LEVEL 1
|
|
#define MAX_MONSTER_GRADE 6
|
|
#define MIN_MONSTER_GRADE 0
|
|
|
|
enum ENUM_SCRIPT_TYPE
|
|
{
|
|
eSCRIPT_TYPE_HUNTING = 0,
|
|
eSCRIPT_TYPE_MISSION
|
|
};
|
|
|
|
// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다.
|
|
|
|
class CAboutDlg : public CDialog
|
|
{
|
|
public:
|
|
CAboutDlg();
|
|
|
|
// 대화 상자 데이터
|
|
enum { IDD = IDD_ABOUTBOX };
|
|
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
|
|
|
|
// 구현
|
|
protected:
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|
|
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
|
|
{
|
|
}
|
|
|
|
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CItemDropManagerDlg 대화 상자
|
|
|
|
|
|
|
|
CItemDropManagerDlg::CItemDropManagerDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CItemDropManagerDlg::IDD, pParent)
|
|
, m_dwMonsterKillCount(0)
|
|
, m_nRadioViewOption(0)
|
|
, m_dwMonsterCode(0)
|
|
, m_nUpperMonsterLevel(0)
|
|
, m_nLowerMonsterLevel(0)
|
|
{
|
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
|
m_nMonsterGrade = 0;
|
|
m_nNowColumnCount = 0;
|
|
m_nRadioInput = 0;
|
|
}
|
|
|
|
void CItemDropManagerDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT_KILL_COUNT, m_dwMonsterKillCount);
|
|
DDX_Control(pDX, IDC_COMBO_MONSTER_TYPE, m_comboMonsterGrade);
|
|
DDX_Control(pDX, IDC_LIST_ITEM, m_listDropItem);
|
|
DDX_Control(pDX, IDC_COMBO_SCRIPT_TYPE, m_comboScriptType);
|
|
DDX_Radio(pDX, IDC_RADIO_RESULT, m_nRadioViewOption);
|
|
DDX_Text(pDX, IDC_EDIT_MONSTER_CODE, m_dwMonsterCode);
|
|
DDX_Radio( pDX, IDC_RADIO_MONSTER_LEVEL, m_nRadioInput );
|
|
DDX_Text(pDX, IDC_EDIT_UPPER_LEVEL, m_nUpperMonsterLevel);
|
|
DDX_Text(pDX, IDC_EDIT_LOWER_LEVEL, m_nLowerMonsterLevel);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CItemDropManagerDlg, CDialog)
|
|
ON_WM_SYSCOMMAND()
|
|
ON_WM_PAINT()
|
|
ON_WM_QUERYDRAGICON()
|
|
//}}AFX_MSG_MAP
|
|
ON_BN_CLICKED(IDC_BUTTON_START, OnBnClickedButtonStart)
|
|
ON_BN_CLICKED(IDC_BUTTON_SAVE, OnBnClickedButtonSave)
|
|
ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnBnClickedButtonClear)
|
|
ON_BN_CLICKED(IDC_RADIO_RESULT, OnBnClickedRadioResult)
|
|
ON_BN_CLICKED(IDC_RADIO_CONTENTS, OnBnClickedRadioContents)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_MONSTER_TYPE, OnCbnSelchangeComboMonsterType)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_SCRIPT_TYPE, OnCbnSelchangeComboScriptType)
|
|
ON_BN_CLICKED(IDC_BUTTON_SETTING, OnBnClickedButtonSetting)
|
|
ON_EN_CHANGE(IDC_EDIT_KILL_COUNT, OnEnChangeEditKillCount)
|
|
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
|
|
ON_BN_CLICKED(IDOK, OnBnClickedOk)
|
|
ON_WM_SIZE()
|
|
ON_BN_CLICKED(IDC_RADIO_MONSTER_LEVEL, OnBnClickedRadioMonsterLevel)
|
|
ON_BN_CLICKED(IDC_RADIO_MONSTER_CODE, OnBnClickedRadioMonsterCode)
|
|
ON_EN_CHANGE(IDC_EDIT_LOWER_LEVEL, OnEnChangeEditLowerLevel)
|
|
ON_EN_CHANGE(IDC_EDIT_UPPER_LEVEL, OnEnChangeEditUpperLevel)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CItemDropManagerDlg 메시지 처리기
|
|
|
|
BOOL CItemDropManagerDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
|
|
|
|
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
|
|
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);
|
|
}
|
|
}
|
|
|
|
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
|
|
// 프레임워크가 이 작업을 자동으로 수행합니다.
|
|
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
|
|
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
|
|
|
|
// TODO: 여기에 추가 초기화 작업을 추가합니다.
|
|
InitScriptTypeCombo(); // 스크립트 콤보박스 초기화
|
|
InitMonsterTypeCombo(); // 몬스터 종류 초기화
|
|
|
|
// 스크립트 초기화
|
|
m_DropManager.Initialize();
|
|
|
|
//List Control Grid 초기화...
|
|
DWORD styles = LVS_EX_GRIDLINES;
|
|
ListView_SetExtendedListViewStyleEx(m_listDropItem.GetSafeHwnd(), styles, styles);
|
|
|
|
GetDlgItem( IDC_BUTTON_START )->SetFocus();
|
|
|
|
OnBnClickedRadioMonsterLevel();
|
|
|
|
return TRUE; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|
{
|
|
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
|
|
{
|
|
CAboutDlg dlgAbout;
|
|
dlgAbout.DoModal();
|
|
}
|
|
else
|
|
{
|
|
CDialog::OnSysCommand(nID, lParam);
|
|
}
|
|
}
|
|
|
|
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
|
|
// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
|
|
// 프레임워크에서 이 작업을 자동으로 수행합니다.
|
|
|
|
void CItemDropManagerDlg::OnPaint()
|
|
{
|
|
if (IsIconic())
|
|
{
|
|
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
|
|
|
|
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
|
|
|
// 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
|
|
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;
|
|
|
|
// 아이콘을 그립니다.
|
|
dc.DrawIcon(x, y, m_hIcon);
|
|
}
|
|
else
|
|
{
|
|
CDialog::OnPaint();
|
|
}
|
|
}
|
|
|
|
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
|
|
// 이 함수를 호출합니다.
|
|
HCURSOR CItemDropManagerDlg::OnQueryDragIcon()
|
|
{
|
|
return static_cast<HCURSOR>(m_hIcon);
|
|
}
|
|
|
|
|
|
void CItemDropManagerDlg::OnBnClickedButtonStart()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
UpdateData( TRUE );
|
|
|
|
//초기화
|
|
OnBnClickedButtonClear();
|
|
CString strMsg;
|
|
|
|
// 몬스터 격파 개수 체크( 1 - 200 사이)
|
|
if( m_dwMonsterKillCount < MIN_MONSTER_KILL_COUNT || m_dwMonsterKillCount > MAX_MONSTER_KILL_COUNT )
|
|
{
|
|
AfxMessageBox( "몬스터 격파 개체 수는 1 - 100000000 사이 이어야 합니다. " );
|
|
return;
|
|
}
|
|
|
|
// 스크립트 타입 체크(0 or 1)
|
|
if( m_nScriptType != eSCRIPT_TYPE_HUNTING && m_nScriptType != eSCRIPT_TYPE_MISSION )
|
|
{
|
|
AfxMessageBox( "스크립트 종류는 헌팅, 미션 둘중 하나이어야 합니다. " );
|
|
return;
|
|
}
|
|
|
|
if( m_nRadioInput == 0 )
|
|
{
|
|
// 몬스터 레벨 체크( 1 - 100 사이)
|
|
if( m_nUpperMonsterLevel < MIN_MONSTER_LEVEL || m_nUpperMonsterLevel > MAX_MONSTER_LEVEL )
|
|
{
|
|
AfxMessageBox( "몬스터 레벨은 1 - 100 사이 이어야 합니다. " );
|
|
return;
|
|
}
|
|
|
|
if( m_nLowerMonsterLevel < MIN_MONSTER_LEVEL || m_nLowerMonsterLevel > MAX_MONSTER_LEVEL )
|
|
{
|
|
AfxMessageBox( "몬스터 레벨은 1 - 100 사이 이어야 합니다. " );
|
|
return;
|
|
}
|
|
|
|
if( m_nLowerMonsterLevel > m_nUpperMonsterLevel )
|
|
{
|
|
AfxMessageBox( "최고 몬스터 레벨은 최저 몬스터 레벨보다 같거나 커야 합니다." );
|
|
return;
|
|
}
|
|
|
|
// 몬스터 등급
|
|
if( m_nMonsterGrade < MIN_MONSTER_GRADE || m_nMonsterGrade > MAX_MONSTER_GRADE )
|
|
{
|
|
AfxMessageBox( "몬스터 등급은 0 ~ 6 사이 이어야 합니다. " );
|
|
return;
|
|
}
|
|
}
|
|
else if( m_nRadioInput == 1 )
|
|
{
|
|
// 몬스터 CODE
|
|
if( m_dwMonsterCode <= 0 )
|
|
{
|
|
AfxMessageBox( "몬스터 코드가 있어야 합니다. " );
|
|
return;
|
|
}
|
|
}
|
|
|
|
// 스크립트 타입 적용
|
|
m_DropManager.SetScriptType( m_nScriptType );
|
|
m_DropManager.SetCntKillMonster( m_dwMonsterKillCount );
|
|
|
|
// 타입에 따른 데이타 계산..
|
|
BOOL bRet = FALSE;
|
|
if( m_nRadioInput == 0)
|
|
bRet = m_DropManager.DropItem( m_nLowerMonsterLevel, m_nUpperMonsterLevel, m_nMonsterGrade + 1, m_dwMonsterKillCount, m_nScriptType );
|
|
else
|
|
bRet = m_DropManager.DropItemEx( m_dwMonsterCode, m_dwMonsterKillCount, m_nScriptType );
|
|
|
|
if(bRet != FALSE)
|
|
DisplayItemList( m_nRadioViewOption );
|
|
}
|
|
|
|
|
|
void CItemDropManagerDlg::OnBnClickedButtonSave()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다
|
|
|
|
char szFilter[] = "All Files(*.*)|*.*|Text Files(*.txt)|*.txt|";
|
|
CFile txtFile;
|
|
|
|
CFileDialog dlgFile(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, szFilter);
|
|
|
|
if(dlgFile.DoModal() == IDOK)
|
|
{
|
|
TRY
|
|
{
|
|
CString strPath = dlgFile.GetPathName();
|
|
strPath += ".txt";
|
|
|
|
if(txtFile.Open(strPath, CFile::modeCreate | CFile::modeWrite)) //새로운 파일이면..
|
|
{
|
|
CString strSave = m_DropManager.GetSaveDropInfo( m_nRadioViewOption );
|
|
if( strSave.GetLength() > 0)
|
|
txtFile.Write( strSave, strSave.GetLength()); //끝부터 파일에 씁니다.
|
|
|
|
txtFile.Close(); //파일을 닫습니다.
|
|
}
|
|
}
|
|
CATCH(CFileException, e)
|
|
{
|
|
CString strError;
|
|
int nError = 0;
|
|
e->GetErrorMessage((LPTSTR)strError.GetString(), nError, NULL);
|
|
AfxMessageBox(strError);
|
|
}
|
|
END_CATCH
|
|
}
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnBnClickedButtonClear()
|
|
{
|
|
/************************************************************************/
|
|
/* 리스트 컨트롤 초기화 구문 */
|
|
/************************************************************************/
|
|
for(int i = 0; i < m_nNowColumnCount; i++)
|
|
m_listDropItem.DeleteColumn(0);
|
|
|
|
BOOL bRet = m_listDropItem.DeleteAllItems();
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnBnClickedRadioResult()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnBnClickedRadioContents()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnCbnSelchangeComboMonsterType()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
m_nMonsterGrade = m_comboMonsterGrade.GetCurSel();
|
|
}
|
|
|
|
// 결과창에 표시를 한다.
|
|
void CItemDropManagerDlg::DisplayItemList(int nType)
|
|
{
|
|
InitListControl();
|
|
|
|
switch(nType) {
|
|
case 0: //결과만 표시
|
|
DisplayResult();
|
|
break;
|
|
case 1: //과정만 표시
|
|
DisplayProcess();
|
|
break;
|
|
}
|
|
}
|
|
|
|
//결과출력
|
|
void CItemDropManagerDlg::DisplayResult(void)
|
|
{
|
|
vector<CDropResult> vecInfo;
|
|
m_DropManager.CalcItemDropResult(); //결과를 계산한다.
|
|
DROPRESULT_MAP* pMapResult = m_DropManager.GetResultDropItems(); //결과값을 가져온다.
|
|
|
|
int nCol = 0, nItem = 0;
|
|
CString str;
|
|
LV_ITEM lvItem;
|
|
|
|
for( DROPRESULT_ITER iterResult = pMapResult->begin(); iterResult != pMapResult->end(); iterResult++ )
|
|
{
|
|
nCol = 0;
|
|
|
|
CDropResult info = iterResult->second;
|
|
CDropItem& item = info.GetItem();
|
|
lvItem.mask = LVIF_TEXT;
|
|
lvItem.iItem = nItem;
|
|
|
|
// 아이템 종류
|
|
lvItem.iSubItem = nCol++;
|
|
str = m_DropManager.GetItemType( item.GetDropType_() );
|
|
lvItem.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.InsertItem(&lvItem);
|
|
|
|
// 아이템 코드
|
|
lvItem.iSubItem = nCol++;
|
|
str.Format("%d", (WORD)item.GetCode() );
|
|
lvItem.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&lvItem);
|
|
|
|
// 이름 또는 돈
|
|
lvItem.iSubItem = nCol++;
|
|
if( item.GetDropType_() == DROP_TYPE_MONEY )
|
|
str.Format("%u", info.GetSumMoney() );
|
|
else
|
|
str.Format("%s", item.GetName().c_str() );
|
|
|
|
lvItem.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&lvItem);
|
|
|
|
// 드랍레벨
|
|
lvItem.iSubItem = nCol++;
|
|
str.Format("%d", (WORD)item.GetDropLevel() );
|
|
lvItem.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&lvItem);
|
|
|
|
//인첸트 급수
|
|
//lvItem.iSubItem = nCol++;
|
|
//str.Format("%d", item.GetEnchantLevel() );
|
|
//lvItem.pszText = (LPSTR)str.GetString();
|
|
//m_listDropItem.SetItem(&lvItem);
|
|
|
|
////랭크 급수
|
|
//lvItem.iSubItem = nCol++;
|
|
//str = m_DropManager.GetRank( (eRANK)item.GetRank() );
|
|
//lvItem.pszText = (LPSTR)str.GetString();
|
|
//m_listDropItem.SetItem(&lvItem);
|
|
|
|
////디바인 여부
|
|
//lvItem.iSubItem = nCol++;
|
|
//if( item.GetDivine() ) str = "Y";
|
|
//else str = "N";
|
|
//lvItem.pszText = (LPSTR)str.GetString();
|
|
//m_listDropItem.SetItem(&lvItem);
|
|
|
|
//개수
|
|
lvItem.iSubItem = nCol++;
|
|
str.Format("%d", info.GetItemCount() );
|
|
lvItem.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&lvItem);
|
|
|
|
//확률
|
|
lvItem.iSubItem = nCol++;
|
|
str.Format("%0.5f%%", info.GetDropRate() );
|
|
lvItem.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&lvItem);
|
|
|
|
nItem++;
|
|
}
|
|
}
|
|
|
|
//과정 출력
|
|
void CItemDropManagerDlg::DisplayProcess(void)
|
|
{
|
|
DROPITEM_MAP* pMapItem = m_DropManager.GetDropItems();
|
|
|
|
int nCol = 0, nItem = 0;
|
|
CString str;
|
|
LV_ITEM item;
|
|
|
|
for( DROPITEM_ITER iter = pMapItem->begin(); iter != pMapItem->end(); iter++ )
|
|
{
|
|
nCol = 0;
|
|
|
|
CDropItem info = iter->second;
|
|
item.mask = LVIF_TEXT;
|
|
item.iItem = nItem;
|
|
|
|
// 아이템 종류
|
|
item.iSubItem = nCol++;
|
|
str = m_DropManager.GetItemType( info.GetDropType_() );
|
|
item.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.InsertItem(&item);
|
|
|
|
// 아이템 코드
|
|
item.iSubItem = nCol++;
|
|
str.Format("%d", (WORD)info.GetCode() );
|
|
item.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&item);
|
|
|
|
// 이름
|
|
item.iSubItem = nCol++;
|
|
if( info.GetDropType_() == DROP_TYPE_MONEY )
|
|
str.Format("%d", info.GetMoney() );
|
|
else
|
|
str = info.GetName().c_str();
|
|
|
|
item.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&item);
|
|
|
|
// 드랍레벨
|
|
item.iSubItem = nCol++;
|
|
str.Format("%d", (WORD)info.GetDropLevel() );
|
|
item.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&item);
|
|
|
|
//인첸트 급수
|
|
item.iSubItem = nCol++;
|
|
str.Format("%d", info.GetEnchantLevel() );
|
|
item.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&item);
|
|
|
|
//랭크 급수
|
|
item.iSubItem = nCol++;
|
|
str = m_DropManager.GetRank( (eRANK)info.GetRank() );
|
|
item.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&item);
|
|
|
|
//디바인 여부
|
|
item.iSubItem = nCol++;
|
|
if( info.GetDivine() ) str = "Y";
|
|
else str = "N";
|
|
item.pszText = (LPSTR)str.GetString();
|
|
m_listDropItem.SetItem(&item);
|
|
|
|
nItem++;
|
|
}
|
|
}
|
|
|
|
void CItemDropManagerDlg::InitMonsterTypeCombo(void)
|
|
{
|
|
m_comboMonsterGrade.ResetContent();
|
|
|
|
vector<CString> vecTitle = m_DropManager.GetNameMonsterType();
|
|
|
|
int nSize = (int)vecTitle.size();
|
|
|
|
for(int i = 0; i < nSize; i++)
|
|
{
|
|
CString strTitle = vecTitle[i];
|
|
m_comboMonsterGrade.InsertString(i, strTitle);
|
|
}
|
|
|
|
m_comboMonsterGrade.SetCurSel(0);
|
|
m_nMonsterGrade = 0;
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
// 리스트 컨트롤 초기화
|
|
void CItemDropManagerDlg::InitListControl(void)
|
|
{
|
|
/************************************************************************/
|
|
/* 리스트 컨트롤 제목 설정 */
|
|
/************************************************************************/
|
|
vector<CString> vecTitle;
|
|
if( m_nRadioViewOption == 0) //결과
|
|
vecTitle = m_DropManager.GetResultTitle();
|
|
else if( m_nRadioViewOption == 1 ) //과정
|
|
vecTitle = m_DropManager.GetProcessTitle();
|
|
|
|
int nSize = (int)vecTitle.size();
|
|
|
|
for(int i = 0; i < nSize; i++)
|
|
{
|
|
CString strTitle = vecTitle[i];
|
|
LV_COLUMN lvcolumn;
|
|
lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
|
|
lvcolumn.fmt = LVCFMT_LEFT;
|
|
lvcolumn.pszText = (LPSTR)strTitle.GetString();
|
|
lvcolumn.iSubItem = 0;
|
|
if( i == 2 ) lvcolumn.cx = 150;
|
|
else lvcolumn.cx = 80;
|
|
|
|
if( i == 7 )
|
|
{
|
|
lvcolumn.cx = 50;
|
|
lvcolumn.cchTextMax = 50;
|
|
}
|
|
|
|
lvcolumn.cchTextMax = 70;
|
|
m_listDropItem.InsertColumn(i, &lvcolumn);
|
|
}
|
|
|
|
m_nNowColumnCount = i;
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CItemDropManagerDlg::InitScriptTypeCombo()
|
|
{
|
|
m_comboScriptType.ResetContent();
|
|
|
|
vector<CString> vecTitle = m_DropManager.GetNameScriptType();
|
|
|
|
int nSize = (int)vecTitle.size();
|
|
|
|
for(int i = 0; i < nSize; i++)
|
|
{
|
|
CString strTitle = vecTitle[i];
|
|
m_comboScriptType.InsertString(i, strTitle);
|
|
}
|
|
|
|
m_comboScriptType.SetCurSel(0);
|
|
m_nScriptType = eSCRIPT_TYPE_HUNTING;
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnCbnSelchangeComboScriptType()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
m_nScriptType = m_comboScriptType.GetCurSel();
|
|
}
|
|
|
|
|
|
void CItemDropManagerDlg::OnBnClickedButtonSetting()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
//BROWSEINFO info;
|
|
//info.ulFlags = BIF_NEWDIALOGSTYLE;
|
|
|
|
//LPITEMIDLIST pItemIdList;
|
|
//pItemIdList = SHBrowseForFolder( &info );
|
|
//if( pItemIdList == NULL )
|
|
//{
|
|
// AfxMessageBox( "정보를 가지고 올수 없습니다." );
|
|
//}
|
|
}
|
|
|
|
|
|
void CItemDropManagerDlg::OnEnChangeEditKillCount()
|
|
{
|
|
// TODO: RICHEDIT 컨트롤인 경우 이 컨트롤은
|
|
// CDialog::마스크에 OR 연산하여 설정된 ENM_CHANGE 플래그를 지정하여
|
|
// CRichEditCtrl().SetEventMask()를 호출하도록 OnInitDialog() 함수를 재지정하지 않으면
|
|
// 이 알림을 보내지 않습니다.
|
|
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
|
|
// 몬스터 격파 개수 체크( 1 - 100000000 사이)
|
|
DWORD dwPreKillCount = m_dwMonsterKillCount;
|
|
UpdateData(TRUE);
|
|
|
|
if( m_dwMonsterKillCount < MIN_MONSTER_KILL_COUNT || m_dwMonsterKillCount > MAX_MONSTER_KILL_COUNT )
|
|
{
|
|
AfxMessageBox( "몬스터 격파 개체 수는 1 - 100000000 사이 이어야 합니다. " );
|
|
m_dwMonsterKillCount = dwPreKillCount;
|
|
UpdateData( FALSE );
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnBnClickedCancel()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
OnCancel();
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnBnClickedOk()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
return;
|
|
|
|
OnOK();
|
|
}
|
|
|
|
|
|
void CItemDropManagerDlg::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CDialog::OnSize(nType, cx, cy);
|
|
|
|
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
|
|
// CRect rect, rect2;
|
|
// m_listDropItem.GetClientRect( &rect );
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnBnClickedRadioMonsterLevel()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
UpdateData( TRUE );
|
|
|
|
GetDlgItem( IDC_EDIT_MONSTER_CODE )->EnableWindow( FALSE );
|
|
|
|
GetDlgItem( IDC_EDIT_UPPER_LEVEL )->EnableWindow( TRUE );
|
|
GetDlgItem( IDC_EDIT_LOWER_LEVEL )->EnableWindow( TRUE );
|
|
GetDlgItem( IDC_COMBO_MONSTER_TYPE )->EnableWindow( TRUE );
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnBnClickedRadioMonsterCode()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
UpdateData( TRUE );
|
|
|
|
GetDlgItem( IDC_EDIT_MONSTER_CODE )->EnableWindow( TRUE );
|
|
|
|
GetDlgItem( IDC_EDIT_UPPER_LEVEL )->EnableWindow( FALSE );
|
|
GetDlgItem( IDC_EDIT_LOWER_LEVEL )->EnableWindow( FALSE );
|
|
GetDlgItem( IDC_COMBO_MONSTER_TYPE )->EnableWindow( FALSE );
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnEnChangeEditLowerLevel()
|
|
{
|
|
// TODO: RICHEDIT 컨트롤인 경우 이 컨트롤은
|
|
// CDialog::마스크에 OR 연산하여 설정된 ENM_CHANGE 플래그를 지정하여
|
|
// CRichEditCtrl().SetEventMask()를 호출하도록 OnInitDialog() 함수를 재지정하지 않으면
|
|
// 이 알림을 보내지 않습니다.
|
|
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
int nPreLevel = m_nLowerMonsterLevel;
|
|
UpdateData(TRUE);
|
|
|
|
// 몬스터 레벨 체크( 1 - 200 사이)
|
|
if( m_nLowerMonsterLevel < MIN_MONSTER_LEVEL || m_nLowerMonsterLevel > MAX_MONSTER_LEVEL )
|
|
{
|
|
AfxMessageBox( "몬스터 레벨은 1 - 100 사이 이어야 합니다. " );
|
|
m_nLowerMonsterLevel = nPreLevel;
|
|
UpdateData( FALSE );
|
|
return;
|
|
}
|
|
}
|
|
|
|
void CItemDropManagerDlg::OnEnChangeEditUpperLevel()
|
|
{
|
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
|
int nPreLevel = m_nUpperMonsterLevel;
|
|
UpdateData(TRUE);
|
|
|
|
// 몬스터 레벨 체크( 1 - 200 사이)
|
|
if( m_nUpperMonsterLevel < MIN_MONSTER_LEVEL || m_nUpperMonsterLevel > MAX_MONSTER_LEVEL )
|
|
{
|
|
AfxMessageBox( "몬스터 레벨은 1 - 100 사이 이어야 합니다. " );
|
|
m_nUpperMonsterLevel = nPreLevel;
|
|
UpdateData( FALSE );
|
|
return;
|
|
}
|
|
}
|