From 34495dd9b0a842abc656a64cc4fb63ede0c92622 Mon Sep 17 00:00:00 2001 From: jiahuiwen <1024696487@qq.com> Date: Wed, 13 Mar 2019 13:46:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E8=83=8C=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/handler/map/MapLogic.java | 39 ++++--- .../handler/map/behavior/JumpBehavior.java | 2 +- .../java/com/ljsd/jieling/util/ItemUtil.java | 109 +++++++++++++----- 3 files changed, 98 insertions(+), 52 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 5a3c973be..f1433e702 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -210,11 +210,6 @@ public class MapLogic { return; } } - if (cells.isEmpty()) { - LOGGER.info("cells.isEmpty()"); - MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); - return; - } int uid = session.getUid(); User user = UserManager.getUser(uid); MapManager mapManager = user.getMapManager(); @@ -228,15 +223,21 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); return; } -// int leftStep = mapManager.getTotalStep() - cells.size(); -// if (leftStep <= 0) { -// resetMapInfo(mapManager); -// LOGGER.info("updateMap() uid=>{}, leftStep=>{}", uid, leftStep); -// MapInfoProto.MapUpdateResponse mapUpdateResponse = MapInfoProto.MapUpdateResponse.newBuilder().build(); -// MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapUpdateResponse, true); -// return; -// } -// mapManager.setTotalStep(leftStep); + if (cells.isEmpty() && curXY != mapManager.getCurXY()) { + LOGGER.info("cells.isEmpty() && curXY=>{} mapManager.getCurXY()=>{}", curXY, mapManager.getCurXY()); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); + return; + } + int leftStep = mapManager.getTotalStep() - cells.size(); + if (leftStep <= 0) { + leftStep = 0; + resetMapInfo(user); + LOGGER.info("updateMap() uid=>{}, leftStep=>{}", uid, leftStep); + MapInfoProto.MapUpdateResponse mapUpdateResponse = MapInfoProto.MapUpdateResponse.newBuilder().build(); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapUpdateResponse, true); + return; + } + mapManager.setTotalStep(leftStep); Cell cell = mapManager.getMapInfo().get(curXY); if (cell == null) { cell = mapManager.getMapInfo().get(triggerXY); @@ -251,6 +252,7 @@ public class MapLogic { mapManager.setCurXY(curXY); MapInfoProto.MapUpdateResponse mapUpdateResponse = MapInfoProto.MapUpdateResponse.newBuilder() .setEventId(cell.getEventId()) + .setLeftStep(mapManager.getTotalStep()) .build(); MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapUpdateResponse, true); } @@ -509,11 +511,12 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); return; } - resetMapInfo(mapManager); + resetMapInfo(user); MessageUtil.sendMessage(session, 1, messageType.getNumber(), null, true); } - public void resetMapInfo(MapManager mapManager) throws Exception { + public void resetMapInfo(User user) throws Exception { + MapManager mapManager = user.getMapManager(); mapManager.setMapInfo(new HashMap<>()); mapManager.setHeroes(new HashSet<>()); mapManager.setTypeEight(new HashMap<>()); @@ -522,9 +525,7 @@ public class MapLogic { mapManager.setCurMapId(0); TemporaryItems temporaryItems = mapManager.getTemporaryItems(); if (temporaryItems != null) { - Map items = temporaryItems.items; - Map equips = temporaryItems.equips; -// ItemUtil.addItem(); + ItemUtil.addTemporaryItemToBag(user, temporaryItems); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/JumpBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/JumpBehavior.java index e0ec5ee11..24630bb14 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/JumpBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/JumpBehavior.java @@ -20,7 +20,7 @@ public class JumpBehavior extends BaseBehavior { MapLogic.getInstance().initMap(user.getMapManager(), user); return true; } else { - MapLogic.getInstance().resetMapInfo(user.getMapManager()); + MapLogic.getInstance().resetMapInfo(user); } return true; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 67248f108..959faee44 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -289,21 +289,69 @@ public class ItemUtil { } } - public static void useItem(User user,Map useItemMap) throws Exception{ + /** + * 临时背包到背包 + * @param user + * @param temporaryItems + * @throws Exception + */ + public static void addTemporaryItemToBag(User user, TemporaryItems temporaryItems) throws Exception { + Map items = temporaryItems.items; + Map equips = temporaryItems.equips; + if (items.isEmpty() && equips.isEmpty()) { + return; + } + Map itemMap = user.getItemManager().getItemMap(); + for (Map.Entry entry : items.entrySet()) { + SItem sItem = SItem.getsItemMap().get (entry.getKey()); + if (sItem == null){ + continue; + } + if (sItem.getIsSave() != 1) { + continue; + } + Item item = itemMap.get(entry.getKey()); + if (item != null) { + Item temporaryItem = entry.getValue(); + item.setItemNum(item.getItemNum() + temporaryItem.getItemNum()); + } + itemMap.put(entry.getKey(), item) ; + } + user.getItemManager().setItemMap(itemMap); + user.getMapManager().setTemporaryItems(null); + } + + private static void useItem(User user,Map useItemMap) throws Exception{ if(useItemMap.isEmpty()){ return; } ItemManager itemManager = user.getItemManager(); + Map temporaryItemList = new HashMap<>(); + TemporaryItems temporaryItems = user.getMapManager().getTemporaryItems(); + if (temporaryItems != null) { + temporaryItemList = temporaryItems.items; + } for (Map.Entry userItem : useItemMap.entrySet()) { + Item temporaryItem = temporaryItemList.get(userItem.getKey()); + int needCount = userItem.getValue(); + if (temporaryItem != null) { + int leftNum = temporaryItem.getItemNum() - needCount; + if (leftNum >= 0) { + temporaryItem.setItemNum(leftNum); + continue; + } else { + temporaryItemList.remove(userItem.getKey()); + needCount = Math.abs(leftNum); + } + } Item myItem = itemManager.getItem(userItem.getKey()); - if( null == myItem){ + if (null == myItem) { continue; } - int needCount = userItem.getValue(); - if(myItem.getItemNum()<=needCount){ + if (myItem.getItemNum() <= needCount) { itemManager.removeItem(userItem.getKey()); - }else{ - myItem.setItemNum( myItem.getItemNum() - needCount); + } else { + myItem.setItemNum(myItem.getItemNum() - needCount); } } } @@ -379,14 +427,12 @@ public class ItemUtil { public static boolean itemCost(User user,int[][] costItems) throws Exception { Map itemMap = new HashMap<>(); - Map moneyMap = new HashMap<>(); - selectCost(costItems,itemMap,moneyMap); - boolean result = checkCost(user, itemMap, moneyMap); + selectCost(costItems,itemMap); + boolean result = checkCost(user, itemMap); if (!result) { return false; } useItem(user, itemMap); -// useMoney(user, moneyMap); return true; } @@ -400,41 +446,40 @@ public class ItemUtil { } } - private static boolean checkCost(User user, Map itemMap, Map moneyMap) { - if (itemMap != null) { - for (Map.Entry entry : itemMap.entrySet()) { + private static boolean checkCost(User user, Map itemMap) { + if (itemMap == null) { + return true; + } + TemporaryItems temporaryItems = user.getMapManager().getTemporaryItems(); + Map temporaryItemList = new HashMap<>(); + if (temporaryItems != null) { + temporaryItemList = temporaryItems.items; + } + for (Map.Entry entry : itemMap.entrySet()) { + Item temporaryItem = temporaryItemList.get(entry.getKey()); + if (temporaryItem == null || temporaryItem.getItemNum() < entry.getValue()) { Item item = user.getItemManager().getItem(entry.getKey()); - if (item == null || item.getItemNum() < entry.getValue()) { + if (item == null) { + return false; + } + if (temporaryItem == null && item.getItemNum() < entry.getValue()) { + return false; + } + if (temporaryItem != null && temporaryItem.getItemNum() + item.getItemNum() < entry.getValue()) { return false; } } } -// if (moneyMap != null) { -// for (Map.Entry entry : moneyMap.entrySet()) { -// int count = 0; -// if (entry.getKey() == GlobalItemType.GEM) { -// count = user.getPlayerInfoManager().getGem(); -// } -// if (count < entry.getValue()) { -// return false; -// } -// } -// } - - return true; - + return true; } - private static void selectCost(int[][] costItems, Map itemMap, Map moneyMap) { + private static void selectCost(int[][] costItems, Map itemMap) { for (int[] costItem : costItems){ int itemId = costItem[0]; int itemNum = costItem[1]; SItem sItem = SItem.getsItemMap().get(itemId); int itemType = getItemType(sItem); switch (itemType) { - case GlobalItemType.GEM: - putcountMap(itemId,itemNum,moneyMap); - break; case GlobalItemType.ITEM: putcountMap(itemId,itemNum,itemMap); break;