Merge branch 'master' of 60.1.1.230:backend/jieling_server

# Conflicts:
#	serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java
#	tablemanager/src/main/java/config/SEquipConfig.java
back_recharge
wangyuan 2020-04-13 11:10:52 +08:00
commit 8372da1907
21 changed files with 544 additions and 56 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

@ -114,9 +114,13 @@ public interface BIReason {
int EXPEDITION_BOX_REWARD = 65;//猎妖之路宝箱奖励
int EXPEDITION_DROP_REWARD = 66;//猎妖之路奖励
int UNLOAD_SOUL_REWARD = 67;//猎妖之路奖励
int COMPLEX_EQUIP = 68;//合成装备
int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级
int SECRETBOX_CONSUME = 1001;//秘盒抽卡
int DECOMPOSE_ITEM_CONSUME = 1002;//分解道具消耗
@ -211,6 +215,12 @@ public interface BIReason {
int CHAMPIONM_EXCHANGE_CONSUME = 1050;//巅峰赛兑换
int COMPLEX_EQUIP_CONSUME = 1051; //合成英雄
int SOUL_EQUIP_WEAR_CONSUME = 1052;// 穿魂印消耗
int SOUL_EQUIP_MERGE_CONSUME = 1054;// 合成魂印消耗

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

@ -0,0 +1,21 @@
package com.ljsd.jieling.handler.equip;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.HeroInfoProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
@Component
public class SoulMergeHandler extends BaseHandler<HeroInfoProto.MergeSoulRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.SOUL_MERGE_REQUEST;
}
@Override
public void processWithProto(ISession iSession, HeroInfoProto.MergeSoulRequest proto) throws Exception {
HeroLogic.mergeSoul(iSession,proto.getTargetId(),proto.getSoulIdList());
}
}

View File

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

View File

