?? 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 + -