소스 검색

银月:重新随机装备词条

toby 1 년 전
부모
커밋
ed70a45b6b

BIN
doc/EquipEntry.xlsx


+ 4 - 17
logic/equip-logic/src/main/java/com/iohao/mmo/equip/action/EquipAction.java

@@ -8,10 +8,7 @@ import com.iohao.mmo.common.config.GameCode;
 import com.iohao.mmo.equip.cmd.EquipCmd;
 import com.iohao.mmo.equip.entity.Equip;
 import com.iohao.mmo.equip.mapper.EquipMapper;
-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 com.iohao.mmo.equip.proto.*;
 import com.iohao.mmo.equip.service.EquipService;
 import com.iohao.mmo.equip.service.EquipTemplateService;
 import jakarta.annotation.Resource;
@@ -59,22 +56,12 @@ public class EquipAction {
     }
 
     /**
-     * 分配装备属性点
-     *
-     * @param equipMessage equipMessage 分配属性后的装备
-     */
-    @ActionMethod(EquipCmd.allotEquip)
-    public void allotEquip(EquipMessage equipMessage) {
-//        equipService.allotEquip(EquipMapper.ME.convert(equipMessage));
-    }
-
-    /**
-     * 重新随机总属性点(鉴定装备)
+     * 重新随机词条
      *
      * @param equipResetMessage 重新随机装备总属性点参数对象
      */
     @ActionMethod(EquipCmd.resetEquip)
-    public EquipMessage resetEquip(EquipResetMessage equipResetMessage) {
+    public EquipShowMessage resetEquip(EquipResetMessage equipResetMessage) {
         GameCode.objNotFound.assertTrue(
                 StringUtils.isNotBlank(equipResetMessage.id)
                         && StringUtils.isNotBlank(equipResetMessage.excellentRateString)
@@ -83,7 +70,7 @@ public class EquipAction {
                 (equipResetMessage.id),
                 new BigDecimal(equipResetMessage.excellentRateString)
         );
-        return EquipMapper.ME.convert(equip);
+        return EquipMapper.ME.convertShowMessage(equip);
     }
 
     /**

+ 27 - 16
logic/equip-logic/src/main/java/com/iohao/mmo/equip/service/EquipService.java

@@ -19,8 +19,10 @@
 package com.iohao.mmo.equip.service;
 
 import com.iohao.mmo.common.config.GameCode;
+import com.iohao.mmo.equip.entity.EquipEntry;
 import com.iohao.mmo.equip.entity.EquipPropertyElse;
 import com.iohao.mmo.equip.entity.Equip;
+import com.iohao.mmo.equip.entity.EquipTemplate;
 import com.iohao.mmo.equip.kit.EquipRandomKit;
 import lombok.AllArgsConstructor;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -42,6 +44,7 @@ import java.util.List;
 @AllArgsConstructor
 public class EquipService {
     final MongoTemplate mongoTemplate;
+    final EquipTemplateService equipTemplateService;
 
     /**
      * 通过装备id查询装备
@@ -51,7 +54,13 @@ public class EquipService {
     public Equip findById(String id) {
         return  mongoTemplate.findById(id, Equip.class);
     }
-
+    /**
+     * 保存装备
+     * @param equip 装备
+     */
+    public void save(Equip equip) {
+        mongoTemplate.save(equip);
+    }
     /**
      * 根据用户查找所有装备
      * @param userId 用户id
@@ -76,25 +85,27 @@ public class EquipService {
 
 
     /**
-     * 重新随机总属性点(鉴定装备)
+     * 重新随机词条
      * @param id 装备id
      * @param excellentRate 增加的极品率
      */
     public Equip resetEquip(String id, BigDecimal excellentRate){
-//        Equip equip = findById(id);
-//        GameCode.objNotFound.assertTrue(equip!=null);
-//
-//        int randomMin = equip.getTotalAttrMin();
-//        int randomMax = equip.getTotalAttrMax();
-//        //本次是否生成极品
-//        boolean excellentFlag = EquipRandomKit.isExcellent(excellentRate);
-//        //品质
-//        equip.setQuality(excellentFlag?2:1);
-//        //额外属性值
-//        int newAttrTotal = EquipRandomKit.randomFromExcellent(randomMin,randomMax,excellentFlag);
-//        // 直接替换掉原装备的属性值
-//        return replaceEquipAttr(equip,newAttrTotal);
-        return null;
+        Equip equip = findById(id);
+        GameCode.objNotFound.assertTrue(equip!=null);
+        //重新随机固定属性的具体值
+        equipTemplateService.resetFixedEntryValue(
+                equip.getLevel(),equip.getEquipPropertyFixedList());
+        //重新生成随机属性
+        List<EquipEntry> equipRandomEntryList =
+                equipTemplateService.resetRandomEntryList(
+                        equip.getEquipPropertyRandomMin(),
+                        equip.getEquipPropertyRandomMax(),
+                        equip.getLevel(),
+                        equip.getPosition()
+                );
+        equip.setEquipPropertyRandomList(equipRandomEntryList);
+        save(equip);
+        return equip;
     }
 
 

+ 56 - 23
logic/equip-logic/src/main/java/com/iohao/mmo/equip/service/EquipTemplateService.java

@@ -134,30 +134,18 @@ public class EquipTemplateService {
                                 fixedCount);
             }
         }
-        if(equipPropertyFixedList!=null&&!equipPropertyFixedList.isEmpty()) {
-            //生成准确的固定属性
-            equipEntryTemplateService.propertyDetail(
-                    equipTemplate.getLevel(),
-                    equipPropertyFixedList);
-        }
-        //随机属性的条数
-        int randomCount = RandomKit.randomFromInt(
-                equipTemplate.getEquipPropertyRandomMin(),
-                equipTemplate.getEquipPropertyRandomMax()+1);
+        //随机固定属性的具体值
+        resetFixedEntryValue(equipTemplate.getLevel(), equipPropertyFixedList);
+
         //生成随机属性
