📄 pc.c
字号:
sd->hprate+=val;
break;
case SP_MAXSPRATE:
if(sd->state.lr_flag != 2)
sd->sprate+=val;
break;
case SP_SPRATE:
if(sd->state.lr_flag != 2)
sd->dsprate+=val;
break;
case SP_ATTACKRANGE:
if(!sd->state.lr_flag)
sd->attackrange += val;
else if(sd->state.lr_flag == 1)
sd->attackrange_ += val;
else if(sd->state.lr_flag == 2)
sd->arrow_range += val;
break;
case SP_ADD_SPEED:
if(sd->state.lr_flag != 2)
sd->speed -= val;
break;
case SP_SPEED_RATE:
if(sd->state.lr_flag != 2) {
if(sd->speed_rate > 100-val)
sd->speed_rate = 100-val;
}
break;
case SP_SPEED_ADDRATE:
if(sd->state.lr_flag != 2)
sd->speed_add_rate = sd->speed_add_rate * (100-val)/100;
break;
case SP_ASPD:
if(sd->state.lr_flag != 2)
sd->aspd -= val*10;
break;
case SP_ASPD_RATE:
if(sd->state.lr_flag != 2) {
if(sd->aspd_rate > 100-val)
sd->aspd_rate = 100-val;
}
break;
case SP_ASPD_ADDRATE:
if(sd->state.lr_flag != 2)
sd->aspd_add_rate = sd->aspd_add_rate * (100-val)/100;
break;
case SP_HP_RECOV_RATE:
if(sd->state.lr_flag != 2)
sd->hprecov_rate += val;
break;
case SP_SP_RECOV_RATE:
if(sd->state.lr_flag != 2)
sd->sprecov_rate += val;
break;
case SP_CRITICAL_DEF:
if(sd->state.lr_flag != 2)
sd->critical_def += val;
break;
case SP_NEAR_ATK_DEF:
if(sd->state.lr_flag != 2)
sd->near_attack_def_rate += val;
break;
case SP_LONG_ATK_DEF:
if(sd->state.lr_flag != 2)
sd->long_attack_def_rate += val;
break;
case SP_DOUBLE_RATE:
if(sd->state.lr_flag == 0 && sd->double_rate < val)
sd->double_rate = val;
break;
case SP_DOUBLE_ADD_RATE:
if(sd->state.lr_flag == 0)
sd->double_add_rate += val;
break;
case SP_MATK_RATE:
if(sd->state.lr_flag != 2)
sd->matk_rate += val;
break;
case SP_IGNORE_DEF_ELE:
if(!sd->state.lr_flag)
sd->ignore_def_ele |= 1<<val;
else if(sd->state.lr_flag == 1)
sd->ignore_def_ele_ |= 1<<val;
break;
case SP_IGNORE_DEF_RACE:
if(!sd->state.lr_flag)
sd->ignore_def_race |= 1<<val;
else if(sd->state.lr_flag == 1)
sd->ignore_def_race_ |= 1<<val;
break;
case SP_ATK_RATE:
if(sd->state.lr_flag != 2)
sd->atk_rate += val;
break;
case SP_MAGIC_ATK_DEF:
if(sd->state.lr_flag != 2)
sd->magic_def_rate += val;
break;
case SP_MISC_ATK_DEF:
if(sd->state.lr_flag != 2)
sd->misc_def_rate += val;
break;
case SP_IGNORE_MDEF_ELE:
if(sd->state.lr_flag != 2)
sd->ignore_mdef_ele |= 1<<val;
break;
case SP_IGNORE_MDEF_RACE:
if(sd->state.lr_flag != 2)
sd->ignore_mdef_race |= 1<<val;
break;
case SP_PERFECT_HIT_RATE:
if(sd->state.lr_flag != 2 && sd->perfect_hit < val)
sd->perfect_hit = val;
break;
case SP_PERFECT_HIT_ADD_RATE:
if(sd->state.lr_flag != 2)
sd->perfect_hit_add += val;
break;
case SP_CRITICAL_RATE:
if(sd->state.lr_flag != 2)
sd->critical_rate+=val;
break;
case SP_GET_ZENY_NUM:
if(sd->state.lr_flag != 2 && sd->get_zeny_num < val)
sd->get_zeny_num = val;
break;
case SP_ADD_GET_ZENY_NUM:
if(sd->state.lr_flag != 2)
sd->get_zeny_add_num += val;
break;
case SP_DEF_RATIO_ATK_ELE:
if(!sd->state.lr_flag)
sd->def_ratio_atk_ele |= 1<<val;
else if(sd->state.lr_flag == 1)
sd->def_ratio_atk_ele_ |= 1<<val;
break;
case SP_DEF_RATIO_ATK_RACE:
if(!sd->state.lr_flag)
sd->def_ratio_atk_race |= 1<<val;
else if(sd->state.lr_flag == 1)
sd->def_ratio_atk_race_ |= 1<<val;
break;
case SP_HIT_RATE:
if(sd->state.lr_flag != 2)
sd->hit_rate += val;
break;
case SP_FLEE_RATE:
if(sd->state.lr_flag != 2)
sd->flee_rate += val;
break;
case SP_FLEE2_RATE:
if(sd->state.lr_flag != 2)
sd->flee2_rate += val;
break;
case SP_DEF_RATE:
if(sd->state.lr_flag != 2)
sd->def_rate += val;
break;
case SP_DEF2_RATE:
if(sd->state.lr_flag != 2)
sd->def2_rate += val;
break;
case SP_MDEF_RATE:
if(sd->state.lr_flag != 2)
sd->mdef_rate += val;
break;
case SP_MDEF2_RATE:
if(sd->state.lr_flag != 2)
sd->mdef2_rate += val;
break;
case SP_RESTART_FULL_RECORVER:
if(sd->state.lr_flag != 2)
sd->special_state.restart_full_recover = 1;
break;
case SP_NO_CASTCANCEL:
if(sd->state.lr_flag != 2)
sd->special_state.no_castcancel = 1;
break;
case SP_NO_CASTCANCEL2:
if(sd->state.lr_flag != 2)
sd->special_state.no_castcancel2 = 1;
break;
case SP_NO_SIZEFIX:
if(sd->state.lr_flag != 2)
sd->special_state.no_sizefix = 1;
break;
case SP_NO_MAGIC_DAMAGE:
if(sd->state.lr_flag != 2)
sd->special_state.no_magic_damage = 1;
break;
case SP_NO_WEAPON_DAMAGE:
if(sd->state.lr_flag != 2)
sd->special_state.no_weapon_damage = 1;
break;
case SP_NO_GEMSTONE:
if(sd->state.lr_flag != 2)
sd->special_state.no_gemstone = 1;
break;
case SP_INFINITE_ENDURE:
if(sd->state.lr_flag != 2)
sd->special_state.infinite_endure = 1;
break;
case SP_SPLASH_RANGE:
if(sd->state.lr_flag != 2 && sd->splash_range < val)
sd->splash_range = val;
break;
case SP_SPLASH_ADD_RANGE:
if(sd->state.lr_flag != 2)
sd->splash_add_range += val;
break;
case SP_SHORT_WEAPON_DAMAGE_RETURN:
if(sd->state.lr_flag != 2)
sd->short_weapon_damage_return += val;
break;
case SP_LONG_WEAPON_DAMAGE_RETURN:
if(sd->state.lr_flag != 2)
sd->long_weapon_damage_return += val;
break;
default:
if(battle_config.error_log)
printf("pc_bonus: unknown type %d %d !\n",type,val);
break;
}
return 0;
}
/*==========================================
* 憰 旛昳偵傛傞擻椡摍偺儃乕僫僗愝掕
*------------------------------------------
*/
int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
{
int i;
switch(type){
case SP_ADDELE:
if(!sd->state.lr_flag)
sd->addele[type2]+=val;
else if(sd->state.lr_flag == 1)
sd->addele_[type2]+=val;
else if(sd->state.lr_flag == 2)
sd->arrow_addele[type2]+=val;
break;
case SP_ADDRACE:
if(!sd->state.lr_flag)
sd->addrace[type2]+=val;
else if(sd->state.lr_flag == 1)
sd->addrace_[type2]+=val;
else if(sd->state.lr_flag == 2)
sd->arrow_addrace[type2]+=val;
break;
case SP_ADDSIZE:
if(!sd->state.lr_flag)
sd->addsize[type2]+=val;
else if(sd->state.lr_flag == 1)
sd->addsize_[type2]+=val;
else if(sd->state.lr_flag == 2)
sd->arrow_addsize[type2]+=val;
break;
case SP_SUBELE:
if(sd->state.lr_flag != 2)
sd->subele[type2]+=val;
break;
case SP_SUBRACE:
if(sd->state.lr_flag != 2)
sd->subrace[type2]+=val;
break;
case SP_ADDEFF:
if(sd->state.lr_flag != 2)
sd->addeff[type2]+=val;
else
sd->arrow_addeff[type2]+=val;
break;
case SP_RESEFF:
if(sd->state.lr_flag != 2)
sd->reseff[type2]+=val;
break;
case SP_MAGIC_ADDELE:
if(sd->state.lr_flag != 2)
sd->magic_addele[type2]+=val;
break;
case SP_MAGIC_ADDRACE:
if(sd->state.lr_flag != 2)
sd->magic_addrace[type2]+=val;
break;
case SP_MAGIC_SUBRACE:
if(sd->state.lr_flag != 2)
sd->magic_subrace[type2]+=val;
break;
case SP_ADD_DAMAGE_CLASS:
if(!sd->state.lr_flag) {
for(i=0;i<sd->add_damage_class_count;i++) {
if(sd->add_damage_classid[i] == type2) {
sd->add_damage_classrate[i] += val;
break;
}
}
if(i >= sd->add_damage_class_count && sd->add_damage_class_count < 10) {
sd->add_damage_classid[sd->add_damage_class_count] = type2;
sd->add_damage_classrate[sd->add_damage_class_count] += val;
sd->add_damage_class_count++;
}
}
else if(sd->state.lr_flag == 1) {
for(i=0;i<sd->add_damage_class_count_;i++) {
if(sd->add_damage_classid_[i] == type2) {
sd->add_damage_classrate_[i] += val;
break;
}
}
if(i >= sd->add_damage_class_count_ && sd->add_damage_class_count_ < 10) {
sd->add_damage_classid_[sd->add_damage_class_count_] = type2;
sd->add_damage_classrate_[sd->add_damage_class_count_] += val;
sd->add_damage_class_count_++;
}
}
break;
case SP_ADD_MAGIC_DAMAGE_CLASS:
if(sd->state.lr_flag != 2) {
for(i=0;i<sd->add_magic_damage_class_count;i++) {
if(sd->add_magic_damage_classid[i] == type2) {
sd->add_magic_damage_classrate[i] += val;
break;
}
}
if(i >= sd->add_magic_damage_class_count && sd->add_magic_damage_class_count < 10) {
sd->add_magic_damage_classid[sd->add_magic_damage_class_count] = type2;
sd->add_magic_damage_classrate[sd->add_magic_damage_class_count] += val;
sd->add_magic_damage_class_count++;
}
}
break;
case SP_ADD_DEF_CLASS:
if(sd->state.lr_flag != 2) {
for(i=0;i<sd->add_def_class_count;i++) {
if(sd->add_def_classid[i] == type2) {
sd->add_def_classrate[i] += val;
break;
}
}
if(i >= sd->add_def_class_count && sd->add_def_class_count < 10) {
sd->add_def_classid[sd->add_def_class_count] = type2;
sd->add_def_classrate[sd->add_def_class_count] += val;
sd->add_def_class_count++;
}
}
break;
case SP_ADD_MDEF_CLASS:
if(sd->state.lr_flag != 2) {
for(i=0;i<sd->add_mdef_class_count;i++) {
if(sd->add_mdef_classid[i] == type2) {
sd->add_mdef_classrate[i] += val;
break;
}
}
if(i >= sd->add_mdef_class_count && sd->add_mdef_class_count < 10) {
sd->add_mdef_classid[sd->add_mdef_class_count] = type2;
sd->add_mdef_classrate[sd->add_mdef_class_count] += val;
sd->add_mdef_class_count++;
}
}
break;
case SP_HP_DRAIN_RATE:
if(!sd->state.lr_flag) {
sd->hp_drain_rate += type2;
sd->hp_drain_per += val;
}
else if(sd->state.lr_flag == 1) {
sd->hp_drain_rate_ += type2;
sd->hp_drain_per_ += val;
}
break;
case SP_SP_DRAIN_RATE:
if(!sd->state.lr_flag) {
sd->sp_drain_rate += type2;
sd->sp_drain_per += val;
}
else if(sd->state.lr_flag == 1) {
sd->sp_drain_rate_ += type2;
sd->sp_drain_per_ += val;
}
break;
case SP_WEAPON_COMA_ELE:
if(sd->state.lr_flag != 2)
sd->weapon_coma_ele[type2] += val;
break;
case SP_WEAPON_COMA_RACE:
if(sd->state.lr_flag != 2)
sd->weapon_coma_race[type2] += val;
break;
default:
if(battle_config.error_log)
printf("pc_bonus2: unknown type %d %d %d!\n",type,type2,val);
break;
}
return 0;
}
int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
{
int i;
switch(type){
case SP_ADD_MONSTER_DROP_ITEM:
if(sd->state.lr_flag != 2) {
for(i=0;i<sd->monster_drop_item_count;i++) {
if(sd->monster_drop_itemid[i] == type2) {
sd->monster_drop_race[i] |= 1<<type3;
if(sd->monster_drop_itemrate[i] < val)
sd->monster_drop_itemrate[i] = val;
break;
}
}
if(i >= sd->monster_drop_item_count && sd->monster_drop_item_count < 10) {
sd->monster_drop_itemid[sd->monster_drop_item_count] = type2;
sd->monster_drop_race[sd->monster_drop_item_count] |= 1<<type3;
sd->monster_drop_itemrate[sd->monster_drop_item_count] = val;
sd->monster_drop_item_count++;
}
}
break;
case SP_AUTOSPELL:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -