📄 skill.c
字号:
if( SKILL_NUM <= skillid && skillid > 0 )return FALSE;
return TRUE;
}
BOOL SKILL_makeSkillData( Skill* sk ,int skid, int lev )
{
sk->data[SKILL_LEVEL] = lev;
sk->data[SKILL_IDENTITY] = skid;
return TRUE;
}
int SKILL_levelup( Skill* sk )
{
int id = sk->data[SKILL_IDENTITY];
if( !SKILL_CHECKID(id) )return -1;
sk->data[SKILL_LEVEL] ++;
sk->data[SKILL_LEVEL] = min( sk->data[SKILL_LEVEL],
SKILL_tbl[id].maxlevel );
return TRUE;
}
int SKILL_getLevelFromSkillID( int charaindex, SKILL_ID id )
{
int i;
if( !CHAR_CHECKINDEX(charaindex) )return -1;
for( i=0 ; i<CHAR_SKILLMAXHAVE ; i++ ){
CHAR_HaveSkill* sk;
sk = CHAR_getCharHaveSkill(charaindex,i);
if( sk && sk->use && sk->skill.data[SKILL_IDENTITY] == id )
return sk->skill.data[SKILL_LEVEL];
}
return -1;
}
BOOL SKILL_getUpableSkillID( int charaindex,char* buf, int buflen )
{
int i;
if( !CHAR_CHECKINDEX(charaindex)) return FALSE;
if( buflen <= 0 )return FALSE;
buf[0] = '\0';
for( i=0 ; i<CHAR_SKILLMAXHAVE ; i++ ){
CHAR_HaveSkill* chsk;
chsk = CHAR_getCharHaveSkill(charaindex,i);
if( chsk && chsk->use
&& SKILL_CHECKID(chsk->skill.data[SKILL_IDENTITY])
&& chsk->skill.data[SKILL_LEVEL]
< SKILL_tbl[chsk->skill.data[SKILL_IDENTITY]].maxlevel ){
char tmpbuf[512];
snprintf( tmpbuf,sizeof(tmpbuf),"%d|",
chsk->skill.data[SKILL_IDENTITY] );
strcatsafe( buf, buflen,tmpbuf );
}
}
dchop(buf,"|");
return TRUE;
}
void SKILL_skillEffect( int charaindex )
{
int i;
if( !CHAR_CHECKINDEX(charaindex) )return;
if( CHAR_getInt(charaindex,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER)
return;
for( i=0 ; i<CHAR_SKILLMAXHAVE ; i ++ ){
typedef void (*SKILLEFFECTFUNC)(int,Skill*);
SKILLEFFECTFUNC skfunc;
CHAR_HaveSkill* cskill;
Skill* skill;
int id;
cskill = CHAR_getCharHaveSkill(charaindex,i);
if( cskill == NULL || cskill->use == FALSE )continue;
skill = &cskill->skill;
id = skill->data[SKILL_IDENTITY];
if( !SKILL_CHECKID(id) )continue;
skfunc = (SKILLEFFECTFUNC)SKILL_tbl[id].effectfunc;
if( skfunc )skfunc(charaindex,skill);
}
}
#ifdef _CHAR_PROFESSION // WON ADD 人物职业
// 取使用魔法耗费MP
int PROFESSION_MAGIC_COST_MP( int charaindex, int skill_num )
{
int skill_level=0, dec_mp=0;
int Pskillid, skillid;
char *skill_name;
CHAR_HaveSkill* hskill;
// 人物技能
skillid = CHAR_getCharSkill( charaindex, skill_num);
Pskillid = PROFESSION_SKILL_getskillArray( skillid);
if( Pskillid == -1 ) return FALSE;
// 技能名称
skill_name = PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_FUNCNAME);
// 技能等级
hskill = CHAR_getCharHaveSkill( charaindex, skill_num );
skill_level = SKILL_getInt( &hskill->skill, SKILL_LEVEL);
skill_level = PROFESSION_CHANGE_SKILL_LEVEL_M( skill_level );
if( (strcmp( skill_name, "PROFESSION_VOLCANO_SPRINGS" )) == 0 ){ // 火山泉
if( skill_level >= 10 ) dec_mp = 35;
else if( skill_level >= 7 ) dec_mp = 30;
else if( skill_level >= 5 ) dec_mp = 20;
else if( skill_level >= 3 ) dec_mp = 15;
else dec_mp = 10;
}else
if( (strcmp( skill_name, "PROFESSION_FIRE_BALL" )) == 0 ){ // 火星球
if( skill_level >= 9 ) dec_mp = 50;
else if( skill_level >= 7 ) dec_mp = 45;
else if( skill_level >= 5 ) dec_mp = 40;
else if( skill_level >= 3 ) dec_mp = 35;
else dec_mp = 30;
}else
if( (strcmp( skill_name, "PROFESSION_SUMMON_THUNDER" )) == 0 ){ // 召雷术
if( skill_level >= 8 ) dec_mp = 30;
else if( skill_level >= 5 ) dec_mp = 25;
else if( skill_level >= 3) dec_mp = 20;
else dec_mp = 10;
}else
if( (strcmp( skill_name, "PROFESSION_CURRENT" )) == 0 ){ // 电流术
#ifdef _PROFESSION_ADDSKILL
if( skill_level >= 10 ) dec_mp = 100;
else if( skill_level > 9 ) dec_mp = 90;
else if( skill_level > 8 ) dec_mp = 80;
else if( skill_level > 7 ) dec_mp = 70;
else if( skill_level > 6 ) dec_mp = 60;
else if( skill_level > 4 ) dec_mp = 50;
else if( skill_level > 2 ) dec_mp = 40;
else dec_mp = 30;
#else
if( skill_level >= 9 ) dec_mp = 80;
else if( skill_level >= 7 ) dec_mp = 60;
else if( skill_level >= 5 ) dec_mp = 50;
else if( skill_level >= 3 ) dec_mp = 40;
else dec_mp = 30;
#endif
}else
if( (strcmp( skill_name, "PROFESSION_STORM" )) == 0 ){ // 暴风雨
#ifdef _PROFESSION_ADDSKILL
if( skill_level > 8 ) dec_mp = 50;
else if( skill_level > 6 ) dec_mp = 45;
else if( skill_level > 4 ) dec_mp = 40;
else if( skill_level > 2 ) dec_mp = 35;
else dec_mp = 30;
#else
if( skill_level >= 10 ) dec_mp = 80;
else if( skill_level >= 6 ) dec_mp = 70;
else if( skill_level >= 5 ) dec_mp = 60;
else dec_mp = 50;
#endif
}else
if( (strcmp( skill_name, "PROFESSION_ICE_ARROW" )) == 0 ){ // 冰箭术
if( skill_level >= 8) dec_mp = 20;
else if( skill_level >= 4 ) dec_mp = 15;
else dec_mp = 10;
}else
if( (strcmp( skill_name, "PROFESSION_ICE_CRACK" )) == 0 ){ // 冰爆术
#ifdef _PROFESSION_ADDSKILL
if( skill_level >= 10 ) dec_mp = 80;
else if( skill_level > 8 ) dec_mp = 70;
else if( skill_level > 6 ) dec_mp = 60;
else if( skill_level > 4 ) dec_mp = 50;
else if( skill_level > 2 ) dec_mp = 40;
else dec_mp = 30;
#else
if( skill_level >= 9 ) dec_mp = 70;
else if( skill_level >= 7 ) dec_mp = 60;
else if( skill_level >= 5 ) dec_mp = 50;
else if( skill_level >= 3 ) dec_mp = 40;
else dec_mp = 30;
#endif
}else
if( (strcmp( skill_name, "PROFESSION_DOOM" )) == 0 ){ // 世界末日
if( skill_level > 8 ) dec_mp = 150;
else if( skill_level > 4 ) dec_mp = 100;
else dec_mp = 50;
}else
if( (strcmp( skill_name, "PROFESSION_FIRE_SPEAR" )) == 0 ){ // 火龙枪
if( skill_level > 8 ) dec_mp = 80;
else if( skill_level > 6 ) dec_mp = 70;
else if( skill_level > 4 ) dec_mp = 60;
else if( skill_level > 2 ) dec_mp = 40;
else dec_mp = 30;
}else
if( (strcmp( skill_name, "PROFESSION_BLOOD_WORMS" )) == 0 ){ // 嗜血蛊
if( skill_level >= 10 ) dec_mp = 15;
else if( skill_level >= 5 ) dec_mp = 10;
else dec_mp = 5;
}else
if( (strcmp( skill_name, "PROFESSION_SIGN" )) == 0 ){ // 一针见血
if( skill_level >= 8 ) dec_mp = 10;
else dec_mp = 5;
}else
if( (strcmp( skill_name, "PROFESSION_ENCLOSE" )) == 0 ){ // 附身术
if( skill_level >= 10 ) dec_mp = 80;
else if( skill_level >= 8 ) dec_mp = 70;
else if( skill_level >= 5) dec_mp = 60;
else dec_mp = 50;
}else
if( (strcmp( skill_name, "PROFESSION_ICE_MIRROR" )) == 0 ){ // 冰镜术
if( skill_level >= 9 ) dec_mp = 40;
else if( skill_level >= 7 ) dec_mp = 35;
else if( skill_level >= 5 ) dec_mp = 30;
else if( skill_level >= 3 ) dec_mp = 25;
else dec_mp = 20;
}else
if( (strcmp( skill_name, "PROFESSION_FIRE_ENCLOSE" )) == 0 ){ // 火附体
if( skill_level >= 10 ) dec_mp = 50;
else if( skill_level >= 7 ) dec_mp = 40;
else if( skill_level >= 4 ) dec_mp = 30;
else dec_mp = 20;
}else
if( (strcmp( skill_name, "PROFESSION_ICE_ENCLOSE" )) == 0 ){ // 冰附体
if( skill_level >= 10 ) dec_mp = 50;
else if( skill_level >= 7 ) dec_mp = 40;
else if( skill_level >= 4 ) dec_mp = 30;
else dec_mp = 20;
}else
if( (strcmp( skill_name, "PROFESSION_THUNDER_ENCLOSE" )) == 0 ){ // 雷附体
if( skill_level >= 10 ) dec_mp = 50;
else if( skill_level >= 7 ) dec_mp = 40;
else if( skill_level >= 4 ) dec_mp = 30;
else dec_mp = 20;
}else
if( (strcmp( skill_name, "PROFESSION_TRANSPOSE" )) == 0 ){ // 移形换位
if( skill_level >= 10 ) dec_mp = 50;
else if( skill_level >= 9 ) dec_mp = 40;
else if( skill_level >= 7 ) dec_mp = 30;
else if( skill_level >= 4 ) dec_mp = 20;
else dec_mp = 10;
}else
#ifdef _PROFESSION_ADDSKILL
if( (strcmp( skill_name, "PROFESSION_RESIST_F_I_T" )) == 0 ){ // 自然威能
if( skill_level >= 10 ) dec_mp = 20;
else if( skill_level >= 9 ) dec_mp = 15;
else if( skill_level >= 6 ) dec_mp = 10;
else dec_mp = 5;
}else
if( (strcmp( skill_name, "PROFESSION_CALL_NATURE" )) == 0 ){ // 号召自然
/*skill_level = SKILL_getInt( &hskill->skill, SKILL_LEVEL);
if( skill_level >= 100 ) dec_mp = 50;
else if( skill_level > 95 ) dec_mp = 50;
else if( skill_level > 90 ) dec_mp = 50;
else if( skill_level > 85 ) dec_mp = 50;
else if( skill_level > 80 ) dec_mp = 50;
else if( skill_level > 60 ) dec_mp = 50;
else if( skill_level > 40 ) dec_mp = 50;
else if( skill_level > 20 ) dec_mp = 50;
else dec_mp = 50;*/
dec_mp = 50;
}else
if( (strcmp( skill_name, "PROFESSION_BOUNDARY" )) == 0 ){ // 四属性结界
char *pszP=NULL;
if( skill_level > 9 ) dec_mp = 20;
else if( skill_level > 6 ) dec_mp = 15;
else dec_mp = 10;
//破除结界耗损mp与其他结界不同
if( (pszP = strstr( PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_OPTION), "破结界" ) ) != NULL ){// 技能的参数
if( skill_level >= 9 ) dec_mp = 20;
else if( skill_level > 4 ) dec_mp = 15;
else if( skill_level > 2 ) dec_mp = 10;
else dec_mp = 5;
}
}else
#endif
{
return -1;
}
return dec_mp;
}
INLINE int PROFESSION_CHANGE_SKILL_LEVEL_M( int skill_level )
{
if( skill_level > 90 )skill_level = 10;
else if( skill_level > 80 ) skill_level = 9;
else if( skill_level > 70 ) skill_level = 8;
else if( skill_level > 60 ) skill_level = 7;
else if( skill_level > 50 ) skill_level = 6;
else if( skill_level > 40 ) skill_level = 5;
else if( skill_level > 30 ) skill_level = 4;
else if( skill_level > 20 ) skill_level = 3;
else if( skill_level > 10 ) skill_level = 2;
else skill_level = 1;
return skill_level;
}
INLINE int PROFESSION_CHANGE_SKILL_LEVEL_A( int skill_level )
{
if( skill_level >= 100 ) skill_level = 10;
else if( skill_level > 90 ) skill_level = 9;
else if( skill_level > 80 ) skill_level = 8;
else if( skill_level > 70 ) skill_level = 7;
else if( skill_level > 60 ) skill_level = 6;
else if( skill_level > 50 ) skill_level = 5;
else if( skill_level > 40 ) skill_level = 4;
else if( skill_level > 30 ) skill_level = 3;
else if( skill_level > 20 ) skill_level = 2;
else if( skill_level > 10 ) skill_level = 1;
else skill_level = 0;
return skill_level;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -