From 9e433e1969a948d7a58618bdd66476cb3a49510c Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 30 Dec 2021 16:09:24 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=AE=B6=E5=9B=AD=E5=8A=9F=E8=83=BD1.?= =?UTF-8?q?1.5=E3=80=91=201=E3=80=81=E5=AE=B6=E5=9B=AD=E7=89=B9=E6=9D=83?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/core/VipPrivilegeType.java | 3 + .../ljsd/jieling/logic/hero/HeroLogic.java | 3 +- .../ljsd/jieling/logic/home/HomeLogic.java | 69 ++++++++++++------- .../src/main/java/config/SSpecialConfig.java | 2 + 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java b/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java index 354899a26..784e316b4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java @@ -52,4 +52,7 @@ public interface VipPrivilegeType { int NEW_GENERAL_ATTACK_NUM = 3005; + int HOME_DAY_TIME_NUM = 4021;//每日浮生特权秒时间次数% + int HOME_ADD_EARNINGS = 4022;//浮生特权增加浮生门产出建筑产量 + } 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 2044b7e60..770d6be77 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 @@ -2783,7 +2783,8 @@ public class HeroLogic { for (int[] prop : property) { int buff = 0; // 家园装备强化属性 - buff += Optional.ofNullable(strengthenMap.get(intensifyMap.get(sEquipConfig.getPosition()))).map(SEquipStrengthen::getRate).orElse(0); + int strongeId = Optional.ofNullable(intensifyMap.get(sEquipConfig.getPosition())).orElse(0); + buff += Optional.ofNullable(strengthenMap.get(strongeId)).map(SEquipStrengthen::getRate).orElse(0); // 突破 buff += Optional.ofNullable(rankUpMap.get(homeRankUp)).map(v -> v.getRate()[sEquipConfig.getPosition() - 1]).orElse(0); long value = prop[1] + (long) prop[1] / 100 *buff; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/home/HomeLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/home/HomeLogic.java index 28db6f856..431e86d9d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/home/HomeLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/home/HomeLogic.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.home; +import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.BIReason; @@ -51,7 +52,7 @@ public class HomeLogic { User user = UserManager.getUser(session.getUid()); //xxxx 目前只允许升级一个建筑,多个建筑一键升级需要优化 int id = proto.getIdsList().get(0); - // 1:普通升级, 2:立即完成 + // 1:普通升级, 2:立即完成 3:取消升级 4:特权加速 int type = proto.getType(); ArrayList list = new ArrayList<>(); // 当前时间 @@ -95,7 +96,7 @@ public class HomeLogic { info.setUpLvEndTime(now + endTime); } // 特殊情况 - else if (info.getUpLvEndTime() <= now){ + if (info.getUpLvEndTime() <= now){ // 升级 architectureUpLvEnd(user, landLevel.getPoolID(), info); // 可以继续升级 @@ -104,32 +105,46 @@ public class HomeLogic { info.setUpLvEndTime(landLevel1.getTime() + now); } } - // 取消 - if (type == 3){ - info.setUpLvEndTime(0); - } // 立即完成 - if (type == 2 && info.getUpLvEndTime() > now){ - // 验证特权次数 - boolean countBol = PlayerLogic.getInstance().checkAndUpdate(user, proto.getPrivilageTypeId(), 1); - // 无特权,消耗道具 - if (!countBol || proto.getPrivilageTypeId() == 0) { - // 条件: 单位/s 道具id 道具数量 - String[] stringValue = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_LATTICE_PRICE).split("#"); - // 立即升级消耗的道具 - double time = Math.max(info.getUpLvEndTime() - now,0); + if (type == 2){ + // 条件: 单位/s 道具id 道具数量 + int[] intValues = SSpecialConfig.getIntegerArrayValue(SSpecialConfig.HONGMENG_LATTICE_PRICE); + // 立即升级消耗的道具 + int time = Math.max(info.getUpLvEndTime() - now, 0); + if (time > 0){ // 每一个单位的消耗 - double oneCost = Integer.parseInt(stringValue[0]) * Integer.parseInt(stringValue[2]); + int oneCost = intValues[0] * intValues[2]; // 总消耗数量,向上取整 - double count = Math.ceil(time / oneCost); - int[][] cost1 = {{Integer.parseInt(stringValue[1]), (int) count}}; + int count = (int) Math.ceil((double) time/oneCost); + int[][] cost1 = {{intValues[1], count}}; boolean itemCost = ItemUtil.itemCost(user, cost1, BIReason.ARCHITECTURE_IMMEDIATELY_UP_LEVEL, 0); - if (!itemCost){ - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH,"浮生门建筑升级,立刻升级失败道具不足,建筑levelId:"+info.getId()+",道具要求:"+Arrays.toString(cost1)); + if (!itemCost) { + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH, "浮生门建筑升级,立刻升级失败道具不足,建筑levelId:" + info.getId() + ",道具要求:" + Arrays.toString(cost1)); } } architectureUpLvEnd(user, landLevel.getPoolID(), info); } + // 取消升级 + if (type == 3){ + info.setUpLvEndTime(0); + } + // 特权加速 + if (type == 4){ + // 验证特权次数 + boolean countBol = PlayerLogic.getInstance().checkAndUpdate(user, VipPrivilegeType.HOME_DAY_TIME_NUM, 1); + if (!countBol) { + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"特权加速,特权次数不足"); + } + int value = SSpecialConfig.getIntegerValue(SSpecialConfig.BUILDING_TIME_REDUCE); + int time = now + value; + // 加速后是否达到升级时间 + if (time >= info.getUpLvEndTime()){ + info.setUpLvEndTime(0); + architectureUpLvEnd(user, landLevel.getPoolID(), info); + }else { + info.setUpLvEndTime(time); + } + } ItemUtil.itemCost(user, items, BIReason.ARCHITECTURE_UP_LEVEL, 0); // 最后更新 user.getPlayerInfoManager().putArchitectureInfo(landLevel.getPoolID(),info); @@ -217,7 +232,13 @@ public class HomeLogic { // 配置表参数,生产道具id int itemId = homeLandLevel.getGain()[0]; // 每分钟生产数量 - int minutesNum = homeLandLevel.getGain()[1]; + double minutesNum = homeLandLevel.getGain()[1]; + // 特权 + boolean allowed = user.getPlayerInfoManager().checkFunctionIsAllowed(VipPrivilegeType.HOME_ADD_EARNINGS); + if (allowed){ + int[][]condition= SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(VipPrivilegeType.HOME_ADD_EARNINGS).getCondition(); + minutesNum = minutesNum + minutesNum * condition[0][1] / 10000; + } // 可领取上限 int getNumMax = homeLandLevel.getStorage()[0][1]; // 存储总上限,数值可能为0,0表示没有上限 @@ -232,14 +253,14 @@ public class HomeLogic { // 可领取的数量,总上限 long maxLimit = totalMax - itemNum; // 可领取的数量,单位上限 - long unitLimit = Math.min(minutesNum*time, getNumMax); + double unitLimit = Math.min(minutesNum*time, getNumMax); // 可领取的数量 - long getNum = Math.min(maxLimit, unitLimit); + double getNum = Math.min(maxLimit, unitLimit); if (totalMax == 0){ getNum = unitLimit; } // 走掉落,进背包 - ItemUtil.drop(user, new long[][]{{itemId, getNum}}, BIReason.ARCHITECTURE_EARNINGS, drop); + ItemUtil.drop(user, new long[][]{{itemId, (long) Math.ceil(getNum)}}, BIReason.ARCHITECTURE_EARNINGS, drop); // 未领取的数量 int time2 = (int) ((unitLimit - getNum) / minutesNum * 60); info.setProductionStartTime(nowInt - time2); diff --git a/tablemanager/src/main/java/config/SSpecialConfig.java b/tablemanager/src/main/java/config/SSpecialConfig.java index 23efb2dd4..2e3f4a919 100644 --- a/tablemanager/src/main/java/config/SSpecialConfig.java +++ b/tablemanager/src/main/java/config/SSpecialConfig.java @@ -127,6 +127,8 @@ public class SSpecialConfig implements BaseConfig { public static final String DAYS_FOR_RECHARGE_SINGLE = "DaysForRechargeSingle";//近期最大单笔充值金额累计时长 public static final String PER_CHANGING_CART_PROP = "PerChangingCartProp";//每激活一张变身卡所增加的全体属性 + public static final String BUILDING_TIME_REDUCE = "BuildingTimeReduce";//浮生特权每日每次减少建筑升级时间:秒 + @Override public void init() throws Exception {