-        List<EquipEntry> equipEntryList = new ArrayList<>();
-        if(randomCount>0) {
-            equipEntryList = equipEntryTemplateService.randomEntryBatch(
-                    equipTemplate.getLevel(),
-                    equipTemplate.getPosition(),
-                    randomCount);
-        }
-        if(equipEntryList!=null&&!equipEntryList.isEmpty()) {
-            //生成准确的随机属性
-            equipEntryTemplateService.propertyDetail(
-                    equipTemplate.getLevel(),
-                    equipEntryList);
-        }
+        List<EquipEntry> equipEntryList =
+                resetRandomEntryList(
+                        equipTemplate.getEquipPropertyRandomMin(),
+                        equipTemplate.getEquipPropertyRandomMax(),
+                        equipTemplate.getLevel(),
+                        equipTemplate.getPosition()
+                );
+
         return Equip.builder()
                 .itemTypeId(equipTemplate.getItemTypeId())
                 .position(equipTemplate.getPosition())
@@ -179,4 +167,49 @@ public class EquipTemplateService {
                 .equipPropertyRandomList(equipEntryList)
                 .build();
     }
+
+    /**
+     * 重新随机固定属性的具体值
+     * @param level 装备要求等级
+     * @param equipPropertyFixedList 固定属性词条
+     * @return List<EquipEntry> 装备词条列表
+     */
+    public void resetFixedEntryValue(int level,List<EquipEntry> equipPropertyFixedList){
+        if(equipPropertyFixedList!=null&&!equipPropertyFixedList.isEmpty()) {
+            //生成准确的固定属性
+            equipEntryTemplateService.propertyDetail(
+                    level,
+                    equipPropertyFixedList);
+        }
+    }
+
+    /**
+     * 重新生成随机属性
+     * @param numMin 最少条数
+     * @param numMax 最大条数
+     * @param level 装备要求等级
+     * @param position 部位
+     * @return List<EquipEntry> 装备词条列表
+     */
+    public List<EquipEntry> resetRandomEntryList(int numMin,int numMax,int level,String position){
+        //随机属性的条数
+        int randomCount = RandomKit.randomFromInt(
+                numMin,
+                numMax+1);
+        //生成随机属性
+        List<EquipEntry> equipEntryList = new ArrayList<>();
+        if(randomCount>0) {
+            equipEntryList = equipEntryTemplateService.randomEntryBatch(
+                    level,
+                    position,
+                    randomCount);
+        }
+        if(equipEntryList!=null&&!equipEntryList.isEmpty()) {
+            //生成准确的随机属性
+            equipEntryTemplateService.propertyDetail(
+                    level,
+                    equipEntryList);
+        }
+        return equipEntryList;
+    }
 }

+ 7 - 12
one-client/src/main/java/com/iohao/mmo/client/input/EquipInputCommandRegion.java

@@ -76,15 +76,10 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
 
         ofCommand(EquipCmd.getEquip).callback(EquipMessage.class, result -> {
             EquipMessage value = result.getValue();
-            log.info("装备信息 : {}", value);
+            log.info("装备属性信息 : {}", JsonKit.toJsonString(value));
         }).setDescription("查询装备信息").setInputRequestData(inputRequestData);
 
-//        ofCommand(EquipCmd.allotEquip).callback(EquipMessage.class, result -> {
-//            EquipMessage value = result.getValue();
-//            log.info("装备属性信息 : {}", value);
-//        }).setDescription("分配装备属性信息").setInputRequestData(inputRequestData);
-
-        // 10-4 重新随机总属性点(鉴定装备)
+        // 10-4 重新随机词条
         inputRequestData = () -> {
             ScannerKit.log(() -> log.info("请输入装备id和极品概率增益百分比,格式 [装备id-增益百分比]"));
             String inputValue = ScannerKit.nextLine("1-0.3");
@@ -98,10 +93,10 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
             return equipResetMessage;
         };
 
-        ofCommand(EquipCmd.resetEquip).callback(EquipMessage.class, result -> {
-            EquipMessage value = result.getValue();
-            log.info("装备属性信息 : {}", value);
-        }).setDescription("重新随机总属性点(鉴定装备)").setInputRequestData(inputRequestData);
+        ofCommand(EquipCmd.resetEquip).callback(EquipShowMessage.class, result -> {
+            EquipShowMessage value = result.getValue();
+            log.info("装备属性信息 : {}", JsonKit.toJsonString(value));
+        }).setDescription("重新随机词条").setInputRequestData(inputRequestData);
 
 
         // 10-5 批量删除装备
@@ -118,7 +113,7 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
 
         ofCommand(EquipCmd.delEquipBatch).callback(EquipMessage.class, result -> {
             EquipMessage value = result.getValue();
-            log.info("装备属性信息 : {}", value);
+            log.info("装备属性信息 : {}", JsonKit.toJsonString(value));
         }).setDescription("批量删除装备").setInputRequestData(inputRequestData);
 
         // 10-13 根据装备库列表批量随机新的装备

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

@@ -32,9 +32,7 @@ public interface EquipCmd {
     int getEquipList = 1;
     /** 得到装备信息 */
     int getEquip = 2;
-    /** 分配属性点 */
-    int allotEquip = 3;
-    /** 重新随机总属性点(鉴定装备) */
+    /** 重新随机词条 */
     int resetEquip = 4;
     /** 批量删除装备 */
     int delEquipBatch = 5;