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

📄 chrbasic.cpp

📁 网络游戏龙族服务器端管理工具 rmtool 源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	_itoa(pView->m_ChrInfo.str, szTemp, 10);
	m_ComboStr = szTemp;

	_itoa(pView->m_ChrInfo.dex, szTemp, 10);
	m_ComboDex = szTemp;

	_itoa(pView->m_ChrInfo.con, szTemp, 10);
	m_ComboCon = szTemp;

	_itoa(pView->m_ChrInfo.wis, szTemp, 10);
	m_ComboWis = szTemp;

	_itoa(pView->m_ChrInfo.int1, szTemp, 10);
	m_ComboInt = szTemp;

	_itoa(pView->m_ChrInfo.movep, szTemp, 10);
	m_ComboMovp = szTemp;

	_itoa(pView->m_ChrInfo.char1, szTemp, 10);
	m_ComboChar = szTemp;

	_itoa(pView->m_ChrInfo.endu, szTemp, 10);
	m_ComboEndu = szTemp;

	_itoa(pView->m_ChrInfo.moral, szTemp, 10);
	m_ComboMoral = szTemp;

	_itoa(pView->m_ChrInfo.luck, szTemp, 10);
	m_ComboLuck = szTemp;

	_itoa(pView->m_ChrInfo.wsps, szTemp, 10);
	m_ComboWsps = szTemp;
	
	//UpdateData( ); 
	UpdateData( FALSE );

	//MaxExp kyo 020925 	
	int nLevel = c_ComboLevel.GetCurSel() + 1;
	SetMaxExp2Level( nLevel ,m_dwReset);

	//kyo 020826 磊府捞悼 UpdateData关栏肺~~ 
	int iDualClass = (int)pView->m_ChrInfo.guildname[1] + 1;

	if( m_dwDualStep <= 0 )
		iDualClass = 0;

	c_ComboDualClass.SetCurSel( iDualClass );
}



void CChrBasic::OnSelchangeComboLevel() 
{
	// TODO: Add your control notification handler code here
	
	int nLevel = c_ComboLevel.GetCurSel() + 1;
	SetMaxExp2Level( nLevel, m_dwReset );
	
}

void CChrBasic::OnEditchangeComboLevel() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	int nLevel = atoi( m_ComboLevel );
	SetMaxExp2Level( nLevel,m_dwReset );
	
}

void CChrBasic::SetMaxExp2Level( int nLevel , const int nReset)
{

	//_ASSERTE( nLevel > 0 && nLevel <= MAX_USER_LEVEL );
	if( nLevel <= 0 || nLevel > MAX_USER_LEVEL )
	{
		AfxMessageBox( "Error : Exceed  Level_Limit" );			
		return;
	}

	CCharacterView* pView = (CCharacterView*)GetParent();

	char szTemp[ 10 ];
	WCHAR query[ 0xff ];
	RM_GET_EXP_FROM_LEVEL value;
	if( pView->CHANGE_LIMITED_RESET_FORLEVEL<= nReset )	// 030307
	{
		swprintf(query, L"select step, exp_max from NPC_LV2Exp"
			L" where lv = %d order by lv desc", nLevel);
	}
	else
	{
		swprintf(query, L"select step, exp_max from NPC_LV2Exp_old"
			L" where lv = %d order by lv desc", nLevel);
	}

#ifdef OLD_NPC2EXP	// 030331
	swprintf(query, L"select step, exp_max from NPC_LV2Exp where lv = %d order by lv desc", nLevel);
#endif

	int ret = g_pDb->OpenRecord(query, &value, 1, (BYTE)DRAGON_DB[ pView->m_nCurDbIndex ]);
	if(ret < 0)
		MessageBox("Query Failed : RM_GET_LEVEL_FROM_EXP");

	//kyo 020925 Edit : Add MaxExp EDIT_BOX
	m_dwMaxExp = value.dwExpMax;
	SetDlgItemInt( IDC_MAX_EXP, m_dwMaxExp);
	/* previous
	m_dwExp = value.dwExpMax;
	SetDlgItemInt(IDC_EXP, m_dwExp);
	*/

	_itoa(nLevel, szTemp, 10);
	SetDlgItemText(IDC_COMBO_LEVEL, szTemp);
	m_ComboLevel = szTemp;
	
	_itoa(value.dwStep, szTemp, 10);
	SetDlgItemText(IDC_COMBO_LV_STEP, szTemp);
	m_ComboLvStep = szTemp;
	//UpdateData(FALSE);
}


