From 18b642c1740433a4002f28bf54dbc2849b7fea8a Mon Sep 17 00:00:00 2001 From: Aleos Date: Tue, 19 May 2020 15:32:57 -0400 Subject: [PATCH] Skill Database cleanups (#4902) * When reloading the skill_db clear out Abra, Magic Mushroom, and Reading Spell Book databases as well. * Fixes NC_SHAPESHIFT and NC_REPAIR checking an invalid ItemCost slot based on the old implementation. * Updated a lot of references to the old skill databases. --- conf/battle/skill.conf | 8 ++++---- doc/atcommands.txt | 2 +- doc/item_bonus.txt | 2 +- doc/mapflags.txt | 2 +- doc/script_commands.txt | 10 +++++----- src/map/skill.cpp | 25 ++++++++++++------------- 6 files changed, 24 insertions(+), 25 deletions(-) diff --git a/conf/battle/skill.conf b/conf/battle/skill.conf index d5b9e3b0fd4..d124fba658b 100644 --- a/conf/battle/skill.conf +++ b/conf/battle/skill.conf @@ -85,7 +85,7 @@ clear_skills_on_warp: 15 //Setting this to YES will override the target mode of ground-based skills with the flag 0x01 to "No Enemies" //The two skills affected by default are Pneuma and Safety Wall (if set to yes, those two skills will not protect everyone, but only allies) -//See db/skill_unit_db.txt for more info. +//See db/(pre-)re/skill_db.yml for more info. defunit_not_enemy: no // Should skills always do at least 'hits' damage when they don't miss/are blocked? @@ -107,11 +107,11 @@ auto_counter_type: 15 // Can ground skills be placed on top of each other? (Note 3) // By default, skills with UF_NOREITERATION set cannot be stacked on top of -// other skills, this setting will override that. (skill_unit_db) +// other skills, this setting will override that. skill_reiteration: 0 // Can ground skills NOT be placed underneath/near players/monsters? (Note 3) -// If set, only skills with UF_NOFOOTSET set will be affected (skill_unit_db) +// If set, only skills with UF_NOFOOTSET set will be affected. skill_nofootset: 1 // Should traps (hunter traps + quagmire) change their target to "all" inside gvg/pvp grounds? (Note 3) @@ -343,7 +343,7 @@ stormgust_knockback: yes // For RENEWAL_CAST (Note 2) // By default skill that has '0' value for Fixed Casting Time will use 20% of cast time // as Fixed Casting Time, and the rest (80%) as Variable Casting Time. -// Put it 0 to disable default Fixed Casting Time (just like -1 is the skill_cast_db.txt). +// Put it 0 to disable default Fixed Casting Time (just like -1 in the skill_db.yml). default_fixed_castrate: 20 // On official servers, skills that hit all targets on a path (e.g. Focused Arrow Strike and First Wind) first diff --git a/doc/atcommands.txt b/doc/atcommands.txt index abf2ba02668..54c2bcae13f 100644 --- a/doc/atcommands.txt +++ b/doc/atcommands.txt @@ -1367,7 +1367,7 @@ Affected files: -- pcdb: statpoint.txt, job_exp.txt, skill_tree.txt, attr_fix.txt, job_db1.txt, job_db2.txt, job_basehpsp_db.txt, job_maxhpsp_db.txt, job_param_db.txt, level_penalty.txt -- questdb: quest_db.txt -- script: /npc/*.txt, /npc/*.conf --- skilldb: skill_db.txt, const.txt, skill_require_db.txt, skill_cast_db.txt, skill_castnodex_db.txt, skill_nocast_db.txt, skill_copyable_db.txt, skill_improvise_db.txt, skill_changematerial_db.txt, skill_nonearnpc_db.txt, skill_damage_db.txt, skill_unit_db.txt, abra_db.txt, create_arrow_db.txt, produce_db.txt, spellbook_db.txt, magicmushroom_db.txt +-- skilldb: skill_db.yml, const.txt, skill_nocast_db.txt, skill_changematerial_db.txt, skill_damage_db.txt, abra_db.yml, create_arrow_db.txt, produce_db.txt, spellbook_db.yml, magicmushroom_db.yml -- statusdb: attr_fix.txt, size_fix.txt, refine_db.txt -- achievementdb: achievement_db.conf diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 7428fd900d4..21e030bd4d5 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -65,7 +65,7 @@ This list contains all available constants referenced in the 'bonus' commands. ATF_MISC = Trigger on misc skills * Other values: - Skill (sk): see 'db/(pre-)re/skill_db.txt' (NOTE: Both skill IDs and names, in quotes, are supported.) + Skill (sk): see 'db/(pre-)re/skill_db.yml' (NOTE: Both skill IDs and names, in quotes, are supported.) Monster id (mid): see 'db/(pre-)re/mob_db.txt' Item id (iid): see 'db/(pre-)re/item_db.txt' Item group (ig): see 'db/(pre-)re/item_group_db.txt' and the constants in 'db/const.txt', prefixed with IG_* diff --git a/doc/mapflags.txt b/doc/mapflags.txt index aa6cb665548..bfcc9285f97 100644 --- a/doc/mapflags.txt +++ b/doc/mapflags.txt @@ -304,7 +304,7 @@ for 'Map' type 16 will be applied. This mapflag can also be used to adjust the damage of one skill by a percentage: - skill_name: - Name of the skill in 'db/(pre-)re/skill_db.txt' (ex. SM_BASH). + Name of the skill in 'db/(pre-)re/skill_db.yml' (ex. SM_BASH). To adjust all skill damage, write "all" (without quotes). - caster: the groups for which the adjustment takes effect. (bitmask) BL_PC = Player diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 60fd044798c..a6b716f4d3e 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -3426,7 +3426,7 @@ recalculating guardians' HP. This function returns the level of the skill of the guild . If the guild does not have that skill, 0 is returned. If the guild does not exist, -1 is returned. -Refer to 'db/(pre-)re/skill_db.txt' for the full list of skills. (GD_* are guild skills) +Refer to 'db/(pre-)re/skill_db.yml' for the full list of skills. (GD_* are guild skills) --------------------------------------- @@ -3459,7 +3459,7 @@ mes "You have " + getMapGuildUsers("prontera",getcharid(2)) + " guild members in This function returns the level of the specified skill that the invoking character has. If they don't have the skill, 0 will be returned. The full list -of character skills is available in 'db/(pre-)re/skill_db.txt'. +of character skills is available in 'db/(pre-)re/skill_db.yml'. There are two main uses for this function, it can check whether the character has a skill or not, and it can tell you if the level is high enough. @@ -5583,7 +5583,7 @@ levels. This refers to the invoking character and will only work if the invoking character is a member of a guild AND its guild master, otherwise no failure message will be given and no error will occur, but nothing will happen - same about the guild skill trying to exceed the possible maximum. The full list of -guild skills is available in 'db/(pre-)re/skill_db.txt', these are all the GD_ skills at +guild skills is available in 'db/(pre-)re/skill_db.yml', these are all the GD_ skills at the end. // This would give your character's guild one level of Approval (GD_APPROVAL ID @@ -5970,7 +5970,7 @@ These commands will give the invoking character a specified skill. This is also used for item scripts. Level is obvious. Skill id is the ID number of the skill in question as per -'db/(pre-)re/skill_db.txt'. It is not known for certain whether this can be used to give +'db/(pre-)re/skill_db.yml'. It is not known for certain whether this can be used to give a character a monster's skill, but you're welcome to try with the numbers given in 'db/(pre-)re/mob_skill_db.txt'. @@ -9702,7 +9702,7 @@ when pet performance is activated. This will make the pet use a specified support skill on the owner whenever the HP and SP are below the given percent values, with a specified delay time -between activations. The skill numbers are as per 'db/(pre-)re/skill_db.txt'. +between activations. The skill numbers are as per 'db/(pre-)re/skill_db.yml'. It's not quite certain who's stats will be used for the skills cast, the character's or the pets. Probably, Skotlex can answer that question. diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 361d8d71b0c..645a951ec37 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -765,7 +765,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk /** * Making Plagiarism and Reproduce check their own function - * Previous prevention for NPC skills, Wedding skills, and INF3_DIS_PLAGIA are removed since we use skill_copyable_db.txt [Cydh] + * Previous prevention for NPC skills, Wedding skills, and INF3_DIS_PLAGIA are removed since we use skill_db.yml [Cydh] * @param sd: Player who will copy the skill * @param skill_id: Target skill * @return 0 - Cannot be copied; 1 - Can be copied by Plagiarism 2 - Can be copied by Reproduce @@ -1507,7 +1507,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 sc_start(src,bl,SC_STUN,(10+3*skill_lv),skill_lv,skill_get_time(skill_id,skill_lv)); sc_start(src,bl,SC_BLIND,(10+3*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); #ifdef RENEWAL - sc_start(src, bl, SC_RAID, 100, skill_lv, 10000); // Hardcoded to 10 seconds since skill_cast_db is full + sc_start(src, bl, SC_RAID, 100, skill_lv, 10000); // Hardcoded to 10 seconds since Duration1 and Duration2 are used break; case RG_BACKSTAP: @@ -14148,7 +14148,7 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, t_ } /** - * Process skill unit each interval (sg->interval, see interval field of skill_unit_db.txt) + * Process skill unit each interval (sg->interval, see interval field of skill_db.yml) * @param unit Skill unit * @param bl Valid 'target' above the unit, that has been check in skill_unit_timer_sub_onplace * @param tick @@ -16892,10 +16892,10 @@ struct s_skill_condition skill_get_requirement(struct map_session_data* sd, uint switch( skill_id ) { /* Skill level-dependent checks */ - case NC_SHAPESHIFT: // NOTE: Please make sure Magic_Gear_Fuel in the last position in skill_require_db.txt - case NC_REPAIR: // NOTE: Please make sure Repair_Kit in the last position in skill_require_db.txt - req.itemid[1] = skill->require.itemid[MAX_SKILL_ITEM_REQUIRE-1]; - req.amount[1] = skill->require.amount[MAX_SKILL_ITEM_REQUIRE-1]; + 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 - 1]; + req.amount[1] = skill->require.amount[skill->max - 1]; case KO_MAKIBISHI: case GN_FIRE_EXPANSION: case SO_SUMMON_AGNI: @@ -18811,7 +18811,7 @@ static int skill_get_new_group_id(void) * @param count How many 'cells' used that needed. Related with skill layout * @param skill_id ID of used skill * @param skill_lv Skill level of used skill - * @param unit_id Unit ID (look at skill_unit_db.txt) + * @param unit_id Unit ID (see skill.hpp::e_skill_unit_id) * @param limit Lifetime for skill unit, uses skill_get_time(skill_id, skill_lv) * @param interval Time interval * @return skill_unit_group @@ -22995,12 +22995,8 @@ static bool skill_parse_row_skilldamage(char* split[], int columns, int current) /*=============================== * DB reading. - * skill_db.txt - * skill_require_db.txt - * skill_cast_db.txt - * skill_castnodex_db.txt + * skill_db.yml * skill_nocast_db.txt - * skill_unit_db.txt * produce_db.txt * create_arrow_db.txt *------------------------------*/ @@ -23054,6 +23050,9 @@ static void skill_readdb(void) void skill_reload (void) { skill_db.clear(); + abra_db.clear(); + magic_mushroom_db.clear(); + reading_spellbook_db.clear(); skill_readdb(); initChangeTables(); // Re-init Status Change tables