diff options
-rw-r--r-- | server/bot/src/algos/customer.rs | 26 | ||||
-rw-r--r-- | server/protocol/src/lib.rs | 6 | ||||
-rw-r--r-- | server/src/server.rs | 6 | ||||
-rw-r--r-- | server/src/state.rs | 1 |
4 files changed, 24 insertions, 15 deletions
diff --git a/server/bot/src/algos/customer.rs b/server/bot/src/algos/customer.rs index a147db05..0fc7a42b 100644 --- a/server/bot/src/algos/customer.rs +++ b/server/bot/src/algos/customer.rs @@ -20,7 +20,7 @@ use crate::{ BotAlgo, BotInput, }; use hurrycurry_client_lib::Game; -use hurrycurry_protocol::{glam::IVec2, DemandIndex, Message, PacketS, PlayerID}; +use hurrycurry_protocol::{glam::IVec2, DemandIndex, Message, PacketS, PlayerID, Score}; use log::info; use rand::{random, seq::IndexedRandom, thread_rng}; @@ -123,14 +123,15 @@ impl BotAlgo for Customer { if *timeout <= 0. { let path = find_path(&game.walkable, pos.as_ivec2(), *origin) .expect("no path to exit"); - // *self.chairs.get_mut(chair).unwrap() = true; - // game.score.demands_failed += 1; - // game.score.points -= 1; - // game.score_changed = true; info!("{me:?} -> exiting"); *self = Customer::Exiting { path }; BotInput { extra: vec![ + PacketS::ApplyScore(Score { + points: -1, + demands_failed: 1, + ..Default::default() + }), PacketS::Communicate { message: None, persist: true, @@ -216,11 +217,7 @@ impl BotAlgo for Customer { let demand = &game.data.demands[demand.0]; *progress += dt / demand.duration; if *progress >= 1. { - if let Some(path) = find_path( - &game.walkable, - pos.as_ivec2(), - *origin, - ) { + if let Some(path) = find_path(&game.walkable, pos.as_ivec2(), *origin) { let mut packets = Vec::new(); packets.push(PacketS::ReplaceHand { player: me, @@ -235,10 +232,11 @@ impl BotAlgo for Customer { player: me, pos: None, }); - // *self.chairs.get_mut(chair).unwrap() = true; - // game.score.demands_completed += 1; - // game.score.points += demand.points; - // game.score_changed = true; + packets.push(PacketS::ApplyScore(Score { + demands_completed: 1, + points: demand.points, + ..Default::default() + })); info!("{me:?} -> exiting"); *self = Customer::Exiting { path }; return BotInput { diff --git a/server/protocol/src/lib.rs b/server/protocol/src/lib.rs index 80d94192..72eeb0c7 100644 --- a/server/protocol/src/lib.rs +++ b/server/protocol/src/lib.rs @@ -96,7 +96,7 @@ pub enum PacketS { Join { name: String, character: i32, - #[serde(skip)] + #[serde(skip)] // TODO fix bincode can still set id id: Option<PlayerID>, // used entity bots that cant receive a response }, Leave { @@ -128,6 +128,10 @@ pub enum PacketS { player: PlayerID, item: Option<ItemIndex>, }, + #[serde(skip)] + #[bincode(skip)] + /// For internal use only + ApplyScore(Score), /// For use in replay sessions only ReplayTick { dt: f64, diff --git a/server/src/server.rs b/server/src/server.rs index 49d0b461..2543baff 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -474,6 +474,12 @@ impl Server<'_> { item, }) } + PacketS::ApplyScore(score) => { + self.game.score.demands_completed += score.demands_completed; + self.game.score.demands_failed += score.demands_failed; + self.game.score.points += score.points; + self.state.score_changed = true; + } PacketS::ReplayTick { .. } => bail!("packet not supported in this session"), } Ok(()) diff --git a/server/src/state.rs b/server/src/state.rs index ecfa0fcb..343d130f 100644 --- a/server/src/state.rs +++ b/server/src/state.rs @@ -313,6 +313,7 @@ fn get_packet_player(packet: &PacketS) -> Option<PlayerID> { PacketS::Interact { player, .. } => Some(*player), PacketS::Communicate { player, .. } => Some(*player), PacketS::ReplaceHand { player, .. } => Some(*player), + PacketS::ApplyScore(_) => None, PacketS::ReplayTick { .. } => None, } } |