diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java index 319f328af..490aed682 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java @@ -5,6 +5,7 @@ import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.common.mogodb.test.pojo.PlayerForTest; import com.ljsd.jieling.logic.dao.PlayerManager; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.util.MathUtils; import com.mongodb.DBObject; import com.mongodb.MongoClientURI; import org.slf4j.Logger; @@ -60,28 +61,23 @@ public class MongoUtil { } public static LjsdMongoTemplate getLjsdMongoTemplate() throws UnknownHostException { - SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory(new MongoClientURI("mongodb://60.1.1.14:27017/jieling_10212")); - DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(simpleMongoDbFactory); - MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, new MongoMappingContext()); - converter.setTypeMapper(new DefaultMongoTypeMapper(null)); - // MongoTemplate mongoTemplate = new MongoTemplate(simpleMongoDbFactory, converter); - /* MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter(); - mongoMapping.setCustomConversions(customConversions()); // tell mongodb to use the custom converters - mongoMapping.afterPropertiesSet();*/ - return new LjsdMongoTemplate(new MongoTemplate(simpleMongoDbFactory, converter)); + return MongoUtil.getInstence().getMyMongoTemplate(); } public List getRandomUsers(int size, int uid, int level) throws Exception { + if(size <= 0){ + return null; + } + int randomLevel = MathUtils.random(5, 20); Criteria criatira = new Criteria(); - Random random = new Random(); - int minLevel = random.nextInt(level) - 10; + int minLevel = level - randomLevel; minLevel = minLevel <= 5 ? 5 : minLevel; - int maxLevel = random.nextInt(level) + 10; + int maxLevel = level + randomLevel; long befor3Day = System.currentTimeMillis() - BEFOR_3_DAY; criatira.andOperator(Criteria.where("id").nin(uid), Criteria.where("playerManager.level").gte(minLevel), Criteria.where("playerManager.level").lte(maxLevel), Criteria.where("playerManager.loginTime").gte(befor3Day));//不包含自己 - Query query = new Query(criatira).limit(size); + Query query = new Query(criatira).limit(size*2+1); query.fields().include("playerManager"); return this.myMongoTemplate.findAllByCondition(query, User.class) ; } 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 f9e7ffa2e..572bee9a2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -74,6 +74,7 @@ public interface BIReason { int MONSTERATTACK_BACK = 45; // 妖兽来袭预扣归还 int FIRST_ADVENTURE_REWARD = 46; // 秘境首次奖励外敌挑战券 + int UPHERO_DECOMPOS_HERO_REWARD= 47 ;//进阶妖灵师返还奖励 //道具消耗原因 1000开头 int ADVENTURE_UPLEVEL_CONSUME = 1000; //秘境升级 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index be4572538..e4e3297e5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -138,7 +138,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ try { MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true); ActivityLogic.getInstance().flushForLogin(user); - DoFix.getInstance().loginFix(user); + // DoFix.getInstance().loginFix(user); if(playerInfoManager.getIsdayFirst()==0){ playerInfoManager.setIsdayFirst(1); } 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 d4c1b4241..6948506f1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java @@ -47,13 +47,13 @@ public class LoginRequestHandler extends BaseHandler { LoginParamType.NETWORK_WIFI.equals(loginRequest.getNetworkS())); switch (loginRequest.getPlatformS()){ case LoginParamType.PLATFORM_ANDRIOD: - paramEnvironmentSimpleBean.setIdfa_s(loginRequest.getIdfaSOrImeiS()); + paramEnvironmentSimpleBean.setImei_s(loginRequest.getIdfaSOrImeiS()); break; case LoginParamType.PLATFORM_IOS: - paramEnvironmentSimpleBean.setImei_s(loginRequest.getIdfaSOrImeiS()); + paramEnvironmentSimpleBean.setIdfa_s(loginRequest.getIdfaSOrImeiS()); break; case LoginParamType.PLATFORM_IOS_YY: - paramEnvironmentSimpleBean.setImei_s(loginRequest.getIdfaSOrImeiS()); + paramEnvironmentSimpleBean.setIdfa_s(loginRequest.getIdfaSOrImeiS()); break; case LoginParamType.PLATFORM_PC: break; @@ -73,8 +73,17 @@ public class LoginRequestHandler extends BaseHandler { //登陆注册入内存 - User user = UserManager.userLogin(userId,loginRequest.getOpenId()); - user.getPlayerInfoManager().setOpenId(loginRequest.getOpenId()); + String openIdFront = loginRequest.getOpenId(); + String[] split = openIdFront.split("\\."); + User user = null; + if(split.length>=2){ + String openId = split[0]; + String chanel = split[1]; + user = UserManager.userLogin(userId,openId,chanel); + }else{ + user = UserManager.userLogin(userId,openIdFront,""); + } + String newToken = UserManager.getNewToken(userId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java index 749fc9f10..0c85e30f8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java @@ -37,7 +37,8 @@ public class UseAndPriceItemHandler extends BaseHandler { } else if (type == 2){ //分解装备 ItemLogic.getInstance().decomposeEquip(iSession,equipIdsList); }else{ - ItemLogic.getInstance().decomposeHero(iSession,heroIdsList); + CommonProto.Drop.Builder baseBuilder =ItemLogic.getInstance().decomposeHero(iSession,heroIdsList,null, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE); + ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, baseBuilder); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 98de89e92..4d8a5a41f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -188,7 +188,7 @@ public class MapLogic { } user.setMapManager(mapManager); user.getUserMissionManager().onGameEvent(user,GameEvent.PlAY_STORY,SChallengeConfig.sChallengeConfigs.get(mapId).getType(),1); - Poster.getPoster().dispatchEvent(new StoryEvent(user.getId())); + Poster.getPoster().dispatchEvent(new StoryEvent(user.getId(),1)); } else if (mapManager.getCurMapId() != mapId) { MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "地图错误,应进入" + mapManager.getCurMapId()); @@ -1813,6 +1813,7 @@ public class MapLogic { CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, sChallengeMapConfig.getSweepingAward(), 1, 0, BIReason.MAP_SWEEP_REWARD); mapSweepResponse.addDrop(dropBuilder); } + Poster.getPoster().dispatchEvent(new StoryEvent(user.getId(),count)); user.getUserMissionManager().onGameEvent(user, GameEvent.STORY_FIGHT, mapId,1,count); user.getUserMissionManager().onGameEvent(user, GameEvent.PlAY_STORY, type,count); MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapSweepResponse.build(), true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/EatBuffBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/EatBuffBehavior.java index d61826ca0..301de0c4f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/EatBuffBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/EatBuffBehavior.java @@ -16,7 +16,7 @@ public class EatBuffBehavior extends BaseBehavior { @Override public boolean process(int optionId, User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { - CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user.getMapManager(), behaviorTypeValues[0][0]); + CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user, behaviorTypeValues[0][0]); return true; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyBehavior.java index d12ce911b..bc4e9e222 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyBehavior.java @@ -17,7 +17,7 @@ public class FourtyBehavior extends BaseBehavior { @Override public boolean process(int optionId, User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { BehaviorUtil.updateMission(user, eventUpdateResponse); - CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user.getMapManager(), behaviorTypeValues[0][0]); + CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user, behaviorTypeValues[0][0]); BehaviorUtil.destoryPoints(user, behaviorTypeValues[1]); for (int i = 2; i < behaviorTypeValues.length; i++) { BehaviorUtil.addBehaviorInfo(user,behaviorTypeValues[i][3], user.getMapManager(), behaviorTypeValues[i][0], behaviorTypeValues[i][1], behaviorTypeValues[i][2]); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/ThirtyFourBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/ThirtyFourBehavior.java index 366bdd4cd..8853583af 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/ThirtyFourBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/ThirtyFourBehavior.java @@ -15,7 +15,7 @@ public class ThirtyFourBehavior extends BaseBehavior { @Override public boolean process(int optionId, User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { - CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user.getMapManager(), behaviorTypeValues[0][0]); + CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user, behaviorTypeValues[0][0]); BehaviorUtil.destoryPoint(user, behaviorTypeValues[0][1]); return true; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/ThirtySevenBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/ThirtySevenBehavior.java index 913f8b6b1..2f4a89536 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/ThirtySevenBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/ThirtySevenBehavior.java @@ -21,7 +21,7 @@ public class ThirtySevenBehavior extends BaseBehavior{ cost[0][0] = behaviorTypeValues[0][0]; cost[0][1] = behaviorTypeValues[0][1]; ItemUtil.itemCost(user,cost, BIReason.MAP_CONSUME,user.getMapManager().getCurMapId()); - CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user.getMapManager(), behaviorTypeValues[0][2]); + CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user, behaviorTypeValues[0][2]); return true; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/KtEventUtils.java b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/KtEventUtils.java index 38b4c7f92..b6bb90aa4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/KtEventUtils.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/KtEventUtils.java @@ -58,7 +58,11 @@ public class KtEventUtils { int itemTotalNum = (int)parm[4]; paramEventBean.add(itemUseType[useType]); paramEventBean.add(String.valueOf(useReson)); - paramEventBean.add(String.valueOf(itemId)); + if(currencyMap.containsKey(itemId)){ + paramEventBean.add(currencyMap.get(itemId)); + }else{ + paramEventBean.add(String.valueOf(itemId)); + } paramEventBean.add(String.valueOf(itemNum)); PlayerManager playerInfoManager = user.getPlayerInfoManager(); BILog.info("itemflow {}|{}|{}|{}|{}|{}|{}|{}",user.getId(), playerInfoManager.getLevel(), playerInfoManager.getVipLevel(),useType,useReson,itemId,itemNum,itemTotalNum); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index 26c2ba2fc..90c1fcc5c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -97,7 +97,13 @@ public class ActivityLogic { if (endTime != 0 && now > endTime) { if (openActivityIds.contains(sGlobalActivity.getId())) { openActivityIds.remove(sGlobalActivity.getId()); - ActivityTypeEnum.getActicityType(sGlobalActivity.getId()).onActivityEnd(); + + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); + if (null == abstractActivity) { + continue; + } + abstractActivity.onActivityEnd(); + } continue; } @@ -106,6 +112,9 @@ public class ActivityLogic { for (Map.Entry entry : OnlineUserManager.sessionMap.entrySet()) { User user = UserManager.getUserInMem(entry.getKey()); + if(user==null){ + continue; + } PlayerInfoProto.ActivityUpateIndication.Builder builder = PlayerInfoProto.ActivityUpateIndication.newBuilder(); MissionEventDistributor.requestStart(); Set openNews = checkActivityOfUser(user, builder); @@ -156,7 +165,7 @@ public class ActivityLogic { activityManager.initAllActivityMission(openActivityId); } AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(openActivityId); - if (abstractActivity == null) { + if (null==abstractActivity) { continue; } abstractActivity.initActivity(user); @@ -185,7 +194,11 @@ public class ActivityLogic { if (endTime != 0 && now > endTime) { ActivityMission activityMission = activityMissionMap.get(activityId); if (activityMission != null) { - ActivityTypeEnum.getActicityType(sGlobalActivity.getId()).onActivityEndSelfWithDealReward(user); + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); + if (null==abstractActivity) { + continue; + } + abstractActivity .onActivityEndSelfWithDealReward(user); activityManager.removeActivity(activityId); LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); if (builder != null) { @@ -206,7 +219,11 @@ public class ActivityLogic { } else { ActivityMission activityMission = activityMissionMap.get(activityId); if (activityMission != null) { - ActivityTypeEnum.getActicityType(sGlobalActivity.getId()).onActivityEndSelfWithDealReward(user); + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); + if (null==abstractActivity) { + continue; + } + abstractActivity.onActivityEndSelfWithDealReward(user); activityManager.removeActivity(activityId); LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); if (builder != null) { @@ -364,7 +381,7 @@ public class ActivityLogic { } AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(activityId); - if (abstractActivity == null) { + if (null==abstractActivity) { continue; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CopyExpectRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CopyExpectRankActivity.java index 4127802b1..cf726ce61 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CopyExpectRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CopyExpectRankActivity.java @@ -18,7 +18,7 @@ class CopyExpectRankActivity extends ExpectRankActivity { public void onEvent(IEvent event) throws Exception { if (!(event instanceof StoryEvent)) return; - update(UserManager.getUser(((StoryEvent) event).getUid()), 1); + update(UserManager.getUser(((StoryEvent) event).getUid()), ((StoryEvent) event).getCount()); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java index 3c303f365..3527ca811 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java @@ -58,6 +58,9 @@ class RechargeSumDayActivity extends AbstractActivity { if (value < values[0][1]) { return false; } + if(activityProgressInfo.getProgrss()!=1){ + return false; + } return true; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/StoryEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/StoryEvent.java index 6f32f1bc2..749156bf5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/StoryEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/StoryEvent.java @@ -6,12 +6,18 @@ package com.ljsd.jieling.logic.activity.event; public class StoryEvent implements IEvent { private int uid; + private int count; - public StoryEvent(int uid) { + public StoryEvent(int uid, int count) { this.uid = uid; + this.count = count; } public int getUid() { return uid; } + + public int getCount() { + return count; + } } 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 f50963312..9848d6810 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 @@ -80,6 +80,8 @@ public class PlayerManager extends MongoBase { private int sendDays; + private String channel; + private Map onlineTimeOfDay = new HashMap<>(); // 20190808 public PlayerManager(){ @@ -436,7 +438,7 @@ public class PlayerManager extends MongoBase { public void addOnlineTime(long onlineTime) { this.onlineTime += onlineTime; - setOnlineTimeOfDay(onlineTime); + //setOnlineTimeOfDay(onlineTime); updateString("onlineTime", this.onlineTime); } @@ -464,6 +466,16 @@ public class PlayerManager extends MongoBase { updateString("onlineTimeOfDay", this.onlineTimeOfDay); } + + public String getChannel() { + return channel; + } + + public void setChannel(String channel) { + updateString("channel", this.channel); + this.channel = channel; + } + public Map getOnlineTimeOfDay() { return onlineTimeOfDay; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java index ce2eb70b3..515a624fe 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java @@ -10,6 +10,7 @@ import java.util.*; public class RechargeInfo extends MongoBase{ private int saveAmt;//累计充值 + private int soulCrystalAmt;//累计充值购买魂晶 private int isFirst; private long createTime; private int hadBuyFound; @@ -152,4 +153,13 @@ public class RechargeInfo extends MongoBase{ updateString("goodseSendDailyMap." + goodsType,sendTime); this.goodseSendDailyMap.put(goodsType,sendTime); } + + public int getSoulCrystalAmt() { + return soulCrystalAmt; + } + + public void addSoulCrystalAmt(int soulCrystalAmt) { + this.soulCrystalAmt += soulCrystalAmt; + updateString("soulCrystalAmt",soulCrystalAmt); + } } 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 c3dd4b4e9..3f43c95aa 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 @@ -31,12 +31,12 @@ public class UserManager { return userMap.containsKey(uid); } - public static User userLogin(int uid,String openId) throws Exception { + public static User userLogin(int uid,String openId,String channel) throws Exception { User user = null; if (!UserManager.isUserExist(uid)){ user = MongoUtil.getInstence().getMyMongoTemplate().findById(User.getCollectionName(), uid, User.class); if (user == null) { - user = registerUser(uid,openId); + user = registerUser(uid,openId,channel); } UserManager.addUser(user); }else{ @@ -46,16 +46,16 @@ public class UserManager { } - private static User registerUser(int uid,String openId) throws Exception { + private static User registerUser(int uid,String openId,String channel) throws Exception { User user = new User(uid); - initPlayer(user,openId); + initPlayer(user,openId,channel); UserManager.addUser(user); MongoUtil.getInstence().getMyMongoTemplate().save(user); PlayerLogic.getInstance().sendTestWelfareMail(user,1,1); return user; } - private static void initPlayer(User user,String openId) throws Exception { + private static void initPlayer(User user,String openId,String channel) throws Exception { SGameSetting gameSetting = SGameSetting.getGameSetting(); PlayerManager playerManager = user.getPlayerInfoManager(); long now = TimeUtils.now(); @@ -70,6 +70,7 @@ public class UserManager { playerManager.setSendDays(1); playerManager.updateVipInfo(user,0); playerManager.setRechargeInfo(new RechargeInfo()); + playerManager.setChannel(channel); playerManager.setHeadFrame(SGameSetting.getGameSetting().getDefaultPicture()); SPlayerLevelConfig sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(1); playerManager.setMaxStamina(sPlayerLevelConfig.getMaxEnergy()); 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 b1e16095e..dc23aca9d 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,6 +8,7 @@ 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; @@ -19,6 +20,7 @@ import com.ljsd.jieling.logic.activity.event.SecretEvent; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroAttributeEnum; +import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.store.StoreLogic; @@ -114,13 +116,33 @@ public class CombatLogic { return heroAllAttributeMap; } - public void bufferAddByEatFoodOrEventTrigger(MapManager mapManager,int foodIdOrEventId) throws Exception { + public void bufferAddByEatFoodOrEventTrigger(User user,int foodIdOrEventId) throws Exception { + MapManager mapManager = user.getMapManager(); Map> heroAllAttributeMap = bufferAddByEatFoodOrEventTrigger(foodIdOrEventId, mapManager.getHeroAllAttributeMap()); mapManager.setHeroAllAttributeMap(heroAllAttributeMap); SFoodsConfig sFoodsConfig = SFoodsConfig.getsFoodsConfigByFoodId(foodIdOrEventId); int contiue = sFoodsConfig.getContiue(); if(contiue==0){ contiue=-1; + int teamId = mapManager.getTeamId(); + List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(teamId); + Map foodAddMap = new HashMap<>(); + getFoodAttributeAdd(GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON, foodAddMap, sFoodsConfig); + for (TeamPosHeroInfo heroInfo : teamPosHeroInfoList) { + Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId()); + if (hero == null) { + continue; + } + Map heroAllAttribute = user.getMapManager().getHeroAllAttributeByHeroId(hero.getId()); + if(heroAllAttribute == null || heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId()) <= 0){ + continue; + } + + HeroLogic.getInstance().combinedAttribute(foodAddMap,heroAllAttribute); + HeroLogic.getInstance().calInteractAdd(heroAllAttribute); + heroAllAttributeMap.put(hero.getId(), heroAllAttribute); + } + mapManager.setHeroAllAttributeMap(heroAllAttributeMap); } mapManager.eatFood(foodIdOrEventId,contiue); } @@ -136,24 +158,27 @@ public class CombatLogic { } int foodId = foodBuffer.getKey(); SFoodsConfig sFoodsConfig = SFoodsConfig.getsFoodsConfigByFoodId(foodId); - int typeTmp = sFoodsConfig.getType(); - int targetTmp = sFoodsConfig.getTarget(); - if( typeTmp==type && targetTmp==target ){ - int[][] effectParas = sFoodsConfig.getEffectPara(); - for(int[] effectPara : effectParas){ - int effectId = effectPara[0]; - int effectValue = effectPara[1]; - if(!foddAddResult.containsKey(effectId)){ - foddAddResult.put(effectId,effectValue); - continue; - } - foddAddResult.put( effectId,foddAddResult.get(effectId) + effectValue ); - } - } + getFoodAttributeAdd(type, target, foddAddResult, sFoodsConfig); } return foddAddResult; } + private void getFoodAttributeAdd(int type, int target, Map foddAddResult, SFoodsConfig sFoodsConfig) { + int typeTmp = sFoodsConfig.getType(); + int targetTmp = sFoodsConfig.getTarget(); + if( typeTmp==type && targetTmp==target ){ + int[][] effectParas = sFoodsConfig.getEffectPara(); + for(int[] effectPara : effectParas){ + int effectId = effectPara[0]; + int effectValue = effectPara[1]; + if(!foddAddResult.containsKey(effectId)){ + foddAddResult.put(effectId,effectValue); + continue; + } + foddAddResult.put( effectId,foddAddResult.get(effectId) + effectValue ); + } + } + } /************** 新挂机*****************/ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java index 252ca5f98..1c3bdab1e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java @@ -24,10 +24,7 @@ import com.ljsd.jieling.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; public class FriendLogic { @@ -95,18 +92,54 @@ public class FriendLogic { FriendManager friendManager = user.getFriendManager(); int selectSize = 10; Set recommondIds = new HashSet<>(); + Set onlineUIds = OnlineUserManager.sessionMap.keySet(); + int level = playerInfoManager.getLevel(); + int randomLevel = MathUtils.random(5, 20); + List recommandFriends = new ArrayList<>(); + List friendList = new CopyOnWriteArrayList<>(); + for(Integer recommandId : onlineUIds){ + if(recommandId == uid ){ + continue; + } + if (!checkIsAllowRecommandFriend(friendManager, recommandId,recommondIds)){ + continue; + } + User recommandIdUser = UserManager.getUserInMem(recommandId); + int minLevel = level - randomLevel; + minLevel = minLevel <= 5 ? 5 : minLevel; + int maxLevel = level + randomLevel; + int recommandLevel = recommandIdUser.getPlayerInfoManager().getLevel(); + if(recommandLevel < minLevel || recommandLevel > maxLevel){ + continue; + } + recommondIds.add(recommandId); + recommandFriends.add(recommandId); + selectSize--; + if(selectSize<=0){ + break; + } + } + Collections.shuffle(recommandFriends); + + List cUsers = MongoUtil.getInstence().getRandomUsers(selectSize, uid, playerInfoManager.getLevel()); if (cUsers != null){ + Collections.shuffle(cUsers); for (User cUser1 : cUsers) { int recommandId = cUser1.getId(); if (!checkIsAllowRecommandFriend(friendManager, recommandId,recommondIds)){ continue; } recommondIds.add(recommandId); + recommandFriends.add(recommandId); + selectSize--; + if(selectSize<=0){ + break; + } } } - List friendList = new CopyOnWriteArrayList<>(); - for (Integer commondUid : recommondIds){ + + for (Integer commondUid : recommandFriends){ CommonProto.Friend friend = CBean2Proto.getFriendInfo(commondUid,friendManager); friendList.add(friend); } @@ -298,9 +331,7 @@ public class FriendLogic { @Override public void work(User user) throws Exception { boolean isOnline = OnlineUserManager.checkUidOnline(user.getId()); - if(isOnline){ - MissionEventDistributor.requestStart(); - } + MissionEventDistributor.requestStart(); user.getUserMissionManager().onGameEvent(user, GameEvent.FRIEND_NUMS, 1); if(isOnline){ ISession session = OnlineUserManager.getSessionByUid(user.getId()); @@ -420,7 +451,7 @@ public class FriendLogic { User friendUser = UserManager.getUser(friendId); FriendManager friendManager1 = friendUser.getFriendManager(); Map haveRewardMap = friendUser.getFriendManager().getHaveRewardMap(); - if (haveRewardMap.get(uid) != 0) { + if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) { MessageUtil.sendErrorResponse(iSession, 0, msgId, "已经赠送过"); return; } @@ -439,14 +470,14 @@ public class FriendLogic { User friendUser = UserManager.getUser(friendUserId); FriendManager friendManager1 = friendUser.getFriendManager(); Map haveRewardMap = friendManager1.getHaveRewardMap(); - if (haveRewardMap.get(uid) != 0) { + if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) { continue; } friendManager.updateGiveMap(friendUserId,1); boolean check = friendUser.getPlayerInfoManager().check(SGameSetting.getGameSetting().getMaxEnergyGet(), 0); if(check){ friendManager1.updateHaveRewardMap(uid,1); - sendFriendStatedication(uid,friendId,2); + sendFriendStatedication(uid,friendUserId,2); times++; } } @@ -481,7 +512,7 @@ public class FriendLogic { MessageUtil.sendErrorResponse(iSession, 0, msgId, "没有该好友"); return; } - if (haveRewardMap.get(friendId) !=1){ + if (haveRewardMap.containsKey(friendId) && haveRewardMap.get(friendId) !=1){ MessageUtil.sendErrorResponse(iSession, 0, msgId, "已领取赠礼"); return; } @@ -492,7 +523,7 @@ public class FriendLogic { receieveFriends.add(friendId); }else{ for (Integer friend : friends) { - if (haveRewardMap.get(friend) != 1) { + if (haveRewardMap.containsKey(friend) && haveRewardMap.get(friend) != 1) { continue; } check = playerInfoManager.check(SGameSetting.getGameSetting().getMaxEnergyGet(), 1); @@ -570,6 +601,7 @@ public class FriendLogic { User user = UserManager.getUser(uid); FriendManager friendManager = user.getFriendManager(); Map giveMap = friendManager.getGiveMap(); + friendManager.setHaveRewardMap(new HashMap<>()); for (Map.Entry entry: giveMap.entrySet()){ Integer friendId = entry.getKey(); User friendUser = UserManager.getUser(friendId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 3f102a95c..0d83b694c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -4,15 +4,21 @@ import com.ljsd.GameApplication; import com.ljsd.jieling.chat.logic.ChatLogic; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.core.VipPrivilegeType; +import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.event.HeroUpStarEvent; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.fight.CombatLogic; +import com.ljsd.jieling.logic.item.ItemLogic; import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; +import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.HeroInfoProto; @@ -626,12 +632,13 @@ public class HeroLogic { } //删除hero - recyleHeroBySystem(user,removeHeroIds); + CommonProto.Drop.Builder baseBuilder = ItemLogic.getInstance().decomposeHero(session,new LinkedList<>(removeHeroIds),Collections.singleton(26),MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE); + // recyleHeroBySystem(user,removeHeroIds); targetHero.upStar( 1 ); Poster.getPoster().dispatchEvent(new HeroUpStarEvent(user.getId(),targetHero.getStar())); targetHero.setStarBreakId(scHeroRankUpConfig.getId()); user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_UP,2,targetHero.getTemplateId(),targetHero.getStar()); - MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,null,true); + MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,baseBuilder.build(),true); if(targetHero.getStar()>=7){ String message = SErrorCodeEerverConfig.getI18NMessage("lamp_rankup_hero_content", new Object[]{user.getPlayerInfoManager().getNickName(), scHero.getReadingName(),targetHero.getStar()}); ChatLogic.getInstance().sendSysChatMessage(message,Global.DILIGENT,targetHero.getTemplateId(),0,0,0,0,0); @@ -912,7 +919,7 @@ public class HeroLogic { public Map calHeroNotBufferAttribute(User user, Hero hero,boolean isForce,int teamId){ Map heroAllAttribute = calHeroAllAttribute(hero,isForce); heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE)); - Collection values = hero.getEquipByPositionMap().values(); + EquipManager equipManager = user.getEquipManager(); PokemonManager pokemonManager = user.getPokemonManager(); SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); @@ -936,16 +943,50 @@ public class HeroLogic { } //装备总战力评分 int equipForce=0; - for(String equipId:values){ + boolean needRemove = false; + Iterator> iterator = hero.getEquipByPositionMap().entrySet().iterator(); + while (iterator.hasNext()){ + Map.Entry next = iterator.next(); + String equipId = next.getValue(); Equip equip = equipManager.getEquipMap().get(equipId); + if(equip == null){ + needRemove = true; + continue; + } Map propertyValueByIdMap = equip.getPropertyValueByIdMap(); Map secondValueByIdMap = equip.getSecondValueByIdMap(); - // LOGGER.info("cal equip = {}",equip.getEquipId()); + // LOGGER.info("cal equip = {}",equip.getEquipId()); combinedAttribute(propertyValueByIdMap,heroAllAttribute); combinedAttribute(secondValueByIdMap,heroAllAttribute); SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equip.getEquipId()); equipForce+=sEquipConfig.getScore(); - // LOGGER.info("cal equip = {} end",equip.getEquipId()); + } + if(needRemove){ + AyyncWorker ayyncWorker = new AyyncWorker(user,true) { + @Override + public void work(User user) throws Exception { + Map heroMap = user.getHeroManager().getHeroMap(); + for(Hero heroTmp : heroMap.values()){ + Iterator> iterator = heroTmp.getEquipByPositionMap().entrySet().iterator(); + boolean isUpate = false; + while (iterator.hasNext()){ + Map.Entry next = iterator.next(); + String equipId = next.getValue(); + Equip equip = equipManager.getEquipMap().get(equipId); + if(equip == null){ + iterator.remove(); + isUpate = true; + } + } + if(isUpate){ + heroTmp.setEquipByPositionMap(heroTmp.getEquipByPositionMap()); + } + } + } + }; + ProtocolsManager instance = ProtocolsManager.getInstance(); + HandlerLogicThread handlerThread = instance.handlerThreads[user.getId() % instance.HANDLER_THREAD_NUM]; + handlerThread.addAyyncWorker(ayyncWorker); } //天赋异妖加成 Map ringFireMap = pokemonManager.getRingFireMap(); @@ -1079,7 +1120,7 @@ public class HeroLogic { return heroAllAttribute; } //食物buffer加成 - Map foodAddMap = CombatLogic.getInstance().attributeByEatFood(user,GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_TEAM); + Map foodAddMap = CombatLogic.getInstance().attributeByEatFood(user,GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON); if(foodAddMap.isEmpty()){ return heroAllAttribute; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java index c0c13bc71..d18a0c902 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java @@ -15,10 +15,7 @@ import com.ljsd.jieling.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class ItemLogic { private static final Logger LOGGER = LoggerFactory.getLogger(ItemLogic.class); @@ -92,7 +89,7 @@ public class ItemLogic { return ""; } - private void sendUseAndPriceItemMessage(ISession iSession, int msgId, CommonProto.Drop.Builder drop) { + public static void sendUseAndPriceItemMessage(ISession iSession, int msgId, CommonProto.Drop.Builder drop) { PlayerInfoProto.UseAndPriceItemResponse useAndPriceItemResponse = PlayerInfoProto.UseAndPriceItemResponse.newBuilder() .setDrop(drop) .build(); @@ -200,20 +197,20 @@ public class ItemLogic { } /** - * 分解卡牌 + * 分解卡牌|进阶消耗 * @param iSession * @param heroIdsList */ - public void decomposeHero(ISession iSession, List heroIdsList) throws Exception { - int msgId = MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE; + public CommonProto.Drop.Builder decomposeHero(ISession iSession, List heroIdsList,Set filterItem,int msgId) throws Exception { int uid = iSession.getUid(); + CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder(); User user = UserManager.getUser(uid); HeroManager heroManager = user.getHeroManager(); StringBuilder reward = new StringBuilder(); String erroMags = checkHeroResolve(heroIdsList,user); if (!erroMags.isEmpty()){ MessageUtil.sendErrorResponse(iSession,0,msgId,erroMags); - return; + return baseBuilder; } //1裸角色卡(没有突破过的角色卡)熔炼后返还的材料=当前等级返还升级材料+item表返还材料 //2有过突破的卡 =当前等级返还升级材料+突破表返还材料 @@ -248,10 +245,21 @@ public class ItemLogic { reward.append("#").append(sItem.getResolveReward()); } } + int reson =BIReason.DECOMPOS_HERO_REWARD; + if(null!=filterItem){ + reson= BIReason.UPHERO_DECOMPOS_HERO_REWARD; + + for (Integer id:filterItem){ + if(baseItemMap.containsKey(id)){ + baseItemMap.remove(id); + } + } +// filterItem.retainAll(baseItemMap.keySet()); +// filterItem.forEach(baseItemMap::remove); + } ItemUtil.combineReward(user,StringUtil.parseFiledInt(reward.toString()),1,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder(); - ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap, BIReason.DECOMPOS_HERO_REWARD); - sendUseAndPriceItemMessage(iSession, msgId, baseBuilder); + ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap, reson); + return baseBuilder; } private String checkHeroResolve(List heroIdsList,User user){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java index 984306126..0a4b49a97 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java @@ -71,8 +71,8 @@ public class MailLogic { if (size > Global.MAIL_BOX_CAPACITY){ Collections.sort(cMailList, Comparator.comparingInt(Mail::getSendTime)); for(int i = 0; i < (size - Global.MAIL_BOX_CAPACITY); i++){ - cMailList.remove(0); mailManager.removeMail(cMailList.get(0).getId()); + cMailList.remove(0); } } getAllMailProtoList(cMailList,mailList); @@ -192,6 +192,10 @@ public class MailLogic { // mail.setState(Global.MAIL_DRAW_ST_GOT); // mailManager.addMail(mail); } + if(mailItem.length()==0){ + MessageUtil.sendErrorResponse(iSession,0,msgId,"该邮件没有附件可以领取"); + return; + } int[][] itemArr = StringUtil.parseFiledInt2(mailItem.toString()); boolean isLimit = ItemUtil.checkCardAndEquipLimit(user,itemArr); if (isLimit){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java index 1c796de7c..90cbd3fb1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java @@ -171,6 +171,13 @@ public class BuyGoodsLogic { } if(sRechargeCommodityConfig.getAccumulativeRecharge() == 1){ int saveAmt = rechargeInfo.getSaveAmt(); + + int[][] costItemArr = StringUtil.parseFiledInt2(rewardStr); + for (int i = 0; i