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

📄 user.cpp.bak

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 BAK
📖 第 1 页 / 共 5 页
字号:
// USER.cpp: implementation of the USER class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Server.h"
#include "USER.h"
#include "COM.h"
#include "CircularBuffer.h"
#include "BufferEx.h"
#include "Item.h"
#include "Hyper.h"
#include "Mcommon.h"
#include "Search.h"
#include "ServerDlg.h"
#include "Mcommon.h"
#include "UserManager.h"
#include "UNI_CHAR.h"
#include "RoyalRumble.h"

#include "EventZone.h"

#include "SharedQueue.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#include "Extern.h"		//	寇何函荐 急攫

extern CUserManager *g_pUQM;
extern CSearch *g_pUserList;
extern CServerDlg *g_pMainDlg;

// zinee 02/11/26 for Mail Agent
extern CSharedQueue		g_MailAgentQueue;

//extern CRITICAL_SECTION m_CS_ReceiveData[];
extern CRITICAL_SECTION m_CS_FileWrite;
extern CRITICAL_SECTION m_CS_EventItemLogFileWrite;
extern CPtrList RecvPtrList[];
extern long nRecvDataLength[];

// IKING 2002.1.
extern CRITICAL_SECTION m_CS_LoginData;
extern CPtrList RecvLoginData;
extern long nLoginDataCount;
extern CRITICAL_SECTION m_CS_LogoutData;
extern CPtrList RecvLogoutData;
extern long nLogoutDataCount;				


extern CPtrList RecvSqlData;
extern CRITICAL_SECTION m_CS_SqlData;
extern long nSqlDataCount;	
extern int g_ChatEnable[];

extern CHATDATAPACKET *g_WaitRecvDataChat[DATA_BUF_SIZE_FOR_THREAD+1][AUTOMATA_THREAD+1];
extern int g_nChatDataHead[];
extern int g_nChatDataTail[];

extern BYTE g_ServerId;

extern TCHAR g_arServerIPAddr[16];
extern CString g_strARKRRWinner;
extern DWORD g_ThreadErr[];

extern CEventZone	g_QuestEventZone;

extern long	g_PotionViewOnOff;
//
/// 鞠龋拳 包访
// 霸烙 付促 促福霸...
//T_KEY private_key = 0x1234567890123456;
//T_KEY private_key = 0x4584263589548694;
T_KEY private_key = 0xd9b4f1a524657845;
////////////////////////////////////////////////////////////////////// 
//	傈开函荐
//
int g_8x[]	= {-2, -1, 0, 1, 2, 1, 0, -1};
int g_8y[]	= {0, -1, -2, -1, 0, 1, 2, 1};
int g_16x[]	= {-4, -3, -2, -1, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3};
int g_16y[]	= {0, -1, -2, -3, -4, -3, -2, -1, 0, 1, 2, 3, 4, 3, 2, 1};

POINT g_rPt[8][6] = 
{
	{{-1, -1}, {0, -1}, {-1, 0}, {0, 0}, {100, 100}, {100, 100}},
	{{-1, -1}, {0, -1}, {1, -1}, {-1, 0}, {0, 0}, {1, 0}},
	{{0, -1}, {1, -1}, {0, 0}, {1, 0}, {100, 100}, {100, 100}},
	{{-1, -1}, {0, -1}, {-1, 0}, {0, 0}, {-1, 1}, {0, 1}},
	{{0, -1}, {1, -1}, {0, 0}, {1, 0}, {0, 1}, {1, 1}},
	{{-1, 0}, {0, 0}, {-1, 1}, {0, 1}, {100, 100}, {100, 100}},
	{{-1, 0}, {0, 0}, {1, 0}, {-1, 1}, {0, 1}, {1, 1}},
	{{0, 0}, {1, 0,}, {0, 1}, {1, 1}, {100, 100}, {100, 100}},
};

short		g_sHPConst[CLASS_NUM] = {6, 3, 4, 4}; // 拜捧, 瘤莆捞, 档八, 醚扁
short		g_sPPConst[CLASS_NUM] = {1, 5, 3, 5};
short		g_sSPConst[CLASS_NUM] = {2, 2, 2, 2};

