📄 characterview.cpp
字号:
// CharacterView.cpp : implementation file
//
#include "stdafx.h"
#include "rmtool.h"
#include "CharacterView.h"
#include "CharacterFrame.h"
#include "SelectServersetDlg.h"
#include "MainFrm.h"
#include "packet.h"
//#include "WinUser.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//extern inline int MessageBoxPrintf( const int iBoxType, const TCHAR* szMessage, ... );
/////////////////////////////////////////////////////////////////////////////
// CCharacterView
IMPLEMENT_DYNCREATE(CCharacterView, CFormView)
CCharacterView::CCharacterView()
: CFormView(CCharacterView::IDD)
{
//{{AFX_DATA_INIT(CCharacterView)
m_szFindID = _T("");
m_ComboCharName = _T("");
//}}AFX_DATA_INIT
m_nPrevWidth = 0;
m_nPrevHeight = 0;
m_bOnline = FALSE;
memset(&m_ChrInfo, 0, sizeof(m_ChrInfo) );
memset(&m_ChrInfoBinary, 0, sizeof(m_ChrInfoBinary) );
memset(&m_ChrInfoEtc, 0, sizeof(m_ChrInfoEtc));
memset(&m_ChrInfo2, 0, sizeof(m_ChrInfo2));
}
CCharacterView::~CCharacterView()
{
#ifdef RM_REPAIR
DeleteAllRepairTable();
DeleteCriticalSection(&m_Crt);
#endif
delete m_pcLogMgr;
}
void CCharacterView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCharacterView)
DDX_Control(pDX, IDC_STATIC_ONLINE, c_StaticOnline);
DDX_Control(pDX, IDC_BUTTON_KICK, c_Kick);
DDX_Control(pDX, IDC_COMBO_SERVERSET, c_ServerSet);
DDX_Control(pDX, IDC_COMBO_NAME, c_ComboCharName);
DDX_Control(pDX, IDC_COMBO_DB, c_ComboDb);
DDX_Control(pDX, IDC_TAB_CHARACTER, c_Tab);
DDX_Text(pDX, IDC_EDIT_FIND_BY_ID, m_szFindID);
DDV_MaxChars(pDX, m_szFindID, 20);
DDX_CBString(pDX, IDC_COMBO_NAME, m_ComboCharName);
DDV_MaxChars(pDX, m_ComboCharName, 20);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCharacterView, CFormView)
//{{AFX_MSG_MAP(CCharacterView)
ON_CBN_SELCHANGE(IDC_COMBO_NAME, OnSelchangeComboName)
ON_CBN_SELENDOK(IDC_COMBO_NAME, OnSelendokComboName)
ON_CBN_SELCHANGE(IDC_COMBO_DB, OnSelchangeComboDb)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_CHARACTER, OnSelchangeTabCharacter)
ON_WM_CTLCOLOR()
ON_CBN_SELCHANGE(IDC_COMBO_SERVERSET, OnSelchangeComboServerset)
ON_BN_CLICKED(IDC_BUTTON_KICK, OnButtonKick)
ON_BN_CLICKED(IDC_DEL_CHARACTER, OnDelCharacter)
ON_BN_CLICKED(IDC_REFRESH_CHARACTER, OnRefreshCharacter)
ON_BN_CLICKED(BTN_KICKOFF_ID, OnKickoffUser)
//}}AFX_MSG_MAP
ON_MESSAGE(UM_COMBO_ENTER, OnReceivedComboEnter)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCharacterView diagnostics
#ifdef _DEBUG
void CCharacterView::AssertValid() const
{
CFormView::AssertValid();
}
void CCharacterView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCharacterView message handlers
void CCharacterView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
#ifdef RM_REPAIR
InitializeCriticalSection(&m_Crt); //烙拌康开 檬扁拳
#endif
m_pApp = (CRMToolApp*)AfxGetApp();
//021007 kyo
//m_nCurDbIndex = 1;
m_nCurDbIndex = m_pApp->m_DefaultServerSetIndex;// - 1;
//Frame阑 FormView Resource农扁俊 嘎霸
ResizeParentToFit(FALSE);
ResizeParentToFit(TRUE);
GetParentFrame()->RecalcLayout();
ModifyStyleEx(WS_EX_CLIENTEDGE,0,SWP_FRAMECHANGED);
ModifyStyle(WS_BORDER,0,SWP_FRAMECHANGED);
CCharacterFrame *pFrame = (CCharacterFrame*)GetParent();
m_pApp->m_CharacterDocCount++;
pFrame->m_nFrameID = m_pApp->m_CharacterDocCount; //橇饭烙俊 磊扁 Frame ID 悸泼
//Window Text 悸泼
CString str;
str.Format("[C%02d] Raja Character Tool",m_pApp->m_CharacterDocCount);
pFrame->SetWindowText(str);
//TabControl阑 扩档快 荤捞令俊 嘎霸 农扁 炼沥
CRect FrameRect;
pFrame->GetClientRect(&FrameRect);
FrameRect.top += CHARACTER_INFO_LENGTH;
c_Tab.MoveWindow(&FrameRect);
//Tab Control 檬扁拳
TC_ITEM item;
// 031010 BBD 惑牢八祸扁瓷 付瘤阜 徘俊 眠啊
char* itemlist[TAP_NUMBER] = {"Basic", "Item", "Tactic/Quest", "Skill", "Skill Data", "Guild/Combat Skill", "WareHouse", "MerchantSearch"};
for(int i=0; i<TAP_NUMBER; i++ )
{
item.mask = TCIF_TEXT;
item.pszText = itemlist[i];
c_Tab.InsertItem( i, &item );
}
if( strcmp(g_CurDbName[ m_nCurDbIndex ],"") )
{
WCHAR wszDb[ 0xff ];
g_pDb->KSCToUnicode( g_CurDbName[ m_nCurDbIndex ], wszDb );
if(!g_pDb->ChangeDB( wszDb, (BYTE)DRAGON_DB[ m_nCurDbIndex ]))
MessageBox("ChangeDB Failed! : CCharacterView::OnInitialUpdate()");
}
//碍力 肺弊酒眶 官畔 Disable 矫虐绊
SetDlgItemText(IDC_STATIC_ONLINE,"");
c_Kick.EnableWindow(FALSE);
//ServerSet Combo 檬扁拳
c_ServerSet.InsertString(0,"--- Serverset Choice---");
for(i=1 ; i<=CURRENT_SERVERSET_NUM; i++)
{
c_ServerSet.InsertString(i,m_pApp->m_ServerSetInfo[ i - 1 ].szSetName);
}
/*
//DefaultServerSet阑 悸泼 救沁阑锭 绊福绰 芒阑 顿款促.
int nSet=0;
//kyo 020930 m_nCurServerSet啊 檬扁拳 登瘤 臼疽扁锭巩俊 炼扒巩俊辑 昏力茄促.
if(m_pApp->m_DefaultServerSetIndex == 0 )// && m_nCurServerSet == -1)
{
CSelectServersetDlg dlg;
nSet = dlg.DoModal();
}
else
nSet = m_pApp->m_DefaultServerSetIndex; //霓焊 鉴辑措肺...
*/
// 021111 DoModal惑磊啊 磊操 唱坷扁 锭巩俊 碍力肺 1蔼阑 技泼茄促.
int nSet=1;
c_ServerSet.SetCurSel( nSet );
m_nCurServerSet = nSet - 1;
if(m_nCurServerSet < 0)
MessageBox("Invalid Serverset");
//DBCatalog 霓焊冠胶 檬扁拳
InitDBCatalogCombo();
//促捞倔肺弊 积己
m_BasicDlg.Create(IDD_CHAR_BASIC, this);
m_ItemDlg.Create(IDD_CHAR_ITEM, this);
m_TacQuestDlg.Create(IDD_CHAR_TACTIC, this);
m_TakenSkillDlg.Create(IDD_CHAR_SKILL, this);
m_SkillDataDlg.Create(IDD_CHAR_SKILL_DATA, this);
m_GuildDlg.Create(IDD_CHAR_GUILD, this);
m_WareDlg.Create( IDD_CHAR_WAREHOUSE, this);
m_MSearchDlg.Create( IDD_MERCHANTSEARCH_DLG, this);
//扁夯 贸澜栏肺 躲 ServerStatus 芒阑 焊咯绊, Tab 牧飘费 困俊 Dialog积己 棺 荤捞令 困摹 炼沥
FitDlgInView(m_BasicDlg.m_hWnd, &c_Tab); //Tab牧飘费俊 促捞倔肺弊 农扁 迭 嘎霸 炼沥
SetBaseClientSize(&c_Tab); //贸澜 积己矫狼 Client Size甫 悸泼..
m_BasicDlg.ShowWindow(SW_SHOW);
m_nCurView = 0;
c_ComboCharName.SetFocus();
//for ExtensionLog
m_pcLogMgr = new CLogMgr;
InitForLog();
}
/*
void CCharacterView::OnButtonFindByCharacter()
{
// TODO: Add your control notification handler code here
OnComboEnter();
}
void CCharacterView::OnButtonFindById()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
OnEnterFindID();
UpdateData();
}
*/
void CCharacterView::FitDlgInView(HWND hWnd, CTabCtrl *pCtrl)
{
CRect TabRect,ItemRect; //TabRect篮 徘 牧飘费 傈眉 康开, ItemRect篮 困俊 徘何盒父..
pCtrl->GetClientRect(&TabRect);
pCtrl->GetItemRect(0, &ItemRect);
int left,top,width,height;
left = TabRect.left + 5;
top = TabRect.top + 5 + CHARACTER_INFO_LENGTH;/*Tab Control困俊 后沫 巢败初篮 父怒*/;
width = TabRect.Width() - 10;
height = TabRect.Height() - ItemRect.Height() - 13;
::MoveWindow(hWnd,left, top, width, height, TRUE);
}
void CCharacterView::SetBaseClientSize(CTabCtrl *pCtrl)
{
CRect TabRect,ItemRect; //TabRect篮 徘 牧飘费 傈眉 康开, ItemRect篮 困俊 徘何盒父..
pCtrl->GetClientRect(&TabRect);
pCtrl->GetItemRect(0, &ItemRect);
int width,height;
width = TabRect.Width() - 10;
height = TabRect.Height() - ItemRect.Height() - 13;
m_BaseRect.left = TabRect.left + 5;
m_BaseRect.top = TabRect.top + 5 + 30/*Tab Control困俊 后沫 巢败初篮 父怒*/;
m_BaseRect.right = m_BaseRect.left + width;
m_BaseRect.bottom = m_BaseRect.top + height;
m_BasicDlg.m_nPrevHeight = m_BaseRect.Height();
m_BasicDlg.m_nPrevWidth = m_BaseRect.Width();
// m_ServerStatusDlg.m_nPrevHeight = m_BaseRect.Height();
// m_ServerStatusDlg.m_nPrevWidth = m_BaseRect.Width();
// m_ServerPatchDlg.m_nPrevHeight = m_BaseRect.Height();
// m_ServerPatchDlg.m_nPrevWidth = m_BaseRect.Width();
m_nPrevWidth = m_BaseRect.Width();
m_nPrevHeight = m_BaseRect.Height();
}
BOOL CCharacterView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
//if(pMsg->message == WM_KEYDOWN );//&& pMsg->wParam == VK_RETURN)
{
//if( pMsg->wParam == VK_RETURN )
//UpdateData();//020725
m_ItemDlg.SelectClear();
//UpdateData();//020725
if(pMsg->hwnd == GetDlgItem(IDC_EDIT_FIND_BY_ID)->m_hWnd)
{
//m_ItemDlg.SelectClear();
UpdateData();
OnEnterFindID();
UpdateData(FALSE);
}
}
return CFormView::PreTranslateMessage(pMsg);
}
void CCharacterView::ConvertLoad(char* pData, int nSize)
{ // 单捞鸥海捞胶俊辑 巩磊凯 历厘篮 箭磊 0阑 NULL肺 牢侥窍骨肺 1究 哗辑 肺靛
for (int i = 0; i < nSize; ++i)
{
*(pData + i) -= 1;
}
}
void CCharacterView::ConvertSave(char* pData, int nSize)
{ // 单捞鸥海捞胶俊辑 巩磊凯 历厘篮 箭磊 0阑 NULL肺 牢侥窍骨肺 1究 歹秦辑 历厘
for (int i = 0; i < nSize; ++i)
{
*(pData + i) += 1;
}
*(pData + nSize) = 0;
}
BOOL CCharacterView::QueryBasicInfo()
{
//if(m_ComboCharName == "" || m_ComboCharName == "<NULL>")
if( m_ComboCharName.GetLength() <=0 || strcmp( "<NULL>", m_ComboCharName.GetBuffer(0) ) == 0 )
{
MessageBox("Write Name!");
return FALSE;
}
char str[ 1024 ];
WCHAR query[ 1024 ];
int ret = 0;
sprintf(str," select RTRIM(login_id), class, spell, age, lev, [exp],"
"guildname, nut1, nut2, nut3, mana, hp, hungry, [str],con,"
"dex,wis, [int],movep, [char],endu,moral, luck, wsps,"
"reserved_point, nation, ladderscore, Bankmoney, RTRIM(MapName),"
"LastLoan, Fame from chr_info where name='%s'", m_ComboCharName.GetBuffer( m_ComboCharName.GetLength()) );
g_pDb->KSCToUnicode(str,query);
memset(&m_ChrInfo,0,sizeof(m_ChrInfo));
if(g_iNation != NATION_JAPAN)
{
//memset(&m_ChrInfo,0,sizeof(m_ChrInfo));
ret = g_pDb->OpenRecord(query, &m_ChrInfo, 1, (BYTE)DRAGON_DB[ m_nCurDbIndex ]);
}
else if( g_iNation == NATION_JAPAN )
{
memset(&m_ChrInfoUNI,0,sizeof(m_ChrInfoUNI));
ret = g_pDb->OpenRecord(query, &m_ChrInfoUNI, 1, (BYTE)DRAGON_DB[ m_nCurDbIndex ]);
SetChrInfo( m_ChrInfo, m_ChrInfoUNI);
}
if(ret < 0) return FALSE;
else if(!ret)
{
MessageBox("Have no User!");
return FALSE;
}
if( 20 == ::GetPrivateProfileInt("Admin","idCheck",-10,g_szSetupPath) )
{
for( int i=0;i<20;i++)
{
LeaveLogInFile( "var1 dd=%d, dc=%c, cc=%c, cd=%c", m_ChrInfo.guildname[ i ], (int)m_ChrInfo.guildname[ i ],
m_ChrInfo.guildname[ i ], (int)m_ChrInfo.guildname[ i ]);
}
}
if(!strcmp((char*)m_ChrInfo.guildname,""))
{
AfxMessageBox("Before Ver069 Character");
}
else
ConvertLoad((char*)m_ChrInfo.guildname, 20);
m_szFindID = m_ChrInfo.login_id; //Login ID沫俊 ID 悸泼
SetDlgItemText(IDC_EDIT_FIND_BY_ID, m_ChrInfo.login_id);
//chr_info狼 item率 Data .
sprintf(str,"select inventory, equip, quick from chr_info where name='%s'", m_ComboCharName.GetBuffer( m_ComboCharName.GetLength()) );
g_pDb->KSCToUnicode(str,query);
memset(&m_ChrInfoBinary,0,sizeof(m_ChrInfoBinary));
ret = g_pDb->OpenRecord(query, &m_ChrInfoBinary, 1, (BYTE)DRAGON_DB[ m_nCurDbIndex ]);
if(ret < 0)
{
MessageBox("Fail to query chr_info for Item");
return FALSE;
}
//Tactic, Quest, skill 率 Data
sprintf(str,"select tac_skillEXP, script_var, skill, skill_exp from chr_info where name='%s'", m_ComboCharName.GetBuffer( m_ComboCharName.GetLength()) );
g_pDb->KSCToUnicode(str,query);
memset(&m_ChrInfoEtc,0,sizeof(m_ChrInfoEtc));
ret = g_pDb->OpenRecord(query, &m_ChrInfoEtc, 1, (BYTE)DRAGON_DB[ m_nCurDbIndex ]);
if(ret < 0)
{
MessageBox("Fail to query chr_info_etc!");
return FALSE;
}
//chr_info2 沥焊 罐酒坷扁
sprintf(str,"select bankitem from chr_info2 where name='%s'", m_ComboCharName.GetBuffer( m_ComboCharName.GetLength()));
g_pDb->KSCToUnicode(str,query);
memset(&m_ChrInfo2,0,sizeof(m_ChrInfo2));
ret = g_pDb->OpenRecord(query, &m_ChrInfo2, 1, (BYTE)DRAGON_DB[ m_nCurDbIndex ]);
if(ret < 0) return FALSE;
else if(!ret)
{
MessageBox("Have no Character(chr_info2).!");
return FALSE;
}
//唱赣瘤 某腐磐 匙烙 罐酒坷扁
sprintf(str,"select RTRIM(name1),RTRIM(name2),RTRIM(name3),"
"RTRIM(name4) from chr_log_info where login_id='%s'", m_ChrInfo.login_id);
g_pDb->KSCToUnicode(str,query);
memset(&m_szAllCharName,0,sizeof(m_szAllCharName));
switch( g_iNation ) // 030102 kyo chr_log_info狼 name1... 狼 屈侥捞 char捞 酒匆 版快 default肺
{
case NATION_KOREA:
case NATION_TAIWAN:
{
ret = g_pDb->OpenRecord(query, &m_szAllCharName, 1, (BYTE)DRAGON_DB[ m_nCurDbIndex ]); // 怕惫侩捞骨肺 林籍贸府窃
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -