diff options
author | metamuffin <metamuffin@disroot.org> | 2024-12-25 19:37:20 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-12-25 20:01:43 +0100 |
commit | 4083df5cfe76e42506c5356cf23d3dc9f3b6e6bf (patch) | |
tree | 5ec12de003c38f0891c215721593c7ea49ff2c16 /server/src/server.rs | |
parent | 15be00667282a253fb438fec9d6347f5af89d9a0 (diff) | |
download | hurrycurry-4083df5cfe76e42506c5356cf23d3dc9f3b6e6bf.tar hurrycurry-4083df5cfe76e42506c5356cf23d3dc9f3b6e6bf.tar.bz2 hurrycurry-4083df5cfe76e42506c5356cf23d3dc9f3b6e6bf.tar.zst |
variable hand count
Diffstat (limited to 'server/src/server.rs')
-rw-r--r-- | server/src/server.rs | 33 |
1 files changed, 21 insertions, 12 deletions
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, |