master_ob2
PC-202302260912\Administrator 2023-08-07 13:04:54 +08:00
parent 3915f25665
commit 3e70166697
3 changed files with 196 additions and 191 deletions

View File

@ -1,4 +1,4 @@
{ {
"version":"5", "version":"6",
"tables":"" "tables":"StoreConfig|RechargeCommodityConfig"
} }

View File

@ -1,5 +1,6 @@
{ {
"version":"5", "version":"6",
"classes":[ "classes":[
{"name":"HeroLogic.class","fullName":"com.ljsd.jieling.logic.hero.HeroLogic"}
] ]
} }

View File

@ -5342,211 +5342,215 @@ public class HeroLogic {
* @param session * @param session
* @param judge truefalse * @param judge truefalse
*/ */
public void addOrUpdateHongmeng(ISession session, boolean judge) throws Exception { public void addOrUpdateHongmeng(ISession session, boolean judge){
User user = UserManager.getUser(session.getUid()); try {
// 英雄星级排行榜 User user = UserManager.getUser(session.getUid());
SaveHeroForceEventHandler.heroStarHandle(user); // 英雄星级排行榜
// 鸿蒙阵逻辑 SaveHeroForceEventHandler.heroStarHandle(user);
HeroInfoProto.HongmengInfoIndication.Builder hongmengInfoIndication = HeroInfoProto.HongmengInfoIndication.newBuilder(); // 鸿蒙阵逻辑
HeroInfoProto.HongmengInfoIndication.Builder hongmengInfoIndication = HeroInfoProto.HongmengInfoIndication.newBuilder();
SGlobalSystemConfig sGlobalSystemConfig = STableManager.getConfig(SGlobalSystemConfig.class).get(FunctionIdEnum.HongMeng.getFunctionType()); SGlobalSystemConfig sGlobalSystemConfig = STableManager.getConfig(SGlobalSystemConfig.class).get(FunctionIdEnum.HongMeng.getFunctionType());
boolean open = GlobleSystemLogic.checkOpen(user, sGlobalSystemConfig); boolean open = GlobleSystemLogic.checkOpen(user, sGlobalSystemConfig);
// 鸿蒙阵开启条件 // 鸿蒙阵开启条件
if (open) { if (open) {
/** ========================== 共鸣信息初始化 =========================== **/ /** ========================== 共鸣信息初始化 =========================== **/
// 限制表 鸿蒙守卫数量#鸿蒙碑使者等级 // 限制表 鸿蒙守卫数量#鸿蒙碑使者等级
String[] openLevel = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_UPGRADE_LIMIT).split("#"); String[] openLevel = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_UPGRADE_LIMIT).split("#");
Map<Integer, String> hongmengs = new HashMap<>(Integer.parseInt(openLevel[0])); Map<Integer, String> hongmengs = new HashMap<>(Integer.parseInt(openLevel[0]));
int defaultValue = 1000; int defaultValue = 1000;
// 只要任意鸿蒙守卫中有未穿戴装备的部位,就不会触发装备共鸣,共鸣区域放入神将时不再自动卸下装备 -1:不用卸下装备,其他表示装备星级 // 只要任意鸿蒙守卫中有未穿戴装备的部位,就不会触发装备共鸣,共鸣区域放入神将时不再自动卸下装备 -1:不用卸下装备,其他表示装备星级
HongMengAddAttribute hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue); HongMengAddAttribute hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue);
// 只要任意鸿蒙守卫未穿戴魂宝/灵宝或强化等级为0便不会触发对应宝物的共鸣 // 只要任意鸿蒙守卫未穿戴魂宝/灵宝或强化等级为0便不会触发对应宝物的共鸣
HongMengAddAttribute soulEquip = new HongMengAddAttribute(0, defaultValue); HongMengAddAttribute soulEquip = new HongMengAddAttribute(0, defaultValue);
HongMengAddAttribute spiritEquip = new HongMengAddAttribute(0, defaultValue); HongMengAddAttribute spiritEquip = new HongMengAddAttribute(0, defaultValue);
// 共鸣等级=鸿蒙守卫中最低的等级 // 共鸣等级=鸿蒙守卫中最低的等级
HongMengAddAttribute resonanceLevel = new HongMengAddAttribute(0, defaultValue); HongMengAddAttribute resonanceLevel = new HongMengAddAttribute(0, defaultValue);
// 共鸣法宝=鸿蒙守卫中法宝强化最低等级 // 共鸣法宝=鸿蒙守卫中法宝强化最低等级
HongMengAddAttribute especialEquipLevel = new HongMengAddAttribute(0, defaultValue); HongMengAddAttribute especialEquipLevel = new HongMengAddAttribute(0, defaultValue);
/** ========================== 开始处理玩家信息,更 =========================== **/ /** ========================== 开始处理玩家信息,更 =========================== **/
HeroManager heroManager = user.getHeroManager(); HeroManager heroManager = user.getHeroManager();
// 共鸣英雄池 // 共鸣英雄池
Map<Integer, String> resonances = heroManager.getResonances(); Map<Integer, String> resonances = heroManager.getResonances();
// 第一个格子免费开启 // 第一个格子免费开启
if (!resonances.containsKey(1)) { if (!resonances.containsKey(1)) {
resonances.put(1, ""); resonances.put(1, "");
heroManager.setResonances(resonances); heroManager.setResonances(resonances);
// 成就任务 // 成就任务
user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.HONGMENG_RESONANCE_LATTICE, resonances.size()); user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.HONGMENG_RESONANCE_LATTICE, resonances.size());
} }
// 获取玩家全部英雄 // 获取玩家全部英雄
Collection<Hero> values = heroManager.getHeroMap().values(); Collection<Hero> values = heroManager.getHeroMap().values();
List<Hero> heroes = new ArrayList<>(values); List<Hero> heroes = new ArrayList<>(values);
// 是否开启鸿蒙碑 // 是否开启鸿蒙碑
int tabletMax = 0; int tabletMax = 0;
// 是否为鸿蒙碑 // 是否为鸿蒙碑
if (heroManager.getHongmengTablet() > 0) { if (heroManager.getHongmengTablet() > 0) {
// 等级 // 等级
resonanceLevel.value = heroManager.getHongmengTablet(); resonanceLevel.value = heroManager.getHongmengTablet();
tabletMax = heroManager.getHongmengMaxLevelByInt(); tabletMax = heroManager.getHongmengMaxLevelByInt();
} else { } else {
// 玩家英雄背包按等级排序 // 玩家英雄背包按等级排序
Collections.sort(heroes); Collections.sort(heroes);
for (int i = 0; i < heroes.size(); i++) { for (int i = 0; i < heroes.size(); i++) {
Hero hero = heroes.get(i); Hero hero = heroes.get(i);
resonances.forEach((k, v) -> { resonances.forEach((k, v) -> {
if (v.equals(hero.getId())) { if (v.equals(hero.getId())) {
try { try {
// 共鸣格子更新 // 共鸣格子更新
unLoadResonance(session, MessageTypeProto.MessageType.HONGMENG_RESONANCE_RESPONSE, k, 0); unLoadResonance(session, MessageTypeProto.MessageType.HONGMENG_RESONANCE_RESPONSE, k, 0);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
}
}
});
// 是否开启鸿蒙碑
if (hero.getOriginalLevel() >= Integer.parseInt(openLevel[1])) {
tabletMax++;
}
// 等级
hongmengLevel(resonanceLevel, hero);
hongmengs.put(i + 1, hero.getId());
if (hongmengs.size() >= Integer.parseInt(openLevel[0])) {
break;
}
}
// 更新鸿蒙使者
heroManager.setHongmengGuards(hongmengs);
// 鸿蒙碑,觉醒限制
if (tabletMax >= Integer.parseInt(openLevel[0]) && heroManager.getHongmengTablet() == 0) {
// 开启鸿蒙碑
heroManager.setHongmengTablet(Integer.parseInt(openLevel[1]));
for (String resetLevelId : heroManager.getHongmengGuards().values()) {
Hero hero = heroManager.getHero(resetLevelId);
if (hero == null) {
continue;
}
hero.setLevel(1);
hero.setBreakId(0);
}
// 初始化鸿蒙碑等级上限
for (Hero hero : heroes) {
if (hero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_awaken_hero_content_parm)) {
heroManager.addHongmengMaxLevel(hero.getTemplateId());
} }
} }
}); tabletMax = heroManager.getHongmengMaxLevelByInt();
// 是否开启鸿蒙碑 resonanceLevel.heroTid = 0;
if (hero.getOriginalLevel() >= Integer.parseInt(openLevel[1])) { resonanceLevel.value = heroManager.getHongmengTablet();
tabletMax++;
} // 鸿蒙碑新手引导推送
// 等级 HeroInfoProto.HongmengSteleNewHandIndication.Builder builder = HeroInfoProto.HongmengSteleNewHandIndication.newBuilder().setState(1);
hongmengLevel(resonanceLevel, hero); MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.HONGMENG_STELE_NEW_HAND_INDICATION.getNumber(), builder.build(), true);
hongmengs.put(i + 1, hero.getId());
if (hongmengs.size() >= Integer.parseInt(openLevel[0])) {
break;
} }
} }
// 守卫/使者英雄池
Map<Integer, String> guards = heroManager.getHongmengGuards();
// 英雄装备
Map<String, PropertyItem> equipMap = user.getEquipManager().getEquipMap();
// 更新鸿蒙使者 // if (guards.size() >= Integer.parseInt(openLevel[0])) {
heroManager.setHongmengGuards(hongmengs); // for (int i = 0; i < guards.size(); i++) {
// Hero hero = user.getHeroManager().getHero(guards.get(i + 1));
// if (hero == null) {
// // 找不到英雄,不存在这些共鸣属性
// hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue);
// soulEquip = new HongMengAddAttribute(0, defaultValue);
// spiritEquip = new HongMengAddAttribute(0, defaultValue);
// break;
// }
// // 装备
// hongmengEquip(hongMengAddAttributeEquip, hero);
// // 魂宝 灵宝
// soulOrSpirit(soulEquip, 1, equipMap, hero);
// soulOrSpirit(spiritEquip, 2, equipMap, hero);
// }
// }
// 鸿蒙碑,觉醒限制 /*** ============================= 计算共鸣信息 ==================================== **/
if (tabletMax >= Integer.parseInt(openLevel[0]) && heroManager.getHongmengTablet() == 0) { Map<HongMengAttributeEnum, HongMengAddAttribute> resonanceAddition = heroManager.getResonanceAddition();
// 开启鸿蒙碑 resonanceAddition.clear();
heroManager.setHongmengTablet(Integer.parseInt(openLevel[1])); if (resonanceLevel.value == defaultValue) {
for (String resetLevelId : heroManager.getHongmengGuards().values()) { resonanceLevel.value = -1;
Hero hero = heroManager.getHero(resetLevelId); }
if (hero == null) { // if (hongMengAddAttributeEquip.value == defaultValue) {
continue; // hongMengAddAttributeEquip.value = -1;
} // }
hero.setLevel(1); // if (soulEquip.value == defaultValue) {
hero.setBreakId(0); // soulEquip.value = -1;
} // }
// 初始化鸿蒙碑等级上限 // if (spiritEquip.value == defaultValue) {
for (Hero hero : heroes) { // spiritEquip.value = -1;
if (hero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_awaken_hero_content_parm)) { // }
heroManager.addHongmengMaxLevel(hero.getTemplateId()); // if (especialEquipLevel.value == defaultValue) {
} // especialEquipLevel.value = -1;
} // }
tabletMax = heroManager.getHongmengMaxLevelByInt(); resonanceAddition.put(HongMengAttributeEnum.LEVEL, resonanceLevel);
resonanceLevel.heroTid = 0; // resonanceAddition.put(HongMengAttributeEnum.EQUIP, hongMengAddAttributeEquip);
resonanceLevel.value = heroManager.getHongmengTablet(); // resonanceAddition.put(HongMengAttributeEnum.SOUL_EQUIP, soulEquip);
// resonanceAddition.put(HongMengAttributeEnum.SPIRIT_EQUIP, spiritEquip);
heroManager.setResonanceAddition(resonanceAddition);
// 鸿蒙碑新手引导推送 /*** ============================= 开始组装鸿蒙阵信息 ==================================== **/
HeroInfoProto.HongmengSteleNewHandIndication.Builder builder = HeroInfoProto.HongmengSteleNewHandIndication.newBuilder().setState(1); // 当前时间,秒
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.HONGMENG_STELE_NEW_HAND_INDICATION.getNumber(), builder.build(), true); long now = TimeUtils.now() / 1000;
// 鸿蒙守卫
List<HeroInfoProto.HongmengHeroInfo> hongmengGuardsProto = new ArrayList<>();
Map<Integer, String> hongmengGuards = heroManager.getHongmengGuards();
Map<Integer, Long> hongmengGuardTime = heroManager.getHongmengGuardTime();
for (Map.Entry<Integer, String> entry : hongmengGuards.entrySet()) {
HeroInfoProto.HongmengHeroInfo hongmengHeroInfo = HeroInfoProto.HongmengHeroInfo.newBuilder()
.setGridId(entry.getKey())
.setHeroId(entry.getValue())
.setTime(hongmengGuardTime.containsKey(entry.getKey()) ? (hongmengGuardTime.get(entry.getKey()) - now < 0 ? 0 : (hongmengGuardTime.get(entry.getKey()) - now)) : 0)
.build();
hongmengGuardsProto.add(hongmengHeroInfo);
}
// 共鸣属性
List<HeroInfoProto.HongmengAddition> hongmengAdditions = new ArrayList<>();
for (Map.Entry<HongMengAttributeEnum, HongMengAddAttribute> entry : resonanceAddition.entrySet()) {
HeroInfoProto.HongmengAddition hongmengAddition = HeroInfoProto.HongmengAddition
.newBuilder()
.setAdditionType(entry.getKey().getPropertyId())
.setValue(entry.getValue().value)
.setHeroTid(entry.getValue().heroTid)
.build();
hongmengAdditions.add(hongmengAddition);
}
// 共鸣使者
List<HeroInfoProto.HongmengHeroInfo> hongmengResonancesProto = new ArrayList<>();
Map<Integer, String> hongmengResonances = heroManager.getResonances();
Map<Integer, Long> hongmengResonanceTime = heroManager.getResonancesTime();
for (Map.Entry<Integer, String> entry : hongmengResonances.entrySet()) {
HeroInfoProto.HongmengHeroInfo hongmengHeroInfo = HeroInfoProto.HongmengHeroInfo.newBuilder()
.setGridId(entry.getKey())
.setHeroId(entry.getValue())
.setTime(hongmengResonanceTime.containsKey(entry.getKey()) ? (hongmengResonanceTime.get(entry.getKey()) - now < 0 ? 0 : (hongmengResonanceTime.get(entry.getKey()) - now)) : 0)
.build();
hongmengResonancesProto.add(hongmengHeroInfo);
}
hongmengInfoIndication.addAllHongmengGuards(hongmengGuardsProto).addAllHongmengAdditions(hongmengAdditions)
.addAllHongmengResonacnes(hongmengResonancesProto).setHongmengTabletMax(tabletMax).build();
}
// 返回协议
if (judge) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.HONGMENG_GET_INFO_RESPONSE_VALUE, hongmengInfoIndication.build(), true);
} else {
if (hongmengInfoIndication.getHongmengGuardsCount() > 0 || hongmengInfoIndication.getHongmengAdditionsCount() > 0 || hongmengInfoIndication.getHongmengResonacnesCount() > 0) {
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.HONGMENG_INFO_INDICATION_VALUE, hongmengInfoIndication.build(), true);
} }
} }
// 守卫/使者英雄池 } catch (Exception e) {
Map<Integer, String> guards = heroManager.getHongmengGuards(); throw new RuntimeException(e);
// 英雄装备
Map<String, PropertyItem> equipMap = user.getEquipManager().getEquipMap();
// if (guards.size() >= Integer.parseInt(openLevel[0])) {
// for (int i = 0; i < guards.size(); i++) {
// Hero hero = user.getHeroManager().getHero(guards.get(i + 1));
// if (hero == null) {
// // 找不到英雄,不存在这些共鸣属性
// hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue);
// soulEquip = new HongMengAddAttribute(0, defaultValue);
// spiritEquip = new HongMengAddAttribute(0, defaultValue);
// break;
// }
// // 装备
// hongmengEquip(hongMengAddAttributeEquip, hero);
// // 魂宝 灵宝
// soulOrSpirit(soulEquip, 1, equipMap, hero);
// soulOrSpirit(spiritEquip, 2, equipMap, hero);
// }
// }
/*** ============================= 计算共鸣信息 ==================================== **/
Map<HongMengAttributeEnum, HongMengAddAttribute> resonanceAddition = heroManager.getResonanceAddition();
resonanceAddition.clear();
if (resonanceLevel.value == defaultValue) {
resonanceLevel.value = -1;
}
// if (hongMengAddAttributeEquip.value == defaultValue) {
// hongMengAddAttributeEquip.value = -1;
// }
// if (soulEquip.value == defaultValue) {
// soulEquip.value = -1;
// }
// if (spiritEquip.value == defaultValue) {
// spiritEquip.value = -1;
// }
// if (especialEquipLevel.value == defaultValue) {
// especialEquipLevel.value = -1;
// }
resonanceAddition.put(HongMengAttributeEnum.LEVEL, resonanceLevel);
// resonanceAddition.put(HongMengAttributeEnum.EQUIP, hongMengAddAttributeEquip);
// resonanceAddition.put(HongMengAttributeEnum.SOUL_EQUIP, soulEquip);
// resonanceAddition.put(HongMengAttributeEnum.SPIRIT_EQUIP, spiritEquip);
heroManager.setResonanceAddition(resonanceAddition);
/*** ============================= 开始组装鸿蒙阵信息 ==================================== **/
// 当前时间,秒
long now = TimeUtils.now() / 1000;
// 鸿蒙守卫
List<HeroInfoProto.HongmengHeroInfo> hongmengGuardsProto = new ArrayList<>();
Map<Integer, String> hongmengGuards = heroManager.getHongmengGuards();
Map<Integer, Long> hongmengGuardTime = heroManager.getHongmengGuardTime();
for (Map.Entry<Integer, String> entry : hongmengGuards.entrySet()) {
HeroInfoProto.HongmengHeroInfo hongmengHeroInfo = HeroInfoProto.HongmengHeroInfo.newBuilder()
.setGridId(entry.getKey())
.setHeroId(entry.getValue())
.setTime(hongmengGuardTime.containsKey(entry.getKey()) ? (hongmengGuardTime.get(entry.getKey()) - now < 0 ? 0 : (hongmengGuardTime.get(entry.getKey()) - now)) : 0)
.build();
hongmengGuardsProto.add(hongmengHeroInfo);
}
// 共鸣属性
List<HeroInfoProto.HongmengAddition> hongmengAdditions = new ArrayList<>();
for (Map.Entry<HongMengAttributeEnum, HongMengAddAttribute> entry : resonanceAddition.entrySet()) {
HeroInfoProto.HongmengAddition hongmengAddition = HeroInfoProto.HongmengAddition
.newBuilder()
.setAdditionType(entry.getKey().getPropertyId())
.setValue(entry.getValue().value)
.setHeroTid(entry.getValue().heroTid)
.build();
hongmengAdditions.add(hongmengAddition);
}
// 共鸣使者
List<HeroInfoProto.HongmengHeroInfo> hongmengResonancesProto = new ArrayList<>();
Map<Integer, String> hongmengResonances = heroManager.getResonances();
Map<Integer, Long> hongmengResonanceTime = heroManager.getResonancesTime();
for (Map.Entry<Integer, String> entry : hongmengResonances.entrySet()) {
HeroInfoProto.HongmengHeroInfo hongmengHeroInfo = HeroInfoProto.HongmengHeroInfo.newBuilder()
.setGridId(entry.getKey())
.setHeroId(entry.getValue())
.setTime(hongmengResonanceTime.containsKey(entry.getKey()) ? (hongmengResonanceTime.get(entry.getKey()) - now < 0 ? 0 : (hongmengResonanceTime.get(entry.getKey()) - now)) : 0)
.build();
hongmengResonancesProto.add(hongmengHeroInfo);
}
hongmengInfoIndication.addAllHongmengGuards(hongmengGuardsProto).addAllHongmengAdditions(hongmengAdditions)
.addAllHongmengResonacnes(hongmengResonancesProto).setHongmengTabletMax(tabletMax).build();
}
// 返回协议
if (judge) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.HONGMENG_GET_INFO_RESPONSE_VALUE, hongmengInfoIndication.build(), true);
} else {
if (hongmengInfoIndication.getHongmengGuardsCount() > 0 || hongmengInfoIndication.getHongmengAdditionsCount() > 0 || hongmengInfoIndication.getHongmengResonacnesCount() > 0) {
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.HONGMENG_INFO_INDICATION_VALUE, hongmengInfoIndication.build(), true);
}
} }
} }