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

📄 user2.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	// 
	//UpdateMemBankDataOnly();
	//UpdateUserData(TRUE);
	char send_buffer[RECEIVE_BUF_SIZE+1];
	int send_index = 0, c_index = 0;;
	TCHAR strBankItem[_BANK_DB];

	SetByte(send_buffer, g_ServerId, send_index );
	SetByte( send_buffer, (BYTE)LOGOUT_REQ, send_index );
	SetShort( send_buffer, m_uid, send_index );

	// UpdateMemBankDataOnly() PART...
	::ZeroMemory(strBankItem, sizeof(strBankItem));
	::CopyMemory(strBankItem, m_pMD->m_UB.m_UserBankItem, _BANK_DB);

	c_index = send_index;

	SetString( send_buffer, m_strUserID, CHAR_NAME_LENGTH, send_index );
	SetDWORD( send_buffer, m_pMD->m_UB.m_dwBankDN, send_index );
	SetString( send_buffer, strBankItem, sizeof(strBankItem), send_index );
	//

	// UpdateUserData(TRUE) PART...
	DBUpdateUserData( send_buffer, send_index );
	//

	// 拘绵窍扁...
	m_CompMng.FlushAddData();
	m_CompMng.AddData( &send_buffer[c_index], (send_index-c_index) );

	m_CompMng.PreCompressWork();
	m_CompMng.Compress();

	int comp_data_len = m_CompMng.GetCompressedDataCount();
	int org_data_len = m_CompMng.GetUnCompressDataLength();
	DWORD crc_value = m_CompMng.GetCrcValue();
	char *packet_buffer;
	packet_buffer = m_CompMng.GetExtractedBufferPtr();

	SetShort( send_buffer, comp_data_len, c_index );
	SetShort( send_buffer, org_data_len, c_index );
	SetDWORD( send_buffer, crc_value, c_index );
	SetString( send_buffer, packet_buffer, comp_data_len, c_index );
	m_CompMng.FlushAddData();

	// 傈价.
	g_pMainDlg->Send2DBsvr( send_buffer, c_index );
	}

	m_pMD->m_UB.m_uid = -1;

	ReInitMemoryDB();

	if( g_zone[m_ZoneIndex]->m_pMap[m_curx][m_cury].m_lUser == USER_BAND + m_uid ) 
		::InterlockedExchange(&g_zone[m_ZoneIndex]->m_pMap[m_curx][m_cury].m_lUser, 0);

	SendMyInfo(TO_INSIGHT, INFO_DELETE);

	m_state = STATE_LOGOUT;
}

