diff options
author | Kenpachi Developer <Kenpachi.Developer@gmx.de> | 2020-06-13 02:12:51 +0200 |
---|---|---|
committer | Kenpachi Developer <Kenpachi.Developer@gmx.de> | 2020-06-13 08:57:52 +0200 |
commit | 64863884011d9bdb59401685b6f09e9dfacc238e (patch) | |
tree | a0370c6842ec2f0cc8c7b2d8a8c1de85de901b55 /src | |
parent | 9a06857cc3ad2ad8f00b52ccc33f6c07342ad985 (diff) | |
download | hercules-64863884011d9bdb59401685b6f09e9dfacc238e.tar.gz hercules-64863884011d9bdb59401685b6f09e9dfacc238e.tar.bz2 hercules-64863884011d9bdb59401685b6f09e9dfacc238e.tar.xz hercules-64863884011d9bdb59401685b6f09e9dfacc238e.zip |
Add skill_get_item_index() function
Diffstat (limited to 'src')
-rw-r--r-- | src/map/skill.c | 36 | ||||
-rw-r--r-- | src/map/skill.h | 1 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index 24fbe7892..26f4cf0c0 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -370,6 +370,41 @@ static int skill_get_spiritball(int skill_id, int skill_lv) } /** + * Gets the index of the first required item for a skill at given level. + * + * @param skill_id The skill's ID. + * @param skill_lv The skill's level. + * @return The required item's index. Defaults to INDEX_NOT_FOUND (-1) in case of error or if no appropriate index was found. + * + **/ +static int skill_get_item_index(int skill_id, int skill_lv) +{ + if (skill_id == 0) + return INDEX_NOT_FOUND; + + Assert_retr(INDEX_NOT_FOUND, skill_lv > 0); + + int idx = skill->get_index(skill_id); + + Assert_retr(INDEX_NOT_FOUND, idx != 0); + + int item_index = INDEX_NOT_FOUND; + int level_index = skill_get_lvl_idx(skill_lv); + + for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) { + if (skill->dbs->db[idx].req_items.item[i].id == 0) + continue; + + if (skill->dbs->db[idx].req_items.item[i].amount[level_index] != -1) { + item_index = i; + break; + } + } + + return item_index; +} + +/** * Gets a skill's required item's ID by the skill's ID and the item's index. * * @param skill_id The skill's ID. @@ -23937,6 +23972,7 @@ void skill_defaults(void) skill->get_sp_rate = skill_get_sp_rate; skill->get_state = skill_get_state; skill->get_spiritball = skill_get_spiritball; + skill->get_item_index = skill_get_item_index; skill->get_itemid = skill_get_itemid; skill->get_itemqty = skill_get_itemqty; skill->get_item_any_flag = skill_get_item_any_flag; diff --git a/src/map/skill.h b/src/map/skill.h index b505412b6..fdeaefe01 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -2007,6 +2007,7 @@ struct skill_interface { int (*get_sp_rate) (int skill_id, int skill_lv); int (*get_state) (int skill_id, int skill_lv); int (*get_spiritball) (int skill_id, int skill_lv); + int (*get_item_index) (int skill_id, int skill_lv); int (*get_itemid) (int skill_id, int item_idx); int (*get_itemqty) (int skill_id, int item_idx, int skill_lv); bool (*get_item_any_flag) (int skill_id, int skill_lv); |