short		g_sHPLV[CLASS_NUM]	= {5, 3, 4, 3};
short		g_sPPLV[CLASS_NUM]	= {1, 4, 2, 3};
short		g_sSPLV[CLASS_NUM]	= {1, 1, 1, 1};

short		g_sHPAdd[CLASS_NUM]	= {10, 30, 40, 35};
short		g_sPPAdd[CLASS_NUM]	= {20, 10, 20, 20};
short		g_sSPAdd[CLASS_NUM]	= {20, 25, 35, 25};

int			g_iAccessoriSlot[MAX_ACCESSORI] = {2, 3, 6, 7};

extern short		g_sHPConst[CLASS_NUM];
extern short		g_sPPConst[CLASS_NUM];
extern short		g_sSPConst[CLASS_NUM];

extern short		g_sHPLV[CLASS_NUM];
extern short		g_sPPLV[CLASS_NUM];
extern short		g_sSPLV[CLASS_NUM];

extern short		g_sHPAdd[CLASS_NUM];
extern short		g_sPPAdd[CLASS_NUM];
extern short		g_sSPAdd[CLASS_NUM];

extern CRoyalRumble	g_RR;
//////////////////////////////////////////////////////////////////////
// 秦寸 拌凯俊辑 荤侩且荐乐绰 公扁拌凯 辆幅(酒捞袍 抛捞喉 辆幅)
//
int g_BrawlClass[] = {8,9,10,11,12,13,14,15};
int g_StaffClass[] = {4,5,6,7,12,13,14,15};
int g_EdgedClass[] = {2,3,6,7,10,11,14,15};
int g_FireArmsClass[] = {1,3,5,7,9,11,13,15};

///////////////////////////////////////////////////////////////////////
//	概流窍绊 胶懦捞 辑肺 概莫捞 救登绢辑 概流加己阑 胶懦扁霖栏肺 牧滚飘茄促.
//								拜捧		瘤莆捞				档八			醚扁			  公拌凯
BYTE g_DynamicSkillInfo[MAX_SKILL_MAGIC_NUM] = { 8,7,6,9,  0,  13,12,10,11,  0,  16,15,14,17,  0,  21,19,18,20,  0,  0,0,0 };

BOOL g_bDebug = FALSE;

int	g_CityRank[5][3] =		// 殿鞭窍遏矫 皑家荐摹
{
	{{2200}, {2950}, {3800}},
	{{1600}, {2300}, {3800}},
	{{600}, {870}, {2700}},
	{{333}, {870}, {2600}},
	{{333}, {870}, {2600}},
};
							// 阿 殿鞭寸 穿利 鞘夸荐摹
int	g_CityRankValue[] = {-39413, -26242, -11899, -2112, -332, 0, 500, 4000, 26300, 53900, 94000};
					//林冈  瘤莆捞 档八  醚扁
int	g_ClassWeight[] = {150,  100,   150,  130};		// 阿 拌凯喊 扁夯 公霸

//int g_ItemAttUpgrade[] = {10000, 9900, 9500, 9000, 8500, 8000, 7000, 5000, 3000, 1500, 1000, 800, 600, 400, 200, 100, 100, 100, 100, 100};
//int g_ItemDefUpgrade[] = {10000, 9900, 9500, 9200, 9000, 8500, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 800, 600, 400, 200, 100, 100};
int g_ItemAttUpgrade[] = {10000, 9900, 9500, 9000, 8500, 8000, 7000, 5000, 3000, 1500, 1000, 800, 600, 400, 200, 100, 100, 100, 100, 100};//酒捞袍 诀弊饭捞靛  犬伏
int g_ItemDefUpgrade[] = {10000, 9900, 9500, 9200, 9000, 8500, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 800, 600, 400, 200, 100, 100};
int g_ItemAccessoriUpgrade[] = {7000, 5500, 4500};
int g_ItemBlessingUpgrade[] = {5000, 8500, 10000};
int g_ItemNormalDownUpgrade[] = {5000, 1000};

//////////////////////////////////////////////////////////////////////////////////////////////////////
//	秦寸 鸥涝俊 措茄 惑怕捞惑 矫埃 沥焊甫 努府绢 茄促.
//
void USER::ClearAbnormalTime(DWORD dwType)
{
	DWORD dwCurrTime = GetTickCount();

	switch(dwType)
	{
	case ABNORMAL_TIME:
		m_tAbnormalKind = ABNORMAL_BYTE_NONE;
		m_dwAbnormalTime = 0;
		m_dwLastAbnormalTime = dwCurrTime;

		ClearAbnormalGroup(ABNORMAL_CLEAR_STATUS);
		break;

	case PSI_ONE_TIME:
		m_dwLastHasteTime	= dwCurrTime;			// 付瘤阜栏肺 庆捞胶飘啊 吧赴矫埃
		m_dwLastShieldTime	= dwCurrTime;			// 付瘤阜栏肺 蒋靛甫 敬 矫埃
		m_dwLastDexUpTime	= dwCurrTime;			// 付瘤阜栏肺 DEX UP 阑 敬 矫埃
		m_dwLastMaxHPUpTime	= dwCurrTime;			// 付瘤阜栏肺 MAX HP UP 阑 敬 矫埃

		m_dwLastFastRunTime			= dwCurrTime;	// 付瘤阜栏肺 菩胶飘繁阑 敬 矫埃
		m_dwLastMindShockTime		= dwCurrTime;	// 付瘤阜栏肺 付牢靛 碱农甫 敬 矫埃
		m_dwLastPsiShieldTime		= dwCurrTime;	// 付瘤阜栏肺 荤捞坷葱蒋靛甫 敬矫埃
		m_dwLastPiercingShieldTime = dwCurrTime;	// 付瘤阜栏肺 乔绢教蒋靛甫 敬 矫埃
		m_dwLastBigShieldTime       = dwCurrTime;

		m_dwHasteTime		= 0;					// Haste
		m_dwShieldTime		= 0;					// Shield
		m_dwDexUpTime		= 0;					// Dex Up
		m_dwMaxHPUpTime		= 0;					// Max HP Up

		m_dwFastRunTime			= 0;				// Fast Run
		m_dwMindShockTime		= 0;				// Mind Shock
		m_dwPsiShieldTime		= 0;				// Psionic Shield
		m_dwPiercingShieldTime	= 0;				// Piercing Shield
		m_dwBigShieldTime   = 0;


		
		ClearAbnormalGroup(ABNORMAL_CLEAR_PSI_ONE);
		if(m_bNecklaceOfShield) AddAbnormalInfo(ABNORMAL_SHIELD);	// 荐龋狼 格吧捞

		break;

	case PSI_TWO_TIME:
		m_dwLastAdamantineTime	= dwCurrTime;	// 付瘤阜栏肺 Adamantine阑 敬 矫埃
		m_dwLastMightyWeaponTime= dwCurrTime;	// 付瘤阜栏肺 MightyWeapon阑 敬 矫埃
		m_dwLastBerserkerTime	= dwCurrTime;	// 付瘤阜栏肺 Berserker甫 敬 矫埃
		
		m_dwAdamantineTime		= 0;			// Adamantine
		m_dwMightyWeaponTime	= 0;			// Mighty Weapon
		m_dwBerserkerTime		= 0;			// Berserker

		ClearAbnormalGroup(ABNORMAL_CLEAR_PSI_TWO);
		break;

	case PSI_THREE_TIME:
		m_dwLastMindGuardTime	= dwCurrTime;	// 付瘤阜栏肺 Mind Guard 甫 敬矫埃
		m_dwMindGuardTime		= 0;			// Mind Guard

		ClearAbnormalGroup(ABNORMAL_CLEAR_PSI_THREE);
		break;

	}
}

