From 56f26dc3a82fb01aa8f33234380eda2cab80c39b Mon Sep 17 00:00:00 2001 From: ubruntu Date: Thu, 16 Sep 2021 22:06:30 +0000 Subject: [PATCH] Another trade fix --- server/src/events/invite.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/server/src/events/invite.rs b/server/src/events/invite.rs index 40d42c16ed..2e08def75f 100644 --- a/server/src/events/invite.rs +++ b/server/src/events/invite.rs @@ -286,7 +286,28 @@ fn handle_invite_answer( ) { let clients = state.ecs().read_storage::(); let uids = state.ecs().read_storage::(); - + if matches!(kind, InviteKind::Trade) && matches!(invite_answer, InviteAnswer::Accepted) { + // invitee must close current trade if one exists before accepting new one + if let Some(invitee_uid) = uids.get(entity).copied() { + let mut trades = state.ecs().write_resource::(); + if let Some(active_trade) = trades.entity_trades.get(&invitee_uid).copied() { + trades + .decline_trade(active_trade, invitee_uid) + .and_then(|u| state.ecs().entity_from_uid(u.0)) + .map(|e| { + if let Some(client) = clients.get(e) { + client + .send_fallible(ServerGeneral::FinishedTrade(TradeResult::Declined)); + } + if let Some(agent) = state.ecs().write_storage::().get_mut(e) { + agent + .inbox + .push_back(AgentEvent::FinishedTrade(TradeResult::Declined)); + } + }); + } + }; + } if let (Some(client), Some(target)) = (clients.get(inviter), uids.get(entity).copied()) { client.send_fallible(ServerGeneral::InviteComplete { target,