lvxinran 2020-05-01 16:15:09 +08:00
commit f08d202d70
8 changed files with 291 additions and 4 deletions

View File

@ -1,11 +1,15 @@
package com.ljsd.jieling.config.clazzStaticCfg;
import com.ljsd.jieling.util.ItemUtil;
import config.SEquipConfig;
import config.SRewardGroup;
import config.SRewardItem;
import manager.AbstractClassStaticConfig;
import manager.STableManager;
import manager.Table;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
@ -15,12 +19,13 @@ import java.util.Set;
*/
public class ItemStaticConfig extends AbstractClassStaticConfig {
private Map<Integer,Map<Integer,Integer>> euipTppes;
@Override
public void registConfigs(Set<String> registConfigs) {
registConfigs.add(SRewardItem.class.getAnnotation(Table.class).name());
registConfigs.add(SRewardGroup.class.getAnnotation(Table.class).name());
registConfigs.add(SEquipConfig.class.getAnnotation(Table.class).name());
}
@Override
@ -31,5 +36,30 @@ public class ItemStaticConfig extends AbstractClassStaticConfig {
} catch (Exception e) {
LOGGER.error("SRewardItem|SRewardGroup init fail");
}
try {
euipTppes = new HashMap<>();
Map<Integer, SEquipConfig> config = STableManager.getConfig(SEquipConfig.class);
config.forEach((k,v)->{
int type = v.getPosition();
Map<Integer, Integer> orDefault = euipTppes.getOrDefault(type, new HashMap<>());
orDefault.putIfAbsent(v.getStar(),k);
euipTppes.putIfAbsent(type,orDefault);
});
}catch (Exception e){
LOGGER.error("exception");
}
}
public Map<Integer, Map<Integer, Integer>> getEuipTppes() {
return euipTppes;
}
public int getEquipByStar(int type, int star){
Map<Integer, Integer> integerIntegerMap = euipTppes.get(type);
if(null == integerIntegerMap){
return 0;
}
return integerIntegerMap.getOrDefault(star,0);
}
}

View File

@ -113,7 +113,7 @@ public interface BIReason {
int EXPEDITION_BOX_REWARD = 65;//猎妖之路宝箱奖励
int EXPEDITION_DROP_REWARD = 66;//猎妖之路奖励
int COMPLEX_EQUIP = 67;//合成装备
int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级
int SECRETBOX_CONSUME = 1001;//秘盒抽卡
@ -209,6 +209,8 @@ public interface BIReason {
int CHAMPIONM_EXCHANGE_CONSUME = 1050;//巅峰赛兑换
int COMPLEX_EQUIP_CONSUME = 1051; //合成英雄

View File

@ -0,0 +1,194 @@
package com.ljsd.jieling.handler.equip;
import com.ljsd.jieling.config.clazzStaticCfg.ItemStaticConfig;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.dao.Equip;
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.item.ItemLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.HeroInfoProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.util.CBean2Proto;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SEquipStarsConfig;
import manager.STableManager;
import java.util.*;
/**
* Description:
* Author: zsx
* CreateDate: 2020/4/2 15:48
*/
public class ComplexEquipHandler extends BaseHandler<HeroInfoProto.ComplexEquipRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.EQUIP_COMPLEX_REQUEST;
}
@Override
public void processWithProto(ISession iSession, HeroInfoProto.ComplexEquipRequest proto) throws Exception {
int uid = iSession.getUid();
User user = UserManager.getUser(uid);
if (user == null) {
throw new ErrorCodeException(ErrorCode.UNKNOWN);
}
if (proto.getStar() != 0) {//手动合成
//check param and cnf
if (proto.getNum() <= 0) {
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE);
}
int needStar = proto.getStar() - 1;
if (needStar <= 0) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
int targetEquip = STableManager.getFigureConfig(ItemStaticConfig.class).getEquipByStar(proto.getType(), proto.getStar());
if (targetEquip == 0) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
int equipId = STableManager.getFigureConfig(ItemStaticConfig.class).getEquipByStar(proto.getType(), needStar);
if (equipId == 0) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
Set<String> equipByIDs = ItemLogic.getEquipByID(user, equipId);
SEquipStarsConfig sEquipStarsConfig = STableManager.getConfig(SEquipStarsConfig.class).get(needStar);
if (null == sEquipStarsConfig) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
SEquipStarsConfig sTargetEquipStarsConfig = STableManager.getConfig(SEquipStarsConfig.class).get(proto.getStar());
if (null == sTargetEquipStarsConfig) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
int needcount = sEquipStarsConfig.getRankupCount();
if (equipByIDs.size() / needcount < proto.getNum()) {
//数据不够
throw new ErrorCodeException(ErrorCode.UNKNOWN);
}
//check cost
Map<Integer, Integer> consumeMap = new HashMap<>();
for (int i = 0; i < proto.getNum(); i++) {
int[][] sumConsume = sTargetEquipStarsConfig.getRankupResources();
HeroLogic.getInstance().combinedAttribute(sumConsume, consumeMap);
}
boolean enough = ItemUtil.itemCost(user, consumeMap, BIReason.COMPLEX_EQUIP_CONSUME, 0);
if (!enough) {
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
//drop
int[][] dropItems = new int[1][];
dropItems[0] = new int[2];
dropItems[0][0] = targetEquip;
dropItems[0][1] = proto.getNum();
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropItems, BIReason.COMPLEX_EQUIP);
HeroInfoProto.ComplexEquipResponse.Builder response = HeroInfoProto.ComplexEquipResponse.newBuilder();
//remove hero
int i = 1;
for (String id : equipByIDs) {
if (i > proto.getNum() * needcount) {
break;
}
response.addEquipIds(id);
user.getEquipManager().remove(id);
i++;
}
response.setDrop(drop);
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.EQUIP_COMPLEX_RESPONSE_VALUE, response.build(), true);
} else {
Map<Integer, Map<Integer, Integer>> euipTppes = STableManager.getFigureConfig(ItemStaticConfig.class).getEuipTppes();
Map<Integer, Integer> integerIntegerMap = new TreeMap<>(euipTppes.getOrDefault(proto.getType(), new HashMap<>()));
Set<String> equipadds =new HashSet<>();
Map<Integer, Integer> consumeMap = new HashMap<>();
List< CommonProto.Equip> equips = new LinkedList<>();
Set<String> newids = new HashSet<>();
for (Map.Entry<Integer, Integer> entry : integerIntegerMap.entrySet()) {
//star conf
int targetstar = entry.getKey()+1;
SEquipStarsConfig sTargetEquipStarsConfig = STableManager.getConfig(SEquipStarsConfig.class).get(targetstar);
if (null == sTargetEquipStarsConfig) {
break;
}
SEquipStarsConfig sEquipStarsConfig = STableManager.getConfig(SEquipStarsConfig.class).get(entry.getKey());
if (null == sEquipStarsConfig) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
int targetEquipId = STableManager.getFigureConfig(ItemStaticConfig.class).getEquipByStar(proto.getType(), targetstar);
if (targetEquipId == 0) {
break;
}
int equipId = STableManager.getFigureConfig(ItemStaticConfig.class).getEquipByStar(proto.getType(),entry.getKey());
if (equipId == 0) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
TreeSet<String> equipByIDs = ItemLogic.getEquipByID(user, equipId);
int canConNum =equipByIDs.size()/sEquipStarsConfig.getRankupCount();
if(canConNum<=0){
continue;
}
//check cost
boolean enough;
int needcount=0;
for (int i = 0; i < canConNum; i++) {
int[][] sumConsume = sEquipStarsConfig.getRankupResources();
Map<Integer, Integer> consumeMapTem = new HashMap<>();
HeroLogic.getInstance().combinedAttribute(sumConsume, consumeMapTem);
enough = ItemUtil.checkCost(user, consumeMapTem);
if (!enough) {
break;
}
//生成装备 混合消耗
Equip equip = new Equip(user.getId(),targetEquipId);
user.getEquipManager().addEquip(user,equip);
newids.add(equip.getId());//后面合成可能会被删除
needcount += sEquipStarsConfig.getRankupCount();
HeroLogic.getInstance().combinedAttribute(sumConsume, consumeMap);
}
//消耗装备
int i = 1;
for (String id : equipByIDs.descendingSet()) {
if (i > needcount) {
break;
}
if(!newids.contains(id)){
equipadds.add(id);
}else {
newids.remove(id);
}
user.getEquipManager().remove(id);
i++;
}
}
for (String id:newids) {
equips.add(CBean2Proto.getEquipProto( user.getEquipManager().getEquipMap().get(id)));
}
ItemUtil.itemCost(user, consumeMap, BIReason.COMPLEX_EQUIP_CONSUME, 0);
CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder().addAllEquipId(equips);
HeroInfoProto.ComplexEquipResponse.Builder response = HeroInfoProto.ComplexEquipResponse.newBuilder();
response.addAllEquipIds(equipadds);
response.setDrop(drop);
System.out.print(response.build().toString());
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.EQUIP_COMPLEX_RESPONSE_VALUE, response.build(), true);
}
}
}

