diff --git a/conf/BattleMain.lua b/conf/BattleMain.lua index 2d38bae33..853ab31c2 100644 --- a/conf/BattleMain.lua +++ b/conf/BattleMain.lua @@ -129,7 +129,6 @@ local function addBattleData() end function BattleMain.Execute(args, fightData, optionData) - print("trfghjdfgucvhbjnfdcgvj") _seed = args.seed _type = args.type _fightData = fightData diff --git a/serverlogic/src/main/java/com/ljsd/GameApplication.java b/serverlogic/src/main/java/com/ljsd/GameApplication.java index b629c0332..80b5d2ad9 100644 --- a/serverlogic/src/main/java/com/ljsd/GameApplication.java +++ b/serverlogic/src/main/java/com/ljsd/GameApplication.java @@ -18,6 +18,7 @@ import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.dao.GuilidManager; import com.ljsd.jieling.logic.dao.MailingSystemManager; +import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.fight.CheckFight; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.netty.server.NettyGameServer; @@ -191,6 +192,7 @@ public class GameApplication { } LOGGER.info("close->nettyServer.stop-------------------"); + configurableApplicationContext.close(); LOGGER.info("-------------------configurableApplicationContext.close-------------------"); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SAdventureConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SAdventureConfig.java deleted file mode 100644 index 08ce9706b..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SAdventureConfig.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.ljsd.jieling.config; - -import com.ljsd.jieling.logic.STableManager; -import com.ljsd.jieling.logic.Table; - -import java.util.Map; - -@Table(name ="AdventureConfig") -public class SAdventureConfig implements BaseConfig { - - private int id; - - private String areaName; - - private int[] openLevel; - - private int[][] areaLevelLimit; - - private int systemBoss; - - private int systemBossTime; - - private int[] baseRewardGroup; - - private int[][] upgradeConsume; - - private int[][] randomRewardGroup; - - private int[][][] invasionBoss; - - private int[][][] invasionBossReward; - - private int invasionBossTime; - - private int invasionBossRefresh; - - private int invasionBossHolding; - - private static Map config; - - - public String getAreaName() { - return areaName; - } - - @Override - public void init() throws Exception { - config = STableManager.getConfig(SAdventureConfig.class); - } - - public static Map getConfig() { - return config; - } - - public int getId() { - return id; - } - - public int[] getOpenLevel() { - return openLevel; - } - - public int[][] getAreaLevelLimit() { - return areaLevelLimit; - } - - public int getSystemBoss() { - return systemBoss; - } - - public int getSystemBossTime() { - return systemBossTime; - } - - public int[] getBaseRewardGroup() { - return baseRewardGroup; - } - - public int[][] getUpgradeConsume() { - return upgradeConsume; - } - - public int[][] getRandomRewardGroup() { - return randomRewardGroup; - } - - public int[][][] getInvasionBoss() { - return invasionBoss; - } - - public int[][][] getInvasionBossReward() { - return invasionBossReward; - } - - public int getInvasionBossTime() { - return invasionBossTime; - } - - public int getInvasionBossRefresh() { - return invasionBossRefresh; - } - - public int getInvasionBossHolding() { - return invasionBossHolding; - } - - -} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SMainLevelConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SMainLevelConfig.java new file mode 100644 index 000000000..afd262cda --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SMainLevelConfig.java @@ -0,0 +1,109 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.Map; + +@Table(name ="MainLevelConfig") +public class SMainLevelConfig implements BaseConfig { + + private int id; + + private int nextLevel; + + private int levelLimit; + + private int monsterGroup; + + private int exp; + + private int[] reward; + + private int[] randomRewardMin; + + private int[] randomReward; + + private int recommendFightAbility; + + private int rankTime; + + private int[][] invasionBoss; + + private int[][] invasionBossReward; + + private int invasionBossTime; + + private int invasionBossRefresh; + + private int invasionBossHolding; + + + public static Map config; + + @Override + public void init() throws Exception { + config = STableManager.getConfig(SMainLevelConfig.class); + } + + + public int getId() { + return id; + } + + public int getLevelLimit() { + return levelLimit; + } + + public int getMonsterGroup() { + return monsterGroup; + } + + public int getExp() { + return exp; + } + + public int[] getReward() { + return reward; + } + + public int[] getRandomRewardMin() { + return randomRewardMin; + } + + public int[] getRandomReward() { + return randomReward; + } + + public int getRecommendFightAbility() { + return recommendFightAbility; + } + + public int getRankTime() { + return rankTime; + } + + public int[][] getInvasionBoss() { + return invasionBoss; + } + + public int[][] getInvasionBossReward() { + return invasionBossReward; + } + + public int getInvasionBossTime() { + return invasionBossTime; + } + + public int getInvasionBossRefresh() { + return invasionBossRefresh; + } + + public int getInvasionBossHolding() { + return invasionBossHolding; + } + + public int getNextLevel() { + return nextLevel; + } +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/STestWelfare.java b/serverlogic/src/main/java/com/ljsd/jieling/config/STestWelfare.java index 9f6f2b995..9929004cf 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/STestWelfare.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/STestWelfare.java @@ -19,7 +19,7 @@ public class STestWelfare implements BaseConfig { @Override public void init() throws Exception { - testWelfareMap= STableManager.getConfig(STestWelfare.class); + //testWelfareMap= STableManager.getConfig(STestWelfare.class); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoKey.java index 6dede08f1..b770bfbae 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoKey.java @@ -41,4 +41,5 @@ public class MongoKey { public final static String guildMyInfo = "guildMyInfo"; public final static String questionManager = "questionManager"; public final static String bloodyInfo = "bloodyInfo"; + public final static String mainLevelManager = "mainLevelManager"; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index aa8969b5a..05ef9a72a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -84,6 +84,8 @@ public interface BIReason { int DIRECT_BUY = 52; // 直购 + int MAIN_LEVEL_STATE_REWARD = 53; // 关卡挂机奖励 + //道具消耗原因 1000开头 int ADVENTURE_UPLEVEL_CONSUME = 1000; //秘境升级 @@ -151,4 +153,6 @@ public interface BIReason { int FAMILY_SET_ICON = 1037;//工会修改图腾 + int EXCHANGE_ACTIVITY_CLOSE = 1038; + } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java index 1c2baf820..2cc0c3fd8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java @@ -9,9 +9,11 @@ import com.ljsd.jieling.ktbeans.KtEventUtils; import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; import com.ljsd.jieling.ktbeans.*; import com.ljsd.jieling.ktbeans.parmsBean.*; +import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; import com.ljsd.jieling.logic.dao.UserRecentLoginInfo; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.UserManager; +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; @@ -20,8 +22,12 @@ import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.mongodb.core.aggregation.ArrayOperators; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Map; + @Component public class LoginRequestHandler extends BaseHandler { @@ -111,10 +117,13 @@ public class LoginRequestHandler extends BaseHandler uid={},fightId={}, levelDifficulty is not allow ", uid, fightId); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); + return; + } + + List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); + if (teamPosHeroInfos == null || teamPosHeroInfos.size() == 0) { + LOGGER.info("startLevelDifficultyFight==> uid={},fightId={},teamId={}", uid, fightId, teamId); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "阵容有误!!"); + return; + } + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); + + KtEventUtils.onKtEvent(user,ParamEventBean.UserGameType,KTGameType.STORY.getIndex(),fightId); + user.getTeamPosManager().setCurTeamPosId(teamId); + String fightInfo = fightId + "#" + teamId; + String key = RedisKey.getKey(RedisKey.LEVE_DIFFICULTY_INFO, String.valueOf(uid), false); + RedisUtil.getInstence().set(key, fightInfo, sMainLevelConfig.getRankTime() + 100); + //扣除预先道具 + FightInfoProto.FightStartResponse.Builder fightStartResponse = FightInfoProto.FightStartResponse.newBuilder(); + BehaviorUtil.getLevelDifficultyifficuFightInfo(user, sMainLevelConfig.getMonsterGroup(), teamId, sMainLevelConfig.getRankTime(), fightStartResponse, RedisKey.LEVE_DIFFICULTY_FIGHT); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightStartResponse.build(), true); + } + + public void endMainLevelFight(ISession session, String frames, int fightId, MessageTypeProto.MessageType messageType) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + String fightKey = RedisKey.getKey(RedisKey.LEVE_DIFFICULTY_INFO, String.valueOf(uid), false); + String fightInfos = (String) RedisUtil.getInstence().get(fightKey); + if (fightInfos.isEmpty()) { + LOGGER.info("endFight() uid=>{} fightKey={},fightId={} fightInfos == null", uid, fightKey, fightId); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); + return; + } + String[] split = fightInfos.split("#"); + int checkFightId = Integer.parseInt(split[0]); + if (fightId != checkFightId) { + LOGGER.info("endFight() uid=>{} fightId=>{},checkFightId={}", uid, fightId, checkFightId); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); + return; + } + String key = RedisKey.getKey(RedisKey.LEVE_DIFFICULTY_FIGHT, Integer.toString(user.getId()), false); + Map valueMap = RedisUtil.getInstence().hmget(key); + RedisUtil.getInstence().del(key); + if (valueMap == null || valueMap.isEmpty()) { + LOGGER.info("endFight() uid=>{} not start fight", uid); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "此战斗已结算过 !"); + return; + } + int seed = Integer.parseInt((String) valueMap.get(RedisKey.FIGHT_SEED)); + CommonProto.FightTeamInfo.Builder builder = CommonProto.FightTeamInfo.newBuilder(); + JsonFormat.merge((String) valueMap.get(RedisKey.FIGHT_HEROES), builder); + CommonProto.FightTeamInfo fightTeamInfo = builder.build(); + List monsterTeamList = BehaviorUtil.getFightTeamInfos(valueMap); + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); + LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterTeamList); + LuaValue getOptionData = FightDataUtil.getOptionData(frames); + int[] checkResult = CheckFight.getInstance().checkFight(seed, sMainLevelConfig.getRankTime(), getFightData, getOptionData,FightType.StoryFight); + //校验结果码 1:胜利 + int resultCode = checkResult[0]; + if (resultCode == -1) { + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "战斗异常!"); + return; + } else if (resultCode == 0) { + MessageUtil.sendMessage(session, 1, messageType.getNumber(), null, true); + return; + } + //玩家升级 + userLevelUp(user, sMainLevelConfig.getExp()); + // user.getUserMissionManager().onGameEvent(user, GameEvent.STORY_FIGHT, fightId, 0,1); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMainLevelConfig.getReward(), 1, 0, BIReason.LEVELDIFFICULTY_FIGHT_REWARD); + + openNextMainLevel(user, fightId); + PlayerManager playerInfoManager = user.getPlayerInfoManager(); + FightInfoProto.UpdateUserExpIndicaiton updateUserExpIndicaiton = FightInfoProto.UpdateUserExpIndicaiton.newBuilder().setExp(playerInfoManager.getExp()).setLevel(playerInfoManager.getLevel()).build(); + + FightInfoProto.FightEndResponse.Builder fightEndResponse = FightInfoProto.FightEndResponse.newBuilder(); + fightEndResponse.setEnventDrop(drop); + fightEndResponse.setResult(resultCode); + fightEndResponse.build(); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse.build(), true); + } + + private void openNextMainLevel(User user,int fightId){ + int level = user.getPlayerInfoManager().getLevel(); + int state = 1; + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); + if(sMainLevelConfig.getNextLevel()!=-1){ + if(sMainLevelConfig.getLevelLimit()>level){ + state =-1; + } + user.getMainLevelManager().updateFight(sMainLevelConfig.getNextLevel(),state); + } + } + + public void getMainLevelInfo(ISession session) throws Exception { + User user = UserManager.getUser(session.getUid()); + MainLevelManager mainLevelManager = user.getMainLevelManager(); + PlayerInfoProto.GetMainLevelInfoResponse mainLevelInfoResponse = CBean2Proto.getMainLevelInfoResponse(mainLevelManager); + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.MAIN_LEVEL_GET_INFO_RESPONSE_VALUE,mainLevelInfoResponse,true); + } + + + /** * 兽潮开始战斗 * @@ -2501,19 +2612,10 @@ public class MapLogic { Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.ROLE_LEVEUP_EVENT); } playerInfoManager.setExp(curExp); - int itemNum = 0; if (playerInfoManager.getLevel() > oldLevel) { - for (int level = oldLevel + 1; level <= playerInfoManager.getLevel(); level++) { - sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(level); - playerInfoManager.setMaxStamina(sPlayerLevelConfig.getMaxEnergy()); - itemNum += sPlayerLevelConfig.getAddEnergy(); - } user.getUserMissionManager().onGameEvent(user, GameEvent.USER_LEVELUP,oldLevel+1,playerInfoManager.getLevel()); } - if (itemNum > 0) { - String reward = Global.STAMINA + "#" + itemNum; - ItemUtil.drop(user, StringUtil.parseFiledInt2(reward), BIReason.USER_LEVELUPSTAMINA_REWARD); - } + ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); if(sessionByUid!=null){ PlayerInfoProto.UpdateUserExpIndicaiton build = PlayerInfoProto.UpdateUserExpIndicaiton.newBuilder().setExp(playerInfoManager.getExp()).setLevel(playerInfoManager.getLevel()).build(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/FightEndRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/FightEndRequestHandler.java index 7f733c88e..cf71c48eb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/FightEndRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/FightEndRequestHandler.java @@ -33,6 +33,8 @@ public class FightEndRequestHandler extends BaseHandler { MapLogic.getInstance().endSuddlenlyFight(iSession, frames, MessageTypeProto.MessageType.FIGHT_END_RESPONSE); }else if(type == 5){ MapLogic.getInstance().endMonsterAttackFight(iSession, frames,MessageTypeProto.MessageType.FIGHT_END_RESPONSE); + }else if(type == 6){ + MapLogic.getInstance().endMainLevelFight(iSession, frames,fightId,MessageTypeProto.MessageType.FIGHT_END_RESPONSE); } else { // MapLogic.getInstance().endFight(iSession, frames, MessageTypeProto.MessageType.FIGHT_END_RESPONSE); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/MainLevelTakeStateHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/MainLevelTakeStateHandler.java new file mode 100644 index 000000000..8a5c41a3d --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/MainLevelTakeStateHandler.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.handler.map.mapHandler; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.fight.CombatLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.FightInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class MainLevelTakeStateHandler extends BaseHandler< FightInfoProto.TakeAventureRewardRequest> { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.MAIN_LEVEL_TAKE_STATE_REWARD_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, FightInfoProto.TakeAventureRewardRequest proto) throws Exception { + CombatLogic.getInstance().takeNewAdventureReward(iSession,proto.getType(),proto.getPosition()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/StartFightRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/StartFightRequestHandler.java index b2e54b596..1dd0847fd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/StartFightRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/StartFightRequestHandler.java @@ -74,9 +74,9 @@ public class StartFightRequestHandler extends BaseHandler onlineUserMap = new ConcurrentHashMap<>(10000); - public static Set orderAdventureUids= Sets.newConcurrentHashSet(); - public static void userOnline(int uid, ISession session) { sessionMap.put(uid, session); } @@ -35,7 +33,6 @@ public class OnlineUserManager { public static void userOffline(int uid) { sessionMap.remove(uid); - orderAdventureUids.remove(uid); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DefaultEmptyActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DefaultEmptyActivity.java index 5748c72cf..ac5f4fb1d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DefaultEmptyActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DefaultEmptyActivity.java @@ -1,11 +1,10 @@ package com.ljsd.jieling.logic.activity; -import com.ljsd.jieling.config.SErrorCodeEerverConfig; -import com.ljsd.jieling.config.SGlobalActivity; -import com.ljsd.jieling.config.SSevenDaysScore; -import com.ljsd.jieling.config.STreasureTaskConfig; +import com.ljsd.jieling.config.*; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.dao.ActivityMission; +import com.ljsd.jieling.logic.dao.Item; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.mission.GameEvent; @@ -53,6 +52,16 @@ public class DefaultEmptyActivity extends AbstractActivity{ MailLogic.getInstance().sendMail(user.getId(),title,content,mailReward,(int)(System.currentTimeMillis()/1000), Global.MAIL_EFFECTIVE_TIME); } } + }else if(sGlobalActivity.getType() == ActivityType.EXCHANGEANDDROP){ + int shopId = sGlobalActivity.getShopId(); + SStoreConfig sStoreConfig = SStoreConfig.getSstoreConfigBuyStore().get(shopId).get(0); + int removeItemId = sStoreConfig.getCost()[0][1]; + Item item = user.getItemManager().getItem(removeItemId); + if(item!=null){ + int[][] cost= new int[1][]; + cost[0] = new int[]{item.getItemId(),item.getItemNum()}; + ItemUtil.itemCost(user,cost, BIReason.EXCHANGE_ACTIVITY_CLOSE,sGlobalActivity.getId()); + } } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureManager.java deleted file mode 100644 index fee0031fc..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureManager.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ljsd.jieling.logic.dao; - -import com.ljsd.common.mogodb.MongoBase; -import com.ljsd.jieling.handler.map.TemporaryItems; -import com.ljsd.jieling.logic.dao.root.User; - - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class AdventureManager extends MongoBase { - - private Map adventureStateInfoMap; - - private long flushBossTime; - - private int takeFirst; - - public AdventureManager(){ - this.setRootCollection(User._COLLECTION_NAME); - adventureStateInfoMap = new HashMap<>(); - } - - public Map getAdventureStateInfoMap() { - return adventureStateInfoMap; - } - - - public void addAdventureStation(AdventureStateInfo adventureStateInfo){ - adventureStateInfo.init(getRootId(), getMongoKey() + ".adventureStateInfoMap."+ adventureStateInfo.getPosition()); - updateString("adventureStateInfoMap."+adventureStateInfo.getPosition(),adventureStateInfo); - adventureStateInfoMap.put(adventureStateInfo.getPosition(),adventureStateInfo); - } - - public void setFlushBossTime(long flushBossTime) { - updateString("flushBossTime",flushBossTime); - this.flushBossTime = flushBossTime; - } - - public int getTakeFirst() { - return takeFirst; - } - - public void setTakeFirst(int takeFirst) { - updateString("takeFirst",takeFirst); - this.takeFirst = takeFirst; - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java deleted file mode 100644 index b9825b1d1..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.ljsd.jieling.logic.dao; - -import com.ljsd.common.mogodb.MongoBase; -import com.ljsd.jieling.logic.dao.root.User; -import com.ljsd.jieling.util.TimeUtils; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class AdventureStateInfo extends MongoBase { - private int position; - private int startTime; - private int level; - - private Set bossIds = new HashSet<>(); - public AdventureStateInfo(){ - this.setRootCollection(User._COLLECTION_NAME); - } - - public AdventureStateInfo(int position) { - int now = (int)(TimeUtils.now()/1000); - this.position = position; - this.level=1; - this.startTime = now; - bossIds = new HashSet<>(); - } - - public int getStartTime() { - return startTime; - } - - public int getPosition() { - return position; - } - - public Set getBossIds() { - return bossIds; - } - - public void setStartTime(int startTime) { - updateString("startTime",startTime); - this.startTime = startTime; - } - - public int getLevel() { - return level; - } - - public void setLevel(int level) { - updateString("level", level); - this.level = level; - } - - public void addBossGroup(String bossId){ - bossIds.add(bossId); - updateString("bossIds",bossIds); - } - - public void removeBossGroup(String bossId){ - bossIds.remove(bossId); - updateString("bossIds",bossIds); - } - public void removeMutBossGroup(Set bossIds){ - bossIds.removeAll(bossIds); - updateString("bossIds",bossIds); - } - -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/LevelDifficulty.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/LevelDifficulty.java index 1603640b2..eea241a95 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/LevelDifficulty.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/LevelDifficulty.java @@ -10,7 +10,7 @@ public class LevelDifficulty extends MongoBase { private int fightId; - private int state; //2 已开启 3:已打过未通过,=4:已通过 + private int state; //2 已开启 3:已打过未通过,=4:已通过. private int challengeTimes; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/MainLevelManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/MainLevelManager.java index 0018e9b54..a73012e78 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/MainLevelManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/MainLevelManager.java @@ -1,12 +1,107 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; +import com.ljsd.jieling.config.SGameSetting; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; public class MainLevelManager extends MongoBase { + public static final String _COLLECTION_NAME = "mainLevelManager"; + private int fightId; // 当前关卡id - private int state; //状态 + private int state; //状态 -1表示有等级卡 private int startTime; + private int lastTime; //上一个关卡记时时间 + private Map fightStateInfo = new HashMap<>(); + private Map> bossIds = new HashMap<>(); + + public void init(){ + this.startTime = (int)(System.currentTimeMillis()/1000); + updateString("startTime",startTime); + updateFight(1011,1); + } + + public void updateStateInfo(){ + SGameSetting gameSetting = SGameSetting.getGameSetting(); + int adventureRefresh = gameSetting.getAdventureRefresh(); + int timeDuration = (int)(System.currentTimeMillis()/1000) - lastTime; + int times = timeDuration / adventureRefresh; + if(times<=0){ + times = 1; + } + fightStateInfo.put(fightId,times); + updateString("fightStateInfo." + fightId,times); + + } + + public void updateFight(int fightId,int state){ + if(fightId!=1011){ + updateStateInfo(); + } + this.fightId = fightId; + this.state = state; + this.lastTime = (int)(System.currentTimeMillis()/1000); + updateString("fightId",fightId); + updateString("state",state); + updateString("lastTime",lastTime); + } + + public void afterTakeStateReward(){ + fightStateInfo.clear(); + this.startTime = (int)(System.currentTimeMillis()/1000); + this.lastTime = (int)(System.currentTimeMillis()/1000); + updateString("lastTime",state); + updateString("startTime",startTime); + updateString("lastTime",lastTime); + updateString("fightStateInfo",fightStateInfo); + } + + public void addBossGroup(String bossId){ + if(!bossIds.containsKey(fightId)){ + bossIds.put(fightId,new HashSet<>()); + } + bossIds.get(fightId).add(bossId); + updateString("bossIds." + fightId,bossIds); + } + + public void removeBossGroup(String bossId){ + bossIds.remove(bossId); + updateString("bossIds",bossIds); + } + public void removeMutBossGroup(Set bossIdsTmp){ + bossIds.clear(); + updateString("bossIds",bossIds); + } + public int getFightId() { + return fightId; + } + public int getState() { + return state; + } + + public int getStartTime() { + return startTime; + } + + public Map getFightStateInfo() { + return fightStateInfo; + } + + public int getLastTime() { + return lastTime; + } + + public Map> getBossIds() { + return bossIds; + } + + public void directUpdateDb(){ + updateString("bossIds",bossIds); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index 15e1c2877..4b3b3bfdd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -129,7 +129,7 @@ public class PlayerManager extends MongoBase { } public void setNickName(String nickName) throws Exception { - updateString("nickName", nickName); + // updateString("nickName", nickName); this.nickName = nickName; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index eee3dbcfb..0a422b0e3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -86,6 +86,7 @@ public class UserManager { PlayerLogic.getInstance().vipflushEveryDay(user,null); ActivityLogic.getInstance().newPlayerOpenActivityMission(user); PlayerLogic.getInstance().playerInfoUpdate(user); + user.getMainLevelManager().init(); user.getUserMissionManager().onGameEvent(user, GameEvent.USER_LEVELUP,0,1); user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH,0); user.getUserMissionManager().onGameEvent(user, GameEvent.BLOODY_REFRESH,0); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/User.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/User.java index b49f91e5e..0fd3f7c27 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/User.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/User.java @@ -26,8 +26,6 @@ public class User { private EquipManager equipManager; - private AdventureManager adventureManager; - private PokemonManager pokemonManager; private WorkShopController workShopController; @@ -51,6 +49,7 @@ public class User { private QuestionManager questionManager; private BloodyInfo bloodyInfo; + private MainLevelManager mainLevelManager; //构造函数必须要声明,否则从mongodb读出来反编译成类不通过 public User(){ @@ -65,7 +64,6 @@ public class User { this.teamPosManager = new TeamPosManager(); this.mailManager = new MailManager(); this.equipManager = new EquipManager(); - this.adventureManager = new AdventureManager(); this.pokemonManager = new PokemonManager(); this.workShopController = new WorkShopController(); this.levelDifficultyManager = new LevelDifficultyManager(); @@ -78,6 +76,7 @@ public class User { this.guildMyInfo = new GuildMyInfo(); this.questionManager = new QuestionManager(); this.bloodyInfo = new BloodyInfo(); + this.mainLevelManager = new MainLevelManager(); //綁定关系 @@ -88,7 +87,6 @@ public class User { this.teamPosManager.init(id, MongoKey.teamPosManager); this.mailManager.init(id, MongoKey.mailManager); this.equipManager.init(id, MongoKey.equipManager); - this.adventureManager.init(id, MongoKey.adventureManager); this.pokemonManager.init(id, MongoKey.pokemonManager); this.workShopController.init(id, MongoKey.workShopController); this.levelDifficultyManager.init(id, MongoKey.levelDifficultyManager); @@ -101,6 +99,7 @@ public class User { this.guildMyInfo.init(id,MongoKey.guildMyInfo); this.questionManager.init(id,MongoKey.questionManager); this.bloodyInfo.init(id,MongoKey.bloodyInfo); + this.mainLevelManager.init(id,MongoKey.mainLevelManager); } public int getId() { @@ -167,10 +166,6 @@ public class User { return equipManager; } - public AdventureManager getAdventureManager() { - return adventureManager; - } - public PokemonManager getPokemonManager() { return pokemonManager; } @@ -234,4 +229,8 @@ public class User { public BloodyInfo getBloodyInfo() { return bloodyInfo; } + + public MainLevelManager getMainLevelManager() { + return mainLevelManager; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index 7b6f7c9df..fbc987a29 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -8,7 +8,6 @@ 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.EndlessHero; import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; import com.ljsd.jieling.ktbeans.KTGameType; @@ -188,127 +187,12 @@ public class CombatLogic { /************** 新挂机*****************/ - public void getAdventureInfo(ISession session) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - AdventureManager adventureManager = user.getAdventureManager(); - Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); - FightInfoProto.GetAdventureStateInfoResponse adventureStateInfoResponse = CBean2Proto.getAdventureStateInfoResponse(adventureStateInfoMap); - OnlineUserManager.orderAdventureUids.add(uid); - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_INFO_RESPONSE_VALUE,adventureStateInfoResponse,true); - } - - - //挑战首次 - public void adventureChallenge(ISession iSession,int arenaId,int teamId,int skipFight) throws Exception { - int uid = iSession.getUid(); - User user = UserManager.getUser(uid); - AdventureManager adventureManager = user.getAdventureManager(); - Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); - if(adventureStateInfoMap.containsKey(arenaId)){ - MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_CHALLENGE_RESPONSE_VALUE,"already challenge"); - return; - } - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(arenaId); - if(sAdventureConfig == null){ - MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_CHALLENGE_RESPONSE_VALUE,""); - return; - } - if(sAdventureConfig.getOpenLevel()[0]>user.getPlayerInfoManager().getLevel()){ - MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_CHALLENGE_RESPONSE_VALUE,"level not"); - return; - } - int groupId = sAdventureConfig.getSystemBoss(); - CommonProto.FightTeamInfo fightTeamInfo = BehaviorUtil.getFightTeamInfo(user,teamId,true); - Map> monsterByGroup = MonsterUtil.getMonsterByGroup(groupId); - List monsterTeamList = new ArrayList<>(3); - List monsterGroupList = BehaviorUtil.getFightTeamInfos(groupId,monsterByGroup, Global.MONSTER_1); - monsterTeamList.addAll(monsterGroupList); - List monsterGroupList1 = BehaviorUtil.getFightTeamInfos(groupId,monsterByGroup, Global.MONSTER_2); - monsterTeamList.addAll(monsterGroupList1); - List monsterGroupList2 = BehaviorUtil.getFightTeamInfos(groupId,monsterByGroup, Global.MONSTER_3); - monsterTeamList.addAll(monsterGroupList2); - //设置战斗随机种子 - int seed = (int)(System.currentTimeMillis()/1000); - LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterTeamList); - LuaValue getOptionData = FightDataUtil.getOptionData(""); - int[] checkResult = CheckFight.getInstance().checkFight(seed, sAdventureConfig.getSystemBossTime(), getFightData, getOptionData,FightType.AdventureLock); - int fightResult = checkResult[0]; - if(fightResult == 1){ - adventureManager.addAdventureStation(new AdventureStateInfo(arenaId)); - if(arenaId == 1){ - int[][] drop= new int[1][]; - drop[0] = new int[2]; - drop[0][0]=SGameSetting.getGameSetting().getAdventureItem(); - drop[0][1] = 1; - ItemUtil.drop(user,drop,BIReason.FIRST_ADVENTURE_REWARD); - } - - } - FightInfoProto.AdventurnChallengeResponse.Builder builder = FightInfoProto.AdventurnChallengeResponse.newBuilder().setFightResult(fightResult); - - CommonProto.FightData fightData = CommonProto.FightData.newBuilder() - .setFightMaxTime(SArenaSetting.getSArenaSetting().getMostTime()) - .setFightSeed(seed) - .setHeroFightInfos(fightTeamInfo) - .addAllMonsterList(monsterGroupList) - .build(); - builder.setFightData(fightData); - MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.ADVENTURE_CHALLENGE_RESPONSE_VALUE,builder.build(),true); - } - - //升级 - public void adventureUpLevle(ISession iSession,int arenaId) throws Exception { - int uid = iSession.getUid(); - User user = UserManager.getUser(uid); - AdventureManager adventureManager = user.getAdventureManager(); - Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); - AdventureStateInfo adventureStateInfo = adventureStateInfoMap.get(arenaId); - if(null == adventureStateInfo){ - MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_UPLEVEL_RESPONSE_VALUE,""); - return; - } - int level = adventureStateInfo.getLevel(); - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(arenaId); - int[] openLevel = sAdventureConfig.getOpenLevel(); - if(level>=openLevel.length){ - MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_UPLEVEL_RESPONSE_VALUE,"level max"); - return; - } - if(sAdventureConfig.getOpenLevel()[level]>user.getPlayerInfoManager().getLevel()){ - MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_UPLEVEL_RESPONSE_VALUE,"level not"); - return; - } - int[] upgradeConsume = sAdventureConfig.getUpgradeConsume()[level-1]; - boolean enough = ItemUtil.itemCost(user, new int[][]{upgradeConsume},BIReason.ADVENTURE_UPLEVEL_CONSUME,arenaId); - if(!enough){ - MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_UPLEVEL_RESPONSE_VALUE,"item not"); - return; - } - adventureStateInfo.setLevel(adventureStateInfo.getLevel()+1); - getAdventureReward(user, arenaId, true,1); - MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.ADVENTURE_UPLEVEL_RESPONSE_VALUE,null,true); - } - - public void takeAdventureReward(ISession session,int type,int position) throws Exception { + public void takeNewAdventureReward(ISession session,int type,int position) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); Map adventureFastReward =null; if(type == 2){ - if(position==-1){ - boolean allowed = user.getPlayerInfoManager().checkFunctionIsAllowed(VipPrivilegeType.UNLOCK_ADVENTURE_ONEKEY); - if(!allowed){ - MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,"not allowed"); - return; - } - } - if(position == 1 && user.getAdventureManager().getTakeFirst() == 0){ - adventureFastReward = getAdventureFastReward(user,SGameSetting.getGameSetting().getAdventureRefresh()); - user.getAdventureManager().setTakeFirst(1); - user.getUserMissionManager().onGameEvent(user,GameEvent.ADVENTURE_TAKEREWARD,1); - }else{ - adventureFastReward = getAdventureReward(user, position,false,0); - } + adventureFastReward = getNewAdventureReward(user); }else{ String err =""; if(position == 0){ @@ -320,22 +204,18 @@ public class CombatLogic { MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,err); return; } - adventureFastReward = getAdventureFastReward(user, SGameSetting.getGameSetting().getAdventureFastBattle()); + adventureFastReward = getNewAdventureFastReward(user, SGameSetting.getGameSetting().getAdventureFastBattle()); user.getUserMissionManager().onGameEvent(user,GameEvent.PlAY_STORY,9999,1); Poster.getPoster().dispatchEvent(new SecretEvent(user.getId())); } FightInfoProto.TakeAventureRewardResponse build = FightInfoProto.TakeAventureRewardResponse.newBuilder().setDrop(adventureFastReward.get(1)).setRandomDrop(adventureFastReward.get(2)).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,build,true); - KtEventUtils.onKtEvent(user,ParamEventBean.UserGameType,KTGameType.TAKE_SECURE_REWARD.getIndex(),type*10+position); + KtEventUtils.onKtEvent(user,ParamEventBean.UserGameType,KTGameType.TAKE_SECURE_REWARD.getIndex(),type*10); } - public Map getAdventureReward(User user, int position,boolean sendMail,int reason) throws Exception { - AdventureManager adventureManager = user.getAdventureManager(); - Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); - if(adventureStateInfoMap.isEmpty()){ - return null; - } - int now = (int)(System.currentTimeMillis()/1000); + public Map getNewAdventureReward(User user) throws Exception { + MainLevelManager mainLevelManager = user.getMainLevelManager(); + Map fightStateInfo = user.getMainLevelManager().getFightStateInfo(); SGameSetting gameSetting = SGameSetting.getGameSetting(); int adventureRefresh = gameSetting.getAdventureRefresh(); int adventureOffline = gameSetting.getAdventureOffline()*60*60/adventureRefresh; @@ -351,55 +231,36 @@ public class CombatLogic { CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder(); CommonProto.Drop.Builder randomBuilder = CommonProto.Drop.newBuilder(); int takeTimes= 0; - for(AdventureStateInfo adventureStateInfoTmp:adventureStateInfoMap.values()) { - int positionTmp = adventureStateInfoTmp.getPosition(); - if (position != -1 && positionTmp != position) { - continue; + for(Map.Entry fightStateInfoItem : fightStateInfo.entrySet()){ + Integer fightId = fightStateInfoItem.getKey(); + Integer times = fightStateInfoItem.getValue(); + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); + int[] randomRewardMin = sMainLevelConfig.getRandomRewardMin(); + ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + int timesTemp =times; + while (timesTemp-->0){ + ItemUtil.combineReward(user,sMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); } - int startTime = adventureStateInfoTmp.getStartTime(); - int times = (now - startTime) / adventureRefresh; - int refreshTimes = times; - times = adventureOffline > times ? times : adventureOffline; - if (times > 0) { - adventureStateInfoTmp.setStartTime(startTime + refreshTimes * adventureRefresh); - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(positionTmp); - int baseRewardGroup[] = sAdventureConfig.getBaseRewardGroup(); - int[][] randomRewardGroup = sAdventureConfig.getRandomRewardGroup(); - ItemUtil.combineReward(user,new int[]{baseRewardGroup[adventureStateInfoTmp.getLevel()-1]}, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + takeTimes+=times; + } + + if(mainLevelManager.getState()!=-1){ + int fightId = mainLevelManager.getFightId(); + int lastTime = mainLevelManager.getLastTime(); + int times = ((int)(System.currentTimeMillis()/1000) - lastTime)/SGameSetting.getGameSetting().getAdventureRefresh(); + int maxTimes = adventureOffline - takeTimes; + if(maxTimes>0){ + times = times > maxTimes?maxTimes:times; + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); + int[] randomRewardMin = sMainLevelConfig.getRandomRewardMin(); + ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); int timesTemp =times; while (timesTemp-->0){ - ItemUtil.combineReward(user,randomRewardGroup[adventureStateInfoTmp.getLevel()-1], 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + ItemUtil.combineReward(user,sMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); } - takeTimes++; - } - if(sendMail){ - adventureStateInfoTmp.setStartTime(now); } } - if(sendMail){ - if(!baseItemMap.isEmpty()){ - String title = ""; - String content = ""; - if(reason == 1){ - String areaName = SAdventureConfig.getConfig().get(position).getAreaName(); - title = SErrorCodeEerverConfig.getI18NMessage("adventuren_reward_of_uplevel_title"); - content = SErrorCodeEerverConfig.getI18NMessage("adventuren_reward_of_uplevel_content",new Object[]{areaName,adventureStateInfoMap.get(position).getLevel()}); - }else if(reason == 2){ - int vipLevel = user.getPlayerInfoManager().getVipLevel(); - title = SErrorCodeEerverConfig.getI18NMessage("adventuren_reward_of_viplevel_title"); - content = SErrorCodeEerverConfig.getI18NMessage("adventuren_reward_of_viplevel_content",new Object[]{vipLevel}); - }else { - return null; - } - String reward = ItemUtil.getReward(baseItemMap, baseCardMap, baseEquipMap, baseRandomMap); - String randomReward = ItemUtil.getReward(randomItemMap, randomCardMap, randomEquipMap, randomRandomMap); - if(randomReward.length()!=0){ - reward = reward + "|" + randomReward; - } - MailLogic.getInstance().sendMail(user.getId(),title,content,reward,now,Global.MAIL_EFFECTIVE_TIME); - } - return null; - } + mainLevelManager.afterTakeStateReward(); ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); Map result = new HashMap<>(2); @@ -408,10 +269,8 @@ public class CombatLogic { user.getUserMissionManager().onGameEvent(user,GameEvent.ADVENTURE_TAKEREWARD,takeTimes); return result; } - - private Map getAdventureFastReward(User user,int timeDuration) throws Exception { - AdventureManager adventureManager = user.getAdventureManager(); - Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); + private Map getNewAdventureFastReward(User user,int timeDuration) throws Exception { + MainLevelManager mainLevelManager = user.getMainLevelManager(); SGameSetting gameSetting = SGameSetting.getGameSetting(); int adventureRefresh = gameSetting.getAdventureRefresh(); int times = timeDuration / adventureRefresh; @@ -426,17 +285,15 @@ public class CombatLogic { Map randomRandomMap = new HashMap<>(); CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder(); CommonProto.Drop.Builder randomBuilder = CommonProto.Drop.newBuilder(); - for(AdventureStateInfo adventureStateInfoTmp:adventureStateInfoMap.values()) { - int positionTmp = adventureStateInfoTmp.getPosition(); - if (times > 0) { - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(positionTmp); - int baseRewardGroup[] = sAdventureConfig.getBaseRewardGroup(); - int[][] randomRewardGroup = sAdventureConfig.getRandomRewardGroup(); - ItemUtil.combineReward(user,new int[]{baseRewardGroup[adventureStateInfoTmp.getLevel()-1]}, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - int timesTemp =times; - while (timesTemp-->0){ - ItemUtil.combineReward(user,randomRewardGroup[adventureStateInfoTmp.getLevel()-1], 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); - } + + if(mainLevelManager.getState()!=-1){ + int fightId = mainLevelManager.getFightId(); + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); + int[] randomRewardMin = sMainLevelConfig.getRandomRewardMin(); + ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + int timesTemp =times; + while (timesTemp-->0){ + ItemUtil.combineReward(user,sMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); } } ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); @@ -450,6 +307,8 @@ public class CombatLogic { + + public void getInvasionBoss(ISession session,FightInfoProto.AdventureBossInfoResponse.Builder builder) throws Exception { int uid = session.getUid(); Map myHurtInfo = RedisUtil.getInstence().getMapValues(RedisKey.ADVENTRUEN_BOSS_OWN, Integer.toString(uid), String.class, Integer.class); @@ -473,8 +332,8 @@ public class CombatLogic { String bossId = adventureBoss.getBossId(); int arenaId = adventureBoss.getArenaId(); int findTime = adventureBoss.getFindTime(); - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(arenaId); - int invasionBossHolding = sAdventureConfig.getInvasionBossHolding(); + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(arenaId); + int invasionBossHolding = sMainLevelConfig.getInvasionBossHolding(); int remainTime = invasionBossHolding - ( now - findTime); int findUserId = adventureBoss.getFindUserId(); if(remainTime<0){ @@ -529,46 +388,24 @@ public class CombatLogic { public void callInvasionBoss(ISession iSession, boolean isGm) throws Exception { int uid = iSession.getUid(); User user = UserManager.getUser(uid); - AdventureManager adventureManager = user.getAdventureManager(); - Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); - int arenaID = 0; - for(Integer tmpArenaId : adventureStateInfoMap.keySet()){ - if(arenaID arenaIDs = adventureStateInfoMap.keySet(); - int arenaIndex = MathUtils.randomInt(arenaIDs.size()+1); - arenaID = arenaIDs.iterator().next(); - Iterator iterator = arenaIDs.iterator(); - int j=arenaIndex; - while (iterator.hasNext() && j-->0){ - arenaID = iterator.next(); - } - AdventureStateInfo adventureStateInfo = adventureStateInfoMap.get(arenaID); int bossGroupID =0; - int level = adventureStateInfo.getLevel(); - int[][] invasionBossWeightInfo = invasionBoss[level - 1]; + + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); + int[][] invasionBossWeightInfo = sMainLevelConfig.getInvasionBoss(); int totalWeight = 0; for(int[] item :invasionBossWeightInfo){ totalWeight+=item[1]; @@ -591,14 +428,14 @@ public class CombatLogic { for(Integer hp: hps){ totalHp+=hp; } - AdventureBoss adventureBoss = new AdventureBoss(bossId,bossGroupID,arenaID,level,uid,now,totalHp,hps); + AdventureBoss adventureBoss = new AdventureBoss(bossId,bossGroupID,fightId,1,uid,now,totalHp,hps); RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO,"",bossId,adventureBoss); RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_OWN,Integer.toString(uid),bossId,0); MessageUtil.sendRedIndication(uid,GlobalsDef.SHARE_BOSS_RED_TYPE); - adventureStateInfo.addBossGroup(bossId); - int remainTime =sAdventureConfig.getInvasionBossHolding()-(now - adventureBoss.getFindTime()); + mainLevelManager.addBossGroup(bossId); + int remainTime =sMainLevelConfig.getInvasionBossHolding()-(now - adventureBoss.getFindTime()); FightInfoProto.AdventureCallBossResponse build = FightInfoProto.AdventureCallBossResponse.newBuilder().setAdventureBossInfo(CommonProto.AdventureBossSimpleInfo.newBuilder() - .setArenaId(adventureStateInfo.getPosition()) + .setArenaId(fightId) .setBossGroupId(adventureBoss.getBossGroupId()) .setRemainTime(remainTime) .setBossId(bossId) @@ -606,24 +443,14 @@ public class CombatLogic { MessageUtil.sendMessage(iSession,1,msgId,build,true); } - public void leftAdventurePos(ISession session,int type){ - if(type == 0){ - OnlineUserManager.orderAdventureUids.remove(session.getUid()); - }else{ - OnlineUserManager.orderAdventureUids.add(session.getUid()); - } - - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_LEFT_RESPONSE_VALUE,null,true); - } - public void broadAdventureBoss(AdventureBoss adventureBoss,String findUserName,List friends,int findUid){ int arenaId = adventureBoss.getArenaId(); - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(arenaId); + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(arenaId); CommonProto.AdventureBossSimpleInfo build = CommonProto.AdventureBossSimpleInfo.newBuilder() .setArenaId(arenaId) .setBossId(adventureBoss.getBossId()) .setBossGroupId(adventureBoss.getBossGroupId()) - .setRemainTime(sAdventureConfig.getInvasionBossHolding()) + .setRemainTime(sMainLevelConfig.getInvasionBossHolding()) .setFindUserName(findUserName) .build(); FightInfoProto.AdventureBossFindIndication adventureBossFindIndication = FightInfoProto.AdventureBossFindIndication.newBuilder().setAdventureBossSimpleInfo(build).build(); @@ -709,19 +536,19 @@ public class CombatLogic { LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterGroupList); LuaValue getOptionData = FightDataUtil.getOptionData(""); FightInfoProto.AdventurenBossChallengeResponse.Builder builder = FightInfoProto.AdventurenBossChallengeResponse.newBuilder(); - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(adventureBoss.getArenaId()); + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(adventureBoss.getArenaId()); int totalHurt=0; int fightResult=0; int i=0; for(;i missionList = new ArrayList<>(); MissionLoigc.getVipMission(user,missionList); CommonProto.VipBaseInfo vipInfoProto = CommonProto.VipBaseInfo.newBuilder() @@ -499,7 +498,7 @@ public class PlayerLogic { public void sendTestWelfareMail(User user,int sendDay,int duration) throws Exception { - String title = SErrorCodeEerverConfig.getI18NMessage("welfare_activity_daily_title"); + /* String title = SErrorCodeEerverConfig.getI18NMessage("welfare_activity_daily_title"); for(;sendDay<=duration;sendDay++){ STestWelfare sTestWelfare = STestWelfare.testWelfareMap.get(sendDay); if(sTestWelfare == null){ @@ -508,7 +507,7 @@ public class PlayerLogic { String content = SErrorCodeEerverConfig.getI18NMessage("welfare_activity_daily_txt",new String[]{Integer.toString(sendDay)}); String mailReward = ItemUtil.getMailReward(user, sTestWelfare.getReward(), 1.0f); MailLogic.getInstance().sendMail(user.getId(),title,content,mailReward,(int)(System.currentTimeMillis()/1000),Global.MAIL_EFFECTIVE_TIME); - } + }*/ } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index 3ff2b6e3e..e16ea2bd2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -1,7 +1,7 @@ package com.ljsd.jieling.util; -import com.ljsd.jieling.config.SAdventureConfig; import com.ljsd.jieling.config.SGameSetting; +import com.ljsd.jieling.config.SMainLevelConfig; import com.ljsd.jieling.config.SMonsterConfig; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; @@ -441,26 +441,32 @@ public class CBean2Proto { .build(); } - public static FightInfoProto.GetAdventureStateInfoResponse getAdventureStateInfoResponse(Map adventureStateInfoMap){ - FightInfoProto.GetAdventureStateInfoResponse.Builder builder = FightInfoProto.GetAdventureStateInfoResponse.newBuilder(); + public static PlayerInfoProto.GetMainLevelInfoResponse getMainLevelInfoResponse( MainLevelManager mainLevelManager){ long nowMs = TimeUtils.now(); int now = (int)(nowMs/1000); - for(AdventureStateInfo adventureStateInfo : adventureStateInfoMap.values()){ - CommonProto.AdventureStateInfo.Builder builder1 = CommonProto.AdventureStateInfo.newBuilder() - .setPositionId(adventureStateInfo.getPosition()) - .setLevel(adventureStateInfo.getLevel()) - .setStateTime(now-adventureStateInfo.getStartTime()); - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(adventureStateInfo.getPosition()); - Set bossIds = adventureStateInfo.getBossIds(); + int state = mainLevelManager.getState(); + int duration = (int)(System.currentTimeMillis()/1000) - mainLevelManager.getStartTime(); + PlayerInfoProto.GetMainLevelInfoResponse.Builder builder = PlayerInfoProto.GetMainLevelInfoResponse.newBuilder() + .setFightId(mainLevelManager.getFightId()) + .setState(state) + .setDuration(duration); + + Map> bossIds = mainLevelManager.getBossIds(); + boolean update =false; + for(Map.Entry> item : bossIds.entrySet()){ + Integer fightId = item.getKey(); + Set value = item.getValue(); + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(mainLevelManager.getFightId()); Set removeCache = new HashSet<>(); - for(String bossId : bossIds){ + for(String bossId : value){ AdventureBoss adventureBoss = RedisUtil.getInstence().getMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO, "", bossId, AdventureBoss.class); if(adventureBoss != null){ int findBossTime = adventureBoss.getFindTime(); - int remainTime =sAdventureConfig.getInvasionBossHolding()-(now - findBossTime); + int remainTime =sMainLevelConfig.getInvasionBossHolding()-(now - findBossTime); if(remainTime>0){ - builder1.addAdventureBossSimpleInfo( - CommonProto.AdventureBossSimpleInfo.newBuilder().setArenaId(adventureStateInfo.getPosition()) + builder.addAdventureBossSimpleInfo( + CommonProto.AdventureBossSimpleInfo.newBuilder() + .setArenaId(fightId) .setBossGroupId(adventureBoss.getBossGroupId()) .setRemainTime(remainTime) .setBossId(adventureBoss.getBossId()) @@ -474,10 +480,12 @@ public class CBean2Proto { } } if(!removeCache.isEmpty()){ - adventureStateInfo.removeMutBossGroup(removeCache); + value.removeAll(removeCache); + update =true; } - builder.addAdventureStateInfoList(builder1); - + } + if(update){ + mainLevelManager.directUpdateDb(); } return builder.build(); }