|
@@ -19,9 +19,11 @@
|
|
package com.iohao.mmo.equip.service;
|
|
package com.iohao.mmo.equip.service;
|
|
|
|
|
|
import com.iohao.mmo.common.config.GameCode;
|
|
import com.iohao.mmo.common.config.GameCode;
|
|
|
|
+import com.iohao.mmo.common.kit.ConvertKit;
|
|
import com.iohao.mmo.common.provide.item.ItemTypeIdConst;
|
|
import com.iohao.mmo.common.provide.item.ItemTypeIdConst;
|
|
import com.iohao.mmo.equip.entity.*;
|
|
import com.iohao.mmo.equip.entity.*;
|
|
import com.iohao.mmo.equip.enums.PropertyNameEnum;
|
|
import com.iohao.mmo.equip.enums.PropertyNameEnum;
|
|
|
|
+import com.iohao.mmo.equip.kit.EquipRandomKit;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
import org.springframework.data.domain.PageRequest;
|
|
import org.springframework.data.domain.PageRequest;
|
|
import org.springframework.data.domain.Sort;
|
|
import org.springframework.data.domain.Sort;
|
|
@@ -31,7 +33,9 @@ import org.springframework.data.mongodb.core.query.Query;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
+import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 装备词条库
|
|
* 装备词条库
|
|
@@ -82,140 +86,51 @@ public class EquipEntryTemplateService {
|
|
mongoTemplate.remove(query, EquipEntryTemplate.class);
|
|
mongoTemplate.remove(query, EquipEntryTemplate.class);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 初始化装备词条库(临时方法,后期移除改为从运营数据中导入)
|
|
|
|
- */
|
|
|
|
- public void initEquipTemplate() {
|
|
|
|
-// // 初始化一些装备配置,后期将移到 excel 中做。
|
|
|
|
-// EquipEntryTemplate equipEntryTemplate = EquipEntryTemplate.builder()
|
|
|
|
-// .name("根骨")
|
|
|
|
-// .code(PropertyNameEnum.GENGU.getCode())
|
|
|
|
-// .description("根骨")
|
|
|
|
-// .hitProb(BigDecimal.valueOf(0.10))
|
|
|
|
-// .entryProperty(
|
|
|
|
-// EquipEntryProperty.builder()
|
|
|
|
-// .levelMin(1)
|
|
|
|
-// .levelMax(10)
|
|
|
|
-// .countType(1) // 属性计算方式(1装备加,2装备增加百分比,3全身增加百分比)
|
|
|
|
-// .showType(1) // 显示方式(1原值显示,2小数转百分比)
|
|
|
|
-// .effectPropertyName(PropertyNameEnum.GENGU.getCode())
|
|
|
|
-// .propertyValueMin(BigDecimal.valueOf(1))
|
|
|
|
-// .propertyValueMax(BigDecimal.valueOf(5))
|
|
|
|
-// .build()
|
|
|
|
-// )
|
|
|
|
-// .entryProperty(
|
|
|
|
-// EquipEntryProperty.builder()
|
|
|
|
-// .levelMin(11)
|
|
|
|
-// .levelMax(20)
|
|
|
|
-// .countType(1)
|
|
|
|
-// .showType(1)
|
|
|
|
-// .effectPropertyName(PropertyNameEnum.GENGU.getCode())
|
|
|
|
-// .propertyValueMin(BigDecimal.valueOf(4))
|
|
|
|
-// .propertyValueMax(BigDecimal.valueOf(10))
|
|
|
|
-// .build()
|
|
|
|
-// )
|
|
|
|
-// .entryProperty(
|
|
|
|
-// EquipEntryProperty.builder()
|
|
|
|
-// .levelMin(21)
|
|
|
|
-// .levelMax(30)
|
|
|
|
-// .countType(1)
|
|
|
|
-// .showType(1)
|
|
|
|
-// .effectPropertyName(PropertyNameEnum.GENGU.getCode())
|
|
|
|
-// .propertyValueMin(BigDecimal.valueOf(7))
|
|
|
|
-// .propertyValueMax(BigDecimal.valueOf(15))
|
|
|
|
-// .build()
|
|
|
|
-// )
|
|
|
|
-// .build();
|
|
|
|
-// mongoTemplate.save(equipEntryTemplate);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
- * 根据装备等级、部位、数量 随机词条
|
|
|
|
- * @param level 等级
|
|
|
|
|
|
+ * 根据装备部位、数量 随机词条模板
|
|
* @param position 部位
|
|
* @param position 部位
|
|
* @param count 随机数量
|
|
* @param count 随机数量
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- public List<EquipEntry> randomEquipBatch(int level,String position,int count){
|
|
|
|
|
|
+ public List<EquipEntryTemplate> randomEntryTemplateBatch(String position,int count){
|
|
// 创建条件对象
|
|
// 创建条件对象
|
|
Criteria criteria = new Criteria();
|
|
Criteria criteria = new Criteria();
|
|
-
|
|
|
|
- criteria.and("levelMin").gte(level);
|
|
|
|
- criteria.and("levelMax").gte(level);
|
|
|
|
criteria.and("positionList").is(position);
|
|
criteria.and("positionList").is(position);
|
|
|
|
|
|
Query query = new Query();
|
|
Query query = new Query();
|
|
query.addCriteria(criteria);
|
|
query.addCriteria(criteria);
|
|
|
|
|
|
-// // 总记录数
|
|
|
|
-// long total = mongoTemplate.count(query, EquipEntryTemplate.class);
|
|
|
|
-// //查询返回指定字段 (自定义列表)
|
|
|
|
-// query.fields().include("name", "code");
|
|
|
|
-// // 分页
|
|
|
|
-// query.with(PageRequest.of(bo.getPageNum() - 1, bo.getPageSize(),
|
|
|
|
-// // 排序
|
|
|
|
-// Sort.by(Sort.Order.desc("code"))));
|
|
|
|
|
|
+ List<EquipEntryTemplate> equipEntryTemplateList = mongoTemplate.find(query,EquipEntryTemplate.class);
|
|
|
|
+
|
|
|
|
+ return EquipRandomKit.weightRandom(equipEntryTemplateList,count);
|
|
|
|
+ }
|
|
|
|
|
|
- List<EquipEntryTemplate> equipEntryList = mongoTemplate.find(query,EquipEntryTemplate.class);
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 根据装备等级、部位、数量 随机词条
|
|
|
|
+ * @param level 等级
|
|
|
|
+ * @param position 部位
|
|
|
|
+ * @param count 随机数量
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public List<EquipEntry> randomEntryBatch(int level,String position,int count){
|
|
|
|
+ List<EquipEntry> equipEntryList = new ArrayList<>();
|
|
|
|
+ List<EquipEntryTemplate> equipEntryTemplateList = randomEntryTemplateBatch(position,count);
|
|
|
|
+ for(EquipEntryTemplate equipEntryTemplate:equipEntryTemplateList){
|
|
|
|
+ EquipEntry equipEntry = ConvertKit.sourceToTarget(equipEntryTemplate, EquipEntry.class);
|
|
|
|
+ //筛选出符合条件的list
|
|
|
|
+ List<EquipEntryProperty> newEntryPropertyList = filterByStream(equipEntryTemplate.getEntryPropertyList(),level);
|
|
|
|
+ equipEntry.setEntryPropertyList(newEntryPropertyList);
|
|
|
|
+ equipEntryList.add(equipEntry);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return equipEntryList;
|
|
|
|
+ }
|
|
|
|
|
|
- return null;
|
|
|
|
|
|
+ public List<EquipEntryProperty> filterByStream(List<EquipEntryProperty> equipEntryPropertyList,int level) {
|
|
|
|
+ return equipEntryPropertyList.stream()
|
|
|
|
+ .filter(equipEntryProperty -> equipEntryProperty.getLevelMin()<=level)
|
|
|
|
+ .filter(equipEntryProperty -> equipEntryProperty.getLevelMax()>=level)
|
|
|
|
+ .collect(Collectors.toList());
|
|
}
|
|
}
|
|
|
|
|
|
-// /**
|
|
|
|
-// * 根据装备库列表批量随机新的装备
|
|
|
|
-// * @param itemTypeIdList 物品分类标识列表
|
|
|
|
-// * @param userId 用户id
|
|
|
|
-// * @return
|
|
|
|
-// */
|
|
|
|
-// public List<Equip> randomEquipBatch(List<String> itemTypeIdList,long userId){
|
|
|
|
-// List<Equip> equipList = itemTypeIdList.stream()
|
|
|
|
-// .map(itemTypeId -> randomEquip(itemTypeId,userId))
|
|
|
|
-// .toList();
|
|
|
|
-// return equipList;
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
-// /**
|
|
|
|
-// * 根据装备库随机一件新的装备
|
|
|
|
-// * @param itemTypeId itemTypeId
|
|
|
|
-// * @param userId 用户id
|
|
|
|
-// * @return
|
|
|
|
-// */
|
|
|
|
-// public Equip randomEquip(String itemTypeId, long userId){
|
|
|
|
-// //取到装备库
|
|
|
|
-// EquipTemplate equipTemplate = findByItemTypeId(itemTypeId);
|
|
|
|
-// GameCode.objNotFound.assertTrue(equipTemplate!=null,"找不到对应装备库");
|
|
|
|
-// //将装备库属性拷贝到装备中
|
|
|
|
-// Equip equip = copyTemplate2Equip(equipTemplate);
|
|
|
|
-// equip.setUserId(userId);
|
|
|
|
-// mongoTemplate.save(equip);
|
|
|
|
-// return equip;
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// /**
|
|
|
|
-// * 根据需要拷贝装备库属性到装备
|
|
|
|
-// * @param equipTemplate 装备库
|
|
|
|
-// * @return
|
|
|
|
-// */
|
|
|
|
-// public Equip copyTemplate2Equip(EquipTemplate equipTemplate){
|
|
|
|
-//
|
|
|
|
-// return Equip.builder()
|
|
|
|
-// .itemTypeId(equipTemplate.getItemTypeId())
|
|
|
|
-// .quality(0) //品质
|
|
|
|
-// .fixedEquipProperty(
|
|
|
|
-// FixedEquipProperty.randomFixed(equipTemplate.getFixedEquipPropertyMin(),
|
|
|
|
-// equipTemplate.getFixedEquipPropertyMax())) //装备固定属性
|
|
|
|
-// .attrTotal(0)
|
|
|
|
-// .undistributedAttr(0)
|
|
|
|
-// .elseEquipProperty(EquipPropertyElse.resetElseEquipProperty()) //初始化分配的具体属性点
|
|
|
|
-// .position(equipTemplate.getPosition())
|
|
|
|
-// .level(equipTemplate.getLevel())
|
|
|
|
-// .identifyCount(0)
|
|
|
|
-// .fixedEquipPropertyMin(equipTemplate.getFixedEquipPropertyMin())
|
|
|
|
-// .fixedEquipPropertyMax(equipTemplate.getFixedEquipPropertyMax())
|
|
|
|
-// .totalAttrMin(equipTemplate.getTotalAttrMin())
|
|
|
|
-// .totalAttrMax(equipTemplate.getTotalAttrMax())
|
|
|
|
-// .equipTemplateId(equipTemplate.getItemTypeId())
|
|
|
|
-// .build();
|
|
|
|
-// }
|
|
|
|
}
|
|
}
|