void CChrBasic::OnEditchangeComboLvStep() 
{
	UpdateData(TRUE);
	int nStep = atoi( m_ComboLvStep );
	SetMaxExp2Step( nStep ,m_dwReset);
	
}

void CChrBasic::OnSelchangeComboLvStep() 
{
	// TODO: Add your control notification handler code here
	CCharacterView* pView; pView = (CCharacterView*)GetParent();
	int nStep = c_ComboLvStep.GetCurSel();
	
	SetMaxExp2Step( nStep ,m_dwReset);
	
}

void CChrBasic::SetMaxExp2Step( int nStep , const int nReset)
{

	//_ASSERTE( nStep > 0 && nStep <= MaX_USER_LEVEL_STEP );
	if( nStep <= 0 || nStep > MaX_USER_LEVEL_STEP )
	{
		AfxMessageBox( "Error : Exceed  Level_Step_Limit" );
		return;
	}

	CCharacterView* pView = (CCharacterView*)GetParent();

	char szTemp[ 10 ];
	WCHAR query[ 0xff ];
	RM_GET_LEVEL_FROM_STEP value;
	swprintf(query, L"select top 1 lv,exp_max from NPC_LV2Exp where step = %d order by exp_max desc", nStep);
	int ret = g_pDb->OpenRecord(query, &value, 1, (BYTE)CON );
	if(ret < 0)
		MessageBox("Query Failed : RM_GET_LEVEL_FROM_STEP");

	//kyo 020925 Edit : Add MaxExp EDIT_BOX
	m_dwMaxExp = value.dwExpMax;
	SetDlgItemInt( IDC_MAX_EXP, m_dwMaxExp);
	/* previous
	m_dwExp = value.dwExpMax;
	SetDlgItemInt(IDC_EXP, m_dwExp);
	*/

	_itoa(value.dwLevel, szTemp, 10);
	SetDlgItemText(IDC_COMBO_LEVEL, szTemp);
	m_ComboLevel = szTemp;
	
	_itoa(nStep, szTemp, 10);
	SetDlgItemText(IDC_COMBO_LV_STEP, szTemp);
	m_ComboLvStep = szTemp;
	//UpdateData(FALSE);
}

