diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SPropertyConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SPropertyConfig.java index 22414e8e1..7f199e208 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SPropertyConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SPropertyConfig.java @@ -17,6 +17,8 @@ public class SPropertyConfig implements BaseConfig { private float score; + private int targetPropertyId; + private static Map sPropertyConfigByPIDMap; @@ -52,4 +54,8 @@ public class SPropertyConfig implements BaseConfig { public float getScore() { return score; } + + public int getTargetPropertyId() { + return targetPropertyId; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java index a2eb92aac..bef1e0bbc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java @@ -54,5 +54,7 @@ public interface GlobalsDef { int EXPLORE_MAP_DIGGLE_TYPE =4; int EXPLORE_MAP_ACTION_POWER_RORMULA_TYPE =5; + int MUST_BE = -1; + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/workshop/RebuildConfirmHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/workshop/RebuildConfirmHandler.java new file mode 100644 index 000000000..2e1bbe0b5 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/workshop/RebuildConfirmHandler.java @@ -0,0 +1,26 @@ +package com.ljsd.jieling.handler.workshop; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.item.WorkShopLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.PlayerInfoProto; +import org.springframework.stereotype.Component; + + +@Component +public class RebuildConfirmHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.WORKSHOP_REBUILD_CONFIRM_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + byte[] bytes = netData.parseClientProtoNetData(); + PlayerInfoProto.WorkShopRebuildConfirmRequest workShopRebuildConfirmRequest = PlayerInfoProto.WorkShopRebuildConfirmRequest.parseFrom(bytes); + int state = workShopRebuildConfirmRequest.getState(); + WorkShopLogic.getInstance().confirmRebuild(iSession,state); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java index 44d03b46b..8eb6038ba 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java @@ -12,7 +12,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class Equip extends MongoBase { +public class Equip extends MongoBase implements Cloneable{ private String id; @@ -150,13 +150,28 @@ public class Equip extends MongoBase { List sEquipPropertyPoolList = SEquipPropertyPool.getSEquipPropertyPool(poolId); int totalWeight = 0; for(SEquipPropertyPool sEquipPropertyPool : sEquipPropertyPoolList){ + int weight = sEquipPropertyPool.getWeight(); + if(weight == GlobalsDef.MUST_BE){ + Integer propertyPromote = promoteMap.get(sEquipPropertyPool.getPropertyId()); + if(propertyPromote == null){ + propertyPromote = 0; + } + int random = MathUtils.random(sEquipPropertyPool.getMin() * (100 + propertyPromote) / 100, sEquipPropertyPool.getMax()* (100 + propertyPromote) / 100); + result.put(sEquipPropertyPool.getPropertyId(),random); + nums--; + continue; + } totalWeight+=sEquipPropertyPool.getWeight(); } while (result.size() equipMap; + private Equip unDetermined; + public EquipManager() { this.setRootCollection(User._COLLECTION_NAME); @@ -34,4 +36,12 @@ public class EquipManager extends MongoBase { return equipMap; } + public Equip getUnDetermined() { + return unDetermined; + } + + public void setUnDetermined(Equip unDetermined) { + updateString("unDetermined", unDetermined); + this.unDetermined = unDetermined; + } } 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 817daff27..f9a051fb3 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 @@ -753,9 +753,40 @@ public class HeroLogic { combinedAttribute(secondValueByIdMap,heroAllAttribute); } heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE)); + calInteractAdd(heroAllAttribute); return heroAllAttribute; } + public void calInteractAdd(Map heroAllAttribute){ + Map propertyPercentMap = new HashMap<>(); + Iterator> iterator = heroAllAttribute.entrySet().iterator(); + while (iterator.hasNext()){ + Map.Entry item = iterator.next(); + Integer propertyId = item.getKey(); + SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(propertyId); + int targetPropertyId = sPropertyConfig.getTargetPropertyId(); + if(targetPropertyId == 0){ + continue; + } + int style = sPropertyConfig.getStyle(); + Integer effectValue = item.getValue(); + Integer targetValue = heroAllAttribute.get(targetPropertyId); + if(style == GlobalsDef.ABSOLUTE_TYPE){ + effectValue += targetValue; + }else{ + propertyPercentMap.put(targetPropertyId,100+effectValue); + } + heroAllAttribute.put(targetPropertyId,effectValue); + iterator.remove(); + } + + for(Map.Entry item : propertyPercentMap.entrySet()){ + Integer propertyId = item.getKey(); + Integer propertyValue = heroAllAttribute.get(propertyId); + heroAllAttribute.put(propertyId,propertyValue*item.getValue()/100); + } + } + //获取英雄所有属性 @@ -764,13 +795,13 @@ public class HeroLogic { //食物buffer加成 Map foodAddMap = CombatLogic.getInstance().attributeByEatFood(user,GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON); combinedAttribute(foodAddMap,heroAllAttribute); + calInteractAdd(heroAllAttribute); return heroAllAttribute; } public int calHeoForce(User user, Hero hero){ Map heroAllAttribute = calHeroFinalAttributeWhenInMap(user, hero); - heroAllAttribute.remove(0); double result = 0; for(Map.Entry item : heroAllAttribute.entrySet()){ Integer propertyId = item.getKey(); 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 d6adb1e7b..57812853d 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 @@ -205,9 +205,13 @@ public class WorkShopLogic { List workShopUnLockInfoList = new ArrayList<>(2); workShopUnLockInfoList.add(CommonProto.WorkShopUnLockInfo.newBuilder().setType(GlobalsDef.WORK_BASE_TYPE).addAllId(workShopList == null ?new ArrayList<>(1):workShopList).build()); workShopUnLockInfoList.add(CommonProto.WorkShopUnLockInfo.newBuilder().setType(GlobalsDef.WORK_CREATE_TYPE).addAllId(cookShopList==null?new ArrayList<>(1):cookShopList).build()); - - PlayerInfoProto.GetWorkShopInfoResponse build = PlayerInfoProto.GetWorkShopInfoResponse.newBuilder().addAllWorkShopBaseInfo(workShopBaseInfoList).addAllWorkShopUnLockInfo(workShopUnLockInfoList).build(); - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_WORKSHOP_INFO_RESPONSE_VALUE,build,true); + Equip unDetermined = user.getEquipManager().getUnDetermined(); + PlayerInfoProto.GetWorkShopInfoResponse.Builder builder = PlayerInfoProto.GetWorkShopInfoResponse.newBuilder().addAllWorkShopBaseInfo(workShopBaseInfoList).addAllWorkShopUnLockInfo(workShopUnLockInfoList); + if(unDetermined !=null){ + CommonProto.Equip equipProto = CBean2Proto.getEquipProto(unDetermined); + builder.setUnDetermined(equipProto); + } + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_WORKSHOP_INFO_RESPONSE_VALUE,builder.build(),true); } @@ -324,12 +328,27 @@ public class WorkShopLogic { SWorkShopRebuildConfig sWorkShopRebuildConfig = SWorkShopRebuildConfig.getsWorkShopRebuildConfigByQulity(sEquipConfig.getQuality()); int addExp = sWorkShopRebuildConfig.getExp(); user.getWorkShopController().addWorkShopExp(addExp); - equip.rebuildEquip(user.getWorkShopController().getWorkShopLevel()); - equipManager.addEquip(equip); - PlayerInfoProto.WorkShopRebuildRespoonse build = PlayerInfoProto.WorkShopRebuildRespoonse.newBuilder().setEquip(CBean2Proto.getEquipProto(equip)).build(); + Equip clone = (Equip)equip.clone(); + clone.rebuildEquip(user.getWorkShopController().getWorkShopLevel()); + equipManager.setUnDetermined(clone); + PlayerInfoProto.WorkShopRebuildRespoonse build = PlayerInfoProto.WorkShopRebuildRespoonse.newBuilder().setEquip(CBean2Proto.getEquipProto(clone)).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.WORKSHOP_REBUILD_RESPONSE_VALUE,build,true); + } - + public void confirmRebuild(ISession session,int state) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + EquipManager equipManager = user.getEquipManager(); + Equip unDetermined = equipManager.getUnDetermined(); + if(unDetermined == null){ + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.WORKSHOP_REBUILD_CONFIRM_RESONSE_VALUE,""); + return; + } + if(state == 1){ + equipManager.addEquip(unDetermined); + } + equipManager.setUnDetermined(null); + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.WORKSHOP_REBUILD_CONFIRM_RESONSE_VALUE,null,true); } private String checkForRebuildEquip( User user,List consumeEquipIds,SEquipConfig sEquipConfig,String excludeEquipId) throws Exception {