法宝等级上限

back_recharge
duhui 2022-08-30 15:59:09 +08:00
parent a1fcc56f01
commit 23e632dd30
7 changed files with 105 additions and 34 deletions

View File

@ -410,4 +410,5 @@ public interface BIReason {
int COMPARENUM_LEVEL_REWARD = 1306; // 比数字小游戏过关奖励
int COMPARENUM_TOTAL_REWARD = 1307; // 比数字小游戏章节累计奖励
int MAXESPECIALEQUIPHANDLE = 1309; //法宝最高上限回滚处理
}

View File

@ -1,10 +1,12 @@
package com.ljsd.jieling.handler;
import com.alibaba.fastjson.JSON;
import com.ljsd.GameApplication;
import com.ljsd.jieling.config.clazzStaticCfg.HeroStaticConfig;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.map.MapManager;
import com.ljsd.jieling.jbean.ActivityMission;
@ -49,6 +51,7 @@ import rpc.protocols.PlayerInfoProto;
import util.TimeUtils;
import java.util.*;
import java.util.stream.Collectors;
@Component
public class GetPlayerInfoHandler extends BaseHandler{
@ -120,13 +123,9 @@ public class GetPlayerInfoHandler extends BaseHandler{
}
CommonProto.Player player = CBean2Proto.getPlayer(userId, user.getPlayerInfoManager(), user.getPlayerInfoManager().getMapId(), user.getMapManager().getCurMapId(),user.getMapManager());
CommonProto.SuddenlyBossInfo suddenlyBossInfo = CommonProto.SuddenlyBossInfo.newBuilder().setSuddBossId(mapManager.getSuddenlyBoss()).setEndTime(mapManager.getSuddenlyBossEndTime()).setFindMapId(mapManager.getFindSuddenlyBossMapId()).build();
// CommonProto.VipBaseInfo vipInfoProto = CommonProto.VipBaseInfo.newBuilder()
// .setHadTakeLevelBox(playerInfoManager.getHadTakeLevelBoxVip())
// .setVipLevel(playerInfoManager.getVipLevel()).build();
CommonProto.PlayerBindPhone playerBindPhone = CommonProto.PlayerBindPhone.newBuilder()
.setPhoneNum(user.getPlayerInfoManager().getPhoneBindInfo().getPhoneNum())
.setState(user.getPlayerInfoManager().getPhoneBindInfo().getState()).build();
NewRechargeInfo newRechargeInfo = playerInfoManager.getNewRechargeInfo();
HeroManager heroManager = user.getHeroManager();
Map<Integer, Integer> totalCountMap = heroManager.getTotalCount();
int alreadyCount =0;
@ -251,17 +250,8 @@ public class GetPlayerInfoHandler extends BaseHandler{
PlayerLogic.getInstance().soulPrintHandBookDispose(user);
// 心愿抽卡 旧玩家兼容
wishOldUserRandomNumInit(user);
//hotfix 月卡
// PlayerLogic.getInstance().getMonthCardInfo(user);
// int monthline = STableManager.getConfig(SMonthcardConfig.class).get(Global.MONTHCARDID).getPrice();
// int lmonthline = STableManager.getConfig(SMonthcardConfig.class).get(Global.LMONTHCARDID).getPrice();
// if(newRechargeInfo.getMonthRr()>=monthline&&playerInfoManager.getMonthCard().getOrDefault(1,0)==0){
// user.getPlayerInfoManager().getMonthCard().put(Global.MONTHCARDID, (int) (System.currentTimeMillis() / 1000));
// }
// if(newRechargeInfo.getsMonthRr()>=lmonthline&&playerInfoManager.getMonthCard().getOrDefault(2,0)==0){
// user.getPlayerInfoManager().getMonthCard().put(Global.LMONTHCARDID, (int) (System.currentTimeMillis() / 1000));
// Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.RECHARGE_BUY.getType(),Global.LMONTHCARDID));
// }
// 法宝最高等级处理
maxEspecialEquipHandle(user);
// 四灵试炼初始化
FourChallengeLogic.getInstance().firstGetTimes(user);
@ -559,4 +549,48 @@ public class GetPlayerInfoHandler extends BaseHandler{
}
}
/**
*
* @param user
* @throws Exception
*/
private void maxEspecialEquipHandle(User user) throws Exception {
// 公用数据
List<Hero> heroList = user.getHeroManager().getHeroMap().values().stream().collect(Collectors.toList());
Map<Integer, SCHero> heroMap = SCHero.getsCHero();
Map<Integer, Map<Integer, SEquipTalismana>> talismanaStarMap = SEquipTalismana.equipTalismanaStarMap;
int maxLimit = SSpecialConfig.getIntegerValue(SSpecialConfig.EquipTalismanaUpperLimit);
ArrayList<int[][]> itemList = new ArrayList<>();
for (Hero hero : heroList) {
// 获取英雄的法宝信息
int[] equipTalismana = heroMap.get(hero.getTemplateId()).getEquipTalismana();
if (equipTalismana == null || equipTalismana.length < 2) {
continue;
}
// 验证最高等级是否满足
int level = hero.getOriginalEspecialEquipLevel();
if (level <= maxLimit){
continue;
}
// 获得道具
TreeMap<Integer, SEquipTalismana> talismanaTreeMap = new TreeMap<>(talismanaStarMap.get(equipTalismana[1]));
Map<Integer, SEquipTalismana> subMap = talismanaTreeMap.subMap(maxLimit, level);
for (SEquipTalismana talismana : subMap.values()) {
itemList.add(talismana.getRankupBasicMaterial());
}
// 设置等级到最高
hero.updateEspecial(maxLimit);
// 更新战力
Poster.getPoster().dispatchEvent(new SaveHeroForceEvent(user.getId(),hero.getId()));
LOGGER.info("===========法宝最高等级处理道具返还玩家id{},法宝:{},原始等级:{},当前等级:{},返还道具:{}",user.getId(),equipTalismana[1],level,maxLimit,JSON.toJSONString(itemList));
}
// 道具进入背包
ItemUtil.drop(user,itemList, BIReason.MAXESPECIALEQUIPHANDLE);
// 邮件提醒
String title = SErrorCodeEerverConfig.getI18NMessage("fabao_mail_title");
String content = SErrorCodeEerverConfig.getI18NMessage("fabao_mail_txt");
MailLogic.getInstance().sendMail(user.getId(),title,content,"",TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME);
}
}

