【家园功能1.0.9】建筑升级只允许一次升级一个建筑,装备强化bug优化
parent
ee97a40004
commit
e5fc1ea28c
|
@ -2770,6 +2770,7 @@ public class HeroLogic {
|
|||
int equipForce = 0;
|
||||
Iterator<Map.Entry<Integer, Integer>> iterator = hero.getEquipByHongmengPositionMap(heroManager).entrySet().iterator();
|
||||
Map<Integer, Integer> intensifyMap = user.getEquipManager().getEquipIntensifyMap();
|
||||
Map<Integer, SEquipStrengthen> strengthenMap = STableManager.getConfig(SEquipStrengthen.class);
|
||||
// 套装list初始化
|
||||
ArrayList<SEquipConfig> suiteNumList = new ArrayList<>();
|
||||
while (iterator.hasNext()) {
|
||||
|
@ -2779,10 +2780,13 @@ public class HeroLogic {
|
|||
Map<Integer, Long> propertyValueByIdMap = new HashMap<>();
|
||||
for (int[] prop : property) {
|
||||
// 家园装备强化属性
|
||||
Integer level = intensifyMap.get(sEquipConfig.getPosition());
|
||||
Integer levelId = intensifyMap.get(sEquipConfig.getPosition());
|
||||
long value = prop[1];
|
||||
if (level != null){
|
||||
value = prop[1] + (prop[1]/100L*level);
|
||||
if (levelId != null){
|
||||
SEquipStrengthen strengthen = strengthenMap.get(levelId);
|
||||
if(strengthen != null){
|
||||
value = value + (value/100L*strengthen.getRate());
|
||||
}
|
||||
}
|
||||
propertyValueByIdMap.put(prop[0], value);
|
||||
}
|
||||
|
|
|
@ -52,102 +52,95 @@ public class HomeLogic {
|
|||
*/
|
||||
public void architectureUpLv(ISession session, PlayerInfoProto.ArchitectureOperateRequest proto) throws Exception {
|
||||
User user = UserManager.getUser(session.getUid());
|
||||
List<Integer> idsList = proto.getIdsList();
|
||||
//xxxx 目前只允许升级一个建筑,多个建筑一键升级需要优化
|
||||
int id = proto.getIdsList().get(0);
|
||||
// 1:普通升级, 2:立即完成
|
||||
int type = proto.getType();
|
||||
ArrayList<CommonProto.ArchitectureInfo> list = new ArrayList<>();
|
||||
// 当前时间
|
||||
int now = TimeUtils.nowInt();
|
||||
Map<Integer, SHomeLandLevel> config = STableManager.getConfig(SHomeLandLevel.class);
|
||||
for (Integer id : idsList) {
|
||||
// 建筑信息验证
|
||||
ArchitectureInfo info = user.getPlayerInfoManager().getArchitectureInfoMap().get(id);
|
||||
if (info == null) {
|
||||
LOGGER.error("浮生门建筑升级,数据库内找不到建筑poolId:{}", id);
|
||||
continue;
|
||||
}
|
||||
SHomeLandLevel landLevel = config.get(info.getId());
|
||||
if (landLevel == null){
|
||||
LOGGER.error("浮生门建筑升级,策划表内找不到建筑levelId:{}", info.getId());
|
||||
continue;
|
||||
}
|
||||
//升级前置条件
|
||||
int[] rule = landLevel.getRule();
|
||||
if (rule != null && rule.length > 1){
|
||||
ArchitectureInfo info1 = user.getPlayerInfoManager().getArchitectureInfoMap().get(rule[0]);
|
||||
if (info1 == null){
|
||||
LOGGER.error("浮生门建筑升级,前置建筑未解锁,升级建筑levelId:{},前置建筑poolId:{}",id,rule[0]);
|
||||
continue;
|
||||
}
|
||||
int level = Optional.ofNullable(config.get(info1.getId())).map(SHomeLandLevel::getlevel).orElse(0);
|
||||
if (level < rule[1]){
|
||||
LOGGER.error("浮生门建筑升级,前置建筑等级不足,升级建筑levelId:{},前置建筑levelId:{}",id,info1.getId());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// 最高等级
|
||||
int maxId = config.values().stream().filter(v->v.getPoolID()==landLevel.getPoolID()).mapToInt(SHomeLandLevel::getlevel).max().orElse(0);
|
||||
if (info.getId() == maxId) {
|
||||
LOGGER.error("浮生门建筑升级,建筑等级最高,id:{}", info.getId());
|
||||
continue;
|
||||
}
|
||||
// 需要消耗的道具
|
||||
int[][] items = landLevel.getCost();
|
||||
boolean cost = ItemUtil.checkCostLong(user, items, 1);
|
||||
if (!cost) {
|
||||
LOGGER.error("浮生门建筑升级,建筑升级要求道具不足,建筑levelId:{},道具要求:{}", info.getId(),Arrays.toString(items));
|
||||
continue;
|
||||
}
|
||||
// 普通升级
|
||||
if (info.getUpLvEndTime() == 0){
|
||||
int endTime = landLevel.getTime();
|
||||
info.setUpLvEndTime(now + endTime);
|
||||
}
|
||||
// 特殊情况
|
||||
else if (info.getUpLvEndTime() <= now){
|
||||
// 升级
|
||||
architectureUpLvEnd(user, landLevel.getPoolID(), info);
|
||||
// 可以继续升级
|
||||
if (info.getId() < maxId){
|
||||
SHomeLandLevel landLevel1 = config.get(info.getId());
|
||||
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);
|
||||
// 每一个单位的消耗
|
||||
double oneCost = Integer.parseInt(stringValue[0]) * Integer.parseInt(stringValue[2]);
|
||||
// 总消耗数量,向上取整
|
||||
double count = Math.ceil(time / oneCost);
|
||||
int[][] cost1 = {{Integer.parseInt(stringValue[1]), (int) count}};
|
||||
boolean itemCost = ItemUtil.itemCost(user, cost1, BIReason.ARCHITECTURE_IMMEDIATELY_UP_LEVEL, 0);
|
||||
if (!itemCost){
|
||||
LOGGER.error("浮生门建筑升级,立刻升级失败,道具不足,建筑levelId:{},道具要求:{}", info.getId(),Arrays.toString(cost1));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
architectureUpLvEnd(user, landLevel.getPoolID(), info);
|
||||
}
|
||||
ItemUtil.itemCost(user, items, BIReason.ARCHITECTURE_UP_LEVEL, 0);
|
||||
// 最后更新
|
||||
user.getPlayerInfoManager().putArchitectureInfo(landLevel.getPoolID(),info);
|
||||
// 需要更新的建筑信息
|
||||
CommonProto.ArchitectureInfo.Builder builder = CommonProto.ArchitectureInfo.newBuilder()
|
||||
.setId(info.getId()).setProductionStartTime(info.getProductionStartTime()).setUpLvEndTime(info.getUpLvEndTime());
|
||||
list.add(builder.build());
|
||||
// 建筑信息验证
|
||||
ArchitectureInfo info = user.getPlayerInfoManager().getArchitectureInfoMap().get(id);
|
||||
if (info == null) {
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"浮生门建筑升级,数据库内找不到建筑poolId:"+id);
|
||||
}
|
||||
SHomeLandLevel landLevel = config.get(info.getId());
|
||||
if (landLevel == null){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"浮生门建筑升级,策划表内找不到建筑levelId:"+info.getId());
|
||||
}
|
||||
//升级前置条件
|
||||
int[] rule = landLevel.getRule();
|
||||
if (rule != null && rule.length > 1){
|
||||
ArchitectureInfo info1 = user.getPlayerInfoManager().getArchitectureInfoMap().get(rule[0]);
|
||||
if (info1 == null){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"浮生门建筑升级,前置建筑未解锁,升级建筑levelId:"+info.getId()+",前置建筑poolId:"+rule[0]);
|
||||
}
|
||||
int level = Optional.ofNullable(config.get(info1.getId())).map(SHomeLandLevel::getlevel).orElse(0);
|
||||
if (level < rule[1]){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"浮生门建筑升级,前置建筑等级不足,升级建筑levelId:"+info.getId()+",前置建筑levelId:"+info1.getId());
|
||||
}
|
||||
}
|
||||
// 最高等级
|
||||
int maxId = config.values().stream().filter(v->v.getPoolID()==landLevel.getPoolID()).mapToInt(SHomeLandLevel::getlevel).max().orElse(0);
|
||||
if (info.getId() == maxId) {
|
||||
throw new ErrorCodeException(ErrorCode.LEVE_MAX,"浮生门建筑升级,建筑等级最高,升级建筑levelId:"+info.getId());
|
||||
}
|
||||
// 需要消耗的道具
|
||||
int[][] items = landLevel.getCost();
|
||||
boolean cost = ItemUtil.checkCostLong(user, items, 1);
|
||||
if (!cost) {
|
||||
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH,"浮生门建筑升级,建筑升级要求道具不足,建筑levelId:"+info.getId()+",道具要求:"+Arrays.toString(items));
|
||||
}
|
||||
// 普通升级
|
||||
if (info.getUpLvEndTime() == 0){
|
||||
int endTime = landLevel.getTime();
|
||||
info.setUpLvEndTime(now + endTime);
|
||||
}
|
||||
// 特殊情况
|
||||
else if (info.getUpLvEndTime() <= now){
|
||||
// 升级
|
||||
architectureUpLvEnd(user, landLevel.getPoolID(), info);
|
||||
// 可以继续升级
|
||||
if (info.getId() < maxId){
|
||||
SHomeLandLevel landLevel1 = config.get(info.getId());
|
||||
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);
|
||||
// 每一个单位的消耗
|
||||
double oneCost = Integer.parseInt(stringValue[0]) * Integer.parseInt(stringValue[2]);
|
||||
// 总消耗数量,向上取整
|
||||
double count = Math.ceil(time / oneCost);
|
||||
int[][] cost1 = {{Integer.parseInt(stringValue[1]), (int) 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));
|
||||
}
|
||||
}
|
||||
architectureUpLvEnd(user, landLevel.getPoolID(), info);
|
||||
}
|
||||
ItemUtil.itemCost(user, items, BIReason.ARCHITECTURE_UP_LEVEL, 0);
|
||||
// 最后更新
|
||||
user.getPlayerInfoManager().putArchitectureInfo(landLevel.getPoolID(),info);
|
||||
// 需要更新的建筑信息
|
||||
CommonProto.ArchitectureInfo.Builder infoBuilder = CommonProto.ArchitectureInfo.newBuilder()
|
||||
.setId(info.getId()).setProductionStartTime(info.getProductionStartTime()).setUpLvEndTime(info.getUpLvEndTime());
|
||||
list.add(infoBuilder.build());
|
||||
|
||||
PlayerInfoProto.HomeInfoResponse.Builder builder = PlayerInfoProto.HomeInfoResponse.newBuilder().addAllInfos(list);
|
||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.HomeInfoResponse_VALUE, builder.build());
|
||||
}
|
||||
|
@ -188,11 +181,11 @@ public class HomeLogic {
|
|||
for (ArchitectureInfo info : infoMap.values()) {
|
||||
oneArchitectureEarnings(user,info,nowInt,drop);
|
||||
}
|
||||
// 栖云阁领取
|
||||
Map<Integer, LandInfo> landInfoMap = user.getPlayerInfoManager().getLandInfoMap();
|
||||
for (LandInfo value : landInfoMap.values()) {
|
||||
oneLandEarnings(user,value,nowInt,drop);
|
||||
}
|
||||
// TODO: 2021/12/28 栖云阁领取
|
||||
// Map<Integer, LandInfo> landInfoMap = user.getPlayerInfoManager().getLandInfoMap();
|
||||
// for (LandInfo value : landInfoMap.values()) {
|
||||
// oneLandEarnings(user,value,nowInt,drop);
|
||||
// }
|
||||
}
|
||||
// 单个收获
|
||||
else {
|
||||
|
|
Loading…
Reference in New Issue