//////////////////////////////////////////////////////////////////////
// Construction/Destruction ...
//
USER::USER()
{	
	m_pCB		= new CCircularBuffer(20000);		// Socket俊辑 Data甫 罐酒辑 阶酒滴绰 滚欺
	m_pCBCore	= new CCircularBuffer(20000);		// Socket俊辑 罐篮 Data吝俊 蜡瓤茄 菩哦阑 榜扼郴绢 历厘窍绰 滚欺

	m_pSharedMemory = NULL;
	m_pMD			= NULL;

	// IKING 2002.1.
	m_server		= 0;
	m_dwLastDownExp	= 0;
	m_bPseudoString = FALSE;//yskang 0.1 龋莫[局莫]捞 啊楼牢瘤 柳楼牢瘤 备盒^^
	m_nGuildUserInfoType = 0x00;//yskang 0.2
	ZeroMemory(m_strLoveName,sizeof(m_strLoveName));

	InitializeCriticalSection(&m_CS_ExchangeItem);
	InitializeCriticalSection(&m_CS_ShopItem);
}

USER::~USER()
{
	int i = 0;
	EnterCriticalSection( &m_CS_ExchangeItem );
	for(i = 0; i < m_arExchangeItem.GetSize(); i++)
	{
		if( m_arExchangeItem[i] )
		{
			delete m_arExchangeItem[i];
			m_arExchangeItem[i] = NULL;
		}
	}
	m_arExchangeItem.RemoveAll();
	LeaveCriticalSection( &m_CS_ExchangeItem );

	EnterCriticalSection( &m_CS_ShopItem );
	for(i = 0; i < m_arShopItem.GetSize(); i++)
	{
		if( m_arShopItem[i] )
		{
			delete m_arShopItem[i];
			m_arShopItem[i] = NULL;
		}
	}
	m_arShopItem.RemoveAll();
	LeaveCriticalSection( &m_CS_ShopItem );

	if(m_pCB) delete m_pCB;
	if(m_pCBCore) delete m_pCBCore;

	DeleteCriticalSection(&m_CS_ExchangeItem);
	DeleteCriticalSection(&m_CS_ShopItem);
}

int USER::Init( int bufCreateFlag )
{
	CBSocket::Init(bufCreateFlag);

	m_ConnectionSuccessTick = 0;

	if ( m_Sid == -1 )
	{
		m_Sid = 0;
		m_iModSid = AUTOMATA_THREAD;
		m_uid = m_Sid;
	}
	else
	{
		m_iModSid = m_Sid % AUTOMATA_THREAD;
		m_uid = m_Sid;
	}
	
	m_isCryptionFlag = 0;
	m_Recv_value = 0;
	m_Send_value = 0;
	m_public_key = 0;

	SetPublicKey();
	m_cryptfn.SetPublicKey( m_public_key );
	m_cryptfn.SetPrivateKey(private_key);

	// 辑摹 备炼 檬扁拳 窍扁...
	if ( m_uid >= 0 )
		g_pUserList->SetUserUid( m_uid,this );

	m_Recv_value = 0;
	m_UserStatus = USER_JUST_CONNECTED;
	m_pCom = g_pMainDlg->GetCOM();
	m_UserFlag = FALSE;

	InitUser();

	m_ConnectionSuccessTick = GetTickCount();

	// 粮 change IP, Port...
	m_strZoneIP = "";
	m_nZonePort	= -1;

	return 1;
}

BOOL USER::InitUser()
{
	// Compress Init
	memset( m_CompBuf, NULL, 10240 );		// 拘绵且 单捞磐甫 葛栏绰 滚欺
	m_iCompIndex = 0;						// 拘绵且 单捞磐狼 辨捞
	m_CompCount = 0;						// 拘绵且 单捞磐狼 俺荐

	// Memory DB Data Init
	m_pSharedMemory = NULL;
	m_pMD = NULL;

	// Speed Hack Check 函荐 檬扁拳
	m_iTickCount = 0;
	m_dwServerTickBasic = 0;
	m_dwServerTick = 0;
	m_dwClientTick = 0;


	m_ZoneIndex = 0;
	m_bWhisper	= TRUE;						// 庇富 倾侩
	m_bLive		= USER_DEAD;				// Live Or Dead

	m_NowZoneChanging = FALSE;				// 粮 眉牢瘤且锭 TRUE;

	m_bBuddyMode = FALSE;					// Buddy Off
//	m_bTradeMode	= FALSE;				// Trade Off
	m_bTradeWaiting = FALSE;				// Trade 夸没饶 搬苞甫 扁促府绰 吝
	m_bNowTrading	= FALSE;				// 泅犁 芭贰吝
	m_bExchangeOk	= FALSE;				// Exchange 铰倡
	m_bTradeItem	= FALSE;				// Item阑 棵妨初澜(X)
	m_iTradeUid		= -1;

	m_bPShopOpen	= FALSE;				// Personal shop open or closed
	m_bPShopView	= FALSE;				// Personal shop being viewed
	m_iPShopViewuid = -1;					// Personal shop view uid
	m_bViewingAShop	= FALSE;				// User viewing a personal shop

	m_bNoItemMove	= FALSE;

	m_bRefuse		= FALSE;				// 扁夯 可记篮 酒捞袍 罐扁 
	m_iMaxWeight	= 0;					// 甸荐乐绰 公霸
	m_iCurWeight	= 0;

	m_dwGuild = -1;							// 辨靛 牢郸胶	
	m_sGuildVersion = -1;					// 辨靛 巩剧 滚怜
	m_bGuildMaster = FALSE;					// 辨靛 付胶磐
	m_bRepresentationGuild = FALSE;			// 鼻茄 措青 咯何	 
	::ZeroMemory(m_strGuildName, sizeof(m_strGuildName)); // 辨靛 捞抚

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

	::ZeroMemory(m_strChar, sizeof(m_strChar));
	::ZeroMemory(m_strTradeUser, sizeof(m_strTradeUser));
	::ZeroMemory(m_PersonalShopName, sizeof(m_PersonalShopName));

	m_sTempSTR = 0;					
	m_sTempCON = 0;					
	m_sTempDEX = 0;					
	m_sTempINT = 0;					
	m_sTempVOL = 0;					
	m_sTempWIS = 0;	
	
	m_tTempClass = 255;

	m_nHavePsiNum = 0;						// 焊蜡 荤捞坷葱 荐
	m_tDir = 0;								// 蜡历啊 焊绊 乐绰 规氢
	m_tIsOP = 0;							// 款康磊牢瘤 魄窜
	m_bLogOut = FALSE;							// Logout 吝牢啊 魄窜
	m_bZoneLogOut = FALSE;

	int i = 0;										// 馆拜胶懦 贸府甫 困秦 檬扁拳		
	for(i = 0; i < COUNTERATTACK_MAX_NUM; i++)
	{
		m_CounterAttackList[i].iDamage = 0;
		m_CounterAttackList[i].iNpcUid = -1;
		m_CounterAttackList[i].lSid = 0;
		m_CounterAttackList[i].dwLastAttackTime = GetTickCount();
	}

	for(i = 0; i < TOTAL_ITEM_NUM; i++) // 芭贰吝 牢亥俊 官差绰 酒捞袍 荐甫 眉农困秦
	{ 
		m_TradeItemNum[i].sSid = -1; 
		m_TradeItemNum[i].sNum = 0; 
	}

	for(i = 0; i < TOTAL_ITEM_NUM; i++) // 酒捞袍 浇吩甫 檬扁拳
	{ 
		m_UserItem[i].sLevel = 0;			 // 捞 酒捞袍阑 荤侩且荐 乐绰 饭骇
		m_UserItem[i].sSid = -1; 
		m_UserItem[i].sCount = 0;
		m_UserItem[i].sBullNum = 0;
		m_UserItem[i].sDuration = -1;
		m_UserItem[i].tIQ = 0;
		for(int j = 0; j < MAGIC_NUM; j++) m_UserItem[i].tMagic[j] = 0;
		m_UserItem[i].iItemSerial = 0;
	}

	m_bMakeBuddy = FALSE;			// 炉牢瘤 眉农 
	m_bNowBuddy = FALSE;			// 泅犁 滚叼吝牢瘤
	for(i = 0; i < MAX_BUDDY_USER_NUM; i++)
	{
		m_MyBuddy[i].uid = -1;
		::ZeroMemory(m_MyBuddy[i].m_strUserID, sizeof(m_MyBuddy[i].m_strUserID));		
	}

	for(i = 0; i < MAX_GUILD_USER; i++)
	{
		m_MyGuildUser[i].sLevel = 0;	// 立加吝牢 辨靛盔
		::ZeroMemory(m_MyGuildUser[i].GuildUser, sizeof(m_MyGuildUser[i].GuildUser));		
	}

	for(i = 0; i < MAGIC_COUNT; i++)		// 概流 浇吩阑 檬扁拳
	{
		m_DynamicUserData[i] = 0;
	}

	for(i = 0; i < EBODY_MAGIC_COUNT; i++)	// EBody 概流 浇吩 檬扁拳
	{	
		m_DynamicEBodyData[i] = 0;
	}

	InitTelList(m_strTeleport);
	InitEventSlot();

//	m_bLive = USER_LIVE;
	m_nCharNum = 0;

	DWORD dwCurrTime = GetTickCount();

	m_dwLastSpeedTime = dwCurrTime;
	m_dwLastMoveAndRun = dwCurrTime;
	m_dwLastAttackTime = dwCurrTime;
	m_dwLastPsiAttack = dwCurrTime;
	m_dwCastDelay = 0;
	m_dwLastTimeCount = dwCurrTime;
	m_dwLastAbnormalTime = dwCurrTime;
	m_dwLastHPTime = dwCurrTime;
	m_dwLastPsiDamagedTime = 0;

	m_dwLastHasteTime = dwCurrTime;
	m_dwLastShieldTime = dwCurrTime;
	m_dwLastDexUpTime = dwCurrTime;
	m_dwLastMaxHPUpTime = dwCurrTime;
	m_dwLastBigShieldTime = dwCurrTime;

	m_dwLastFastRunTime			= dwCurrTime;
	m_dwLastMindShockTime		= dwCurrTime;
	m_dwLastMindGuardTime		= dwCurrTime;
	m_dwLastPsiShieldTime		= dwCurrTime;
	m_dwLastPiercingShieldTime	= dwCurrTime;

	m_dwLastUpdateTime = dwCurrTime;	//
	m_dwLastSaveTime   = dwCurrTime;
	m_lRequireNum = 0;

	m_tAbnormalKind		= 0;
	m_dwAbnormalTime	= 0;

	m_dwHasteTime		= 0;
	m_dwShieldTime		= 0;
	m_dwDexUpTime		= 0;
	m_dwMaxHPUpTime		= 0;
	m_dwAdamantineTime	= 0;
	m_dwMightyWeaponTime= 0;
	m_dwBerserkerTime	= 0;

	m_dwFastRunTime			= 0;
	m_dwMindShockTime		= 0;
	m_dwMindGuardTime		= 0;
	m_dwPsiShieldTime		= 0;
	m_dwPiercingShieldTime	= 0;
	m_dwBigShieldTime   = 0;

	m_dwLastHiExpTime		= dwCurrTime;
	m_dwLastMagicFindTime	= dwCurrTime;
	m_dwLastNoChatTime		= dwCurrTime;

	m_dwHiExpTime		= 0;	// 版氰摹 2硅
	m_dwMagicFindTime	= 0;	// 概流蛮胶 5硅
	m_dwNoChatTime		= 0;	// 盲陛

	m_dwNoDamageTime		= 0;
	m_dwLastNoDamageTime	= dwCurrTime;

	m_dwAbnormalInfo	= ABNORMAL_NONE;

	m_state = STATE_DISCONNECTED;

	m_ItemFieldInfoCount = 0;
	memset( m_ItemFieldInfoBuf, NULL, 8192 );
	m_ItemFieldInfoIndex = 0;

	InitUserItem();
	InitGuildItem();			// 函荐甫 柄昌捞 技殴茄促.
	InitAccountBankItem();		// 函荐甫 柄昌捞 技殴茄促.

	m_bPkStatus = FALSE;		// 泪矫悼救 墨坷惑怕牢瘤甫 汲沥
	m_dwPkStatusTime = 0;		// 墨坷己氢老锭 瘤加 矫埃甫 魄沥
	m_iCityValue = 0;			// 泅犁 穿利 己氢蔼

⌨️ 快捷键说明

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