From bcfd69d16f6ccbca90b410def8fb72d129c4e216 Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Fri, 15 May 2020 05:24:03 +0200 Subject: Add defaults, bounds and validations when reading skill DB --- src/map/skill.h | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) (limited to 'src/map/skill.h') diff --git a/src/map/skill.h b/src/map/skill.h index 651a355cf..66441f9f4 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -1745,7 +1745,7 @@ struct skill_condition { // Database skills struct s_skill_db { int nameid; - char name[MAX_SKILL_NAME_LENGTH]; + char name[MAX_SKILL_NAME_LENGTH + 1]; char desc[40]; int range[MAX_SKILL_LEVEL],hit,inf,element[MAX_SKILL_LEVEL],nk,splash[MAX_SKILL_LEVEL],max; int num[MAX_SKILL_LEVEL]; @@ -2115,24 +2115,57 @@ struct skill_interface { int (*unit_timer_sub) (union DBKey key, struct DBData *data, va_list ap); void (*init_unit_layout) (void); void (*init_unit_layout_unknown) (int skill_idx, int pos); + void (*validate_id) (struct config_setting_t *conf, struct s_skill_db *sk, int conf_index); + bool (*name_contains_invalid_character) (const char *name); + void (*validate_name) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_max_level) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_description) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_range) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_hittype) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_skilltype) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_skillinfo) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_attacktype) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_element) (struct config_setting_t *conf, struct s_skill_db *sk); - void (*validate_skillinfo) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_damagetype) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_splash_range) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_number_of_hits) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_interrupt_cast) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_cast_def_rate) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_number_of_instances) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_knock_back_tiles) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_cast_time) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_act_delay) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_walk_delay) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_skill_data1) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_skill_data2) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_cooldown) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_fixed_cast_time) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_castnodex) (struct config_setting_t *conf, struct s_skill_db *sk, bool delay); + void (*validate_hp_cost) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_sp_cost) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_hp_rate_cost) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_sp_rate_cost) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_max_hp_trigger) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_zeny_cost) (struct config_setting_t *conf, struct s_skill_db *sk); + int (*validate_weapontype_sub) (const char *type, bool on, struct s_skill_db *sk); void (*validate_weapontype) (struct config_setting_t *conf, struct s_skill_db *sk); + int (*validate_ammotype_sub) (const char *type, bool on, struct s_skill_db *sk); void (*validate_ammotype) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_ammo_amount) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_state) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_spirit_sphere_cost) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_item_requirements) (struct config_setting_t *conf, struct s_skill_db *sk); - void (*validate_unit_target) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_requirements) (struct config_setting_t *conf, struct s_skill_db *sk); + int (*validate_unit_id_sub) (int unit_id); + void (*validate_unit_id) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_unit_layout) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_unit_range) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_unit_interval) (struct config_setting_t *conf, struct s_skill_db *sk); + int (*validate_unit_flag_sub) (const char *type, bool on, struct s_skill_db *sk); void (*validate_unit_flag) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_unit_target) (struct config_setting_t *conf, struct s_skill_db *sk); + void (*validate_unit) (struct config_setting_t *conf, struct s_skill_db *sk); void (*validate_additional_fields) (struct config_setting_t *conf, struct s_skill_db *sk); - bool (*validate_skilldb) (struct s_skill_db *skt, const char *source); - int (*validate_weapontype_sub) (const char *type, bool on, struct s_skill_db *sk); - int (*validate_ammotype_sub) (const char *type, bool on, struct s_skill_db *sk); - int (*validate_unit_flag_sub) (const char *type, bool on, struct s_skill_db *sk); bool (*read_skilldb) (const char *filename); void (*config_set_level) (struct config_setting_t *conf, int *arr); void (*level_set_value) (int *arr, int value); -- cgit v1.2.3-60-g2f50