鸿蒙阵

back_recharge
jiahuiwen 2020-12-17 15:04:46 +08:00
parent ed1e5e1233
commit 6a1faf574c
7 changed files with 234 additions and 40 deletions

View File

@ -204,6 +204,19 @@ public class GetPlayerInfoHandler extends BaseHandler{
.build();
hongmengHeroInfos.add(hongmengHeroInfo);
}
// 组装鸿蒙守卫或者鸿蒙使者信息
List<PlayerInfoProto.HongmengHeroInfo> hongmengGuardsProto = new ArrayList<>();
Map<Integer, String> hongmengGuards = heroManager.getHongmengGuards();
Map<Integer, Long> hongmengGuardTime = heroManager.getHongmengGuardTime();
for (Map.Entry<Integer, String> entry : hongmengGuards.entrySet()) {
PlayerInfoProto.HongmengHeroInfo hongmengHeroInfo = PlayerInfoProto.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) / 1000) : 0)
.build();
hongmengGuardsProto.add(hongmengHeroInfo);
}
List<PlayerInfoProto.HongmengAddition> hongmengAdditions = new ArrayList<>();
Map<HongMengAttributeEnum, HongMengAddAttribute> resonanceAddition = heroManager.getResonanceAddition();
for (Map.Entry<HongMengAttributeEnum, HongMengAddAttribute> entry : resonanceAddition.entrySet()) {
@ -249,7 +262,7 @@ public class GetPlayerInfoHandler extends BaseHandler{
.setExpeditionLeve(user.getExpeditionManager().getExpeditionLeve())
.setHadLuckTime( user.getPlayerInfoManager().getLuckWheelLimitTime())
.setHadAdvanceLuckTime(user.getPlayerInfoManager().getLuckAdvanceWheelLimitTime())
.addAllHongmengGuards(heroManager.getHongmengGuard())
.addAllHongmengGuards(hongmengGuardsProto)
.setHongmengTablet(heroManager.getHongmengTablet())
.addAllHongmengHeroInfos(hongmengHeroInfos)
.addAllHongmengAdditions(hongmengAdditions)

View File

@ -17,6 +17,7 @@ public class HongmengCleanTimeRequestHandler extends BaseHandler<HeroInfoProto.C
@Override
public void processWithProto(ISession session, HeroInfoProto.CleanResonanceTimeRequest proto) throws Exception {
int gridId = proto.getGridId();
HeroLogic.getInstance().cleanTime(session, MessageTypeProto.MessageType.HONGMENG_CLEAN_TIME_RESPONSE, gridId);
int type = proto.getType();
HeroLogic.getInstance().cleanTime(session, MessageTypeProto.MessageType.HONGMENG_CLEAN_TIME_RESPONSE, gridId, type);
}
}

View File

@ -1,5 +1,7 @@
package com.ljsd.jieling.handler.hero;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.network.session.ISession;
@ -16,10 +18,20 @@ public class HongmengResonanceRequestHandler extends BaseHandler<HeroInfoProto.R
@Override
public void processWithProto(ISession session, HeroInfoProto.ResonanceRequest proto) throws Exception {
// 1:共鸣 2卸下共鸣神将 3:卸下鸿蒙使者 4:上阵鸿蒙使者
if (proto.getType() == 1) {
HeroLogic.getInstance().resonance(session, MessageTypeProto.MessageType.HONGMENG_RESONANCE_RESPONSE, proto.getHeroId(), proto.getGridId());
} else {
} else if (proto.getType() == 2){
HeroLogic.getInstance().unLoadResonance(session, MessageTypeProto.MessageType.HONGMENG_RESONANCE_RESPONSE, proto.getGridId());
}
else if (proto.getType() == 3){
HeroLogic.getInstance().unLoadHongmengTableHero(session, MessageTypeProto.MessageType.HONGMENG_RESONANCE_RESPONSE, proto.getGridId());
}
else if (proto.getType() == 4){
HeroLogic.getInstance().addHongmengTableHero(session, MessageTypeProto.MessageType.HONGMENG_RESONANCE_RESPONSE, proto.getHeroId(), proto.getGridId());
} else {
LOGGER.info("processWithProto uid=>{} HONGMENG_RESONANCE_REQUEST wrong type=>{}", session.getUid(), proto.getType());
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
}
}

View File

@ -3,6 +3,7 @@ package com.ljsd.jieling.handler.hero;
import com.google.protobuf.GeneratedMessage;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
@ -18,4 +19,9 @@ public class HongmengUpgradRequestHandler extends BaseHandler {
public void processWithProto(ISession iSession, GeneratedMessage proto) throws Exception {
HeroLogic.getInstance().updateHongmengTablet(iSession, MessageTypeProto.MessageType.HONGMENG_UPGRADE_RESPONSE);
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
HeroLogic.getInstance().updateHongmengTablet(iSession, MessageTypeProto.MessageType.HONGMENG_UPGRADE_RESPONSE);
}
}

View File

@ -161,6 +161,11 @@ public class Hero extends MongoBase {
* @return
*/
public int getLevel(HeroManager heroManager) {
// 如果鸿蒙碑开启 返回鸿蒙系统中神将返回鸿蒙碑等级
if (heroManager.getHongmengTablet() > 0 && (heroManager.getResonances().values().contains(id) ||
heroManager.getHongmengGuards().values().contains(id))) {
return heroManager.getHongmengTablet();
}
if (heroManager.getResonances().values().contains(id)) {
HongMengAddAttribute hongMengAddAttribute = heroManager.getResonanceAddition().get(HongMengAttributeEnum.LEVEL);
if (hongMengAddAttribute != null) {

View File

@ -30,8 +30,11 @@ public class HeroManager extends MongoBase {
this.setRootCollection(User._COLLECTION_NAME);
}
// 鸿蒙守卫
private List<String> hongmengGuard = new ArrayList<>();
// 鸿蒙守卫/鸿蒙使者 <格子id英雄id>
private Map<Integer, String> hongmengGuards = new HashMap<>();
// 鸿蒙守卫/鸿蒙使者<格子id冷却时间>
private Map<Integer, Long> hongmengGuardTime = new HashMap<>();
// 共鸣英雄<格子id英雄id>
private Map<Integer, String> resonances = new HashMap<>();
// 共鸣英雄<格子id冷却时间>
@ -142,13 +145,32 @@ public class HeroManager extends MongoBase {
removeString(getMongoKey()+"skinInfo."+skinId);
}
public List<String> getHongmengGuard() {
return hongmengGuard;
public Map<Integer, String> getHongmengGuards() {
return hongmengGuards;
}
public void setHongmengGuard(List<String> hongmengGuard) {
this.hongmengGuard = hongmengGuard;
updateString("hongmengGuard", hongmengGuard);
public void setHongmengGuards(Map<Integer, String> hongmengGuards) {
this.hongmengGuards = hongmengGuards;
updateString("hongmengGuards", hongmengGuards);
}
public void updateHongmengGuards(int key, String heroId) {
this.hongmengGuards.put(key, heroId);
updateString("hongmengGuards." + key, heroId);
}
public Map<Integer, Long> getHongmengGuardTime() {
return hongmengGuardTime;
}
public void setHongmengGuardTime(Map<Integer, Long> hongmengGuardTime) {
this.hongmengGuardTime = hongmengGuardTime;
updateString("hongmengGuardTime", hongmengGuardTime);
}
public void updateHongmengGuardTime(int key, long targetTime) {
this.hongmengGuardTime.put(key, targetTime);
updateString("hongmengGuardTime." + key, targetTime);
}
public Map<Integer, String> getResonances() {

View File

@ -1071,6 +1071,14 @@ public class HeroLogic{
if(isInTeam(user,heroId,1)){
Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid()));
}
if (targetHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_awaken_hero_content_parm)) {
Set<Integer> hongmengMaxLevel = heroManager.getHongmengMaxLevel();
boolean add = hongmengMaxLevel.add(targetHero.getTemplateId());
if (add) {
// 增加鸿蒙碑神将等级
heroManager.setHongmengMaxLevel(hongmengMaxLevel);
}
}
MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,baseBuilder.build(),true);
// 觉醒飘字
if (targetHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_awaken_hero_content_parm)) {
@ -3406,11 +3414,15 @@ public class HeroLogic{
* 鸿
* @param user
*/
public void addOrUpdateHongmeng(User user) {
public void addOrUpdateHongmeng(User user) throws Exception {
if (user.getPlayerInfoManager().getLevel() < SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_OPENLEVEL)) {
return;
}
HeroManager heroManager = user.getHeroManager();
// 鸿蒙碑开启,不需要再更新鸿蒙使者和鸿蒙守卫
if (heroManager.getHongmengTablet() > 0) {
return;
}
Collection<Hero> values = heroManager.getHeroMap().values();
List<Hero> heroes = new ArrayList<>(values);
Collections.sort(heroes, new Comparator<Hero>() {
@ -3423,7 +3435,7 @@ public class HeroLogic{
return Integer.compare(hero2.getStar(), hero1.getStar());
}
});
List<String> hongmengs = new ArrayList<>();
Map<Integer, String> hongmengs = new HashMap<>();
int defaultValue = 1000;
// 只要任意鸿蒙守卫中有未穿戴装备的部位,就不会触发装备共鸣,共鸣区域放入神将时不再自动卸下装备 1:不卸下装备
HongMengAddAttribute hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue);
@ -3442,6 +3454,7 @@ public class HeroLogic{
Collection<String> values2 = heroManager.getResonances().values();
Map<String, PropertyItem> equipMap = user.getEquipManager().getEquipMap();
String[] openLevel = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_UPGRADE_LIMIT).split("#");
int key = 1;
for (int i = 0; i < heroes.size(); i++) {
Hero hero = heroes.get(i);
if (values2.contains(hero.getId())) {
@ -3459,15 +3472,16 @@ public class HeroLogic{
}
// 等级
hongmengLevel(resonanceLevel, hero);
hongmengs.add(hero.getId());
hongmengs.put(key++, hero.getId());
if (hongmengs.size() >= Integer.parseInt(openLevel[0])) {
break;
}
}
// 不够6个无法开启鸿蒙阵
if (hongmengs.size() < Integer.parseInt(openLevel[0])) {
return;
}
heroManager.setHongmengGuard(hongmengs);
heroManager.setHongmengGuards(hongmengs);
// 第一个格子免费开启
Map<Integer, String> resonances = heroManager.getResonances();
if (!resonances.containsKey(1)) {
@ -3502,6 +3516,14 @@ public class HeroLogic{
if (tablet == 1 && 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(user, 1);
}
}
}
@ -3649,7 +3671,7 @@ public class HeroLogic{
LOGGER.info("resonance uid=>{} no the heroId=>{}", user.getId(), heroId);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
if (heroManager.getHongmengGuard().contains(heroId)) {
if (heroManager.getHongmengGuards().values().contains(heroId)) {
LOGGER.info("resonance uid=>{} the heroId=>{} is HongmengGuard", user.getId(), heroId);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
@ -3666,6 +3688,12 @@ public class HeroLogic{
}
// 添加到共鸣区
heroManager.updateResonances(index, heroId);
HongMengAddAttribute hongMengAddAttribute = heroManager.getResonanceAddition().get(HongMengAttributeEnum.EQUIP);
if (hongMengAddAttribute.value == -1) {
Map<Integer, Integer> equipByPositionMap = hero.getEquipByPositionMap();
equipByPositionMap.clear();
hero.setEquipByPositionMap(equipByPositionMap);
}
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null);
}
@ -3707,33 +3735,64 @@ public class HeroLogic{
* @param index
* @throws Exception
*/
public void cleanTime(ISession session, MessageTypeProto.MessageType messageType, int index) throws Exception {
public void cleanTime(ISession session, MessageTypeProto.MessageType messageType, int index, int type) throws Exception {
User user = UserManager.getUser(session.getUid());
HeroManager heroManager = user.getHeroManager();
Map<Integer, String> resonances = heroManager.getResonances();
String resonanceInfo = resonances.get(index);
if (resonanceInfo == null) {
LOGGER.info("cleanTime uid=>{} the index not open=>{}", user.getId(), index);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
if (type == 1) {
Map<Integer, String> resonances = heroManager.getResonances();
String resonanceInfo = resonances.get(index);
if (resonanceInfo == null) {
LOGGER.info("cleanTime uid=>{} the index not open=>{}", user.getId(), index);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Map<Integer, Long> resonancesTime = heroManager.getResonancesTime();
Long unloadTime = resonancesTime.get(index);
if (unloadTime == null || unloadTime <= TimeUtils.now()) {
LOGGER.info("cleanTime uid=>{} time =>{}", user.getId(), unloadTime);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
String[] stringValue = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_LATTICE_PRICE).split("#");
long time = unloadTime - TimeUtils.now();
int count = (int) (time / 1000 * Integer.parseInt(stringValue[0]));
Map<Integer, Integer> cost = new HashMap<>(1);
cost.put(Integer.parseInt(stringValue[1]), count);
boolean checkCost = ItemUtil.checkCost(user, cost);
if (!checkCost) {
LOGGER.info("cleanTime uid=>{} item not enough =>{}", user.getId(), unloadTime);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
ItemUtil.itemCost(user, cost, BIReason.CLEAR_HONGMENG_GRAID, index);
heroManager.updateResonancesTime(index, 0L);
} else {
if (heroManager.getHongmengTablet() == 0) {
LOGGER.info("cleanTime uid=>{} the HongmengTablet not open=>{}", user.getId(), index);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Map<Integer, String> hongmengGuards = heroManager.getHongmengGuards();
String resonanceInfo = hongmengGuards.get(index);
if (resonanceInfo == null) {
LOGGER.info("cleanTime uid=>{} the index not open=>{}", user.getId(), index);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Map<Integer, Long> hongmengGuardTime = heroManager.getHongmengGuardTime();
Long unloadTime = hongmengGuardTime.get(index);
if (unloadTime == null || unloadTime <= TimeUtils.now()) {
LOGGER.info("cleanTime uid=>{} time =>{}", user.getId(), unloadTime);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
String[] stringValue = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_LATTICE_PRICE).split("#");
long time = unloadTime - TimeUtils.now();
int count = (int) (time / 1000 * Integer.parseInt(stringValue[0]));
Map<Integer, Integer> cost = new HashMap<>(1);
cost.put(Integer.parseInt(stringValue[1]), count);
boolean checkCost = ItemUtil.checkCost(user, cost);
if (!checkCost) {
LOGGER.info("cleanTime uid=>{} item not enough =>{}", user.getId(), unloadTime);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
ItemUtil.itemCost(user, cost, BIReason.CLEAR_HONGMENG_GRAID, index);
heroManager.updateHongmengGuardTime(index, 0L);
}
Map<Integer, Long> resonancesTime = heroManager.getResonancesTime();
Long unloadTime = resonancesTime.get(index);
if (unloadTime == null || unloadTime <= TimeUtils.now()) {
LOGGER.info("cleanTime uid=>{} time =>{}", user.getId(), unloadTime);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
String[] stringValue = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_LATTICE_PRICE).split("#");
long time = unloadTime - TimeUtils.now();
int count = (int) (time / 1000 * Integer.parseInt(stringValue[0]));
Map<Integer, Integer> cost = new HashMap<>(1);
cost.put(Integer.parseInt(stringValue[1]), count);
boolean checkCost = ItemUtil.checkCost(user, cost);
if (!checkCost) {
LOGGER.info("cleanTime uid=>{} item not enough =>{}", user.getId(), unloadTime);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
ItemUtil.itemCost(user, cost, BIReason.CLEAR_HONGMENG_GRAID, index);
heroManager.updateResonancesTime(index, 0L);
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null);
}
@ -3751,7 +3810,7 @@ public class HeroLogic{
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
String[] split = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_UPGRADE_LIMIT).split("#");
int maxLevel = heroManager.getHongmengMaxLevel().size() * SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_ONEHERO_OPENLEVEL) + Integer.parseInt(split[0]);
int maxLevel = heroManager.getHongmengMaxLevel().size() * SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_ONEHERO_OPENLEVEL) + Integer.parseInt(split[1]);
if (heroManager.getHongmengTablet() >= maxLevel) {
LOGGER.info("updateHongmengTablet uid=>{} curLevel={} maxLevel =>{}", user.getId(), heroManager.getHongmengTablet(), maxLevel);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
@ -3772,4 +3831,80 @@ public class HeroLogic{
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null);
}
/**
* 鸿
* @param session
* @param messageType
* @param heroId 鸿id
* @param index 鸿
*/
public void addHongmengTableHero(ISession session, MessageTypeProto.MessageType messageType, String heroId, int index) throws Exception {
User user = UserManager.getUser(session.getUid());
HeroManager heroManager = user.getHeroManager();
if (heroManager.getHongmengTablet() == 0) {
LOGGER.info("addHongmengTableHero uid=>{} HongmengTablet==0", user.getId());
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Hero hero = heroManager.getHeroMap().get(heroId);
if (hero == null) {
LOGGER.info("addHongmengTableHero uid=>{} no the heroId=>{}", user.getId(), heroId);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
if (heroManager.getHongmengGuards().values().contains(heroId)) {
LOGGER.info("addHongmengTableHero uid=>{} the heroId=>{} is HongmengGuard", user.getId(), heroId);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Map<Integer, String> resonances = heroManager.getHongmengGuards();
String resonanceInfo = resonances.get(index);
if (resonanceInfo == null || resonanceInfo.isEmpty()) {
LOGGER.info("addHongmengTableHero uid=>{} not hero key=>{}", user.getId(), index);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Map<Integer, Long> resonancesTime = heroManager.getHongmengGuardTime();
if (resonancesTime.get(index) != null && resonancesTime.get(index) > TimeUtils.now()) {
LOGGER.info("addHongmengTableHero uid=>{} time =>{}", user.getId(), resonancesTime.get(index));
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
// 添加鸿蒙碑
heroManager.updateHongmengGuards(index, heroId);
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null);
}
/**
* 鸿
* @param session
* @param messageType
* @param index
* @throws Exception
*/
public void unLoadHongmengTableHero(ISession session, MessageTypeProto.MessageType messageType, int index) throws Exception{
User user = UserManager.getUser(session.getUid());
HeroManager heroManager = user.getHeroManager();
if (heroManager.getHongmengTablet() == 0) {
LOGGER.info("unLoadHongmengTableHero uid=>{} HongmengTablet==0", user.getId());
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Map<Integer, String> resonances = heroManager.getHongmengGuards();
String heroId = resonances.get(index);
if (heroId == null || heroId.isEmpty()) {
LOGGER.info("unLoadHongmengTableHero uid=>{} no hero=>{}", user.getId(), index);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
Hero hero = heroManager.getHero(heroId);
if (hero == null) {
LOGGER.info("unLoadHongmengTableHero uid=>{} cur hero is null {}", user.getId(), heroId);
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
}
heroManager.updateHongmengGuards(index, "");
heroManager.updateHongmengGuardTime(index, TimeUtils.now() + SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_LATTICE_WAIT_TIME) * 1000);
HeroInfoProto.ResonanceResponse resonanceResponse = HeroInfoProto.ResonanceResponse
.newBuilder()
.setLeftTime(SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_LATTICE_WAIT_TIME))
.build();
MessageUtil.sendMessage(session, 1, messageType.getNumber(), resonanceResponse);
}
}