鸿蒙碑

back_recharge
jiahuiwen 2020-12-08 16:28:09 +08:00
parent 98ddcf78fc
commit d3a11d5305
4 changed files with 160 additions and 60 deletions

View File

@ -191,7 +191,7 @@ public class GetPlayerInfoHandler extends BaseHandler{
Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.RECHARGE_BUY.getType(),Global.LMONTHCARDID));
}
// 刷新鸿蒙阵
// HeroLogic.getInstance().addOrUpdateHongmeng(user);
HeroLogic.getInstance().addOrUpdateHongmeng(user);
// 组装鸿蒙阵信息
List<PlayerInfoProto.HongmengHeroInfo> hongmengHeroInfos = new ArrayList<>();
Map<Integer, String> resonances = heroManager.getResonances();
@ -205,12 +205,13 @@ public class GetPlayerInfoHandler extends BaseHandler{
hongmengHeroInfos.add(hongmengHeroInfo);
}
List<PlayerInfoProto.HongmengAddition> hongmengAdditions = new ArrayList<>();
Map<HongMengAttributeEnum, Integer> resonanceAddition = heroManager.getResonanceAddition();
for (Map.Entry<HongMengAttributeEnum, Integer> entry : resonanceAddition.entrySet()) {
Map<HongMengAttributeEnum, HongMengAddAttribute> resonanceAddition = heroManager.getResonanceAddition();
for (Map.Entry<HongMengAttributeEnum, HongMengAddAttribute> entry : resonanceAddition.entrySet()) {
PlayerInfoProto.HongmengAddition hongmengAddition = PlayerInfoProto.HongmengAddition
.newBuilder()
.setAdditionType(entry.getKey().getPropertyId())
.setValue(entry.getValue())
.setValue(entry.getValue().value)
.setHeroTid(entry.getValue().heroTid)
.build();
hongmengAdditions.add(hongmengAddition);
}

View File

@ -37,7 +37,7 @@ public class HeroManager extends MongoBase {
// 共鸣英雄<格子id冷却时间>
private Map<Integer, Long> resonancesTime = new HashMap<>();
// 共鸣加成
private Map<HongMengAttributeEnum, Integer> resonanceAddition = new HashMap<>();
private Map<HongMengAttributeEnum, HongMengAddAttribute> resonanceAddition = new HashMap<>();
// 鸿蒙碑等级
private int hongmengTablet;
// 鸿蒙碑最大等级
@ -51,7 +51,6 @@ public class HeroManager extends MongoBase {
public void updateRandomPoolByType(int type,Map<Integer,Integer> map){
randomPoolByType.put(type,map);
updateString("randomPoolByType." + type, map);
}
public Map<String, Hero> getItemMap() {
@ -175,11 +174,11 @@ public class HeroManager extends MongoBase {
updateString("resonancesTime."+ index, time);
}
public Map<HongMengAttributeEnum, Integer> getResonanceAddition() {
public Map<HongMengAttributeEnum, HongMengAddAttribute> getResonanceAddition() {
return resonanceAddition;
}
public void setResonanceAddition(Map<HongMengAttributeEnum, Integer> resonanceAddition) {
public void setResonanceAddition(Map<HongMengAttributeEnum, HongMengAddAttribute> resonanceAddition) {
this.resonanceAddition = resonanceAddition;
updateString("resonanceAddition", resonanceAddition);
}

View File

@ -0,0 +1,11 @@
package com.ljsd.jieling.logic.dao;
public class HongMengAddAttribute {
public int heroTid;
public int value;
public HongMengAddAttribute(int heroTid, int value) {
this.heroTid = heroTid;
this.value = value;
}
}

View File

@ -3423,20 +3423,19 @@ public class HeroLogic{
return Integer.compare(hero2.getStar(), hero1.getStar());
}
});
List<String> hongmengs = heroManager.getHongmengGuard();
hongmengs.clear();
List<String> hongmengs = new ArrayList<>();
int defaultValue = 1000;
// 只要任意鸿蒙守卫中有未穿戴装备的部位,就不会触发装备共鸣,共鸣区域放入神将时不再自动卸下装备 1:不卸下装备
int isUnloadEquip = 1;
HongMengAddAttribute hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue);
// 只要任意鸿蒙守卫未穿戴魂宝/灵宝或强化等级为0便不会触发对应宝物的共鸣
int soulEquip = 1000;
int spiritEquip = 1000;
HongMengAddAttribute soulEquip = new HongMengAddAttribute(0, defaultValue);
HongMengAddAttribute spiritEquip = new HongMengAddAttribute(0, defaultValue);
// 共鸣等级=鸿蒙守卫中最低的等级
int resonanceLevel = 1000;
HongMengAddAttribute resonanceLevel = new HongMengAddAttribute(0, defaultValue);
// 共鸣法宝=鸿蒙守卫中法宝强化最低等级
int especialEquipLevel = 1000;
HongMengAddAttribute especialEquipLevel = new HongMengAddAttribute(0, defaultValue);
// 是否开启鸿蒙碑
int tablet = 1;
@ -3448,41 +3447,18 @@ public class HeroLogic{
if (values2.contains(hero.getId())) {
continue;
}
if (hero.getEquipByPositionMap().size() != 4 && isUnloadEquip == 1) {
isUnloadEquip = 0;
}
if (hero.getJewelInfo().isEmpty()) {
soulEquip = 0;
spiritEquip = 0;
} else {
for (String jewel : hero.getJewelInfo()) {
PropertyItem propertyItem = equipMap.get(jewel);
if (propertyItem == null) {
soulEquip = 0;
spiritEquip = 0;
} else {
SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(propertyItem.getEquipId());
if (config == null) {
continue;
}
// getLocation 1魂宝 2灵宝
if (config.getLocation() == 1) {
soulEquip = propertyItem.getLevel() < soulEquip ? propertyItem.getLevel() : soulEquip;
} else {
spiritEquip = propertyItem.getLevel() < soulEquip ? propertyItem.getLevel() : soulEquip;
}
}
}
}
if (hero.getEspecialEquipLevel() < especialEquipLevel) {
especialEquipLevel = hero.getEspecialEquipLevel();
}
// 装备
hongmengEquip(hongMengAddAttributeEquip, hero);
// 魂宝 灵宝
soulOrSpirit(soulEquip, spiritEquip, equipMap, hero);
// 法宝
especialAdd(especialEquipLevel, hero);
// 是否开启鸿蒙碑
if (hero.getLevel() < Integer.parseInt(openLevel[1])) {
tablet = 0;
}
if (hero.getLevel() < resonanceLevel) {
resonanceLevel = hero.getLevel();
}
// 等级
hongmengLevel(resonanceLevel, hero);
hongmengs.add(hero.getId());
if (hongmengs.size() >= Integer.parseInt(openLevel[0])) {
break;
@ -3492,14 +3468,35 @@ public class HeroLogic{
return;
}
heroManager.setHongmengGuard(hongmengs);
// 第一个格子免费开启
Map<Integer, String> resonances = heroManager.getResonances();
if (!resonances.containsKey(1)) {
resonances.put(1, "");
heroManager.setResonances(resonances);
}
// 计算共鸣属性
Map<HongMengAttributeEnum, Integer> resonanceAddition = heroManager.getResonanceAddition();
Map<HongMengAttributeEnum, HongMengAddAttribute> resonanceAddition = heroManager.getResonanceAddition();
resonanceAddition.clear();
resonanceAddition.put(HongMengAttributeEnum.LEVEL, resonanceLevel == 1000 ? 0 : resonanceLevel);
resonanceAddition.put(HongMengAttributeEnum.EQUIP, isUnloadEquip);
resonanceAddition.put(HongMengAttributeEnum.SOUL_EQUIP, soulEquip == 1000 ? 0 : soulEquip);
resonanceAddition.put(HongMengAttributeEnum.SPIRIT_EQUIP, spiritEquip == 1000 ? 0 : spiritEquip);
resonanceAddition.put(HongMengAttributeEnum.MAGIC_WEAPON, especialEquipLevel == 1000 ? 0 : especialEquipLevel);
if (resonanceLevel.value == defaultValue) {
resonanceLevel.value = 0;
}
if (hongMengAddAttributeEquip.value == defaultValue) {
hongMengAddAttributeEquip.value = 0;
}
if (soulEquip.value == defaultValue) {
soulEquip.value = 0;
}
if (spiritEquip.value == defaultValue) {
spiritEquip.value = 0;
}
if (especialEquipLevel.value == defaultValue) {
especialEquipLevel.value = 0;
}
resonanceAddition.put(HongMengAttributeEnum.LEVEL, resonanceLevel);
resonanceAddition.put(HongMengAttributeEnum.EQUIP, hongMengAddAttributeEquip);
resonanceAddition.put(HongMengAttributeEnum.SOUL_EQUIP, soulEquip);
resonanceAddition.put(HongMengAttributeEnum.SPIRIT_EQUIP, spiritEquip);
resonanceAddition.put(HongMengAttributeEnum.MAGIC_WEAPON, especialEquipLevel);
heroManager.setResonanceAddition(resonanceAddition);
// 鸿蒙碑
if (tablet == 1 && heroManager.getHongmengTablet() == 0) {
@ -3508,6 +3505,95 @@ public class HeroLogic{
}
}
/**
* 鸿
* @param resonanceLevel
* @param hero
*/
public void hongmengLevel(HongMengAddAttribute resonanceLevel, Hero hero) {
if (hero.getLevel() < resonanceLevel.value) {
resonanceLevel.value = hero.getLevel();
resonanceLevel.heroTid = hero.getTemplateId();
}
}
/**
* 鸿
* @param especialEquipLevel
* @param hero
*/
public void especialAdd(HongMengAddAttribute especialEquipLevel, Hero hero) {
if (hero.getEspecialEquipLevel() < especialEquipLevel.value) {
especialEquipLevel.value = hero.getEspecialEquipLevel();
especialEquipLevel.heroTid = hero.getTemplateId();
}
}
/**
* 鸿
* @param soulEquip
* @param spiritEquip
* @param equipMap
* @param hero
*/
public void soulOrSpirit(HongMengAddAttribute soulEquip, HongMengAddAttribute spiritEquip, Map<String, PropertyItem> equipMap, Hero hero) {
if (hero.getJewelInfo().isEmpty()) {
soulEquip.value = 0;
spiritEquip.value = 0;
soulEquip.heroTid = 0;
spiritEquip.heroTid = 0;
} else {
for (String jewel : hero.getJewelInfo()) {
PropertyItem propertyItem = equipMap.get(jewel);
if (propertyItem == null) {
soulEquip.value = 0;
spiritEquip.value = 0;
soulEquip.heroTid = 0;
spiritEquip.heroTid = 0;
} else {
SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(propertyItem.getEquipId());
if (config == null) {
continue;
}
// getLocation 1魂宝 2灵宝
if (config.getLocation() == 1) {
soulEquip.value = propertyItem.getLevel() < soulEquip.value ? propertyItem.getLevel() : soulEquip.value;
soulEquip.heroTid = hero.getTemplateId();
} else {
spiritEquip.value = propertyItem.getLevel() < soulEquip.value ? propertyItem.getLevel() : soulEquip.value;
spiritEquip.heroTid = hero.getTemplateId();
}
}
}
}
}
/**
* 鸿
* @param hongMengAddAttributeEquip
* @param hero
*/
public void hongmengEquip(HongMengAddAttribute hongMengAddAttributeEquip, Hero hero) {
if (hero.getEquipByPositionMap().size() != 4) {
hongMengAddAttributeEquip.value = -1;
hongMengAddAttributeEquip.heroTid = 0;
}
if (hongMengAddAttributeEquip.value > 0) {
for (Integer value : hero.getEquipByPositionMap().values()) {
SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(value);
if (sEquipConfig == null) {
hongMengAddAttributeEquip.value = -1;
hongMengAddAttributeEquip.heroTid = 0;
break;
}
if (sEquipConfig.getStar() < hongMengAddAttributeEquip.value) {
hongMengAddAttributeEquip.value = sEquipConfig.getQuality();
hongMengAddAttributeEquip.heroTid = hero.getTemplateId();
}
}
}
}
/**
*
* @param session
@ -3595,20 +3681,23 @@ public class HeroLogic{
User user = UserManager.getUser(session.getUid());
HeroManager heroManager = user.getHeroManager();
Map<Integer, String> resonances = heroManager.getResonances();
String resonanceInfo = resonances.get(index);
if (resonanceInfo == null || resonanceInfo.isEmpty()) {
String heroId = resonances.get(index);
if (heroId == null || heroId.isEmpty()) {
LOGGER.info("unLoadResonance uid=>{} the index not open=>{}", user.getId(), index);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Hero hero = heroManager.getHero(resonanceInfo);
Hero hero = heroManager.getHero(heroId);
if (hero == null) {
LOGGER.info("unLoadResonance uid=>{} cur hero is null {}", user.getId(), resonanceInfo);
LOGGER.info("unLoadResonance uid=>{} cur hero is null {}", user.getId(), heroId);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
heroManager.updateResonances(index, "");
heroManager.updateResonancesTime(index, TimeUtils.now() + SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_LATTICE_WAIT_TIME) * 1000);
heroManager.updateResonances(index, resonanceInfo);
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null);
HeroInfoProto.ResonanceResponse resonanceResponse = HeroInfoProto.ResonanceResponse
.newBuilder()
.setLeftTime(SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_LATTICE_WAIT_TIME))
.build();
MessageUtil.sendMessage(session, 1, messageType.getNumber(), resonanceResponse);
}
/**