📄 profession_skill.c
字号:
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 + -