add unit armour slots. equip the unit into the right slot and save correctly
This commit is contained in:
parent
555171d11d
commit
790668f6f7
@ -234,6 +234,7 @@ fn main() {
|
||||
item::unit::Unit {
|
||||
unit: item::unit::UnitType::PriestMind,
|
||||
modifier: Some(item::unit::UnitModifier::Minus),
|
||||
armour_slot: 0,
|
||||
}
|
||||
),
|
||||
location: ItemLocation::Inventory {
|
||||
@ -247,8 +248,9 @@ fn main() {
|
||||
NewItemEntity {
|
||||
item: ItemDetail::Unit(
|
||||
item::unit::Unit {
|
||||
unit: item::unit::UnitType::HeavenlyPower,
|
||||
modifier: Some(item::unit::UnitModifier::PlusPlus),
|
||||
unit: item::unit::UnitType::PriestMind,
|
||||
modifier: Some(item::unit::UnitModifier::Minus),
|
||||
armour_slot: 1,
|
||||
}
|
||||
),
|
||||
location: ItemLocation::Inventory {
|
||||
@ -258,6 +260,38 @@ fn main() {
|
||||
}
|
||||
}
|
||||
).await;
|
||||
entity_gateway.create_item(
|
||||
NewItemEntity {
|
||||
item: ItemDetail::Unit(
|
||||
item::unit::Unit {
|
||||
unit: item::unit::UnitType::PriestMind,
|
||||
modifier: Some(item::unit::UnitModifier::Minus),
|
||||
armour_slot: 2,
|
||||
}
|
||||
),
|
||||
location: ItemLocation::Inventory {
|
||||
character_id: character.id,
|
||||
slot: 9,
|
||||
equipped: true,
|
||||
}
|
||||
}
|
||||
).await;
|
||||
entity_gateway.create_item(
|
||||
NewItemEntity {
|
||||
item: ItemDetail::Unit(
|
||||
item::unit::Unit {
|
||||
unit: item::unit::UnitType::PriestMind,
|
||||
modifier: Some(item::unit::UnitModifier::Minus),
|
||||
armour_slot: 3,
|
||||
}
|
||||
),
|
||||
location: ItemLocation::Inventory {
|
||||
character_id: character.id,
|
||||
slot: 10,
|
||||
equipped: true,
|
||||
}
|
||||
}
|
||||
).await;
|
||||
entity_gateway.create_item(
|
||||
NewItemEntity {
|
||||
item: ItemDetail::Mag(
|
||||
@ -265,7 +299,7 @@ fn main() {
|
||||
),
|
||||
location: ItemLocation::Inventory {
|
||||
character_id: character.id,
|
||||
slot: 9,
|
||||
slot: 11,
|
||||
equipped: true,
|
||||
}
|
||||
}
|
||||
|
@ -335,6 +335,7 @@ pub enum UnitModifier {
|
||||
pub struct Unit {
|
||||
pub unit: UnitType,
|
||||
pub modifier: Option<UnitModifier>,
|
||||
pub armour_slot: u8, // 0 - 3 = armour slot 1 - 4
|
||||
}
|
||||
|
||||
|
||||
@ -361,7 +362,7 @@ impl Unit {
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
result[4] = self.armour_slot;
|
||||
result
|
||||
}
|
||||
|
||||
@ -379,6 +380,7 @@ impl Unit {
|
||||
Ok(Unit{
|
||||
unit: u.unwrap(),
|
||||
modifier: m,
|
||||
armour_slot: data[4],
|
||||
})
|
||||
}
|
||||
else {
|
||||
|
@ -89,6 +89,7 @@ impl GenericUnitTable {
|
||||
ItemDropType::Unit(Unit {
|
||||
unit: unit_type,
|
||||
modifier: unit_modifier,
|
||||
armour_slot: 0,
|
||||
})
|
||||
})
|
||||
}
|
||||
@ -116,6 +117,7 @@ mod test {
|
||||
assert!(gut.get_drop(&area, &mut rng) == Some(ItemDropType::Unit(Unit {
|
||||
unit: unit,
|
||||
modifier: umod,
|
||||
armour_slot: 0,
|
||||
})));
|
||||
}
|
||||
}
|
||||
|
@ -128,6 +128,7 @@ impl RareDropTable {
|
||||
ItemDropType::Unit(Unit {
|
||||
unit: unit,
|
||||
modifier: None,
|
||||
armour_slot: 0,
|
||||
})
|
||||
},
|
||||
RareDropItem::Tool(tool) => {
|
||||
|
@ -4,8 +4,9 @@ use thiserror::Error;
|
||||
use crate::entity::gateway::EntityGateway;
|
||||
use crate::entity::character::{CharacterEntity, CharacterEntityId};
|
||||
use crate::entity::item::{ItemDetail, ItemLocation, BankName};
|
||||
use crate::entity::item::{Meseta, NewItemEntity};
|
||||
use crate::entity::item::{Meseta, NewItemEntity, ItemEntity};
|
||||
use crate::entity::item::tool::{Tool, ToolType};
|
||||
use crate::entity::item::unit;
|
||||
use crate::ship::map::MapArea;
|
||||
use crate::ship::ship::ItemDropLocation;
|
||||
use crate::ship::drops::{ItemDrop, ItemDropType};
|
||||
@ -898,20 +899,43 @@ impl ItemManager {
|
||||
pub async fn player_equips_item<EG: EntityGateway>(&mut self,
|
||||
entity_gateway: &mut EG,
|
||||
character: &CharacterEntity,
|
||||
item_id: ClientItemId)
|
||||
item_id: ClientItemId,
|
||||
equip_slot: u8)
|
||||
-> Result<(), ItemManagerError> {
|
||||
let inventory = self.character_inventory.get_mut(&character.id).ok_or(ItemManagerError::NoCharacter(character.id))?;
|
||||
let mut inventory_item_handle = inventory.get_item_handle_by_id(item_id).ok_or(ItemManagerError::NoSuchItemId(item_id))?;
|
||||
let slot = inventory_item_handle.get_slot();
|
||||
let inventory_item = inventory_item_handle.item_mut().ok_or(ItemManagerError::CannotGetMutItem)?.individual().ok_or(ItemManagerError::CannotGetIndividualItem)?;
|
||||
inventory_item.equipped = true;
|
||||
if let ItemDetail::Unit(u) = inventory_item.item {
|
||||
if equip_slot > 0 {
|
||||
inventory_item.item = ItemDetail::Unit(unit::Unit {
|
||||
unit: u.unit,
|
||||
modifier: u.modifier,
|
||||
armour_slot: ((equip_slot & 0x7) - 1) % 4,
|
||||
});
|
||||
} else {
|
||||
inventory_item.item = ItemDetail::Unit(unit::Unit {
|
||||
unit: u.unit,
|
||||
modifier: u.modifier,
|
||||
armour_slot: 0,
|
||||
});
|
||||
}
|
||||
};
|
||||
entity_gateway.change_item_location(&inventory_item.entity_id, ItemLocation::Inventory{
|
||||
character_id: character.id,
|
||||
slot: slot,
|
||||
equipped: true,
|
||||
}).await;
|
||||
|
||||
entity_gateway.save_character(character).await;
|
||||
entity_gateway.save_item(&ItemEntity{
|
||||
id: inventory_item.entity_id,
|
||||
location: ItemLocation::Inventory{
|
||||
character_id: character.id,
|
||||
slot: slot,
|
||||
equipped: true,
|
||||
},
|
||||
item: inventory_item.item.clone(),
|
||||
}).await;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -925,13 +949,27 @@ impl ItemManager {
|
||||
let slot = inventory_item_handle.get_slot();
|
||||
let inventory_item = inventory_item_handle.item_mut().ok_or(ItemManagerError::CannotGetMutItem)?.individual().ok_or(ItemManagerError::CannotGetIndividualItem)?;
|
||||
inventory_item.equipped = false;
|
||||
if let ItemDetail::Unit(u) = inventory_item.item {
|
||||
inventory_item.item = ItemDetail::Unit(unit::Unit {
|
||||
unit: u.unit,
|
||||
modifier: u.modifier,
|
||||
armour_slot: 0,
|
||||
});
|
||||
};
|
||||
entity_gateway.change_item_location(&inventory_item.entity_id, ItemLocation::Inventory{
|
||||
character_id: character.id,
|
||||
slot: slot,
|
||||
equipped: false,
|
||||
}).await;
|
||||
|
||||
entity_gateway.save_character(character).await;
|
||||
entity_gateway.save_item(&ItemEntity{
|
||||
id: inventory_item.entity_id,
|
||||
location: ItemLocation::Inventory{
|
||||
character_id: character.id,
|
||||
slot: slot,
|
||||
equipped: false,
|
||||
},
|
||||
item: inventory_item.item.clone(),
|
||||
}).await;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
@ -316,7 +316,7 @@ where
|
||||
EG: EntityGateway
|
||||
{
|
||||
let client = clients.get(&id).ok_or(ShipError::ClientNotFound(id))?;
|
||||
item_manager.player_equips_item(entity_gateway, &client.character, ClientItemId(pkt.item_id)).await?;
|
||||
item_manager.player_equips_item(entity_gateway, &client.character, ClientItemId(pkt.item_id), pkt.sub_menu).await?;
|
||||
Ok(Box::new(None.into_iter()))
|
||||
}
|
||||
|
||||
|
@ -89,6 +89,7 @@ impl ShopItem for ArmorShopItem {
|
||||
ItemDetail::Unit(Unit {
|
||||
unit: *unit,
|
||||
modifier: None,
|
||||
armour_slot: 0,
|
||||
})
|
||||
},
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user