Corrects skill_damage_db parsing (#4667)

* Fixes #4574.
* Removes the usage of atoi as any failure returns 0.
* Adds checks for cases of invalid data.
* General cleanups and fixes.
* Fixes the import database documentation.
Thanks to @Skormie!
This commit is contained in:
Aleos
2020-03-04 12:33:37 -05:00
committed by GitHub
parent 268b07bbd3
commit 5c35ec7d69
6 changed files with 78 additions and 54 deletions

View File

@@ -4209,23 +4209,23 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
args.skill_damage.caster = atoi(caster_constant);
else {
int64 val_tmp;
int val;
if (!script_get_constant(caster_constant, &val_tmp)) {
ShowError( "npc_parse_mapflag: Unknown constant '%s'. Skipping (file '%s', line '%d').\n", caster_constant, filepath, strline(buffer, start - buffer) );
break;
}
val = static_cast<int>(val_tmp);
args.skill_damage.caster = val;
args.skill_damage.caster = static_cast<uint16>(val_tmp);
}
if (!args.skill_damage.caster)
if (args.skill_damage.caster == 0)
args.skill_damage.caster = BL_ALL;
for (int i = 0; i < SKILLDMG_MAX; i++)
for (int i = SKILLDMG_PC; i < SKILLDMG_MAX; i++)
args.skill_damage.rate[i] = cap_value(args.skill_damage.rate[i], -100, 100000);
trim(skill_name);
if (strcmp(skill_name, "all") == 0) // Adjust damage for all skills
map_setmapflag_sub(m, MF_SKILL_DAMAGE, true, &args);
else if (skill_name2id(skill_name) <= 0)
@@ -4233,7 +4233,7 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
else { // Adjusted damage for specified skill
args.flag_val = 1;
map_setmapflag_sub(m, MF_SKILL_DAMAGE, true, &args);
map_skill_damage_add(map_getmapdata(m), skill_name2id(skill_name), args.skill_damage.rate, args.skill_damage.caster);
map_skill_damage_add(map_getmapdata(m), skill_name2id(skill_name), &args);
}
}
}