aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-12-25 19:37:20 +0100
committermetamuffin <metamuffin@disroot.org>2024-12-25 20:01:43 +0100
commit4083df5cfe76e42506c5356cf23d3dc9f3b6e6bf (patch)
tree5ec12de003c38f0891c215721593c7ea49ff2c16 /server/src
parent15be00667282a253fb438fec9d6347f5af89d9a0 (diff)
downloadhurrycurry-4083df5cfe76e42506c5356cf23d3dc9f3b6e6bf.tar
hurrycurry-4083df5cfe76e42506c5356cf23d3dc9f3b6e6bf.tar.bz2
hurrycurry-4083df5cfe76e42506c5356cf23d3dc9f3b6e6bf.tar.zst
variable hand count
Diffstat (limited to 'server/src')
-rw-r--r--server/src/data/mod.rs1
-rw-r--r--server/src/entity/bot.rs2
-rw-r--r--server/src/server.rs33
3 files changed, 23 insertions, 13 deletions
diff --git a/server/src/data/mod.rs b/server/src/data/mod.rs
index 57051fe9..15fdfa6b 100644
--- a/server/src/data/mod.rs
+++ b/server/src/data/mod.rs
@@ -314,6 +314,7 @@ pub fn build_data(
item_names,
demands,
tile_names,
+ hand_count: 2,
},
Serverdata {
initial_map,
diff --git a/server/src/entity/bot.rs b/server/src/entity/bot.rs
index 368f8c9d..6e6c9162 100644
--- a/server/src/entity/bot.rs
+++ b/server/src/entity/bot.rs
@@ -72,7 +72,7 @@ impl<T: BotAlgo + Any> Entity for BotDriver<T> {
c.packet_in.push_back(PacketS::Interact {
player: self.id,
pos: input.interact,
- hand: Hand::Left,
+ hand: Hand(0),
})
}
c.packet_in.push_back(PacketS::Movement {
diff --git a/server/src/server.rs b/server/src/server.rs
index 19153864..0889cd71 100644
--- a/server/src/server.rs
+++ b/server/src/server.rs
@@ -164,10 +164,9 @@ impl GameServerExt for Game {
name: player.name.clone(),
});
for (i, item) in player.items.iter().enumerate() {
- let hand = Hand::from_index(i);
if let Some(item) = &item {
out.push(PacketC::SetItem {
- location: ItemLocation::Player(id, hand),
+ location: ItemLocation::Player(id, Hand(i)),
item: Some(item.kind),
});
if let Some(Involvement {
@@ -180,7 +179,7 @@ impl GameServerExt for Game {
{
out.push(PacketC::SetProgress {
player,
- item: ItemLocation::Player(id, hand),
+ item: ItemLocation::Player(id, Hand(i)),
position,
speed,
warn,
@@ -255,7 +254,7 @@ impl GameServerExt for Game {
self.players.insert(
id,
Player {
- items: [const { None }; 2],
+ items: (0..self.data.hand_count).map(|_| None).collect(),
character,
class,
movement: MovementBase::new(position),
@@ -531,14 +530,17 @@ impl Server {
return Err(tre!("s.error.customer_interact"));
}
+ let this_hslot = this.items.get_mut(hand.0).ok_or(tre!("s.error.no_hand"))?;
+ let other_hslot = other.items.get_mut(hand.0).ok_or(tre!("s.error.no_hand"))?;
+
interact(
&self.game.data,
edge,
None,
Some(pid),
- &mut this.items[hand.index()],
+ this_hslot,
ItemLocation::Player(base_pid, hand),
- &mut other.items[hand.index()],
+ other_hslot,
ItemLocation::Player(pid, hand),
&mut self.game.score,
&mut self.score_changed,
@@ -552,6 +554,11 @@ impl Server {
.get_mut(&pid)
.ok_or(tre!("s.error.no_player"))?;
+ let hslot = player
+ .items
+ .get_mut(hand.0)
+ .ok_or(tre!("s.error.no_hand"))?;
+
interact(
&self.game.data,
edge,
@@ -559,7 +566,7 @@ impl Server {
Some(pid),
&mut tile.item,
ItemLocation::Tile(pos),
- &mut player.items[hand.index()],
+ hslot,
ItemLocation::Player(pid, hand),
&mut self.game.score,
&mut self.score_changed,
@@ -602,10 +609,12 @@ impl Server {
}
PacketS::ReplaceHand { item, player, hand } => {
let pdata = self.game.players.get_mut(&player).ok_or(tre!(""))?;
- pdata.items[hand.index()] = item.map(|i| Item {
- kind: i,
- active: None,
- });
+ if let Some(slot) = pdata.items.get_mut(hand.0) {
+ *slot = item.map(|i| Item {
+ kind: i,
+ active: None,
+ });
+ }
self.packet_out.push_back(PacketC::SetItem {
location: ItemLocation::Player(player, hand),
item,
@@ -680,7 +689,7 @@ impl Server {
&self.gamedata_index,
None,
item,
- ItemLocation::Player(pid, Hand::from_index(i)),
+ ItemLocation::Player(pid, Hand(i)),
&mut self.game.score,
&mut self.score_changed,
&mut self.packet_out,