Update attack_type.cpp

This commit is contained in:
Toom 2024-08-13 00:22:19 +03:00 committed by Celtic Minstrel
parent 6ff07f563b
commit 08b3ccb9b5

View file

@ -162,6 +162,8 @@ bool matches_simple_filter(const attack_type& attack, const config& filter, cons
}
const std::set<std::string> filter_range = utils::split_set(filter["range"].str());
const std::string& filter_min_range = filter["min_range"];
const std::string& filter_max_range = filter["min_range"];
const std::string& filter_damage = filter["damage"];
const std::string& filter_attacks = filter["number"];
const std::string& filter_accuracy = filter["accuracy"];
@ -178,6 +180,12 @@ bool matches_simple_filter(const attack_type& attack, const config& filter, cons
const std::vector<std::string> filter_special_type_active = utils::split(filter["special_type_active"]);
const std::string filter_formula = filter["formula"];
if (!filter_min_range.empty() && !in_ranges(attack.min_range(), utils::parse_ranges_int(filter_min_range)))
return false;
if (!filter_max_range.empty() && !in_ranges(attack.max_range(), utils::parse_ranges_int(filter_max_range)))
return false;
if ( !filter_range.empty() && filter_range.count(attack.range()) == 0 )
return false;
@ -362,6 +370,10 @@ bool attack_type::apply_modification(const config& cfg)
const std::string& set_icon = cfg["set_icon"];
const std::string& del_specials = cfg["remove_specials"];
auto set_specials = cfg.optional_child("set_specials");
const std::string& increase_min_range = cfg["increase_min_range"];
const std::string& set_min_range = cfg["set_min_range"];
const std::string& increase_max_range = cfg["increase_max_range"];
const std::string& set_max_range = cfg["set_max_range"];
const std::string& increase_damage = cfg["increase_damage"];
const std::string& set_damage = cfg["set_damage"];
const std::string& increase_attacks = cfg["increase_attacks"];
@ -427,6 +439,22 @@ bool attack_type::apply_modification(const config& cfg)
}
}
if(set_min_range.empty() == false) {
min_range_ = std::stoi(set_min_range);
}
if(increase_min_range.empty() == false) {
min_range_ = utils::apply_modifier(min_range_, increase_min_range);
}
if(set_max_range.empty() == false) {
max_range_ = std::stoi(set_max_range);
}
if(increase_max_range.empty() == false) {
max_range_ = utils::apply_modifier(max_range_, increase_max_range);
}
if(set_damage.empty() == false) {
damage_ = std::stoi(set_damage);
if (damage_ < 0) {
@ -514,6 +542,10 @@ bool attack_type::describe_modification(const config& cfg,std::string* descripti
// Did the caller want the description?
if(description != nullptr) {
const std::string& increase_min_range = cfg["increase_min_range"];
const std::string& set_min_range = cfg["set_min_range"];
const std::string& increase_max_range = cfg["increase_max_range"];
const std::string& set_max_range = cfg["set_max_range"];
const std::string& increase_damage = cfg["increase_damage"];
const std::string& set_damage = cfg["set_damage"];
const std::string& increase_attacks = cfg["increase_attacks"];
@ -529,6 +561,34 @@ bool attack_type::describe_modification(const config& cfg,std::string* descripti
std::vector<t_string> desc;
if(!set_min_range.empty()) {
desc.emplace_back(VGETTEXT(
// TRANSLATORS: Current value for WML code set_min_range, documented in https://wiki.wesnoth.org/EffectWML
"$number min range",
{{"number", set_min_range}}));
}
if(!increase_min_range.empty()) {
desc.emplace_back(VGETTEXT(
// TRANSLATORS: Current value for WML code increase_min_range, documented in https://wiki.wesnoth.org/EffectWML
"<span color=\"$color\">$number_or_percent</span> min range",
{{"number_or_percent", utils::print_modifier(increase_min_range)}, {"color", increase_min_range[0] == '-' ? "#f00" : "#0f0"}}));
}
if(!set_max_range.empty()) {
desc.emplace_back(VGETTEXT(
// TRANSLATORS: Current value for WML code set_max_range, documented in https://wiki.wesnoth.org/EffectWML
"$number max range",
{{"number", set_max_range}}));
}
if(!increase_max_range.empty()) {
desc.emplace_back(VGETTEXT(
// TRANSLATORS: Current value for WML code increase_max_range, documented in https://wiki.wesnoth.org/EffectWML
"<span color=\"$color\">$number_or_percent</span> max_range",
{{"number_or_percent", utils::print_modifier(increase_max_range)}, {"color", increase_max_range[0] == '-' ? "#f00" : "#0f0"}}));
}
if(!increase_damage.empty()) {
desc.emplace_back(VNGETTEXT(
// TRANSLATORS: Current value for WML code increase_damage, documented in https://wiki.wesnoth.org/EffectWML