void CChrBasic::InitAbilityCombo(unsigned int class1, unsigned int step, BOOL reserve)
{
	char szTemp[ 10 ];
	char szReserve[ 10 ];
	for(int i=0 ; i<m_pApp->m_nAbilityLimitCount ; i++)
	{
		if(m_pApp->m_AbilityLimit[ i ].pre_Class == class1 &&
			m_pApp->m_AbilityLimit[ i ].Step == step)
		{
			//str
			GetDlgItemText(IDC_COMBO_STR, szReserve, 10);
			c_ComboStr.ResetContent();
			unsigned int j =0;//020303 lsw
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Str ; j++)
				c_ComboStr.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_STR, szReserve);

			//con
			GetDlgItemText(IDC_COMBO_CON, szReserve, 10);
			c_ComboCon.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Con ; j++)
				c_ComboCon.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_CON, szReserve);
			//dex
			GetDlgItemText(IDC_COMBO_DEX, szReserve, 10);
			c_ComboDex.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Dex ; j++)
				c_ComboDex.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_DEX, szReserve);
			//wis
			GetDlgItemText(IDC_COMBO_WIS, szReserve, 10);
			c_ComboWis.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Wis ; j++)
				c_ComboWis.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_WIS, szReserve);
			//int
			GetDlgItemText(IDC_COMBO_INT, szReserve, 10);
			c_ComboInt.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Int ; j++)
				c_ComboInt.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_INT, szReserve);
			//movp
			GetDlgItemText(IDC_COMBO_MOVP, szReserve, 10);
			c_ComboMovp.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Movp ; j++)
				c_ComboMovp.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_MOVP, szReserve);
			//char
			GetDlgItemText(IDC_COMBO_CHAR, szReserve, 10);
			c_ComboChar.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Cha ; j++)
				c_ComboChar.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_CHAR, szReserve);
			//endu
			GetDlgItemText(IDC_COMBO_ENDU, szReserve, 10);
			c_ComboEndu.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Endu ; j++)
				c_ComboEndu.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_ENDU, szReserve);
			//moral
			GetDlgItemText(IDC_COMBO_MORAL, szReserve, 10);
			c_ComboMoral.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Mor ; j++)
				c_ComboMoral.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_MORAL, szReserve);
			//luck
			GetDlgItemText(IDC_COMBO_LUCK, szReserve, 10);
			c_ComboLuck.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].Luck ; j++)
				c_ComboLuck.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_LUCK, szReserve);
			//wsps
			GetDlgItemText(IDC_COMBO_WSPS, szReserve, 10);
			c_ComboWsps.ResetContent();
			for(j=1 ; j<=m_pApp->m_AbilityLimit[ i ].WS ; j++)
				c_ComboWsps.InsertString( j-1 ,  _itoa(j,szTemp,10) );
			if(reserve) SetDlgItemText(IDC_COMBO_WSPS, szReserve);

			return;

		}
	}
}

void CChrBasic::OnSelchangeComboClass() 
{
	// TODO: Add your control notification handler code here
	/*
	(0,"Worrior");
	(1,"Thief");
	(2,"Archery");
	(3,"Wizard");
	(4,"Priest");
	*/
	
	UpdateData();
	int nIndex = c_ComboClass.GetCurSel();
	InitAbilityCombo(nIndex, m_dwDualStep, TRUE);
}

void CChrBasic::OnButtonSave() 
{
	// TODO: Add your control notification handler code here
	if( !RIGHT(MASK_17) )	return;

	UpdateData();
	
	CCharacterView *pView = (CCharacterView*)GetParent();

	if(pView->m_szCurCharName == "" || pView->m_szCurLoginId == "")
		return;

	//kyo 020925
	if( MessageBox( " Do You Realy Want To Save? ", "Save", MB_YESNO ) == IDNO )
		return;



	UpdateChrLogInfo();		//chr_log_info data 历厘 
	UpdateChrInfo();

	//for Extensionlog		// 021121
	WriteLog();

#ifdef RM_LOG_MODE
	CString str;	str.Format("CChrBasic :: Saved basic info(%s)",pView->m_szCurCharName);
	m_pApp->LogChar(pView->m_nCurServerSet, str);
#endif


}

void CChrBasic::WriteLog()
{//for Extensionlog	
	CCharacterView *pView = (CCharacterView*)GetParent();
	//basicInfo犬牢
	if( pView->m_pcLogMgr == NULL)
	{
		MessageBoxPrintf( MB_OK, "NULL CLogMgr In Basic" );
		return;
	}
	
	pView->m_pcLogMgr->CheckChrInfo( pView->m_ChrInfo );	//货肺 官诧郴侩捞 乐栏搁 肺弊巢变促.
	pView->m_pcLogMgr->SetChrInfo( pView->m_ChrInfo );		//官诧吧肺 update茄促

	if( g_iNation == NATION_KOREA )	
	{
		pView->m_pcLogMgr->CheckChrLogInfo( pView->m_ChrLogInfo);
		pView->m_pcLogMgr->SetChrInfo_Log( pView->m_ChrLogInfo );
	}
	else
	{
		pView->m_pcLogMgr->CheckChrLogInfo( pView->m_ChrLogInfo2);
		pView->m_pcLogMgr->SetChrInfo_Log2( pView->m_ChrLogInfo2 );
	}
}

