From dde0d8fa38800bc208d2aaa7e9b8dfb35d395940 Mon Sep 17 00:00:00 2001 From: alterwain Date: Thu, 3 Apr 2025 19:01:05 +0300 Subject: [PATCH] House inventory update --- .../alterdekim/game/component/GameServer.java | 18 ++++++++++++++---- .../component/game/AvatarInventoryType.java | 1 + .../game/component/game/CommandType.java | 1 + .../game/controller/SignUpController.java | 2 ++ .../game/controller/StaticController.java | 6 +----- .../game/entity/LocationObjectInstance.java | 3 +++ .../game/message/amf/AMFDeserializer.java | 4 +++- .../repository/HouseInventoryRepository.java | 5 +++++ .../game/service/HomeInventoryService.java | 6 ++++++ .../game/service/LocationService.java | 6 ++++-- .../alterdekim/game/service/UserService.java | 2 +- 11 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/alterdekim/game/component/GameServer.java b/src/main/java/com/alterdekim/game/component/GameServer.java index 49a0597..2ac7e4f 100644 --- a/src/main/java/com/alterdekim/game/component/GameServer.java +++ b/src/main/java/com/alterdekim/game/component/GameServer.java @@ -319,11 +319,21 @@ public class GameServer { int type = message.getArguments().get(1).getInt(); if( type == -2 ) { // home Map info = (Map) message.getArguments().get(2).getRaw(); - Map additions = (Map) info.get("Add").getRaw(); - this.homeInventoryService.addFurnitureToCurrentHome(playerId, additions); - Map changes = (Map) info.get("Changes").getRaw(); - this.homeInventoryService.addFurnitureToCurrentHome(playerId, changes); + if( info.containsKey("Add") ) { + Map additions = (Map) info.get("Add").getRaw(); + this.homeInventoryService.addFurnitureToCurrentHome(playerId, additions); + } + + if( info.containsKey("Changes") ) { + Map changes = (Map) info.get("Changes").getRaw(); + this.homeInventoryService.addFurnitureToCurrentHome(playerId, changes); + } + + if( info.containsKey("Remove") ) { + Map remove = (Map) info.get("Remove").getRaw(); + this.homeInventoryService.removeFurnitureFromHome(playerId, remove.keySet()); + } return; } // club diff --git a/src/main/java/com/alterdekim/game/component/game/AvatarInventoryType.java b/src/main/java/com/alterdekim/game/component/game/AvatarInventoryType.java index b5bb738..94f481a 100644 --- a/src/main/java/com/alterdekim/game/component/game/AvatarInventoryType.java +++ b/src/main/java/com/alterdekim/game/component/game/AvatarInventoryType.java @@ -26,6 +26,7 @@ public enum AvatarInventoryType { Smile(-5), House(34), HouseFurniture(20), + HouseFurnitureWall(22), Club(58), ClubFacade(63), ClubShow(78), diff --git a/src/main/java/com/alterdekim/game/component/game/CommandType.java b/src/main/java/com/alterdekim/game/component/game/CommandType.java index 0fc33ac..7cb6389 100644 --- a/src/main/java/com/alterdekim/game/component/game/CommandType.java +++ b/src/main/java/com/alterdekim/game/component/game/CommandType.java @@ -8,6 +8,7 @@ import lombok.Getter; public enum CommandType { UserCommand("$"), SetLocation("_LS"), + LocationChanges("_LC"), RemoveUserFromLocation("_UL"), AddUserToLocation("_UE"), SetUserAvatarState("_S"), diff --git a/src/main/java/com/alterdekim/game/controller/SignUpController.java b/src/main/java/com/alterdekim/game/controller/SignUpController.java index 16a9afc..8773636 100644 --- a/src/main/java/com/alterdekim/game/controller/SignUpController.java +++ b/src/main/java/com/alterdekim/game/controller/SignUpController.java @@ -108,6 +108,8 @@ public class SignUpController { avatarInventoryService.addPhoneToInventory(userId, 1L); avatarInventoryService.addBackgroundToInventory(userId, 339L); + avatarInventoryService.addGoodToInventory(new AvatarInventory(referenceLoader.getUserReference(userId), 102L, true, AvatarInventoryType.House)); + try { av.getInventory() .stream() diff --git a/src/main/java/com/alterdekim/game/controller/StaticController.java b/src/main/java/com/alterdekim/game/controller/StaticController.java index 51bf326..5219e9a 100644 --- a/src/main/java/com/alterdekim/game/controller/StaticController.java +++ b/src/main/java/com/alterdekim/game/controller/StaticController.java @@ -51,9 +51,6 @@ public class StaticController { @Autowired private ReferenceLoader referenceLoader; - @Autowired - private AvatarInventoryService avatarInventoryService; - @Autowired private GoodsService goodsService; @@ -101,8 +98,7 @@ public class StaticController { model.addAttribute("user_id", userId); model.addAttribute("user_name", "Inventory of " + userService.getUsernameById(userId).get()); - AvatarInventory av = new AvatarInventory(referenceLoader.getUserReference(userId), goodId, false, AvatarInventoryType.fromGoodId(goodsService, goodId), 0); - avatarInventoryService.addGoodToInventory(av); + userService.pushToInventory(userId, AvatarInventoryType.fromGoodId(goodsService, goodId), goodId); return "redirect:/panel_inventory?id="+userId; } diff --git a/src/main/java/com/alterdekim/game/entity/LocationObjectInstance.java b/src/main/java/com/alterdekim/game/entity/LocationObjectInstance.java index 61dc0af..3439173 100644 --- a/src/main/java/com/alterdekim/game/entity/LocationObjectInstance.java +++ b/src/main/java/com/alterdekim/game/entity/LocationObjectInstance.java @@ -57,6 +57,9 @@ public class LocationObjectInstance implements ApiResult { @Column(nullable = false) private String comment; + @JacksonXmlProperty(isAttribute = true, localName = "Frame") + private Integer frame; + @Override public LocationObjectInstanceResult toAPIResult() { return new LocationObjectInstanceResult(this.id, this.objectTypeId, this.objectId, this.objectReferenceId, this.mediaResourceId, this.locationId, this.x, this.y, this.options, this.comment); diff --git a/src/main/java/com/alterdekim/game/message/amf/AMFDeserializer.java b/src/main/java/com/alterdekim/game/message/amf/AMFDeserializer.java index 4c59ea0..06954ee 100644 --- a/src/main/java/com/alterdekim/game/message/amf/AMFDeserializer.java +++ b/src/main/java/com/alterdekim/game/message/amf/AMFDeserializer.java @@ -72,7 +72,9 @@ public class AMFDeserializer { a.clear(); if( keyLen == 0 ) { endMarker = true; - bytes.remove(); + if( !bytes.isEmpty() ) { + bytes.remove(); + } continue; } a = bytes.subList(0, Math.min(keyLen, bytes.size())); diff --git a/src/main/java/com/alterdekim/game/repository/HouseInventoryRepository.java b/src/main/java/com/alterdekim/game/repository/HouseInventoryRepository.java index 835c314..e3d5a6e 100644 --- a/src/main/java/com/alterdekim/game/repository/HouseInventoryRepository.java +++ b/src/main/java/com/alterdekim/game/repository/HouseInventoryRepository.java @@ -23,4 +23,9 @@ public interface HouseInventoryRepository extends JpaRepository findByUserIdAndHouseId(@Param("uid") Integer userId, @Param("houseId") Long houseId); + + @Transactional + @Modifying + @Query(value = "UPDATE HouseInventory h SET h.homeId = -1 WHERE h.id = :uid") + void resetHomeId(@Param("uid") Long id); } diff --git a/src/main/java/com/alterdekim/game/service/HomeInventoryService.java b/src/main/java/com/alterdekim/game/service/HomeInventoryService.java index f7e22a7..6dc7bbe 100644 --- a/src/main/java/com/alterdekim/game/service/HomeInventoryService.java +++ b/src/main/java/com/alterdekim/game/service/HomeInventoryService.java @@ -35,6 +35,12 @@ public class HomeInventoryService { @Autowired private GoodRepository goodRepository; + public void removeFurnitureFromHome(int userId, Set ids) { + for( String id : ids ) { + houseInventoryRepository.resetHomeId(Long.parseLong(id)); + } + } + public void addFurnitureToCurrentHome(int userId, Map additions) { Set ids = additions.keySet(); long houseId = getCurrentHouseId(userId); diff --git a/src/main/java/com/alterdekim/game/service/LocationService.java b/src/main/java/com/alterdekim/game/service/LocationService.java index 3a2be2a..181311a 100644 --- a/src/main/java/com/alterdekim/game/service/LocationService.java +++ b/src/main/java/com/alterdekim/game/service/LocationService.java @@ -87,7 +87,8 @@ public class LocationService { houseInventoryRepository.findByUserIdAndHouseId(userId, avatarInventoryService.getUsedHouse(userId).map(AvatarInventory::getId).orElse(-1L)) .stream() .map(h -> new LocationObjectInstance( - 2, + h.getId(), + 1, h.getId().intValue(), h.getGoodId().intValue(), goodRepository.findById(h.getGoodId()).get().getMRId().longValue(), @@ -95,7 +96,8 @@ public class LocationService { h.getX(), h.getY(), "", - "" + "", + h.getFrame() )) .collect(Collectors.toList()) ); diff --git a/src/main/java/com/alterdekim/game/service/UserService.java b/src/main/java/com/alterdekim/game/service/UserService.java index e16b369..5fbcb6c 100644 --- a/src/main/java/com/alterdekim/game/service/UserService.java +++ b/src/main/java/com/alterdekim/game/service/UserService.java @@ -362,7 +362,7 @@ public class UserService { if( !this.inventoryService.isSpecificItemExists(userId, type, goodId) ) { this.inventoryService.addGoodToInventory(new AvatarInventory(userRepository.getReferenceById(userId), goodId, false, type)); } - if( type == AvatarInventoryType.HouseFurniture ) { + if( type == AvatarInventoryType.HouseFurniture || type == AvatarInventoryType.HouseFurnitureWall ) { houseInventoryRepository.save(new HouseInventory(userRepository.getReferenceById(userId), goodId, -1L, 0.0, 0.0, 0)); } }