diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleTreasure.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleTreasure.java new file mode 100644 index 000000000..ea8cbb9cb --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleTreasure.java @@ -0,0 +1,51 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.Map; + +@Table(name ="BloodyBattleTreasure") +public class SBloodyBattleTreasure implements BaseConfig { + + private int id; + + private int seasonPass; + + private int type; + + private int[][] seasonReward; + + private int[][] seasonTokenReward; + + public static Map sBloodyBattleTreasureMap; + + + @Override + public void init() throws Exception { + sBloodyBattleTreasureMap = STableManager.getConfig(SBloodyBattleTreasure.class); + } + + + public int getId() { + return id; + } + + public int getSeasonPass() { + return seasonPass; + } + + public int getType() { + return type; + } + + public int[][] getSeasonReward() { + return seasonReward; + } + + public int[][] getSeasonTokenReward() { + return seasonTokenReward; + } + + +} \ No newline at end of file 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 b3e6d9a16..6dede08f1 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 @@ -40,4 +40,5 @@ public class MongoKey { public final static String guildMyInfo = "guildMyInfo"; public final static String questionManager = "questionManager"; + public final static String bloodyInfo = "bloodyInfo"; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/BloodyBuyScoreRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/BloodyBuyScoreRewardHandler.java new file mode 100644 index 000000000..3acc69b32 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/BloodyBuyScoreRewardHandler.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.handler.bloody; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.blood.BloodLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class BloodyBuyScoreRewardHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.BLOOD_BUY_SCORE_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + BloodLogic.getInstance().buyBloodyScore(iSession); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/BloodyTakeScoreRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/BloodyTakeScoreRewardHandler.java new file mode 100644 index 000000000..c93328379 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/BloodyTakeScoreRewardHandler.java @@ -0,0 +1,22 @@ +package com.ljsd.jieling.handler.bloody; + + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.blood.BloodLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.RoomProto; +import org.springframework.stereotype.Component; + +@Component +public class BloodyTakeScoreRewardHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.BLOOD_TAKE_SCORE_REWARD_REQEUST; + } + + @Override + public void processWithProto(ISession iSession, RoomProto.BloodyTakeScoreRewardRequet proto) throws Exception { + BloodLogic.getInstance().takeBloodyScoreReward(iSession,proto.getId()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/GetBloodyScoreInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/GetBloodyScoreInfoHandler.java new file mode 100644 index 000000000..62daf653d --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/bloody/GetBloodyScoreInfoHandler.java @@ -0,0 +1,22 @@ +package com.ljsd.jieling.handler.bloody; + + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.blood.BloodLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class GetBloodyScoreInfoHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.BLOOD_GETSCORE_INFO_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + BloodLogic.getInstance().getBloodySsoreInfo(iSession); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java index 0faf9678f..af6e6b8e8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -190,10 +190,10 @@ public class GlobalDataManaager { break; case Endless: MapLogic.getInstance().resetEndlessInfo(); - BloodLogic.getInstance().bloodSeasonReward(); break; case Blood: - + BloodLogic.getInstance().bloodSeasonReward(); + break; default: break; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java index 6e17c3819..af16037d6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java @@ -1,9 +1,14 @@ package com.ljsd.jieling.logic.blood; import com.ljsd.GameApplication; +import com.ljsd.jieling.config.SBloodyBattleTreasure; import com.ljsd.jieling.config.SBloodyRankConfig; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.ktbeans.KtEventUtils; +import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; +import com.ljsd.jieling.logic.activity.ActivityType; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.family.GuildLogic; @@ -16,6 +21,7 @@ import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.RoomProto; +import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.StringUtil; import com.ljsd.jieling.util.TimeUtils; @@ -169,4 +175,116 @@ public class BloodLogic { } + //获取血战积分以及领取状态信息 + public void getBloodySsoreInfo(ISession session) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + BloodyInfo bloodyInfo = user.getBloodyInfo(); + bloodyInfo.setScore(99999); + Map sBloodyBattleTreasureMap = SBloodyBattleTreasure.sBloodyBattleTreasureMap; + RoomProto.GetBloodyScoreInfoResponse.Builder builder = RoomProto.GetBloodyScoreInfoResponse.newBuilder().setScore(bloodyInfo.getScore()).setHadBuy(bloodyInfo.getHadBuy()); + if(bloodyInfo.getStateInfo().isEmpty()){ + for(Integer id : sBloodyBattleTreasureMap.keySet()){ + bloodyInfo.updateStateInfo(id,0); + } + } + + for(Map.Entry entry : bloodyInfo.getStateInfo().entrySet()){ + Integer key = entry.getKey(); + Integer value = entry.getValue(); + builder.addBloodyScoreItemInfo(RoomProto.BloodyScoreItemInfo.newBuilder().setId(key).setStatus(value).build()); + } + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.BLOOD_GETSCORE_INFO_RESPONSE_VALUE,builder.build(),true); + } + + //领取血战积分奖励 + public void takeBloodyScoreReward(ISession session,int id) throws Exception { + int resId = MessageTypeProto.MessageType.BLOOD_TAKE_SCORE_REWARD_RESPONSE_VALUE; + int uid = session.getUid(); + User user = UserManager.getUser(uid); + BloodyInfo bloodyInfo = user.getBloodyInfo(); + Map stateInfo = bloodyInfo.getStateInfo(); + int changeState = 1; + int hadBuy = bloodyInfo.getHadBuy(); + if (hadBuy == 1) { + changeState = 2; + } + CommonProto.Drop.Builder drop=null; + int score = bloodyInfo.getScore(); + List changeInfo = new ArrayList<>(); + if(id == -1){ + List dropList = new ArrayList<>(10); + for(Map.Entry item : stateInfo.entrySet()){ + Integer misisonId = item.getKey(); + Integer status = item.getValue(); + SBloodyBattleTreasure sBloodyBattleTreasure = SBloodyBattleTreasure.sBloodyBattleTreasureMap.get(misisonId); + if(changeState == status || score< sBloodyBattleTreasure.getSeasonPass()){ + continue; + } + if (status == 0) { + dropList.add(sBloodyBattleTreasure.getSeasonReward()); + } + if (changeState == 2) { + dropList.add(sBloodyBattleTreasure.getSeasonTokenReward()); + } + changeInfo.add(misisonId); + } + if(dropList.isEmpty()){ + MessageUtil.sendErrorResponse(session,0,resId,"没有奖励可以领取"); + return; + } + drop = ItemUtil.drop(user, dropList, BIReason.TAKE_ACTIVITY_REWARD); + + }else{ + SBloodyBattleTreasure sBloodyBattleTreasure = SBloodyBattleTreasure.sBloodyBattleTreasureMap.get(id); + if(sBloodyBattleTreasure == null){ + MessageUtil.sendErrorResponse(session,0,resId,""); + return; + } + int seasonPass = sBloodyBattleTreasure.getSeasonPass(); + if(score < seasonPass){ + MessageUtil.sendErrorResponse(session,0,resId,"未达成条件"); + return; + } + Integer status = stateInfo.get(id); + if(status == null){ + status =0; + } + if(changeState == status){ + MessageUtil.sendErrorResponse(session,0,resId,"已领取"); + return; + } + List dropList = new ArrayList<>(2); + if (status == 0) { + dropList.add(sBloodyBattleTreasure.getSeasonReward()); + } + if (changeState == 2) { + dropList.add(sBloodyBattleTreasure.getSeasonTokenReward()); + } + changeInfo.add(id); + drop = ItemUtil.drop(user, dropList, BIReason.TAKE_ACTIVITY_REWARD); + bloodyInfo.updateStateInfo(id,changeState); + } + RoomProto.BloodyTakeScoreRewardResponse.Builder builder = RoomProto.BloodyTakeScoreRewardResponse.newBuilder().setDrop(drop); + for(Integer chnageId : changeInfo){ + builder.addChangeItemInfo(RoomProto.BloodyScoreItemInfo.newBuilder().setId(chnageId).setStatus(stateInfo.get(chnageId)).build()); + } + + MessageUtil.sendMessage(session,1,resId,builder.build(),true); + } + + public void buyBloodyScore(ISession session) throws Exception { + int uid = session.getUid(); + int resId = MessageTypeProto.MessageType.BLOOD_BUY_SCORE_RESPONSE_VALUE; + User user = UserManager.getUser(uid); + BloodyInfo bloodyInfo = user.getBloodyInfo(); + int hadBuy = bloodyInfo.getHadBuy(); + if(hadBuy == 1){ + MessageUtil.sendErrorResponse(session,0,resId,"已购买"); + return; + } + bloodyInfo.setHadBuy(1); + MessageUtil.sendMessage(session,1,resId,null,true); + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/BloodyInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/BloodyInfo.java new file mode 100644 index 000000000..9dc43b761 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/BloodyInfo.java @@ -0,0 +1,44 @@ +package com.ljsd.jieling.logic.dao; + +import com.ljsd.common.mogodb.MongoBase; + +import java.util.HashMap; +import java.util.Map; + +public class BloodyInfo extends MongoBase { + public static final String _COLLECTION_NAME = "bloodyInfo"; + + private int score; + + private int hadBuy; //是否已购 + + private Map stateInfo = new HashMap<>(); + + + public int getScore() { + return score; + } + + public int getHadBuy() { + return hadBuy; + } + + public Map getStateInfo() { + return stateInfo; + } + + public void setScore(int score) { + updateString("score",score); + this.score = score; + } + + public void setHadBuy(int hadBuy) { + updateString("hadBuy",hadBuy); + this.hadBuy = hadBuy; + } + + public void updateStateInfo(int missionId,int status){ + updateString("stateInfo." + missionId,status); + this.stateInfo.put(missionId,status); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java index 2b7802c86..4c6863ece 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java @@ -91,7 +91,7 @@ public class GuilidManager { String key = RedisUtil.getInstence().getKey("guild-release", ""); while (needContinue){ Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores("guild-release", "", round*5, (round+1)*5); - if(zsetreverseRangeWithScores.isEmpty()){ + if(zsetreverseRangeWithScores == null || zsetreverseRangeWithScores.isEmpty()){ return; } for(ZSetOperations.TypedTuple item : zsetreverseRangeWithScores){ 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 ab1b9ab40..b49f91e5e 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 @@ -50,6 +50,7 @@ public class User { private RoomInfo roomInfo; private QuestionManager questionManager; + private BloodyInfo bloodyInfo; //构造函数必须要声明,否则从mongodb读出来反编译成类不通过 public User(){ @@ -76,6 +77,7 @@ public class User { this.friendManager = new FriendManager(); this.guildMyInfo = new GuildMyInfo(); this.questionManager = new QuestionManager(); + this.bloodyInfo = new BloodyInfo(); //綁定关系 @@ -98,6 +100,7 @@ public class User { this.friendManager.init(id,MongoKey.friendManager); this.guildMyInfo.init(id,MongoKey.guildMyInfo); this.questionManager.init(id,MongoKey.questionManager); + this.bloodyInfo.init(id,MongoKey.bloodyInfo); } public int getId() { @@ -226,4 +229,9 @@ public class User { } return questionManager; } + + + public BloodyInfo getBloodyInfo() { + return bloodyInfo; + } }