void USER::DBUpdateUserData(char *temp_buffer, int &temp_index )
{
	TCHAR			szSQL[8000];		
	TCHAR			strFace[10], strSkill[_SKILL_DB], strItem[_ITEM_DB], strPsi[_PSI_DB], strTel[_TEL_DB];
	TCHAR			strQuickItem[_QUICKITEM_DB];
	TCHAR			strHaveEvent[_EVENT_DB];

	::ZeroMemory(szSQL, sizeof(szSQL));
	::ZeroMemory(strFace, sizeof(strFace));
	::ZeroMemory(strSkill, sizeof(strSkill));
	::ZeroMemory(strItem, sizeof(strItem));
	::ZeroMemory(strPsi, sizeof(strPsi));	
	::ZeroMemory(strTel, sizeof(strTel));
	::ZeroMemory(strHaveEvent, sizeof(strHaveEvent));
	::ZeroMemory(strQuickItem, sizeof(strQuickItem));	
	::CopyMemory(strFace, m_strFace, sizeof(m_strFace));

	UserSkillToStr(strSkill);
	UserItemToStr(strItem);
	UserPsiToStr(strPsi);
	UserTelToStr(strTel);
	UserHaveEventDataToStr(strHaveEvent);

	DWORD dwCurTime = ConvertCurTimeToSaveTime();			// 泅犁 矫埃 滚怜阑 悸泼

	m_tPsiOneKind = m_tPsiTwoKind = m_tPsiThreeKind = 0;
	m_dwPsiOneTime = m_dwPsiTwoTime = m_dwPsiThreeTime = 0;

	// Psionic One
	if(m_dwHasteTime != 0) 
	{
		m_tPsiOneKind = PSIONIC_HASTE;
		m_dwPsiOneTime = m_dwHasteTime;
	}
	if(m_dwShieldTime != 0) 
	{
		m_tPsiOneKind = PSIONIC_SHIELD;
		m_dwPsiOneTime = m_dwShieldTime;
	}
	if(m_dwDexUpTime != 0) 
	{
		m_tPsiOneKind = PSIONIC_DEXUP;
		m_dwPsiOneTime = m_dwDexUpTime;
	}
	if(m_dwMaxHPUpTime != 0) 
	{
		m_tPsiOneKind = PSIONIC_HPUP;
		m_dwPsiOneTime = m_dwMaxHPUpTime;
	}
	if(m_dwFastRunTime != 0) 
	{
		m_tPsiOneKind = PSIONIC_FAST_RUN;
		m_dwPsiOneTime = m_dwFastRunTime;
	}
	if(m_dwMindShockTime != 0) 
	{
		m_tPsiOneKind = PSIONIC_MIND_SHOCK;
		m_dwPsiOneTime = m_dwMindShockTime;
	}
	if(m_dwPsiShieldTime != 0) 
	{
		m_tPsiOneKind = PSIONIC_PSI_SHIELD;
		m_dwPsiOneTime = m_dwPsiShieldTime;
	}
	if(m_dwBigShieldTime != 0) 
	{
		m_tPsiOneKind = 30;
		m_dwPsiOneTime = m_dwBigShieldTime;
	}
	if(m_dwPiercingShieldTime != 0) 
	{
		m_tPsiOneKind = PSIONIC_PIERCING_SHIELD;
		m_dwPsiOneTime = m_dwPiercingShieldTime;
	}

	// Psionic Two
	if(m_dwAdamantineTime != 0) 
	{
		m_tPsiTwoKind = PSIONIC_ADAMANTINE;
		m_dwPsiTwoTime = m_dwAdamantineTime;
	}
	if(m_dwMightyWeaponTime != 0) 
	{
		m_tPsiTwoKind = PSIONIC_MIGHTYWEAPON;
		m_dwPsiTwoTime = m_dwMightyWeaponTime;
	}
	if(m_dwBerserkerTime != 0) 
	{
		m_tPsiTwoKind = PSIONIC_BERSERKER;
		m_dwPsiTwoTime = m_dwBerserkerTime;
	}

	// Psionic Three
	if(m_dwMindGuardTime != 0) 
	{
		m_tPsiThreeKind = PSIONIC_MIND_GUARD;
		m_dwPsiThreeTime = m_dwMindGuardTime;
	}

	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call UPDATE_USER_DATA (\'%s\',%d,%d,%d,%d,%d,%d,%d,%d,\
		?, %d,%d,%d, %d, %d,%d,  %d,%d,  %d, \
		%d,%d,%d,%d,%d,%d, %d,%d,%d,%d, \
		?,?,?,?, %d,%d,\
		%d, %d, ?, %d, %d,\
		?, %d,\
		%d, %d, %d,\
		\'%s\', \
		%d,%d,		%d,%d,		%d,%d)}"), 
		m_strUserID,	m_sSTR,	m_sCON,	m_sDEX,	m_sVOL,	m_sWIS,	m_iSkin, m_iHair, m_sGender,	
		m_curz,	m_curx,	m_cury,		m_dwBuddy,		m_dwGuild, m_dwExp,		m_sPA, m_sSkillPoint,	m_dwXP,
		m_sMaxHP, m_sHP, m_sMaxPP, m_sPP, m_sMaxSP,	m_sSP,		m_dwDN,	m_sCityRank, m_sLevel,	m_byClass,

		m_tAbnormalKind, m_dwAbnormalTime,

		m_bLive, m_iCityValue, m_sKillCount, dwCurTime, 
		m_dwSaintTime, 
		m_dwHiExpTime, m_dwMagicFindTime, m_dwNoChatTime,
		m_strLoveName, //--yskang 0.1 
		m_tPsiOneKind, m_dwPsiOneTime,		m_tPsiTwoKind, m_dwPsiTwoTime,		m_tPsiThreeKind, m_dwPsiThreeTime); 

	int sql_len = strlen(szSQL);
	SetShort( temp_buffer, sql_len, temp_index );
	SetString( temp_buffer, szSQL, sql_len, temp_index );

	//SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strFace),	0, (TCHAR*)strFace,		0, &sFaceLen );
	SetString( temp_buffer, strFace, sizeof(strFace), temp_index );

	//SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strSkill),	0, (TCHAR*)strSkill,	0, &sSkillLen );
	SetString( temp_buffer, strSkill, sizeof(strSkill), temp_index );

	//SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strItem),	0, (TCHAR*)strItem,		0, &sItemLen );
	SetString( temp_buffer, strItem, sizeof(strItem), temp_index );

	//SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strPsi),		0, (TCHAR*)strPsi,		0, &sPsiLen );
	SetString( temp_buffer, strPsi, sizeof(strPsi), temp_index );

	//SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strHaveEvent),	0, (TCHAR*)strHaveEvent,	0, &sEventLen );
	SetString( temp_buffer, strHaveEvent, sizeof(strHaveEvent), temp_index );

	//SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strQuickItem),	0, (TCHAR*)strQuickItem,	0, &sQuickLen );
	SetString( temp_buffer, strQuickItem, sizeof(strQuickItem), temp_index );

	//SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strTel),			0, (TCHAR*)strTel,			0, &sTelLen );
	SetString( temp_buffer, strTel, sizeof(strTel), temp_index );
}


