summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-08-13 17:07:53 +0200
committermetamuffin <metamuffin@disroot.org>2024-08-13 17:07:53 +0200
commit3de710172b186fc4139f70c1756ae6fe9972e7f1 (patch)
treebb32dc1813a97823d6bcd0844679f028b056784c /server
parent8d4b9b1dd7816de0d75abb4fe52985611a6f6a50 (diff)
downloadhurrycurry-3de710172b186fc4139f70c1756ae6fe9972e7f1.tar
hurrycurry-3de710172b186fc4139f70c1756ae6fe9972e7f1.tar.bz2
hurrycurry-3de710172b186fc4139f70c1756ae6fe9972e7f1.tar.zst
apply customer points
Diffstat (limited to 'server')
-rw-r--r--server/bot/src/algos/customer.rs26
-rw-r--r--server/protocol/src/lib.rs6
-rw-r--r--server/src/server.rs6
-rw-r--r--server/src/state.rs1
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,
}
}