View File

@ -65,7 +65,9 @@ public class HotfixUtil implements IEventHandler {
}
LOGGER.debug("HotfixUtil->currVerion={},version={}", currVerion, version);
if (SysUtil.isWindows()) {
return;
}
//版本发生了变化,热更新

View File

@ -246,7 +246,7 @@ public class RechargeInfo extends MongoBase{
public void setMonthSaveAmt(int monthSaveAmt) {
this.monthSaveAmt = monthSaveAmt;
updateString("monthSaveAmt",smonthSaveAmt);
updateString("monthSaveAmt",monthSaveAmt);
}
public int getSmonthSaveAmt() {

View File

@ -565,4 +565,17 @@ public class ItemLogic {
ItemLogUtil.addLogQueue(itemLog);
}
/**
* 穿
* @param user
* @param equipid
* @return
*/
public static TreeSet<String> getEquipByID(User user, int equipid) {
TreeSet<String> equiplist = new TreeSet<>();
user.getEquipManager().getEquipMap().entrySet().stream().filter(stringEquipEntry ->
StringUtil.isEmpty(stringEquipEntry.getValue().getHeroId()) && stringEquipEntry.getValue().getEquipId() == equipid
).forEach(stringEquipEntry -> equiplist.add(stringEquipEntry.getKey()));
return equiplist;
}
}

View File

@ -33,6 +33,7 @@ public class SEquipConfig implements BaseConfig {
private int score;
private int star;
@Override
public void init() throws Exception {
@ -92,4 +93,12 @@ public class SEquipConfig implements BaseConfig {
}
public int getIfShow(){return ifShow; }
public int getStar() {
return star;
}
public void setStar(int star) {
this.star = star;
}
}

View File

@ -0,0 +1,37 @@
package config;
import manager.STableManager;
import manager.Table;
import java.util.Map;
@Table(name ="EquipStarsConfig")
public class SEquipStarsConfig implements BaseConfig {
private int id;
private int rankupCount;
private int[][] rankupResources;
@Override
public void init() throws Exception {
}
public int getId() {
return id;
}
public int getRankupCount() {
return rankupCount;
}
public int[][] getRankupResources() {
return rankupResources;
}
}