From 49544176438d3729cc7c468bb21a18e0e1a738c3 Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 16 Apr 2021 10:31:51 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E9=80=9A=E7=94=A8=E7=A5=AD=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/UpHeroStarHandler.java | 13 +- .../ljsd/jieling/logic/hero/HeroLogic.java | 112 ++++++++++-------- .../main/java/config/SHeroRankupGroup.java | 5 +- .../com/ljsd/network/client/NettyClient.java | 9 +- 4 files changed, 82 insertions(+), 57 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/UpHeroStarHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/UpHeroStarHandler.java index d8a7b767a..93b1000ac 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/UpHeroStarHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/UpHeroStarHandler.java @@ -10,6 +10,7 @@ import rpc.protocols.HeroInfoProto; import rpc.protocols.MessageTypeProto; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component @@ -36,10 +37,14 @@ public class UpHeroStarHandler extends BaseHandler heroIdsList = consumeMaterialsList.get(i).getHeroIdsList(); - String[] heroIds = new String[heroIdsList.size()]; - heroIdsList.toArray(heroIds); + for (HeroInfoProto.ConsumeMaterial material : consumeMaterialsList) { + List heroIdsList = new ArrayList<>(); + // 获取英雄id + material.getHeroIdsList().stream() + .filter(v->v.getType() == 1) + .forEach(v->heroIdsList.add(v.getItemId())); + String[] heroIds = heroIdsList.toArray(new String[0]); + // 验证神将是否可以消耗 useFunction = HeroLogic.getInstance().isUseFunction(iSession.getUid(), HongMengFunctionEnum.PASSIVE_EAT.getPropertyId(), heroIds); if (!useFunction){ throw new ErrorCodeException(ErrorCode.HONGMENG_ING); 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 494ab939f..3eba5e4c1 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 @@ -990,81 +990,98 @@ public class HeroLogic{ if(consumeMaterialInfoByPosition ==null){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } - boolean canUse = true; - Set removeHeroIds = new HashSet<>(); + int needTotalHeroNums = 0; if(consumeMaterialInfoByPosition.size()!=consumeMaterialsList.size()){ throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); } //判断编队 for(HeroInfoProto.ConsumeMaterial consumeMaterial1 : consumeMaterialsList) { - List heroIdsList = consumeMaterial1.getHeroIdsList(); + List heroIdsList = new ArrayList<>(); + consumeMaterial1.getHeroIdsList().stream() + .filter(v->v.getType() == 1) + .forEach(v->heroIdsList.add(v.getItemId())); ErrorCode err = ItemLogic.getInstance().checkHeroResolve(heroIdsList, user); if(null!=err){ throw new ErrorCodeException(err); } } + List removeHeroIds = new ArrayList<>(); + HashMap removeItemMap = new HashMap<>(); StringBuilder reportConsumeHero = new StringBuilder(); + for(HeroInfoProto.ConsumeMaterial consumeMaterial1 : consumeMaterialsList){ int position = consumeMaterial1.getPosition(); SCHero.ConsumeMaterialInfo consumeMaterialInfo = consumeMaterialInfoByPosition.get(position); int nums = consumeMaterialInfo.getNums(); needTotalHeroNums+=nums; - List heroIdsList = consumeMaterial1.getHeroIdsList(); + List list = consumeMaterial1.getHeroIdsList(); SHeroRankupGroup sHeroRankupGroup = STableManager.getConfig(SHeroRankupGroup.class).get(consumeMaterialInfo.getGroupID()); int isSame = sHeroRankupGroup.getIssame(); int starLimit = sHeroRankupGroup.getStarLimit(); int isSameClan = sHeroRankupGroup.getIsSameClan(); int isId = sHeroRankupGroup.getIsId(); - for(String consumeHero : heroIdsList){ - Hero hero = heroManager.getHero(consumeHero); - if( null == hero ){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - //上报消耗的英雄数据 - if(reportConsumeHero.length()>0){ - reportConsumeHero.append("|"); - } - reportConsumeHero.append(hero.getTemplateId()).append("-").append(hero.getStar()).append("-").append(hero.getLevel(user.getHeroManager())); - - - if( 1 == isSame) { - if(hero.getTemplateId() != targetHero.getTemplateId()){ + List items = Arrays.stream(sHeroRankupGroup.getItems()).boxed().collect(Collectors.toList()); + for(HeroInfoProto.ConsumeItem consume : list){ + // 英雄 + if (consume.getType() == 1){ + Hero hero = heroManager.getHero(consume.getItemId()); + if( null == hero ){ throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); } - } - - if( starLimit != 0 ) { - if(hero.getStar() != starLimit){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); + //上报消耗的英雄数据 + if(reportConsumeHero.length()>0){ + reportConsumeHero.append("|"); } - } + reportConsumeHero.append(hero.getTemplateId()).append("-").append(hero.getStar()).append("-").append(hero.getLevel(user.getHeroManager())); - if( 1 == isSameClan) { - SCHero scHeroTmp = SCHero.getsCHero().get(hero.getTemplateId()); - SCHero targetSHero = SCHero.getsCHero().get(targetHero.getTemplateId()); - if( scHeroTmp.getPropertyName() != targetSHero.getPropertyName() ){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - } - if( isId != 0) { - if(hero.getTemplateId() != isId){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); + if( 1 == isSame) { + if(hero.getTemplateId() != targetHero.getTemplateId()){ + throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); + } } + + if( starLimit != 0 ) { + if(hero.getStar() != starLimit){ + throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); + } + } + + if( 1 == isSameClan) { + SCHero scHeroTmp = SCHero.getsCHero().get(hero.getTemplateId()); + SCHero targetSHero = SCHero.getsCHero().get(targetHero.getTemplateId()); + if( scHeroTmp.getPropertyName() != targetSHero.getPropertyName() ){ + throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); + } + } + + if(isId != 0) { + if(hero.getTemplateId() != isId){ + throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); + } + } + removeHeroIds.add(consume.getItemId()); + } + // 道具 + else { + if (!items.contains(Integer.parseInt(consume.getItemId()))){ + throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT); + } + Integer num = removeItemMap.getOrDefault(Integer.parseInt(consume.getItemId()), 0); + removeItemMap.put(Integer.parseInt(consume.getItemId()),num+1); } - removeHeroIds.add(consumeHero); } - + // 校验道具数量 + boolean cost = ItemUtil.checkCost(user, removeItemMap); + if (!cost){ + throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT); + } } - if(needTotalHeroNums!=removeHeroIds.size()){ - canUse=false; + if(needTotalHeroNums != (removeHeroIds.size()+removeItemMap.size())){ LOGGER.error("hero num not enough"); - } - - if(!canUse){ throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); } @@ -1074,16 +1091,16 @@ public class HeroLogic{ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } - //删除hero -// CommonProto.Drop.Builder baseBuilder = ItemLogic.getInstance().decomposeHero(session,new LinkedList<>(removeHeroIds),Collections.singleton(26),MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE); //改成归元获得,同时返还法宝获得 CommonProto.Drop.Builder baseBuilder = heroBackDrop(user,new ArrayList<>(removeHeroIds),10000,BIReason.UPHERO_DECOMPOS_HERO_REWARD,true); + // 删除英雄 for(String rmHeroId:removeHeroIds){ heroManager.removeHero(uid,rmHeroId); } + // 消耗道具 + ItemUtil.itemCost(user,removeItemMap,BIReason.COMPLEX_EQUIP_CONSUME,0); -// recyleHeroBySystem(user,removeHeroIds); rankUpHeroExecute(targetHero); Poster.getPoster().dispatchEvent(new HeroUpStarEvent(user.getId(),targetHero.getTemplateId(),targetHero.getStar())); if (targetHero.getStar()>=5&&targetHero.getStar()!=15){ @@ -1092,15 +1109,13 @@ public class HeroLogic{ } } -// if(targetHero.getStar()==5){ -// Poster.getPoster().dispatchEvent(new HeroFiveStarGetEvent(user.getId())); -// } targetHero.setStarBreakId(scHeroRankUpConfig.getId()); user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_UP,2,targetHero.getTemplateId(),targetHero.getStar()); user.getUserMissionManager().onGameEvent(user,GameEvent.GET_HERO,targetHero.getTemplateId(),targetHero.getStar()); if(isInTeam(user,heroId,1)){ Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid())); } + if (targetHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_awaken_hero_content_parm)) { Set hongmengMaxLevel = heroManager.getHongmengMaxLevel(); boolean add = hongmengMaxLevel.add(targetHero.getTemplateId()); @@ -1124,9 +1139,10 @@ public class HeroLogic{ } String consume = StringUtil.parseArrayToString(consumeMaterial); -// HERO_STRENGTHEN(13,"hero_strengthen", new CommonEventHandler(),new String[]{"hero_id","old_quality","new_quality","strengthen_type","cost_item_list","cost_hero_list"}), ReportUtil.onReportEvent(user, ReportEventEnum.HERO_STRENGTHEN.getType(),String.valueOf(targetHero.getTemplateId()),String.valueOf(oldStar),String.valueOf(targetHero.getStar()),consume,reportConsumeHero.toString()); } + + private void rankUpHeroExecute(Hero hero)throws Exception { //是否解锁法宝 SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting(); diff --git a/tablemanager/src/main/java/config/SHeroRankupGroup.java b/tablemanager/src/main/java/config/SHeroRankupGroup.java index 16d9478d9..0b8b8fb11 100644 --- a/tablemanager/src/main/java/config/SHeroRankupGroup.java +++ b/tablemanager/src/main/java/config/SHeroRankupGroup.java @@ -15,6 +15,7 @@ public class SHeroRankupGroup implements BaseConfig { private int isId; + private int[] items; @Override public void init() throws Exception { @@ -40,5 +41,7 @@ public class SHeroRankupGroup implements BaseConfig { return isId; } - + public int[] getItems() { + return items; + } } \ No newline at end of file diff --git a/test/src/main/java/com/ljsd/network/client/NettyClient.java b/test/src/main/java/com/ljsd/network/client/NettyClient.java index 76b7dcab4..df3c191b2 100644 --- a/test/src/main/java/com/ljsd/network/client/NettyClient.java +++ b/test/src/main/java/com/ljsd/network/client/NettyClient.java @@ -256,10 +256,11 @@ public class NettyClient { public HeroInfoProto.UpHeroStarRequest upHeroStar(){ String heroId = ""; List consumeMaterialsList = new ArrayList<>(); - consumeMaterialsList.add(HeroInfoProto.ConsumeMaterial.newBuilder().setPosition(1).addHeroIds("").build()); - consumeMaterialsList.add(HeroInfoProto.ConsumeMaterial.newBuilder().setPosition(2).addHeroIds("").build()); - consumeMaterialsList.add(HeroInfoProto.ConsumeMaterial.newBuilder().setPosition(3).addHeroIds("").build()); - consumeMaterialsList.add(HeroInfoProto.ConsumeMaterial.newBuilder().setPosition(4).addHeroIds("").build()); + HeroInfoProto.ConsumeItem.Builder builder = HeroInfoProto.ConsumeItem.newBuilder(); + consumeMaterialsList.add(HeroInfoProto.ConsumeMaterial.newBuilder().setPosition(1).addHeroIds(builder).build()); + consumeMaterialsList.add(HeroInfoProto.ConsumeMaterial.newBuilder().setPosition(2).addHeroIds(builder).build()); + consumeMaterialsList.add(HeroInfoProto.ConsumeMaterial.newBuilder().setPosition(3).addHeroIds(builder).build()); + consumeMaterialsList.add(HeroInfoProto.ConsumeMaterial.newBuilder().setPosition(4).addHeroIds(builder).build()); return HeroInfoProto.UpHeroStarRequest.newBuilder().setHeroId(heroId).addAllConsumeMaterials(consumeMaterialsList).build(); } From 509c9b57c81d2e56807c3f09ec99d444e46a952b Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 16 Apr 2021 14:24:48 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=81=93=E5=85=B7?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B:=E4=B8=87=E8=83=BD=E7=8B=97=E7=B2=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/jieling/globals/GlobalItemType.java | 2 ++ serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java | 1 + 2 files changed, 3 insertions(+) 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 eb8c78fa0..feac4a7d3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java @@ -32,6 +32,8 @@ public interface GlobalItemType { int SELECTSecretBox=20; // 自选宝箱(前端要区分) int SpecialMonster=21; // 灵兽 int SpecialMonsterItem=22; // 灵兽碎片 + // 万能狗粮 + int AllPowerful_DogFood = 25; //物品使用类型 int NO_USE = 0 ; //不使用 int RANDOM_USE = 1; // 随机使用 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 20a93a930..fdb21d6d3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -543,6 +543,7 @@ public class ItemUtil { case GlobalItemType.RIDE: case GlobalItemType.SELECTSecretBox: case GlobalItemType.SpecialMonsterItem: + case GlobalItemType.AllPowerful_DogFood: itemType = GlobalItemType.ITEM; break; default: From 4761478c74f0bc2046d88146a1ce171d1f40cfb3 Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 19 Apr 2021 15:38:29 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E9=80=9A=E7=94=A8=E7=A5=AD=E5=93=81bug?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 3eba5e4c1..d8fcbe4a0 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 @@ -1001,7 +1001,10 @@ public class HeroLogic{ consumeMaterial1.getHeroIdsList().stream() .filter(v->v.getType() == 1) .forEach(v->heroIdsList.add(v.getItemId())); - ErrorCode err = ItemLogic.getInstance().checkHeroResolve(heroIdsList, user); + ErrorCode err = null; + if (heroIdsList.size() > 0){ + err = ItemLogic.getInstance().checkHeroResolve(heroIdsList, user); + } if(null!=err){ throw new ErrorCodeException(err); } From 174a0f799ab62f24ce97abb39aa6772c24a79dea Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 19 Apr 2021 17:53:44 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E5=90=8C=E7=B3=BB=E7=A5=AD=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/hero/HeroLogic.java | 31 ++++++++++++++++--- .../main/java/config/SHeroRankupGroup.java | 6 ++++ 2 files changed, 33 insertions(+), 4 deletions(-) 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 d8fcbe4a0..e9f9fad3a 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 @@ -1025,7 +1025,10 @@ public class HeroLogic{ int starLimit = sHeroRankupGroup.getStarLimit(); int isSameClan = sHeroRankupGroup.getIsSameClan(); int isId = sHeroRankupGroup.getIsId(); + // 万能道具代替 List items = Arrays.stream(sHeroRankupGroup.getItems()).boxed().collect(Collectors.toList()); + // 专属道具代替 + int[][] itemCamp = sHeroRankupGroup.getItemCamp(); for(HeroInfoProto.ConsumeItem consume : list){ // 英雄 if (consume.getType() == 1){ @@ -1069,11 +1072,15 @@ public class HeroLogic{ } // 道具 else { - if (!items.contains(Integer.parseInt(consume.getItemId()))){ - throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT); + int itemId = Integer.parseInt(consume.getItemId()); + if (!items.contains(itemId)){ + boolean camp = upStartItemCamp(scHero.getPropertyName(), itemCamp, itemId); + if (!camp){ + throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT); + } } - Integer num = removeItemMap.getOrDefault(Integer.parseInt(consume.getItemId()), 0); - removeItemMap.put(Integer.parseInt(consume.getItemId()),num+1); + Integer num = removeItemMap.getOrDefault(itemId, 0); + removeItemMap.put(itemId,num+1); } } // 校验道具数量 @@ -1145,6 +1152,22 @@ public class HeroLogic{ ReportUtil.onReportEvent(user, ReportEventEnum.HERO_STRENGTHEN.getType(),String.valueOf(targetHero.getTemplateId()),String.valueOf(oldStar),String.valueOf(targetHero.getStar()),consume,reportConsumeHero.toString()); } + /** + * 升星验证同系道具 + * @param type + * @param itemCamp + * @param itemId + * @return + */ + private boolean upStartItemCamp(int type,int[][] itemCamp,int itemId){ + for (int[] ints : itemCamp) { + if (type == ints[0] && itemId == ints[1]){ + return true; + } + } + return false; + } + private void rankUpHeroExecute(Hero hero)throws Exception { //是否解锁法宝 diff --git a/tablemanager/src/main/java/config/SHeroRankupGroup.java b/tablemanager/src/main/java/config/SHeroRankupGroup.java index 0b8b8fb11..daa872aa5 100644 --- a/tablemanager/src/main/java/config/SHeroRankupGroup.java +++ b/tablemanager/src/main/java/config/SHeroRankupGroup.java @@ -16,6 +16,8 @@ public class SHeroRankupGroup implements BaseConfig { private int isId; private int[] items; + + private int[][] itemCamp; @Override public void init() throws Exception { @@ -44,4 +46,8 @@ public class SHeroRankupGroup implements BaseConfig { public int[] getItems() { return items; } + + public int[][] getItemCamp() { + return itemCamp; + } } \ No newline at end of file From 1a1a1127346e1c0a1027fd78e03a779d08422e9c Mon Sep 17 00:00:00 2001 From: lvxinran Date: Tue, 20 Apr 2021 14:04:01 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E6=8A=BD=E5=8D=A1=E6=B8=85=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/hero/HeroLogic.java | 20 +++++++++---------- .../java/config/SLotteryRewardConfig.java | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) 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 91b42e349..c29ba26fe 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 @@ -517,7 +517,7 @@ public class HeroLogic{ } SLotteryRewardConfig sLotteryRewardConfig; //是否有必出 - int currStarId = 0; + int[] currStarId;//需要清除的计数id if(mustSet.isEmpty()){ sLotteryRewardConfig = randomHeroByPoolId(getPooId(sLotterySetting), 1, user.getPlayerInfoManager().getLevel()); // if(randomPoolByType.get(mergePool)!=null) { @@ -550,25 +550,25 @@ public class HeroLogic{ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } sLotteryRewardConfig = randomHeroByPoolId(onConfig.getpool_id(), 1, user.getPlayerInfoManager().getLevel()); - currStarId = maxId; + currStarId = new int[]{maxId}; } if(randomPoolByType.get(mergePool)!=null) { - for (int key : randomPoolByType.get(mergePool).keySet()) { //如果生效次数是0可重置 List lotteryListByDifferentType = SLotterySpecialConfig.getLotteryListByDifferentType(key); - if (currStarId >= key && lotteryListByDifferentType != null && lotteryListByDifferentType.iterator().hasNext() && lotteryListByDifferentType.iterator().next().getMin_num() == 0) { - randomPoolByType.get(mergePool).put(key, 0); - } else { - int curValue = randomPoolByType.get(mergePool).getOrDefault(key, 0); - randomPoolByType.get(mergePool).put(key, curValue + 1); + for(int starId:currStarId){ + if (starId >= key && lotteryListByDifferentType != null && lotteryListByDifferentType.iterator().hasNext() && lotteryListByDifferentType.iterator().next().getMin_num() == 0) { + randomPoolByType.get(mergePool).put(key, 0); + } else { + int curValue = randomPoolByType.get(mergePool).getOrDefault(key, 0); + randomPoolByType.get(mergePool).put(key, curValue + 1); + } } } } heroManager.updateRandomPoolByType(mergePool,randomPoolByType.get(mergePool)); - int result = sLotteryRewardConfig.getId(); - return result; + return sLotteryRewardConfig.getId(); } private int getSpecialPoolByRandcount(SLotterySetting sLotterySetting, int randCount,int poolCount) { diff --git a/tablemanager/src/main/java/config/SLotteryRewardConfig.java b/tablemanager/src/main/java/config/SLotteryRewardConfig.java index 667be6c48..932857c4f 100644 --- a/tablemanager/src/main/java/config/SLotteryRewardConfig.java +++ b/tablemanager/src/main/java/config/SLotteryRewardConfig.java @@ -23,7 +23,7 @@ public class SLotteryRewardConfig implements BaseConfig { private int[] openRules; - private int star; + private int[] star; private static Map> sLotteryRewardConfigsByPoolId; private static Map sLotteryRewardWeightByPoolId; @@ -85,7 +85,7 @@ public class SLotteryRewardConfig implements BaseConfig { return openRules; } - public int getStar() { + public int[] getStar() { return star; } } \ No newline at end of file From 59b28c36e8ce1c6134391830140e05c23ae2cce2 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Tue, 4 May 2021 00:24:50 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E5=9C=BA=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20=E8=B5=9B=E5=AD=A3=E9=87=8D=E7=BD=AE=E4=B8=8D?= =?UTF-8?q?=E6=B8=85=E7=A9=BA=E7=A7=AF=E5=88=86=EF=BC=8C=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E4=B8=BA=E4=B8=8A=E8=B5=9B=E5=AD=A3=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E7=9A=84=E7=99=BE=E5=88=86=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/arena/ArenaLogic.java | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) 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 3827f9f3e..646ea0c31 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 @@ -27,6 +27,7 @@ import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.network.server.GlobalidHelper; import com.ljsd.jieling.network.server.WorldHelper; import com.ljsd.jieling.network.session.ISession; +import org.luaj.vm2.lib.jse.JseMathLib; import rpc.protocols.ArenaInfoProto; import rpc.protocols.CommonProto; import rpc.protocols.FightInfoProto; @@ -569,31 +570,43 @@ public class ArenaLogic { } public String getRewardByRank(int rank,int type){ - Map config = STableManager.getConfig(SArenaReward.class); - for(SArenaReward sArenaReward : config.values()){ - int minRank = sArenaReward.getMinRank(); - int maxRank = sArenaReward.getMaxRank(); - if(rank>=minRank && rank<=maxRank){ - if(type == GlobalsDef.ARENA_DAILY_REWARD){ - int[][] dailyReward = sArenaReward.getDailyReward(); - return StringUtil.parseArrayToString(dailyReward); - }else{ - int[][] seasonReward = sArenaReward.getSeasonReward(); - return StringUtil.parseArrayToString(seasonReward); - } - } - } +// Map config = STableManager.getConfig(SArenaReward.class); +// for(SArenaReward sArenaReward : config.values()){ +// int minRank = sArenaReward.getMinRank(); +// int maxRank = sArenaReward.getMaxRank(); +// if(rank>=minRank && rank<=maxRank){ +// if(type == GlobalsDef.ARENA_DAILY_REWARD){ +// int[][] dailyReward = sArenaReward.getDailyReward(); +// return StringUtil.parseArrayToString(dailyReward); +// }else{ +// int[][] seasonReward = sArenaReward.getSeasonReward(); +// return StringUtil.parseArrayToString(seasonReward); +// } +// } +// } return ""; } public void updateArenaSeason(int curSeason){ this.curSeason = curSeason; + //初始化竞技场新周期数据 + if(curSeason>viewSeason){ + String oldRedisKey = RedisUtil.getInstence().getKey(RedisKey.ARENA_RANK,String.valueOf(viewSeason)); + String newRedisKey = RedisUtil.getInstence().getKey(RedisKey.ARENA_RANK,String.valueOf(curSeason)); + Set> set= RedisUtil.getInstence().getAllZsetRange(oldRedisKey); + for(ZSetOperations.TypedTuple item : set){ + String id = item.getValue(); + Double score = item.getScore(); + double time = score - score.intValue(); + double newScore =(int)(score.intValue()*0.8)+ time; + RedisUtil.getInstence().zsetAddOne(newRedisKey,id,newScore); + } + } if(this.curSeason!=0){ viewSeason = this.curSeason; } } - public void playWithSb(ISession session,int challengeUid,int myteamId) throws Exception { User mine = UserManager.getUser(session.getUid()); User defUser = UserManager.getUser(challengeUid); From c05d0ea2b6800d4a8708b3f9d7ab9c15b3a60c53 Mon Sep 17 00:00:00 2001 From: duhui Date: Wed, 21 Apr 2021 11:30:04 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8C=91=E6=88=98?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E6=97=B6=E6=94=B9=E4=B8=BA=E4=B8=8D=E6=B6=88?= =?UTF-8?q?=E8=80=97=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/jieling/handler/map/MapLogic.java | 1 - 1 file changed, 1 deletion(-) 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 f9ed13fe8..4bc8e1b87 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 @@ -3137,7 +3137,6 @@ public class MapLogic { CommonProto.Drop.Builder drop = ItemUtil.drop(user, sDailyChallengeConfig.getReward(), 1, 0, 1); builder.setDrop(drop); playerInfoManager.addDailyPass(id); - consumeCount = true; }else{ isFailed = true; } From 8d985faf56fdb096cf404d2c38c22dec33eafd55 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Wed, 21 Apr 2021 14:16:59 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E6=9A=82=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/network/client/NettyClient.java | 72 ++++++++++++++----- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/test/src/main/java/com/ljsd/network/client/NettyClient.java b/test/src/main/java/com/ljsd/network/client/NettyClient.java index 76b7dcab4..9f3d9e2e6 100644 --- a/test/src/main/java/com/ljsd/network/client/NettyClient.java +++ b/test/src/main/java/com/ljsd/network/client/NettyClient.java @@ -1,6 +1,7 @@ package com.ljsd.network.client; import com.google.protobuf.*; +import com.ljsd.jieling.netty.PackageConstant; import com.ljsd.jieling.netty.cocdex.Tea; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; @@ -13,8 +14,12 @@ import rpc.protocols.*; import java.util.ArrayList; import java.util.Arrays; +import java.util.Base64; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.TimeUnit; + +import static com.ljsd.jieling.netty.PackageConstant.GAMEID_LEN; public class NettyClient { @@ -34,27 +39,39 @@ public class NettyClient { b.group(group) .channel(NioSocketChannel.class) .handler(new NettyTCPClientInitializer()); + Channel ch = b.connect("api.gamegs.cn",8741).sync().channel(); - Channel ch = b.connect("127.0.0.1",26080).sync().channel(); +// PlayerInfoProto.SignInRequest.Builder builder = PlayerInfoProto.SignInRequest.newBuilder().setDayIndex(1203); - NettyTCPClientHandler handler = ch.pipeline().get(NettyTCPClientHandler.class); -//------------------------------------------测试类型------------------------------------------------------- -// GameProto.GameMessage gameMessage = new NettyClient().sendLoginMessageTest();//登陆请求 - PlayerInfoProto.GetPlayerInfoRequest gameMessage = new NettyClient().sendRegisterMessageTest();//注册请求 - LOGGER.info(gameMessage.toString()); -//--------------------------------------------------------------------------------------------------------- - PlayerInfoProto.SignInRequest.Builder builder = PlayerInfoProto.SignInRequest.newBuilder().setDayIndex(1203); - PlayerInfoProto.SignInRequest build = builder.build(); - - PlayerInfoProto.SecretBoxRandomRequest.Builder builder1 = PlayerInfoProto.SecretBoxRandomRequest.newBuilder().setTypeId(29); - - handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.RECONNECT_REQUEST_VALUE)); - msgIndex=31; - - while (!handler.rec){ - Thread.sleep(1); +// ChatProto.ChatUserV3 userFrom = ChatProto.ChatUserV3.newBuilder().build(); +// ChatProto.ChatV3 chat = ChatProto.ChatV3.newBuilder().setFrom(userFrom).build(); +// byte[] bytes = wrappedBuffer((short) 100, chat.toByteArray()); + ; + NettyTCPClientHandler handler = ch.pipeline().get(NettyTCPClientHandler.class); + while(true){ +// handler.sendRequest_jieling(bytes); + System.out.println(11111); + TimeUnit.SECONDS.sleep(3); } - handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.HERO_RAND_REQQUEST_VALUE)); + + +////------------------------------------------测试类型------------------------------------------------------- +// GameProto.GameMessage gameMessage = new NettyClient().sendLoginMessageTest();//登陆请求 +// PlayerInfoProto.GetPlayerInfoRequest gameMessage = new NettyClient().sendRegisterMessageTest();//注册请求 +// LOGGER.info(gameMessage.toString()); +////--------------------------------------------------------------------------------------------------------- +// PlayerInfoProto.SignInRequest.Builder builder = PlayerInfoProto.SignInRequest.newBuilder().setDayIndex(1203); +// PlayerInfoProto.SignInRequest build = builder.build(); +// +// PlayerInfoProto.SecretBoxRandomRequest.Builder builder1 = PlayerInfoProto.SecretBoxRandomRequest.newBuilder().setTypeId(29); +// +// handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.RECONNECT_REQUEST_VALUE)); +// msgIndex=31; +// +// while (!handler.rec){ +// Thread.sleep(1); +// } +// handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.HERO_RAND_REQQUEST_VALUE)); /* for(int i=0;i<100000;i++){ handler.sendRequest_jieling(makeFinalMessage(builder1.build(), MessageTypeProto.MessageType.SECRETBOX_RANDOM_REQUEST_VALUE)); @@ -288,4 +305,23 @@ public class NettyClient { return PlayerInfoProto.WorkShopEquipCreateRequest.newBuilder().setEquipTid(equipTid).build(); } + public static byte[] wrappedBuffer(short gameId, byte[] content) { + int length = PackageConstant.GAMEID_LEN+PackageConstant.CONTENT_LEN+content.length; + byte[] bytes = new byte[length]; + int pos = 0; + Tea.shortToByte(bytes, pos, gameId); + pos += PackageConstant.GAMEID_LEN; + Tea.intToByte(bytes, pos, content.length); + pos += PackageConstant.CONTENT_LEN; + + + if (content.length != 0) { + System.arraycopy(content, 0, bytes, pos, content.length); + } +// if (backMessage.length != 0) { +// LOGGER.info("wrappedBuffer uid=>{} sendbyte=>{}", uid, bytes1.length); +// } + return bytes; + } + } From 66a04865281ad1ad5d38fb84d87b228ac628e268 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Wed, 21 Apr 2021 14:44:26 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E6=8A=BD=E5=8D=A1=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/dao/HeroManager.java | 9 +++++++++ .../com/ljsd/jieling/logic/hero/HeroLogic.java | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java index cd413db03..1fc8ded0c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java @@ -22,6 +22,7 @@ public class HeroManager extends MongoBase { private Map mustRandomCount= new HashMap<>(); + private Map randomPoolInfo = new HashMap<>();//每个池子抽了多少次的信息 private Map heroHandBook = new HashMap<>(); private Set heroHandBookEnabled = new HashSet<>(); @@ -253,5 +254,13 @@ public class HeroManager extends MongoBase { } + public Map getRandomPoolInfo() { + return randomPoolInfo; + } + + public void addRandomPoolInfo(int poolId) { + randomPoolInfo.put(poolId,randomPoolInfo.getOrDefault(poolId,0)+1); + updateString("randomPoolInfo", randomPoolInfo); + } } 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 a089515e7..2c66df7a2 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 @@ -519,7 +519,8 @@ public class HeroLogic{ //是否有必出 int currStarId = 0; if(mustSet.isEmpty()){ - sLotteryRewardConfig = randomHeroByPoolId(getPooId(sLotterySetting), 1, user.getPlayerInfoManager().getLevel()); + int pooId = getPooId(sLotterySetting); + sLotteryRewardConfig = randomHeroByPoolId(pooId, user); // if(randomPoolByType.get(mergePool)!=null) { // for (int key : randomPoolByType.get(mergePool).keySet()) { // if (star == key) { @@ -530,7 +531,10 @@ public class HeroLogic{ // } // } // } - currStarId = sLotteryRewardConfig.getStar(); + if(sLotteryRewardConfig!=null){ + currStarId = sLotteryRewardConfig.getStar(); + LOGGER.info("随机到了{}-->对应star-->{}",sLotteryRewardConfig.getId(),currStarId); + } }else{ //有必出时比较各个优先级,取优先级高的 @@ -549,7 +553,7 @@ public class HeroLogic{ if(onConfig==null){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } - sLotteryRewardConfig = randomHeroByPoolId(onConfig.getpool_id(), 1, user.getPlayerInfoManager().getLevel()); + sLotteryRewardConfig = randomHeroByPoolId(onConfig.getpool_id(), user); currStarId = maxId; } if(randomPoolByType.get(mergePool)!=null) { @@ -558,6 +562,7 @@ public class HeroLogic{ //如果生效次数是0可重置 List lotteryListByDifferentType = SLotterySpecialConfig.getLotteryListByDifferentType(key); if (currStarId >= key && lotteryListByDifferentType != null && lotteryListByDifferentType.iterator().hasNext() && lotteryListByDifferentType.iterator().next().getMin_num() == 0) { + LOGGER.info("清除计数{}下的--->{}",mergePool,key); randomPoolByType.get(mergePool).put(key, 0); } else { int curValue = randomPoolByType.get(mergePool).getOrDefault(key, 0); @@ -567,6 +572,7 @@ public class HeroLogic{ } heroManager.updateRandomPoolByType(mergePool,randomPoolByType.get(mergePool)); int result = sLotteryRewardConfig.getId(); + heroManager.addRandomPoolInfo(sLotteryRewardConfig.getPool()); return result; } @@ -641,7 +647,7 @@ public class HeroLogic{ - public static SLotteryRewardConfig randomHeroByPoolId(int poolId,int randomCount,int userLevel){ + public static SLotteryRewardConfig randomHeroByPoolId(int poolId,User user){ List sLotteryRewardConfigs = new ArrayList<>(); List sLotteryRewardConfigListByPoolId = SLotteryRewardConfig.getSLotteryRewardConfigListByPoolId(poolId); int totalCountByPoolId =0; @@ -653,10 +659,10 @@ public class HeroLogic{ int openValue = openRules[1]; switch (openType) { case 1: - canAdd = randomCount > openValue; + canAdd = user.getHeroManager().getRandomPoolInfo().getOrDefault(poolId,0) > openValue; break; case 2: - canAdd = userLevel > openValue; + canAdd = user.getPlayerInfoManager().getLevel() > openValue; break; default: { break; From 11bb0ec9868fe8f423c60be35c84253a789016bf Mon Sep 17 00:00:00 2001 From: lvxinran Date: Thu, 22 Apr 2021 10:00:24 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E6=8A=A5=E9=94=99=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/network/client/NettyClient.java | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/test/src/main/java/com/ljsd/network/client/NettyClient.java b/test/src/main/java/com/ljsd/network/client/NettyClient.java index 82268a3be..4e00385db 100644 --- a/test/src/main/java/com/ljsd/network/client/NettyClient.java +++ b/test/src/main/java/com/ljsd/network/client/NettyClient.java @@ -1,7 +1,6 @@ package com.ljsd.network.client; import com.google.protobuf.*; -import com.ljsd.jieling.netty.PackageConstant; import com.ljsd.jieling.netty.cocdex.Tea; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; @@ -14,12 +13,10 @@ import rpc.protocols.*; import java.util.ArrayList; import java.util.Arrays; -import java.util.Base64; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; -import static com.ljsd.jieling.netty.PackageConstant.GAMEID_LEN; public class NettyClient { @@ -306,23 +303,23 @@ public class NettyClient { return PlayerInfoProto.WorkShopEquipCreateRequest.newBuilder().setEquipTid(equipTid).build(); } - public static byte[] wrappedBuffer(short gameId, byte[] content) { - int length = PackageConstant.GAMEID_LEN+PackageConstant.CONTENT_LEN+content.length; - byte[] bytes = new byte[length]; - int pos = 0; - Tea.shortToByte(bytes, pos, gameId); - pos += PackageConstant.GAMEID_LEN; - Tea.intToByte(bytes, pos, content.length); - pos += PackageConstant.CONTENT_LEN; - - - if (content.length != 0) { - System.arraycopy(content, 0, bytes, pos, content.length); - } -// if (backMessage.length != 0) { -// LOGGER.info("wrappedBuffer uid=>{} sendbyte=>{}", uid, bytes1.length); +// public static byte[] wrappedBuffer(short gameId, byte[] content) { +// int length = PackageConstant.GAMEID_LEN+PackageConstant.CONTENT_LEN+content.length; +// byte[] bytes = new byte[length]; +// int pos = 0; +// Tea.shortToByte(bytes, pos, gameId); +// pos += PackageConstant.GAMEID_LEN; +// Tea.intToByte(bytes, pos, content.length); +// pos += PackageConstant.CONTENT_LEN; +// +// +// if (content.length != 0) { +// System.arraycopy(content, 0, bytes, pos, content.length); // } - return bytes; - } +//// if (backMessage.length != 0) { +//// LOGGER.info("wrappedBuffer uid=>{} sendbyte=>{}", uid, bytes1.length); +//// } +// return bytes; +// } }