|
@@ -4541,7 +4541,7 @@ bool pc_skill(struct map_session_data* sd, uint16 skill_id, int level, enum e_ad
|
|
clif_deleteskill(sd,skill_id);
|
|
clif_deleteskill(sd,skill_id);
|
|
} else
|
|
} else
|
|
clif_addskill(sd,skill_id);
|
|
clif_addskill(sd,skill_id);
|
|
- if (!skill_get_inf(skill_id)) //Only recalculate for passive skills.
|
|
|
|
|
|
+ if (!skill_get_inf(skill_id) || pc_checkskill_summoner(sd, SUMMONER_POWER_LAND) >= 20 || pc_checkskill_summoner(sd, SUMMONER_POWER_SEA) >= 20) //Only recalculate for passive skills.
|
|
status_calc_pc(sd, SCO_NONE);
|
|
status_calc_pc(sd, SCO_NONE);
|
|
break;
|
|
break;
|
|
|
|
|
|
@@ -4578,7 +4578,7 @@ bool pc_skill(struct map_session_data* sd, uint16 skill_id, int level, enum e_ad
|
|
clif_deleteskill(sd,skill_id);
|
|
clif_deleteskill(sd,skill_id);
|
|
} else
|
|
} else
|
|
clif_addskill(sd,skill_id);
|
|
clif_addskill(sd,skill_id);
|
|
- if (!skill_get_inf(skill_id)) //Only recalculate for passive skills.
|
|
|
|
|
|
+ if (!skill_get_inf(skill_id) || pc_checkskill_summoner(sd, SUMMONER_POWER_LAND) >= 20 || pc_checkskill_summoner(sd, SUMMONER_POWER_SEA) >= 20) //Only recalculate for passive skills.
|
|
status_calc_pc(sd, SCO_NONE);
|
|
status_calc_pc(sd, SCO_NONE);
|
|
break;
|
|
break;
|
|
|
|
|
|
@@ -6232,6 +6232,36 @@ uint8 pc_checkskill(struct map_session_data *sd, uint16 skill_id)
|
|
return (sd->status.skill[idx].id == skill_id) ? sd->status.skill[idx].lv : 0;
|
|
return (sd->status.skill[idx].id == skill_id) ? sd->status.skill[idx].lv : 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * Returns the amount of skill points invested in a Summoner's Power of Sea/Land/Life
|
|
|
|
+ * @param sd: Player data
|
|
|
|
+ * @param type: Summoner Power Type
|
|
|
|
+ * @return Skill points invested
|
|
|
|
+ */
|
|
|
|
+uint8 pc_checkskill_summoner(map_session_data *sd, e_summoner_power_type type) {
|
|
|
|
+ if (sd == nullptr)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ uint8 count = 0;
|
|
|
|
+
|
|
|
|
+ switch (type) {
|
|
|
|
+ case SUMMONER_POWER_SEA:
|
|
|
|
+ count = pc_checkskill(sd, SU_TUNABELLY) + pc_checkskill(sd, SU_TUNAPARTY) + pc_checkskill(sd, SU_BUNCHOFSHRIMP) + pc_checkskill(sd, SU_FRESHSHRIMP) +
|
|
|
|
+ pc_checkskill(sd, SU_GROOMING) + pc_checkskill(sd, SU_PURRING) + pc_checkskill(sd, SU_SHRIMPARTY);
|
|
|
|
+ break;
|
|
|
|
+ case SUMMONER_POWER_LAND:
|
|
|
|
+ count = pc_checkskill(sd, SU_SV_STEMSPEAR) + pc_checkskill(sd, SU_CN_POWDERING) + pc_checkskill(sd, SU_CN_METEOR) + pc_checkskill(sd, SU_SV_ROOTTWIST) +
|
|
|
|
+ pc_checkskill(sd, SU_CHATTERING) + pc_checkskill(sd, SU_MEOWMEOW) + pc_checkskill(sd, SU_NYANGGRASS);
|
|
|
|
+ break;
|
|
|
|
+ case SUMMONER_POWER_LIFE:
|
|
|
|
+ count = pc_checkskill(sd, SU_SCAROFTAROU) + pc_checkskill(sd, SU_PICKYPECK) + pc_checkskill(sd, SU_ARCLOUSEDASH) + pc_checkskill(sd, SU_LUNATICCARROTBEAT) +
|
|
|
|
+ pc_checkskill(sd, SU_HISS) + pc_checkskill(sd, SU_POWEROFFLOCK) + pc_checkskill(sd, SU_SVG_SPIRIT);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return count;
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Check if we still have the correct weapon to continue the skill (actually status)
|
|
* Check if we still have the correct weapon to continue the skill (actually status)
|
|
* If not ending it
|
|
* If not ending it
|
|
@@ -7618,7 +7648,7 @@ void pc_skillup(struct map_session_data *sd,uint16 skill_id)
|
|
int lv, range, upgradable;
|
|
int lv, range, upgradable;
|
|
sd->status.skill[idx].lv++;
|
|
sd->status.skill[idx].lv++;
|
|
sd->status.skill_point--;
|
|
sd->status.skill_point--;
|
|
- if( !skill_get_inf(skill_id) )
|
|
|
|
|
|
+ if( !skill_get_inf(skill_id) || pc_checkskill_summoner(sd, SUMMONER_POWER_LAND) >= 20 || pc_checkskill_summoner(sd, SUMMONER_POWER_SEA) >= 20 )
|
|
status_calc_pc(sd,SCO_NONE); // Only recalculate for passive skills.
|
|
status_calc_pc(sd,SCO_NONE); // Only recalculate for passive skills.
|
|
else if( sd->status.skill_point == 0 && pc_is_taekwon_ranker(sd) )
|
|
else if( sd->status.skill_point == 0 && pc_is_taekwon_ranker(sd) )
|
|
pc_calc_skilltree(sd); // Required to grant all TK Ranker skills.
|
|
pc_calc_skilltree(sd); // Required to grant all TK Ranker skills.
|