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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user