DragonNest/Client/WorldPainterPlugins/EventUnitAreaInfo/UnitInfoDlg.cpp
2024-12-19 09:48:26 +08:00

150 lines
No EOL
4.5 KiB
C++

// UnitInfoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "UnitInfoDlg.h"
#include "EtWorldEventArea.h"
#include "DNTableFile.h"
#include "TEtWorldEventArea.h"
#include "EtUIXML.h"
#include "StringUtil.h"
// CUnitInfoDlg dialog
IMPLEMENT_DYNAMIC(CUnitInfoDlg, CDialog)
extern DNTableFileFormat *s_pSox[3];
CUnitInfoDlg::CUnitInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CUnitInfoDlg::IDD, pParent)
, m_nMonsterGroupID(0)
, m_nValueMin(0)
, m_nValueMax(0)
, m_nCountMin(0)
, m_nCountMax(0)
{
m_pEventArea = NULL;
m_nEventAreaCommonParamCount = 1; // WorldPainter g_EventAreaPropertyDefine 갱신될때마다 수정해야하는 구조.
}
CUnitInfoDlg::~CUnitInfoDlg()
{
}
void CUnitInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_ListCtrl);
DDX_Control(pDX, IDC_COMBO1, m_ComboBox);
DDX_Control(pDX, IDC_COMBO1, m_ComboBox);
DDX_Text(pDX, IDC_EDIT2, m_nMonsterGroupID );
DDX_Text(pDX, IDC_EDIT3, m_nValueMin );
DDX_Text(pDX, IDC_EDIT4, m_nValueMax );
DDX_Text(pDX, IDC_EDIT6, m_nCountMin );
DDX_Text(pDX, IDC_EDIT5, m_nCountMax );
}
BEGIN_MESSAGE_MAP(CUnitInfoDlg, CDialog)
ON_CBN_SELCHANGE(IDC_COMBO1, &CUnitInfoDlg::OnCbnSelchangeCombo1)
END_MESSAGE_MAP()
// CUnitInfoDlg message handlers
BOOL CUnitInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if( m_pEventArea == NULL ) return FALSE;
// TODO: Add extra initialization here
m_ComboBox.SetCurSel(0);
m_ListCtrl.AddColumn( "Monster ID", 70, LVCFMT_RIGHT );
m_ListCtrl.AddColumn( "Value", 40, LVCFMT_RIGHT );
m_ListCtrl.AddColumn( "%", 30, LVCFMT_RIGHT );
m_ListCtrl.AddColumn( "Lv", 30, LVCFMT_RIGHT );
m_ListCtrl.AddColumn( "Name", 220, LVCFMT_LEFT );
m_ListCtrl.SetExtendedStyle( LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_FLATSB );
CString szAreaName = m_pEventArea->GetName();
char szHeadStr[256] = { 0, };
m_nCompoundIndex = -1;
sscanf_s( szAreaName.GetBuffer(), "%s %d", szHeadStr, 256, &m_nCompoundIndex );
_strlwr_s( szHeadStr );
if( m_nCompoundIndex == -1 ) return FALSE;
CTEtWorldEventArea *pArea = (CTEtWorldEventArea *)m_pEventArea;
m_nMonsterGroupID = m_nCompoundIndex;
//rlkt 2016
// m_nValueMin = (int)pArea->GetProperty(0+m_nEventAreaCommonParamCount)->GetVariableVector2Ptr()->x;
// m_nValueMax = (int)pArea->GetProperty(0+m_nEventAreaCommonParamCount)->GetVariableVector2Ptr()->y;
UpdateData( FALSE );
RefreshMonsterInfo( m_nCompoundIndex, m_ComboBox.GetCurSel() );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CUnitInfoDlg::OnCbnSelchangeCombo1()
{
// TODO: Add your control notification handler code here
RefreshMonsterInfo( m_nCompoundIndex, m_ComboBox.GetCurSel() );
}
void CUnitInfoDlg::RefreshMonsterInfo( int nCompoundIndex, int nDifficulty )
{
m_ListCtrl.DeleteAllItems();
char szLabel[64];
char szTemp[256];
std::vector<int> nVecList;
for( int i=0; i<15; i++ ) {
sprintf_s( szLabel, "_MonsterTableID%d_%d", nDifficulty + 1, i + 1 );
int nMonsterID = s_pSox[1]->GetFieldFromLablePtr( nCompoundIndex, szLabel )->GetInteger();
if( nMonsterID < 1 ) continue;
sprintf_s( szLabel, "_Ratio%d_%d", nDifficulty + 1, i + 1 );
float fRatio = s_pSox[1]->GetFieldFromLablePtr( nCompoundIndex, szLabel )->GetFloat();
sprintf_s( szLabel, "_Value%d_%d", nDifficulty + 1, i + 1 );
int nValue = s_pSox[1]->GetFieldFromLablePtr( nCompoundIndex, szLabel )->GetInteger();
nVecList.push_back( nValue );
itoa( nMonsterID, szTemp, 10 );
int nItemID = m_ListCtrl.InsertItem( m_ListCtrl.GetItemCount(), szTemp );
itoa( nValue, szTemp, 10 );
m_ListCtrl.SetItemText( nItemID, 1, szTemp );
itoa( (int)(fRatio*100.f), szTemp, 10 );
m_ListCtrl.SetItemText( nItemID, 2, szTemp );
if( !s_pSox[0]->IsExistItem( nMonsterID ) ) {
m_ListCtrl.SetItemText( nItemID, 3, "?" );
m_ListCtrl.SetItemText( nItemID, 4, "Invalid Item ID" );
continue;
}
nValue = s_pSox[0]->GetFieldFromLablePtr( nMonsterID, "_Level" )->GetInteger();
itoa( nValue, szTemp, 10 );
m_ListCtrl.SetItemText( nItemID, 3, szTemp );
nValue = s_pSox[0]->GetFieldFromLablePtr( nMonsterID, "_NameID" )->GetInteger();
std::string szName;
ToMultiString( std::wstring(CEtUIXML::GetInstance().GetUIString( CEtUIXML::idCategory1, nValue )), szName );
m_ListCtrl.SetItemText( nItemID, 4, szName.c_str() );
}
if( !nVecList.empty() ) {
std::sort( nVecList.begin(), nVecList.end() );
m_nCountMin = m_nValueMin / nVecList[0];
m_nCountMax = m_nValueMax / nVecList[nVecList.size()-1];
UpdateData( FALSE );
}
}