mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Being attacked now cancels all active trades.
This commit is contained in:
parent
c1a64e1d69
commit
d0a902d918
@ -28,6 +28,7 @@ use common::{
|
|||||||
resources::{Secs, Time},
|
resources::{Secs, Time},
|
||||||
states::utils::StageSection,
|
states::utils::StageSection,
|
||||||
terrain::{Block, BlockKind, TerrainGrid},
|
terrain::{Block, BlockKind, TerrainGrid},
|
||||||
|
trade::{TradeResult, Trades},
|
||||||
uid::{Uid, UidAllocator},
|
uid::{Uid, UidAllocator},
|
||||||
util::Dir,
|
util::Dir,
|
||||||
vol::ReadVol,
|
vol::ReadVol,
|
||||||
@ -1409,6 +1410,35 @@ pub fn handle_entity_attacked_hook(server: &Server, entity: EcsEntity) {
|
|||||||
entity,
|
entity,
|
||||||
buff_change: buff::BuffChange::RemoveByKind(BuffKind::Saturation),
|
buff_change: buff::BuffChange::RemoveByKind(BuffKind::Saturation),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// If entity was in an active trade, cancel it
|
||||||
|
let mut trades = ecs.write_resource::<Trades>();
|
||||||
|
let uids = ecs.read_storage::<Uid>();
|
||||||
|
let clients = ecs.read_storage::<Client>();
|
||||||
|
let mut agents = ecs.write_storage::<Agent>();
|
||||||
|
let mut notify_trade_party = |entity| {
|
||||||
|
if let Some(client) = clients.get(entity) {
|
||||||
|
client.send_fallible(ServerGeneral::FinishedTrade(TradeResult::Declined));
|
||||||
|
}
|
||||||
|
if let Some(agent) = agents.get_mut(entity) {
|
||||||
|
agent
|
||||||
|
.inbox
|
||||||
|
.push_back(AgentEvent::FinishedTrade(TradeResult::Declined));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if let Some(uid) = uids.get(entity) {
|
||||||
|
// Notify attacked entity
|
||||||
|
notify_trade_party(entity);
|
||||||
|
if let Some(trade) = trades.entity_trades.get(uid).copied() {
|
||||||
|
trades
|
||||||
|
.decline_trade(trade, *uid)
|
||||||
|
.and_then(|uid| ecs.entity_from_uid(uid.0))
|
||||||
|
.map(|entity| {
|
||||||
|
// Notify person trading with attacked person
|
||||||
|
notify_trade_party(entity)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_change_ability(
|
pub fn handle_change_ability(
|
||||||
|
Loading…
Reference in New Issue
Block a user