summaryrefslogtreecommitdiff
path: root/server/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.rs')
-rw-r--r--server/src/server.rs33
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,