临时背包

back_recharge
jiahuiwen 2019-03-13 13:46:33 +08:00
parent c259bb3e57
commit 34495dd9b0
3 changed files with 98 additions and 52 deletions

View File

@ -210,11 +210,6 @@ public class MapLogic {
return; return;
} }
} }
if (cells.isEmpty()) {
LOGGER.info("cells.isEmpty()");
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "");
return;
}
int uid = session.getUid(); int uid = session.getUid();
User user = UserManager.getUser(uid); User user = UserManager.getUser(uid);
MapManager mapManager = user.getMapManager(); MapManager mapManager = user.getMapManager();
@ -228,15 +223,21 @@ public class MapLogic {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "");
return; return;
} }
// int leftStep = mapManager.getTotalStep() - cells.size(); if (cells.isEmpty() && curXY != mapManager.getCurXY()) {
// if (leftStep <= 0) { LOGGER.info("cells.isEmpty() && curXY=>{} mapManager.getCurXY()=>{}", curXY, mapManager.getCurXY());
// resetMapInfo(mapManager); MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "");
// LOGGER.info("updateMap() uid=>{}, leftStep=>{}", uid, leftStep); return;
// MapInfoProto.MapUpdateResponse mapUpdateResponse = MapInfoProto.MapUpdateResponse.newBuilder().build(); }
// MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapUpdateResponse, true); int leftStep = mapManager.getTotalStep() - cells.size();
// return; if (leftStep <= 0) {
// } leftStep = 0;
// mapManager.setTotalStep(leftStep); 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); Cell cell = mapManager.getMapInfo().get(curXY);
if (cell == null) { if (cell == null) {
cell = mapManager.getMapInfo().get(triggerXY); cell = mapManager.getMapInfo().get(triggerXY);
@ -251,6 +252,7 @@ public class MapLogic {
mapManager.setCurXY(curXY); mapManager.setCurXY(curXY);
MapInfoProto.MapUpdateResponse mapUpdateResponse = MapInfoProto.MapUpdateResponse.newBuilder() MapInfoProto.MapUpdateResponse mapUpdateResponse = MapInfoProto.MapUpdateResponse.newBuilder()
.setEventId(cell.getEventId()) .setEventId(cell.getEventId())
.setLeftStep(mapManager.getTotalStep())
.build(); .build();
MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapUpdateResponse, true); MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapUpdateResponse, true);
} }
@ -509,11 +511,12 @@ public class MapLogic {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "");
return; return;
} }
resetMapInfo(mapManager); resetMapInfo(user);
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null, true); 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.setMapInfo(new HashMap<>());
mapManager.setHeroes(new HashSet<>()); mapManager.setHeroes(new HashSet<>());
mapManager.setTypeEight(new HashMap<>()); mapManager.setTypeEight(new HashMap<>());
@ -522,9 +525,7 @@ public class MapLogic {
mapManager.setCurMapId(0); mapManager.setCurMapId(0);
TemporaryItems temporaryItems = mapManager.getTemporaryItems(); TemporaryItems temporaryItems = mapManager.getTemporaryItems();
if (temporaryItems != null) { if (temporaryItems != null) {
Map<Integer, Item> items = temporaryItems.items; ItemUtil.addTemporaryItemToBag(user, temporaryItems);
Map<Integer, Equip> equips = temporaryItems.equips;
// ItemUtil.addItem();
} }
} }

View File

@ -20,7 +20,7 @@ public class JumpBehavior extends BaseBehavior {
MapLogic.getInstance().initMap(user.getMapManager(), user); MapLogic.getInstance().initMap(user.getMapManager(), user);
return true; return true;
} else { } else {
MapLogic.getInstance().resetMapInfo(user.getMapManager()); MapLogic.getInstance().resetMapInfo(user);
} }
return true; return true;
} }

View File

