Browse Source

remove 3rd attr for killcounter weapons and fix tests

kill_counters
andy 3 years ago
parent
commit
0976bd9ab0
  1. 18
      src/ship/drops/rare_drop_table.rs
  2. 4
      src/ship/packet/handler/direct_message.rs
  3. 1
      src/ship/ship.rs
  4. 58
      tests/test_unseal_items.rs

18
src/ship/drops/rare_drop_table.rs

@ -97,21 +97,19 @@ impl RareDropTable {
pub fn apply_item_stats<R: Rng>(&self, map_area: &MapArea, item: RareDropItem, rng: &mut R) -> ItemDropType {
match item {
RareDropItem::Weapon(weapon) => {
ItemDropType::Weapon(Weapon {
let mut dropped_weapon = Weapon {
weapon,
special: None,
grind: 0,
attrs: self.attribute_table.generate_rare_attributes(map_area, rng),
tekked: false,
kills: {
if weapon.has_counter() {
Some(0)
} else {
None
}
},
})
kills: None,
};
if dropped_weapon.weapon.has_counter() {
dropped_weapon.attrs[2] = None;
dropped_weapon.kills = Some(0);
};
ItemDropType::Weapon(dropped_weapon)
},
RareDropItem::Armor(armor) => {
ItemDropType::Armor(Armor {

4
src/ship/packet/handler/direct_message.rs

@ -79,7 +79,6 @@ pub async fn request_item<EG>(id: ClientId,
where
EG: EntityGateway
{
println!("src::ship::packet::handler::request_item() - requesting an item!");
let room_id = client_location.get_room(id).map_err(|err| -> ClientLocationError { err.into() })?;
let room = rooms.get_mut(room_id.0)
.ok_or(ShipError::InvalidRoom(room_id.0 as u32))?
@ -87,9 +86,7 @@ where
.ok_or(ShipError::InvalidRoom(room_id.0 as u32))?;
let monster = room.maps.enemy_by_id(request_item.enemy_id as usize)?;
println!("room id: {:?}, monster: {:?}", room_id, monster);
if monster.dropped_item {
println!("monster {:?} already dropped an item!", monster);
return Err(ShipError::MonsterAlreadyDroppedItem(id, request_item.enemy_id).into())
}
@ -98,7 +95,6 @@ where
let client_and_drop = clients_in_area.into_iter()
.filter_map(|area_client| {
if room.redbox {
println!("red box mode is currently enabled. dropping red box!");
room.drop_table.get_rare_drop(&monster.map_area, &monster.monster).map(|item_drop_type| {
(area_client, item_drop_type)
})

1
src/ship/ship.rs

@ -542,7 +542,6 @@ impl<EG: EntityGateway> ShipServerState<EG> {
handler::direct_message::guildcard_send(id, guildcard_send, target, &block.client_location, &self.clients)
},
GameMessage::RequestItem(request_item) => {
println!("someone requested an item from the ship!");
handler::direct_message::request_item(id, request_item, &mut self.entity_gateway, &block.client_location, &mut self.clients, &mut block.rooms, &mut self.item_manager).await?
},
GameMessage::PickupItem(pickup_item) => {

58
tests/test_unseal_items.rs

@ -40,58 +40,11 @@ async fn test_item_drops_with_kill_counter() {
join_lobby(&mut ship, ClientId(1)).await;
create_ep2_room_with_difficulty(&mut ship, ClientId(1), "room", "", Difficulty::Ultimate).await;
// ship.handle(ClientId(1), &RecvShipPacket()).await.unwrap().for_each(drop);
// ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::PlayerWarpingToFloor(PlayerWarpingToFloor{
// client: 0,
// target: 0,
// area: 9, // seaside
// data: 0,
// })))).await.unwrap().for_each(drop);
// ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::PlayerWarping(PlayerWarping{
// client: 0,
// target: 0,
// })))).await.unwrap().for_each(drop);
// ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::PlayerLoadedIn(PlayerLoadedIn{
// client: 0,
// target: 0,
// unknown1: [0,0],
// rotation: 0,
// area: 9,
// room: 1,
// x: 100.0,
// y: 10.0,
// z: -20.0,
// })))).await.unwrap().for_each(drop);
// ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::PlayerChangedMap2(PlayerChangedMap2{
// client: 0,
// target: 0,
// map_area: 9,
// _unknown1: 0,
// })))).await.unwrap().for_each(drop);
// ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::PlayerSpawnedIntoArea(PlayerSpawnedIntoArea{
// client: 0,
// target: 0,
// })))).await.unwrap().for_each(drop);
// ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::PlayerDoneChangingMap(PlayerDoneChangingMap{
// client: 0,
// target: 0,
// })))).await.unwrap().for_each(drop);
let room = ship.blocks.0[0].rooms[0].as_mut().unwrap();
room.toggle_redbox_mode(); // enable redbox mode for sjs
// println!("room redbox mode: {:?}", room.redbox);
// println!("room.mode: {:?}", room.mode);
// println!("killing gigue for sjs!");
let gigue_id = room.maps.get_enemy_id_by_monster_type(MonsterType::GiGue).unwrap();
// println!("found gigue id: {:?}!", gigue_id);
let packets = ship.handle(ClientId(1), &RecvShipPacket::DirectMessage(DirectMessage::new(0, GameMessage::RequestItem(RequestItem {
client: 0,
target: 0,
@ -108,7 +61,7 @@ async fn test_item_drops_with_kill_counter() {
SendShipPacket::Message(Message {msg: GameMessage::ItemDrop(item_drop)}) => {
assert_eq!(item_drop.item_bytes[10], 0x80)
}
_ => panic!("")
_ => panic!("SJS didn't drop with the expected value! attr[2] should be 0x80 (128) for 0 kills")
}
}
@ -156,18 +109,15 @@ async fn test_all_equipped_kill_counters_increase_per_kill() {
unit: [Some(p1_inv[1].id), None, None, None],
mag: None,
};
entity_gateway.set_character_equips(&char1.id, &equipped).await.unwrap();
entity_gateway.set_character_inventory(&char1.id, &item::InventoryEntity::new(p1_inv)).await.unwrap();
log_in_char(&mut ship, ClientId(1), "a1", "a").await;
join_lobby(&mut ship, ClientId(1)).await;
create_room(&mut ship, ClientId(1), "room", "").await;
assert!(true);
}
// #[async_std::test]

Loading…
Cancel
Save