Files
Client/Server/ToolProject/GameDBTool/GameDBToolDlg.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

1256 lines
29 KiB
C++

// GameDBToolDlg.cpp : 구현 파일
//
#include "stdafx.h"
#include "GameDBTool.h"
#include "GameDBToolDlg.h"
#include ".\gamedbtooldlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 응용 프로그램 정보에 사용되는 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()
// CGameDBToolDlg 대화 상자
CGameDBToolDlg::CGameDBToolDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGameDBToolDlg::IDD, pParent)
, m_LastPosX(_T(""))
, m_LastPosY(_T(""))
, m_LastPosZ(_T(""))
, m_SavePosX(_T(""))
, m_SavePosY(_T(""))
, m_SavePosZ(_T(""))
, m_UID(_T(""))
, m_CID(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGameDBToolDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_USER_LIST, m_UserList);
DDX_Control(pDX, IDC_CHAR_LIST, m_CharList);
DDX_Control(pDX, IDC_LOG, m_Log);
DDX_Text(pDX, IDC_LAST_POSX, m_LastPosX);
DDX_Text(pDX, IDC_LAST_POSY, m_LastPosY);
DDX_Text(pDX, IDC_LAST_POSZ, m_LastPosZ);
DDX_Text(pDX, IDC_SAVE_POSX, m_SavePosX);
DDX_Text(pDX, IDC_SAVE_POSY, m_SavePosY);
DDX_Text(pDX, IDC_SAVE_POSZ, m_SavePosZ);
DDX_Text(pDX, IDC_UID, m_UID);
DDX_Text(pDX, IDC_CID, m_CID);
}
BEGIN_MESSAGE_MAP(CGameDBToolDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_COMMAND(ID_CONNECT, OnConnect)
ON_COMMAND(ID_DISCONNECT, OnDisconnect)
ON_COMMAND(ID_USER_INSERT, OnUserInsert)
ON_COMMAND(ID_USER_DELETE, OnUserDelete)
ON_COMMAND(ID_ADMIN_INSERT, OnAdminInsert)
ON_COMMAND(ID_ADMIN_DELETE, OnAdminDelete)
ON_COMMAND(ID_CHAR_INSERT, OnCharInsert)
ON_COMMAND(ID_CHAR_DELETE, OnCharDelete)
ON_COMMAND(ID_CHAR_UPDATE, OnCharUpdate)
ON_COMMAND(ID_USER_SEARCH, OnUserSearch)
ON_COMMAND(ID_CHAR_SEARCH, OnCharSearch)
ON_BN_CLICKED(IDC_CLEAR_LOG, OnBnClickedClearLog)
ON_NOTIFY(NM_RCLICK, IDC_USER_LIST, OnNMRclickUserList)
ON_NOTIFY(NM_RCLICK, IDC_CHAR_LIST, OnNMRclickCharList)
ON_NOTIFY(LVN_KEYDOWN, IDC_USER_LIST, OnLvnKeydownUserList)
ON_NOTIFY(LVN_KEYDOWN, IDC_CHAR_LIST, OnLvnKeydownCharList)
ON_NOTIFY(NM_CLICK, IDC_CHAR_LIST, OnNMClickCharList)
ON_NOTIFY(NM_CLICK, IDC_USER_LIST, OnNMClickUserList)
ON_BN_CLICKED(IDC_RESET_POS, OnBnClickedResetPos)
ON_BN_CLICKED(IDC_UPDATE_CHAR, OnBnClickedUpdateChar)
ON_WM_KEYDOWN()
ON_BN_CLICKED(IDC_UPDATE_USER, OnBnClickedUpdateUser)
ON_COMMAND(ID_USER_UPDATE, OnUserUpdate)
ON_WM_DESTROY()
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
// CGameDBToolDlg 메시지 처리기
BOOL CGameDBToolDlg::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: 여기에 추가 초기화 작업을 추가합니다.
m_pFileOpen = new FileOpen(m_hWnd);
if(NULL == m_pFileOpen)
return FALSE;
m_UserList.SetColumn();
m_CharList.SetColumn();
m_SearchType = SearchType::None;
memset(m_SearchData, 0, MAX_PATH);
m_SearchUID = 0;
m_SearchCID = 0;
m_AlignType = AlignType::ASC;
memset(m_AlignData, 0, MAX_PATH);
m_Log.LogPrint("[초기화] 초기화 완료.");
return TRUE; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
}
void CGameDBToolDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
// 프레임워크에서 이 작업을 자동으로 수행합니다.
void CGameDBToolDlg::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 CGameDBToolDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CGameDBToolDlg::UpdateUserTable()
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
const int MaxRow = 200;
USERINFO_TABLE UserInfo[MaxRow];
int StartRow;
int RowCounter, Rows;
char Query[256] = "";
switch(m_SearchType)
{
case SearchType::None:
return;
case SearchType::UID:
// 검색 UID 설정
SetSearchUID(atoi(m_SearchData));
sprintf(Query, "Select * from UserInfo where UID='%d'", m_SearchUID);
break;
case SearchType::UIDBelow:
SetSearchUID(atoi(m_SearchData));
sprintf(Query, "Select * from UserInfo where UID<'%d'", m_SearchUID);
break;
case SearchType::UIDAbove:
SetSearchUID(atoi(m_SearchData));
sprintf(Query, "Select * from UserInfo where UID>'%d'", m_SearchUID);
break;
case SearchType::CID:
case SearchType::Name:
sprintf(Query, "Select * from UserInfo where Char1='%d' or Char2='%d' or Char3='%d'", m_SearchCID, m_SearchCID, m_SearchCID);
break;
case SearchType::CIDBelow:
case SearchType::CIDAbove:
case SearchType::LevelBelow:
case SearchType::LevelAbove:
sprintf(Query, "Select * from UserInfo where UID='%d'", m_SearchUID);
break;
default:
return;
}
switch(m_AlignType)
{
case AlignType::ASC:
sprintf(Query, "%s order by %s asc", Query, m_AlignData);
break;
case AlignType::DESC:
sprintf(Query, "%s order by %s desc", Query, m_AlignData);
break;
}
m_Log.LogPrint("[유저 검색]--------------------------------------------------------------------------------------------------------------------");
m_Log.LogPrint("검색 시작 : %s", Query);
m_UserList.DeleteAllItems();
ZeroMemory(&UserInfo, sizeof(USERINFO_TABLE) * MaxRow);
for(StartRow = 0;; StartRow += MaxRow)
{
if(CDBSingleObject::GetInstance().Select( Query, (void**)&UserInfo, sizeof(USERINFO_TABLE), StartRow, MaxRow, &Rows))
{
for(RowCounter = 0; RowCounter < Rows; RowCounter++)
{
if(0 != m_AdminDB.GetAdminLevel(UserInfo[RowCounter].UID))
{
m_UserList.AddUserRow(&UserInfo[RowCounter], true);
}
else
{
m_UserList.AddUserRow(&UserInfo[RowCounter], false);
}
}
if(1 == Rows)
{
SetSearchUID(UserInfo[0].UID);
}
}
else
{
m_Log.LogPrint("[유저 검색] 검색중 에러 발생 : %s", CDBSingleObject::GetInstance().GetErrorString());
UpdateData(FALSE);
return;
}
if(Rows < MaxRow)
break;
}
m_Log.LogPrint("[유저 검색] 검색 완료");
UpdateData(FALSE);
*/
}
void CGameDBToolDlg::AddUserToList(DWORD CID_In)
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
const int MaxRow = 200;
USERINFO_TABLE UserInfo[MaxRow];
int StartRow;
int RowCounter, Rows;
char Query[256] = "";
sprintf(Query, "Select * from UserInfo where Char1='%d' or Char2='%d' or Char3='%d'", CID_In, CID_In, CID_In);
// 무조건 유아이디로 DESC 정렬
strcat(Query, "order by UID desc");
m_Log.LogPrint("[유저 검색]--------------------------------------------------------------------------------------------------------------------");
m_Log.LogPrint("검색 시작 : %s", Query);
ZeroMemory(&UserInfo, sizeof(USERINFO_TABLE) * MaxRow);
for(StartRow = 0;; StartRow += MaxRow)
{
if(CDBSingleObject::GetInstance().Select( Query, (void**)&UserInfo, sizeof(USERINFO_TABLE), StartRow, MaxRow, &Rows))
{
for(RowCounter = 0; RowCounter < Rows; RowCounter++)
{
if(0 != m_AdminDB.GetAdminLevel(UserInfo[RowCounter].UID))
{
m_UserList.AddUserRow(&UserInfo[RowCounter], true);
}
else
{
m_UserList.AddUserRow(&UserInfo[RowCounter], false);
}
}
if(1 == Rows)
{
SetSearchUID(UserInfo[0].UID);
}
}
else
{
m_Log.LogPrint("[유저 검색] 검색중 에러 발생 : %s", CDBSingleObject::GetInstance().GetErrorString());
UpdateData(FALSE);
return;
}
if(Rows < MaxRow)
break;
}
m_Log.LogPrint("[유저 검색] 검색 완료");
UpdateData(FALSE);
*/
}
void CGameDBToolDlg::UpdateCharTable()
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
const int MaxRow = 200;
CHAR_INFOST CharInfo[MaxRow];
int StartRow;
int RowCounter, Rows;
char Query[256] = "";
switch(m_SearchType)
{
case SearchType::None:
return;
case SearchType::UID:
// 검색 CID 설정
SetSearchCID(0);
return;
case SearchType::CID:
SetSearchCID(atoi(m_SearchData));
// GetCharInfo 프로시져와 같은 기능
sprintf(Query, "Select UID, Name, Sex, Hair, Face, Nationality, Class, Fame, Mileage, Guild, Party, Level, Gold, IP, STR, DEX, CON, Intell, WIS, HP, MP, Exp from CharInfo where UID='%d'", m_SearchCID);
break;
case SearchType::CIDBelow:
SetSearchCID(atoi(m_SearchData));
sprintf(Query, "Select UID, Name, Sex, Hair, Face, Nationality, Class, Fame, Mileage, Guild, Party, Level, Gold, IP, STR, DEX, CON, Intell, WIS, HP, MP, Exp from CharInfo where UID<'%d'", m_SearchCID);
break;
case SearchType::CIDAbove:
SetSearchCID(atoi(m_SearchData));
sprintf(Query, "Select UID, Name, Sex, Hair, Face, Nationality, Class, Fame, Mileage, Guild, Party, Level, Gold, IP, STR, DEX, CON, Intell, WIS, HP, MP, Exp from CharInfo where UID>'%d'", m_SearchCID);
break;
case SearchType::Name:
sprintf(Query, "Select UID, Name, Sex, Hair, Face, Nationality, Class, Fame, Mileage, Guild, Party, Level, Gold, IP, STR, DEX, CON, Intell, WIS, HP, MP, Exp from CharInfo where Name='%s'", m_SearchData);
break;
case SearchType::Level:
sprintf(Query, "Select UID, Name, Sex, Hair, Face, Nationality, Class, Fame, Mileage, Guild, Party, Level, Gold, IP, STR, DEX, CON, Intell, WIS, HP, MP, Exp from CharInfo where Level='%s'", m_SearchData);
break;
case SearchType::LevelBelow:
sprintf(Query, "Select UID, Name, Sex, Hair, Face, Nationality, Class, Fame, Mileage, Guild, Party, Level, Gold, IP, STR, DEX, CON, Intell, WIS, HP, MP, Exp from CharInfo where Level<'%s'", m_SearchData);
break;
case SearchType::LevelAbove:
sprintf(Query, "Select UID, Name, Sex, Hair, Face, Nationality, Class, Fame, Mileage, Guild, Party, Level, Gold, IP, STR, DEX, CON, Intell, WIS, HP, MP, Exp from CharInfo where Level>'%s'", m_SearchData);
break;
default:
return;
}
switch(m_AlignType)
{
case AlignType::ASC:
sprintf(Query, "%s order by %s asc", Query, m_AlignData);
break;
case AlignType::DESC:
sprintf(Query, "%s order by %s desc", Query, m_AlignData);
break;
}
m_Log.LogPrint("[캐릭터 검색]-------------------------------------------------------------------------------------------------------------------");
m_Log.LogPrint("검색 시작 : select * from CharInfo %s", &Query[155]);
m_CharList.DeleteAllItems();
ZeroMemory(&CharInfo, sizeof(CHAR_INFOST) * MaxRow);
for(StartRow = 0;; StartRow += MaxRow)
{
if(CDBSingleObject::GetInstance().Select( Query, (void**)&CharInfo, sizeof(CHAR_INFOST), StartRow, MaxRow, &Rows))
{
for(RowCounter = 0; RowCounter < Rows; RowCounter++)
{
m_CharList.AddCharRow(&CharInfo[RowCounter]);
}
if(1 == Rows)
{
SetSearchCID(CharInfo[0].UID);
}
}
else
{
m_Log.LogPrint("[캐릭터 검색] 검색중 에러 발생 : %s", CDBSingleObject::GetInstance().GetErrorString());
UpdateData(FALSE);
return;
}
if(Rows < MaxRow)
break;
}
m_Log.LogPrint("[캐릭터 검색] 검색 완료");
UpdateData(FALSE);
*/
}
void CGameDBToolDlg::AddCharToList(DWORD CID_In)
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
const int MaxRow = 200;
CHAR_INFOST CharInfo[MaxRow];
int StartRow;
int RowCounter, Rows;
char Query[256] = "";
sprintf(Query, "Select UID, Name, Sex, Hair, Face, Nationality, Class, Fame, Mileage, Guild, Party, Level, Gold, IP, STR, DEX, CON, Intell, WIS, HP, MP, Exp from CharInfo where UID='%d'", CID_In);
switch(m_AlignType)
{
case AlignType::ASC:
sprintf(Query, "%s order by UID asc", Query);
break;
case AlignType::DESC:
sprintf(Query, "%s order by UID desc", Query);
break;
}
m_Log.LogPrint("[캐릭터 검색]-------------------------------------------------------------------------------------------------------------------");
m_Log.LogPrint("검색 시작 : select * from CharInfo %s", &Query[155]);
ZeroMemory(&CharInfo, sizeof(CHAR_INFOST) * MaxRow);
for(StartRow = 0;; StartRow += MaxRow)
{
if(CDBSingleObject::GetInstance().Select( Query, (void**)&CharInfo, sizeof(CHAR_INFOST), StartRow, MaxRow, &Rows))
{
for(RowCounter = 0; RowCounter < Rows; RowCounter++)
{
m_CharList.AddCharRow(&CharInfo[RowCounter]);
}
if(1 == Rows)
{
SetSearchCID(CharInfo[0].UID);
}
}
else
{
m_Log.LogPrint("[캐릭터 검색] 검색중 에러 발생 : %s", CDBSingleObject::GetInstance().GetErrorString());
UpdateData(FALSE);
return;
}
if(Rows < MaxRow)
break;
}
m_Log.LogPrint("[캐릭터 검색] 검색 완료");
UpdateData(FALSE);
*/
}
void CGameDBToolDlg::UpdateCharPos(DWORD CID_In)
{
CHAR_POS CharPos = {0,};
if(!DBComponent::GameDB::GetCharPos(CDBSingleObject::GetInstance(), CID_In, &CharPos))
{
m_Log.LogPrint("[캐릭터 위치] %d 검색중 에러 발생 : %s", CID_In, CDBSingleObject::GetInstance().GetErrorString());
}
else
{
m_LastPosX.Format("%f", CharPos.LastPoint.fPointX);
m_LastPosY.Format("%f", CharPos.LastPoint.fPointY);
m_LastPosZ.Format("%f", CharPos.LastPoint.fPointZ);
m_SavePosX.Format("%f", CharPos.SavePoint.fPointX);
m_SavePosY.Format("%f", CharPos.SavePoint.fPointY);
m_SavePosZ.Format("%f", CharPos.SavePoint.fPointZ);
}
UpdateData(FALSE);
}
void CGameDBToolDlg::OnConnect()
{
if(!CDBSingleObject::GetInstance().Connect(CDBSingleObject::Class_GameDB))
{
m_Log.LogPrint("[연결] 접속에 실패 했습니다. %s", CDBSingleObject::GetInstance().GetErrorString());
}
else
{
m_Log.LogPrint("[연결] 접속에 성공 했습니다.");
if(m_AdminDB.Initialize())
{
m_Log.LogPrint("[어드민] 초기화 성공 했습니다.");
}
}
UpdateData(FALSE);
}
void CGameDBToolDlg::OnDisconnect()
{
if(CDBSingleObject::GetInstance().DisconnectDataSource())
{
m_Log.LogPrint("[끊기] 접속을 해지 했습니다.");
}
UpdateData(FALSE);
}
void CGameDBToolDlg::OnUserInsert()
{
// TODO: 유저 추가
}
void CGameDBToolDlg::OnUserDelete()
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
POSITION Pos;
int Index;
char strUID[256] = "";
DWORD UserID = 0;
Pos = m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetItemText(Index, 0, strUID, 256))
{
UserID = atoi(strUID);
m_Log.LogPrint("[유저 삭제] 유저 삭제 시작 %d", UserID);
if(!DBComponent::GameDB::DeleteUser(CDBSingleObject::GetInstance(), UserID))
{
m_Log.LogPrint("[유저 삭제] 유저 삭제 실패 %d : %s", UserID, CDBSingleObject::GetInstance().GetErrorString());
}
m_Log.LogPrint("[유저 삭제] 유저 삭제 완료 %d", UserID);
}
}
UpdateUserTable();
UpdateCharTable();
*/
}
void CGameDBToolDlg::OnAdminInsert()
{
POSITION Pos;
int Index;
char strUserID[100] = "";
DWORD UserID = 0;
Pos = m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetItemText(Index, 0, strUserID, 256))
{
UserID = atoi(strUserID);
if(!DBComponent::GameDB::InsertAdmin(CDBSingleObject::GetInstance(), UserID))
{
m_Log.LogPrint("[어드민 추가] 어드민 추가 실패 %d : %s", UserID, CDBSingleObject::GetInstance().GetErrorString());
}
else
{
m_Log.LogPrint("[어드민 추가] 어드민 추가 성공 %d", UserID);
}
}
}
UpdateUserTable();
}
void CGameDBToolDlg::OnAdminDelete()
{
POSITION Pos;
int Index;
char strUserID[100] = "";
DWORD UserID = 0;
Pos = m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetItemText(Index, 0, strUserID, 256))
{
UserID = atoi(strUserID);
if(!DBComponent::GameDB::DeleteAdmin(CDBSingleObject::GetInstance(), UserID))
{
m_Log.LogPrint("[어드민 삭제] 어드민 삭제 실패 %d : %s", UserID, CDBSingleObject::GetInstance().GetErrorString());
}
else
{
m_Log.LogPrint("[어드민 삭제] 어드민 삭제 성공 %d", UserID);
}
}
}
UpdateUserTable();
}
void CGameDBToolDlg::OnCharInsert()
{
// TODO: 캐릭터 추가
}
void CGameDBToolDlg::OnCharDelete()
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
POSITION Pos;
int Index;
char strCID[256] = "";
DWORD CharID = 0;
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_CharList.GetNextSelectedItem(Pos);
if(m_CharList.GetItemText(Index, 0, strCID, 256))
{
CharID = atoi(strCID);
m_Log.LogPrint("[캐릭터 삭제] 캐릭터 삭제 시작 %d", CharID);
if(!DBComponent::GameDB::DeleteChar(CDBSingleObject::GetInstance(), CharID))
{
m_Log.LogPrint("[캐릭터 삭제] 캐릭터 삭제 실패 %d : %s", CharID, CDBSingleObject::GetInstance().GetErrorString());
}
m_Log.LogPrint("[캐릭터 삭제] 캐릭터 삭제 완료 %d", CharID);
}
}
UpdateUserTable();
UpdateCharTable();
*/
}
void CGameDBToolDlg::OnCharUpdate()
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
POSITION Pos;
int Index;
CHAR_INFOST CharInfo = {0,};
CHAR_POS CharPos = {0,};
unsigned short Equip[15] = {0,};
UpdateData(TRUE);
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_CharList.GetNextSelectedItem(Pos);
if(m_CharList.GetCharRow(Index, &CharInfo))
{
m_Log.LogPrint("[캐릭터 업데이트] 캐릭터 업데이트 시작 %d", CharInfo.UID);
// TODO : 캐릭터 장비 처리
// 캐릭터 정보 업데이트
if(!DBComponent::GameDB::UpdateCharInfo(CDBSingleObject::GetInstance(),
CharInfo.UID, &CharInfo, Equip, 15))
{
m_Log.LogPrint("[캐릭터 업데이트] 캐릭터 정보 업데이트 실패 %d", CharInfo.UID);
}
else
{
m_Log.LogPrint("[캐릭터 업데이트] 캐릭터 정보 업데이트 성공 %d", CharInfo.UID);
}
// 캐릭터 위치 업데이트
CharPos.LastPoint.fPointX = (float)atof(m_LastPosX.GetBuffer(0));
CharPos.LastPoint.fPointY = (float)atof(m_LastPosY.GetBuffer(0));
CharPos.LastPoint.fPointZ = (float)atof(m_LastPosZ.GetBuffer(0));
CharPos.SavePoint.fPointX = (float)atof(m_SavePosX.GetBuffer(0));
CharPos.SavePoint.fPointY = (float)atof(m_SavePosY.GetBuffer(0));
CharPos.SavePoint.fPointZ = (float)atof(m_SavePosZ.GetBuffer(0));
if(!DBComponent::GameDB::UpdateCharPos(CDBSingleObject::GetInstance(), CharInfo.UID, &CharPos))
{
m_Log.LogPrint("[캐릭터 업데이트] 캐릭터 위치 업데이트 실패 %d", CharInfo.UID);
}
else
{
m_Log.LogPrint("[캐릭터 업데이트] 캐릭터 위치 업데이트 성공 %d", CharInfo.UID);
}
m_Log.LogPrint("[캐릭터 업데이트] 캐릭터 업데이트 완료 %d", CharInfo.UID);
UpdateCharTable();
}
}
UpdateData(FALSE);
*/
}
void CGameDBToolDlg::OnUserSearch()
{
CUserSearch dlg;
dlg.DoModal();
UpdateUserTable();
}
void CGameDBToolDlg::OnCharSearch()
{
CCharSearch dlg;
dlg.DoModal();
UpdateCharTable();
UpdateUserTable();
}
void CGameDBToolDlg::OnBnClickedClearLog()
{
m_Log.ResetContent();
}
void CGameDBToolDlg::OnNMRclickUserList(NMHDR *pNMHDR, LRESULT *pResult)
{
POSITION Pos;
int Index;
char strChar1[256] = "";
char strChar2[256] = "";
char strChar3[256] = "";
Pos = m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_UserList.GetNextSelectedItem(Pos);
m_CharList.DeleteAllItems();
if(m_UserList.GetItemText(Index, 1, strChar1, 256))
{
AddCharToList(atoi(strChar1));
}
if(m_UserList.GetItemText(Index, 2, strChar2, 256))
{
AddCharToList(atoi(strChar2));
}
if(m_UserList.GetItemText(Index, 3, strChar3, 256))
{
AddCharToList(atoi(strChar3));
}
m_CID = "";
m_UID = "";
UpdateData(FALSE);
}
*pResult = 0;
}
void CGameDBToolDlg::OnNMRclickCharList(NMHDR *pNMHDR, LRESULT *pResult)
{
POSITION Pos;
int Index;
char strCID[256] = "";
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_CharList.GetNextSelectedItem(Pos);
m_UserList.DeleteAllItems();
if(m_CharList.GetItemText(Index, 0, strCID, 256))
{
DWORD CharID = atoi(strCID);
AddUserToList(CharID);
UpdateCharPos(CharID);
m_CID.Format("%d", CharID);
m_UID.Format("%d", m_SearchUID);
UpdateData(FALSE);
}
}
*pResult = 0;
}
void CGameDBToolDlg::OnLvnKeydownUserList(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
LPNMLVKEYDOWN pKeyDown = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
POSITION Pos;
int Index;
unsigned long UserID;
char strUserID[256];
if(pKeyDown->wVKey == VK_DELETE) // 캐릭터 삭제
{
m_Log.LogPrint("[유저 삭제] 유저 삭제 시작");
int DeleteCount = 0;
Pos = m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
while(Pos)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetItemText(Index, 0, strUserID, 256))
{
UserID = atoi(strUserID);
if(!DBComponent::GameDB::DeleteUser(CDBSingleObject::GetInstance(), UserID))
{
m_Log.LogPrint("[유저 삭제] 유저 삭제 실패 %d : %s", UserID, CDBSingleObject::GetInstance().GetErrorString());
break;
}
else
{
m_Log.LogPrint("[유저 삭제] 유저 삭제 성공 %d", UserID);
}
++DeleteCount;
}
}
}
m_Log.LogPrint("[유저 삭제] 유저 삭제 종료. %d명 삭제", DeleteCount);
UpdateUserTable();
UpdateCharTable();
}
else if(pKeyDown->wVKey == 65) // 영자 창 띄우기(S)
{
Pos = m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetItemText(Index, 0, strUserID, 256))
{
UserID = atoi(strUserID);
if(0 != UserID)
{
m_Log.LogPrint("[영자창] 영자창 띄우기 UID:%d", UserID);
CAdmin dlg;
dlg.SetUID(UserID);
dlg.DoModal();
}
}
}
}
else if(pKeyDown->wVKey == 83) // 창고 창 띄우기(S)
{
Pos = m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetItemText(Index, 0, strUserID, 256))
{
UserID = atoi(strUserID);
if(0 != UserID)
{
m_Log.LogPrint("[창고창] 창고창 띄우기 UID:%d", UserID);
CCharStore dlg;
dlg.SetUID(UserID);
dlg.DoModal();
}
}
}
}
UpdateData(FALSE);
*pResult = 0;
*/
}
void CGameDBToolDlg::OnLvnKeydownCharList(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
LPNMLVKEYDOWN pKeyDown = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
POSITION Pos;
int Index;
unsigned long CharID;
char strCharID[256];
unsigned long PartyID;
char strPartyID[256];
if(pKeyDown->wVKey == VK_DELETE)
{
m_Log.LogPrint("[캐릭터 삭제] 캐릭터 삭제 시작");
int DeleteCount = 0;
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
while(Pos)
{
Index = m_CharList.GetNextSelectedItem(Pos);
if(m_CharList.GetItemText(Index, 0, strCharID, 256))
{
CharID = atoi(strCharID);
if(!DBComponent::GameDB::DeleteChar(CDBSingleObject::GetInstance(), CharID))
{
m_Log.LogPrint("[캐릭터 삭제] 캐릭터 삭제 실패 %d : %s", CharID, CDBSingleObject::GetInstance().GetErrorString());
break;
}
else
{
m_Log.LogPrint("[캐릭터 삭제] 캐릭터 삭제 성공 %d", CharID);
}
++DeleteCount;
}
}
}
m_Log.LogPrint("[캐릭터 삭제] 캐릭터 삭제 종료. %d명 삭제", DeleteCount);
UpdateCharTable();
UpdateUserTable();
}
else if(pKeyDown->wVKey == 67) // 카피 띄우기(C)
{
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_CharList.GetNextSelectedItem(Pos);
if(m_CharList.GetItemText(Index, 0, strCharID, 256))
{
CharID = atoi(strCharID);
m_Log.LogPrint("[카피창] 카피창 띄우기 %d", CharID);
CCharCopy dlg;
dlg.SetCID(CharID);
dlg.DoModal();
}
}
}
else if(pKeyDown->wVKey == 73) // 아이템 창 띄우기(I)
{
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_CharList.GetNextSelectedItem(Pos);
if(m_CharList.GetItemText(Index, 0, strCharID, 256))
{
CharID = atoi(strCharID);
m_Log.LogPrint("[아이템 창] 아이템 창 띄우기 %d", CharID);
CCharItem dlg;
dlg.SetCID(CharID);
dlg.DoModal();
}
}
}
else if(pKeyDown->wVKey == 75) // 스킬 창 띄우기(K)
{
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_CharList.GetNextSelectedItem(Pos);
if(m_CharList.GetItemText(Index, 0, strCharID, 256))
{
CharID = atoi(strCharID);
m_Log.LogPrint("[스킬창] 스킬창 띄우기 %d", CharID);
CCharSkill dlg;
dlg.SetCID(CharID);
dlg.DoModal();
}
}
}
else if(pKeyDown->wVKey == 78) // 이름 띄우기(N)
{
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_CharList.GetNextSelectedItem(Pos);
if(m_CharList.GetItemText(Index, 0, strCharID, 256))
{
CharID = atoi(strCharID);
m_Log.LogPrint("[이름창] 이름창 띄우기 %d", CharID);
CCharName dlg;
dlg.SetCID(CharID);
dlg.DoModal();
UpdateCharTable();
}
}
}
else if(pKeyDown->wVKey == 80) // 파티 창 띄우기(P)
{
Pos = m_CharList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_CharList.GetNextSelectedItem(Pos);
if(m_CharList.GetItemText(Index, 10, strPartyID, 256))
{
PartyID = atoi(strPartyID);
if(0 != PartyID)
{
m_Log.LogPrint("[파티창] 파티창 띄우기 %d", PartyID);
CCharParty dlg;
dlg.SetPID(PartyID);
dlg.DoModal();
}
}
}
}
UpdateData(FALSE);
*pResult = 0;
*/
}
void CGameDBToolDlg::OnNMClickUserList(NMHDR *pNMHDR, LRESULT *pResult)
{
CGameDBToolDlg::OnNMRclickUserList(pNMHDR, pResult);
}
void CGameDBToolDlg::OnNMClickCharList(NMHDR *pNMHDR, LRESULT *pResult)
{
CGameDBToolDlg::OnNMRclickCharList(pNMHDR, pResult);
}
void CGameDBToolDlg::OnBnClickedResetPos()
{
m_LastPosX = "2740";
m_LastPosY = "23";
m_LastPosZ = "606";
m_SavePosX = "2740";
m_SavePosY = "23";
m_SavePosZ = "606";
UpdateData(FALSE);
}
void CGameDBToolDlg::OnBnClickedUpdateChar()
{
OnCharUpdate();
}
void CGameDBToolDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CGameDBToolDlg::OnBnClickedUpdateUser()
{
OnUserUpdate();
}
void CGameDBToolDlg::OnUserUpdate()
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
POSITION Pos;
int Index;
USERINFO_TABLE UserInfo = {0,};
UpdateData(TRUE);
Pos = m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetUserRow(Index, &UserInfo))
{
m_Log.LogPrint("[유저 업데이트] 유저 업데이트 시작 %d", UserInfo.UID);
// 유저 정보 업데이트
if(!DBComponent::GameDB::UpdateUser(CDBSingleObject::GetInstance(), &UserInfo))
{
m_Log.LogPrint("[유저 업데이트] 유저 정보 업데이트 실패 %d", UserInfo.UID);
}
else
{
m_Log.LogPrint("[유저 업데이트] 유저 정보 업데이트 성공 %d", UserInfo.UID);
}
m_Log.LogPrint("[유저 업데이트] 유저 업데이트 완료 %d", UserInfo.UID);
UpdateUserTable();
}
}
UpdateData(FALSE);
*/
}
void CGameDBToolDlg::OnDestroy()
{
CDialog::OnDestroy();
if(NULL != m_pFileOpen)
delete m_pFileOpen;
}
HBRUSH CGameDBToolDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 여기서 DC의 특성을 변경합니다.
HBRUSH m_hBrush;
m_hBrush = CreateSolidBrush(RGB( 255, 193, 193));
switch( nCtlColor ){
case CTLCOLOR_DLG:
pDC->SetBkColor(RGB( 255, 255, 255));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
case CTLCOLOR_STATIC:
pDC->SetBkColor(RGB( 255, 193, 193));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
default:
return hbr;
break;
}
}