宝器合成返回道具
parent
3284203069
commit
6a3ef86f79
|
|
@ -2,32 +2,16 @@ package com.ljsd.jieling.handler;
|
|||
|
||||
import com.ljsd.jieling.exception.ErrorCode;
|
||||
import com.ljsd.jieling.exception.ErrorCodeException;
|
||||
import com.ljsd.jieling.globals.BIReason;
|
||||
import com.ljsd.jieling.logic.dao.Item;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.logic.hero.HeroLogic;
|
||||
import com.ljsd.jieling.logic.hero.HongMengFunctionEnum;
|
||||
import com.ljsd.jieling.logic.item.ItemLogic;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.util.ItemMap;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.sun.javafx.collections.MappingChange;
|
||||
import config.SItem;
|
||||
import config.SMainLevelConfig;
|
||||
import config.SRewardGroup;
|
||||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import rpc.protocols.PlayerInfoProto;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import rpc.protocols.PlayerInfoProto;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class UseAndPriceItemHandler extends BaseHandler<PlayerInfoProto.UseAndPriceItemRequest> {
|
||||
|
|
@ -39,93 +23,37 @@ public class UseAndPriceItemHandler extends BaseHandler<PlayerInfoProto.UseAndPr
|
|||
return MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_REQUEST;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void processWithProto(ISession iSession, PlayerInfoProto.UseAndPriceItemRequest useAndPriceItemRequest) throws Exception {
|
||||
int type = useAndPriceItemRequest.getType();
|
||||
List<CommonProto.Item> itemList = useAndPriceItemRequest.getItemsList();
|
||||
List<String> equipIdsList = useAndPriceItemRequest.getEquipIdsList();
|
||||
List<String> heroIdsList = useAndPriceItemRequest.getHeroIdsList();
|
||||
if (type == 0){ //使用
|
||||
ItemLogic.getInstance().useItem(iSession,itemList);
|
||||
}else if (type ==1){// 分解道具
|
||||
ItemLogic.getInstance().priceItem(iSession,itemList);
|
||||
} else if (type == 2){ //分解装备
|
||||
ItemLogic.getInstance().decomposeEquip(iSession,equipIdsList);
|
||||
} else if(type==3){
|
||||
// 验证是否可以使用功能,恭送神将
|
||||
String[] heroIds = new String[heroIdsList.size()];
|
||||
heroIdsList.toArray(heroIds);
|
||||
boolean useFunction = HeroLogic.getInstance().isUseFunction(iSession.getUid(), HongMengFunctionEnum.FAREWELL_HERO.getPropertyId(), heroIds);
|
||||
if (!useFunction){
|
||||
throw new ErrorCodeException(ErrorCode.HONGMENG_ING);
|
||||
}
|
||||
CommonProto.Drop.Builder baseBuilder =ItemLogic.getInstance().decomposeHero(iSession,heroIdsList,null, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE);
|
||||
ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, baseBuilder);
|
||||
//鸿蒙阵
|
||||
HeroLogic.getInstance().addOrUpdateHongmeng(iSession);
|
||||
}else if(type==4){//分解宝器
|
||||
ItemLogic.getInstance().decomposeJewel(iSession,equipIdsList);
|
||||
}else if(type==6){
|
||||
ItemLogic.getInstance().useItem(iSession,itemList,useAndPriceItemRequest.getItemId());
|
||||
}else if (type==7){//资源包 可以获取指定挂机奖励
|
||||
int uid = iSession.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
int itemId=useAndPriceItemRequest.getItemsList().get(0).getItemId();
|
||||
SItem sItem=SItem.getsItemMap().get(itemId);
|
||||
if (user.getPlayerInfoManager().getLevel()<sItem.getUseLevel()){
|
||||
LOGGER.error("等级不足");
|
||||
throw new ErrorCodeException(ErrorCode.HANDLE_FAILED);
|
||||
}
|
||||
int useNum=(int)useAndPriceItemRequest.getItemsList().get(0).getItemNum();
|
||||
Map<Integer,Integer>costMap=new HashMap<>();
|
||||
costMap.put(itemId,useNum);
|
||||
int[][]rewardArr=sItem.getUseGain();
|
||||
|
||||
boolean isCost= ItemUtil.itemCost(user, costMap, BIReason.USER_ITEM, 0);
|
||||
if (!isCost){
|
||||
LOGGER.error("资源包道具消耗失败");
|
||||
throw new ErrorCodeException(ErrorCode.HANDLE_FAILED);
|
||||
}
|
||||
long[][]dropArr=useItemGetHookReward(user,rewardArr,useNum);
|
||||
ItemUtil.drop(user,dropArr,BIReason.USER_ITEM);
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropArr, BIReason.USER_ITEM);
|
||||
ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, drop);
|
||||
switch (type){
|
||||
case 0://使用道具
|
||||
ItemLogic.getInstance().useItem(iSession,itemList);
|
||||
break;
|
||||
case 1://分解道具
|
||||
ItemLogic.getInstance().priceItem(iSession,itemList);
|
||||
break;
|
||||
case 2://分解装备
|
||||
ItemLogic.getInstance().decomposeEquip(iSession,equipIdsList);
|
||||
break;
|
||||
case 3://恭送(分解)神将
|
||||
ItemLogic.getInstance().decomposeHero(iSession,heroIdsList,null);
|
||||
break;
|
||||
case 4://分解宝器
|
||||
ItemLogic.getInstance().decomposeJewel(iSession,equipIdsList);
|
||||
break;
|
||||
case 6:
|
||||
ItemLogic.getInstance().useItem(iSession,itemList,useAndPriceItemRequest.getItemId());
|
||||
break;
|
||||
case 7://资源包 可以获取指定挂机奖励
|
||||
ItemLogic.getInstance().getAssignInIdleReward(iSession,useAndPriceItemRequest);
|
||||
break;
|
||||
default:
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
else{
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用道具获取挂机奖励里面的指定时长奖励
|
||||
* @param user
|
||||
* @param itemDropTime
|
||||
* @return
|
||||
* @throws ErrorCodeException
|
||||
*/
|
||||
public long[][] useItemGetHookReward(User user, int[][] itemDropTime,long useNum)throws ErrorCodeException{
|
||||
long[][]dropArr=new long[itemDropTime.length][2];
|
||||
int index=0;
|
||||
for (int i = 0; i < itemDropTime.length; i++) {
|
||||
int itemId=itemDropTime[i][0];
|
||||
int dropRatio=itemDropTime[i][1];
|
||||
ItemMap itemObj=new ItemMap();
|
||||
int fightId = user.getMainLevelManager().getFightId();
|
||||
SMainLevelConfig targetMainLevelConfig = SMainLevelConfig.config.get(fightId);
|
||||
|
||||
int[] randomRewardMin = targetMainLevelConfig.getRandomRewardMin();
|
||||
int[] randomReward = targetMainLevelConfig.getRandomReward();
|
||||
|
||||
ItemUtil.combineRewardByMainLine(user,false, true, randomRewardMin, dropRatio,itemObj,BIReason.ADVENTURE_BASE_REWARD);
|
||||
ItemUtil.combineRewardByMainLine(user,true, false,randomReward, dropRatio,itemObj,BIReason.ADVENTURE_RANDOM_REWARDD);
|
||||
if (itemObj.getItemMap().containsKey(itemId)){
|
||||
dropArr[index][0]=itemId;
|
||||
dropArr[index][1]=itemObj.getItemMap().get(itemId)*useNum;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
return dropArr;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -236,6 +236,68 @@ public class ItemLogic {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* 资源包 可以获取指定挂机奖励
|
||||
* @param iSession
|
||||
* @param proto
|
||||
* @throws Exception
|
||||
*/
|
||||
public void getAssignInIdleReward(ISession iSession, PlayerInfoProto.UseAndPriceItemRequest proto) throws Exception {
|
||||
User user = UserManager.getUser(iSession.getUid());
|
||||
int itemId=proto.getItemsList().get(0).getItemId();
|
||||
SItem sItem=SItem.getsItemMap().get(itemId);
|
||||
if (user.getPlayerInfoManager().getLevel()<sItem.getUseLevel()){
|
||||
LOGGER.error("等级不足");
|
||||
throw new ErrorCodeException(ErrorCode.HANDLE_FAILED);
|
||||
}
|
||||
int useNum=(int)proto.getItemsList().get(0).getItemNum();
|
||||
Map<Integer,Integer>costMap=new HashMap<>();
|
||||
costMap.put(itemId,useNum);
|
||||
int[][]rewardArr=sItem.getUseGain();
|
||||
|
||||
boolean isCost= ItemUtil.itemCost(user, costMap, BIReason.USER_ITEM, 0);
|
||||
if (!isCost){
|
||||
LOGGER.error("资源包道具消耗失败");
|
||||
throw new ErrorCodeException(ErrorCode.HANDLE_FAILED);
|
||||
}
|
||||
long[][]dropArr=useItemGetHookReward(user,rewardArr,useNum);
|
||||
ItemUtil.drop(user,dropArr,BIReason.USER_ITEM);
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropArr, BIReason.USER_ITEM);
|
||||
ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, drop);
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用道具获取挂机奖励里面的指定时长奖励
|
||||
* @param user
|
||||
* @param itemDropTime
|
||||
* @return
|
||||
* @throws ErrorCodeException
|
||||
*/
|
||||
public long[][] useItemGetHookReward(User user, int[][] itemDropTime,long useNum)throws ErrorCodeException{
|
||||
long[][]dropArr=new long[itemDropTime.length][2];
|
||||
int index=0;
|
||||
for (int i = 0; i < itemDropTime.length; i++) {
|
||||
int itemId=itemDropTime[i][0];
|
||||
int dropRatio=itemDropTime[i][1];
|
||||
ItemMap itemObj=new ItemMap();
|
||||
int fightId = user.getMainLevelManager().getFightId();
|
||||
SMainLevelConfig targetMainLevelConfig = SMainLevelConfig.config.get(fightId);
|
||||
|
||||
int[] randomRewardMin = targetMainLevelConfig.getRandomRewardMin();
|
||||
int[] randomReward = targetMainLevelConfig.getRandomReward();
|
||||
|
||||
ItemUtil.combineRewardByMainLine(user,false, true, randomRewardMin, dropRatio,itemObj,BIReason.ADVENTURE_BASE_REWARD);
|
||||
ItemUtil.combineRewardByMainLine(user,true, false,randomReward, dropRatio,itemObj,BIReason.ADVENTURE_RANDOM_REWARDD);
|
||||
if (itemObj.getItemMap().containsKey(itemId)){
|
||||
dropArr[index][0]=itemId;
|
||||
dropArr[index][1]=itemObj.getItemMap().get(itemId)*useNum;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
return dropArr;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用选择宝箱道具
|
||||
*/
|
||||
|
|
@ -354,66 +416,36 @@ public class ItemLogic {
|
|||
reportIdLevelQuality.append("|");
|
||||
}
|
||||
reportIdLevelQuality.append(jewel.getEquipId()).append("-").append(jewel.getLevel()).append("-").append(jewel.getBuildLevel());
|
||||
if (jewel.getLevel() != 0) {
|
||||
// 强化
|
||||
if (jewel.getLevel() > 0) {
|
||||
Map<Integer, SJewelRankupConfig> rankupConfigMap = SJewelRankupConfig.rankupMap.get(config.getLevelupPool()).get(1);
|
||||
for (SJewelRankupConfig value : rankupConfigMap.values()) {
|
||||
if (value.getLevel() < propertyItem.getLevel()) {
|
||||
items.addAll(Arrays.asList(value.getUpExpend()));
|
||||
if (value.getJewelExpend().length < 1) {
|
||||
continue;
|
||||
}
|
||||
for (int[] count : value.getJewelExpend()) {
|
||||
if (count[0] == 1) {
|
||||
items.add(new int[]{jewel.getEquipId(), count[1]});
|
||||
} else {
|
||||
items.add(count);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
jewelCostBack(rankupConfigMap,jewel,items,jewel.getLevel());
|
||||
}
|
||||
if (jewel.getBuildLevel() != 0) {
|
||||
// 精炼
|
||||
if (jewel.getBuildLevel() > 0) {
|
||||
Map<Integer, SJewelRankupConfig> buildUpConfigMap = SJewelRankupConfig.rankupMap.get(config.getRankupPool()).get(2);
|
||||
for (SJewelRankupConfig value : buildUpConfigMap.values()) {
|
||||
if (value.getLevel() < jewel.getBuildLevel()) {
|
||||
items.addAll(Arrays.asList(value.getUpExpend()));
|
||||
if (value.getJewelExpend().length < 1) {
|
||||
continue;
|
||||
}
|
||||
for (int[] count : value.getJewelExpend()) {
|
||||
if (count[0] == 1) {
|
||||
items.add(new int[]{jewel.getEquipId(), count[1]});
|
||||
} else {
|
||||
items.add(count);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
jewelCostBack(buildUpConfigMap,jewel,items,jewel.getBuildLevel());
|
||||
}
|
||||
// 神应
|
||||
if (jewel.getGodTreeLv() > 0){
|
||||
TreeMap<Integer, SGodHoodTreeLevel> treeMap = new TreeMap<>(STableManager.getConfig(SGodHoodTreeLevel.class));
|
||||
SortedMap<Integer, SGodHoodTreeLevel> subMap = treeMap.subMap(0, jewel.getGodTreeLv());
|
||||
List<int[]> collect = subMap.values().stream().map(SGodHoodTreeLevel::getLvupCost).collect(Collectors.toList());
|
||||
items.addAll(collect);
|
||||
}
|
||||
|
||||
items.add(new int[]{propertyItem.getEquipId(), 1});
|
||||
}
|
||||
for (String jewelId : jewelList) {
|
||||
user.getEquipManager().remove(jewelId);
|
||||
}
|
||||
|
||||
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, StringUtil.parseFiledInt(reward.toString()), 1, 0, BIReason.JEWEL_DECOMPOSE);
|
||||
|
||||
|
||||
// ItemMap itemObj = new ItemMap();
|
||||
// for (int[] ints : items) {
|
||||
// long mapNum= ItemUtil.getMapById(ints[0], itemObj);
|
||||
// if(mapNum>0){
|
||||
//
|
||||
// }
|
||||
// if (mapRe.containsKey(ints[0])) {
|
||||
// mapRe.put(ints[0], mapRe.get(ints[0]) + ints[1]);
|
||||
// } else {
|
||||
// mapRe.put(ints[0], (long) ints[1]);
|
||||
// }
|
||||
// }
|
||||
items.add(StringUtil.parseFiledInt(reward.toString()));
|
||||
int[][] itemArray = items.toArray(new int[items.size()][]);
|
||||
ItemUtil.drop(user,itemArray, drop, BIReason.JEWEL_DECOMPOSE);
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, itemArray, BIReason.JEWEL_DECOMPOSE);
|
||||
// 协议返回
|
||||
sendUseAndPriceItemMessage(session, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, drop);
|
||||
// 日志上报
|
||||
List<CommonProto.Item> reportMap = drop.getItemlistList();
|
||||
List<Integer> itemId = new ArrayList<>(reportMap.size());
|
||||
List<Integer> itemNum = new ArrayList<>(reportMap.size());
|
||||
|
|
@ -422,7 +454,25 @@ public class ItemLogic {
|
|||
itemNum.add((int)item.getItemNum());
|
||||
});
|
||||
ReportUtil.onReportEvent(user, ReportEventEnum.TREASURE_DECOMPOSITION.getType(), reportIdLevelQuality.toString(), itemId, itemNum);
|
||||
sendUseAndPriceItemMessage(session, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, drop);
|
||||
}
|
||||
|
||||
private void jewelCostBack(Map<Integer, SJewelRankupConfig> map, Jewel jewel, List<int[]> items, int level){
|
||||
for (SJewelRankupConfig value : map.values()) {
|
||||
if (value.getLevel() >= level) {
|
||||
continue;
|
||||
}
|
||||
items.addAll(Arrays.asList(value.getUpExpend()));
|
||||
if (value.getJewelExpend().length < 1) {
|
||||
continue;
|
||||
}
|
||||
for (int[] count : value.getJewelExpend()) {
|
||||
if (count[0] == 1) {
|
||||
items.add(new int[]{jewel.getEquipId(), count[1]});
|
||||
} else {
|
||||
items.add(count);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ErrorCode checkEquipResolve(List<String> equipIdsList, EquipManager equipManager) {
|
||||
|
|
@ -460,9 +510,16 @@ public class ItemLogic {
|
|||
* @param iSession
|
||||
* @param heroIdsList
|
||||
*/
|
||||
public CommonProto.Drop.Builder decomposeHero(ISession iSession, List<String> heroIdsList, Set<Integer> filterItem, int msgId) throws Exception {
|
||||
int uid = iSession.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
public void decomposeHero(ISession iSession, List<String> heroIdsList, Set<Integer> filterItem) throws Exception {
|
||||
// 验证是否可以使用功能,恭送神将
|
||||
String[] heroIds = new String[heroIdsList.size()];
|
||||
heroIdsList.toArray(heroIds);
|
||||
boolean useFunction = HeroLogic.getInstance().isUseFunction(iSession.getUid(), HongMengFunctionEnum.FAREWELL_HERO.getPropertyId(), heroIds);
|
||||
if (!useFunction){
|
||||
throw new ErrorCodeException(ErrorCode.HONGMENG_ING);
|
||||
}
|
||||
// 逻辑
|
||||
User user = UserManager.getUser(iSession.getUid());
|
||||
HeroManager heroManager = user.getHeroManager();
|
||||
ErrorCode erroMags = checkHeroResolve(heroIdsList, user);
|
||||
if (null != erroMags) {
|
||||
|
|
@ -509,7 +566,7 @@ public class ItemLogic {
|
|||
heroLevelReport.add(hero.getOriginalLevel());
|
||||
heroStarReport.add(hero.getStar());
|
||||
|
||||
heroManager.removeHero(uid,heroId);
|
||||
heroManager.removeHero(user.getId(),heroId);
|
||||
int[][] sumConsume = SHeroLevlConfig.getsHeroLevlConfigMap().get(hero.getOriginalLevel()).getSumConsume();
|
||||
|
||||
SHeroSacrifice starSHeroSacrifice = STableManager.getFigureConfig(HeroStaticConfig.class).getsHeroSacrificeMap(1, hero.getStar());
|
||||
|
|
@ -546,9 +603,11 @@ public class ItemLogic {
|
|||
if (reson == BIReason.DECOMPOS_HERO_REWARD) {
|
||||
ReportUtil.onReportEvent(user, ReportEventEnum.SEND_HERO.getType(), heroIdReport, heroLevelReport, heroStarReport, new ArrayList<>(baseItemMap.keySet()), new ArrayList<>(baseItemMap.values()));
|
||||
}
|
||||
|
||||
// 掉落
|
||||
ItemUtil.drop(user,itemReturnPercent(itemArray,rankUpReturnPercent),reson,drop);
|
||||
return drop;
|
||||
// 鸿蒙阵
|
||||
HeroLogic.getInstance().addOrUpdateHongmeng(iSession);
|
||||
ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, drop);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -792,23 +851,24 @@ public class ItemLogic {
|
|||
public static TreeSet<String> getJewelEquipWithLeve(User user, int type, int rance, int leve) {
|
||||
TreeSet<String> strings = new TreeSet<>();
|
||||
for (Map.Entry<String, PropertyItem> stringPropertyItemEntry : user.getEquipManager().getEquipMap().entrySet()) {
|
||||
SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(stringPropertyItemEntry.getValue().getEquipId());
|
||||
Jewel jewel = (Jewel)stringPropertyItemEntry.getValue();
|
||||
SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(jewel.getEquipId());
|
||||
if (config == null) {
|
||||
continue;
|
||||
}
|
||||
if (config.getLocation() != type || config.getRace() != rance || config.getLevel() != leve) {
|
||||
continue;
|
||||
}
|
||||
if (!StringUtil.isEmpty(stringPropertyItemEntry.getValue().getHeroId())) {
|
||||
Hero hero = user.getHeroManager().getHero(stringPropertyItemEntry.getValue().getHeroId());
|
||||
if (!StringUtil.isEmpty(jewel.getHeroId())) {
|
||||
Hero hero = user.getHeroManager().getHero(jewel.getHeroId());
|
||||
if (hero != null && hero.getJewelInfo().contains(stringPropertyItemEntry.getKey())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (((Jewel) stringPropertyItemEntry.getValue()).getBuildLevel() != 0 || stringPropertyItemEntry.getValue().getLevel() != 0) {
|
||||
if (jewel.getBuildLevel() != 0 || jewel.getLevel() != 0 || jewel.getGodTreeLv() != 0) {
|
||||
continue;
|
||||
}
|
||||
strings.add(stringPropertyItemEntry.getValue().getId());
|
||||
strings.add(jewel.getId());
|
||||
}
|
||||
return strings;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue