diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/squelch/automatizer.cc | 2 | ||||
-rw-r--r-- | src/squeltch.cc | 20 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/squelch/automatizer.cc b/src/squelch/automatizer.cc index b05a253f..742a0727 100644 --- a/src/squelch/automatizer.cc +++ b/src/squelch/automatizer.cc @@ -59,7 +59,7 @@ bool Automatizer::apply_rules(object_type *o_ptr, int item_idx) const } } - return true; + return false; } std::shared_ptr<json_t> Automatizer::to_json() const diff --git a/src/squeltch.cc b/src/squeltch.cc index 78cba40b..2689cdaa 100644 --- a/src/squeltch.cc +++ b/src/squeltch.cc @@ -85,19 +85,29 @@ void squeltch_inventory(void) return; } - for (int num_iter = 0; num_iter < 100; num_iter++) + bool changed = true; + for (int num_iter = 0; changed && (num_iter < 100); num_iter++) { + // No changes on this iteration. + changed = false; + // Traverse inventory for (int i = 0; i < INVEN_PACK; i++) { object_type *o_ptr = &p_ptr->inventory[i]; - if (automatizer->apply_rules(o_ptr, i)) + if ((o_ptr->k_idx > 0) && automatizer->apply_rules(o_ptr, i)) { - return; + // We have changes + changed = true; + // Re-traverse inventory + break; } } } - - cmsg_format(TERM_VIOLET, "'apply_rules' ran too often."); + // If we reached the iteration limit, "changed" will be true + if (changed) + { + cmsg_format(TERM_VIOLET, "'apply_rules' ran too often."); + } } static int create_new_rule() |