diff options
author | metamuffin <metamuffin@disroot.org> | 2024-08-13 17:07:53 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-08-13 17:07:53 +0200 |
commit | 3de710172b186fc4139f70c1756ae6fe9972e7f1 (patch) | |
tree | bb32dc1813a97823d6bcd0844679f028b056784c | |
parent | 8d4b9b1dd7816de0d75abb4fe52985611a6f6a50 (diff) | |
download | hurrycurry-3de710172b186fc4139f70c1756ae6fe9972e7f1.tar hurrycurry-3de710172b186fc4139f70c1756ae6fe9972e7f1.tar.bz2 hurrycurry-3de710172b186fc4139f70c1756ae6fe9972e7f1.tar.zst |
apply customer points
-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, } } |