diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/MapPointConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/MapPointConfig.java index 4fbb0057e..2a984bcbd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/MapPointConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/MapPointConfig.java @@ -50,6 +50,8 @@ public class MapPointConfig implements BaseConfig{ private int position; + private int[][] randomProbability; + @Override public void init() throws Exception { scMapEventMap = STableManager.getConfig(MapPointConfig.class); @@ -86,4 +88,8 @@ public class MapPointConfig implements BaseConfig{ public int getConfused() { return confuced; } + + public int[][] getRandomProbability() { + return randomProbability; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SPrivilegeTypeConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SPrivilegeTypeConfig.java index c645e60f1..2204f2008 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SPrivilegeTypeConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SPrivilegeTypeConfig.java @@ -16,6 +16,8 @@ public class SPrivilegeTypeConfig implements BaseConfig { private int maxTimes; + private int ifFloat; + private static Map sPrivilegeTypeConfigMap; @@ -41,5 +43,11 @@ public class SPrivilegeTypeConfig implements BaseConfig { return refreshType; } + public int getMaxTimes() { + return maxTimes; + } + public int getIfFloat() { + return ifFloat; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java b/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java new file mode 100644 index 000000000..177c22561 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java @@ -0,0 +1,36 @@ +package com.ljsd.jieling.core; + +public interface VipPrivilegeType { + int ADVENTURE_BASE_REWARD = 1;//探险基础奖励收益 + int ADVENTURE_MINERAL_REWARD = 2;//探险矿石奖励收益 + int ADVENTURE_RUNNE_REWARD = 3;//探险符文奖励收益 + + int FAST_MAP_LIMIT = 4;//快速探险的次数上限 + int BUY_STAIM_LIMIT = 5;//购买体力次数上限 + + int SECRET_RANDOM_LIMIT = 6;//秘盒抽取次数上限 + int SIMPLE_MAP_LIMIT = 7;//剧情副本每日恢复次数上限 + + int HERO_MAP_LIMIT = 8;//英雄副本每日购买次数上限 + + int CHALLENGE_INVASIONBOSS_LIMIT = 9;//外敌入侵每日次数上限 + + int STORE_GROCERY_FLUSH_LIMIT = 10;//杂货商店刷新次数 + int STORE_SOUL_FLUSH_LIMIT = 11;//契魂商店刷新次数 + + int BUY_GOLD_DAY_LIMIT = 12; //每日可购买金币的次数 + + int POKEMON_NUM = 13; //异妖上阵栏位 + int FREE_HERO_RANDOM = 14;//免费抽取妖灵师 + int FREE_SECRET_RANDOM = 15; //解锁免费抽取秘盒 + + //功能项解锁 + int UNLOCK_TWO_FIGHT = 501;//解锁2倍速战斗 + int UNLOCK_MAP_SWEEP = 502;//解锁副本扫荡功能 + int UNLOCK_ELEMENT_RANDOM = 503;//解锁元素征募功能 + + int UNLOCK_ADVENTURE_ONEKEY = 504;//解锁挂机一键收取 + int UNLOCK_SKIP_FIGHT = 505;//解锁跳过战斗功能 + + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java new file mode 100644 index 000000000..b5db9b388 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -0,0 +1,46 @@ +package com.ljsd.jieling.globals; + +public interface BIReason { + int ADVENTURE_BASE_REWARD = 1; //探险基础收益 + int ADVENTURE_RANDOM_REWARDD =2;//探险随机收益 + + int DECOMPOS_ITEM_REWARD = 3 ;//分解道具奖励 + int DECOMPOS_EQUIP_REWARD = 4 ;//分解道具奖励 + int DECOMPOS_HERO_REWARD = 5;//分解妖灵师获取奖励 + int COMPOS_HERO_REWARD = 6 ;//分解妖灵师获取奖励 + + int HERO_RANDOM = 7 ;//抽卡 + + int WORKSHOP_CREATEMATERIAL = 8; // + int WORKSHOP_CREATEQUIP = 9; // 装备打造 + int WORKSHOP_MAKEFOOD = 10; // 装备打造 + + int TAKE_MISSION_REWARD = 11;// 领取任务奖励 + int TAKE_ACTIVITY_REWARD = 12;// 领取活动奖励 + + int TAKE_SECRET_REWARD = 13; //秘盒奖励 + int TAKE_SECRET_EXTRA_REWARD = 14;//秘盒额外奖励 + int USER_BORN_REWARD = 15 ;// 角色出生奖励 + + + int TAKE_MAIL_REWARD = 16 ;// 邮件奖励 + int TAKE_VIP_LEVEL_REWARD = 17 ;// 邮件奖励 + int TAKE_VIP_DAILY_REWARD = 18 ;// 邮件奖励 + + int STORE_BUY_ITEM = 19; //商店购买 + + int MAP_EVENET_REWARD = 20; //地图事件点奖励 + int MAP_GENERAL_FIGHT_REWARD = 21; //地图战斗 + int MAP_FAST_FIGHT_REWARD = 22; //地图快速战斗 + int MAP_MISSION_REWARD = 23; //地图任务奖励 + int MAP_SWEEP_REWARD = 24; //扫荡地图副本 + + int LEVELDIFFICULTY_FIGHT_REWARD = 25; //关卡奖励 + int LEVELDIFFICULTY_SWEEP_REWARD = 26; //关卡扫荡奖励 + + int USER_LEVELUPSTAMINA_REWARD = 27; //玩家升级加经验 + + int GM_REWARD = 28; //gm加成 + + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java index 443009ca1..9ae60d114 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java @@ -14,8 +14,9 @@ public interface GlobalItemType { int EQUIP = 3; //装备 int POKENMON_COMONPENT = 4; //异妖组件 int RANDOM_ITME = 5; // 随机道具 - int RUNNE = 6; + int RUNNE = 6; //符文 int BLUE_IMAGE=7; // 蓝图 + int MINERAL=8; // 矿石 //物品使用类型 int NO_USE = 0 ; //不使用 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java index 357e52085..02d459b3a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java @@ -4,6 +4,7 @@ import com.ljsd.GameApplication; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.GlobalGm; import com.ljsd.jieling.globals.GlobalItemType; @@ -67,7 +68,7 @@ public class GMRequestHandler extends BaseHandler{ CommonProto.GmResponse.Builder gmBuilder = CommonProto.GmResponse.newBuilder(); switch (gmCommandType){ case GlobalGm.ADD_ITEM: - gmBuilder.setDrop(ItemUtil.drop(cUser,new int[][]{{prarm1,prarm2}})); + gmBuilder.setDrop(ItemUtil.drop(cUser,new int[][]{{prarm1,prarm2}}, BIReason.GM_REWARD)); break; case GlobalGm.ADD_CARD: gmBuilder.setDrop(giveHero(cUser,prarm1,prarm2)); @@ -80,7 +81,7 @@ public class GMRequestHandler extends BaseHandler{ MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.SEND_RED_POINT_INDICATION_VALUE,redPointInfo,true); break; case GlobalGm.HERO_STAR: - CommonProto.Drop.Builder drop = ItemUtil.drop(cUser, new int[][]{{prarm1, 1}}); + CommonProto.Drop.Builder drop = ItemUtil.drop(cUser, new int[][]{{prarm1, 1}},BIReason.GM_REWARD); MongoUtil.getInstence().lastUpdate(); CommonProto.Hero heroProto = drop.getHero(0); String heroId = heroProto.getId(); @@ -149,7 +150,7 @@ public class GMRequestHandler extends BaseHandler{ } gmDrop[i++] = new int[]{itemId,itemNum}; } - ItemUtil.drop(cUser,gmDrop); + ItemUtil.drop(cUser,gmDrop,BIReason.GM_REWARD); break; } //1:获取当前服务器时间 2: 获取服务器开服时间 3 : 获取玩家创建角色时间 4:修改服务器时间 @@ -218,7 +219,7 @@ public class GMRequestHandler extends BaseHandler{ CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); Map cardMap = new ConcurrentHashMap<>(); cardMap.put(cardId,cardNum); - ItemUtil.addCard(cUser,cardMap,dropBuilder); + ItemUtil.addCard(cUser,cardMap,dropBuilder,BIReason.GM_REWARD); return dropBuilder; } @@ -254,4 +255,5 @@ public class GMRequestHandler extends BaseHandler{ } } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index fdb293ea1..4148f4760 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -58,7 +58,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ StoreLogic.resetStoreRefreshNum(userId); //竞技场免费次数刷新 ArenaLogic.getInstance().flushFreeUseTimes(user); - playerInfoManager.setHadTakeDailyBoxVip(0); + playerInfoManager.vipFlush(); } playerInfoManager.setLoginTime(TimeUtils.now()); 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 65e0e48f7..66322f86a 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 @@ -2,8 +2,10 @@ package com.ljsd.jieling.handler.map; import com.googlecode.protobuf.format.JsonFormat; import com.ljsd.jieling.config.*; +import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.handler.map.behavior.BaseBehavior; import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; @@ -273,6 +275,9 @@ public class MapLogic { LOGGER.info("====initMap()====mapPointConfig == null======>{}", scMap1.getEvent()); continue; } + if(!mapPointCanAAppear(mapPointConfig)){ + continue; + } if(mapPointConfig.getStyle() == EventType.businessman){ if(alreadHadYunShop){ continue; @@ -300,6 +305,25 @@ public class MapLogic { initMapMission(mapManager); } + private boolean mapPointCanAAppear(MapPointConfig mapPointConfig){ + int[][] randomProbability = mapPointConfig.getRandomProbability(); + if(randomProbability == null || randomProbability.length==0){ + return true; + } + int totalWeight =0; + for(int[] weightItem : randomProbability){ + totalWeight+=weightItem[1]; + } + int random = MathUtils.randomInt(totalWeight); + for(int[] weightItem : randomProbability){ + random-=weightItem[1]; + if(random<=0){ + return weightItem[0] == 1; + } + } + return false; + } + public boolean updateMapByOnlyConsumeActionPower(ISession session, int curXY, int triggerXY, List cells, MessageTypeProto.MessageType messageType) throws Exception { if (triggerXY == -1000) { int uid = session.getUid(); @@ -496,7 +520,7 @@ public class MapLogic { updateMapMission(mapManager,EventType.updatePonintEvent, pointId,0); CommonProto.Drop.Builder dropBuilder = null; if (sOptionConfig.getReward().length > 0) { - dropBuilder = ItemUtil.drop(user, sOptionConfig.getReward(), 1, 1); + dropBuilder = ItemUtil.drop(user, sOptionConfig.getReward(), 1, 1, BIReason.MAP_EVENET_REWARD); } List eventBehaviorValuesList = new ArrayList<>(); for (int i = 0; i < sOptionConfig.getBehaviorTypeValues().length; i++) { @@ -894,7 +918,7 @@ public class MapLogic { BehaviorUtil.destoryApointXY(user, destoryXY); SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(groupId); - CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1,BIReason.MAP_FAST_FIGHT_REWARD); FightInfoProto.FastFightResponse.Builder fastFightResponse = FightInfoProto.FastFightResponse.newBuilder(); fastFightResponse.setEnventDrop(drop.build()); fastFightResponse.setResult(resultCode); @@ -1069,7 +1093,7 @@ public class MapLogic { for (TeamPosHeroInfo teamPosHeroInfo : team){ mapManager.updateHeroOneAttribute(teamPosHeroInfo.getHeroId(),HeroAttributeEnum.CurHP.getPropertyId(),checkResult[teamPosHeroInfo.getPosition()]); } - CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1,BIReason.MAP_GENERAL_FIGHT_REWARD); FightInfoProto.FightEndResponse.Builder fightEndResponse = FightInfoProto.FightEndResponse.newBuilder(); fightEndResponse.setEnventDrop(drop.build()); fightEndResponse.setResult(resultCode); @@ -1289,7 +1313,7 @@ public class MapLogic { if (mission.getMissionInfo() != null) { checkMissionReturn.newEventId = mission.getMissionInfo(); } - CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMissionEventsConfig.getReward(), 1, 1); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMissionEventsConfig.getReward(), 1, 1,BIReason.MAP_MISSION_REWARD); checkMissionReturn.drop = drop; int useTime = getUseTime(user); mission.setTime(useTime); @@ -1472,6 +1496,11 @@ public class MapLogic { } int uid = session.getUid(); User user = UserManager.getUser(uid); + boolean allowed = user.getPlayerInfoManager().checkFunctionIsAllowed(VipPrivilegeType.UNLOCK_MAP_SWEEP); + if(!allowed){ + MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "not allowed"); + return; + } MapManager mapManager = user.getMapManager(); CrossInfo crossInfo = mapManager.getCrossInfoMap().get(mapId); if (crossInfo == null) { @@ -1494,7 +1523,7 @@ public class MapLogic { SChallengeMapConfig sChallengeMapConfig = SChallengeMapConfig.integerSChallengeMapConfigMap.get(mapId); MapInfoProto.MapSweepResponse.Builder mapSweepResponse = MapInfoProto.MapSweepResponse.newBuilder(); for (int i = 0; i < count; i++) { - CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, sChallengeMapConfig.getSweepingAward(), 1, 0); + CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, sChallengeMapConfig.getSweepingAward(), 1, 0,BIReason.MAP_SWEEP_REWARD); mapSweepResponse.addDrop(dropBuilder); } MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapSweepResponse.build(), true); @@ -1715,7 +1744,7 @@ public class MapLogic { levelDifficulty.setState(Global.FIGHT_CLEARANCE); user.getUserMissionManager().onGameEvent(user,GameEvent.STORY_FIGHT,fightId,0); } - CommonProto.Drop.Builder drop = ItemUtil.drop(user,reward, 1, 0); + CommonProto.Drop.Builder drop = ItemUtil.drop(user,reward, 1, 0,BIReason.LEVELDIFFICULTY_FIGHT_REWARD); levelDifficulty.setChallengeTimes(levelDifficulty.getChallengeTimes() +1); //开启关卡 openNextFightIds(levelDifficultyManager,playerInfoManager,fightId); @@ -1727,12 +1756,6 @@ public class MapLogic { MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse.build(), true); } - private CommonProto.FightTeamInfo getFightTeamInfo(Map valueMap) throws JsonFormat.ParseException { - CommonProto.FightTeamInfo.Builder monsterBuilder = CommonProto.FightTeamInfo.newBuilder(); - JsonFormat.merge((String)valueMap.get(RedisKey.FIGHT_MONSTERS_1), monsterBuilder); - return monsterBuilder.build(); - } - /** * 开启关卡 * @param levelDifficultyManager @@ -1802,7 +1825,7 @@ public class MapLogic { } if (itemNum > 0){ String reward = Global.STAMINA +"#" +itemNum; - ItemUtil.drop(user,StringUtil.parseFiledInt2(reward)); + ItemUtil.drop(user,StringUtil.parseFiledInt2(reward),BIReason.USER_LEVELUPSTAMINA_REWARD); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/SweepLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/SweepLogic.java index 4b0106b95..b8e146183 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/SweepLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/SweepLogic.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.handler.map; import com.ljsd.jieling.config.SLevelDifficultyConfig; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.handler.map.behavior.BaseBehavior; import com.ljsd.jieling.logic.dao.*; @@ -82,7 +83,7 @@ public class SweepLogic { ItemUtil.itemCost(user, cost); List dropList = new CopyOnWriteArrayList<>(); for (int i = 0 ; i < sweepTimes ;i++){ - CommonProto.Drop.Builder drop = ItemUtil.drop(user, sLevelDifficultyConfig.getRandomReward(), 1, 0); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, sLevelDifficultyConfig.getRandomReward(), 1, 0, BIReason.LEVELDIFFICULTY_SWEEP_REWARD); dropList.add(drop.build()); } MapLogic.getInstance().userLevelUp(user,sLevelDifficultyConfig.getExp() * sweepTimes); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index 687cba5c0..0fba78f13 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -1,6 +1,8 @@ package com.ljsd.jieling.logic.activity; import com.ljsd.jieling.config.*; +import com.ljsd.jieling.core.VipPrivilegeType; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; @@ -29,9 +31,6 @@ public class ActivityLogic { public void flushEveryDay(User user) { updateActivityMissionProgress(user, ActivityType.SevenLogin,1); - //秘盒免费次数刷新 - ActivityLogic.getInstance().flushSecretBoxFreeTimes(user); - } public void flushForLogin(User user){ @@ -168,7 +167,7 @@ public class ActivityLogic { break; } int[][] reward = sActivityRewardConfig.getReward(); - CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD); activityProgressInfo.setState(ActivityType.HAD_TAKED); activityMission.updateProgressInfo(missionId,activityProgressInfo); PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); @@ -296,15 +295,9 @@ public class ActivityLogic { if(secretBoxManager.getCurSeason() != secretBoxSeasonTimes){ flushSecretBoxOfSeasonChange(secretBoxManager); } - List secretBoxFreeUseInfoList = new ArrayList<>(2); - Map freeUseInfos = secretBoxManager.getFreeUseInfos(); - for(Map.Entry item : freeUseInfos.entrySet()){ - secretBoxFreeUseInfoList.add(PlayerInfoProto.SecretBoxFreeUseInfo.newBuilder().setId(item.getKey()).setTimes(item.getValue()).build()); - } PlayerInfoProto.GetSecretBoxInfoResponse build = PlayerInfoProto.GetSecretBoxInfoResponse.newBuilder() .setSeason(secretBoxManager.getCurSeason()) .setCount(secretBoxManager.getCount()) - .addAllSecretBoxFreeUseInfo(secretBoxFreeUseInfoList) .build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_SECRETBOX_RESPONSE_VALUE,build,true); } @@ -312,13 +305,6 @@ public class ActivityLogic { public void flushSecretBoxOfSeasonChange(SecretBoxManager secretBoxManager){ secretBoxManager.setCount(0); secretBoxManager.setCurSeason(secretBoxSeasonTimes); - List idsBySeasonId = SDifferDemonsBoxSetting.getIdsBySeasonId(secretBoxSeasonTimes); - //todo vip系统修改 - Map freeUseMap = new HashMap<>(idsBySeasonId.size()); - for(int id:idsBySeasonId){ - freeUseMap.put(id,0); - } - secretBoxManager.setFreeUseInfos(freeUseMap); } public void randomSecretBox(ISession session,int id) throws Exception { @@ -341,18 +327,21 @@ public class ActivityLogic { MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.SECRETBOX_RANDOM_RESPONSE_VALUE,"今日抽取已达上限"); return; } - int freeTime = sDifferDemonsBoxSetting.getFreeTime(); - Map freeUseInfos = secretBoxManager.getFreeUseInfos(); - if(freeTime>freeUseInfos.get(id)){ - freeUseInfos.put(id,freeUseInfos.get(id) + 1); - secretBoxManager.setFreeUseInfos(freeUseInfos); - }else{ + + + boolean allowedFree = false; + if(randCount == 1){ + allowedFree=user.getPlayerInfoManager().check(VipPrivilegeType.FREE_SECRET_RANDOM,1); + } + if(!allowedFree){ int[][] mainCost = sDifferDemonsBoxSetting.getMainCost(); boolean enough = ItemUtil.itemCost(user, mainCost); if(!enough){ MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.SECRETBOX_RANDOM_RESPONSE_VALUE,"道具不足"); return; } + }else{ + user.getPlayerInfoManager().updateVipPrivilage(VipPrivilegeType.FREE_SECRET_RANDOM,1); } int count = secretBoxManager.getCount(); @@ -364,9 +353,9 @@ public class ActivityLogic { } playerInfoManager.updateVipPrivilage(limitPrivigele,randCount); secretBoxManager.setCount(secretBoxManager.getCount()+randCount); - CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, randDrop); + CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, randDrop,BIReason.TAKE_SECRET_REWARD); int[] extraItem = sDifferDemonsBoxSetting.getExtraItem(); - CommonProto.Drop.Builder extraDrop = ItemUtil.drop(user, new int[][]{extraItem}); + CommonProto.Drop.Builder extraDrop = ItemUtil.drop(user, new int[][]{extraItem},BIReason.TAKE_SECRET_EXTRA_REWARD); PlayerInfoProto.SecretBoxRandomResponse build = PlayerInfoProto.SecretBoxRandomResponse.newBuilder().setDrop(drop).setExtrarReward(extraDrop).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.SECRETBOX_RANDOM_RESPONSE_VALUE,build,true); user.getUserMissionManager().onGameEvent(user,GameEvent.SECRETBOX,id,randCount); @@ -420,16 +409,4 @@ public class ActivityLogic { } secretBoxSeasonTimes=0; } - - private void flushSecretBoxFreeTimes(User user){ - SecretBoxManager secretBoxManager = user.getSecretBoxManager(); - if(secretBoxManager!=null){ - Map freeUseInfos = secretBoxManager.getFreeUseInfos(); - if(freeUseInfos!=null && !freeUseInfos.isEmpty()){ - for(Integer key : freeUseInfos.keySet()){ - freeUseInfos.put(key,0); - } - } - } - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index d25069787..3e4529dad 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -5,6 +5,7 @@ package com.ljsd.jieling.logic.arena; import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; @@ -134,6 +135,11 @@ public class ArenaLogic { } int uid = session.getUid(); User user = UserManager.getUser(uid); + boolean allowed = user.getPlayerInfoManager().checkFunctionIsAllowed(VipPrivilegeType.UNLOCK_SKIP_FIGHT); + if(!allowed){ + MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ARENA_CHALLENGE_RESPONSE_VALUE,"not allowed"); + return; + } String err = checkChallenge(user); if(!"".equals(err)){ MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ARENA_CHALLENGE_RESPONSE_VALUE,err); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index c1cb20536..8996c772a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; import com.ljsd.jieling.config.SGameSetting; +import com.ljsd.jieling.config.SPrivilegeTypeConfig; import com.ljsd.jieling.config.SVipLevelConfig; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.mongo.MongoKey; @@ -250,6 +251,10 @@ public class PlayerManager extends MongoBase { return true; } + public boolean checkFunctionIsAllowed(int privilageId){ + return vipInfo.containsKey(privilageId); + } + public void updateVipPrivilage(int privilageId,int updateNum){ if(!vipInfo.containsKey(privilageId)){ return; @@ -284,4 +289,16 @@ public class PlayerManager extends MongoBase { updateString("hadTakeDailyBoxVip", hadTakeDailyBoxVip); this.hadTakeDailyBoxVip = hadTakeDailyBoxVip; } + + public void vipFlush() { + for(Integer id : vipInfo.keySet()){ + SPrivilegeTypeConfig sPrivilegeTypeConfig = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(id); + int refreshType = sPrivilegeTypeConfig.getRefreshType()[0]; + if(refreshType == 1){ + vipInfo.put(id,0); + } + } + updateString("vipInfo", vipInfo); + setHadTakeDailyBoxVip(0); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SecretBoxManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SecretBoxManager.java index 7ca2d0c16..0742906bc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SecretBoxManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SecretBoxManager.java @@ -9,7 +9,6 @@ import java.util.Map; public class SecretBoxManager extends MongoBase { private int curSeason; private int count;//总共抽取次数 - private Map freeUseInfos = new HashMap<>(2); public void setCurSeason(int curSeason) { updateString("curSeason",curSeason); @@ -21,11 +20,6 @@ public class SecretBoxManager extends MongoBase { this.count = count; } - public void setFreeUseInfos(Map freeUseInfos) { - updateString("freeUseInfos",freeUseInfos); - this.freeUseInfos = freeUseInfos; - } - public int getCurSeason() { return curSeason; } @@ -33,8 +27,4 @@ public class SecretBoxManager extends MongoBase { public int getCount() { return count; } - - public Map getFreeUseInfos() { - return freeUseInfos; - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index dcfffb550..9bbd289fa 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -4,6 +4,7 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.jieling.config.SGameSetting; import com.ljsd.jieling.config.SPlayerLevelConfig; import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; @@ -82,7 +83,7 @@ public class UserManager { playerManager.updateVipInfo(user,0); SPlayerLevelConfig sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(1); playerManager.setMaxStamina(sPlayerLevelConfig.getMaxEnergy()); - ItemUtil.drop(user,gameSetting.getBornItem()); + ItemUtil.drop(user,gameSetting.getBornItem(), BIReason.USER_BORN_REWARD); HeroManager heroManager = user.getHeroManager(); Map heroMap = heroManager.getHeroMap(); TeamPosManager teamPosManager = user.getTeamPosManager(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index eb9b2ae44..d6af6f72c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -4,8 +4,10 @@ package com.ljsd.jieling.logic.fight; import com.google.common.collect.Sets; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; @@ -343,6 +345,13 @@ public class CombatLogic { User user = UserManager.getUser(uid); Map adventureFastReward =null; if(type == 2){ + if(position==-1){ + boolean allowed = user.getPlayerInfoManager().checkFunctionIsAllowed(VipPrivilegeType.UNLOCK_ADVENTURE_ONEKEY); + if(!allowed){ + MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,"not allowed"); + return; + } + } adventureFastReward = getAdventureReward(user, position); }else{ //todo 消耗 @@ -390,8 +399,8 @@ public class CombatLogic { } } } - ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); + ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); Map result = new HashMap<>(2); result.put(1,baseBuilder.build()); result.put(2,randomBuilder.build()); @@ -428,8 +437,8 @@ public class CombatLogic { } } } - ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); + ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); Map result = new HashMap<>(2); result.put(1,baseBuilder.build()); result.put(2,randomBuilder.build()); @@ -584,6 +593,13 @@ public class CombatLogic { MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_BOSS_CHALLENGE_RESPONSE_VALUE,"over fight"); return; } + if(fightTimes==1 && skipFight==0){ + boolean allowed = user.getPlayerInfoManager().checkFunctionIsAllowed(VipPrivilegeType.UNLOCK_SKIP_FIGHT); + if(!allowed){ + MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_BOSS_CHALLENGE_RESPONSE_VALUE,"not allowed"); + return; + } + } AdventureBoss adventureBoss = RedisUtil.getInstence().getMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO, "", bossId, AdventureBoss.class); if(adventureBoss == null){ MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_BOSS_CHALLENGE_RESPONSE_VALUE,"boss had killed"); 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 35ae9c47e..a3dc48c41 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 @@ -3,6 +3,8 @@ package com.ljsd.jieling.logic.hero; import com.ljsd.GameApplication; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.core.VipPrivilegeType; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; @@ -156,11 +158,19 @@ public class HeroLogic { } //检验消耗 - int [][] costItems = new int[][]{sLotterySetting.getCostItem()}; - boolean enoughCost = ItemUtil.itemCost(user, costItems); - if(!enoughCost){ - MessageUtil.sendErrorResponse(session, 0, MessageTypeProto.MessageType.HERO_RAND_RESPONSE_VALUE,"道具不足"); - return; + boolean allowFree = false; + if(perCount == 1){ + allowFree = user.getPlayerInfoManager().check(VipPrivilegeType.FREE_HERO_RANDOM, 1); + } + if(!allowFree){ + int [][] costItems = new int[][]{sLotterySetting.getCostItem()}; + boolean enoughCost = ItemUtil.itemCost(user, costItems); + if(!enoughCost){ + MessageUtil.sendErrorResponse(session, 0, MessageTypeProto.MessageType.HERO_RAND_RESPONSE_VALUE,"道具不足"); + return; + } + }else{ + user.getPlayerInfoManager().updateVipPrivilage(VipPrivilegeType.FREE_HERO_RANDOM, 1); } //额外获取 int length = perCount; @@ -196,7 +206,7 @@ public class HeroLogic { } } user.getUserMissionManager().onGameEvent(user,GameEvent.RANDOM_HERO,sLotterySetting.getLotteryType(),perCount); - CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropHeroAndItem); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropHeroAndItem,BIReason.HERO_RANDOM); HeroInfoProto.HeroRandResponse heroRandResponse = HeroInfoProto.HeroRandResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.HERO_RAND_RESPONSE_VALUE, heroRandResponse, true); } @@ -324,6 +334,7 @@ public class HeroLogic { MessageUtil.sendErrorResponse(iSession,0,MessageTypeProto.MessageType.TEAM_POS_SAVE_RESPONSE_VALUE,err); return; } + user.getTeamPosManager().changeTeamInfo(teamId,heroIds,pokemonoIds); MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.TEAM_POS_SAVE_RESPONSE_VALUE,null,true); } @@ -359,7 +370,11 @@ public class HeroLogic { return "no active"; } } - + int size = pokemonoIds.size(); + boolean allowed = user.getPlayerInfoManager().check(VipPrivilegeType.POKEMON_NUM, size); + if(!allowed){ + return "now allowd"; + } return ""; } @@ -1112,7 +1127,7 @@ public class HeroLogic { } Map randomMap = new ConcurrentHashMap<>(); randomMap.put(itemId,composeNum); - CommonProto.Drop.Builder drop = ItemUtil.useRandomItem(user,randomMap); + CommonProto.Drop.Builder drop = ItemUtil.useRandomItem(user,randomMap, BIReason.COMPOS_HERO_REWARD); HeroInfoProto.HeroComposeResponse heroComposeResponse = HeroInfoProto.HeroComposeResponse .newBuilder() .setDrop(drop) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java index 5645dc9da..fb3e6f318 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.item; import com.ljsd.jieling.config.*; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; @@ -65,7 +66,7 @@ public class ItemLogic { MessageUtil.sendErrorResponse(iSession,0,msgId,""); return; } - CommonProto.Drop.Builder drop = ItemUtil.drop(user, StringUtil.parseFiledInt(reward.toString()), 1, 0); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, StringUtil.parseFiledInt(reward.toString()), 1, 0,BIReason.DECOMPOS_ITEM_REWARD); sendUseAndPriceItemMessage(iSession, msgId, drop); } @@ -146,7 +147,7 @@ public class ItemLogic { reward.append("#").append(sItem.getResolveReward()); } } - CommonProto.Drop.Builder drop = ItemUtil.drop(user,StringUtil.parseFiledInt(reward.toString()),1,0); + CommonProto.Drop.Builder drop = ItemUtil.drop(user,StringUtil.parseFiledInt(reward.toString()),1,0,BIReason.DECOMPOS_EQUIP_REWARD); sendUseAndPriceItemMessage(iSession, msgId, drop); } @@ -212,7 +213,7 @@ public class ItemLogic { } ItemUtil.combineReward(StringUtil.parseFiledInt(reward.toString()),1,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder(); - ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap, BIReason.DECOMPOS_HERO_REWARD); sendUseAndPriceItemMessage(iSession, msgId, baseBuilder); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java index 14b6a688c..da9ed6d1d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.item; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.UserManager; @@ -102,7 +103,7 @@ public class WorkShopLogic { int failExp = sMysteryFoodSetting.getFailExp(); totalFailExp+=failExp; } - CommonProto.Drop.Builder dropThing = ItemUtil.drop(user, drop); + CommonProto.Drop.Builder dropThing = ItemUtil.drop(user, drop,BIReason.WORKSHOP_MAKEFOOD); if(totalFailExp>0){ user.getWorkShopController().addCookExp(totalFailExp); } @@ -238,7 +239,7 @@ public class WorkShopLogic { } Map finalMaterial = new HashMap<>(); finalMaterial.put(materialId,nums*sWorkShopFoundationConfig.getNum()); - ItemUtil.addItem(user,finalMaterial,null); + ItemUtil.addItem(user,finalMaterial,null, BIReason.WORKSHOP_CREATEMATERIAL); //熟练度提升 int type = sWorkShopFoundationConfig.getType(); @@ -298,16 +299,14 @@ public class WorkShopLogic { int addExp = sWorkShopEquipmentConfig.getExp()*nums; if(type == GlobalsDef.WORK_SHOP_TYPE){ user.getWorkShopController().addWorkShopExp(user,addExp); - while (nums-->0){ - Equip equip = new Equip(Integer.toString(uid), equipTid, user.getWorkShopController().getWorkShopLevel(),runneIdsList); - user.getEquipManager().addEquip(user,equip); - dropBuilder.addEquipId(CBean2Proto.getEquipProto(equip)); - } + Map equips = new HashMap<>(); + equips.put(equipTid,nums); + ItemUtil.addEquip(user,equips,dropBuilder,BIReason.WORKSHOP_CREATEQUIP); }else if( type == GlobalsDef.COOK_SHOP_TYPE){ user.getWorkShopController().addCookExp(addExp); Map items = new HashMap<>(); - items.put(equipTid,SMysteryFoodSetting.getsMysteryFoodSetting().getFoodNum()); - ItemUtil.addItem(user,items,dropBuilder); + items.put(equipTid,SMysteryFoodSetting.getsMysteryFoodSetting().getFoodNum()*nums); + ItemUtil.addItem(user,items,dropBuilder,BIReason.WORKSHOP_CREATEQUIP); } PlayerInfoProto.WorkShopEquipCreateResponse build = PlayerInfoProto.WorkShopEquipCreateResponse.newBuilder().setType(type).setDrop(dropBuilder).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.WORKSHOP_EQUIP_CREATE_RESPONSE_VALUE,build,true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java index 11f8ebbc1..dd1eba3cc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.mail; import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.MailingSystem; @@ -187,7 +188,7 @@ public class MailLogic { MessageUtil.sendErrorResponse(iSession,0,msgId,""); return; } - CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, itemArr); + CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, itemArr, BIReason.TAKE_MAIL_REWARD); for (String mailId:delMailIds){ mailManager.removeMail(mailId); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index 91ff03840..f16f8e45b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -5,6 +5,7 @@ import com.ljsd.jieling.config.SCHero; import com.ljsd.jieling.config.SLevelDifficultyConfig; import com.ljsd.jieling.config.STaskConfig; import com.ljsd.jieling.config.SVipLevelConfig; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; @@ -70,7 +71,7 @@ public class MissionLoigc { Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.VIP_MISSION_REWARD, missionId); List missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.VIPMISSION); if(!missionStateChangeInfos.isEmpty()){ - CommonProto.Drop.Builder drop = ItemUtil.drop(user, missionStateChangeInfos.get(0).getRewwardGroups()); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, missionStateChangeInfos.get(0).getRewwardGroups(), BIReason.TAKE_MISSION_REWARD); PlayerInfoProto.TakeMissionRewardResponse build = PlayerInfoProto.TakeMissionRewardResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.TAKE_MISSION_REWARD_RESPONSE_VALUE,build,true); }else{ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index 250ffb6c6..db87a2be9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -5,6 +5,7 @@ import com.ljsd.jieling.config.SVipLevelConfig; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.logic.dao.PlayerManager; import com.ljsd.jieling.logic.dao.TeamPosManager; import com.ljsd.jieling.logic.dao.UserManager; @@ -168,6 +169,7 @@ public class PlayerLogic { int uid = session.getUid(); User user = UserManager.getUser(uid); PlayerManager playerInfoManager = user.getPlayerInfoManager(); + int reson=-1; SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(playerInfoManager.getVipLevel()); int[][] rewards=null; if(type == 1){ @@ -177,6 +179,7 @@ public class PlayerLogic { } playerInfoManager.setHadTakeLevelBoxVip(1); rewards = sVipLevelConfig.getVipBoxReward(); + reson = BIReason.TAKE_VIP_LEVEL_REWARD; }else if(type == 2){ if(playerInfoManager.getHadTakeDailyBoxVip() == 1 || playerInfoManager.getHadTakeLevelBoxVip() == 0 ){ MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.VIP_TAKE_REWARD_RESPONSE_VALUE,"had taked the vip daily reward"); @@ -184,8 +187,9 @@ public class PlayerLogic { } playerInfoManager.setHadTakeDailyBoxVip(1); rewards = sVipLevelConfig.getVipBoxDailyReward(); + reson = BIReason.TAKE_VIP_DAILY_REWARD; } - CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewards); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewards,reson); PlayerInfoProto.VipTakeBoxResponse build = PlayerInfoProto.VipTakeBoxResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.VIP_TAKE_REWARD_RESPONSE_VALUE,build,true); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index 8217db1a2..14cd7d0c6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.store; import ch.qos.logback.core.util.TimeUtil; import com.ljsd.jieling.config.SStoreConfig; import com.ljsd.jieling.config.SStoreTypeConfig; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.logic.dao.PlayerManager; import com.ljsd.jieling.logic.dao.StoreInfo; import com.ljsd.jieling.logic.dao.StoreManager; @@ -225,7 +226,7 @@ public class StoreLogic { int goodsId = sStoreConfig.getGoods()[0]; int goodsNum = sStoreConfig.getGoods()[1]*itemNum; String reward = goodsId +"#"+goodsNum; - CommonProto.Drop.Builder drop = ItemUtil.drop(user, StringUtil.parseFiledInt2(reward)); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, StringUtil.parseFiledInt2(reward), BIReason.STORE_BUY_ITEM); PlayerInfoProto.BuyStoreItemResponse builder = PlayerInfoProto.BuyStoreItemResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(iSession, 1,msgId, builder, 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 6539a7d3c..b0e722df4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -1,6 +1,9 @@ package com.ljsd.jieling.util; import com.ljsd.jieling.config.*; +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.core.VipPrivilegeType; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.GlobalItemType; import com.ljsd.jieling.handler.map.MapManager; @@ -21,7 +24,7 @@ public class ItemUtil { private static Map dropRewardMap = new ConcurrentHashMap<>(); private static final Logger LOGGER = LoggerFactory.getLogger(ItemUtil.class); //指定道具掉落(如:邮件,初始化物品) - public static CommonProto.Drop.Builder drop(User user, int[][] itemArr) throws Exception { + public static CommonProto.Drop.Builder drop(User user, int[][] itemArr,int reason) throws Exception { CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); Map itemMap = new HashMap<>(); Map cardMap = new HashMap<>(); @@ -29,14 +32,14 @@ public class ItemUtil { Map randomMap = new HashMap<>(); selectItemArr(itemArr,cardMap,itemMap,equipMap,randomMap); - useRandomItem(user,randomMap); - addItem(user,itemMap,dropBuilder); - addCard(user,cardMap,dropBuilder); - addEquip(user,equipMap,dropBuilder); + useRandomItem(user,randomMap,reason); + addItem(user,itemMap,dropBuilder,reason); + addCard(user,cardMap,dropBuilder,reason); + addEquip(user,equipMap,dropBuilder,reason); return dropBuilder; } - public static CommonProto.Drop.Builder dropPer(User user, int[][] itemArr) throws Exception { + public static CommonProto.Drop.Builder dropPer(User user, int[][] itemArr,int reason) throws Exception { CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); for(int [] item : itemArr){ Map itemMap = new HashMap<>(); @@ -44,15 +47,15 @@ public class ItemUtil { Map equipMap = new HashMap<>(); Map randomMap = new HashMap<>(); selectItemArr(new int[][]{item},cardMap,itemMap,equipMap,randomMap); - useRandomItem(user,randomMap); - addItem(user,itemMap,dropBuilder); - addCard(user,cardMap,dropBuilder); - addEquip(user,equipMap,dropBuilder); + useRandomItem(user,randomMap,reason); + addItem(user,itemMap,dropBuilder,reason); + addCard(user,cardMap,dropBuilder,reason); + addEquip(user,equipMap,dropBuilder,reason); } return dropBuilder; } //活动额外掉落 - public static void activityDrop(User user,CommonProto.Drop.Builder dropBuilder ,int[] dropGroupIds, float dropRatio) throws Exception { + public static void activityDrop(User user,CommonProto.Drop.Builder dropBuilder ,int[] dropGroupIds, float dropRatio,int reason) throws Exception { Map itemMap = new HashMap<>(); Map cardMap = new HashMap<>(); Map equipMap = new HashMap<>(); @@ -64,10 +67,10 @@ public class ItemUtil { } selectDrop(sRewardGroup, itemMap, cardMap, equipMap, randomMap, dropRatio); } - useRandomItem(user, randomMap); - addItem(user, itemMap, dropBuilder); - addCard(user, cardMap, dropBuilder); - addEquip(user, equipMap, dropBuilder); + useRandomItem(user, randomMap,reason); + addItem(user, itemMap, dropBuilder,reason); + addCard(user, cardMap, dropBuilder,reason); + addEquip(user, equipMap, dropBuilder,reason); } public static void getactivityDropInfo(int[] dropGroupIds, float dropRatio, Map itemMap, Map cardMap, Map equipMap ,Map randomMap) throws Exception { @@ -81,12 +84,12 @@ public class ItemUtil { } //掉落组概率 - public static CommonProto.Drop.Builder drop(User user, Map dropGroupAndRatioMap) throws Exception { + public static CommonProto.Drop.Builder drop(User user, Map dropGroupAndRatioMap,int reason) throws Exception { CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); for (Map.Entry entry :dropGroupAndRatioMap.entrySet()){ int[] dropGroupIds = entry.getKey(); float dropRatio = entry.getValue(); - activityDrop(user,dropBuilder,dropGroupIds,dropRatio); + activityDrop(user,dropBuilder,dropGroupIds,dropRatio,reason); } return dropBuilder; } @@ -100,7 +103,7 @@ public class ItemUtil { * @return * @throws Exception */ - public static CommonProto.Drop.Builder drop(User user, int[] dropGroupIds,float dropRatio, int isMapping) throws Exception { + public static CommonProto.Drop.Builder drop(User user, int[] dropGroupIds,float dropRatio, int isMapping,int reason) throws Exception { CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); Map itemMap = new HashMap<>(); Map cardMap = new HashMap<>(); @@ -113,14 +116,14 @@ public class ItemUtil { } selectDrop(sRewardGroup,itemMap,cardMap,equipMap,randomMap,dropRatio); } - useRandomItem(user,randomMap); + useRandomItem(user,randomMap,reason); if (isMapping == 1) { addItemToTemporaryBag(user, itemMap, equipMap, dropBuilder); } else { - addItem(user,itemMap,dropBuilder); - addEquip(user,equipMap,dropBuilder); + addItem(user,itemMap,dropBuilder,reason); + addEquip(user,equipMap,dropBuilder,reason); } - addCard(user,cardMap,dropBuilder); + addCard(user,cardMap,dropBuilder,reason); return dropBuilder; } @@ -159,11 +162,11 @@ public class ItemUtil { selectItemArr(itemArr,cardMap,itemMap,equipMap,randomMap); } - public static void drop(User user,CommonProto.Drop.Builder dropBuilder,Map itemMap, Map cardMap, Map equipMap, Map randomMap) throws Exception { - useRandomItem(user, randomMap); - addItem(user, itemMap, dropBuilder); - addCard(user, cardMap, dropBuilder); - addEquip(user, equipMap, dropBuilder); + public static void drop(User user,CommonProto.Drop.Builder dropBuilder,Map itemMap, Map cardMap, Map equipMap, Map randomMap,int reason) throws Exception { + useRandomItem(user, randomMap, reason); + addItem(user, itemMap, dropBuilder,reason); + addCard(user, cardMap, dropBuilder,reason); + addEquip(user, equipMap, dropBuilder,reason); } private static String getReward(Map itemMap,Map cardMap,Map equipMap, Map randomMap) { @@ -343,7 +346,7 @@ public class ItemUtil { * @param itemMap * @throws Exception */ - public static void addItem(User user, Map itemMap,CommonProto.Drop.Builder dropBuilder) throws Exception { + public static void addItem(User user, Map itemMap,CommonProto.Drop.Builder dropBuilder,int reason) throws Exception { if (itemMap.isEmpty()) { return; } @@ -358,6 +361,7 @@ public class ItemUtil { if(itemNum <= 0){ continue; } + itemNum=privilegeAdd(user,reason,sItem.getItemType(),itemNum); if (itemNum >= sItem.getItemNumlimit()){ itemNum = sItem.getItemNumlimit(); } @@ -561,7 +565,7 @@ public class ItemUtil { * @param equipMap * @param dropBuilder */ - private static void addEquip(User user, Map equipMap, CommonProto.Drop.Builder dropBuilder) throws Exception { + public static void addEquip(User user, Map equipMap, CommonProto.Drop.Builder dropBuilder,int reason) throws Exception { if (equipMap.isEmpty()) { return; } @@ -626,7 +630,7 @@ public class ItemUtil { * @param dropBuilder * @throws Exception */ - public static void addCard(User user,Map cardMap,CommonProto.Drop.Builder dropBuilder) throws Exception { + public static void addCard(User user,Map cardMap,CommonProto.Drop.Builder dropBuilder,int reason) throws Exception { if (cardMap.isEmpty()) { return; } @@ -770,7 +774,7 @@ public class ItemUtil { * @return * @throws Exception */ - public static CommonProto.Drop.Builder useRandomItem(User user,Map randomMap) throws Exception { + public static CommonProto.Drop.Builder useRandomItem(User user,Map randomMap,int reason) throws Exception { StringBuilder dropIds = new StringBuilder(); for (Map.Entry entry : randomMap.entrySet()){ int itemId = entry.getKey(); @@ -787,7 +791,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, 0); + drop = ItemUtil.drop(user, ints, 1, 0,reason); } return drop; } @@ -886,4 +890,37 @@ public class ItemUtil { } return false; } + + + //特权加成收益计算 + public static int privilegeAdd(User user,int reason,int itemType,int sourceNum){ + int vipLevel = user.getPlayerInfoManager().getVipLevel(); + SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel); + Map privilegeMap = sVipLevelConfig.getPrivilegeMap(); + if(reason == BIReason.ADVENTURE_BASE_REWARD){ + sourceNum = parseTheValueByPrivilegeMap(privilegeMap,sourceNum, VipPrivilegeType.ADVENTURE_BASE_REWARD); + } + if(reason == BIReason.ADVENTURE_BASE_REWARD || reason == BIReason.ADVENTURE_RANDOM_REWARDD ){ + if(itemType == GlobalItemType.MINERAL){ + sourceNum = parseTheValueByPrivilegeMap(privilegeMap,sourceNum,VipPrivilegeType.ADVENTURE_MINERAL_REWARD); + }else if(itemType == GlobalItemType.RUNNE){ + sourceNum = parseTheValueByPrivilegeMap(privilegeMap,sourceNum,VipPrivilegeType.ADVENTURE_RUNNE_REWARD); + } + } + return sourceNum; + } + + private static int parseTheValueByPrivilegeMap( Map privilegeMap,int sourceNum,int privigeId){ + Integer privigeValue = privilegeMap.get(1); + if(privigeValue!=null){ + SPrivilegeTypeConfig sPrivilegeTypeConfig = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(1); + int dataType = sPrivilegeTypeConfig.getIfFloat(); + if(dataType == GlobalsDef.PERCENT_TYPE){ + sourceNum=(10000 + privigeValue) * sourceNum / 10000; + }else{ + sourceNum+=privigeValue; + } + } + return sourceNum; + } }