//-----------------------------------------------------------------------------
// DB PHASER PART...
//-----------------------------------------------------------------------------


void USER::DBAccountLoginResult(TCHAR *pBuf, int s_index, int dlength )
{
	int		index = 0, i;
	BYTE	result = FAIL, error_code = 0;
	int		old_index = 0;
	int		s_result, length;

	strcpy(m_strChar[0], "");
	strcpy(m_strChar[1], "");
	strcpy(m_strChar[2], "");
	m_nCharNum = 0;

	s_result = GetByte( pBuf, s_index );
	if ( s_result == FALSE )
	{
		// Load Character Data Fail...
		error_code = UNKNOWN_ERR;
		goto result_send;
	}

	m_state = STATE_CONNECTED;
	result = SUCCESS;

	// LOGIN SERVER俊辑 掘篮 某腐磐 肮荐+捞抚 汗荤...
	m_nCharNum = GetByte( pBuf, s_index );
	for ( i = 0; i < 3; i++ )
	{
		GetString(m_strChar[i], pBuf, 20, s_index );
	}
	//
	length = dlength - s_index;
	if ( length <= 0 ) result = FAIL;

result_send:
	index = 0;
	SetByte(m_TempBuf, ACCOUNT_LOGIN_RESULT, index );
	SetByte(m_TempBuf, result, index );

	if ( result == FAIL )
	{
		SetByte(m_TempBuf, error_code, index);
		Send( m_TempBuf, index );
		SoftClose();
		return;
	}

	// LOGIN SERVER俊辑 掘篮 某腐磐 肮荐+沥焊 汗荤...
	SetString(m_TempBuf, (pBuf+s_index), length, index);

	Send(m_TempBuf, index);
}

