⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 characterview.cpp

📁 网络游戏龙族服务器端管理工具 rmtool 源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// 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 + -