aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-09-21 23:03:57 +0200
committermetamuffin <metamuffin@disroot.org>2025-09-21 23:03:59 +0200
commitb44e489132ec7befec39a61bda5adcef159cbbcb (patch)
tree21f77c77810e9f9cfe3935375cf76bca8e7e527a /server
parent697903afa0e63d8138a30c3e7f54b1cc483c6807 (diff)
downloadhurrycurry-b44e489132ec7befec39a61bda5adcef159cbbcb.tar
hurrycurry-b44e489132ec7befec39a61bda5adcef159cbbcb.tar.bz2
hurrycurry-b44e489132ec7befec39a61bda5adcef159cbbcb.tar.zst
Prioritize demands in waiter bot (fix #384)
Diffstat (limited to 'server')
-rw-r--r--server/bot/src/algos/simple.rs6
-rw-r--r--server/bot/src/algos/waiter.rs5
2 files changed, 6 insertions, 5 deletions
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<S> 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<S> 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.)?;
}