void USER::DBGameStartResult( char *pBuf, int s_index, int dlength )
{
/*
	char szID[CHAR_NAME_LENGTH+1];
	SQLSMALLINT sSTR, sCON, sDEX, sVOL, sWIS;
	CBufferEx	TempBuf;
	CPoint		pt;
	BYTE		result = FAIL, error_code = 0;
	BYTE		db_proc_result;

	InitUser();

	memset( szID, NULL , sizeof(szID) );

	db_proc_result = GetByte( pBuf, s_index );
	if ( db_proc_result == FALSE )
	{
		error_code = ERR_2;
		TempBuf.Add(GAME_START_RESULT);
		TempBuf.Add(result);
		TempBuf.Add(error_code);
		Send(TempBuf, TempBuf.GetLength());
		return;
	}

	// LOADUSER DATA 贸府(SQL 贸府何俊 秦寸)...
	GetString( szID, pBuf, CHAR_NAME_LENGTH, s_index );			// USER ID
	sSTR = GetShort( pBuf, s_index );							//m_sSTR = sSTR; // 塞
	sCON = GetShort( pBuf, s_index );							//m_sCON = sCON; // 扒碍
	sDEX = GetShort( pBuf, s_index );							//m_sDEX = sDEX; // 刮酶
	sVOL = GetShort( pBuf, s_index );							//m_sVOL = sVOL; // 狼瘤
	sWIS = GetShort( pBuf, s_index );							//m_sWIS = sWIS; // 瘤驱

	SQLSMALLINT sBasicSTR, sBasicCON, sBasicVOL, sBasicDEX, sBasicWIS;
	sBasicSTR = GetByte( pBuf, s_index );						//m_sTempSTR = (BYTE)sBasicSTR;
	sBasicCON = GetByte( pBuf, s_index );						//m_sTempCON = (BYTE)sBasicCON;
	sBasicDEX = GetByte( pBuf, s_index );						//m_sTempDEX = (BYTE)sBasicDEX;
	sBasicVOL = GetByte( pBuf, s_index );						//m_sTempVOL = (BYTE)sBasicVOL;
	sBasicWIS = GetByte( pBuf, s_index );						//m_sTempWIS = (BYTE)sBasicWIS;

	SQLUINTEGER	iSkin, iHair, iExp, iXP, iDN;
	iSkin = GetDWORD( pBuf, s_index );							//m_iSkin = iSkin;	// 乔何祸
	iHair = GetDWORD( pBuf, s_index );							//m_iHair = iHair; // 赣府祸
	
	SQLSMALLINT	sGender;
	sGender = GetShort( pBuf, s_index );						//m_sGender = sGender; // 己喊

	SQLCHAR	strFace[10+1];
	GetString( (char *)strFace, pBuf, 10, s_index );			//::CopyMemory(m_strFace, strFace, 10); // 赣府葛剧

	SQLSMALLINT	sLZ, sLX, sLY, sPA;
	sLZ = GetShort( pBuf, s_index );							//m_curz = sLZ; // Zone
	sLX = GetShort( pBuf, s_index );							//m_curx = sLX; // 困摹 x
	sLY = GetShort( pBuf, s_index );							//m_cury = sLY; // 困摹 y

	SQLUINTEGER iBuddy;
	iBuddy = GetDWORD( pBuf, s_index );							//m_dwBuddy = iBuddy; // Buddy

	SQLINTEGER iGuild;
	iGuild = GetInt( pBuf, s_index );							//m_dwGuild = iGuild; // Guild

	//SQLUINTEGER	iExp;
	iExp = GetDWORD( pBuf, s_index );							//m_dwExp	  = iExp; // Experience

	//SQLSMALLINT	sPA;
	sPA = GetShort( pBuf, s_index );							//m_sPA = sPA; // PA Point

	SQLSMALLINT	sSkillPoint;
	sSkillPoint = GetShort( pBuf, s_index );					//m_sSkillPoint = sSkillPoint;// Skill Point

	//
	//SQLUINTEGER	iXP;
	iXP = GetDWORD( pBuf, s_index );							//m_dwXP = iXP; // X Point

	SQLSMALLINT sLevel;
	sLevel = GetShort( pBuf, s_index );							//m_sLevel	= sLevel; // 饭骇

	SQLCHAR	byClass, bLive;
	byClass = GetByte( pBuf, s_index );							//m_byClass	= byClass; // 努贰胶

	bLive = GetByte( pBuf, s_index );							//m_bLive	= bLive; // 磷菌绰瘤, 混疽绰瘤?

	SQLSMALLINT	sHP, sPP, sSP, sKillCount;
	sHP = GetShort( pBuf, s_index );							//m_sHP		= sHP; // 泅犁 HP
	sPP = GetShort( pBuf, s_index );							//m_sPP		= sPP; // 泅犁 PP
	sSP = GetShort( pBuf, s_index );							//m_sSP		= sSP; // 泅犁 SP

	//SQLUINTEGER	iDN;
	iDN = GetDWORD( pBuf, s_index );							//m_dwDN	= iDN; // 家瘤陛

	SQLINTEGER iCityValue;
	iCityValue = GetInt( pBuf, s_index );						//m_iCityValue = iCityValue; // 矫刮 穿利蔼

	//SQLSMALLINT	sKillCount;
	sKillCount = GetShort( pBuf, s_index );						//m_sKillCount = sKillCount; // PK穿利 冉荐

	SQLCHAR	strSkill[_SKILL_DB], strItem[_ITEM_DB], strPsi[_PSI_DB], strHaveEvent[_EVENT_DB], strTel[_TEL_DB];
	GetString( (char *)strSkill, pBuf, sizeof(strSkill), s_index );			//::CopyMemory(m_strSkill, strSkill, sizeof(m_strSkill)); // 胶懦
	GetString( (char *)strItem, pBuf, sizeof(strItem), s_index );			//::CopyMemory(m_strItem, strItem, sizeof(m_strItem));		// 酒捞袍
	GetString( (char *)strPsi, pBuf, sizeof(strPsi), s_index );				//::CopyMemory(m_strPsi, strPsi, sizeof(m_strPsi));			// 荤捞坷葱
	GetString( (char *)strHaveEvent, pBuf, sizeof(strHaveEvent), s_index );	//strHaveEvent
	GetString( (char *)strTel, pBuf, sizeof(strTel), s_index );				//strTel

	SQLSMALLINT	sChangeClass[CLASS_NUM];
	GetString( (char *)sChangeClass, pBuf, sizeof(sChangeClass), s_index );	//sChangeClass

	SQLCHAR strAbnormal[_ABNORMAL_DB];
	GetString( (char *)strAbnormal, pBuf, sizeof(strAbnormal), s_index );	//strAbnormal

	SQLCHAR strQuickItem[_QUICKITEM_DB];
	GetString( (char *)strQuickItem, pBuf, sizeof(strQuickItem), s_index );	//strQuickItem

	SQLCHAR tIsOP;
	tIsOP = GetByte( pBuf, s_index );							//m_tIsOP = tIsOP;

	SQLUINTEGER iHaste, iShield, iDexUp, iMaxHPUp;
	iHaste = GetDWORD( pBuf, s_index );							//m_dwHasteTime = iHaste;
	iShield = GetDWORD( pBuf, s_index );						//m_dwShieldTime = iShield;
	iDexUp = GetDWORD( pBuf, s_index );							//m_dwDexUpTime = iDexUp;
	iMaxHPUp = GetDWORD( pBuf, s_index );						//m_dwMaxHPUpTime = iMaxHPUp;

	// LOADUSERBANK PART(SQL 贸府何俊 秦寸)...
	SQLUINTEGER ubiDN;
	ubiDN = GetDWORD( pBuf, s_index );

	SQLCHAR ubstrItem[_BANK_DB];
	GetString( (char *)ubstrItem, pBuf, sizeof(ubstrItem), s_index );
	//

	//-------------------------------------------------------------------------
	//LOADUSER DATA PROCESS.
	for ( int i = 0; i < TOTAL_PSI_NUM; i++ ) // 檬扁拳甫 怖 秦具 茄促.
	{
		m_UserPsi[i].sSid = -1;
		m_UserPsi[i].tOnOff = FALSE;
	}

	// Copy User Data
	strcpy(m_strUserID, szID);			// User ID
	m_sSTR		= sSTR;					// 塞
	m_sCON		= sCON;					// 扒碍
	m_sDEX		= sDEX;					// 刮酶
	m_sVOL		= sVOL;					// 狼瘤
	m_sWIS		= sWIS;					// 瘤驱

	m_sTempSTR	= (BYTE)sBasicSTR;		// 檬扁 费蔼甫 罐酒柯促.(饭骇促款老锭 靖)
	m_sTempCON	= (BYTE)sBasicCON;
	m_sTempDEX	= (BYTE)sBasicDEX;
	m_sTempVOL	= (BYTE)sBasicVOL;
	m_sTempWIS	= (BYTE)sBasicWIS;

	m_iSkin		= iSkin;				// 乔何祸
	m_iHair		= iHair;				// 赣府祸

	m_sGender	= sGender;				// 己喊

	::CopyMemory(m_strFace, strFace, 10); // 赣府葛剧

	m_curz		= sLZ;					// Zone
	m_curx		= sLX;					// 困摹 x
	m_cury		= sLY;					// 困摹 y

	m_dwBuddy	= iBuddy;				// Buddy
	m_dwGuild	= iGuild;				// Guild
	m_tFortressWar	= GUILD_WAR_AFFTER;
	m_tGuildWar		= GUILD_WAR_AFFTER;
	m_tGuildHouseWar= GUILD_WAR_AFFTER;

	if(m_dwGuild >= 0)					// 辨靛俊 措茄 单捞磐甫 檬扁拳茄促.
	{
		SetGuildVariable();
	}

	CheckGuildWar();			// 父距 傍己傈 吝捞扼搁 葛电 蜡历俊霸 舅赴促.(瘤陛篮 傍己傈父)

	m_bFieldWarApply= FALSE;
	m_FieldWarGMUid = 0;				// 鞘靛傈老锭 惑措规 辨付 uid
	m_dwFieldWar	= 0;				// 鞘靛傈 矫累捞搁 惑措祈 辨靛 锅龋啊 甸绢柯促.

	m_dwExp			= iExp;				// Experience

	m_sPA			= sPA;				// PA Point

	m_sSkillPoint	= sSkillPoint;		// Skill Point

	m_dwXP			= iXP;				// X Point
	
	m_sLevel		= sLevel;			// 饭骇

	if ( iExp > GetNextLevel(sLevel)) iExp = GetNextLevel(sLevel);	// 救傈 内靛.

	m_byClass		= byClass;			// 努贰胶

	m_sMaxHP		= g_sHPConst[m_byClass] * m_sCON + g_sHPLV[m_byClass] * (m_sLevel - 1) + g_sHPAdd[m_byClass];
	m_sMaxPP		= g_sPPConst[m_byClass] * m_sWIS + g_sPPLV[m_byClass] * (m_sLevel - 1) + g_sPPAdd[m_byClass];
	m_sMaxSP		= g_sSPConst[m_byClass] * m_sCON + g_sSPLV[m_byClass] * (m_sLevel - 1) + g_sSPAdd[m_byClass];

	m_bLive			= bLive;			// 磷菌绰瘤, 混疽绰瘤?

	m_sHP			= sHP;				// 泅犁 HP
	m_sPP			= sPP;				// 泅犁 PP
	m_sSP			= sSP;				// 泅犁 SP

	if ( m_sHP <= 0 || m_bLive == USER_DEAD ) 
	{
		m_bLive = USER_DEAD;
		SetZoneIndex(m_curz);
		IsDeadUser();					// 磷篮 蜡历搁 付阑肺...

		m_bLive = USER_LIVE;
		m_sHP = m_sMaxHP;	
	}
	else
		SetZoneIndex(m_curz);

	if (m_sHP > m_sMaxHP) m_sHP = m_sMaxHP;
	if (m_sPP > m_sMaxPP) m_sPP = m_sMaxPP;
	if (m_sSP > m_sMaxSP) m_sSP = m_sMaxSP;

	if (iDN < 0) iDN = 0;
	m_dwDN			= iDN;				// 家瘤陛

	m_iCityValue	= iCityValue;		// 矫刮 穿利蔼
	m_sKillCount	= sKillCount;		// PK穿利 冉荐

	for ( i = 0; i < 11; i++ )
	{
		if ( m_iCityValue < g_CityRankValue[i] )	// 穿利摹蔼捞 扁霖 汲沥蔼焊促 累篮瘤 魄窜茄促.

⌨️ 快捷键说明

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