@ -62,7 +62,7 @@ public class ActivityLogic implements IEventHandler{
public void flushEveryDay(User user, PlayerInfoProto.FivePlayerUpdateIndication.Builder fBuilder) throws Exception {
//跟新签到天数
if (!TimeUtils.isSameMonthFiveWithNow(user.getPlayerInfoManager().getOffLineTime())) {
if (user.getPlayerInfoManager().getOffLineTime()!=0&&!TimeUtils.isSameMonthFiveWithNow(user.getPlayerInfoManager().getOffLineTime())) {
user.getPlayerInfoManager().setSign(0);
user.getPlayerInfoManager().setSignTotay(0);
} else if (user.getPlayerInfoManager().getSignTotay() == 1) {

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.core.VipPrivilegeType;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.Global;
@ -12,6 +13,7 @@ import com.ljsd.jieling.logic.dao.ActivityProgressInfo;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.logic.rank.RankContext;
import com.ljsd.jieling.logic.rank.RankEnum;
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
@ -40,6 +42,11 @@ public class LimitRandomCardActivity extends AbstractActivity {
Poster.getPoster().listenEvent(this,RandomCardEvent.class);
}
@Override
public void initActivity(User user){
user.getPlayerInfoManager().clearVipCount(VipPrivilegeType.TIME_RANDOM_FREE);
}
@Override
public void onEvent(IEvent event) throws Exception {
if(! (event instanceof RandomCardEvent) ){

View File

@ -61,7 +61,7 @@ public class Hero extends MongoBase {
this.star = initStar;
this.equipByPositionMap = new HashMap<>();
this.soulEquipByPositionMap = new HashMap<>();
this.especialEquipLevel = 1;
if(initStar!=scHero.getStar()){
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByType = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.UP_STAR_TYPE,scHero.getStar());
if(scHeroRankUpConfigByType!=null) {

View File

@ -333,6 +333,11 @@ public class PlayerManager extends MongoBase {
updateString("vipInfo", vipInfo);
setHadTakeDailyBoxVip(-1);
}
public void clearVipCount(int priviliageId){
vipInfo.put(priviliageId,new VipInfo());
updateString("vipInfo", vipInfo);
}
public void addVipInfo(int privilageId){
SPrivilegeTypeConfig config = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(privilageId);
@ -340,19 +345,22 @@ public class PlayerManager extends MongoBase {
return;
}
long maxTime;
if(config.getContinueTime()==0){
maxTime = 0;
}else{
VipInfo newVipInfo = new VipInfo();
if(config.getContinueTime()!=null){
if(vipInfo.containsKey(privilageId)){
if(config.getContinueTime()[1]==1&&TimeUtils.now()/1000<vipInfo.get(privilageId).getEffectTime()){
return;
}
maxTime = TimeUtils.now()/1000>vipInfo.get(privilageId).getEffectTime()?(TimeUtils.now()/1000):vipInfo.get(privilageId).getEffectTime();
maxTime = maxTime+config.getContinueTime();
maxTime = maxTime+config.getContinueTime()[0];
}else {
maxTime = TimeUtils.now()/1000+config.getContinueTime();
maxTime = TimeUtils.now()/1000+config.getContinueTime()[0];
}
maxTime = (int)(TimeUtils.getLastOrUnderHour(maxTime*1000,5,true)/1000);
newVipInfo.setEffectTime((int)maxTime);
}
vipInfo.put(privilageId,new VipInfo(0,(int)maxTime));
updateString("vipInfo", vipInfo);
this.vipInfo.put(privilageId,newVipInfo);
updateString("vipInfo", this.vipInfo);
}
public void removeVipPriviliageId(int privilageId){

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

@ -819,23 +819,30 @@ public class HeroLogic{
int templateId = hero.getTemplateId();
SCHero scHero = SCHero.getsCHero().get(templateId);
SHeroLevlConfig sHeroLevlConfig = SHeroLevlConfig.getsCHero().get(hero.getLevel());
float characterLevelPara = sHeroLevlConfig.getCharacterLevelPara();
Map<Integer, Float> paraForHero = getParaForHero(hero);
int[][] characterLevelPara = sHeroLevlConfig.getCharacterLevelPara();
Map<Integer, Object> paraForHero = getParaForHero(hero);
Map<Integer,Float> baseValueMap = new HashMap<>();
baseValueMap.put(GlobalsDef.HP_TYPE,getBaseValueByType(scHero,GlobalsDef.HP_TYPE));
baseValueMap.put(GlobalsDef.ATTACK_TYPE,getBaseValueByType(scHero,GlobalsDef.ATTACK_TYPE));
baseValueMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.PHYSICAL_DEFENCE_TYPE));
baseValueMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.MAGIC_DEFENCE_TYPE));
baseValueMap.put(GlobalsDef.SPEED_TYPE,getBaseValueByType(scHero,GlobalsDef.SPEED_TYPE));
for(Map.Entry<Integer,Float> item : baseValueMap.entrySet()){
Integer attributeType = item.getKey();
Float heroBaseValue = item.getValue();
if(attributeType == GlobalsDef.SPEED_TYPE){
result.put (attributeType,(int)(heroBaseValue * sHeroLevlConfig.getSpeedLevelPara() + STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().calSpeed(heroBaseValue, hero.getBreakId())));
}else{
result.put(attributeType,(int)(heroBaseValue * ( 1 + paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE)/10000.f) * characterLevelPara + heroBaseValue * paraForHero.get(GlobalsDef.BREAK_PARA_TYPE)/10000.f));
int[] levelAttr = Arrays.stream(characterLevelPara).filter(param -> param[0] == attributeType).findFirst().get();
float value = heroBaseValue + levelAttr[1];
int[][] rankUpParam = (int[][]) paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE);
if(rankUpParam!=null){
int[] rankAttr = Arrays.stream(rankUpParam).filter(param -> param[0] == attributeType).findFirst().get();
value = value *(rankAttr[2] == 0 ? 1 : (rankAttr[2] / 10000.f))+rankAttr[1];
}
int[][] breakParam = (int[][]) paraForHero.get(GlobalsDef.BREAK_PARA_TYPE);
if(breakParam!=null){
int[] breakAttr = Arrays.stream(breakParam).filter(param -> param[0] == attributeType).findFirst().get();
value += breakAttr[1];
}
result.put(attributeType,(int)value);
}
if(!isForce){
Map<Integer, Integer> secondaryFactorMap = scHero.getSecondaryFactorMap();
@ -850,22 +857,30 @@ public class HeroLogic{
Map<Integer,Integer> result = new HashMap<>();
SCHero scHero = SCHero.getsCHero().get(templateId);
SHeroLevlConfig sHeroLevlConfig = SHeroLevlConfig.getsCHero().get(heroLevl);
float characterLevelPara = sHeroLevlConfig.getCharacterLevelPara();
Map<Integer, Float> paraForHero = getParaForRobotHero(scHero,heroLevl,templateId);
int[][] characterLevelPara = sHeroLevlConfig.getCharacterLevelPara();
Map<Integer, Object> paraForHero = getParaForRobotHero(scHero,heroLevl,templateId);
Map<Integer,Float> baseValueMap = new HashMap<>();
baseValueMap.put(GlobalsDef.HP_TYPE,getBaseValueByType(scHero,GlobalsDef.HP_TYPE));
baseValueMap.put(GlobalsDef.ATTACK_TYPE,getBaseValueByType(scHero,GlobalsDef.ATTACK_TYPE));
baseValueMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.PHYSICAL_DEFENCE_TYPE));
baseValueMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.MAGIC_DEFENCE_TYPE));
baseValueMap.put(GlobalsDef.SPEED_TYPE,getBaseValueByType(scHero,GlobalsDef.SPEED_TYPE));
for(Map.Entry<Integer,Float> item : baseValueMap.entrySet()){
Integer attributeType = item.getKey();
Float heroBaseValue = item.getValue();
if(attributeType == GlobalsDef.SPEED_TYPE){
result.put (attributeType,(int)(heroBaseValue * sHeroLevlConfig.getSpeedLevelPara() + STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().calSpeed(heroBaseValue, heroBreakId)));
}else{
result.put(attributeType,(int)(heroBaseValue * ( 1 + paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE)/10000.f) * characterLevelPara + heroBaseValue * paraForHero.get(GlobalsDef.BREAK_PARA_TYPE)/10000.f));
int[] levelAttr = Arrays.stream(characterLevelPara).filter(param -> param[0] == attributeType).findFirst().get();
float value = heroBaseValue + levelAttr[1];
int[][] rankUpParam = (int[][]) paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE);
if(rankUpParam!=null){
int[] rankAttr = Arrays.stream(rankUpParam).filter(param -> param[0] == attributeType).findFirst().get();
value *= rankAttr[1] == 0 ? 1 : rankAttr[1] / 10000.f+rankAttr[2];
}
int[][] breakParam = (int[][]) paraForHero.get(GlobalsDef.BREAK_PARA_TYPE);
if(breakParam!=null){
int[] breakAttr = Arrays.stream(breakParam).filter(param -> param[0] == attributeType).findFirst().get();
value += breakAttr[1];
}
result.put(attributeType,(int)value);
}
if(!isForce){
Map<Integer, Integer> secondaryFactorMap = scHero.getSecondaryFactorMap();
@ -894,11 +909,12 @@ public class HeroLogic{
return 0;
}
private Map<Integer,Float> getParaRate(SCHero scHero,int heroStar,int heroLevel,int heroBreakId){
Map<Integer,Float> result = new HashMap<>(2);
float rankupPara =0.0f;
private Map<Integer,Object> getParaRate(SCHero scHero,int heroStar,int heroLevel,int heroBreakId){
// System.out.println(scHero.getId());
Map<Integer,Object> result = new HashMap<>(2);
Object rankupPara=null;
//突破系数
float breakPara = 0.0f;
Object breakPara=null;
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByTypeOfStar = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE,scHero.getStar());
if(scHeroRankUpConfigByTypeOfStar!= null){
SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByTypeOfStar.get(heroStar-1);
@ -914,7 +930,8 @@ public class HeroLogic{
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByTypOfBreak = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByType(GlobalsDef.BREAK_TYPE,scHero.getStar());
for( SCHeroRankUpConfig scHeroRankUpConfigTmp :scHeroRankUpConfigByTypOfBreak.values()){
if( heroLevel >= scHeroRankUpConfigTmp.getLimitLevel() && heroBreakId>= scHeroRankUpConfigTmp.getId() && breakPara< scHeroRankUpConfigTmp.getRankupPara()){
// && breakPara< scHeroRankUpConfigTmp.getRankupPara()
if( heroLevel >= scHeroRankUpConfigTmp.getLimitLevel() && heroBreakId>= scHeroRankUpConfigTmp.getId() ){
breakPara = scHeroRankUpConfigTmp.getRankupPara();
}
if(heroLevel < scHeroRankUpConfigTmp.getOpenLevel()){
@ -926,13 +943,13 @@ public class HeroLogic{
return result;
}
private Map<Integer,Float> getParaForHero(Hero hero){
private Map<Integer,Object> getParaForHero(Hero hero){
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
return getParaRate(scHero, hero.getStar(), hero.getLevel(), hero.getBreakId());
}
//todo
private Map<Integer,Float> getParaForRobotHero(SCHero scHero,int level,int breakId){
private Map<Integer,Object> getParaForRobotHero(SCHero scHero,int level,int breakId){
return getParaRate(scHero, scHero.getStar(),level, breakId);
}
@ -990,10 +1007,18 @@ public class HeroLogic{
}
}
//法宝技能
int especialEquip = hero.getEspecialEquipLevel();
if(especialEquip>=0){
int[] equipTalismana = tempHero.getEquipTalismana();
if(hero.getStar()<equipTalismana[0]){
return sb;
}
int especialEquipLevel = hero.getEspecialEquipLevel();
int especialEquipId = equipTalismana[1];
Map<Integer,SEquipTalismana> sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId);
sEquipTalismana.forEach((k,v)->{
if(k<especialEquipLevel&&v.getOpenSkillRules()!=null){
Arrays.stream(v.getOpenSkillRules()).forEach(i->sb.append(i).append(DIVISION));
}
});
return sb;
}
@ -1990,8 +2015,8 @@ public class HeroLogic{
User user = UserManager.getUser(uid);
String heroId = optHeroSoul.getHeroId();
Hero hero = user.getHeroManager().getHero(heroId);
Map<Integer, Integer> soulEquipByPositionMap = hero.getSoulEquipByPositionMap();
checkAllowedWear(user,soulEquipByPositionMap,optHeroSoul.getSoulEquipIdsList(),unload);
checkAllowedOptSoul(user,hero.getLevel());
checkAllowedWear(user,hero.getTemplateId(),optHeroSoul.getSoulEquipIdsList(),unload);
optHeroSoul.getSoulEquipIdsList().forEach(e->{
hero.updateSoulEquipPositionMap(e.getPosition(),e.getEquipId());
});
@ -1999,7 +2024,61 @@ public class HeroLogic{
}
private void checkAllowedWear(User user, Map<Integer, Integer> soulEquipByPositionMap, List<HeroInfoProto.SoulEquipPos> soulEquipIdsList, HeroInfoProto.OptHeroSoul unload) {
private void checkAllowedWear(User user,int targetHeroTid,List<HeroInfoProto.SoulEquipPos> soulEquipIdsList, HeroInfoProto.OptHeroSoul unload) throws Exception {
List<Integer> equids = new ArrayList<>();
soulEquipIdsList.forEach(e->equids.add(e.getEquipId()));
List<Integer> unloadSoulIds = new ArrayList<>();
if(unload!=null){
List<HeroInfoProto.SoulEquipPos> soulEquipIdsListUnload = unload.getSoulEquipIdsList();
soulEquipIdsListUnload.forEach(e->{
equids.remove(e.getEquipId());
unloadSoulIds.add(e.getEquipId());
});
}
//是否魂印能被本英雄佩戴
//是否只能一名武将佩戴
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
Set<Integer> cacheIds = new HashSet<>();
for(HeroInfoProto.SoulEquipPos item:soulEquipIdsList){
int equipId = item.getEquipId();
SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(equipId);
if(sEquipConfig.getRangeHeroTids()!=null && !sEquipConfig.getRangeHeroTids().contains(targetHeroTid)){
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE);
}
if(sEquipConfig.getLimit()==1){
if(cacheIds.isEmpty()){
heroMap.values().forEach(hero->{
cacheIds.addAll(hero.getSoulEquipByPositionMap().values());
});
cacheIds.removeAll(unloadSoulIds);
}
if(cacheIds.contains(equipId)){
cacheIds.add(equipId);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE);
}
}
}
if(!equids.isEmpty()){
Map<Integer,Integer> itemCost = new HashMap<>();
equids.forEach(e->{
itemCost.put(e,1);
});
boolean b = ItemUtil.itemCost(user, itemCost, BIReason.SOUL_EQUIP_WEAR_CONSUME, targetHeroTid);
if(!b){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
}
if(unload!=null){
Hero hero = user.getHeroManager().getHero(unload.getHeroId());
List<HeroInfoProto.SoulEquipPos> soulEquipIdsListUnload = unload.getSoulEquipIdsList();
soulEquipIdsListUnload.forEach(e->{
hero.removeSoulEquip(e.getPosition());
});
}
}
@ -2007,7 +2086,37 @@ public class HeroLogic{
public static void mergeSoul(ISession session, int targetId, List<Integer> soulIdList) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
STableManager.getConfig(SEquipConfig.class).get(targetId);
SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(targetId);
int[][] resource = sEquipConfig.getResource();
Map<Integer,Integer> itemTemplateCost = new HashMap<>();
Map<Integer,Integer> itemReallyCost = new HashMap<>();
soulIdList.forEach(e->{
itemTemplateCost.put( STableManager.getConfig(SEquipConfig.class).get(e).getQuality(),itemTemplateCost.getOrDefault( STableManager.getConfig(SEquipConfig.class).get(e).getQuality(),0)+1);
itemReallyCost.put(e,itemReallyCost.getOrDefault(e,0)+1);
});
Arrays.stream(resource).forEach(item->{
itemReallyCost.put(item[0],itemReallyCost.getOrDefault(item[0],0)+item[1]);
});
int[][] formula = sEquipConfig.getFormula();
for(int[] item : formula){
if(itemTemplateCost.getOrDefault(item[0],0)!=item[1]){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
}
boolean b = ItemUtil.itemCost(user, itemReallyCost, BIReason.SOUL_EQUIP_MERGE_CONSUME, targetId);
if(!b){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
int[][] drop = new int[1][];
drop[0] = new int[2];
drop[0][0] = targetId;
drop[0][1] = 1;
CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, drop, 1);
HeroInfoProto.MergeSoulResponse build = HeroInfoProto.MergeSoulResponse.newBuilder().setDrop(dropBuilder).build();
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.SOUL_MERGE_RESPONSE_VALUE,build,true);
}
@ -2031,4 +2140,18 @@ public class HeroLogic{
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.SOUL_EQUIP_UNLOAD_OPT_RESPONSE_VALUE,null,true);
}
public static void checkAllowedOptSoul(User user,int heroLevel) throws ErrorCodeException {
SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting();
int[][] equipSignUnlock = gameSetting.getEquipSignUnlock();
for(int[] item : equipSignUnlock){
if(item[0] == 1 && user.getPlayerInfoManager().getLevel()<item[1]){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
if(item[0] == 2 && heroLevel<item[1]){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
}
}
}

View File

@ -411,6 +411,9 @@ public class ItemLogic {
int especialEquipId = scHero.getEquipTalismana()[1];
SEquipTalismana sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId).get(hero.getEspecialEquipLevel());
if(sEquipTalismana!=null&&sEquipTalismana.getRankupBasicMaterial()==null){
throw new ErrorCodeException(ErrorCode.newDefineCode("法宝已最大等级"));
}
boolean b = ItemUtil.itemCost(user, sEquipTalismana.getRankupBasicMaterial(), BIReason.ESPECIAL_EQUIP_UP_LEVEL_CONSUME, 1);
if(b){
hero.updateEspecial(hero.getEspecialEquipLevel()+1);
@ -520,4 +523,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

@ -900,12 +900,11 @@ public class PlayerLogic {
PlayerManager playerInfoManager = user.getPlayerInfoManager();
RechargeInfo rechargeInfo = playerInfoManager.getRechargeInfo();
STableManager.getConfig(SMonthcardConfig.class).forEach((integer, sMonthcardConfig) -> {
int time = playerInfoManager.getMonthCard().getOrDefault(integer,0);
int state = playerInfoManager.getMonthCardDailyTake().contains(integer)?1:0;
int saveAmt = integer==1?rechargeInfo.getMonthSaveAmt():rechargeInfo.getSmonthSaveAmt();
int time = playerInfoManager.getMonthCard().getOrDefault(integer,0);
cardInfos.add(CommonProto.MonthCardInfo.newBuilder().setId(integer).setEndingTime(time).setState(state).setTotleAmt(saveAmt).build());
});
return cardInfos;
}
}

View File

@ -268,8 +268,6 @@ public class SessionManager implements INetSession<ISession>, INetReceived<ISess
return 0;
}*/
int index = packetNetData.getIndex();
LOGGER.info("the uid={},the msg={} is processing,the index={},the sessionIndex={}", iSession.getUid(), MessageTypeProto.MessageType.valueOf(packetNetData.getMsgId()), index, iSession.getIndex());
if (iSession.getIndex() >= index) {
byte[] message = iSession.getCacheMessage(index);

View File

@ -475,6 +475,7 @@ public class ItemUtil {
SItem sItem = SItem.getsItemMap().get(itemId);
int itemType =getItemType(sItem);
switch (itemType) {
case GlobalItemType.SOUL_MARK:
case GlobalItemType.ITEM:
putcountMap(itemId,MathUtils.numRount((itemNum * dropRatio)) , itemMap);
break;
@ -483,7 +484,7 @@ public class ItemUtil {
break;
case GlobalItemType.EQUIP:
case GlobalItemType.ESPECIAL_EQUIP:
case GlobalItemType.SOUL_MARK:
putcountMap(itemId, itemNum, equipMap);
break;
case GlobalItemType.RANDOM_ITME:

View File

@ -9,7 +9,7 @@ public class SCHeroRankUpConfig implements BaseConfig{
private int type;
private float rankupPara;
private int[][] rankupPara;
private int limitLevel;
@ -27,6 +27,8 @@ public class SCHeroRankUpConfig implements BaseConfig{
private int[][] sumConsume;
private int judgeClass;
@Override
public void init() throws Exception {
}
@ -41,7 +43,7 @@ public class SCHeroRankUpConfig implements BaseConfig{
return type;
}
public float getRankupPara() {
public int[][] getRankupPara() {
return rankupPara;
}

View File

@ -39,17 +39,33 @@ public class SEquipConfig implements BaseConfig {
private int score;
private int[] range;
private Set<Integer> rangeHeroTids;
private int star;
private int[][] resource;
private int[][] formula;
private int limit;
private int passiveSkill;
@Override
public void init() throws Exception {
Map<Integer, SEquipConfig> config = STableManager.getConfig(SEquipConfig.class);
config.forEach((k,v)->{
Set<Integer> rangeTemp = new HashSet<>();
Arrays.stream(v.getRange()).forEach(e->rangeTemp.add(e));
v.setRangeHeroTids(rangeTemp);
if(v.getRange()!=null && v.getRange().length>0 && v.getRange()[0]!=0){
Set<Integer> rangeTemp = new HashSet<>();
Arrays.stream(v.getRange()).forEach(e->rangeTemp.add(e));
v.setRangeHeroTids(rangeTemp);
}
});
}
@ -108,6 +124,7 @@ public class SEquipConfig implements BaseConfig {
public int getIfShow(){return ifShow; }
public Set<Integer> getRangeHeroTids() {
return rangeHeroTids;
}
@ -120,4 +137,27 @@ public class SEquipConfig implements BaseConfig {
public int[] getRange() {
return range;
}
public int getStar() {
return star;
}
public void setStar(int star) {
this.star = star;
}
public int[][] getResource() {
return resource;
}
public int[][] getFormula() {
return formula;
}
public int getLimit() {
return limit;
}
public int getPassiveSkill() {
return passiveSkill;
}
}

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;
}
}

View File

@ -105,7 +105,7 @@ public class SGameSetting implements BaseConfig {
private int[] equipTalismanaUnlock;
private int[] equipSignUnlock;
private int[][] equipSignUnlock;
private int[] heroReturn;
@ -312,7 +312,7 @@ public class SGameSetting implements BaseConfig {
return equipTalismanaUnlock;
}
public int[] getEquipSignUnlock() {
public int[][] getEquipSignUnlock() {
return equipSignUnlock;
}

View File

@ -14,7 +14,7 @@ public class SHeroLevlConfig implements BaseConfig{
private int level;
private float characterLevelPara;
private int[][] characterLevelPara;
private float speedLevelPara;
@ -47,7 +47,7 @@ public class SHeroLevlConfig implements BaseConfig{
return sHeroLevlConfigMap;
}
public float getCharacterLevelPara() {
public int[][] getCharacterLevelPara() {
return characterLevelPara;
}

View File

@ -24,7 +24,7 @@ public class SPrivilegeTypeConfig implements BaseConfig {
private int[][] condition;
private int continueTime;
private int[] continueTime;
private static Map<Integer,SPrivilegeTypeConfig> sPrivilegeTypeConfigMap;
@ -84,7 +84,7 @@ public class SPrivilegeTypeConfig implements BaseConfig {
return condition;
}
public int getContinueTime() {
public int[] getContinueTime() {
return continueTime;
}