@ -289,21 +289,69 @@ public class ItemUtil {
} }
} }
public static void useItem(User user,Map<Integer,Integer> useItemMap) throws Exception{ /**
*
* @param user
* @param temporaryItems
* @throws Exception
*/
public static void addTemporaryItemToBag(User user, TemporaryItems temporaryItems) throws Exception {
Map<Integer, Item> items = temporaryItems.items;
Map<Integer, Equip> equips = temporaryItems.equips;
if (items.isEmpty() && equips.isEmpty()) {
return;
}
Map<Integer, Item> itemMap = user.getItemManager().getItemMap();
for (Map.Entry<Integer, Item> 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<Integer,Integer> useItemMap) throws Exception{
if(useItemMap.isEmpty()){ if(useItemMap.isEmpty()){
return; return;
} }
ItemManager itemManager = user.getItemManager(); ItemManager itemManager = user.getItemManager();
Map<Integer, Item> temporaryItemList = new HashMap<>();
TemporaryItems temporaryItems = user.getMapManager().getTemporaryItems();
if (temporaryItems != null) {
temporaryItemList = temporaryItems.items;
}
for (Map.Entry<Integer, Integer> userItem : useItemMap.entrySet()) { for (Map.Entry<Integer, Integer> 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()); Item myItem = itemManager.getItem(userItem.getKey());
if( null == myItem){ if (null == myItem) {
continue; continue;
} }
int needCount = userItem.getValue(); if (myItem.getItemNum() <= needCount) {
if(myItem.getItemNum()<=needCount){
itemManager.removeItem(userItem.getKey()); itemManager.removeItem(userItem.getKey());
}else{ } else {
myItem.setItemNum( myItem.getItemNum() - needCount); myItem.setItemNum(myItem.getItemNum() - needCount);
} }
} }
} }
@ -379,14 +427,12 @@ public class ItemUtil {
public static boolean itemCost(User user,int[][] costItems) throws Exception { public static boolean itemCost(User user,int[][] costItems) throws Exception {
Map<Integer, Integer> itemMap = new HashMap<>(); Map<Integer, Integer> itemMap = new HashMap<>();
Map<Integer, Integer> moneyMap = new HashMap<>(); selectCost(costItems,itemMap);
selectCost(costItems,itemMap,moneyMap); boolean result = checkCost(user, itemMap);
boolean result = checkCost(user, itemMap, moneyMap);
if (!result) { if (!result) {
return false; return false;
} }
useItem(user, itemMap); useItem(user, itemMap);
// useMoney(user, moneyMap);
return true; return true;
} }
@ -400,41 +446,40 @@ public class ItemUtil {
} }
} }
private static boolean checkCost(User user, Map<Integer, Integer> itemMap, Map<Integer, Integer> moneyMap) { private static boolean checkCost(User user, Map<Integer, Integer> itemMap) {
if (itemMap != null) { if (itemMap == null) {
return true;
}
TemporaryItems temporaryItems = user.getMapManager().getTemporaryItems();
Map<Integer, Item> temporaryItemList = new HashMap<>();
if (temporaryItems != null) {
temporaryItemList = temporaryItems.items;
}
for (Map.Entry<Integer, Integer> entry : itemMap.entrySet()) { for (Map.Entry<Integer, Integer> entry : itemMap.entrySet()) {
Item temporaryItem = temporaryItemList.get(entry.getKey());
if (temporaryItem == null || temporaryItem.getItemNum() < entry.getValue()) {
Item item = user.getItemManager().getItem(entry.getKey()); 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; return false;
} }
} }
} }
// if (moneyMap != null) {
// for (Map.Entry<Integer, Integer> 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<Integer, Integer> itemMap, Map<Integer, Integer> moneyMap) { private static void selectCost(int[][] costItems, Map<Integer, Integer> itemMap) {
for (int[] costItem : costItems){ for (int[] costItem : costItems){
int itemId = costItem[0]; int itemId = costItem[0];
int itemNum = costItem[1]; int itemNum = costItem[1];
SItem sItem = SItem.getsItemMap().get(itemId); SItem sItem = SItem.getsItemMap().get(itemId);
int itemType = getItemType(sItem); int itemType = getItemType(sItem);
switch (itemType) { switch (itemType) {
case GlobalItemType.GEM:
putcountMap(itemId,itemNum,moneyMap);
break;
case GlobalItemType.ITEM: case GlobalItemType.ITEM:
putcountMap(itemId,itemNum,itemMap); putcountMap(itemId,itemNum,itemMap);
break; break;