From b44e489132ec7befec39a61bda5adcef159cbbcb Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 21 Sep 2025 23:03:57 +0200 Subject: Prioritize demands in waiter bot (fix #384) --- server/bot/src/algos/simple.rs | 6 +++--- server/bot/src/algos/waiter.rs | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'server/bot/src') diff --git a/server/bot/src/algos/simple.rs b/server/bot/src/algos/simple.rs index 06bf76ab..f232062a 100644 --- a/server/bot/src/algos/simple.rs +++ b/server/bot/src/algos/simple.rs @@ -139,12 +139,12 @@ impl Context<'_, S> { _ => None, }) } - pub fn find_demands(&self) -> Vec<(ItemIndex, IVec2)> { + pub fn find_demands_with_table(&self) -> Vec<(ItemIndex, IVec2, f32)> { self.game .players .iter() .filter_map(|(_, pl)| match &pl.communicate_persist { - Some((Message::Item(item), _)) => { + Some((Message::Item(item), timeout)) => { let pos = pl.movement.position.as_ivec2(); [IVec2::X, IVec2::Y, -IVec2::X, -IVec2::Y] .into_iter() @@ -155,7 +155,7 @@ impl Context<'_, S> { .is_some_and(|t| self.game.data.tile_interact[t.kind.0]) }) .map(|off| pos + off) - .map(|pos| (*item, pos)) + .map(|pos| (*item, pos, timeout.remaining)) } _ => None, }) diff --git a/server/bot/src/algos/waiter.rs b/server/bot/src/algos/waiter.rs index 58a3f292..ab0402e6 100644 --- a/server/bot/src/algos/waiter.rs +++ b/server/bot/src/algos/waiter.rs @@ -102,8 +102,9 @@ impl Context<'_, Waiter> { if let Some(pos) = self.find_occupied_table_or_floor() { self.assert_tile_is_clear(pos)?; } - let dems = self.find_demands(); - for (item, table) in dems { + let mut dems = self.find_demands_with_table(); + dems.sort_by_key(|(_, _, x)| (*x * 1000.) as i32); + for (item, table, _) in dems { if self.game.data.item_name(item) == "unknown-order" { self.interact_with(table, 0.)?; } -- cgit v1.2.3-70-g09d2