View File

@ -0,0 +1,36 @@
package com.ljsd.jieling.kefu;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SaveHeroForceEvent;
import com.ljsd.jieling.logic.dao.Hero;
import com.ljsd.jieling.logic.dao.root.User;
import config.SCHero;
import java.util.Map;
/**
* @Author hj
* @Date 2021/10/28 17:35:00
* @Description: \\fabaolv id #
* @Version 1.0
*/
public class Cmd_fabaolv extends GmRoleAbstract {
@Override
public boolean exec(String[] args) throws Exception {
String[] split = args[0].split("#");
if (split.length < 2){
return false;
}
User user = getUser();
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
for (Hero hero : heroMap.values()) {
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
if (scHero.getReadingName().equals(split[0])){
hero.updateEspecial(Integer.parseInt(split[1]));
// 更新战力
Poster.getPoster().dispatchEvent(new SaveHeroForceEvent(user.getId(),hero.getId()));
}
}
return true;
}
}

View File

@ -426,20 +426,25 @@ public class Hero extends MongoBase implements Comparable<Hero>,Cloneable {
}
public int getEspecialEquipLevel() {
int max = SSpecialConfig.getIntegerValue(SSpecialConfig.EquipTalismanaUpperLimit);
return especialEquipLevel>max ? max : especialEquipLevel;
}
public int getOriginalEspecialEquipLevel() {
return especialEquipLevel;
}
public int getEspecialEquipLevelByHongmeng(HeroManager heroManager, String heroId) {
// 英雄在共鳴池中
if (heroManager.getResonances().values().contains(heroId)) {
// 法宝
HongMengAddAttribute hongMengAddAttribute = heroManager.getResonanceAddition().get(HongMengAttributeEnum.MAGIC_WEAPON);
if (hongMengAddAttribute != null) {
// 对比本身和共鸣等级,选高的
return especialEquipLevel >= hongMengAddAttribute.value ? especialEquipLevel : hongMengAddAttribute.value;
}
}
return especialEquipLevel;
// if (heroManager.getResonances().values().contains(heroId)) {
// // 法宝
// HongMengAddAttribute hongMengAddAttribute = heroManager.getResonanceAddition().get(HongMengAttributeEnum.MAGIC_WEAPON);
// if (hongMengAddAttribute != null) {
// // 对比本身和共鸣等级,选高的
// return especialEquipLevel >= hongMengAddAttribute.value ? especialEquipLevel : hongMengAddAttribute.value;
// }
// }
return getEspecialEquipLevel();
}
public Set<String> getJewelInfo() {

View File

@ -5464,12 +5464,6 @@ public class HeroLogic {
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.HONGMENG_STELE_NEW_HAND_INDICATION.getNumber(), builder.build(), true);
}
}
// 不够6个无法开启鸿蒙阵
/*if (hongmengs.size() < Integer.parseInt(openLevel[0])) {
return;
}*/
// 守卫/使者英雄池
Map<Integer, String> guards = heroManager.getHongmengGuards();
// 英雄装备
@ -5483,7 +5477,6 @@ public class HeroLogic {
hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue);
soulEquip = new HongMengAddAttribute(0, defaultValue);
spiritEquip = new HongMengAddAttribute(0, defaultValue);
especialEquipLevel = new HongMengAddAttribute(0, defaultValue);
break;
}
// 装备
@ -5491,8 +5484,6 @@ public class HeroLogic {
// 魂宝 灵宝
soulOrSpirit(soulEquip, 1, equipMap, hero);
soulOrSpirit(spiritEquip, 2, equipMap, hero);
// 法宝
especialAdd(especialEquipLevel, hero);
}
}
@ -5518,7 +5509,6 @@ public class HeroLogic {
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);
/*** ============================= 开始组装鸿蒙阵信息 ==================================== **/

View File

@ -704,6 +704,10 @@ public class ItemLogic {
}
int especialEquipId = scHero.getEquipTalismana()[1];
int maxLimit = SSpecialConfig.getIntegerValue(SSpecialConfig.EquipTalismanaUpperLimit);
if (hero.getEspecialEquipLevel() >= maxLimit){
throw new ErrorCodeException(ErrorCode.newDefineCode("法宝已最大限制等级"));
}
SEquipTalismana sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId).get(hero.getEspecialEquipLevel());
if (sEquipTalismana == null || sEquipTalismana.getRankupBasicMaterial() == null|| sEquipTalismana.getRankupBasicMaterial().length==0) {
throw new ErrorCodeException(ErrorCode.newDefineCode("法宝已最大等级"));

View File

@ -132,6 +132,7 @@ public class SSpecialConfig implements BaseConfig {
public static final String CHANGE_CAMP_COST = "ChangeCampCost";//神转换阵营消耗
public static final String GodSignOpenStar = "GodSignOpenStar";//神印格子开启所需神将星级
public static final String ChangingPosUnlock = "ChangingPosUnlock";//3个变身卡化身位解锁所需的化身之力等级
public static final String EquipTalismanaUpperLimit = "EquipTalismanaUpperLimit ";//法宝等级上限
@Override
public void init() throws Exception {