|
|
@@ -18,28 +18,27 @@ import com.td.Dawa.game.comcharactersdiscovery.pojo.ComCharactersDiscovery;
|
|
|
import com.td.Dawa.game.comcharactersdiscovery.vo.ComCharactersDiscoveryClientVo;
|
|
|
import com.td.Dawa.game.comcharactersdiscovery.vo.ComCharactersDiscoveryVo;
|
|
|
import com.td.Dawa.game.comcharactersdiscovery.repository.ComCharactersDiscoveryRepository;
|
|
|
+import com.td.Dawa.game.complayerbackpack.service.ComPlayerBackpackService;
|
|
|
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackVo;
|
|
|
import com.td.Dawa.game.complayersattri.service.ComPlayersAttriService;
|
|
|
import com.td.Dawa.game.complayersattri.vo.ComPlayersAttriVo;
|
|
|
-import com.td.Dawa.game.excelcharactercreate.pojo.ExcelCharacterCreate;
|
|
|
import com.td.Dawa.game.excelcharactercreate.service.ExcelCharacterCreateService;
|
|
|
import com.td.Dawa.game.excelcharacterlevel.service.ExcelCharacterLevelService;
|
|
|
import com.td.Dawa.game.excelcharacterlevel.vo.ExcelCharacterLevelVo;
|
|
|
-import com.td.Dawa.game.exceldrop.pojo.ExcelDrop;
|
|
|
import com.td.Dawa.game.exceldrop.service.ExcelDropService;
|
|
|
-import com.td.Dawa.game.exceldrop.vo.ExcelDropClientVo;
|
|
|
import com.td.Dawa.game.excelparameter.service.ExcelParameterService;
|
|
|
import com.td.Dawa.game.excelparameter.vo.ExcelParameterVo;
|
|
|
import com.td.Dawa.game.excelprop.pojo.ExcelProp;
|
|
|
import com.td.Dawa.game.excelprop.service.ExcelPropService;
|
|
|
+import com.td.Dawa.game.excelprop.vo.ExcelPropAndProVo;
|
|
|
import com.td.Dawa.game.excelprop.vo.ExcelPropClientVo;
|
|
|
import com.td.Dawa.game.excelresources.service.ExcelResourcesService;
|
|
|
-import com.td.Dawa.game.excelresources.vo.ExcelResourcesClientVo;
|
|
|
import com.td.Dawa.game.excelscene.pojo.ExcelScene;
|
|
|
import com.td.Dawa.game.excelscene.service.ExcelSceneService;
|
|
|
import com.td.Dawa.game.excelworkpro.pojo.ExcelWorkPro;
|
|
|
import com.td.Dawa.game.excelworkpro.service.ExcelWorkProService;
|
|
|
-import com.td.Dawa.game.excelworkpro.vo.ExcelWorkProVo;
|
|
|
import com.td.Dawa.util.CopyUtil;
|
|
|
+import com.td.Dawa.util.ProbabilityIntervalUtil;
|
|
|
import com.td.Dawa.util.UUIDUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -50,6 +49,7 @@ import org.springframework.util.StringUtils;
|
|
|
import javax.persistence.EntityManager;
|
|
|
import javax.persistence.PersistenceContext;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@@ -91,6 +91,10 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
@Autowired
|
|
|
private ExcelPropService excelPropService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ComPlayerBackpackService comPlayerBackpackService;
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 开始工作
|
|
|
*
|
|
|
@@ -146,15 +150,6 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
ComCharactersClientVo comCharactersClientVo = new ComCharactersClientVo();
|
|
|
comCharactersClientVo = CopyUtil.copy(e, ComCharactersClientVo.class);
|
|
|
comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
|
|
|
- //Integer[] _modelIdArray = Convert.toIntArray(e.getModelId().split("\\|"));
|
|
|
- ////查询position
|
|
|
- //List<ExcelCharacterCreate> _genList = excelCharacterCreateService.findByModelIn(_modelIdArray);
|
|
|
- //List<ExcelResourcesClientVo> resourcesList = excelResourcesService.findByArtIdIn(_modelIdArray).stream().map(_res -> {
|
|
|
- // ExcelCharacterCreate excelCharacterCreate = _genList.stream().filter(_gen -> _gen.getModel().equals(_res.getArtId())).findFirst().get();
|
|
|
- // _res.setPosition(excelCharacterCreate.getPosition());
|
|
|
- // return _res;
|
|
|
- //}).collect(Collectors.toList());
|
|
|
- //comCharactersClientVo.setSubResourcesClientList(resourcesList);
|
|
|
return comCharactersClientVo;
|
|
|
}).collect(Collectors.toList());
|
|
|
discoveryClientVo.setSubCharacters(comCharactersClientVos);//当前职业
|
|
|
@@ -266,8 +261,7 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
for (int i = 0; i < roleId.length; i++) {
|
|
|
ComCharactersVo comCharactersVo = comCharactersService.getVo(Integer.parseInt(roleId[i]));
|
|
|
ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(comCharactersVo, ComCharactersClientVo.class);
|
|
|
- //List<ExcelCharacterCreate> subExcelCharacterList = listMap.get(excelCharacterAttr.getRoleType());
|
|
|
- //character.setSubCreateClientList(CopyUtil.copyList(subExcelCharacterList,ExcelCharacterCreateClientVo.class));
|
|
|
+ comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, comCharactersVo.getModelId(), comCharactersVo.getModelColor());
|
|
|
comCharactersClientVos.add(comCharactersClientVo);
|
|
|
}
|
|
|
//开始工作时间 + 工作天数
|
|
|
@@ -328,20 +322,16 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
}
|
|
|
//todo 经验如何设置
|
|
|
List<ExcelParameterVo> parameterVos = excelParameterService.list(new ExcelParameterVo()).getData();
|
|
|
- ExcelParameterVo parameter = parameterVos.get(6); //初始化工作经验
|
|
|
- Integer outExp = parameter.getValue().intValue();
|
|
|
- //当前关卡奖励的经验
|
|
|
- discoveryVo.setRewardExp(outExp);
|
|
|
+
|
|
|
//todo 获取当前人物等级经验表,待优化
|
|
|
List<ExcelCharacterLevelVo> excelCharacterLevelVo = excelCharacterLevelService.list(new ExcelCharacterLevelVo()).getData();
|
|
|
- //已产生的奖励物品
|
|
|
- String[] _hasDropIds = StringUtils.hasText(discoveryVo.getRewardItem()) ? discoveryVo.getRewardItem().split("\\|") : new String[0];
|
|
|
- //奖励物品的计数
|
|
|
+ //奖励物品的时间计数
|
|
|
String[] _hasDropCounts = StringUtils.hasText(discoveryVo.getRewardCount()) ? discoveryVo.getRewardCount().split("\\|") : new String[0];
|
|
|
//总共参数的奖励物品
|
|
|
String[] _allDropIds = StringUtils.hasText(discoveryVo.getRewardCount()) ? discoveryVo.getAllItem().split("\\|") : new String[0];
|
|
|
//记录当前的产出奖励
|
|
|
List<ExcelPropClientVo> outExcelProps = new ArrayList<>();
|
|
|
+ List<ComPlayerBackpackVo> comPlayerBackpackVoList = new ArrayList<>();
|
|
|
|
|
|
//开始工作时间 + 工作天数
|
|
|
Date endDate = DateUtil.offsetMillisecond(discoveryVo.getWorkStart(), discoveryVo.getWorkDay());
|
|
|
@@ -368,15 +358,11 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
//List<ExcelScene> excelSceneList = excelSceneService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_SCENE.getMessage());
|
|
|
//主场景id
|
|
|
ExcelScene excelScene = excelSceneService.findBySceneId(discoveryVo.getSceneId());
|
|
|
- //if (!StringUtils.hasText(excelScene.getSceneEvent())) {
|
|
|
- // throw new RuntimeException("scene event 奖励未配置");
|
|
|
- //}
|
|
|
+ if (excelScene.equals(null)) {
|
|
|
+ throw new RuntimeException("excelScene 未配置!");
|
|
|
+ }
|
|
|
//获取当前的一个基础数量
|
|
|
Integer outTransUpperLimit = excelScene.getAmount();
|
|
|
- //当前场景层级对应的物品
|
|
|
- //String[] _dropIds = excelScene.getSceneEvent().split("\\|");
|
|
|
- //List<ExcelDrop> currentSceneExcelDrops = excelDropService.getListByDropIds(Convert.toIntArray(_dropIds));
|
|
|
-
|
|
|
//获取概率表数据(缓存取)
|
|
|
List<ExcelWorkPro> workProList = excelWorkProService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_WORK_PRO.getMessage());
|
|
|
//获取当前道具表
|
|
|
@@ -385,45 +371,31 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
//已经挖出的全部道具
|
|
|
List<String> _allDropIdList = Arrays.asList(_allDropIds);
|
|
|
List<ExcelProp> allExcelProps = propList.stream().filter(e -> _allDropIdList.contains(e.getPropId().toString())).collect(Collectors.toList());
|
|
|
- // 这里返回的是挖取出来的物品
|
|
|
- List<ExcelPropClientVo> allPropClientVoList = allExcelProps.stream().map(e -> {
|
|
|
- ExcelPropClientVo _vo = CopyUtil.copy(e, ExcelPropClientVo.class);
|
|
|
- _vo.setItemNum(0);
|
|
|
+ List<Integer> allExcelPropsIds = allExcelProps.stream().map(e -> e.getPropId()).collect(Collectors.toList());
|
|
|
+ String[] final_hasDropCounts = _hasDropCounts;
|
|
|
+ AtomicInteger hasDropCountsIndex = new AtomicInteger();
|
|
|
+ List<ExcelPropClientVo> allPropClientVoList = _allDropIdList.stream().map(e -> {
|
|
|
+ ExcelProp excelProp = allExcelProps.get(allExcelPropsIds.indexOf(Integer.parseInt(e)));
|
|
|
+ ExcelPropClientVo _vo = CopyUtil.copy(excelProp, ExcelPropClientVo.class);
|
|
|
+ int _miningInterval = parameterVos.get(3).getValue().intValue();//挖矿时间间隔
|
|
|
+ int _dropCount = Integer.parseInt(ArrayUtil.get(final_hasDropCounts, hasDropCountsIndex.get()));//根据id获取记录的count
|
|
|
+ _vo.setCreateTime(DateUtil.offsetSecond(discoveryVo.getWorkStart(), (_dropCount + 1) * _miningInterval));
|
|
|
+ _vo.setItemNum(1);
|
|
|
+ hasDropCountsIndex.getAndIncrement();
|
|
|
return _vo;
|
|
|
}).collect(Collectors.toList());
|
|
|
- //已经得到的奖励
|
|
|
- for (int i = 0; i < _hasDropIds.length; i++) {
|
|
|
- //if (ArrayUtil.contains(_allDropIds, _hasDropIds[i])) {
|
|
|
- // int _index = ArrayUtil.indexOf(_allDropIds, _hasDropIds[i]);
|
|
|
- // ExcelDropClientVo _dropClientVo = allDropClientVos.get(_index);
|
|
|
- // int _dropCount = Integer.parseInt(ArrayUtil.get(_hasDropCounts, i));//根据id获取记录的count
|
|
|
- // _dropClientVo.setCount(_dropCount);
|
|
|
- // outExcelProps.add(_dropClientVo);
|
|
|
- //}
|
|
|
- if (_allDropIdList.contains(_hasDropIds[i])) {
|
|
|
- int _index = _allDropIdList.indexOf(_hasDropIds[i]);
|
|
|
- ExcelPropClientVo _dropClientVo = allPropClientVoList.get(_index);
|
|
|
- int _dropCount = Integer.parseInt(ArrayUtil.get(_hasDropCounts, i));//根据id获取记录的count
|
|
|
- _dropClientVo.setItemNum(_dropCount);
|
|
|
- outExcelProps.add(_dropClientVo);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
|
|
|
//当前探索队伍
|
|
|
String[] roleId = discoveryVo.getRoleId().split("\\|");
|
|
|
Integer[] _roleIds = Convert.toIntArray(roleId);
|
|
|
-
|
|
|
//角色list
|
|
|
List<ComCharactersClientVo> comCharactersClientVos = new ArrayList<>();
|
|
|
|
|
|
-
|
|
|
//先找出三个职业对象
|
|
|
ComCharactersVo powerChar = null, intelliChar = null, skillChar = null;
|
|
|
ExcelWorkPro _excelWorkPro = null;
|
|
|
- String[] _levelItemList = new String[0];
|
|
|
- List<ExcelProp> currentExcelProps;
|
|
|
- List<String> _levelPropIds;
|
|
|
+ List<ExcelPropAndProVo> currentPropAndPros;//当前的道具和概率
|
|
|
+
|
|
|
List<ComCharacters> characters = comCharactersService.findByRoleIdIn(_roleIds);
|
|
|
//设置一个默认的基础数量
|
|
|
for (int i = 0; i < characters.size(); i++) {
|
|
|
@@ -431,7 +403,6 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
//根据当前角色的职业计算
|
|
|
Integer _professional = comCharactersVo.getProfessional();
|
|
|
if (_professional.equals(GameEnum.PRO_WORK_TRANSPORT.getValue())) {
|
|
|
- //_professional.equals(GameEnum.PRO_SKIlLS.getValue()
|
|
|
//运输工
|
|
|
skillChar = comCharactersVo;
|
|
|
//计算当前运输格数,即获取到物品的上限
|
|
|
@@ -442,198 +413,202 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
}
|
|
|
} else if (_professional.equals(GameEnum.PRO_WORK_MINING.getValue()) ||
|
|
|
_professional.equals(GameEnum.PRO_WORK_LUMBERING.getValue())) {
|
|
|
- //_professional.equals(GameEnum.PRO_POWER.getValue())
|
|
|
//矿工
|
|
|
powerChar = comCharactersVo;
|
|
|
- } else if (_professional.equals(GameEnum.PRO_WORK_PROSPECT.getValue())) {
|
|
|
- //_professional.equals(GameEnum.PRO_INTELLIGENCE.getValue())
|
|
|
- //勘测地形
|
|
|
- intelliChar = comCharactersVo;
|
|
|
- }
|
|
|
+ //获取当前工作的效率表
|
|
|
+ _excelWorkPro = getRatioByPowerAndSceneIdAndList(powerChar.getPower(), discoveryVo.getSceneId(), workProList);
|
|
|
|
|
|
- }
|
|
|
- if (powerChar != null) {
|
|
|
- // 每3秒执行一次挖矿动作。根据属性数值概率,获得收益
|
|
|
- // 矿工有休息动作,休息时间3秒
|
|
|
- // 勘探:
|
|
|
- Integer _power = powerChar.getPower();
|
|
|
- //获取当前工作的效率表
|
|
|
- _excelWorkPro = getRatioByPowerAndSceneIdAndList(_power, discoveryVo.getSceneId(), workProList);
|
|
|
- //道具和道具对应的概率
|
|
|
- _levelItemList = _excelWorkPro.getLevelItem().split(",");
|
|
|
- String _levelProp = ArrayUtil.get(_levelItemList, discoveryVo.getDiscoverLevel() - 1);//获取当前层级的道具
|
|
|
- String[] _mainAndProp = _levelProp.split("\\|");
|
|
|
- _levelPropIds = Arrays.asList(ArrayUtil.remove(_mainAndProp, 0)); //对应的id list
|
|
|
- String _levelSceneId = _mainAndProp[0];//第一个是场景id,移除
|
|
|
- List<String> final_levelPropIds = _levelPropIds;
|
|
|
- currentExcelProps = propList.stream().filter(e -> final_levelPropIds.contains(e.getPropId().toString())).collect(Collectors.toList());//过滤后的当前场景可获得的道具
|
|
|
- String[] _levelProList = _excelWorkPro.getLevelPro().split(",");
|
|
|
- String _levelPropPro = ArrayUtil.get(_levelProList, discoveryVo.getDiscoverLevel() - 1);//获取当前层级的道具对应的概率
|
|
|
- String[] _mainAndPropPro = _levelPropPro.split("\\|");
|
|
|
- List<String> _levelPropProList = Arrays.asList(ArrayUtil.remove(_mainAndPropPro, 0)); //对应的概率id list
|
|
|
- String _level = _mainAndPropPro[0];//第一个是场景level,移除
|
|
|
-
|
|
|
- int _miningInterval = parameterVos.get(3).getValue().intValue();//挖矿时间间隔
|
|
|
- log.info("挖矿间隔时间:" + _miningInterval);
|
|
|
- int _count = (int) Math.floor(difSecond / _miningInterval); // 一共执行的工作次数和休息
|
|
|
- log.info("执行的工作次数:" + _count);
|
|
|
- //按次数执行奖励
|
|
|
- //对应物品数量少于或等于运输数量
|
|
|
- for (int j = 0; j < _count; j++) {
|
|
|
- //采集x4+休息x1
|
|
|
- if (j % 5 != 0) {
|
|
|
- //工作,并且奖励物品
|
|
|
- //1.先判定Probability, 2.再判定Currency是不是挖到货币或道具 3.挖到道具 再计算道具概率掉落
|
|
|
- Double _getProbability = _excelWorkPro.getProbability() / 100;
|
|
|
- log.info("_getProbability:" + _getProbability);
|
|
|
- if (NumberUtil.compare(new Random().nextDouble(), _getProbability) <= 0) {
|
|
|
- Double _currencyPro = Double.parseDouble(_excelWorkPro.getCurrency() + "") / 100;
|
|
|
- log.info("当前计算货币概率: " + _currencyPro);
|
|
|
- if (NumberUtil.compare(new Random().nextDouble(), _currencyPro) > 0) {//物品概率
|
|
|
- //随机获取一个物品,再判断物品概率是否掉落
|
|
|
- int index = (int) (Math.random() * currentExcelProps.size());
|
|
|
- ExcelProp _clientVo = currentExcelProps.get(index); //随机获得道具
|
|
|
- Double _clientPro = Double.parseDouble(_levelPropProList.get(index)) / 100;//随机获得道具对应的概率
|
|
|
- if (NumberUtil.compare(new Random().nextDouble(), _clientPro) <= 0) {
|
|
|
- //todo 如果挖了多少个,添加上去
|
|
|
- if (ArrayUtil.contains(_hasDropIds, _clientVo.getPropId().toString())) {
|
|
|
- //已经存在的下标
|
|
|
- int _index = ArrayUtil.indexOf(_hasDropIds, _clientVo.getPropId().toString());
|
|
|
- int _dropCount = Integer.parseInt(ArrayUtil.get(_hasDropCounts, _index));//根据id获取记录的count
|
|
|
- _dropCount = _dropCount + 1;
|
|
|
- _hasDropCounts = ArrayUtil.setOrAppend(_hasDropCounts, _index, _dropCount + "");//添加1个数量
|
|
|
- //重新设置count+1
|
|
|
- ExcelPropClientVo _propClientVo = outExcelProps.get(_index);
|
|
|
- _propClientVo.setItemNum(_dropCount);
|
|
|
-
|
|
|
- } else if (outExcelProps.size() < outTransUpperLimit) {
|
|
|
- _hasDropIds = ArrayUtil.append(_hasDropIds, _clientVo.getPropId().toString());
|
|
|
- _hasDropCounts = ArrayUtil.append(_hasDropCounts, "1");//新添加
|
|
|
- outExcelProps.add(CopyUtil.copy(_clientVo, ExcelPropClientVo.class));
|
|
|
- }
|
|
|
- }
|
|
|
+ // 每3秒执行一次挖矿动作。根据属性数值概率,获得收益
|
|
|
+ // 矿工有休息动作,休息时间3秒
|
|
|
+ currentPropAndPros = getPropAndPros(_excelWorkPro, discoveryVo.getDiscoverLevel(), propList);
|
|
|
|
|
|
- if (!ArrayUtil.contains(_allDropIds, _clientVo.getPropId().toString())) {
|
|
|
- //如果没添加过,添加一次物品
|
|
|
- _allDropIds = ArrayUtil.append(_allDropIds, _clientVo.getPropId().toString());
|
|
|
- ExcelPropClientVo _propClientVo = CopyUtil.copy(_clientVo, ExcelPropClientVo.class);
|
|
|
- _propClientVo.setItemNum(0);
|
|
|
- allPropClientVoList.add(_propClientVo);
|
|
|
+ int _miningInterval = parameterVos.get(3).getValue().intValue();//挖矿时间间隔
|
|
|
+ log.info("挖矿间隔时间:" + _miningInterval);
|
|
|
+ int _count = (int) Math.floor(difSecond / _miningInterval); // 一共执行的工作次数和休息
|
|
|
+ log.info("执行的工作次数:" + _count);
|
|
|
+ //按次数执行奖励
|
|
|
+ //对应物品数量少于或等于运输数量
|
|
|
+ for (int j = 0; j < _count; j++) {
|
|
|
+ //采集x4+休息x1
|
|
|
+ if (j % 5 != 0) {
|
|
|
+ //工作,并且奖励物品
|
|
|
+ //1.先判定Probability, 2.再判定Currency是不是挖到货币或道具 3.挖到道具 再计算道具概率掉落
|
|
|
+ Double _getProbability = _excelWorkPro.getProbability() / 100;
|
|
|
+ double curRandom = new Random().nextDouble();
|
|
|
+ log.info("curRandom:" + curRandom + ",Probability:" + _getProbability);
|
|
|
+ if (NumberUtil.compare(curRandom, _getProbability) <= 0) {
|
|
|
+ Double _currencyPro = Double.parseDouble(_excelWorkPro.getCurrency() + "") / 100;
|
|
|
+ log.info("掉落货币概率: " + _currencyPro);
|
|
|
+ ExcelPropClientVo _propClientVo;
|
|
|
+ log.info("是否掉落物品:" + NumberUtil.compare(curRandom, _currencyPro));
|
|
|
+ if (NumberUtil.compare(curRandom, _currencyPro) > 0) {//物品概率
|
|
|
+ //获取当前抽中的物品
|
|
|
+ ExcelPropAndProVo excelPropAndProVo = ProbabilityIntervalUtil.getProp(currentPropAndPros, 100);
|
|
|
+ _propClientVo = CopyUtil.copy(excelPropAndProVo, ExcelPropClientVo.class);
|
|
|
+ log.info("随机道具" + _propClientVo.getPropId());
|
|
|
+ } else {
|
|
|
+ //剩余获得货币
|
|
|
+ List<ExcelProp> currencyProp = propList.stream().filter(e -> e.getItemType().equals(1)).collect(Collectors.toList());
|
|
|
+ //todo 暂时随机两种货币添加
|
|
|
+ int index = (int) Math.floor(Math.random() * currencyProp.size());
|
|
|
+ _propClientVo = CopyUtil.copy(currencyProp.get(index), ExcelPropClientVo.class);
|
|
|
+ log.info("随机道具货币" + _propClientVo.getPropId());
|
|
|
+ //todo 货币数据未给出,暂定100
|
|
|
+ //ExcelParameterVo _currency = excelParameterService.getVo(8);
|
|
|
+ //int _num = (int) Math.round(_currency.getValue());
|
|
|
+ //discoveryVo.setRewardCurrency(discoveryVo.getRewardCurrency() == null ? _num : discoveryVo.getRewardCurrency() + _num);
|
|
|
}
|
|
|
- } else {
|
|
|
- //剩余获得货币
|
|
|
- log.info("增加货币");
|
|
|
- //todo 货币数据未给出,暂定100
|
|
|
- ExcelParameterVo _currency = excelParameterService.getVo(8);
|
|
|
- int _num = (int) Math.round(_currency.getValue());
|
|
|
- discoveryVo.setRewardCurrency(discoveryVo.getRewardCurrency() == null ? _num : discoveryVo.getRewardCurrency() + _num);
|
|
|
+ //产生物品,直接添加
|
|
|
+ _allDropIds = ArrayUtil.append(_allDropIds, _propClientVo.getPropId().toString());
|
|
|
+ _propClientVo.setItemNum(1);
|
|
|
+ //这里的时间返回一个开始工作时候和偏移的值
|
|
|
+ _propClientVo.setCreateTime(DateUtil.offsetSecond(discoveryVo.getWorkStart(), (j + 1) * _miningInterval));
|
|
|
+ _hasDropCounts = ArrayUtil.append(_hasDropCounts, j + "");//新添加一个挖出的时间
|
|
|
+ allPropClientVoList.add(_propClientVo);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ } else if (_professional.equals(GameEnum.PRO_WORK_PROSPECT.getValue())) {
|
|
|
+ //勘测地形
|
|
|
+ intelliChar = comCharactersVo;
|
|
|
|
|
|
- //完结后三个分别增加经验
|
|
|
- //收获经验 todo 处理人物升级等
|
|
|
- ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(powerChar, excelCharacterLevelVo, outExp);
|
|
|
- comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, powerChar.getModelId(), powerChar.getModelColor());
|
|
|
- comCharactersClientVos.add(comCharactersClientVo);
|
|
|
- }
|
|
|
- if (intelliChar != null) {
|
|
|
- //勘测地形,用于进入下层场景的职业
|
|
|
- //每15秒执行一次勘探。根据属性数值概率,前往下层洞穴
|
|
|
- //洞穴影响矿石类型产出,最后一层不用再计算概率
|
|
|
- if (!discoveryVo.getDiscoverLevel().equals(GameEnum.LIMIT_LEVEL.getValue())) {
|
|
|
- Integer _intelligence = intelliChar.getIntelligence();
|
|
|
- int _explorationInterval = parameterVos.get(4).getValue().intValue();//挖矿时间间隔
|
|
|
- log.info("勘探间隔时间:" + _explorationInterval);
|
|
|
- int _count = (int) Math.floor(difSecond / _explorationInterval); // 一共执行勘探的次数
|
|
|
- //按次数执行奖励
|
|
|
- for (int j = 0; j < _count; j++) {
|
|
|
- //计算是否进入下一层的概率
|
|
|
- double _nextRatio = gotoNextSceneRatioAndList(discoveryVo.getDiscoverLevel(), _intelligence, workProList);
|
|
|
- if (NumberUtil.compare(new Random().nextDouble(), _nextRatio) <= 0) {
|
|
|
- //todo 切换关卡的奖励物品
|
|
|
- Integer _currentLevel = discoveryVo.getDiscoverLevel() + 1;
|
|
|
- discoveryVo.setDiscoverLevel(_currentLevel);
|
|
|
- super.save(discoveryVo); // 更新数据
|
|
|
- //切换场景id
|
|
|
- if (_excelWorkPro != null) { //道具和道具对应的概率
|
|
|
- String _levelProp = ArrayUtil.get(_levelItemList, _currentLevel - 1);//获取当前层级的道具
|
|
|
- String[] _mainAndProp = _levelProp.split("\\|");
|
|
|
- _levelPropIds = Arrays.asList(ArrayUtil.remove(_mainAndProp, 0)); //对应的id list
|
|
|
- String _levelSceneId = _mainAndProp[0];//第一个是场景id,移除
|
|
|
- List<String> final_levelPropIds = _levelPropIds;
|
|
|
- currentExcelProps = propList.stream().filter(e -> final_levelPropIds.contains(e.getPropId().toString())).collect(Collectors.toList());//过滤后的当前场景可获得的道具
|
|
|
- }
|
|
|
+ //勘测地形,用于进入下层场景的职业
|
|
|
+ //每15秒执行一次勘探。根据属性数值概率,前往下层洞穴
|
|
|
+ if (!discoveryVo.getDiscoverLevel().equals(GameEnum.LIMIT_LEVEL.getValue())) {
|
|
|
+ Integer _intelligence = intelliChar.getIntelligence();
|
|
|
+ int _explorationInterval = parameterVos.get(4).getValue().intValue();//挖矿时间间隔
|
|
|
+ log.info("勘探间隔时间:" + _explorationInterval);
|
|
|
+ int _count = (int) Math.floor(difSecond / _explorationInterval); // 一共执行勘探的次数
|
|
|
+ //按次数执行奖励
|
|
|
+ for (int j = 0; j < _count; j++) {
|
|
|
+ //计算是否进入下一层的概率
|
|
|
+ double _nextRatio = gotoNextSceneRatioAndList(discoveryVo.getDiscoverLevel(), _intelligence, workProList);
|
|
|
+ if (NumberUtil.compare(new Random().nextDouble(), _nextRatio) <= 0) {
|
|
|
+ //todo 切换关卡的奖励物品
|
|
|
+ Integer _currentLevel = discoveryVo.getDiscoverLevel() + 1;
|
|
|
+ discoveryVo.setDiscoverLevel(_currentLevel);
|
|
|
+ super.save(discoveryVo); // 更新数据
|
|
|
+ //切换场景id
|
|
|
+ if (_excelWorkPro != null) {
|
|
|
+ //道具和道具对应的概率
|
|
|
+ currentPropAndPros = getPropAndPros(_excelWorkPro, _currentLevel, propList);
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //完结后三个分别增加经验
|
|
|
- //收获经验 todo 处理人物升级等
|
|
|
- ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(intelliChar, excelCharacterLevelVo, outExp);
|
|
|
- comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, intelliChar.getModelId(), intelliChar.getModelColor());
|
|
|
- comCharactersClientVos.add(comCharactersClientVo);
|
|
|
- }
|
|
|
- if (skillChar != null) {
|
|
|
- //完结后三个分别增加经验
|
|
|
- //收获经验 todo 处理人物升级等
|
|
|
- ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(skillChar, excelCharacterLevelVo, outExp);
|
|
|
- comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, skillChar.getModelId(), skillChar.getModelColor());
|
|
|
- comCharactersClientVos.add(comCharactersClientVo);
|
|
|
}
|
|
|
- ComCharactersDiscoveryClientVo discoveryClientVo = CopyUtil.copy(discoveryVo, ComCharactersDiscoveryClientVo.class);
|
|
|
+ //if (powerChar != null) {
|
|
|
+ //
|
|
|
+ // ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(powerChar,ComCharactersClientVo.class);
|
|
|
+ // comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, powerChar.getModelId(), powerChar.getModelColor());
|
|
|
+ // comCharactersClientVos.add(comCharactersClientVo);
|
|
|
+ //}
|
|
|
+ //if (intelliChar != null) {
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(intelliChar,ComCharactersClientVo.class);
|
|
|
+ // comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, intelliChar.getModelId(), intelliChar.getModelColor());
|
|
|
+ // comCharactersClientVos.add(comCharactersClientVo);
|
|
|
+ //
|
|
|
+ //}
|
|
|
+ //if (skillChar != null) {
|
|
|
+ // //收获经验 todo 处理人物升级等
|
|
|
+ // ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(skillChar,ComCharactersClientVo.class);
|
|
|
+ // comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, skillChar.getModelId(), skillChar.getModelColor());
|
|
|
+ // comCharactersClientVos.add(comCharactersClientVo);
|
|
|
+ //}
|
|
|
+
|
|
|
|
|
|
- discoveryClientVo.setSubCharacters(comCharactersClientVos);//当前职业
|
|
|
- discoveryClientVo.setWorkMill(dif);//倒计时
|
|
|
- //List<ExcelDropClientVo> _getDrops = outExcelDrops.subList(0, outTransUpperLimit);
|
|
|
//记录一个物品获得情况
|
|
|
- //List<String> _getDropIds = _getDrops.stream().map(e -> e.getId().toString()).collect(Collectors.toList());
|
|
|
- String _rewardItem = String.join("|", _hasDropIds);
|
|
|
String _rewardCounts = String.join("|", _hasDropCounts);
|
|
|
String _allItems = String.join("|", _allDropIds);
|
|
|
- discoveryVo.setRewardItem(_rewardItem);
|
|
|
discoveryVo.setRewardCount(_rewardCounts);
|
|
|
discoveryVo.setAllItem(_allItems);
|
|
|
|
|
|
//保存挖矿数据
|
|
|
//设置一次updateTime
|
|
|
discoveryVo.setUpdateTime(DateUtil.date());
|
|
|
+ //取最开始挖的 outTransUpperLimit 数量物品
|
|
|
+ outExcelProps = allPropClientVoList.stream().limit(outTransUpperLimit).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //当前关卡奖励的经验
|
|
|
+ Integer outExp = allPropClientVoList.stream().mapToInt(ExcelPropClientVo::getItemExp).sum();
|
|
|
+ discoveryVo.setRewardExp(outExp);
|
|
|
//todo 工作完成后,isStop
|
|
|
if (discoveryVo.getIsWork().equals(GameEnum.WORK_COMPLETE.getValue()) && isStop) {
|
|
|
- //重置人物角色职业工作状态
|
|
|
- if(powerChar!=null){
|
|
|
- powerChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
|
|
|
- powerChar.setWorkPos(0);
|
|
|
- comCharactersService.save(powerChar);
|
|
|
- }
|
|
|
- if(intelliChar!=null){
|
|
|
- intelliChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
|
|
|
- intelliChar.setWorkPos(0);
|
|
|
- comCharactersService.save(intelliChar);
|
|
|
- }
|
|
|
- if(skillChar!=null){
|
|
|
- skillChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
|
|
|
- skillChar.setWorkPos(0);
|
|
|
- comCharactersService.save(skillChar);
|
|
|
- }
|
|
|
+
|
|
|
+ comCharactersClientVos = characters.stream().map(e -> {
|
|
|
+ ComCharactersVo comCharactersVo = CopyUtil.copy(e, ComCharactersVo.class);
|
|
|
+ ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(comCharactersVo, excelCharacterLevelVo, outExp);
|
|
|
+
|
|
|
+ //设置保存的经验
|
|
|
+ comCharactersVo.setExp(comCharactersClientVo.getExp());
|
|
|
+ comCharactersVo.setLevel(comCharactersClientVo.getLevel());
|
|
|
+ comCharactersVo.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
|
|
|
+ comCharactersVo.setWorkPos(0);
|
|
|
+ comCharactersService.save(comCharactersVo);
|
|
|
+ comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
|
|
|
+ return comCharactersClientVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ ////重置人物角色职业工作状态
|
|
|
+ //if (powerChar != null) {
|
|
|
+ // powerChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
|
|
|
+ // powerChar.setWorkPos(0);
|
|
|
+ // comCharactersService.save(powerChar);
|
|
|
+ //}
|
|
|
+ //if (intelliChar != null) {
|
|
|
+ // intelliChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
|
|
|
+ // intelliChar.setWorkPos(0);
|
|
|
+ // comCharactersService.save(intelliChar);
|
|
|
+ //}
|
|
|
+ //if (skillChar != null) {
|
|
|
+ // skillChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
|
|
|
+ // skillChar.setWorkPos(0);
|
|
|
+ // comCharactersService.save(skillChar);
|
|
|
+ //}
|
|
|
+ //把奖励物品保存到背包
|
|
|
+ comPlayerBackpackService.saveAllByUserIdAndProps(discoveryVo.getUserId(), outExcelProps);
|
|
|
+ //删除对应的队伍
|
|
|
super.delete(discoveryVo.getId());
|
|
|
} else {
|
|
|
+ //只显示已获得的经验和添加对应的部件
|
|
|
+ comCharactersClientVos = characters.stream().map(e -> {
|
|
|
+ ComCharactersVo comCharactersVo = CopyUtil.copy(e, ComCharactersVo.class);
|
|
|
+ ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(comCharactersVo, excelCharacterLevelVo, outExp);
|
|
|
+ comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
|
|
|
+ return comCharactersClientVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
//todo 后续优化,不用每次都存储
|
|
|
super.save(discoveryVo);
|
|
|
}
|
|
|
+ ComCharactersDiscoveryClientVo discoveryClientVo = CopyUtil.copy(discoveryVo, ComCharactersDiscoveryClientVo.class);
|
|
|
+ discoveryClientVo.setSubCharacters(comCharactersClientVos);//当前职业
|
|
|
+ discoveryClientVo.setWorkMill(dif);//倒计时
|
|
|
//输出限制
|
|
|
- discoveryClientVo.setSubGetDrops(outExcelProps);//当前产出物品
|
|
|
+ discoveryClientVo.setSubGetDrops(outExcelProps);//当前收获的物品
|
|
|
//全部的奖励物品
|
|
|
discoveryClientVo.setSubAllDrops(allPropClientVoList);
|
|
|
-
|
|
|
//设置携带属性
|
|
|
discoveryClientVo = setDiscoveryClientVoProAndTransNum(discoveryClientVo);
|
|
|
return discoveryClientVo;
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * 挖矿当前获得的物品
|
|
|
+ *
|
|
|
+ * @param discoveryVo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ComCharactersDiscoveryClientVo explorationPropsState(ComCharactersDiscoveryVo discoveryVo, Boolean isStop) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
//private ComCharactersClientVo addSubResourcesClientList(ComCharactersClientVo comCharactersClientVo ,String _modelIdStr){
|
|
|
// Integer[] _modelIdArray = Convert.toIntArray(_modelIdStr.split("\\|"));
|
|
|
// //查询position
|
|
|
@@ -665,7 +640,6 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
Integer final_level = _level;
|
|
|
ExcelCharacterLevelVo characterLevelVo = excelCharacterLevelVo.stream().filter(e -> e.getId().equals(final_level)).findFirst().get();
|
|
|
|
|
|
-
|
|
|
while (_exp > characterLevelVo.getExp()) {
|
|
|
_exp -= characterLevelVo.getExp();
|
|
|
_level += 1;//提升一级
|
|
|
@@ -675,8 +649,25 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
//最后的等级和经验
|
|
|
comCharactersVo.setLevel(_level);
|
|
|
comCharactersVo.setExp(_exp);
|
|
|
+
|
|
|
+ //增加的属性
|
|
|
+ Integer cPower = characterLevelVo.getPower() + comCharactersVo.getPower();
|
|
|
+ Integer cSkill = characterLevelVo.getSkill() + comCharactersVo.getSkills();
|
|
|
+ Integer cIntelligence = characterLevelVo.getIntelligence() + comCharactersVo.getIntelligence();
|
|
|
+ int randomAttr = (int) Math.ceil(Math.random() * characterLevelVo.getRandomAttr());
|
|
|
+ double addRandom = Math.random();
|
|
|
+ if (addRandom < 0.33) {
|
|
|
+ cPower+=randomAttr;
|
|
|
+ }else if(addRandom>=0.33&&addRandom<0.66){
|
|
|
+ cSkill+=randomAttr;
|
|
|
+ }else{
|
|
|
+ cIntelligence+=randomAttr;
|
|
|
+ }
|
|
|
+ comCharactersVo.setPower(cPower);
|
|
|
+ comCharactersVo.setSkills(cSkill);
|
|
|
+ comCharactersVo.setIntelligence(cIntelligence);
|
|
|
//存储一次
|
|
|
- comCharactersService.save(comCharactersVo);
|
|
|
+ //comCharactersService.save(comCharactersVo);
|
|
|
ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(comCharactersVo, ComCharactersClientVo.class);
|
|
|
//返回当前需要升级的经验
|
|
|
comCharactersClientVo.setLevelUpExp(characterLevelVo.getExp());
|
|
|
@@ -926,4 +917,37 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
|
|
|
|
|
|
return _levelId;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取道具和概率数组
|
|
|
+ *
|
|
|
+ * @param _excelWorkPro
|
|
|
+ * @param _currentLevel
|
|
|
+ * @param propList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<ExcelPropAndProVo> getPropAndPros(ExcelWorkPro _excelWorkPro, Integer _currentLevel, List<ExcelProp> propList) {
|
|
|
+ //道具和道具对应的概率
|
|
|
+ String[] _levelItemList = _excelWorkPro.getLevelItem().split(",");
|
|
|
+ //获取当前层级的道具
|
|
|
+ String _levelProp = ArrayUtil.get(_levelItemList, _currentLevel - 1);
|
|
|
+ List<String> _levelPropIds = Arrays.asList(ArrayUtil.remove(_levelProp.split("\\|"), 0)); //对应的id list
|
|
|
+ //场景对应物品的概率
|
|
|
+ String[] _levelProList = _excelWorkPro.getLevelPro().split(",");
|
|
|
+ String _levelPropPro = ArrayUtil.get(_levelProList, _currentLevel - 1);//获取当前层级的道具对应的概率
|
|
|
+ List<String> _levelPropProList = Arrays.asList(ArrayUtil.remove(_levelPropPro.split("\\|"), 0)); //对应的概率id list 第一个是场景level,移除
|
|
|
+
|
|
|
+ return propList.stream().filter(e ->
|
|
|
+ _levelPropIds.contains(e.getPropId().toString())
|
|
|
+ && !"0".equals(_levelPropProList.get(_levelPropIds.indexOf(e.getPropId().toString()))))
|
|
|
+ .map(e -> {
|
|
|
+ ExcelPropAndProVo excelPropAndProVo = new ExcelPropAndProVo();
|
|
|
+ log.info("场景:" + _currentLevel + "=>" + _levelPropProList.get(_levelPropIds.indexOf(e.getPropId().toString())));
|
|
|
+ int index = _levelPropIds.indexOf(e.getPropId().toString());
|
|
|
+ excelPropAndProVo = CopyUtil.copy(e, ExcelPropAndProVo.class);
|
|
|
+ excelPropAndProVo.setProbability(Double.parseDouble(_levelPropProList.get(index)));
|
|
|
+ return excelPropAndProVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ }
|
|
|
}
|