summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/squelch/automatizer.cc2
-rw-r--r--src/squeltch.cc20
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()