fix problem where item drops were not pickup-able
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is failing
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	continuous-integration/drone/push Build is failing
				
			This commit is contained in:
		
							parent
							
								
									f80e37c438
								
							
						
					
					
						commit
						f5fea8540e
					
				| @ -117,7 +117,7 @@ where | ||||
|             z: request_item.z, | ||||
|             item: item_drop, | ||||
|         }; | ||||
|         let character_id = clients.with(id, |client| Box::pin(async move { | ||||
|         let character_id = clients.with(area_client.client, |client| Box::pin(async move { | ||||
|             client.character.id | ||||
|         })).await?; | ||||
| 
 | ||||
|  | ||||
| @ -71,6 +71,140 @@ async fn test_enemy_drops_item() { | ||||
|         }, | ||||
|         _ => panic!(), | ||||
|     } | ||||
|     
 | ||||
| } | ||||
| 
 | ||||
| #[async_std::test] | ||||
| async fn test_enemy_drops_item_for_two_players() { | ||||
|     let mut entity_gateway = InMemoryGateway::default(); | ||||
|     let (_user1, _char1) = new_user_character(&mut entity_gateway, "a1", "a", 1).await; | ||||
|     let (_user2, _char2) = new_user_character(&mut entity_gateway, "a2", "a", 1).await; | ||||
| 
 | ||||
|     let mut ship = Box::new(ShipServerState::builder() | ||||
|                             .gateway(entity_gateway.clone()) | ||||
|                             .map_builder(Box::new(|_room_mode, _event| { | ||||
|                                 Maps::new( | ||||
|                                     vec![MapVariant::new(MapArea::Forest2, MapVariantMode::Online)], | ||||
|                                     vec![Some(MapEnemy::new(MonsterType::Hildebear, MapArea::Forest2))], | ||||
|                                     Vec::new(), | ||||
|                                 ) | ||||
|                             })) | ||||
|                             .drop_table_builder(Box::new(|episode, difficulty, section_id| { | ||||
|                                 DropTable::builder() | ||||
|                                     .monster_stat(MonsterType::Hildebear, MonsterDropStats { | ||||
|                                         dar: 100, | ||||
|                                         drop_type: MonsterDropType::Weapon, | ||||
|                                         min_meseta: 0, | ||||
|                                         max_meseta: 0, | ||||
|                                     }) | ||||
|                                     .rare_table(RareDropTable::builder() | ||||
|                                                 .rate(MonsterType::Hildebear, RareDropRate { | ||||
|                                                     rate: 1.0, | ||||
|                                                     item: RareDropItem::Weapon(WeaponType::DarkFlow) | ||||
|                                                 }) | ||||
|                                                 .build(episode, difficulty, section_id)) | ||||
|                                     .build(episode, difficulty, section_id) | ||||
|                             })) | ||||
|                             .build()); | ||||
|     log_in_char(&mut ship, ClientId(1), "a1", "a").await; | ||||
|     log_in_char(&mut ship, ClientId(2), "a2", "a").await; | ||||
|     join_lobby(&mut ship, ClientId(1)).await; | ||||
|     join_lobby(&mut ship, ClientId(2)).await; | ||||
|     create_room(&mut ship, ClientId(1), "room", "").await; | ||||
|     join_room(&mut ship, ClientId(2), 0).await; | ||||
| 
 | ||||
|     let pkt = ship.handle(ClientId(1), RecvShipPacket::DirectMessage(DirectMessage::new(0, GameMessage::RequestItem(RequestItem { | ||||
|         client: 0, | ||||
|         target: 0, | ||||
|         map_area: 2, | ||||
|         pt_index: 0, | ||||
|         enemy_id: 0, | ||||
|         x: 0.0, | ||||
|         z: 0.0, | ||||
|         y: 0.0, | ||||
|     })))).await.unwrap(); | ||||
| 
 | ||||
|     assert_eq!(pkt[0].0, ClientId(1)); | ||||
|     match &pkt[0].1 { | ||||
|         SendShipPacket::Message(Message{msg: GameMessage::ItemDrop(item_drop)}) => { | ||||
|             assert_eq!(item_drop.item_id, 0x810001); | ||||
|             assert_eq!(item_drop.item_bytes[1], 0x9D); | ||||
|         }, | ||||
|         _ => panic!(), | ||||
|     } | ||||
|     assert_eq!(pkt[1].0, ClientId(2)); | ||||
|     match &pkt[1].1 { | ||||
|         SendShipPacket::Message(Message{msg: GameMessage::ItemDrop(item_drop)}) => { | ||||
|             assert_eq!(item_drop.item_id, 0x810002); | ||||
|             assert_eq!(item_drop.item_bytes[1], 0x9D); | ||||
|         }, | ||||
|         _ => panic!(), | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[async_std::test] | ||||
| async fn test_enemy_drops_item_for_two_players_and_pick_up() { | ||||
|     let mut entity_gateway = InMemoryGateway::default(); | ||||
|     let (_user1, _char1) = new_user_character(&mut entity_gateway, "a1", "a", 1).await; | ||||
|     let (_user2, _char2) = new_user_character(&mut entity_gateway, "a2", "a", 1).await; | ||||
| 
 | ||||
|     let mut ship = Box::new(ShipServerState::builder() | ||||
|                             .gateway(entity_gateway.clone()) | ||||
|                             .map_builder(Box::new(|_room_mode, _event| { | ||||
|                                 Maps::new( | ||||
|                                     vec![MapVariant::new(MapArea::Forest2, MapVariantMode::Online)], | ||||
|                                     vec![Some(MapEnemy::new(MonsterType::Hildebear, MapArea::Forest2))], | ||||
|                                     Vec::new(), | ||||
|                                 ) | ||||
|                             })) | ||||
|                             .drop_table_builder(Box::new(|episode, difficulty, section_id| { | ||||
|                                 DropTable::builder() | ||||
|                                     .monster_stat(MonsterType::Hildebear, MonsterDropStats { | ||||
|                                         dar: 100, | ||||
|                                         drop_type: MonsterDropType::Weapon, | ||||
|                                         min_meseta: 0, | ||||
|                                         max_meseta: 0, | ||||
|                                     }) | ||||
|                                     .rare_table(RareDropTable::builder() | ||||
|                                                 .rate(MonsterType::Hildebear, RareDropRate { | ||||
|                                                     rate: 1.0, | ||||
|                                                     item: RareDropItem::Weapon(WeaponType::DarkFlow) | ||||
|                                                 }) | ||||
|                                                 .build(episode, difficulty, section_id)) | ||||
|                                     .build(episode, difficulty, section_id) | ||||
|                             })) | ||||
|                             .build()); | ||||
|     log_in_char(&mut ship, ClientId(1), "a1", "a").await; | ||||
|     log_in_char(&mut ship, ClientId(2), "a2", "a").await; | ||||
|     join_lobby(&mut ship, ClientId(1)).await; | ||||
|     join_lobby(&mut ship, ClientId(2)).await; | ||||
|     create_room(&mut ship, ClientId(1), "room", "").await; | ||||
|     join_room(&mut ship, ClientId(2), 0).await; | ||||
| 
 | ||||
|     ship.handle(ClientId(1), RecvShipPacket::DirectMessage(DirectMessage::new(0, GameMessage::RequestItem(RequestItem { | ||||
|         client: 0, | ||||
|         target: 0, | ||||
|         map_area: 2, | ||||
|         pt_index: 0, | ||||
|         enemy_id: 0, | ||||
|         x: 0.0, | ||||
|         z: 0.0, | ||||
|         y: 0.0, | ||||
|     })))).await.unwrap(); | ||||
| 
 | ||||
|     ship.handle(ClientId(2), RecvShipPacket::DirectMessage(DirectMessage::new(0, GameMessage::PickupItem(PickupItem { | ||||
|         client: 0, | ||||
|         target: 0, | ||||
|         item_id: 0x810002, | ||||
|         map_area: 0, | ||||
|         unknown: [0; 3] | ||||
|     })))).await.unwrap(); | ||||
| 
 | ||||
|     ship.handle(ClientId(1), RecvShipPacket::DirectMessage(DirectMessage::new(0, GameMessage::PickupItem(PickupItem { | ||||
|         client: 0, | ||||
|         target: 0, | ||||
|         item_id: 0x810001, | ||||
|         map_area: 0, | ||||
|         unknown: [0; 3] | ||||
|     })))).await.unwrap(); | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user