add kill counter field to weapons and increment it when a client kills a monster
This commit is contained in:
parent
70c89cd9ad
commit
9025458ee8
@ -88,6 +88,7 @@ fn main() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -108,13 +109,14 @@ fn main() {
|
||||
NewItemEntity {
|
||||
item: ItemDetail::Weapon(
|
||||
item::weapon::Weapon {
|
||||
weapon: item::weapon::WeaponType::Raygun,
|
||||
weapon: item::weapon::WeaponType::SealedJSword,
|
||||
grind: 5,
|
||||
special: Some(item::weapon::WeaponSpecial::Hell),
|
||||
special: None,
|
||||
attrs: [Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Hit, value: 40}),
|
||||
Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Dark, value: 30}),
|
||||
None,],
|
||||
tekked: false,
|
||||
tekked: true,
|
||||
kills: Some(22995),
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -129,6 +131,7 @@ fn main() {
|
||||
Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Dark, value: 30}),
|
||||
None,],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -143,6 +146,7 @@ fn main() {
|
||||
Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Dark, value: 100}),
|
||||
None,],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -157,6 +161,7 @@ fn main() {
|
||||
Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Dark, value: 100}),
|
||||
None,],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -171,6 +176,7 @@ fn main() {
|
||||
Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Dark, value: 100}),
|
||||
Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Native, value: 100}),],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -213,8 +219,17 @@ fn main() {
|
||||
|
||||
let item6_1 = entity_gateway.create_item(
|
||||
NewItemEntity {
|
||||
item: ItemDetail::ESWeapon(
|
||||
item::esweapon::ESWeapon::new(item::esweapon::ESWeaponType::Saber)
|
||||
item: ItemDetail::Weapon(
|
||||
item::weapon::Weapon {
|
||||
weapon: item::weapon::WeaponType::Autogun,
|
||||
grind: 5,
|
||||
special: Some(item::weapon::WeaponSpecial::Hell),
|
||||
attrs: [Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Hit, value: 70}),
|
||||
Some(item::weapon::WeaponAttribute{attr: item::weapon::Attribute::Dark, value: 80}),
|
||||
None,],
|
||||
tekked: false,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
let item7_a = entity_gateway.create_item(
|
||||
@ -244,8 +259,8 @@ fn main() {
|
||||
NewItemEntity {
|
||||
item: ItemDetail::Unit(
|
||||
item::unit::Unit {
|
||||
unit: item::unit::UnitType::PriestMind,
|
||||
modifier: Some(item::unit::UnitModifier::PlusPlus),
|
||||
unit: item::unit::UnitType::Limiter,
|
||||
modifier: None,
|
||||
}
|
||||
),
|
||||
}
|
||||
|
@ -131,4 +131,15 @@ pub trait EntityGateway: Send + Sync + Clone {
|
||||
async fn set_bank_meseta(&mut self, _char_id: &CharacterEntityId, _bank: BankName, _amount: Meseta) -> Result<(), GatewayError> {
|
||||
unimplemented!();
|
||||
}
|
||||
async fn increment_kill_counter(&mut self, _item_entity_id: &ItemEntityId) -> Result<(), GatewayError> {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
async fn get_kill_counter() {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
async fn set_kill_counter() {
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
|
@ -349,4 +349,19 @@ impl EntityGateway for InMemoryGateway {
|
||||
Err(GatewayError::Error)
|
||||
}
|
||||
}
|
||||
|
||||
async fn increment_kill_counter(&mut self, item_id: &ItemEntityId) -> Result<(), GatewayError> {
|
||||
if let Some(item_entity) = self.items.lock().unwrap().get_mut(item_id) {
|
||||
item_entity.increase_kill_counter();
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn get_kill_counter() {
|
||||
println!("src/entity/gateway/inmemory.rs::get_kill_counter() - unimplemented!");
|
||||
}
|
||||
|
||||
async fn set_kill_counter() {
|
||||
println!("src/entity/gateway/inmemory.rs::set_kill_counter() - unimplemented!");
|
||||
}
|
||||
}
|
||||
|
@ -291,6 +291,7 @@ pub struct PgWeapon {
|
||||
grind: u8,
|
||||
attrs: HashMap<weapon::Attribute, i8>,
|
||||
tekked: bool,
|
||||
kills: Option<u16>,
|
||||
}
|
||||
|
||||
impl From<weapon::Weapon> for PgWeapon {
|
||||
@ -301,6 +302,7 @@ impl From<weapon::Weapon> for PgWeapon {
|
||||
grind: other.grind,
|
||||
attrs: other.attrs.iter().flatten().map(|attr| (attr.attr, attr.value)).collect(),
|
||||
tekked: other.tekked,
|
||||
kills: other.kills,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -321,6 +323,7 @@ impl From<PgWeapon> for weapon::Weapon {
|
||||
grind: other.grind,
|
||||
attrs,
|
||||
tekked: other.tekked,
|
||||
kills: other.kills,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -169,6 +169,33 @@ impl ItemDetail {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn has_kill_counter(self) -> bool {
|
||||
match self {
|
||||
ItemDetail::Weapon(w) => w.kills.is_some(),
|
||||
ItemDetail::Armor(a) => false,
|
||||
ItemDetail::Shield(s) => false,
|
||||
// ItemDetail::Unit(u) => u.kills.is_some(),
|
||||
ItemDetail::Unit(u) => false,
|
||||
ItemDetail::Tool(t) => false,
|
||||
ItemDetail::TechniqueDisk(d) => false,
|
||||
ItemDetail::Mag(m) => false,
|
||||
ItemDetail::ESWeapon(e) => false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn increment_kill_counter(&self) {
|
||||
match self {
|
||||
ItemDetail::Weapon(w) => {},
|
||||
ItemDetail::Armor(a) => {},
|
||||
ItemDetail::Shield(s) => {},
|
||||
ItemDetail::Unit(u) => {},
|
||||
ItemDetail::Tool(t) => {},
|
||||
ItemDetail::TechniqueDisk(d) => {},
|
||||
ItemDetail::Mag(m) => {},
|
||||
ItemDetail::ESWeapon(e) => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
@ -182,6 +209,28 @@ pub struct ItemEntity {
|
||||
pub item: ItemDetail,
|
||||
}
|
||||
|
||||
impl ItemEntity {
|
||||
pub fn increase_kill_counter(&mut self) {
|
||||
match &self.item {
|
||||
ItemDetail::Weapon(w) => {
|
||||
if let Some(kills) = w.kills {
|
||||
self.item = ItemDetail::Weapon(weapon::Weapon {
|
||||
kills: Some(kills + 1),
|
||||
..*w
|
||||
})
|
||||
}
|
||||
},
|
||||
// ItemDetail::Unit(u) => {
|
||||
// if let Some(kills) = u.kills {
|
||||
// kills += 1;
|
||||
// u.kills = Some(kills);
|
||||
// }
|
||||
// }
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
pub enum InventoryItemEntity {
|
||||
|
@ -1421,6 +1421,10 @@ impl WeaponType {
|
||||
_ => Err(ItemParseError::InvalidWeaponType),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn has_counter(&self) -> bool {
|
||||
matches!(self, WeaponType::SealedJSword | WeaponType::LameDArgent)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1464,6 +1468,7 @@ pub struct Weapon {
|
||||
pub grind: u8,
|
||||
pub attrs: [Option<WeaponAttribute>; 3],
|
||||
pub tekked: bool,
|
||||
pub kills: Option<u16>,
|
||||
}
|
||||
|
||||
|
||||
@ -1475,6 +1480,7 @@ impl Weapon {
|
||||
grind: 0,
|
||||
attrs: [None; 3],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
}
|
||||
|
||||
@ -1530,9 +1536,15 @@ impl Weapon {
|
||||
result[4] += 0x80
|
||||
};
|
||||
|
||||
result[6..8].copy_from_slice(&self.attrs[0].map(|s| s.value()).unwrap_or([0,0]));
|
||||
result[8..10].copy_from_slice(&self.attrs[1].map(|s| s.value()).unwrap_or([0,0]));
|
||||
result[10..12].copy_from_slice(&self.attrs[2].map(|s| s.value()).unwrap_or([0,0]));
|
||||
result[6..8].copy_from_slice(&self.attrs[0].map(|s| s.value()).unwrap_or([0,0]));
|
||||
result[8..10].copy_from_slice(&self.attrs[1].map(|s| s.value()).unwrap_or([0,0]));
|
||||
if self.weapon.has_counter() {
|
||||
result[10..12].copy_from_slice(&self.kills.unwrap_or(0u16).to_be_bytes());
|
||||
result[10] += 0x80;
|
||||
|
||||
} else {
|
||||
result[10..12].copy_from_slice(&self.attrs[2].map(|s| s.value()).unwrap_or([0,0]));
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
@ -1543,6 +1555,7 @@ impl Weapon {
|
||||
if let Ok(weapon) = wep {
|
||||
let mut special = None;
|
||||
let mut tekked = true;
|
||||
let mut kills = None;
|
||||
let grind = data[3];
|
||||
|
||||
if data[4] >= 0x81 && data[4] <= 0xA8 {
|
||||
@ -1575,12 +1588,18 @@ impl Weapon {
|
||||
}
|
||||
}
|
||||
|
||||
if data[10] >= 0x80 {
|
||||
attrs[2] = None;
|
||||
kills = Some(u16::from_be_bytes([data[10], data[11]]));
|
||||
}
|
||||
|
||||
Ok(Weapon {
|
||||
weapon,
|
||||
special,
|
||||
grind,
|
||||
attrs,
|
||||
tekked,
|
||||
kills,
|
||||
})
|
||||
}
|
||||
else {
|
||||
@ -1651,4 +1670,10 @@ impl Weapon {
|
||||
| WeaponType::Scepter
|
||||
)
|
||||
}
|
||||
|
||||
pub fn increment_kill_counter(&mut self) {
|
||||
if let Some(kills) = self.kills {
|
||||
self.kills = Some(kills + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -220,6 +220,7 @@ async fn new_character<EG: EntityGateway>(entity_gateway: &mut EG, user: &UserAc
|
||||
special: None,
|
||||
attrs: [None; 3],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
})}).await?;
|
||||
|
||||
entity_gateway.add_item_note(&weapon.id, ItemNote::CharacterCreation {
|
||||
|
@ -497,6 +497,7 @@ impl GenericWeaponTable {
|
||||
grind: weapon_grind as u8,
|
||||
attrs: weapon_attributes,
|
||||
tekked: weapon_special.is_none(),
|
||||
kills: None,
|
||||
}))
|
||||
}
|
||||
}
|
||||
@ -518,6 +519,7 @@ mod test {
|
||||
grind: 0,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
})));
|
||||
|
||||
let gwt = GenericWeaponTable::new(Episode::One, Difficulty::Hard, SectionID::Skyly);
|
||||
@ -527,6 +529,7 @@ mod test {
|
||||
grind: 2,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
})));
|
||||
|
||||
let gwt = GenericWeaponTable::new(Episode::One, Difficulty::VeryHard, SectionID::Skyly);
|
||||
@ -536,6 +539,7 @@ mod test {
|
||||
grind: 0,
|
||||
attrs: [None, None, None],
|
||||
tekked: false,
|
||||
kills: None,
|
||||
})));
|
||||
|
||||
let gwt = GenericWeaponTable::new(Episode::One, Difficulty::Ultimate, SectionID::Skyly);
|
||||
@ -545,6 +549,7 @@ mod test {
|
||||
grind: 0,
|
||||
attrs: [Some(WeaponAttribute {attr: Attribute::ABeast, value: 30}), Some(WeaponAttribute {attr: Attribute::Dark, value: 30}), None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
})));
|
||||
}
|
||||
}
|
||||
|
@ -103,6 +103,7 @@ impl RareDropTable {
|
||||
grind: 0,
|
||||
attrs: self.attribute_table.generate_rare_attributes(map_area, rng),
|
||||
tekked: false,
|
||||
kills: None,
|
||||
})
|
||||
|
||||
},
|
||||
|
@ -45,6 +45,13 @@ impl IndividualInventoryItem {
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
|
||||
pub fn weapon_mut(&mut self) -> Option<&mut Weapon> {
|
||||
match self.item {
|
||||
ItemDetail::Weapon(ref mut weapon) => Some(weapon),
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@ -984,5 +991,14 @@ impl CharacterInventory {
|
||||
pub fn as_equipped_entity(&self) -> EquippedEntity {
|
||||
self.equipped.clone()
|
||||
}
|
||||
|
||||
pub fn get_item_by_entity_id(&self, item_id: ItemEntityId) -> Option<&InventoryItem> {
|
||||
for item in &self.items {
|
||||
if let Some(_) = item.entity_ids().iter().find(|&&item| item == item_id) {
|
||||
return Some(item)
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@ use thiserror::Error;
|
||||
use crate::entity::gateway::{EntityGateway, GatewayError};
|
||||
use crate::entity::character::{CharacterEntity, CharacterEntityId, TechLevel};
|
||||
use crate::entity::item::{ItemDetail, ItemNote, BankName};
|
||||
use crate::entity::item::{Meseta, NewItemEntity, ItemEntity, InventoryItemEntity, BankItemEntity};
|
||||
use crate::entity::item::{Meseta, NewItemEntity, ItemEntity, InventoryItemEntity, BankItemEntity, EquippedEntity, ItemEntityId};
|
||||
use crate::entity::item::tool::{Tool, ToolType};
|
||||
use crate::entity::item::weapon;
|
||||
use crate::ship::map::MapArea;
|
||||
@ -82,6 +82,7 @@ pub enum ItemManagerError {
|
||||
ItemTransactionAction(Box<dyn std::error::Error + Send + Sync>),
|
||||
#[error("invalid trade")]
|
||||
InvalidTrade,
|
||||
EntityIdNotInInventory(ItemEntityId),
|
||||
}
|
||||
|
||||
impl<E> std::convert::From<TransactionError<E>> for ItemManagerError
|
||||
@ -1373,6 +1374,41 @@ impl<EG: EntityGateway> ItemAction<EG> for TradeMeseta {
|
||||
dest_meseta.0 += self.amount as u32;
|
||||
entity_gateway.set_character_meseta(&self.dest_character_id, *dest_meseta).await?;
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn increase_kill_counters<EG: EntityGateway>( &mut self,
|
||||
entity_gateway: &mut EG,
|
||||
character: &CharacterEntity,
|
||||
equipped_items: &EquippedEntity)
|
||||
-> Result<(), anyhow::Error> {
|
||||
let inventory = self.character_inventory.get_mut(&character.id).ok_or(ItemManagerError::NoCharacter(character.id))?;
|
||||
if let Some(weapon_entity) = equipped_items.weapon {
|
||||
println!("updating weapon kill counter for weapon {:?}", weapon_entity);
|
||||
// weapon_entity = &InventoryItem
|
||||
|
||||
// let weapon_id = weapon_entity.item_id();
|
||||
let weapon_id = inventory.get_item_by_entity_id(weapon_entity).ok_or(ItemManagerError::EntityIdNotInInventory(weapon_entity))?.item_id();
|
||||
let mut weapon_handle = inventory.get_item_handle_by_id(weapon_id).ok_or(ItemManagerError::NoSuchItemId(weapon_id))?;
|
||||
// weapon_handle = InventoryItemHandle
|
||||
let individual_item = weapon_handle.item_mut()
|
||||
.ok_or(ItemManagerError::NoSuchItemId(weapon_id))?
|
||||
.individual_mut()
|
||||
.ok_or(ItemManagerError::WrongItemType(weapon_id))?;
|
||||
let weapon = individual_item
|
||||
.weapon_mut()
|
||||
.ok_or(ItemManagerError::WrongItemType(weapon_id))?;
|
||||
|
||||
weapon.increment_kill_counter();
|
||||
entity_gateway.increment_kill_counter(&weapon_entity).await?;
|
||||
entity_gateway.set_character_inventory(&character.id, &inventory.as_inventory_entity(&character.id)).await?;
|
||||
}
|
||||
// for units in equipped_items.unit {
|
||||
// if let Some(unit_id) = units {
|
||||
// println!("UNIMPLEMENTED - updating unit kill counter for unit {:?}", unit_id);
|
||||
// // entity_gateway.increase_kill_counter(&unit_id).await?;
|
||||
// // let unit = inventory.get_item_by_entity_id(&unit_id)
|
||||
// }
|
||||
// }
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
@ -395,6 +395,20 @@ where
|
||||
{
|
||||
let client = clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id))?;
|
||||
item_manager.player_sells_item(entity_gateway, &mut client.character, ClientItemId(sold_item.item_id), sold_item.amount as usize).await?;
|
||||
// TODO: send the packet to other clients
|
||||
Ok(Box::new(None.into_iter())) // TODO: Do clients care about the order of other clients items?
|
||||
}
|
||||
|
||||
pub async fn player_killed_monster<EG>( id: ClientId,
|
||||
pkt: &KillMonster,
|
||||
entity_gateway: &mut EG,
|
||||
clients: &Clients,
|
||||
item_manager: &mut ItemManager)
|
||||
-> Result<Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send>, anyhow::Error>
|
||||
where
|
||||
EG: EntityGateway
|
||||
{
|
||||
let client = clients.get(&id).ok_or(ShipError::ClientNotFound(id))?;
|
||||
let equipped_items = entity_gateway.get_character_equips(&client.character.id).await?;
|
||||
item_manager.increase_kill_counters(entity_gateway, &client.character, &equipped_items).await?;
|
||||
Ok(Box::new(None.into_iter()))
|
||||
}
|
||||
|
@ -520,6 +520,9 @@ impl<EG: EntityGateway> ShipServerState<EG> {
|
||||
GameMessage::PlayerSoldItem(player_sold_item) => {
|
||||
handler::message::player_sells_item(id, player_sold_item, &mut self.entity_gateway, &mut self.clients, &mut self.item_manager).await?
|
||||
},
|
||||
GameMessage::KillMonster(kill_monster) => {
|
||||
handler::message::player_killed_monster(id, kill_monster, &mut self.entity_gateway, &self.clients, &mut self.item_manager).await?
|
||||
},
|
||||
_ => {
|
||||
let cmsg = msg.clone();
|
||||
let block = self.blocks.with_client(id, &self.clients)?;
|
||||
|
@ -148,6 +148,7 @@ impl ShopItem for WeaponShopItem {
|
||||
grind: self.grind as u8,
|
||||
attrs: [self.attributes[0], self.attributes[1], None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ async fn test_bank_items_sent_in_character_login() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -64,6 +65,7 @@ async fn test_request_bank_items() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -153,6 +155,7 @@ async fn test_request_bank_items_sorted() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -173,6 +176,7 @@ async fn test_request_bank_items_sorted() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -219,6 +223,7 @@ async fn test_deposit_individual_item() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -231,6 +236,7 @@ async fn test_deposit_individual_item() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap();
|
||||
@ -567,6 +573,7 @@ async fn test_deposit_individual_item_in_full_bank() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -582,6 +589,7 @@ async fn test_deposit_individual_item_in_full_bank() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -654,6 +662,7 @@ async fn test_deposit_stacked_item_in_full_bank() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -739,6 +748,7 @@ async fn test_deposit_stacked_item_in_full_bank_with_partial_stack() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap().into());
|
||||
@ -909,6 +919,7 @@ async fn test_withdraw_individual_item() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -1242,6 +1253,7 @@ async fn test_withdraw_individual_item_in_full_inventory() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -1257,6 +1269,7 @@ async fn test_withdraw_individual_item_in_full_inventory() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -1325,6 +1338,7 @@ async fn test_withdraw_stacked_item_in_full_inventory() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -1400,6 +1414,7 @@ async fn test_withdraw_stacked_item_in_full_inventory_with_partial_stack() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap().into());
|
||||
|
@ -234,6 +234,7 @@ async fn test_pick_up_meseta_when_inventory_full() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -306,6 +307,7 @@ async fn test_pick_up_partial_stacked_item_when_inventory_is_otherwise_full() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap().into());
|
||||
@ -389,6 +391,7 @@ async fn test_can_not_pick_up_item_when_inventory_full() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -404,6 +407,7 @@ async fn test_can_not_pick_up_item_when_inventory_full() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
|
@ -29,6 +29,7 @@ async fn test_item_ids_reset_when_rejoining_rooms() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
@ -45,6 +46,7 @@ async fn test_item_ids_reset_when_rejoining_rooms() {
|
||||
special: None,
|
||||
attrs: [None, None, None],
|
||||
tekked: true,
|
||||
kills: None,
|
||||
}
|
||||
),
|
||||
}).await.unwrap());
|
||||
|
Loading…
x
Reference in New Issue
Block a user