server unequips units now. formatting and cleanup unuseds. fix merge conflict
This commit is contained in:
parent
be29c83bb9
commit
555171d11d
@ -247,7 +247,7 @@ fn main() {
|
|||||||
NewItemEntity {
|
NewItemEntity {
|
||||||
item: ItemDetail::Unit(
|
item: ItemDetail::Unit(
|
||||||
item::unit::Unit {
|
item::unit::Unit {
|
||||||
unit: item::unit::UnitType::KnightPower,
|
unit: item::unit::UnitType::HeavenlyPower,
|
||||||
modifier: Some(item::unit::UnitModifier::PlusPlus),
|
modifier: Some(item::unit::UnitModifier::PlusPlus),
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
@ -408,13 +408,9 @@ impl CharacterInventory {
|
|||||||
let (slot, _) = self.items.iter()
|
let (slot, _) = self.items.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|(_, item)| {
|
.filter(|(_, item)| {
|
||||||
if let InventoryItem::Individual(individual_inventory_item) = item {
|
if let InventoryItem::Individual(individual_inventory_item) = item {if let ItemDetail::Mag(_) = &individual_inventory_item.item {return individual_inventory_item.equipped }}
|
||||||
if let ItemDetail::Mag(_) = &individual_inventory_item.item {
|
|
||||||
return individual_inventory_item.equipped
|
|
||||||
}
|
|
||||||
}
|
|
||||||
false
|
false
|
||||||
})
|
})
|
||||||
.nth(0)?;
|
.nth(0)?;
|
||||||
Some(InventoryItemHandle {
|
Some(InventoryItemHandle {
|
||||||
inventory: self,
|
inventory: self,
|
||||||
@ -573,5 +569,9 @@ impl CharacterInventory {
|
|||||||
pub fn iter(&self) -> impl Iterator<Item = &InventoryItem> {
|
pub fn iter(&self) -> impl Iterator<Item = &InventoryItem> {
|
||||||
self.items.iter()
|
self.items.iter()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn items(&self) -> &Vec<InventoryItem> {
|
||||||
|
&self.items
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -678,7 +678,6 @@ impl ItemManager {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub async fn use_item<EG: EntityGateway>(&mut self,
|
pub async fn use_item<EG: EntityGateway>(&mut self,
|
||||||
used_item: ConsumedItem,
|
used_item: ConsumedItem,
|
||||||
entity_gateway: &mut EG,
|
entity_gateway: &mut EG,
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
use libpso::packet::ship::*;
|
use libpso::packet::ship::*;
|
||||||
use libpso::packet::messages::*;
|
use libpso::packet::messages::*;
|
||||||
use crate::entity::gateway::EntityGateway;
|
use crate::entity::gateway::EntityGateway;
|
||||||
use crate::entity::item::ItemDetail;
|
use crate::entity::item::{ItemType};
|
||||||
use crate::entity::item::tool::ToolType;
|
|
||||||
use crate::common::serverstate::ClientId;
|
use crate::common::serverstate::ClientId;
|
||||||
use crate::common::leveltable::CharacterLevelTable;
|
use crate::common::leveltable::CharacterLevelTable;
|
||||||
use crate::ship::ship::{SendShipPacket, ShipError, Rooms, Clients, ItemDropLocation};
|
use crate::ship::ship::{SendShipPacket, ShipError, Rooms, Clients, ItemDropLocation};
|
||||||
use crate::ship::location::{ClientLocation, ClientLocationError};
|
use crate::ship::location::{ClientLocation, ClientLocationError};
|
||||||
use crate::ship::map::{MapArea};
|
|
||||||
use crate::ship::items::{ItemManager, ClientItemId};
|
use crate::ship::items::{ItemManager, ClientItemId};
|
||||||
use crate::ship::packet::builder;
|
use crate::ship::packet::builder;
|
||||||
|
|
||||||
@ -275,7 +273,7 @@ pub async fn player_used_medical_center<EG>(id: ClientId,
|
|||||||
clients: &mut Clients)
|
clients: &mut Clients)
|
||||||
-> Result<Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send>, ShipError>
|
-> Result<Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send>, ShipError>
|
||||||
where
|
where
|
||||||
EG: EntityGateway
|
EG: EntityGateway
|
||||||
{
|
{
|
||||||
let client = clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id))?;
|
let client = clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id))?;
|
||||||
if client.character.meseta >= 10 {
|
if client.character.meseta >= 10 {
|
||||||
@ -332,7 +330,29 @@ where
|
|||||||
EG: EntityGateway
|
EG: EntityGateway
|
||||||
{
|
{
|
||||||
let client = clients.get(&id).ok_or(ShipError::ClientNotFound(id))?;
|
let client = clients.get(&id).ok_or(ShipError::ClientNotFound(id))?;
|
||||||
item_manager.player_unequips_item(entity_gateway, &client.character, ClientItemId(pkt.item_id)).await?;
|
let equipped_unit_ids: Vec<ClientItemId> = {
|
||||||
|
item_manager.player_unequips_item(entity_gateway, &client.character, ClientItemId(pkt.item_id)).await?;
|
||||||
|
let inventory = item_manager.get_character_inventory(&client.character).unwrap();
|
||||||
|
let ue_item = inventory.get_item_by_id(ClientItemId(pkt.item_id)).ok_or(ShipError::ItemError)?;
|
||||||
|
if let ItemType::Armor(_) = ue_item.item_type() {
|
||||||
|
inventory.items()
|
||||||
|
.iter()
|
||||||
|
.filter(|inv_item| {
|
||||||
|
if let ItemType::Unit(_) = inv_item.item_type() {
|
||||||
|
return inv_item.equipped()
|
||||||
|
}
|
||||||
|
false
|
||||||
|
})
|
||||||
|
.map(|u| u.item_id())
|
||||||
|
.collect()
|
||||||
|
} else {
|
||||||
|
Vec::new()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for unit_id in equipped_unit_ids {
|
||||||
|
item_manager.player_unequips_item(entity_gateway, &client.character, unit_id).await;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(Box::new(None.into_iter()))
|
Ok(Box::new(None.into_iter()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user