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

📄 item_gen.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 4 页
字号:
	//int newvals[MAX_ITEM_ATOMS_SIZE];	int i;	double oddstable[] = {		0.1,		0.25,		0.35,		0.4,		0.42,		0.44,		0.46,		0.47,		0.48,		0.49,		0.5,		0.51,		0.52,		0.53	};#if 0	double oddstable[] = {		0.08,		0.224,		0.315,		0.37,		0.395,		0.405,		0.415,		0.42,		0.425,		0.43,		0.435,		0.44,		0.445,		0.45	};	double oddstable[] = {		0.05,		0.175,		0.247,		0.305,		0.342,		0.361,		0.37,		0.375,		0.379,		0.382,		0.387,		0.39,		0.393,		0.396	};#endif	for( i = 0; i < num; i ++ ) {		int datacnt = (inds + i)->num;		if( datacnt > 1 ) {			int j;			qsort( (inds + i)->data, datacnt, 					sizeof( double ), (FUNC)cmprutine);			for( j = 1; j < datacnt; j ++ ) {				int tablenum;				double rate;				tablenum = ITEM_getTableNum( (inds + i)->data[j-1]);				rate = ItemRandTableForItem[tablenum].rate / ItemRandTableForItem[0].rate;				(inds + i)->data[j] += (inds + i)->data[j-1] * oddstable[j-1] * rate;			}		}		*(retinds + i) = ( inds + i)->index;		*(retvals + i) = (int)( inds + i)->data[ datacnt-1];		// shan add begin		if( petindex != -1 ){#ifdef _MERGE_NEW_8			/*if( alchemist ) { // 使用守护兽精  时无上限 // 改:皆有上限				if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1){					if( *( retvals + i) > ITEM_ATOMIND_FM_MAX ){						*( retvals + i) = ITEM_ATOMIND_FM_MAX;					}				}else{					if( *( retvals + i) > ITEM_ATOMIND_MAX ){ 						*( retvals + i) = ITEM_ATOMIND_MAX;					}				}			}			else */			{ // 非精  时有上限 				if( *( retvals + i) > ITEM_ATOMIND_MAX ){ 					*( retvals + i) = ITEM_ATOMIND_MAX;				}			}#else			if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1){				if( *( retvals + i) > ITEM_ATOMIND_FM_MAX ){					*( retvals + i) = ITEM_ATOMIND_FM_MAX;				}			}else{				if( *( retvals + i) > ITEM_ATOMIND_MAX ){ 					*( retvals + i) = ITEM_ATOMIND_MAX;				}			}#endif		}		// shan end	}}/*PET_ADD_INGRED( nm,vl1,vl2,vl3){	if( strlen( ENEMYTEMP_getChar( petarray, nm)) != 0 )	{		fixatom[ingnum] =ITEM_getAtomIndexByName( ENEMYTEMP_getChar( petarray, nm) );		if( fixatom[ingnum] < 0 )		{			print( "\nfucking atom:[%s] for pet id %d", ENEMYTEMP_getChar( petarray, nm), petid );			continue;		}				baseup[ingnum] = ENEMYTEMP_getInt( petarray, vl1);		minadd[ingnum] = ENEMYTEMP_getInt( petarray, vl2);		maxadd[ingnum] = ENEMYTEMP_getInt( petarray, vl3);				if( petindex != -1)		{			if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 )			{				int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);				if (!CHAR_CHECKINDEX(ownerindex))				{					print("ownerindex err!\n");					return;				}				if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)				{					print("\n Pet Ownerindex Error");					return;				}				baseup[ingnum] = PetLv[getFmLv(ownerindex)];			}		}				if( minadd[ingnum] > maxadd[ingnum] )		{			int tmp = minadd[ingnum];			minadd[ingnum] = maxadd[ingnum];maxadd[ingnum] = tmp;		}				if( CHAR_getInt(petid, CHAR_PETFAMILY) == 1 )		{			if( minadd[ingnum]<0 )				minadd[ingnum] = ITEM_FM_RANDRANGEDOM;			if( maxadd[ingnum]<0 )				maxadd[ingnum] = ITEM_FM_RANDRANGEDOM;		}		else		{			if( minadd[ingnum]<0 )				minadd[ingnum] = ITEM_RANDRANGEDOM;			if( maxadd[ingnum]<0 )				maxadd[ingnum] = ITEM_RANDRANGEDOM;		}		ingnum++;	}}*/#ifdef _MERGE_NEW_8int PET_ADD_INGRED( int nm, int vl1, int vl2, int vl3, 					int petindex, int petarray, int petid, int ingnum,					int *baseup, int *minadd, int *maxadd, int *fixatom ){	// 家族修正 守护兽时用	int	PetLv[] = { 0, 77, 108, 145, 188, 237, 292, 353, 420, 493, 572};	// 家族(个人)修正 非守护兽时用	//int	PetLvPersonal[] = { 0, 77, 108, 145, 188, 237, 292, 353, 420, 493, 572};	if( strlen( ENEMYTEMP_getChar( petarray, nm)) != 0 ) {		fixatom[ingnum] =ITEM_getAtomIndexByName( ENEMYTEMP_getChar( petarray, nm) );		if( fixatom[ingnum] < 0 ) {			print( "\nfucking atom:[%s] for pet id %d", ENEMYTEMP_getChar( petarray, nm), petid ); 			return 1; //continue;		} 		baseup[ingnum] = ENEMYTEMP_getInt( petarray, vl1); 		minadd[ingnum] = ITEM_RANDRANGEDOM_BASE + ENEMYTEMP_getInt( petarray, vl2); 		maxadd[ingnum] = ITEM_RANDRANGEDOM_BASE + ENEMYTEMP_getInt( petarray, vl3); 		if( petindex != -1) { 			int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX); 						if (!CHAR_CHECKINDEX(ownerindex)) {				print("宠物主人错误\n");				return 2; // just return;			}			if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ) { 				if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER) {					print("宠物主人错误\n");					CHAR_talkToCli( ownerindex, -1, "非族长不能用守护兽加工唷!", CHAR_COLORYELLOW);					return 2; // just return;				}				baseup[ingnum] = PetLv[getFmLv(ownerindex)];			}			else { // 8.0新增				baseup[ingnum] = PetLv[getFameLv(ownerindex)];			}		}		if( minadd[ingnum] > maxadd[ingnum] ) {			int tmp = minadd[ingnum];			minadd[ingnum] = maxadd[ingnum];			maxadd[ingnum] = tmp;		}		if( CHAR_getInt(petid, CHAR_PETFAMILY) == 1 ) {			if( minadd[ingnum]<0 ) 				minadd[ingnum] = ITEM_FM_RANDRANGEDOM;			if( maxadd[ingnum]<0 )				maxadd[ingnum] = ITEM_FM_RANDRANGEDOM;		}		else {			if( minadd[ingnum]<0 ) 				minadd[ingnum] = ITEM_RANDRANGEDOM;			if( maxadd[ingnum]<0 ) 				maxadd[ingnum] = ITEM_RANDRANGEDOM;		}		ingnum++;	}}#endif/*  矢永玄及ID井日}刭醒及膜恳涩烂毛潸曰分允[  int *fixuse : 袄瑛绊娄醒[    及    醒毛午曰}烂聒醒毛中木化井尹允  int *fixatom : 升及豳笺卞覆允月膜恳卅及井  int *baseup : 湘  袄卞凶中允月笛遥  int *minadd : 井仃遥及  凝卞凶中允月笛遥  int *maxadd : 井仃遥及    卞凶中允月笛遥   */static voidITEM_merge_getPetFix( int petid, int *fixuse, int *fixatom,					  int *baseup,					  int *minadd,					  int *maxadd,					  int petindex,					  int *fm_fix){	int		i;	int		ingnum = 0;	int		petarray;// shan begin	#define FamilyLv 11        //int             PetLv[FamilyLv];        //for(i=0; i<FamilyLv; i++){        //    if(i==0) PetLv[i] = 0;        //    else PetLv[i] = 3*pow(i,2)+10*i+20;        //}#ifdef _MERGE_NEW_8	// 1st	//int	PetLv[] = { 0, 145, 188, 237, 292, 353, 420, 493, 572, 657, 748};	int	PetLv[] = { 0, 77, 108, 145, 188, 237, 292, 353, 420, 493, 572};#else	int	PetLv[] = { 0, 33, 52, 77, 108, 145, 188, 237, 292, 353, 420, 493};#endif	//int PetLv[] = { 0, 33, 52, 77, 108, 145, 188, 1100, 1300, 1500, 1700 };// shan end		if( petid < 0 ){		*fixuse = 0;		return;	}	petarray = ENEMYTEMP_getEnemyTempArrayFromTempNo( petid);	if( petarray == -1 ) {		print( "宠物队列错误 [%s][%d]\n", __FILE__, __LINE__);		return;	}#ifdef _MERGE_LOG	{		int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);		if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ) { 			print("\n 使用守护兽 家族声望:%d 家族等级:%d 家族修正:%d ",				CHAR_getWorkInt(ownerindex, CHAR_WORKFMDP), getFmLv(ownerindex), PetLv[getFmLv(ownerindex)]);		}		else {			print("\n 非使用守护兽 个人声望:%d 个人等级:%d 个人修正:%d ",				CHAR_getInt(ownerindex, CHAR_FAME), getFameLv(ownerindex), PetLv[getFameLv(ownerindex)]);		}	}#endif	for( i = 0; i < 5; i ++ ) {		int ret;#ifdef _FMVER21//#define PET_ADD_INGRED( nm,vl1,vl2,vl3)	if( strlen( ENEMYTEMP_getChar( petarray, nm)) != 0 ) { fixatom[ingnum] =ITEM_getAtomIndexByName( ENEMYTEMP_getChar( petarray, nm) ); if( fixatom[ingnum] < 0 ){	print( "\nfucking atom:[%s] for pet id %d", ENEMYTEMP_getChar( petarray, nm), petid ); continue;} baseup[ingnum] = ENEMYTEMP_getInt( petarray, vl1); minadd[ingnum] = ENEMYTEMP_getInt( petarray, vl2); maxadd[ingnum] = ENEMYTEMP_getInt( petarray, vl3); if( petindex != -1){ if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ){ int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX); if (!CHAR_CHECKINDEX(ownerindex)){print("ownerindex err!\n");return;}if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER){print("\n Pet Ownerindex Error");return;}baseup[ingnum] = PetLv[getFmLv(ownerindex)];}}if( minadd[ingnum] > maxadd[ingnum] ) {	int tmp = minadd[ingnum];minadd[ingnum] = maxadd[ingnum];maxadd[ingnum] = tmp;}if( CHAR_getInt(petid, CHAR_PETFAMILY) == 1 ){if( minadd[ingnum]<0 ) minadd[ingnum] = ITEM_FM_RANDRANGEDOM;if( maxadd[ingnum]<0 ) maxadd[ingnum] = ITEM_FM_RANDRANGEDOM;}else{if( minadd[ingnum]<0 ) minadd[ingnum] = ITEM_RANDRANGEDOM;if( maxadd[ingnum]<0 ) maxadd[ingnum] = ITEM_RANDRANGEDOM;}ingnum++;}#define PET_ADD_INGRED( nm,vl1,vl2,vl3)	if( strlen( ENEMYTEMP_getChar( petarray, nm)) != 0 ) { fixatom[ingnum] =ITEM_getAtomIndexByName( ENEMYTEMP_getChar( petarray, nm) ); if( fixatom[ingnum] < 0 ){	print( "\nfucking atom:[%s] for pet id %d", ENEMYTEMP_getChar( petarray, nm), petid ); continue;} baseup[ingnum] = ENEMYTEMP_getInt( petarray, vl1); minadd[ingnum] = ITEM_RANDRANGEDOM_BASE + ENEMYTEMP_getInt( petarray, vl2); maxadd[ingnum] = ITEM_RANDRANGEDOM_BASE + ENEMYTEMP_getInt( petarray, vl3); if( petindex != -1){ if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ){ int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX); if (!CHAR_CHECKINDEX(ownerindex)){print("ownerindex err!\n");return;}if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER){print("\n Pet Ownerindex Error");return;}baseup[ingnum] = PetLv[getFmLv(ownerindex)];}}if( minadd[ingnum] > maxadd[ingnum] ) {	int tmp = minadd[ingnum];minadd[ingnum] = maxadd[ingnum];maxadd[ingnum] = tmp;}if( CHAR_getInt(petid, CHAR_PETFAMILY) == 1 ){if( minadd[ingnum]<0 ) minadd[ingnum] = ITEM_FM_RANDRANGEDOM;if( maxadd[ingnum]<0 ) maxadd[ingnum] = ITEM_FM_RANDRANGEDOM;}else{if( minadd[ingnum]<0 ) minadd[ingnum] = ITEM_RANDRANGEDOM;if( maxadd[ingnum]<0 ) maxadd[ingnum] = ITEM_RANDRANGEDOM;}ingnum++;}#else#define PET_ADD_INGRED( nm,vl1,vl2,vl3) if( strlen( ENEMYTEMP_getChar( petarray, nm)) != 0 ) { fixatom[ingnum] =ITEM_getAtomIndexByName( ENEMYTEMP_getChar( petarray, nm) ); if( fixatom[ingnum] < 0 ){ print( "\nfucking atom:[%s] for pet id %d", ENEMYTEMP_getChar( petarray, nm), petid ); continue;} baseup[ingnum] = ENEMYTEMP_getInt( petarray, vl1); minadd[ingnum] = ENEMYTEMP_getInt( petarray, vl2);	maxadd[ingnum] = ENEMYTEMP_getInt( petarray, vl3); if( petindex != -1){ if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ){ int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX); if (!CHAR_CHECKINDEX(ownerindex)){print("ownerindex err!\n");return;}if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != 1){print("\n Pet Ownerindex Error");return;}baseup[ingnum] = PetLv[getFmLv(ownerindex)];}}if( minadd[ingnum] > maxadd[ingnum] ) {int tmp = minadd[ingnum];minadd[ingnum] = maxadd[ingnum];maxadd[ingnum] = tmp;}if( CHAR_getInt(petid, CHAR_PETFAMILY) == 1 ){if( minadd[ingnum]<0 ) minadd[ingnum] = ITEM_FM_RANDRANGEDOM;if( maxadd[ingnum]<0 ) maxadd[ingnum] = ITEM_FM_RANDRANGEDOM;}else{if( minadd[ingnum]<0 ) minadd[ingnum] = ITEM_RANDRANGEDOM;if( maxadd[ingnum]<0 ) maxadd[ingnum] = ITEM_RANDRANGEDOM;}ingnum++;}#endif#ifdef _MERGE_NEW_8#undef PET_ADD_INGRED		ret = PET_ADD_INGRED( E_T_ATOMFIXNAME1, E_T_ATOMBASEADD1, E_T_ATOMFIXMIN1, E_T_ATOMFIXMAX1, petindex, petarray, petid, ingnum, baseup, minadd, maxadd, fixatom );		if( ret == 1 ) continue; else if( ret == 2 ) return;		ret = PET_ADD_INGRED( E_T_ATOMFIXNAME2, E_T_ATOMBASEADD2, E_T_ATOMFIXMIN2, E_T_ATOMFIXMAX2, petindex, petarray, petid, ingnum, baseup, minadd, maxadd, fixatom );		if( ret == 1 ) continue; else if( ret == 2 ) return;		ret = PET_ADD_INGRED( E_T_ATOMFIXNAME3, E_T_ATOMBASEADD3, E_T_ATOMFIXMIN3, E_T_ATOMFIXMAX3, petindex, petarray, petid, ingnum, baseup, minadd, maxadd, fixatom );		if( ret == 1 ) continue; else if( ret == 2 ) return;		ret = PET_ADD_INGRED( E_T_ATOMFIXNAME4, E_T_ATOMBASEADD4, E_T_ATOMFIXMIN4, E_T_ATOMFIXMAX4, petindex, petarray, petid, ingnum, baseup, minadd, maxadd, fixatom );		if( ret == 1 ) continue; else if( ret == 2 ) return;		ret = PET_ADD_INGRED( E_T_ATOMFIXNAME5, E_T_ATOMBASEADD5, E_T_ATOMFIXMIN5, E_T_ATOMFIXMAX5, petindex, petarray, petid, ingnum, baseup, minadd, maxadd, fixatom );		if( ret == 1 ) continue; else if( ret == 2 ) return;#else		PET_ADD_INGRED( E_T_ATOMFIXNAME1, E_T_ATOMBASEADD1, E_T_ATOMFIXMIN1, E_T_ATOMFIXMAX1);		PET_ADD_INGRED( E_T_ATOMFIXNAME2, E_T_ATOMBASEADD2, E_T_ATOMFIXMIN2, E_T_ATOMFIXMAX2);		PET_ADD_INGRED( E_T_ATOMFIXNAME3, E_T_ATOMBASEADD3, E_T_ATOMFIXMIN3, E_T_ATOMFIXMAX3);		PET_ADD_INGRED( E_T_ATOMFIXNAME4, E_T_ATOMBASEADD4, E_T_ATOMFIXMIN4, E_T_ATOMFIXMAX4);		PET_ADD_INGRED( E_T_ATOMFIXNAME5, E_T_ATOMBASEADD5, E_T_ATOMFIXMIN5, E_T_ATOMFIXMAX5);#endif#ifdef _MERGE_LOG		print("\n %d.[ me:%s, min%d, b:%d, max:%d]", i, ENEMYTEMP_getChar( petarray, E_T_ATOMFIXNAME1+i),				minadd[i], baseup[i], maxadd[i]);#endif	}		if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ) { 		int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);		if( CHAR_CHECKINDEX(ownerindex) ) { 			*fm_fix = PetLv[getFmLv(ownerindex)];		}	}	*fixuse = ingnum;	return;}/*  * 公及    互]宁岳葭失奶  丞卞丐匀凶日FALSE毛忒允 */static BOOL ITEM_merge_checkitem( ITEM_Item *items, int itemsnum, int id){	int loop;	for( loop = 0; loop < itemsnum; loop ++ ) {		if( items[loop].data[ITEM_ID] == id ) break;	}	if( loop == itemsnum ) return TRUE;	return FALSE;}static int ITEM_merge_with_retry( ITEM_Item *items,int itemsnum, 								int *ingindtable, int ingnum,							  int *ingtable, int searchtable, int petindex ){	int ideal;	int	idel_num[5][5] = {	{ 0},							{ 250,0 },							{ 400,150,0},							{ 700,260,70,0},							{ 740,500,200,40,0}	};	int	endflg[5];	BOOL	first = TRUE;	int		extractcnt = 0;#define MAXMATCH 2048	int matchid[MAXMATCH];	int		i,j,k;			if( ingnum > 5 ) ideal = 5;		else			 ideal = ingnum;	memset( endflg, 0, sizeof( endflg));	while( 1 ) {		int		r = RAND( 0, 999);		int		extractnum;		int		match = 0;		if( extractcnt >= ideal ) break;		// 计算合成道具的必须材料数		for( extractnum = 0; extractnum < ideal; extractnum ++ ) {			if( r >= idel_num[ideal-1][extractnum] ) {				break;			}		}		if( endflg[extractnum] == TRUE ) continue;		endflg[extractnum] = TRUE;		extractcnt++;		extractnum = ideal - ( extractnum );		if( first ) {			for( i = 0; i < icache_num; i++ ){ //  搜寻全部ITEM				if( icache[i].use && icache[i].canmergeto) { // 如果是可合成的ITEM					icache[i].hitnum = 0;					for( j = 0; j < icache[i].inguse; j ++ ) { // 这个ITEM的材料数						for( k = 0; k < ingnum ; k ++){ // 合成的材料数							if( icache[i].ingind[j] == ingindtable[k] ) { // 材料符合								if( searchtable == 0 ) { // 道具合成的话									int tablenum = ITEM_getTableNum( ingtable[k]); // 材料等级									// shan begin									if( petindex != -1){										if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ){ // 如果是守护兽的话											int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);											int familyLevel = getFmLv(ownerindex);											if (!CHAR_CHECKINDEX(ownerindex)){												print("主人索引错误!\n");												return -1;											}#ifdef _FMVER21									         											if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER){#else											if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != 1){#endif									         												print("\n 宠物主人索引错误");												return -1;											}											// 需符合上下限  											if( icache[i].ingval[j] <= ingtable[k]*ItemRandTableForItem[tablenum].rate &&												icache[i].ingval[j] >= ingtable[k]*(1/ItemRandTableForItem[tablenum].rate) &&												icache[i].ingval[j] <= ItemRandTableForItem[familyLevel+9].maxnum) {												icache[i].hitnum++;												break;											}										}else{ // 非守护兽的话											float toplimit = ingtable[k]*ItemRandTableForItem[tablenum].rate;											if( toplimit > 1000) toplimit = 1000;											// 需符合上下限  											if( icache[i].ingval[j] <= toplimit &&												icache[i].ingval[j] >= ingtable[k]*(1/ItemRandTableForItem[tablenum].rate)){												icache[i].hitnum++;												break;											}										}									}									// shan end								}else { // 食物合成的话									// shan begin									if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ){										int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);										int familyLevel = getFmLv(ownerindex);										if (!CHAR_CHECKINDEX(ownerindex)){											print("主人索引错误!\n");											return -1;										}#ifdef _FMVER21										if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER){#else										if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != 1){#endif											print("\n 宠物主人索引错误");											return -1;										}										if( ingtable[k] > ItemRandTableForItem[familyLevel+9].maxnum / 											ItemSearchTable[searchtable].searchmax ){											ingtable[k] = ItemRandTableForItem[familyLevel+9].maxnum /												ItemSearchTable[searchtable].searchmax;										}									}else{										if( ingtable[k] > ItemRandTableForItem[9].maxnum /											ItemSearchTable[searchtable].searchmax ){											ingtable[k] = ItemRandTableForItem[9].maxnum /												ItemSearchTable[searchtable].searchmax;										}									}								  									// shan end																		if( icache[i].ingval[j] <= ingtable[k]*ItemSearchTable[searchtable].searchmax &&										icache[i].ingval[j] >= ingtable[k]*ItemSearchTable[searchtable].searchmin){										icache[i].hitnum++;										break;									}								}							}

⌨️ 快捷键说明

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