Browse Source

代码编码整洁规范,新创建的装备不分配可分配属性点,新增装备鉴定

tangbin 1 year ago
parent
commit
597fb4dbfe

+ 2 - 0
logic/equip-logic/src/main/java/com/iohao/mmo/equip/EquipLogicServer.java

@@ -30,6 +30,8 @@ import lombok.Setter;
 import lombok.experimental.FieldDefaults;
 
 /**
+ * 装备逻辑服
+ *
  * @author 唐斌
  * @date 2023-07-31
  */

+ 25 - 16
logic/equip-logic/src/main/java/com/iohao/mmo/equip/action/EquipAction.java

@@ -18,15 +18,13 @@ import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
-
 import java.math.BigDecimal;
-import java.util.Arrays;
 import java.util.List;
 
 /**
  * @author 唐斌
  * @date 2023-07-30
- * @description: 装备属性
+ * @description: 装备类
  */
 @Slf4j
 @Component
@@ -43,7 +41,7 @@ public class EquipAction {
      * @param flowContext flowContext
      */
     @ActionMethod(EquipCmd.getEquipList)
-    public List<EquipMessage> getEquipList(FlowContext flowContext) { //参数值
+    public List<EquipMessage> getEquipList(FlowContext flowContext) {
         long userId = flowContext.getUserId();
         List<Equip> equipList = equipService.listByUser(userId);
         return EquipMapper.ME.convert(equipList);
@@ -52,11 +50,10 @@ public class EquipAction {
     /**
      * 获取装备信息
      *
-     * @param flowContext flowContext
      * @param stringValue itemTypeId
      */
     @ActionMethod(EquipCmd.getEquip)
-    public EquipMessage getEquip(FlowContext flowContext, StringValue stringValue) { //参数值
+    public EquipMessage getEquip(StringValue stringValue) {
         Equip equip = equipService.findById(stringValue.value);
         return EquipMapper.ME.convert(equip);
     }
@@ -64,43 +61,55 @@ public class EquipAction {
     /**
      * 分配装备属性点
      *
-     * @param flowContext flowContext
+     * @param equipMessage equipMessage 分配属性后的装备
      */
     @ActionMethod(EquipCmd.allotEquip)
-    public void allotEquip(FlowContext flowContext, EquipMessage equipMessage) { //参数值
+    public void allotEquip(EquipMessage equipMessage) {
         equipService.allotEquip(EquipMapper.ME.convert(equipMessage));
     }
 
     /**
-     * 重新随机总属性点
+     * 重新随机总属性点(鉴定装备)
      *
-     * @param flowContext       flowContext
      * @param equipResetMessage 重新随机装备总属性点参数对象
      */
     @ActionMethod(EquipCmd.resetEquip)
-    public EquipMessage resetEquip(FlowContext flowContext, EquipResetMessage equipResetMessage) { //参数值
-        GameCode.objNotFound.assertTrue(StringUtils.isNotBlank(equipResetMessage.id) && StringUtils.isNotBlank(equipResetMessage.excellentRateString));
-        Equip equip = equipService.resetEquip((equipResetMessage.id), new BigDecimal(equipResetMessage.excellentRateString));
+    public EquipMessage resetEquip(EquipResetMessage equipResetMessage) {
+        GameCode.objNotFound.assertTrue(
+                StringUtils.isNotBlank(equipResetMessage.id)
+                        && StringUtils.isNotBlank(equipResetMessage.excellentRateString)
+        );
+        Equip equip = equipService.resetEquip(
+                (equipResetMessage.id),
+                new BigDecimal(equipResetMessage.excellentRateString)
+        );
         return EquipMapper.ME.convert(equip);
     }
 
     /**
      * 批量删除装备
      *
-     * @param flowContext flowContext
      * @param idList 装备id列表
      */
     @ActionMethod(EquipCmd.delEquipBatch)
-    public void delEquipBatch(FlowContext flowContext, List<String> idList) {
+    public void delEquipBatch(List<String> idList) {
         equipService.delBatch(idList);
     }
 
+    /**
+     * 通过材料创建新的装备-内部调用
+     * @param createEquipMessage 创建新装备的入参
+     * @param flowContext flowContext
+     * @return
+     */
     @ActionMethod(EquipCmd.createEquip)
     public NewEquipMessage internalCreateEquip(CreateEquipMessage createEquipMessage, FlowContext flowContext) {
         // 玩家
         long userId = flowContext.getUserId();
 
-        Equip equip = equipTemplateService.randomEquip(createEquipMessage.itemTypeId, BigDecimal.valueOf(createEquipMessage.excellentRate), userId);
+        Equip equip = equipTemplateService.randomEquip(
+                createEquipMessage.itemTypeId,
+                userId);
 
         /*
          * 将新装备信息给到调用方,

+ 3 - 7
logic/equip-logic/src/main/java/com/iohao/mmo/equip/action/EquipTemplateAction.java

@@ -14,7 +14,6 @@ import com.iohao.mmo.equip.service.EquipTemplateService;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -33,11 +32,9 @@ public class EquipTemplateAction {
     /**
      * 初始化装备库(暂时的方法,后期应从数据文件中读取)
      *
-     * @param flowContext flowContext
      */
     @ActionMethod(EquipCmd.initEquipTemplate)
-    public void initEquipTemplate(FlowContext flowContext) {
-        long userId = flowContext.getUserId();
+    public void initEquipTemplate() {
         // 初始化装备数据,暂时放这
         equipTemplateService.initEquipTemplate();
     }
@@ -45,11 +42,10 @@ public class EquipTemplateAction {
     /**
      * 获取装备库信息
      *
-     * @param flowContext flowContext
      * @param stringValue 装备库itemTypeId
      */
     @ActionMethod(EquipCmd.getEquipTemplate)
-    public EquipTemplateMessage getEquipTemplate(FlowContext flowContext, StringValue stringValue) { //参数值
+    public EquipTemplateMessage getEquipTemplate(StringValue stringValue) {
         // 初始化装备数据,暂时放这
         EquipTemplate equipTemplate = equipTemplateService.findById(stringValue.value);
         return EquipTemplateMapper.ME.convert(equipTemplate);
@@ -62,7 +58,7 @@ public class EquipTemplateAction {
      * @param itemTypeIds 装备库itemTypeIds
      */
     @ActionMethod(EquipCmd.randomEquip)
-    public List<EquipMessage> randomEquip(FlowContext flowContext, List<String> itemTypeIds) { //参数值
+    public List<EquipMessage> randomEquip(FlowContext flowContext, List<String> itemTypeIds) {
         long userId = flowContext.getUserId();
         List<EquipMessage> equipMessageList = equipTemplateService.randomEquipBatch(itemTypeIds,userId)
                 .stream()

+ 4 - 0
logic/equip-logic/src/main/java/com/iohao/mmo/equip/entity/Equip.java

@@ -26,6 +26,8 @@ import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
+ * 装备
+ *
  * @author 唐斌
  * @date 2023-07-26
  */
@@ -48,6 +50,8 @@ public class Equip {
     int position;
     /** 要求等级 */
     int level;
+    /** 鉴定次数 */
+    int identifyCount;
     /** 装备固定属性最小值 */
     FixedEquipProperty fixedEquipPropertyMin;
     /** 装备固定属性最大值 */

+ 2 - 0
logic/equip-logic/src/main/java/com/iohao/mmo/equip/entity/EquipGarbage.java

@@ -7,6 +7,8 @@ import org.springframework.data.mongodb.core.index.Indexed;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
+ * 装备和装备库的逻辑删除回收类
+ *
  * @author 唐斌
  * @date 2023-08-16
  * @description: 物品回收站

+ 2 - 0
logic/equip-logic/src/main/java/com/iohao/mmo/equip/entity/EquipTemplate.java

@@ -25,6 +25,8 @@ import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
+ * 装备库
+ *
  * @author 唐斌
  * @date 2023-07-26
  */

+ 37 - 15
logic/equip-logic/src/main/java/com/iohao/mmo/equip/entity/FixedEquipProperty.java

@@ -25,8 +25,6 @@ import lombok.Data;
 import lombok.experimental.FieldDefaults;
 import org.springframework.data.mongodb.core.mapping.Document;
 
-import java.util.Objects;
-
 /**
  * 装备固定属性
  * <pre>
@@ -64,20 +62,44 @@ public class FixedEquipProperty {
     /** 怒气 */
     int anger;
 
-    public static FixedEquipProperty randomFixed(FixedEquipProperty fixedEquipPropertyMin,FixedEquipProperty fixedEquipPropertyMax){
-        if(fixedEquipPropertyMin==null || fixedEquipPropertyMax == null)    return FixedEquipProperty.builder().build();
+    public static FixedEquipProperty randomFixed(FixedEquipProperty fixedEquipPropertyMin,
+                                                 FixedEquipProperty fixedEquipPropertyMax){
+        if(fixedEquipPropertyMin==null || fixedEquipPropertyMax == null)
+            return FixedEquipProperty.builder().build();
         return FixedEquipProperty.builder()
-                .hp(RandomUtils.randomFromInt(fixedEquipPropertyMin.getHp(),fixedEquipPropertyMax.getHp()))
-                .mp(RandomUtils.randomFromInt(fixedEquipPropertyMin.getMp(),fixedEquipPropertyMax.getMp()))
-                .physicsAttack(RandomUtils.randomFromInt(fixedEquipPropertyMin.getPhysicsAttack(),fixedEquipPropertyMax.getPhysicsAttack()))
-                .physicsDefense(RandomUtils.randomFromInt(fixedEquipPropertyMin.getPhysicsDefense(),fixedEquipPropertyMax.getMagicDefense()))
-                .magicAttack(RandomUtils.randomFromInt(fixedEquipPropertyMin.getMagicAttack(),fixedEquipPropertyMax.getMagicAttack()))
-                .magicDefense(RandomUtils.randomFromInt(fixedEquipPropertyMin.getMagicDefense(),fixedEquipPropertyMax.getMagicDefense()))
-                .treatAttack(RandomUtils.randomFromInt(fixedEquipPropertyMin.getTreatAttack(),fixedEquipPropertyMax.getTreatAttack()))
-                .sealAttack(RandomUtils.randomFromInt(fixedEquipPropertyMin.getSealAttack(),fixedEquipPropertyMax.getSealAttack()))
-                .sealDefense(RandomUtils.randomFromInt(fixedEquipPropertyMin.getSealDefense(),fixedEquipPropertyMax.getSealDefense()))
-                .speed(RandomUtils.randomFromInt(fixedEquipPropertyMin.getSpeed(),fixedEquipPropertyMax.getSpeed()))
-                .anger(RandomUtils.randomFromInt(fixedEquipPropertyMin.getAnger(),fixedEquipPropertyMax.getAnger()))
+                .hp(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getHp(),
+                                fixedEquipPropertyMax.getHp()))
+                .mp(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getMp(),
+                                fixedEquipPropertyMax.getMp()))
+                .physicsAttack(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getPhysicsAttack(),
+                                fixedEquipPropertyMax.getPhysicsAttack()))
+                .physicsDefense(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getPhysicsDefense(),
+                                fixedEquipPropertyMax.getMagicDefense()))
+                .magicAttack(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getMagicAttack(),
+                                fixedEquipPropertyMax.getMagicAttack()))
+                .magicDefense(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getMagicDefense(),
+                                fixedEquipPropertyMax.getMagicDefense()))
+                .treatAttack(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getTreatAttack(),
+                                fixedEquipPropertyMax.getTreatAttack()))
+                .sealAttack(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getSealAttack(),
+                                fixedEquipPropertyMax.getSealAttack()))
+                .sealDefense(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getSealDefense(),
+                                fixedEquipPropertyMax.getSealDefense()))
+                .speed(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getSpeed(),
+                                fixedEquipPropertyMax.getSpeed()))
+                .anger(
+                        RandomUtils.randomFromInt(fixedEquipPropertyMin.getAnger(),
+                                fixedEquipPropertyMax.getAnger()))
                 .build();
     }
 }

+ 7 - 4
logic/equip-logic/src/main/java/com/iohao/mmo/equip/listener/EquipEventListener.java

@@ -8,7 +8,6 @@ import org.springframework.data.mongodb.core.mapping.event.BeforeDeleteEvent;
 import org.springframework.data.mongodb.core.query.BasicQuery;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
-
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
@@ -17,9 +16,11 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 /**
+ * 监听删除事件
  * @author 唐斌
  * @date 2023-08-16
- * @description: 监听删除事件,重写删除装备为逻辑删除
+ * @description: 监听删除事件,重写删除装备为逻辑删除,
+ * 在删除装备和装备库之前将数据迁移到回收类
  */
 @Component
 public class EquipEventListener extends AbstractMongoEventListener<Object> {
@@ -34,8 +35,10 @@ public class EquipEventListener extends AbstractMongoEventListener<Object> {
     public void onBeforeDelete(BeforeDeleteEvent<Object> event) {
         Set<String> setString = Stream.of("equip", "equipTemplate")
                 .collect(Collectors.toUnmodifiableSet());
-        if (event.getType() == null || CollectionUtils.isEmpty(event.getDocument())
-                || StringUtils.isBlank(event.getCollectionName()) || !setString.contains(event.getCollectionName())) {
+        if (event.getType() == null
+                || CollectionUtils.isEmpty(event.getDocument())
+                || StringUtils.isBlank(event.getCollectionName())
+                || !setString.contains(event.getCollectionName())) {
             return;
         }
         // 通过事件中返回的`document`对象查询待删除的数据

+ 0 - 1
logic/equip-logic/src/main/java/com/iohao/mmo/equip/mapper/EquipMapper.java

@@ -27,7 +27,6 @@ import com.iohao.mmo.equip.proto.EquipTemplateMessage;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mapstruct.factory.Mappers;
-
 import java.util.List;
 
 /**

+ 26 - 12
logic/equip-logic/src/main/java/com/iohao/mmo/equip/service/EquipService.java

@@ -28,12 +28,12 @@ import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
-
 import java.math.BigDecimal;
 import java.util.List;
-import java.util.Objects;
 
 /**
+ * 装备
+ *
  * @author 唐斌
  * @date 2023-07-30
  * @description: 装备属性实现类
@@ -43,16 +43,18 @@ import java.util.Objects;
 public class EquipService {
     final MongoTemplate mongoTemplate;
 
+    /**
+     * 通过装备id查询装备
+     * @param id 装备id
+     * @return
+     */
     public Equip findById(String id) {
         return  mongoTemplate.findById(id, Equip.class);
     }
-    public Equip findByItemTypeId(String itemTypeId) {
-        return  Objects.requireNonNull(mongoTemplate.findOne(Query.query(new Criteria("itemTypeId").is(itemTypeId)), Equip.class));
-    }
 
     /**
      * 根据用户查找所有装备
-     * @param userId
+     * @param userId 用户id
      * @return
      */
     public List<Equip> listByUser(long userId) {
@@ -61,6 +63,11 @@ public class EquipService {
 
         return  mongoTemplate.find(query,Equip.class);
     }
+
+    /**
+     * 根据装备id列表批量删除装备
+     * @param idList 装备id列表
+     */
     public void delBatch(List<String> idList) {
         Query query = new Query(new Criteria("id").in(idList));
         mongoTemplate.remove(query, Equip.class);
@@ -68,7 +75,7 @@ public class EquipService {
 
     /**
      * 分配装备属性点
-     * @param equip
+     * @param equip 带有分配后属性点的装备
      */
     public void allotEquip(Equip equip){
         //判定总点数是否合法
@@ -77,7 +84,11 @@ public class EquipService {
         GameCode.objNotFound.assertTrue(oldEquip!=null);
 
         ElseEquipProperty elseEquipProperty = equip.getElseEquipProperty();
-        int saveAttrTotal = elseEquipProperty.getConstitution()+ elseEquipProperty.getMagicPower()+ elseEquipProperty.getPower()+ elseEquipProperty.getEndurance()+ elseEquipProperty.getAgile();
+        int saveAttrTotal = elseEquipProperty.getConstitution()
+                + elseEquipProperty.getMagicPower()
+                + elseEquipProperty.getPower()
+                + elseEquipProperty.getEndurance()
+                + elseEquipProperty.getAgile();
 
         GameCode.allotNotEnough.assertTrue(saveAttrTotal<=oldEquip.getAttrTotal());
 
@@ -95,7 +106,7 @@ public class EquipService {
     }
 
     /**
-     * 重新随机总属性点
+     * 重新随机总属性点(鉴定装备)
      * @param id 装备id
      * @param excellentRate 增加的极品率
      */
@@ -105,8 +116,9 @@ public class EquipService {
 
         int randomMin = equip.getTotalAttrMin();
         int randomMax = equip.getTotalAttrMax();
+        //本次是否生成极品
+        boolean excellentFlag = RandomUtils.isExcellent(excellentRate);
         //品质
-        boolean excellentFlag = RandomUtils.isExcellent(excellentRate);//是否生成极品
         equip.setQuality(excellentFlag?2:1);
         //额外属性值
         int newAttrTotal = RandomUtils.randomFromExcellent(randomMin,randomMax,excellentFlag);
@@ -116,14 +128,16 @@ public class EquipService {
 
     /**
      * 替换掉原来装备的属性值,并且重置已分配的属性点
-     * @param equip
-     * @param newAttrTotal
+     * @param equip 装备
+     * @param newAttrTotal 新随机的可分配属性点
      * @return
      */
     private Equip replaceEquipAttr(Equip equip,int newAttrTotal){
         equip.setElseEquipProperty(ElseEquipProperty.resetElseEquipProperty());
         equip.setAttrTotal(newAttrTotal);
         equip.setUndistributedAttr(newAttrTotal);
+        //鉴定次数+1
+        equip.setIdentifyCount(equip.getIdentifyCount()+1);
         mongoTemplate.save(equip);
         return equip;
     }

+ 46 - 33
logic/equip-logic/src/main/java/com/iohao/mmo/equip/service/EquipTemplateService.java

@@ -18,51 +18,71 @@
  */
 package com.iohao.mmo.equip.service;
 
-import com.github.javafaker.Faker;
 import com.iohao.mmo.common.config.GameCode;
 import com.iohao.mmo.common.provide.item.ItemTypeIdConst;
 import com.iohao.mmo.equip.entity.*;
 import com.iohao.mmo.equip.utils.RandomUtils;
 import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.util.List;
-import java.util.Locale;
-import java.util.Objects;
 
 /**
+ * 装备库
+ *
  * @author 唐斌
  * @date 2023-07-30
- * @description: 装备属性实现类
+ * @description: 装备实现类
  */
 @Service
 @AllArgsConstructor
 public class EquipTemplateService {
 
-    final Faker faker = new Faker(Locale.CHINA);
     final MongoTemplate mongoTemplate;
 
+    /**
+     * 通过id查询装备库
+     * @param id 装备库id
+     * @return
+     */
     public EquipTemplate findById(String id) {
         return  mongoTemplate.findById(id, EquipTemplate.class);
     }
+
+    /**
+     * 通过itemTypeId查询装备库
+     * @param itemTypeId 物品分类标识
+     * @return
+     */
     public EquipTemplate findByItemTypeId(String itemTypeId) {
-        return  mongoTemplate.findOne(Query.query(new Criteria("itemTypeId").is(itemTypeId)), EquipTemplate.class);
+        return  mongoTemplate.findOne(
+                Query.query(new Criteria("itemTypeId").is(itemTypeId)), EquipTemplate.class);
     }
 
+    /**
+     * 保存装备库
+     * @param equipTemplate 装备库
+     */
     public void save(EquipTemplate equipTemplate) {
         mongoTemplate.save(equipTemplate);
     }
 
+    /**
+     * 根据装备库id列表批量删除装备库
+     * @param idList 装备库id列表
+     */
     public void delBatch(List<String> idList) {
         Query query = new Query(new Criteria("id").in(idList));
         mongoTemplate.remove(query, EquipTemplate.class);
     }
 
 
+    /**
+     * 初始化装备库(临时方法,后期移除改为从运营数据中导入)
+     */
     public void initEquipTemplate() {
         // 初始化一些装备配置,后期将移到 excel 中做。
         EquipTemplate equipTemplate = new EquipTemplate();
@@ -116,7 +136,8 @@ public class EquipTemplateService {
 
     /**
      * 根据装备库列表批量随机新的装备
-     * @param itemTypeIdList
+     * @param itemTypeIdList 物品分类标识列表
+     * @param userId 用户id
      * @return
      */
     public List<Equip> randomEquipBatch(List<String> itemTypeIdList,long userId){
@@ -126,50 +147,42 @@ public class EquipTemplateService {
         return equipList;
     }
 
-    /**
-     * 根据装备库随机一件新的装备
-     * @param itemTypeId
-     * @return
-     */
-    public Equip randomEquip(String itemTypeId,long userId){
-        return randomEquip(itemTypeId,BigDecimal.ZERO,userId);
-    }
-
-
     /**
      * 根据装备库随机一件新的装备
      * @param itemTypeId itemTypeId
-     * @param excellentRate 增加的极品率
+     * @param userId 用户id
      * @return
      */
-    public Equip randomEquip(String itemTypeId,BigDecimal excellentRate, long userId){
-        if(excellentRate == null){
-            excellentRate = BigDecimal.ZERO;
-        }
+    public Equip randomEquip(String itemTypeId, long userId){
         //取到装备库
         EquipTemplate equipTemplate = findByItemTypeId(itemTypeId);
         GameCode.objNotFound.assertTrue(equipTemplate!=null,"找不到对应装备库");
         //将装备库属性拷贝到装备中
-        Equip equip = copyTemplate2Equip(equipTemplate,excellentRate);
+        Equip equip = copyTemplate2Equip(equipTemplate);
         equip.setUserId(userId);
         mongoTemplate.save(equip);
         return equip;
     }
 
-    public Equip copyTemplate2Equip(EquipTemplate equipTemplate,BigDecimal excellentRate){
-        //是否极品
-        boolean excellentFlag = RandomUtils.isExcellent(excellentRate);
-        //随机总属性点
-        int attrTotal = RandomUtils.randomFromExcellent(equipTemplate.getTotalAttrMin(),equipTemplate.getTotalAttrMax(),excellentFlag);
+    /**
+     * 根据需要拷贝装备库属性到装备
+     * @param equipTemplate 装备库
+     * @return
+     */
+    public Equip copyTemplate2Equip(EquipTemplate equipTemplate){
+
         return Equip.builder()
                 .itemTypeId(equipTemplate.getItemTypeId())
-                .quality(excellentFlag?2:1) //品质
-                .fixedEquipProperty(FixedEquipProperty.randomFixed(equipTemplate.getFixedEquipPropertyMin(),equipTemplate.getFixedEquipPropertyMax())) //装备固定属性
-                .attrTotal(attrTotal)
-                .undistributedAttr(attrTotal)
+                .quality(0) //品质
+                .fixedEquipProperty(
+                        FixedEquipProperty.randomFixed(equipTemplate.getFixedEquipPropertyMin(),
+                                equipTemplate.getFixedEquipPropertyMax())) //装备固定属性
+                .attrTotal(0)
+                .undistributedAttr(0)
                 .elseEquipProperty(ElseEquipProperty.resetElseEquipProperty()) //初始化分配的具体属性点
                 .position(equipTemplate.getPosition())
                 .level(equipTemplate.getLevel())
+                .identifyCount(0)
                 .fixedEquipPropertyMin(equipTemplate.getFixedEquipPropertyMin())
                 .fixedEquipPropertyMax(equipTemplate.getFixedEquipPropertyMax())
                 .totalAttrMin(equipTemplate.getTotalAttrMin())

+ 7 - 5
logic/equip-logic/src/main/java/com/iohao/mmo/equip/utils/RandomUtils.java

@@ -30,7 +30,7 @@ public class RandomUtils {
 
     ////////////////////////// ↓↓↓算法实现↓↓↓ ///////////////////////////
     /**
-     * 由概率随机是否触发(给定一个概率,返回是否命中)
+     * 通过概率随机获得本次是否命中的结果
      *
      * @param chance 概率 0.000000 - 1.000000
      * @return boolean
@@ -42,7 +42,7 @@ public class RandomUtils {
     }
 
     /**
-     * 由概率随机一个值(给定一个范围,范围随机值
+     * 在范围内随机一个值(小数
      *
      * @param rangeMin 限定范围的下限
      * @param rangeMax 限定范围的上限
@@ -60,7 +60,7 @@ public class RandomUtils {
 
 
     /**
-     * 由概率随机一个值(给定一个范围,范围随机值
+     * 在范围内随机一个值(整数
      *
      * @param randomMin 限定范围的最小值(int)
      * @param randomMax 限定范围的最大值(int)
@@ -74,10 +74,11 @@ public class RandomUtils {
     }
 
     /**
-     * 根据是否极品,由概率随机一个值
+     * 根据是否极品,在范围内随机一个值
      *
      * @param randomMin 限定范围的最小值(int)
      * @param randomMax 限定范围的最大值(int)
+     * @param excellentFlag 增加的极品率
      * @return boolean
      */
     public static int randomFromExcellent(int randomMin,int randomMax,boolean excellentFlag) {
@@ -85,7 +86,8 @@ public class RandomUtils {
         BigDecimal boundaryValue =
                 BigDecimal.valueOf(randomMin).add(
                         (BigDecimal.valueOf(randomMax).subtract(BigDecimal.valueOf(randomMin)))
-                                .multiply(BigDecimal.ONE.subtract(excellentProp)).setScale(0, RoundingMode.HALF_UP)
+                                .multiply(BigDecimal.ONE.subtract(excellentProp))
+                                .setScale(0, RoundingMode.HALF_UP)
                 );
         BigDecimal rangeMin = BigDecimal.valueOf(randomMin);
         BigDecimal rangeMax = BigDecimal.valueOf(randomMax);

+ 13 - 18
one-client/src/main/java/com/iohao/mmo/client/input/EquipInputCommandRegion.java

@@ -18,7 +18,6 @@
  */
 package com.iohao.mmo.client.input;
 
-import com.google.protobuf.ListValue;
 import com.iohao.game.action.skeleton.protocol.wrapper.ByteValueList;
 import com.iohao.game.action.skeleton.protocol.wrapper.StringValue;
 import com.iohao.game.action.skeleton.protocol.wrapper.StringValueList;
@@ -31,7 +30,6 @@ import com.iohao.mmo.common.provide.kit.JsonKit;
 import com.iohao.mmo.equip.cmd.EquipCmd;
 import com.iohao.mmo.equip.proto.*;
 import lombok.extern.slf4j.Slf4j;
-
 import java.util.Arrays;
 import java.util.List;
 
@@ -58,13 +56,13 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
     private void request() {
         InputRequestData inputRequestData;
 
-        // 10-1
+        // 10-1 获取装备列表信息
         ofCommand(EquipCmd.getEquipList).callback(ByteValueList.class, result -> {
             List<EquipMessage> value = result.toList(EquipMessage.class);
             log.info("装备列表信息 : {}", JsonKit.toJsonString(value));
         }).setDescription("获取装备列表信息");
 
-        // 动态请求参数(参数值)
+        // 10-2 查询装备信息
         inputRequestData = () -> {
             ScannerKit.log(() -> log.info("请输入要查询的装备id"));
             String id = ScannerKit.nextLine();
@@ -75,13 +73,12 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
             return stringValue;
         };
 
-        // 10-2
         ofCommand(EquipCmd.getEquip).callback(EquipMessage.class, result -> {
             EquipMessage value = result.getValue();
             log.info("装备信息 : {}", value);
         }).setDescription("查询装备信息").setInputRequestData(inputRequestData);
 
-        // 动态请求参数(参数值)
+        // 10-3 分配装备属性信息
         inputRequestData = () -> {
             ScannerKit.log(() -> log.info("请输入装备id"));
             String id = ScannerKit.nextLine();
@@ -94,21 +91,20 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
             int endurance = param.getInt(3,0);
             int agile = param.getInt(4,0);
 
-            ElseEquipPropertyMessage elseEquipPropertyMessage = new ElseEquipPropertyMessage(constitution,magicPower,power,endurance,agile);
+            ElseEquipPropertyMessage elseEquipPropertyMessage =
+                    new ElseEquipPropertyMessage(constitution,magicPower,power,endurance,agile);
             EquipMessage equipMessage = new EquipMessage();
             equipMessage.elseEquipProperty = elseEquipPropertyMessage;
             equipMessage.id = id;
             return equipMessage;
         };
 
-        // 10-3
         ofCommand(EquipCmd.allotEquip).callback(EquipMessage.class, result -> {
             EquipMessage value = result.getValue();
             log.info("装备属性信息 : {}", value);
         }).setDescription("分配装备属性信息").setInputRequestData(inputRequestData);
 
-
-        // 动态请求参数(参数值)
+        // 10-4 重新随机总属性点(鉴定装备)
         inputRequestData = () -> {
             ScannerKit.log(() -> log.info("请输入装备id和极品概率增益百分比,格式 [装备id-增益百分比]"));
             String inputValue = ScannerKit.nextLine("1-0.3");
@@ -122,14 +118,13 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
             return equipResetMessage;
         };
 
-        // 10-4
         ofCommand(EquipCmd.resetEquip).callback(EquipMessage.class, result -> {
             EquipMessage value = result.getValue();
             log.info("装备属性信息 : {}", value);
-        }).setDescription("重新随机总属性点").setInputRequestData(inputRequestData);
+        }).setDescription("重新随机总属性点(鉴定装备)").setInputRequestData(inputRequestData);
 
 
-        // 动态请求参数(参数值)
+        // 10-5 批量删除装备
         inputRequestData = () -> {
             ScannerKit.log(() -> log.info("请输入要删除的装备id,格式 [装备1id-装备2id]"));
             String ids = ScannerKit.nextLine("1-1");
@@ -141,21 +136,21 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
             return listValue;
         };
 
-        // 10-5
         ofCommand(EquipCmd.delEquipBatch).callback(EquipMessage.class, result -> {
             EquipMessage value = result.getValue();
             log.info("装备属性信息 : {}", value);
         }).setDescription("批量删除装备").setInputRequestData(inputRequestData);
 
-        // 10-10
+        // 10-10 初始化装备库
         ofCommand(EquipCmd.initEquipTemplate).callback(EquipTemplateMessage.class, result -> {
             EquipTemplateMessage value = result.getValue();
             log.info("装备库信息 : {}", value);
         }).setDescription("初始化装备库");
 
-        // 动态请求参数(参数值)
+        // 10-13 根据装备库列表批量随机新的装备
         inputRequestData = () -> {
-            ScannerKit.log(() -> log.info("请输入装备库itemTypeId列表,格式 [装备库itemTypeId1-装备库itemTypeId2-装备库itemTypeId3...]"));
+            ScannerKit.log(() -> log.info(
+                    "请输入装备库itemTypeId列表,格式 [装备库itemTypeId1-装备库itemTypeId2-装备库itemTypeId3...]"));
             String itemTypeIds = ScannerKit.nextLine("1-1");
 
             List<String> itemTypeIdList = Arrays.asList(itemTypeIds.split("-"));
@@ -165,7 +160,7 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
 
             return listValue;
         };
-        // 10-13
+
         ofCommand(EquipCmd.randomEquip).callback(ByteValueList.class, result -> {
             List<EquipMessage> value = result.toList(EquipMessage.class);
             log.info("装备列表信息 : {}", JsonKit.toJsonString(value));

+ 4 - 2
provide/equip-provide/src/main/java/com/iohao/mmo/equip/client/EquipExchange.java

@@ -25,6 +25,7 @@ import com.iohao.game.action.skeleton.protocol.ResponseMessage;
 import com.iohao.mmo.common.provide.client.ExchangeKit;
 import com.iohao.mmo.equip.cmd.EquipCmd;
 import com.iohao.mmo.equip.proto.CreateEquipMessage;
+import com.iohao.mmo.equip.proto.EquipMessage;
 import com.iohao.mmo.equip.proto.EquipResetMessage;
 import com.iohao.mmo.equip.proto.NewEquipMessage;
 import lombok.experimental.UtilityClass;
@@ -37,9 +38,10 @@ import lombok.experimental.UtilityClass;
  */
 @UtilityClass
 public class EquipExchange {
-    public void resetEquip(EquipResetMessage equipResetMessage, FlowContext flowContext) {
+    public EquipMessage resetEquip(EquipResetMessage equipResetMessage, FlowContext flowContext) {
         CmdInfo cmdInfo = EquipCmd.of(EquipCmd.resetEquip);
-        ExchangeKit.invokeModuleVoidMessage(flowContext, cmdInfo, equipResetMessage);
+        ResponseMessage responseMessage = ExchangeKit.invokeModuleMessage(flowContext, cmdInfo, equipResetMessage);
+        return DataCodecKit.decode(responseMessage.getData(), EquipMessage.class);
     }
 
     public NewEquipMessage createEquip(CreateEquipMessage createEquipMessage, FlowContext flowContext) {

+ 1 - 1
provide/equip-provide/src/main/java/com/iohao/mmo/equip/cmd/EquipCmd.java

@@ -34,7 +34,7 @@ public interface EquipCmd {
     int getEquip = 2;
     /** 分配属性点 */
     int allotEquip = 3;
-    /** 重新随机总属性点 */
+    /** 重新随机总属性点(鉴定装备) */
     int resetEquip = 4;
     /** 批量删除装备 */
     int delEquipBatch = 5;

+ 2 - 0
provide/equip-provide/src/main/java/com/iohao/mmo/equip/proto/EquipMessage.java

@@ -48,6 +48,8 @@ public class EquipMessage{
     int position;
     /** 要求等级 */
     int level;
+    /** 鉴定次数 */
+    int identifyCount;
     /** 装备固定属性最小值 */
     FixedEquipPropertyMessage fixedEquipPropertyMin;
     /** 装备固定属性最大值 */