Merge branch 'dev_dh_level' into master_test_gn

# Conflicts:
#	serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java
back_recharge
duhui 2021-06-01 11:42:31 +08:00
commit bea39c6fc7
2 changed files with 47 additions and 24 deletions

View File

@ -177,13 +177,15 @@ public class GMRequestHandler extends BaseHandler{
int exp = 0;
Map<Integer, SPlayerLevelConfig> sPlayerLevelConfigMap = SPlayerLevelConfig.getsPlayerLevelConfigMap();
for (Map.Entry<Integer, SPlayerLevelConfig> entry :sPlayerLevelConfigMap.entrySet()){
int leve = entry.getKey();
SPlayerLevelConfig value = entry.getValue();
if (prarm1 > leve){
exp += value.getExp();
// key
int keyLevel = entry.getKey();
// 当前等级
int nowLevel = cUser.getPlayerInfoManager().getLevel();
if (prarm1 > keyLevel && keyLevel >= nowLevel){
exp += entry.getValue().getExp();
}
}
ItemUtil.userLevelUp(cUser,exp);
ItemUtil.userLevelUp(cUser,exp-cUser.getPlayerInfoManager().getExp());
break;
case GlobalGm.ADOPT_ALL_DIFFICULTY:
while (true){

View File

@ -839,21 +839,35 @@ public class ItemUtil {
// 负值验证
return;
}
int maxExp = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(SPlayerLevelConfig.getsPlayerLevelConfigMap().size()).getExp();
if (playerInfoManager.getExp() >= maxExp) {
// 等级配置表
Map<Integer, SPlayerLevelConfig> levelConfigMap = SPlayerLevelConfig.getsPlayerLevelConfigMap();
SPlayerLevelConfig maxLevel = levelConfigMap.get(levelConfigMap.size());
// 等级验证
if (playerInfoManager.getLevel() >= maxLevel.getPlayerLv()) {
return;
}
long curExp = MathUtils.setBetweenWithMax(playerInfoManager.getExp() + addExp, 0L, maxExp);
// 从1级升到满级需要得经验
long totalExp = levelConfigMap.values().stream().mapToLong(SPlayerLevelConfig::getExp).sum();
// 最高等级得经验是多余得,需要减去
totalExp -= maxLevel.getExp();
// 获取最大经验
long exp = playerInfoManager.getExp() + addExp;
if (exp > totalExp){
exp = totalExp - playerInfoManager.getExp();
}
int oldLevel = playerInfoManager.getLevel();
// 当前等级表配置
SPlayerLevelConfig sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(oldLevel);
int levelUpExp;
if (sPlayerLevelConfig == null) {
levelUpExp = maxExp;
} else {
levelUpExp = sPlayerLevelConfig.getExp();
throw new ErrorCodeException("服务器表配置错误");
}
while (curExp >= levelUpExp && curExp <= maxExp) {
int levelUpExp = sPlayerLevelConfig.getExp();
// 循环,直到经验不足继续升级或者等级最高
while (exp >= levelUpExp && playerInfoManager.getLevel() < maxLevel.getPlayerLv()) {
// 玩家等级2级发送道具改名卡
if(playerInfoManager.getLevel()==2&&playerInfoManager.getNickName().equals(String.valueOf(playerInfoManager.getRootId()))){
//TODO 走表
String title = SErrorCodeEerverConfig.getI18NMessage("change_playername_title");
@ -866,25 +880,32 @@ public class ItemUtil {
MailLogic.getInstance().sendMail(user.getId(), title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME);
}
if (sPlayerLevelConfig == null) {
levelUpExp = Integer.MAX_VALUE;
} else {
if (curExp >= sPlayerLevelConfig.getExp()) {
curExp = curExp - sPlayerLevelConfig.getExp();
Poster.getPoster().dispatchEvent(new UserLevelEvent(user.getId(),playerInfoManager.getLevel()+1));
playerInfoManager.setLevel(playerInfoManager.getLevel()+1);
sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(playerInfoManager.getLevel());
levelUpExp = sPlayerLevelConfig.getExp();
}
// 升一级减去一次经验
exp -= sPlayerLevelConfig.getExp();
// 等级更新
playerInfoManager.setLevel(playerInfoManager.getLevel()+1);
// 升级事务处理
Poster.getPoster().dispatchEvent(new UserLevelEvent(user.getId(),playerInfoManager.getLevel()));
// 获取下一级得经验
sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(playerInfoManager.getLevel());
if (sPlayerLevelConfig == null){
break;
}
levelUpExp = sPlayerLevelConfig.getExp();
// 玩家升级报送
Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.ROLE_LEVEUP_EVENT);
}
playerInfoManager.setExp(curExp);
// 更新经验
playerInfoManager.setExp((int) exp);
// 玩家升级, 埋点推送和任务处理
if (playerInfoManager.getLevel() > oldLevel) {
ReportUtil.onReportEvent(user, ReportEventEnum.LEVEL_UP.getType(),oldLevel,playerInfoManager.getLevel()-oldLevel,playerInfoManager.getLevel());
user.getUserMissionManager().onGameEvent(user, GameEvent.USER_LEVELUP,oldLevel+1,playerInfoManager.getLevel());
}
// 在线玩家消息推送
ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
if(sessionByUid!=null){
PlayerInfoProto.UpdateUserExpIndicaiton build = PlayerInfoProto.UpdateUserExpIndicaiton.newBuilder().setExp((int)playerInfoManager.getExp()).setLevel(playerInfoManager.getLevel()).build();