|
@@ -16703,7 +16703,6 @@ struct s_skill_condition skill_get_requirement(struct map_session_data* sd, uint
|
|
|
struct status_data *status;
|
|
|
struct status_change *sc;
|
|
|
int i,hp_rate,sp_rate, sp_skill_rate_bonus = 100;
|
|
|
- bool level_dependent = false;
|
|
|
|
|
|
memset(&req,0,sizeof(req));
|
|
|
|
|
@@ -16810,26 +16809,16 @@ struct s_skill_condition skill_get_requirement(struct map_session_data* sd, uint
|
|
|
req.status = skill->require.status;
|
|
|
req.eqItem = skill->require.eqItem;
|
|
|
|
|
|
+ // Level dependence flag is determined based on the ItemCost Level label
|
|
|
+ bool level_dependent = skill->require.itemid_level_dependent;
|
|
|
+
|
|
|
switch( skill_id ) {
|
|
|
/* Skill level-dependent checks */
|
|
|
case NC_SHAPESHIFT: // NOTE: Magic_Gear_Fuel must be last in the ItemCost list depending on the skill's max level
|
|
|
case NC_REPAIR: // NOTE: Repair_Kit must be last in the ItemCost list depending on the skill's max level
|
|
|
req.itemid[1] = skill->require.itemid[skill->max];
|
|
|
req.amount[1] = skill->require.amount[skill->max];
|
|
|
- case KO_MAKIBISHI:
|
|
|
- case GN_FIRE_EXPANSION:
|
|
|
- case SO_SUMMON_AGNI:
|
|
|
- case SO_SUMMON_AQUA:
|
|
|
- case SO_SUMMON_VENTUS:
|
|
|
- case SO_SUMMON_TERA:
|
|
|
- case SO_WATER_INSIGNIA:
|
|
|
- case SO_FIRE_INSIGNIA:
|
|
|
- case SO_WIND_INSIGNIA:
|
|
|
- case SO_EARTH_INSIGNIA:
|
|
|
- case WZ_FIREPILLAR: // no gems required at level 1-5 [celest]
|
|
|
- req.itemid[0] = skill->require.itemid[min(skill_lv-1,MAX_SKILL_ITEM_REQUIRE-1)];
|
|
|
- req.amount[0] = skill->require.amount[min(skill_lv-1,MAX_SKILL_ITEM_REQUIRE-1)];
|
|
|
- level_dependent = true;
|
|
|
+ // Fall through
|
|
|
|
|
|
/* Normal skill requirements and gemstone checks */
|
|
|
default:
|
|
@@ -16905,12 +16894,8 @@ struct s_skill_condition skill_get_requirement(struct map_session_data* sd, uint
|
|
|
}
|
|
|
}
|
|
|
// Check requirement for Magic Gear Fuel
|
|
|
- if (req.itemid[i] == ITEMID_MAGIC_GEAR_FUEL) {
|
|
|
- if (sd->special_state.no_mado_fuel)
|
|
|
- {
|
|
|
- req.itemid[i] = req.amount[i] = 0;
|
|
|
- }
|
|
|
- }
|
|
|
+ if (req.itemid[i] == ITEMID_MAGIC_GEAR_FUEL && sd->special_state.no_mado_fuel)
|
|
|
+ req.itemid[i] = req.amount[i] = 0;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -22370,6 +22355,23 @@ uint64 SkillDatabase::parseBodyNode(const YAML::Node &node) {
|
|
|
if (!this->asInt32(it, "Amount", amount))
|
|
|
continue;
|
|
|
|
|
|
+ if (this->nodeExists(it, "Level")) {
|
|
|
+ uint16 cost_level;
|
|
|
+
|
|
|
+ if (!this->asUInt16(it, "Level", cost_level))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (cost_level < 1 || cost_level > skill->max) {
|
|
|
+ this->invalidWarning(it["Level"], "Requires ItemCost Level %d is not within %s's level range of 1~%d.\n", cost_level, skill->name, skill->max);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ count = cost_level - 1;
|
|
|
+
|
|
|
+ if (!skill->require.itemid_level_dependent)
|
|
|
+ skill->require.itemid_level_dependent = true;
|
|
|
+ }
|
|
|
+
|
|
|
skill->require.itemid[count] = item->nameid;
|
|
|
skill->require.amount[count] = amount;
|
|
|
count++;
|