|
@@ -0,0 +1,187 @@
|
|
|
+/*
|
|
|
+ * ioGame
|
|
|
+ * Copyright (C) 2021 - 2023 渔民小镇 (262610965@qq.com、luoyizhu@gmail.com) . All Rights Reserved.
|
|
|
+ * # iohao.com . 渔民小镇
|
|
|
+ *
|
|
|
+ * This program is free software: you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU Affero General Public License as
|
|
|
+ * published by the Free Software Foundation, either version 3 of the
|
|
|
+ * License, or (at your option) any later version.
|
|
|
+ *
|
|
|
+ * This program is distributed in the hope that it will be useful,
|
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
+ * GNU Affero General Public License for more details.
|
|
|
+ *
|
|
|
+ * You should have received a copy of the GNU Affero General Public License
|
|
|
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
+ */
|
|
|
+package com.iohao.mmo.equip.service;
|
|
|
+
|
|
|
+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.enums.PropertyNameEnum;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+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;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 装备词条库
|
|
|
+ *
|
|
|
+ * @author 唐斌
|
|
|
+ * @date 2023-07-30
|
|
|
+ * @description: 装备库实现类
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@AllArgsConstructor
|
|
|
+public class EquipEntryTemplateService {
|
|
|
+
|
|
|
+ final MongoTemplate mongoTemplate;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过id查询装备词条库
|
|
|
+ * @param id 装备词条库id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public EquipEntryTemplate findById(String id) {
|
|
|
+ return mongoTemplate.findById(id, EquipEntryTemplate.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过code查询装备词条库
|
|
|
+ * @param code 装备词条库编码
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public EquipEntryTemplate findByCode(String code) {
|
|
|
+ return mongoTemplate.findOne(
|
|
|
+ Query.query(new Criteria("code").is(code)), EquipEntryTemplate.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存装备词条库
|
|
|
+ * @param equipEntryTemplate 装备词条库
|
|
|
+ */
|
|
|
+ public void save(EquipEntryTemplate equipEntryTemplate) {
|
|
|
+ mongoTemplate.save(equipEntryTemplate);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据装备词条库id列表批量删除装备库
|
|
|
+ * @param idList 装备词条库id列表
|
|
|
+ */
|
|
|
+ public void delBatch(List<String> idList) {
|
|
|
+ Query query = new Query(new Criteria("id").in(idList));
|
|
|
+ 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 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();
|
|
|
+ }
|
|
|
+}
|