BOOL CChrBasic::UpdateChrLogInfo()
{
	CCharacterView *pView = (CCharacterView*)GetParent();

	g_pDb->KSCToUnicode(m_szRealName.GetBuffer(m_szRealName.GetLength()), pView->m_ChrLogInfo.Wname);	//蜡历捞抚 

	
	//厚剐锅龋甫 官操霸 登搁???
	strcpy(pView->m_ChrLogInfo.passwd, m_szPassword);	//厚剐锅龋 


	g_pDb->KSCToUnicode(m_szJumin.GetBuffer(m_szJumin.GetLength()), pView->m_ChrLogInfo.Wjumin);	//林刮锅龋 


	strcpy(pView->m_ChrLogInfo.email, m_szEmail);	//eMail 
	g_pDb->KSCToUnicode(m_szPhone.GetBuffer(m_szPhone.GetLength()), pView->m_ChrLogInfo.Wphone);	//傈拳锅龋 

		
	int		nColumn = 6;		//颇扼固磐 肮荐 瘤沥 
	DWORD	dwParamOffset = 0;	//颇扼固磐 Binding 沥焊 备炼眉俊辑 阿 颇扼固磐 Value甸狼 Offset

	DBBINDING* pBinding = g_pDb->CreateParamInfo((WORD)nColumn);	if(!pBinding) { MessageBox("Failed CreateParamInfo");	return FALSE;	}

	pBinding[0].obValue = dwParamOffset;	
	pBinding[0].cbMaxLen = sizeof(pView->m_ChrLogInfo.passwd);
	pBinding[0].wType = DBTYPE_STR;
	dwParamOffset += sizeof(pView->m_ChrLogInfo.passwd);

	pBinding[1].obValue = dwParamOffset;
	pBinding[1].cbMaxLen = sizeof(pView->m_ChrLogInfo.Wname);
	pBinding[1].wType = DBTYPE_WSTR;
	dwParamOffset += sizeof(pView->m_ChrLogInfo.Wname);

	pBinding[2].obValue = dwParamOffset;
	pBinding[2].cbMaxLen = sizeof(pView->m_ChrLogInfo.Wjumin);
	pBinding[2].wType = DBTYPE_WSTR;
	dwParamOffset += sizeof(pView->m_ChrLogInfo.Wjumin);

	pBinding[3].obValue = dwParamOffset;
	pBinding[3].cbMaxLen = sizeof(pView->m_ChrLogInfo.Wphone);
	pBinding[3].wType = DBTYPE_WSTR;
	dwParamOffset += sizeof(pView->m_ChrLogInfo.Wphone);

	pBinding[4].obValue = dwParamOffset;
	pBinding[4].cbMaxLen = sizeof(pView->m_ChrLogInfo.email);
	pBinding[4].wType = DBTYPE_STR;
	dwParamOffset += sizeof(pView->m_ChrLogInfo.email);

	pBinding[5].obValue = dwParamOffset;
	pBinding[5].cbMaxLen = sizeof(pView->m_ChrLogInfo.regday);
	pBinding[5].wType = DBTYPE_DBTIMESTAMP;
	dwParamOffset += sizeof(pView->m_ChrLogInfo.regday);
//--------------------------------------------------------------------------------------

	char szQuery[ 1024 ];
	WCHAR wszQuery[ 1024 ];
	
	sprintf(szQuery, "Update chr_log_info Set passwd=?, d_name=?, d_jumin=?, d_tel2=?,"
		" d_email=?, d_regday=? where login_id='%s'",pView->m_szCurLoginId);
	
	
	g_pDb->KSCToUnicode(szQuery,wszQuery);
	int nRet;
	if( IsChrloginfoInDrDB() )
	{
		nRet= g_pDb->ExecuteSQLByParam(wszQuery, pBinding, &pView->m_ChrLogInfo, (BYTE)nColumn, (BYTE)DRAGON_DB[ pView->m_nCurDbIndex ]);
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -