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

📄 profession_skill.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 3 页
字号:
	CHAR_HaveSkill* hskill;	for( i=0; i<CHAR_SKILLMAXHAVE; i++ ){					// 技能ID		skillid = CHAR_getCharSkill( charaindex, i);		Pskillid = PROFESSION_SKILL_getskillArray( skillid);				if( Pskillid < 0 ) continue;		// 技能名称		skill_name = PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_FUNCNAME);		if( skill_name == NULL ) continue;					if( (strcmp( skill_name , name )) == 0 ){			skill = i;		break;		}	}		if( (skill < 0) || (skill > CHAR_SKILLMAXHAVE) ) return;	skillid = CHAR_getCharSkill( charaindex, skill);	Pskillid = PROFESSION_SKILL_getskillArray( skillid);	if( Pskillid == -1 )	return;	// 人物技能等级	hskill = CHAR_getCharHaveSkill( charaindex, skill );		// 一般技能升级	PROFESSION_NORMAL_SKILL_LEVLE_UP( &hskill->skill, Pskillid, charaindex );	return;}// 二刀流技能升级void PROFESSION_SKILL_DUAL_WEAPON_LVEVEL_UP( int charaindex, char *name ){	int skill=-1, arm = 0, shield = 0;	int skillid=0, Pskillid=0, i;	char *skill_name;	CHAR_HaveSkill* hskill;	// 检查左右手装备	for( i = 0 ; i < CHAR_EQUIPPLACENUM ; i ++ ){		int id = CHAR_getItemIndex(charaindex,i);		if( ITEM_CHECKINDEX(id) ){			if( i == CHAR_ARM ) arm = 1;			else if( i == CHAR_EQSHIELD ) shield = 1;					}	}	if( arm != 1 || shield != 1 )	return;		for( i=0; i<CHAR_SKILLMAXHAVE; i++ ){				// 技能ID		skillid = CHAR_getCharSkill( charaindex, i);		Pskillid = PROFESSION_SKILL_getskillArray( skillid);				if( Pskillid < 0 ) continue;		// 技能名称		skill_name = PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_FUNCNAME);		if( skill_name == NULL ) continue;					if( (strcmp( skill_name , name )) == 0 ){			skill = i;		break;		}	}	if( (skill < 0) || (skill > CHAR_SKILLMAXHAVE) ) return;	skillid = CHAR_getCharSkill( charaindex, skill);	Pskillid = PROFESSION_SKILL_getskillArray( skillid);	if( Pskillid == -1 )	return;	// 人物技能等级	hskill = CHAR_getCharHaveSkill( charaindex, skill );		// 一般技能升级	PROFESSION_NORMAL_SKILL_LEVLE_UP( &hskill->skill, Pskillid, charaindex );	return;}// 武器专精技能升级void PROFESSION_SKILL_WEAPON_FOCUS_LVEVEL_UP( int charaindex, char *name ){	int skill = -1;	int skillid=0, Pskillid = 0, i;	char *skill_name, *pszOption, *pszP, diff[20];	int WeaponType = -1;	CHAR_HaveSkill* hskill;	memset( diff, -1, sizeof(diff) );	// 装备武器	WeaponType = BATTLE_GetWepon( charaindex );	switch( WeaponType ){		case ITEM_AXE:					sprintf( diff, "斧" ); break;		case ITEM_CLUB:					sprintf( diff, "棍" ); break;		case ITEM_SPEAR:				sprintf( diff, "枪" ); break;		case ITEM_BOW:					sprintf( diff, "弓" ); break;		case ITEM_BOOMERANG:	// 回旋标				sprintf( diff, "镖" ); break;		case ITEM_BOUNDTHROW:	// 投掷斧头			sprintf( diff, "投" ); break;		case ITEM_BREAKTHROW:	// 投掷石			sprintf( diff, "石" ); break;		default: 			sprintf( diff, "无" ); break;	}	for( i=0; i<CHAR_SKILLMAXHAVE; i++ ){		// 技能ID		skillid = CHAR_getCharSkill( charaindex, i);		Pskillid = PROFESSION_SKILL_getskillArray( skillid);				if( Pskillid < 0 ) continue;		// 技能名称		skill_name = PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_FUNCNAME);		if( skill_name == NULL ) continue;			// 技能参数		pszOption = PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_OPTION);		if( pszOption == NULL ) continue;				if( (strcmp( skill_name , name )) == 0 ){			if( (pszP=strstr( pszOption, diff ))!=NULL ){				skill = i;		break;			}		}	}		if( (skill < 0) || (skill > CHAR_SKILLMAXHAVE) ) return;	skillid = CHAR_getCharSkill( charaindex, skill);	Pskillid = PROFESSION_SKILL_getskillArray( skillid);	if( Pskillid == -1 )	return;	// 人物技能等级	hskill = CHAR_getCharHaveSkill( charaindex, skill );		// 一般技能升级	PROFESSION_NORMAL_SKILL_LEVLE_UP( &hskill->skill, Pskillid, charaindex );	return;}// 耗损 MP int PROFESSION_SKILL_DEC_COST_MP( int charaindex, int skill, int Pskillid, int skill_level ){			if(skill_level > 0){		int	dec_mp;		int old_mp = CHAR_getInt( charaindex, CHAR_MP );		int mp=0;					// 取出耗损 MP 		if( (dec_mp = PROFESSION_MAGIC_COST_MP( charaindex, skill )) == -1 )			dec_mp = PROFESSION_SKILL_getInt( Pskillid, PROFESSION_SKILL_COST_MP );		// 检查 MP量					if( old_mp < dec_mp ) return -1;				// 嗜血成性 		if( Pskillid != 11 #ifdef _PROFESSION_ADDSKILL		//	&& Pskillid != 2 //针针相对不扣 MP#endif			)			if( dec_mp <= 0 ) return -1;				// 扣掉人物 MP		mp = old_mp - dec_mp;		if( mp < 0 ) mp = 0;		CHAR_setInt( charaindex , CHAR_MP , mp );		CHAR_send_P_StatusString( charaindex , CHAR_P_STRING_MP);			return 1;	}		return -1;}// 一般技能升级void PROFESSION_NORMAL_SKILL_LEVLE_UP(Skill *skill, int Pskillid, int charaindex ){	int skill_level = 0, up_fix_value = 0;	int rand_num = RAND( 0, 10000 ), rand_num2 = 0;		// 技能等级到达上限不升级	skill_level = SKILL_getRealInt( skill, SKILL_LEVEL);	if( skill_level >= PROFESSION_SKILL_MAX_LEVEL * 100 ) return;	// 升级修正数值	up_fix_value = PROFESSION_SKILL_getInt( Pskillid, PROFESSION_SKILL_FIX_VALUE) * 100;	rand_num2 = RAND( 0, up_fix_value);	// 升级检定#ifdef _75_TEST#else	if( rand_num > skill_level + rand_num2){#endif			// 增加熟练度		skill_level += PROFESSION_SKILL_ADD_POINT;	#ifdef _75_TEST		if( skill_level > 10000 )			skill_level = 10000;#endif		SKILL_setInt( skill, SKILL_LEVEL, skill_level );			if( ( skill_level % 100 ) == 0 ){			char msg[256];			sprintf( msg, "%s技能熟练度上升为%d", 	PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_NAME), skill_level/100 );			CHAR_talkToCli( charaindex, -1, msg, CHAR_COLORYELLOW);			CHAR_sendStatusString( charaindex , "S");									// 职业经验值增加					PROFESSION_LEVEL_CHECK_UP( charaindex );		}#ifdef _75_TEST#else	}#endif	return;}void PROFESSION_LEVEL_CHECK_UP( int charaindex ){	int skill_level_add = 0, skill_level_sum = 0, i = 0;	int old_level = CHAR_getInt( charaindex, PROFESSION_LEVEL );	int next_level_need_point = 9999999;	CHAR_HaveSkill* hskill;	// 下一级职业升级点数	next_level_need_point = old_level * 70 * 100;			for( i=0; i<CHAR_SKILLMAXHAVE; i++ ){		int skillID = -1;		// 技能等级		hskill = CHAR_getCharHaveSkill( charaindex, i );		skillID = SKILL_getInt( &hskill->skill, SKILL_IDENTITY);		if( skillID <= 0 ) continue;		// 共通技能熟练度 50		if( (skillID == 63) || (skillID == 64) || (skillID == 65) ){			skill_level_add = 50*100;			}else{			skill_level_add = SKILL_getRealInt( &hskill->skill, SKILL_LEVEL);		}				skill_level_sum += skill_level_add;		}		print("\n技能熟练度上升 ==> 当前熟练度点数(%d) 下一级熟练度升级点数(%d)", skill_level_sum, next_level_need_point );	// 技能熟练度达到下一级职业升级点数时,职业等级增加	if(  skill_level_sum >= next_level_need_point ){		int old_skill_point = CHAR_getInt( charaindex, PROFESSION_SKILL_POINT );		int next_skill_point = old_skill_point+1;		char msg[64];		print("\n职业等级上升 ==> 当前职业等级点数(%d) 下一级职业等级升级点数(%d)", old_skill_point, next_skill_point );				CHAR_setInt( charaindex, PROFESSION_LEVEL, old_level + 1 );		CHAR_setInt( charaindex, PROFESSION_SKILL_POINT, next_skill_point );		CHAR_sendStatusString( charaindex , "P");				CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX ));		sprintf( msg, "职业等级上升为%d级,技能点数上升1点", old_level + 1 );		CHAR_talkToCli( charaindex, -1, msg, CHAR_COLORYELLOW);	}}// 增加技能int PROFESSION_SKILL_ADDSK( int charaindex, int skill, int level ){	int i;	CHAR_HaveSkill *pSkil;	if( level > 100 )		level = 100;	else if( level < 1 )	level = 1;	for( i = 0; i < CHAR_SKILLMAXHAVE; i ++ ){		int skill_id = -1;		pSkil = CHAR_getCharHaveSkill( charaindex, i );		skill_id = SKILL_getInt( &pSkil->skill, SKILL_IDENTITY);		if( skill == skill_id && skill_id != -1 ){			CHAR_talkToCli(charaindex,-1, "你已经学习过此技能", CHAR_COLORYELLOW);			return -1;		}		if( pSkil == NULL )continue;		if( pSkil->use != 0 )continue;		break;	}	if( i >= CHAR_SKILLMAXHAVE ){		CHAR_talkToCli(charaindex,-1, "技能数量已达上限", CHAR_COLORYELLOW);		return -1;	}else{		level *= 100;		SKILL_makeSkillData( &pSkil->skill, skill, level);		pSkil->use = TRUE;	}	CHAR_sendStatusString( charaindex , "S");		return 1;}void profession_common_fun( int charaindex, int toNo, int skill_level, int array, int com1 ){	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, com1 );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, skill_level);	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);#ifdef _PROFESSION_ADDSKILL	if( com1 == BATTLE_COM_S_DOOM 		/*&& CHAR_getWorkInt( charaindex, CHAR_DOOMTIME) == 0*/ ){		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE );		CHAR_setWorkInt( charaindex, CHAR_WORK_com1, com1 );		CHAR_setWorkInt( charaindex, CHAR_WORK_toNo, toNo );		CHAR_setWorkInt( charaindex, CHAR_WORK_mode, BATTLE_CHARMODE_C_OK );		CHAR_setWorkInt( charaindex, CHAR_WORK_skill_level, skill_level );		CHAR_setWorkInt( charaindex, CHAR_WORK_array, array );		CHAR_setWorkInt( charaindex, CHAR_DOOMTIME, 3);	}	else if( com1 == BATTLE_COM_S_FIRE_SPEAR 			/*&& CHAR_getWorkInt( charaindex, CHAR_DOOMTIME) == 0*/ ){		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE );		CHAR_setWorkInt( charaindex, CHAR_WORK_com1, com1 );		CHAR_setWorkInt( charaindex, CHAR_WORK_toNo, toNo );		CHAR_setWorkInt( charaindex, CHAR_WORK_mode, BATTLE_CHARMODE_C_OK );		CHAR_setWorkInt( charaindex, CHAR_WORK_skill_level, skill_level );		CHAR_setWorkInt( charaindex, CHAR_WORK_array, array );		CHAR_setWorkInt( charaindex, CHAR_DOOMTIME, 2);	}#endif}/*----------------------------------------------------------------------*/// 以下为职业技能// 巫师技能-火山泉int PROFESSION_volcano_springs( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_VOLCANO_SPRINGS );			return TRUE;}// 巫师技能-火星球int PROFESSION_fire_ball( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_FIRE_BALL );			return TRUE;}// 巫师技能-火龙枪int PROFESSION_fire_spear( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_FIRE_SPEAR );			return TRUE;}// 巫师技能-召雷术int PROFESSION_summon_thunder( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_SUMMON_THUNDER );			return TRUE;}// 巫师技能-电流术int PROFESSION_current( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_CURRENT );			return TRUE;}// 巫师技能-暴风雨int PROFESSION_storm( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_STORM );			return TRUE;}// 巫师技能-冰箭术int PROFESSION_ice_arrow( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_ICE_ARROW );			return TRUE;}// 巫师技能-冰爆术int PROFESSION_ice_crack( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_ICE_CRACK );			return TRUE;}// 巫师技能-冰镜术int PROFESSION_ice_mirror( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_ICE_MIRROR );			return TRUE;}// 巫师技能-世界末日int PROFESSION_doom( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_DOOM );			return TRUE;}// 巫师技能-嗜血成性int PROFESSION_blood( int charaindex, int toNo, int array, char *data, int skill_level ){	profession_common_fun( charaindex, toNo, skill_level, array, BATTLE_COM_S_BLOOD );			return TRUE;

⌨️ 快捷键说明

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