diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SItem.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SItem.java index eb78873e9..dea3e49dc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SItem.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SItem.java @@ -19,6 +19,7 @@ public class SItem implements BaseConfig { private int rewardGroup; private int usePerCount; private boolean isopen; + private int isSave; @Override public void init() throws Exception { @@ -68,4 +69,8 @@ public class SItem implements BaseConfig { public boolean isIsopen() { return isopen; } + + public int getIsSave() { + return isSave; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/EventType.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/EventType.java index 96f2ea6a0..8904dfedb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/EventType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/EventType.java @@ -45,9 +45,9 @@ public class EventType { * 行为参数:事件点id * 16 消耗道具并销毁事件点 * 行为参数:道具id#num#事件点id - * 17 完成任务往下推一步,摧毁指定事件点,开启新的事件点,完成所有事件点再推一步任务 + * 17 完成任务往下推一步,摧毁指定事件点,开启新的事件点 * 行为参数:任务id#事件点id#地图id#坐标id#事件点id#地图id#坐标id#摧毁事件点id - * 18 战斗并销毁指定事件点 + * 18 完成任务往下推一步,战斗并销毁指定地图点 * 行为参数:怪物组id#事件点id * 19 完成任务往下推一步,行动到某张地图某坐标点,不摧毁事件点 * 行为参数:任务id#地图id#坐标(不输入地图id和坐标而输入0代表回主城) 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 89fdd51c7..5a3c973be 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 @@ -4,9 +4,7 @@ import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.handler.map.behavior.BaseBehavior; import com.ljsd.jieling.handler.mission.Mission; -import com.ljsd.jieling.logic.dao.Hero; -import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; -import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.network.session.ISession; @@ -14,10 +12,7 @@ import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.FightInfoProto; import com.ljsd.jieling.protocols.MapInfoProto; import com.ljsd.jieling.protocols.MessageTypeProto; -import com.ljsd.jieling.util.CellUtil; -import com.ljsd.jieling.util.ItemUtil; -import com.ljsd.jieling.util.MathUtils; -import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ConfigurableApplicationContext; @@ -111,12 +106,14 @@ public class MapLogic { for (Map.Entry entry : mapManager.getTypeEight().entrySet()) { cellToProto(cells, entry); } - MapInfoProto.MapEnterResponse mapEnterResponse = MapInfoProto.MapEnterResponse - .newBuilder() - .addAllMapList(cells) - .setCurXY(mapManager.getCurXY()) - .build(); - MessageUtil.sendMessage(iSession, 1, messageType.getNumber(), mapEnterResponse, true); + MapInfoProto.MapEnterResponse.Builder mapEnterResponse = MapInfoProto.MapEnterResponse.newBuilder(); + mapEnterResponse.addAllMapList(cells); + mapEnterResponse.setLeftStep(mapManager.getTotalStep()); + mapEnterResponse.setCurXY(mapManager.getCurXY()); + if (mapManager.getTemporaryItems() != null) { + mapEnterResponse.setTemporaryItems(CBean2Proto.getDrop(mapManager.getTemporaryItems())); + } + MessageUtil.sendMessage(iSession, 1, messageType.getNumber(), mapEnterResponse.build(), true); } private void cellToProto(List cells, Map.Entry entry) { @@ -226,6 +223,20 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); return; } + if (mapManager.getTotalStep() <= 0) { + LOGGER.info("updateMap() uid=>{}, no step=>{}", uid, mapManager.getTotalStep()); + 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); Cell cell = mapManager.getMapInfo().get(curXY); if (cell == null) { cell = mapManager.getMapInfo().get(triggerXY); @@ -388,7 +399,7 @@ public class MapLogic { } } } - CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, sOptionConfig.getReward(), 1); + CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, sOptionConfig.getReward(), 1, 1); List eventBehaviorValuesList = new ArrayList<>(); for (int i = 0; i < sOptionConfig.getBehaviorTypeValues().length; i++) { CommonProto.EventBehaviorValues.Builder eventBehaviorValues = CommonProto.EventBehaviorValues @@ -509,12 +520,14 @@ public class MapLogic { mapManager.setWalkCells(new HashSet<>()); mapManager.setCurXY(0); mapManager.setCurMapId(0); + TemporaryItems temporaryItems = mapManager.getTemporaryItems(); + if (temporaryItems != null) { + Map items = temporaryItems.items; + Map equips = temporaryItems.equips; +// ItemUtil.addItem(); + } } - //在地图吃东西 - - - public void endFight(ISession session, int result, MessageTypeProto.MessageType messageType, int monsterGroupId) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); @@ -531,7 +544,7 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); return; } - CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1); FightInfoProto.FightEndResponse fightEndResponse = FightInfoProto.FightEndResponse .newBuilder() .setDrop(drop) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java index 676b23790..da2fdbd6f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java @@ -30,6 +30,8 @@ public class MapManager extends MongoBase { private int totalStep; + private TemporaryItems temporaryItems; + private Map crossMapInfos = new ConcurrentHashMap<>(); public MapManager() { @@ -145,4 +147,13 @@ public class MapManager extends MongoBase { updateString( "triggerXY", triggerXY); this.triggerXY = triggerXY; } + + public TemporaryItems getTemporaryItems() { + return temporaryItems; + } + + public void setTemporaryItems(TemporaryItems temporaryItems) { + updateString( "temporaryItems", temporaryItems); + this.temporaryItems = temporaryItems; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/TemporaryItems.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/TemporaryItems.java new file mode 100644 index 000000000..7f710846e --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/TemporaryItems.java @@ -0,0 +1,15 @@ +package com.ljsd.jieling.handler.map; + +import com.ljsd.jieling.logic.dao.Equip; +import com.ljsd.jieling.logic.dao.Item; + +import java.util.HashMap; +import java.util.Map; + +public class TemporaryItems { + + public Map items = new HashMap<>(); + + public Map equips = new HashMap<>(); + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java index 8db2dca3f..3449222ab 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java @@ -46,14 +46,14 @@ public class BehaviorUtil { /** * 获取战斗数据 * @param user - * @param behaviorTypeValues + * @param groupId * @param eventUpdateResponse * @throws Exception */ - public static void getFightInfo(User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { + public static void getFightInfo(User user, int groupId, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { MapManager mapManager = user.getMapManager(); String key = RedisKey.getKey(RedisKey.FIGHT, user.getId(), false); - RedisUtil.getInstence().set(key, Integer.toString(behaviorTypeValues[0][0]), RedisKey.EXPIRE_TIME); + RedisUtil.getInstence().set(key, Integer.toString(groupId), RedisKey.EXPIRE_TIME); Set heroes = mapManager.getHeroes(); List heroFightInfos = new ArrayList<>(heroes.size()); for (String heroId : heroes) { @@ -79,7 +79,7 @@ public class BehaviorUtil { heroFightInfos.add(heroFightInfo); } eventUpdateResponse.addAllHeroFightInfos(heroFightInfos); - List monsterByGroup = MonsterUtil.getMonsterByGroup(behaviorTypeValues[0][0]); + List monsterByGroup = MonsterUtil.getMonsterByGroup(groupId); eventUpdateResponse.addAllMonsterList(monsterByGroup); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FightAndDestroyPointBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FightAndDestroyPointBehavior.java index 9118feb41..6c51595df 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FightAndDestroyPointBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FightAndDestroyPointBehavior.java @@ -14,8 +14,9 @@ public class FightAndDestroyPointBehavior extends BaseBehavior { @Override public boolean process(User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { - BehaviorUtil.getFightInfo(user, behaviorTypeValues, eventUpdateResponse); - BehaviorUtil.distoryPoint(user, behaviorTypeValues[0][1]); + BehaviorUtil.updateMission(user, behaviorTypeValues[0][0], eventUpdateResponse); + BehaviorUtil.getFightInfo(user, behaviorTypeValues[0][1], eventUpdateResponse); + BehaviorUtil.distoryPoint(user, behaviorTypeValues[0][2]); return true; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FightBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FightBehavior.java index a7f141fc7..6d37067ed 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FightBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FightBehavior.java @@ -14,7 +14,7 @@ public class FightBehavior extends BaseBehavior { @Override public boolean process(User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { - BehaviorUtil.getFightInfo(user, behaviorTypeValues, eventUpdateResponse); + BehaviorUtil.getFightInfo(user, behaviorTypeValues[0][0], eventUpdateResponse); return true; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/MissionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/MissionLogic.java index f03feca96..ae67f57fb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/MissionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/MissionLogic.java @@ -138,7 +138,7 @@ public class MissionLogic { user.getMissionManager().addTakeRewardMissions(missionId); SMissionEventsConfig sMissionEventsConfig = SMissionEventsConfig.sMissionEventsConfigMap.get(missionId); int[] reward = {sMissionEventsConfig.getReward()}; - CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, 1); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, 1, 0); MissionInfoProto.TakeMissionResponse takeMissionResponse = MissionInfoProto.TakeMissionResponse .newBuilder() diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 43c214dc3..739555fad 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -320,7 +320,10 @@ public class HeroLogic { } if(scHeroRankUpConfigByTypeStar!=null){ SCHeroRankUpConfig scHeroRankUpConfigStar = scHeroRankUpConfigByTypeStar.get(hero.getStar()); - if(hero.getLevel()+1 > scHeroRankUpConfigStar.getLimitLevel() && hero.getStar() < scHeroRankUpConfigStar.getOpenStar()){ + if(scHeroRankUpConfigStar == null){ + scHeroRankUpConfigStar = scHeroRankUpConfigByTypeStar.get(hero.getStar() -1); + } + if(scHeroRankUpConfigStar == null || (hero.getLevel()+1 > scHeroRankUpConfigStar.getLimitLevel() && hero.getStar() < scHeroRankUpConfigStar.getOpenStar())){ MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_LEVEL_RESPONSE_VALUE,"max level"); return; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index d8779d6d1..35d7de1a3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -1,18 +1,15 @@ package com.ljsd.jieling.util; -import com.ljsd.jieling.config.SCHero; import com.ljsd.jieling.config.SGameSetting; import com.ljsd.jieling.config.SMonsterConfig; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.handler.map.TemporaryItems; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.protocols.CommonProto; -import com.ljsd.jieling.protocols.FightInfoProto; -import com.sun.org.apache.regexp.internal.RE; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Queue; import java.util.concurrent.CopyOnWriteArrayList; public class CBean2Proto { @@ -118,6 +115,18 @@ public class CBean2Proto { return equipProto; } + + public static CommonProto.Drop getDrop(TemporaryItems temporaryItems) { + CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder(); + for (Item item : temporaryItems.items.values()) { + drop.addItemlist(getItem(item)); + } + for (Equip equip : temporaryItems.equips.values()) { + drop.addEquipId(getEquipProto(equip)); + } + return drop.build(); + } + private static List parseFromMap(Map propertyValueByIdMap){ List result = new ArrayList<>(); for(Map.Entry item:propertyValueByIdMap.entrySet()){ 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 7cf2ac202..67248f108 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -4,6 +4,8 @@ import com.ljsd.jieling.config.SRewardItem; import com.ljsd.jieling.config.SItem; import com.ljsd.jieling.config.SRewardGroup; import com.ljsd.jieling.globals.GlobalItemType; +import com.ljsd.jieling.handler.map.MapManager; +import com.ljsd.jieling.handler.map.TemporaryItems; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.protocols.CommonProto; @@ -56,13 +58,21 @@ public class ItemUtil { for (Map.Entry entry :dropGroupAndRatioMap.entrySet()){ int[] dropGroupIds = entry.getKey(); float dropRatio = entry.getValue(); - dropBuilder = drop(user, dropGroupIds, dropRatio); + dropBuilder = drop(user, dropGroupIds, dropRatio, 0); } return dropBuilder; } - //掉落 - public static CommonProto.Drop.Builder drop(User user, int[] dropGroupIds,float dropRatio) throws Exception { + /** + * + * @param user + * @param dropGroupIds + * @param dropRatio + * @param isMapping 是否地图探索掉落,1:是 + * @return + * @throws Exception + */ + public static CommonProto.Drop.Builder drop(User user, int[] dropGroupIds,float dropRatio, int isMapping) throws Exception { CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); Map itemMap = new HashMap<>(); Map cardMap = new HashMap<>(); @@ -76,7 +86,11 @@ public class ItemUtil { selectDrop(sRewardGroup,itemMap,cardMap,equipMap,randomMap,dropRatio); } useRandomItem(user,randomMap); - addItem(user,itemMap,dropBuilder); + if (isMapping == 1) { + addItemToTemporaryBag(user,itemMap,dropBuilder); + } else { + addItem(user,itemMap,dropBuilder); + } addCard(user,cardMap,dropBuilder); addEquip(user,equipMap,dropBuilder); return dropBuilder; @@ -241,6 +255,40 @@ public class ItemUtil { // UserManager.ljsdMongoTemplate.lastUpdate(); } + + /** + * 添加道具到临时背包 + * @param user + * @param itemMap + * @throws Exception + */ + public static void addItemToTemporaryBag(User user, Map itemMap,CommonProto.Drop.Builder dropBuilder) throws Exception { + List itemProtoList = new CopyOnWriteArrayList<>(); + MapManager mapManager = user.getMapManager(); + if (mapManager.getTemporaryItems() == null) { + TemporaryItems temporaryItems = new TemporaryItems(); + mapManager.setTemporaryItems(temporaryItems); + } + Map items = mapManager.getTemporaryItems().items; + for (Map.Entry entry : itemMap.entrySet()) { + SItem sItem = SItem.getsItemMap().get (entry.getKey()); + if (sItem == null){ + continue; + } + Item item = items.get(entry.getKey()); + if (item == null) { + item = new Item(entry.getKey(), entry.getValue()); + items.put(entry.getKey(), item); + } else { + item.setItemNum(item.getItemNum() + entry.getValue()); + } + itemProtoList.add(CBean2Proto.getItem(item)); + } + if (dropBuilder != null) { + dropBuilder.addAllItemlist(itemProtoList); + } + } + public static void useItem(User user,Map useItemMap) throws Exception{ if(useItemMap.isEmpty()){ return; @@ -420,7 +468,7 @@ public class ItemUtil { CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder(); if (!dropIds.toString().isEmpty()){ int[] ints = StringUtil.parseFiledInt(dropIds.toString()); - drop = ItemUtil.drop(user, ints, 1); + drop = ItemUtil.drop(user, ints, 1, 0); } return drop; }