Jelajahi Sumber

装备模块雏形完善

tangbin 1 tahun lalu
induk
melakukan
b4f1a4e826

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

@@ -11,12 +11,10 @@ import com.iohao.mmo.equip.mapper.EquipMapper;
 import com.iohao.mmo.equip.proto.EquipMessage;
 import com.iohao.mmo.equip.proto.EquipResetMessage;
 import com.iohao.mmo.equip.service.EquipService;
-import io.netty.util.internal.StringUtil;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
-
 import java.util.List;
 
 /**
@@ -37,12 +35,13 @@ public class EquipAction {
      * 获取某人装备列表信息
      *
      * @param flowContext flowContext
+     * @param store 所属位置:1包裹,2仓库,3穿戴
      */
     @ActionMethod(EquipCmd.getEquipList)
-    public List<EquipMessage> getEquipList(FlowContext flowContext) { //参数值
+    public List<EquipMessage> getEquipList(FlowContext flowContext,int store) { //参数值
         long userId = flowContext.getUserId();
         // 初始化装备数据,暂时放这
-        List<Equip> equipList = equipService.listByUser(userId);
+        List<Equip> equipList = equipService.listByUser(userId,store);
 
         return EquipMapper.ME.convert(equipList);
     }
@@ -69,7 +68,6 @@ public class EquipAction {
         equipService.allotEquip(EquipMapper.ME.convert(equipMessage));
     }
 
-
     /**
      * 重新随机总属性点
      *
@@ -77,8 +75,19 @@ public class EquipAction {
      * @param equipResetMessage 重新随机装备总属性点参数对象
      */
     @ActionMethod(EquipCmd.resetEquip)
-    public void resetEquip(FlowContext flowContext, EquipResetMessage equipResetMessage) { //参数值
+    public EquipMessage resetEquip(FlowContext flowContext, EquipResetMessage equipResetMessage) { //参数值
         GameCode.objNotFound.assertTrue(StringUtils.isNotBlank(equipResetMessage.equipId)&&StringUtils.isNotBlank(equipResetMessage.propId));
-        equipService.resetEquip((equipResetMessage.equipId),equipResetMessage.propId);
+        Equip equip = equipService.resetEquip((equipResetMessage.equipId),equipResetMessage.propId);
+        return EquipMapper.ME.convert(equip);
+    }
+
+    /**
+     * 批量删除装备
+     *
+     * @param flowContext flowContext
+     */
+    @ActionMethod(EquipCmd.delBatch)
+    public void delBatch(FlowContext flowContext, StringValue stringValue) { //参数值
+        equipService.delBatch(stringValue.value);
     }
 }

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

@@ -34,7 +34,7 @@ public class EquipTemplateAction {
     EquipTemplateService equipTemplateService;
 
     /**
-     * TODO 初始化装备模板(暂时的方法,后期应从数据文件中读取)
+     * TODO 初始化装备(暂时的方法,后期应从数据文件中读取)
      *
      * @param flowContext flowContext
      */
@@ -46,10 +46,10 @@ public class EquipTemplateAction {
     }
 
     /**
-     * 获取装备模板信息
+     * 获取装备信息
      *
      * @param flowContext flowContext
-     * @param stringValue 装备模板id
+     * @param stringValue 装备id
      */
     @ActionMethod(EquipCmd.getEquipTemplate)
     public EquipTemplateMessage getEquipTemplate(FlowContext flowContext, StringValue stringValue) { //参数值
@@ -59,16 +59,16 @@ public class EquipTemplateAction {
     }
 
     /**
-     * TODO 根据装备模板列表随机出新的装备,
+     * TODO 根据装备列表随机出新的装备,
      * 实际这里应该传入怪物id,根据怪物-物品-掉率的绑定关系去随机出掉落物品,暂时还没有怪物,先这样处理
      *
      * @param flowContext flowContext
-     * @param stringValve 装备模板ids(xxx,xxx)
+     * @param stringValve 装备库ids(xxx-xxx)
      */
     @ActionMethod(EquipCmd.randomEquip)
     public List<EquipMessage> randomEquip(FlowContext flowContext, StringValue stringValve) { //参数值
         long userId = flowContext.getUserId();
-        String[] ids = stringValve.value.split(",");
+        String[] ids = stringValve.value.split("-");
         List<EquipMessage> equipMessageList = new ArrayList<>();
         for(String id:ids){
             // 初始化装备数据,暂时放这

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

@@ -39,8 +39,6 @@ import java.util.Objects;
 @Document
 @FieldDefaults(level = AccessLevel.PRIVATE)
 public class BasicEquipProperty {
-    @Id
-    String id;
     /** 体质 */
     int constitution;
     /** 魔力 */

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

@@ -34,8 +34,6 @@ import org.springframework.data.mongodb.core.mapping.Document;
 public class Equip {
     @Id
     String id;
-    /** 物品表id */
-    String itemId;
     /** 玩家 */
     long userId;
     /** 装备名 */
@@ -44,8 +42,20 @@ public class Equip {
     int attrTotal;
     /** 未分配属性点 */
     int undistributedAttr;
-    /** 装备模板 */
-    EquipTemplate equipTemplate;
+    /** 所属物品 */
+    Goods goods;
+    /** 部位(0帽子,1衣服,2武器,3手镯,4裤子,5鞋子) */
+    int position;
+    /** 要求等级 */
+    int level;
+    /** 自定义属性随机范围最小值 */
+    int totalAttrMin;
+    /** 自定义属性随机范围最大值 */
+    int totalAttrMax;
+    /** 装备库id */
+    String equipTemplateId;
     /** 基础属性 */
     BasicEquipProperty basicEquipProperty;
+    /** 是否删除 */
+    boolean delFlag = false;
 }

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

@@ -44,4 +44,6 @@ public class EquipTemplate {
     int totalAttrMin;
     /** 自定义属性随机范围最大值 */
     int totalAttrMax;
+    /** 是否删除 */
+    boolean delFlag = false;
 }

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

@@ -52,4 +52,8 @@ public class Goods {
     int type;
     /** 子表主键 */
     String detailId;
+    /** 所属位置:1包裹,2仓库,3穿戴 */
+    int store = 1;
+    /** 是否删除 */
+    boolean delFlag = false;
 }

+ 63 - 13
logic/equip-logic/src/main/java/com/iohao/mmo/equip/service/EquipService.java

@@ -21,13 +21,17 @@ package com.iohao.mmo.equip.service;
 import com.iohao.mmo.common.config.GameCode;
 import com.iohao.mmo.equip.entity.BasicEquipProperty;
 import com.iohao.mmo.equip.entity.Equip;
+import com.iohao.mmo.equip.entity.Goods;
 import com.iohao.mmo.equip.utils.RandomUtils;
+import com.mongodb.bulk.BulkWriteResult;
 import lombok.AllArgsConstructor;
+import org.springframework.data.mongodb.core.BulkOperations;
 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.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -41,19 +45,65 @@ public class EquipService {
     final MongoTemplate mongoTemplate;
 
     public Equip findById(String id) {
-
         return  mongoTemplate.findById(id, Equip.class);
     }
 
-    public List<Equip> listByUser(long userId) {
+    /**
+     * 根据用户查找所有装备
+     * @param userId
+     * @param store 所属位置:1包裹,2仓库,3穿戴
+     * @return
+     */
+    public List<Equip> listByUser(long userId,int store) {
         Query query = new Query();
         query.addCriteria(Criteria.where("userId").is(userId));
+        if(store>0) {
+            query.addCriteria(Criteria.where("goods.store").is(store));
+        }
 
         return  mongoTemplate.find(query,Equip.class);
     }
 
-    public void save(Equip equip) {
-        mongoTemplate.save(equip);
+    public void delBatch(String ids) {
+        String[] idsArr = ids.split("-");
+        GameCode.objNotFound.assertTrue(idsArr.length>0);
+        Query query = new Query();
+        query.addCriteria(Criteria.where("id").in(Arrays.asList(idsArr)));
+
+        // 更新的字段
+        Update update = new Update();
+        //获取分配的字段
+        update.set("delFlag", true);
+        update.set("goods.delFlag", true);
+
+        //UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理;ORDERED是队列排序处理,只要中途有个失败了,那么后续的操作流程就会终止了。
+        BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, Equip.class);
+        bulkOps.updateMulti(query, update);
+        BulkWriteResult result = bulkOps.execute();
+        //逻辑删除对应的商品
+        delGoodsByChildBatch(idsArr);
+    }
+
+    /**
+     * 根据子表id批量删除物品(逻辑删除)
+     * @param detailIdArr 子表主键
+     */
+    public void delGoodsByChildBatch(String[] detailIdArr) {
+        if (detailIdArr.length==0) {
+            return;
+        }
+        Query query = new Query();
+        query.addCriteria(Criteria.where("detailId").in(Arrays.asList(detailIdArr)));
+
+        // 更新的字段
+        Update update = new Update();
+        //获取分配的字段
+        update.set("delFlag", true);
+
+        //UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理;ORDERED是队列排序处理,只要中途有个失败了,那么后续的操作流程就会终止了。
+        BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, Goods.class);
+        bulkOps.updateMulti(query, update);
+        BulkWriteResult result = bulkOps.execute();
     }
 
     /**
@@ -93,8 +143,8 @@ public class EquipService {
         Equip equip = findById(equipId);
         GameCode.objNotFound.assertTrue(equip!=null);
         // TODO 这里判断道具效果,然后提高装备随机的最小值进行随机,一般是增加最小值的百分比
-        int randomMin = equip.getEquipTemplate().getTotalAttrMin();
-        int randomMax = equip.getEquipTemplate().getTotalAttrMax();
+        int randomMin = equip.getTotalAttrMin();
+        int randomMax = equip.getTotalAttrMax();
         //TODO 这里假设道具增加30%增益效果
         double gain = 0.3;
         int newAttrTotal = RandomUtils.randomFromInt(randomMin+(int)((randomMax-randomMin)*gain),randomMax);
@@ -104,16 +154,16 @@ public class EquipService {
 
     /**
      * 替换掉原来装备的属性值,并且重置已分配的属性点
-     * @param oldEquip
+     * @param equip
      * @param newAttrTotal
      * @return
      */
-    private Equip replaceEquipAttr(Equip oldEquip,int newAttrTotal){
-        oldEquip.setBasicEquipProperty(BasicEquipProperty.resetBasicEquipProperty());
-        oldEquip.setAttrTotal(newAttrTotal);
-        oldEquip.setUndistributedAttr(newAttrTotal);
-        save(oldEquip);
-        return oldEquip;
+    private Equip replaceEquipAttr(Equip equip,int newAttrTotal){
+        equip.setBasicEquipProperty(BasicEquipProperty.resetBasicEquipProperty());
+        equip.setAttrTotal(newAttrTotal);
+        equip.setUndistributedAttr(newAttrTotal);
+        mongoTemplate.save(equip);
+        return equip;
     }
 
 }

+ 101 - 34
logic/equip-logic/src/main/java/com/iohao/mmo/equip/service/EquipTemplateService.java

@@ -24,11 +24,20 @@ import com.iohao.mmo.equip.entity.Equip;
 import com.iohao.mmo.equip.entity.EquipTemplate;
 import com.iohao.mmo.equip.entity.Goods;
 import com.iohao.mmo.equip.utils.RandomUtils;
-import jakarta.annotation.Resource;
+import com.mongodb.bulk.BulkWriteResult;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.mongodb.core.BulkOperations;
 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.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
+import java.beans.JavaBean;
+import java.util.Arrays;
+
 /**
  * @author 唐斌
  * @date 2023-07-30
@@ -38,93 +47,151 @@ import org.springframework.stereotype.Service;
 @AllArgsConstructor
 public class EquipTemplateService {
 
-    @Resource
-    private GoodsService goodsService;
-
     final MongoTemplate mongoTemplate;
 
     public EquipTemplate findById(String id) {
-
         return  mongoTemplate.findById(id, EquipTemplate.class);
     }
 
-    public void saveEquipTemplate(EquipTemplate equipTemplate) {
-        mongoTemplate.save(equipTemplate);
+    public void save(EquipTemplate equipTemplate) {
+        if(StringUtils.isNotBlank(equipTemplate.getId())){
+            mongoTemplate.save(equipTemplate);
+        }else {
+            //双向存储,便于后期查找
+            Goods goods = equipTemplate.getGoods();
+            mongoTemplate.save(goods);
+            equipTemplate.setGoods(goods);
+            mongoTemplate.save(equipTemplate);
+            goods.setType(3);
+            goods.setDetailId(equipTemplate.getId());
+            mongoTemplate.save(goods);
+        }
     }
 
+    public void delBatch(String ids) {
+        String[] idsArr = ids.split("-");
+        GameCode.objNotFound.assertTrue(idsArr.length>0);
+        Query query = new Query();
+        query.addCriteria(Criteria.where("id").in(Arrays.asList(idsArr)));
+
+        // 更新的字段
+        Update update = new Update();
+        //获取分配的字段
+        update.set("delFlag", true);
+        update.set("goods.delFlag", true);
+
+        //UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理;ORDERED是队列排序处理,只要中途有个失败了,那么后续的操作流程就会终止了。
+        BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, EquipTemplate.class);
+        bulkOps.updateMulti(query, update);
+        BulkWriteResult result = bulkOps.execute();
+
+        //逻辑删除对应的商品
+        delGoodsByChildBatch(idsArr);
+    }
+
+    /**
+     * 根据子表id批量删除物品(逻辑删除)
+     * @param detailIdArr 子表主键
+     */
+    public void delGoodsByChildBatch(String[] detailIdArr) {
+        if (detailIdArr.length==0) {
+            return;
+        }
+        Query query = new Query();
+        query.addCriteria(Criteria.where("detailId").in(Arrays.asList(detailIdArr)));
+
+        // 更新的字段
+        Update update = new Update();
+        //获取分配的字段
+        update.set("delFlag", true);
+
+        //UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理;ORDERED是队列排序处理,只要中途有个失败了,那么后续的操作流程就会终止了。
+        BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, Goods.class);
+        bulkOps.updateMulti(query, update);
+        BulkWriteResult result = bulkOps.execute();
+    }
 
     public void initEquipTemplate() {
         // 初始化一些装备配置,后期将移到 excel 中做。
         EquipTemplate equipTemplate = new EquipTemplate();
         equipTemplate.setPosition(1);
-        equipTemplate.setLevel(10);
-        equipTemplate.setTotalAttrMin(10);
-        equipTemplate.setTotalAttrMax(40);
+        equipTemplate.setLevel(20);
+        equipTemplate.setTotalAttrMin(50);
+        equipTemplate.setTotalAttrMax(80);
 
         Goods goods = new Goods();
-        goods.setName("布甲");
-        goods.setDesc("一件普通的布甲");
+        goods.setName("甲");
+        goods.setDesc("一件厚重的皮甲");
         goods.setIcon("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
         goods.setImage("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
-        goods.setBindPrice(120);
-        goods.setPrice(100);
+        goods.setBindPrice(220);
+        goods.setPrice(200);
         goods.setDealFlag(true);
         goods.setType(3);
-        goodsService.save(goods);
+        mongoTemplate.save(goods);
         equipTemplate.setGoods(goods);
 
-        mongoTemplate.insert(equipTemplate);
+        mongoTemplate.save(equipTemplate);
+        goods.setDetailId(equipTemplate.getId());
+        mongoTemplate.save(goods);
 
         // 初始化一些装备配置,后期将移到 excel 中做。
         EquipTemplate equipTemplate2 = new EquipTemplate();
         equipTemplate2.setPosition(2);
-        equipTemplate2.setLevel(1);
-        equipTemplate2.setTotalAttrMin(5);
-        equipTemplate2.setTotalAttrMax(18);
+        equipTemplate2.setLevel(18);
+        equipTemplate2.setTotalAttrMin(20);
+        equipTemplate2.setTotalAttrMax(35);
 
         Goods goods2 = new Goods();
-        goods2.setName("木剑");
-        goods2.setDesc("一把木剑,看起来像玩具,打起来还有点疼");
+        goods2.setName("剑");
+        goods2.setDesc("一把铁剑,有些锈迹斑斑了");
         goods2.setIcon("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
         goods2.setImage("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
-        goods2.setBindPrice(80);
-        goods2.setPrice(60);
+        goods2.setBindPrice(180);
+        goods2.setPrice(160);
         goods2.setDealFlag(true);
         goods2.setType(3);
-        goodsService.save(goods2);
+        mongoTemplate.save(goods2);
         equipTemplate2.setGoods(goods2);
 
-        mongoTemplate.insert(equipTemplate2);
+        mongoTemplate.save(equipTemplate2);
+        goods2.setDetailId(equipTemplate2.getId());
+        mongoTemplate.save(goods2);
     }
 
     /**
-     * 根据装备模板随机一件新的装备
+     * 根据装备随机一件新的装备
      * @param equipTemplateId
      * @return
      */
     public Equip randomEquip(String equipTemplateId,long userId){
-        //取到装备模板
+        //取到装备
         EquipTemplate equipTemplate = mongoTemplate.findById(equipTemplateId, EquipTemplate.class);
 
         GameCode.objNotFound.assertTrue(equipTemplate!=null);
 
         Equip equip = new Equip();
-        //随机属性值
-        equip.setAttrTotal(RandomUtils.randomFromInt(equipTemplate.getTotalAttrMin(),equipTemplate.getTotalAttrMax()));
-        equip.setName(equipTemplate.getGoods().getName());
         //新建装备对应的物品类
         Goods goods = equipTemplate.getGoods();
         goods.setId(null);
         goods.setType(0);
-        goodsService.save(goods);
-        //物品id
-        equip.setItemId(goods.getId());
+        mongoTemplate.save(goods);
+        //将装备库属性拷贝到装备中
+        //对应的物品数据是新建的
+        BeanUtils.copyProperties(equipTemplate,equip);
+        equip.setId(null);
+        equip.setGoods(goods);
+        equip.setName(equipTemplate.getGoods().getName());
+        //随机属性值
+        equip.setAttrTotal(RandomUtils.randomFromInt(equipTemplate.getTotalAttrMin(),equipTemplate.getTotalAttrMax()));
         equip.setUndistributedAttr(equip.getAttrTotal());
-        equip.setEquipTemplate(equipTemplate);
+
         //初始化分配的具体属性点
         equip.setBasicEquipProperty(BasicEquipProperty.resetBasicEquipProperty());
         equip.setUserId(userId);
         mongoTemplate.save(equip);
+        goods.setDetailId(equip.getId());
+        mongoTemplate.save(goods);
         return equip;
     }
 }

+ 14 - 0
logic/equip-logic/src/main/java/com/iohao/mmo/equip/service/GoodsService.java

@@ -18,11 +18,24 @@
  */
 package com.iohao.mmo.equip.service;
 
+import com.iohao.mmo.common.config.GameCode;
 import com.iohao.mmo.equip.entity.BasicEquipProperty;
+import com.iohao.mmo.equip.entity.Equip;
 import com.iohao.mmo.equip.entity.Goods;
+import com.mongodb.bulk.BulkWriteResult;
 import lombok.AllArgsConstructor;
+import org.springframework.data.mongodb.core.BulkOperations;
 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.data.mongodb.core.query.Update;
+import org.springframework.data.util.Pair;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * @author 唐斌
@@ -41,4 +54,5 @@ public class GoodsService {
     public void save(Goods goods) {
         mongoTemplate.save(goods);
     }
+
 }

+ 47 - 19
provide/equip-provide/src/main/java/com/iohao/mmo/equip/client/EquipInputCommandRegion.java

@@ -21,10 +21,12 @@ package com.iohao.mmo.equip.client;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONWriter;
 import com.iohao.game.action.skeleton.protocol.wrapper.ByteValueList;
+import com.iohao.game.action.skeleton.protocol.wrapper.IntValue;
 import com.iohao.game.action.skeleton.protocol.wrapper.StringValue;
 import com.iohao.game.external.client.AbstractInputCommandRegion;
 import com.iohao.game.external.client.command.InputRequestData;
 import com.iohao.game.external.client.kit.ScannerKit;
+import com.iohao.game.external.client.kit.SplitParam;
 import com.iohao.mmo.common.provide.kit.JsonKit;
 import com.iohao.mmo.equip.cmd.EquipCmd;
 import com.iohao.mmo.equip.proto.*;
@@ -55,11 +57,20 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
     private void request() {
         InputRequestData inputRequestData;
 
+        // 动态请求参数(参数值)
+        inputRequestData = () -> {
+            ScannerKit.log(() -> log.info("请输入获取的装备存储位置:0所有,1包裹,2仓库,3穿戴"));
+            int inputValue = ScannerKit.nextInt(0);
+
+            // 请求参数
+            IntValue intValue = IntValue.of(inputValue);
+            return intValue;
+        };
         // 8-1
         ofCommand(EquipCmd.getEquipList).callback(ByteValueList.class, result -> {
             List<EquipMessage> value = result.toList(EquipMessage.class);
             log.info("装备列表信息 : {}", JsonKit.toJsonString(value));
-        }).setDescription("获取装备列表信息");
+        }).setDescription("获取装备列表信息").setInputRequestData(inputRequestData);
 
         // 动态请求参数(参数值)
         inputRequestData = () -> {
@@ -82,16 +93,14 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
         inputRequestData = () -> {
             ScannerKit.log(() -> log.info("请输入装备id"));
             String id = ScannerKit.nextLine();
-            ScannerKit.log(() -> log.info("请输入体质"));
-            int constitution = ScannerKit.nextInt(0);
-            ScannerKit.log(() -> log.info("请输入魔力"));
-            int magicPower = ScannerKit.nextInt(0);
-            ScannerKit.log(() -> log.info("请输入力量"));
-            int power = ScannerKit.nextInt(0);
-            ScannerKit.log(() -> log.info("请输入耐力"));
-            int endurance = ScannerKit.nextInt(0);
-            ScannerKit.log(() -> log.info("请输入敏捷"));
-            int agile = ScannerKit.nextInt(0);
+            ScannerKit.log(() -> log.info("请输入体质、魔力、力量、耐力、敏捷,格式[体质-魔力-力量-耐力-敏捷]"));
+            String inputValue = ScannerKit.nextLine("1-1-1-1-1");
+            SplitParam param = new SplitParam(inputValue);
+            int constitution = param.getInt(0,0);
+            int magicPower = param.getInt(1,0);
+            int power = param.getInt(2,0);
+            int endurance = param.getInt(3,0);
+            int agile = param.getInt(4,0);
 
             BasicEquipPropertyMessage basicEquipPropertyMessage = new BasicEquipPropertyMessage(constitution,magicPower,power,endurance,agile);
             EquipMessage equipMessage = new EquipMessage();
@@ -109,10 +118,11 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
 
         // 动态请求参数(参数值)
         inputRequestData = () -> {
-            ScannerKit.log(() -> log.info("请输入装备id"));
-            String equipId = ScannerKit.nextLine();
-            ScannerKit.log(() -> log.info("请输入道具id"));
-            String propId = ScannerKit.nextLine();
+            ScannerKit.log(() -> log.info("请输入装备id和消耗道具id,格式 [装备id-消耗道具id]"));
+            String inputValue = ScannerKit.nextLine("1-1");
+            SplitParam param = new SplitParam(inputValue);
+            String equipId = param.getString(0);
+            String propId = param.getString(1);
 
             EquipResetMessage equipResetMessage = new EquipResetMessage();
             equipResetMessage.equipId = equipId;
@@ -126,15 +136,33 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
             log.info("装备属性信息 : {}", value);
         }).setDescription("重新随机总属性点").setInputRequestData(inputRequestData);
 
+
+        // 动态请求参数(参数值)
+        inputRequestData = () -> {
+            ScannerKit.log(() -> log.info("请输入要删除的装备id,格式 [装备1id-装备2id]"));
+            String ids = ScannerKit.nextLine("1-1");
+
+            // 请求参数
+            StringValue stringValue = StringValue.of(ids);
+            return stringValue;
+        };
+
+        // 8-5
+        ofCommand(EquipCmd.delBatch).callback(EquipMessage.class, result -> {
+            EquipMessage value = result.getValue();
+            log.info("装备属性信息 : {}", value);
+        }).setDescription("批量删除装备").setInputRequestData(inputRequestData);
+
         // 8-10
         ofCommand(EquipCmd.initEquipTemplate).callback(EquipTemplateMessage.class, result -> {
             EquipTemplateMessage value = result.getValue();
-            log.info("装备模板信息 : {}", value);
-        }).setDescription("初始化装备模板");
+            log.info("装备信息 : {}", value);
+        }).setDescription("初始化装备");
 
         // 动态请求参数(参数值)
         inputRequestData = () -> {
-            String ids = "64d0838a6f0c894087cab868,64d0838a6f0c894087cab86a";
+            ScannerKit.log(() -> log.info("请输入装备库id列表,格式 [装备库1id-装备库2id-装备库3id...]"));
+            String ids = ScannerKit.nextLine("1-1");
 
             // 请求参数
             StringValue stringValue = StringValue.of(ids);
@@ -145,6 +173,6 @@ public class EquipInputCommandRegion extends AbstractInputCommandRegion {
         ofCommand(EquipCmd.randomEquip).callback(EquipMessage.class, result -> {
             EquipMessage value = result.getValue();
             log.info("装备信息 : {}", value);
-        }).setDescription("根据装备模板列表各随机出一件新的装备").setInputRequestData(inputRequestData);
+        }).setDescription("根据装备列表各随机出一件新的装备").setInputRequestData(inputRequestData);
     }
 }

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

@@ -36,13 +36,13 @@ public interface EquipCmd {
     int allotEquip = 3;
     /** 重新随机总属性点 */
     int resetEquip = 4;
-    /** 初始化装备模板 */
+    /** 批量删除装备 */
+    int delBatch = 5;
+    /** 初始化装备库 */
     int initEquipTemplate = 10;
-    /** 新增装备模板 */
-    int saveEquipTemplate = 11;
-    /** 获取装备模板信息 */
+    /** 获取装备库信息 */
     int getEquipTemplate = 12;
-    /** 根据装备模板随机出一件新的装备 */
+    /** 根据装备库随机出一件新的装备 */
     int randomEquip = 13;
 
     static CmdInfo getCmdInfo(int subCmd) {

+ 16 - 4
provide/equip-provide/src/main/java/com/iohao/mmo/equip/proto/EquipMessage.java

@@ -36,14 +36,26 @@ public class EquipMessage{
     String id;
     /** 玩家 */
     long userId;
-    /** 装备名 */
+    /** 装备名 */
     String name;
     /** 总属性点 */
     int attrTotal;
     /** 未分配属性点 */
     int undistributedAttr;
-    /** 装备模板 */
-    EquipTemplateMessage equipTemplate;
-    /** 装备基础属性 */
+    /** 所属物品 */
+    GoodsMessage goods;
+    /** 部位(0帽子,1衣服,2武器,3手镯,4裤子,5鞋子) */
+    int position;
+    /** 要求等级 */
+    int level;
+    /** 自定义属性随机范围最小值 */
+    int totalAttrMin;
+    /** 自定义属性随机范围最大值 */
+    int totalAttrMax;
+    /** 装备库id */
+    String equipTemplateId;
+    /** 基础属性 */
     BasicEquipPropertyMessage basicEquipProperty;
+    /** 是否删除 */
+    boolean delFlag = false;
 }

+ 7 - 15
provide/equip-provide/src/main/java/com/iohao/mmo/equip/proto/EquipTemplateMessage.java

@@ -36,24 +36,16 @@ public class EquipTemplateMessage{
      * id
      */
     String id;
-    /**
-     * 所属商品
-     */
+    /** 所属物品 */
     GoodsMessage goods;
-    /**
-     * 部位(0帽子,1衣服,2武器,3手镯,4裤子,5鞋子)
-     */
+    /** 部位(0帽子,1衣服,2武器,3手镯,4裤子,5鞋子) */
     int position;
-    /**
-     * 要求等级
-     */
+    /** 要求等级 */
     int level;
-    /**
-     * 自定义属性随机范围最小值
-     */
+    /** 自定义属性随机范围最小值 */
     int totalAttrMin;
-    /**
-     * 自定义属性随机范围最大值
-     */
+    /** 自定义属性随机范围最大值 */
     int totalAttrMax;
+    /** 是否删除 */
+    boolean delFlag = false;
 }

+ 15 - 21
provide/equip-provide/src/main/java/com/iohao/mmo/equip/proto/GoodsMessage.java

@@ -36,32 +36,26 @@ public class GoodsMessage {
      * 物品id
      */
     String id;
-    /**
-     * 物品名称
-     */
+    /** 物品名称 */
     String name;
-    /**
-     * 物品描述
-     */
+    /** 物品描述 */
     String desc;
-    /**
-     * 图标
-     */
+    /** 图标 */
     String icon;
-    /**
-     * 大图
-     */
+    /** 大图 */
     String image;
-    /**
-     * 绑定货币价格
-     */
+    /** 绑定货币价格 */
     int bindPrice;
-    /**
-     * 非绑定货币价格
-     */
+    /** 非绑定货币价格 */
     int price;
-    /**
-     * 是否可交易
-     */
+    /** 是否可交易 */
     boolean dealFlag;
+    /** 物品类型:0装备,1药品,2材料,3装备库 */
+    int type;
+    /** 子表主键 */
+    String detailId;
+    /** 所属位置:1包裹,2仓库,3穿戴 */
+    int store = 1;
+    /** 是否删除 */
+    boolean delFlag = false;
 }