From c3b0ab778853a33620e84793a3c6bdb53c9be0ab Mon Sep 17 00:00:00 2001 From: Bardur Arantsson Date: Mon, 23 Feb 2015 09:11:56 +0100 Subject: Fix problem with pseudo-ID not kicking in on inventory --- src/squelch/automatizer.cc | 2 +- src/squeltch.cc | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'src') 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 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() -- cgit v1.2.3