From 0db40f7fde80a0487b531d0bac277d8741c1281e Mon Sep 17 00:00:00 2001 From: wangyuan Date: Sat, 7 Sep 2019 20:03:06 +0800 Subject: [PATCH] bloody --- .../com/ljsd/BattleServerApplication.java | 2 + .../java/com/ljsd/battle/actor/Creature.java | 9 ++-- .../java/com/ljsd/battle/actor/Scene.java | 10 +++- .../com/ljsd/battle/actor/SceneActor.java | 16 ++++-- .../com/ljsd/battle/actor/SortDataBean.java | 15 ++---- .../com/ljsd/battle/room/SceneManager.java | 11 ++-- .../com/ljsd/battle/statics/AnalysisData.java | 8 ++- .../com/ljsd/battle/util/MessageUtil.java | 2 + .../com/ljsd/battle/vo/UserBloodySnpInfo.java | 6 +++ .../com/ljsd/jieling/bloody/SortDataBean.java | 36 +++++++++++++ .../jieling/bloody/UserBloodySnpInfo.java | 4 ++ .../jieling/config/SBloodyBattleSetting.java | 14 +++++ .../jieling/config/SBloodyBattleTask.java | 45 ++++++++++++++++ .../com/ljsd/jieling/db/redis/RedisKey.java | 1 + .../com/ljsd/jieling/db/redis/RedisUtil.java | 2 +- .../jieling/logic/GlobalDataManaager.java | 1 + .../ljsd/jieling/logic/blood/BloodLogic.java | 43 +++++++++++++++ .../ljsd/jieling/logic/dao/BloodyInfo.java | 11 ++++ .../jieling/logic/dao/CumulationData.java | 4 ++ .../ljsd/jieling/logic/dao/UserManager.java | 1 + .../jieling/logic/dao/UserMissionManager.java | 34 ++++++++++-- .../ljsd/jieling/logic/mission/GameEvent.java | 4 ++ .../jieling/logic/mission/GameMisionType.java | 1 + .../jieling/logic/mission/MissionLoigc.java | 45 +++++++++++++++- .../jieling/logic/mission/MissionType.java | 5 +- .../event/MissionEventDistributor.java | 11 +++- .../mission/main/BloodyMissionIdsType.java | 40 ++++++++++++++ .../ljsd/jieling/thread/ThreadManager.java | 1 + .../thread/task/FetchBloodyEndDataThread.java | 53 +++++++++++++++++++ 29 files changed, 399 insertions(+), 36 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/bloody/SortDataBean.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleTask.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/BloodyMissionIdsType.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java diff --git a/bloodybattle/src/main/java/com/ljsd/BattleServerApplication.java b/bloodybattle/src/main/java/com/ljsd/BattleServerApplication.java index 427b65c56..5e9dacdfe 100644 --- a/bloodybattle/src/main/java/com/ljsd/BattleServerApplication.java +++ b/bloodybattle/src/main/java/com/ljsd/BattleServerApplication.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.ljsd.battle.handler.BaseHandler; import com.ljsd.battle.handler.BloodyHandleLogicThread; import com.ljsd.battle.room.SceneManager; +import com.ljsd.battle.statics.MessageBoxUtils; import com.ljsd.jieling.config.json.CoreSettings; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; @@ -68,6 +69,7 @@ public class BattleServerApplication { final NettyServerAutoConfiguration netServerConfig = configurableApplicationContext.getBean(NettyServerAutoConfiguration.class); NettyProperties properties = netServerConfig.getNettyProperties(); register(properties); + MessageBoxUtils.init(); Runtime.getRuntime().addShutdownHook(new Thread() { @Override diff --git a/bloodybattle/src/main/java/com/ljsd/battle/actor/Creature.java b/bloodybattle/src/main/java/com/ljsd/battle/actor/Creature.java index 491009970..dd06ddd71 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/actor/Creature.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/actor/Creature.java @@ -162,14 +162,14 @@ public abstract class Creature extends SceneActor{ int curPos = getPos(); LOGGER.info("the id={},preMoveTimestamp={},the time ={},move={},the oldXy={},the curXy={}",getId(),new Date(preMoveTimestamp),new Date(timestamp),moveDistance,CellUtil.pos2XY(oldXY),CellUtil.pos2XY(curPos)); - + setStateType(StateType.MOVEABLE); preMoveTimestamp = timestamp; return curPos; } public boolean canMoveNext(int nextPath,boolean update){ for(SceneActor sceneActor : getScene().getSceneActorMap().values()){ - if(sceneActor == this ) { + if(sceneActor == this || getScene().checkIsDied(sceneActor)) { continue; } if(sceneActor.getType() == ActorType.Player && sceneActor.getStateType() == StateType.INVINCIBLE){ @@ -215,7 +215,7 @@ public abstract class Creature extends SceneActor{ Set xySet = CellUtil.getSurroundPos(maxX,maxY,curPos); Map sceneActorMap = scene.getSceneActorMap(); for(SceneActor sceneActor : sceneActorMap.values()){ - if(sceneActor == this) { + if(sceneActor == this || getScene().checkIsDied(sceneActor)) { continue; } if(triggerEvent(sceneActor,timestamp,xySet)){ @@ -229,7 +229,6 @@ public abstract class Creature extends SceneActor{ int curPos = getPos(); boolean result= false; ActorType type = sceneActor.getType(); - //int triggerEvent = 0; int triggerBuffer = 0; if(type == ActorType.Npc){ if(curPos == sceneActor.getPos()){ @@ -237,7 +236,7 @@ public abstract class Creature extends SceneActor{ } } if(type == ActorType.Mineral && this.getType() == ActorType.Player){ - if(curPos == sceneActor.getPos()){ + if(curPos == sceneActor.getPos() && getStateType()!=StateType.DIGGER && getStateType()!=StateType.FROZEN){ triggerBuffer=BufferType.DIGGER.getType(); setStateType(StateType.DIGGER); } diff --git a/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java b/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java index baafb176b..4ff3c5044 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java @@ -1,5 +1,6 @@ package com.ljsd.battle.actor; +import com.google.gson.Gson; import com.ljsd.battle.room.BeanToProto; import com.ljsd.battle.room.Command; import com.ljsd.battle.room.SceneManager; @@ -81,6 +82,10 @@ public class Scene implements Runnable{ } + public boolean checkIsDied(SceneActor sceneActor){ + return builder.getRemoveActorIdList().contains(sceneActor.getId()); + } + public void addScenActor(SceneActor sceneActor){ sceneActorMap.put(sceneActor.getId(),sceneActor); if(startTime>0){ @@ -208,6 +213,7 @@ public class Scene implements Runnable{ case SCENEACTORE_REMOVE: int deadId = (int) parm; builder.addRemoveActorId(deadId); + System.out.println("remove the scene id is " + deadId); break; case POSMINERAL_REMOVE: builder.addRemovePosMineralId( (int) parm); @@ -308,7 +314,7 @@ public class Scene implements Runnable{ Creature creature = (Creature)sceneActorMap.get(playId); int mineral = creature.getMineral(); int killNums = analysisData.getKillNums(); - sortDataBeans.add(new SortDataBean(playId,mineral,killNums)); + sortDataBeans.add(new SortDataBean(playId,mineral,killNums,analysisData.getServerId())); } Collections.sort(sortDataBeans); @@ -339,6 +345,7 @@ public class Scene implements Runnable{ rank++; SceneManager.clearUidScene(id); RedisUtil.getInstence().del(RedisKey.MATCH_UID_KEY + ":" + id); + RedisUtil.getInstence().putMapEntry(RedisKey.BLOODY_PERSON_BATTLE_INFO, Integer.toString(sortDataBean.getServerId()),Integer.toString(id),sortDataBean); } for(SortDataBean sortDataBean : sortDataBeans){ @@ -352,7 +359,6 @@ public class Scene implements Runnable{ - public void execASync(BattleRequest battleRequest){ executorService.submit(new Callable() { @Override diff --git a/bloodybattle/src/main/java/com/ljsd/battle/actor/SceneActor.java b/bloodybattle/src/main/java/com/ljsd/battle/actor/SceneActor.java index 795f054ff..d622224d9 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/actor/SceneActor.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/actor/SceneActor.java @@ -8,6 +8,9 @@ import com.ljsd.battle.statics.AnalysisEventType; import com.ljsd.battle.statics.AnalysisSourceData; import com.ljsd.battle.statics.MessageBoxUtils; import com.ljsd.jieling.config.SBloodyBattleSetting; +import com.ljsd.jieling.logic.hero.HeroLogic; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -17,6 +20,7 @@ import java.util.concurrent.ConcurrentHashMap; * 场景里的各种演员 */ public abstract class SceneActor{ + private static final Logger LOGGER = LoggerFactory.getLogger(SceneActor.class); private int id; private int pos; private Map bufferMap = new ConcurrentHashMap<>(2); @@ -35,13 +39,12 @@ public abstract class SceneActor{ public void addOrUpdateBuffer(EffectBuffer effectBuffer){ - System.out.println(effectBuffer); + LOGGER.info("add buffer={}",effectBuffer); if(effectBuffer.getType() == BufferType.BATTLE.getType()){ stateType = StateType.FROZEN; scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId()); //停止挖矿 checkUpdateBuffer(effectBuffer.getStartTime(),true); - System.out.println("the actor" + id + "is frozen"); } if(effectBuffer.getType() == BufferType.DIGGER.getType()){ effectBuffer.updateEffectValue(0,0); @@ -73,6 +76,11 @@ public abstract class SceneActor{ int willDgger = (int)((now - value.getStartTime()) / intervalMs)-value.getValues().get(0); Creature creature = (Creature) this; Creature mineral =(Creature) scene.getSceneActorMap().get(value.getCaster()); + if(mineral == null){ + iterator.remove(); + LOGGER.error("the mineral ={} is null",value.getCaster()); + continue; + } if(willDgger>0&&mineral.getLife().getCurHp()>0) { int reallyDigger = mineral.getLife().reduceHp(willDgger); creature.addMineral(reallyDigger); @@ -115,7 +123,7 @@ public abstract class SceneActor{ if(mineral.getLife().getCurHp()<=0){ scene.processEventUpdate(EventType.SCENEACTORE_REMOVE,value.getCaster()); } - System.out.println("remove the digger buffer" + value.getId()); + LOGGER.info("the target={},remove the digger buffer={}," ,this.getId(), value.getId()); int[][] debuff = SBloodyBattleSetting.sBloodyBattleSetting.getDebuff(); for(int[] debuffItem : debuff){ int duration = debuffItem[3]; @@ -134,7 +142,7 @@ public abstract class SceneActor{ isUpdate = true; whenBufferRemove(value,now); scene.processEventUpdate(EventType.BUFFER_REMOVE,value.getId()); - System.out.println("---------------------update--------------------------" + value.getType() +" "+new Date(now) + "end time" + new Date(value.getEndTime())); + LOGGER.info("the target={},remove the buffer={}," ,this.getId(), value.getId()); } } if(isUpdate){ diff --git a/bloodybattle/src/main/java/com/ljsd/battle/actor/SortDataBean.java b/bloodybattle/src/main/java/com/ljsd/battle/actor/SortDataBean.java index a505252e0..9d950729c 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/actor/SortDataBean.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/actor/SortDataBean.java @@ -8,12 +8,14 @@ public class SortDataBean implements Comparable{ private int uid; private int mineral; private int killNums; + private int serverId; //服务器id - public SortDataBean(int uid, int mineral, int killNums) { + public SortDataBean(int uid, int mineral, int killNums,int serverId) { this.uid = uid; this.mineral = mineral; this.killNums = killNums; + this.serverId = serverId; } @Override @@ -46,14 +48,7 @@ public class SortDataBean implements Comparable{ return killNums; } - public static void main(String[] args) { - List sortDataBeans = new ArrayList<>(); - sortDataBeans.add(new SortDataBean(1,2,2)); - sortDataBeans.add(new SortDataBean(2,2,3)); - sortDataBeans.add(new SortDataBean(3,3,2)); - sortDataBeans.add(new SortDataBean(4,4,2)); - sortDataBeans.add(new SortDataBean(5,4,2)); - Collections.sort(sortDataBeans); - System.out.println(sortDataBeans); + public int getServerId() { + return serverId; } } diff --git a/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java b/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java index 4c501af11..977dfdb64 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java @@ -97,13 +97,13 @@ public class SceneManager { playerA.setPos(userInitBirths.remove(0)); playerA.setSpeed(sBloodyBattleSetting.getPlayerSpeed()); scene.addScenActor(playerA); - scene.getAnalysisDataMap().put(uid,new AnalysisData(uid)); + scene.getAnalysisDataMap().put(uid,new AnalysisData(uid,userBloodySnpInfo.getServerId())); sceneByUidMap.put(uid,scene); } //创建矿点 createMinear(scene,-1,1); //创建怪物 - createMonster(scene,-1); + // createMonster(scene,-1); sceneMap.put(room.getId(),scene); System.out.println("create romm --- -"+room.getId()); @@ -152,13 +152,14 @@ public class SceneManager { System.out.println("find and break... " + monsterIndex); break; } - break; } } + public static void createMinear(Scene scene,int target,int nums){ //创建矿 + System.out.println("target--" + target + "-- nums --" + nums); SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; Map initializeMineMap = sBloodyBattleSetting.getInitializeMineMap(); Map scMap = SCMap.sCMap.get(bloodyMap.getMapId()); @@ -166,10 +167,11 @@ public class SceneManager { for(SceneActor sceneActor : scene.getSceneActorMap().values()){ excluIndexs.add(sceneActor.getPos()); } + System.out.println(excluIndexs); for (Map.Entry entry : scMap.entrySet()) { SCMap scMap1 = entry.getValue(); int event = scMap1.getEvent(); - if(event == 1 || event == 2 ){ + if(event == 1 || event == 2 || event == 3){ if(target!=-1 && target!=event){ continue; } @@ -202,7 +204,6 @@ public class SceneManager { sceneMineral.setStateType(StateType.READYED_STATE); sceneMineral.setSize(event); scene.addScenActor(sceneMineral); - break; } if(target!=-1){ break; diff --git a/bloodybattle/src/main/java/com/ljsd/battle/statics/AnalysisData.java b/bloodybattle/src/main/java/com/ljsd/battle/statics/AnalysisData.java index 232dc363d..443b36c40 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/statics/AnalysisData.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/statics/AnalysisData.java @@ -8,9 +8,11 @@ public class AnalysisData { private int continuousKillNums;//连续杀敌次数 private int continuousKillNumsCache;//连续杀敌次数 CACHE private int continuousDeadNums;//连续死亡次数 + private int serverId; - public AnalysisData(int id) { + public AnalysisData(int id,int serverId) { this.id = id; + this.serverId = serverId; } public void win(){ @@ -66,4 +68,8 @@ public class AnalysisData { public void cleanContinuousKillNumsCache(){ continuousKillNumsCache=0; } + + public int getServerId() { + return serverId; + } } diff --git a/bloodybattle/src/main/java/com/ljsd/battle/util/MessageUtil.java b/bloodybattle/src/main/java/com/ljsd/battle/util/MessageUtil.java index 97fe27ae1..5a399505b 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/util/MessageUtil.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/util/MessageUtil.java @@ -1,4 +1,5 @@ package com.ljsd.battle.util; +import com.googlecode.protobuf.format.JsonFormat; import com.ljsd.battle.actor.ActorType; import com.ljsd.battle.actor.Scene; import com.ljsd.battle.actor.SceneActor; @@ -24,6 +25,7 @@ public class MessageUtil { backMessage = new byte[0]; } else { backMessage = generatedMessage.toByteArray(); + LOGGER.info(JsonFormat.printToString(generatedMessage)); } int length = PackageConstant.UID_FIELD_LEN + PackageConstant.TOKEN_LEN diff --git a/bloodybattle/src/main/java/com/ljsd/battle/vo/UserBloodySnpInfo.java b/bloodybattle/src/main/java/com/ljsd/battle/vo/UserBloodySnpInfo.java index a880a4390..0003a751b 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/vo/UserBloodySnpInfo.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/vo/UserBloodySnpInfo.java @@ -26,6 +26,8 @@ public class UserBloodySnpInfo { private int maxHp; + private int serverId; + public UserBloodySnpInfo(int uid, String name) { this.uid = uid; @@ -106,4 +108,8 @@ public class UserBloodySnpInfo { public void setLevel(int level) { this.level = level; } + + public int getServerId() { + return serverId; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/bloody/SortDataBean.java b/serverlogic/src/main/java/com/ljsd/jieling/bloody/SortDataBean.java new file mode 100644 index 000000000..6fb2d9602 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/bloody/SortDataBean.java @@ -0,0 +1,36 @@ +package com.ljsd.jieling.bloody; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class SortDataBean{ + private int uid; + private int mineral; + private int killNums; + private int serverId; //服务器id + + + public SortDataBean(int uid, int mineral, int killNums) { + this.uid = uid; + this.mineral = mineral; + this.killNums = killNums; + } + + public int getUid() { + return uid; + } + + public int getMineral() { + return mineral; + } + + public int getKillNums() { + return killNums; + } + + + public int getServerId() { + return serverId; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/bloody/UserBloodySnpInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/bloody/UserBloodySnpInfo.java index 5e555b98a..06db748fd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/bloody/UserBloodySnpInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/bloody/UserBloodySnpInfo.java @@ -4,12 +4,15 @@ package com.ljsd.jieling.bloody; +import com.ljsd.GameApplication; import com.ljsd.jieling.logic.dao.FamilyHeroInfo; import java.util.HashMap; import java.util.Map; public class UserBloodySnpInfo { + private int serverId; + private int uid; private String name; @@ -34,6 +37,7 @@ public class UserBloodySnpInfo { public UserBloodySnpInfo(int uid, String name) { this.uid = uid; this.name = name; + this.serverId = GameApplication.serverId; } public void updateHeroSkill(String heroId, String skills){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java index 7b91f8adf..0c036d90c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java @@ -78,9 +78,15 @@ public class SBloodyBattleSetting implements BaseConfig { private int baseScore; private int extraDiscount; + private int[][] openPeriod; + + private int[][] scoreConversion; + private Map debuffMap; private Map monsterIndexMap; + + @Override public void init() throws Exception { @@ -280,4 +286,12 @@ public class SBloodyBattleSetting implements BaseConfig { public void setMonsterIndexMap(Map monsterIndexMap) { this.monsterIndexMap = monsterIndexMap; } + + public int[][] getOpenPeriod() { + return openPeriod; + } + + public int[][] getScoreConversion() { + return scoreConversion; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleTask.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleTask.java new file mode 100644 index 000000000..22b52d820 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleTask.java @@ -0,0 +1,45 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.Map; + +@Table(name ="BloodyBattleTask") +public class SBloodyBattleTask implements BaseConfig { + + private int id; + + private int taskType; + + private int[][] taskValue; + + private int rewardGroup; + + public static Map sBloodyBattleTaskMap; + + + @Override + public void init() throws Exception { + sBloodyBattleTaskMap = STableManager.getConfig(SBloodyBattleTask.class); + } + + + public int getId() { + return id; + } + + public int getTaskType() { + return taskType; + } + + public int[][] getTaskValue() { + return taskValue; + } + + public int getRewardGroup() { + return rewardGroup; + } + + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index b7641e32e..2fe3d8376 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -165,6 +165,7 @@ public class RedisKey { public static final String MATCH_UID_KEY = "MATCH_UID_KEY"; public static final String BLOODY_TEAM = "BLOODY_TEAM"; public static final String BLOODY_SERVER_INFO = "BLOODY_SERVER_INFO"; + public static final String BLOODY_PERSON_BATTLE_INFO = "BLOODY_PERSON_BATTLE_INFO"; public static String getKey(String type, String key, boolean withoutServerId) { if (withoutServerId) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index c15fe8da7..4afbb53ac 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -973,7 +973,7 @@ public class RedisUtil { public String getKey(String type,String key){ - if(RedisKey.BLOODY_RANK.equals(type) || RedisKey.BLOODY_TEAM.equals(type) || RedisKey.PLAYER_INFO_CACHE.equals(type)) { + if(RedisKey.BLOODY_RANK.equals(type) || RedisKey.BLOODY_TEAM.equals(type) || RedisKey.PLAYER_INFO_CACHE.equals(type) || RedisKey.BLOODY_PERSON_BATTLE_INFO.equals(type)) { return type + RedisKey.Delimiter_colon + key; } return GameApplication.serverId + RedisKey.Delimiter_colon + type + RedisKey.Delimiter_colon + key; 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 4cd8893c0..8fa6386da 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -271,6 +271,7 @@ public class GlobalDataManaager { PlayerLogic.getInstance().vipflushEveryDay(user,fBuilder); PlayerLogic.getInstance().flushUserdataEvery(user,fBuilder); user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH,0); + user.getUserMissionManager().onGameEvent(user, GameEvent.BLOODY_REFRESH,0); FriendLogic.getInstance().refreshState(session); int sendDays = user.getPlayerInfoManager().getSendDays(); int differentDays = TimeUtils.differentDaysByHour( user.getPlayerInfoManager().getLoginTime(),System.currentTimeMillis(), 5); 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 dbf89bb07..501e82022 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,13 +1,17 @@ package com.ljsd.jieling.logic.blood; import com.ljsd.GameApplication; +import com.ljsd.jieling.bloody.SortDataBean; +import com.ljsd.jieling.config.SBloodyBattleSetting; import com.ljsd.jieling.config.SBloodyBattleTreasure; import com.ljsd.jieling.config.SBloodyRankConfig; +import com.ljsd.jieling.db.mongo.MongoUtil; 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.OnlineUserManager; import com.ljsd.jieling.logic.activity.ActivityType; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; @@ -17,6 +21,10 @@ import com.ljsd.jieling.logic.hero.HeroAttributeEnum; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.item.ItemLogic; import com.ljsd.jieling.logic.mail.MailLogic; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; @@ -288,4 +296,39 @@ public class BloodLogic { bloodyInfo.setHadBuy(1); MessageUtil.sendMessage(session,1,resId,null,true); } + + public void calBloodyMissionInfo(User user,SortDataBean sortDataBean) throws Exception { + int killNums = sortDataBean.getKillNums(); + BloodyInfo bloodyInfo = user.getBloodyInfo(); + bloodyInfo.setKillNums(bloodyInfo.getKillNums() + 9999); + int changeScore = calScore(sortDataBean); + if(changeScore>0){ + bloodyInfo.setScore(bloodyInfo.getScore() + calScore(sortDataBean)); + } + MissionEventDistributor.requestStart(); + user.getUserMissionManager().onGameEvent(user, GameEvent.BLOODY_END); + ISession session = OnlineUserManager.getSessionByUid(user.getId()); + if(session!=null){ + MissionEventDistributor.requestEnd(session,true); + MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.BLOODY_SCORE_CHANGE_INDICATION_VALUE, RoomProto.BloodyScoreChangeIndication.newBuilder().setMyscore(bloodyInfo.getScore()).build(),true); + } + MongoUtil.getInstence().lastUpdate(); + } + + private int calScore(SortDataBean sortDataBean){ + int result = 0; + int killNums = sortDataBean.getKillNums(); + int mineral = sortDataBean.getMineral(); + int[][] scoreConversion = SBloodyBattleSetting.sBloodyBattleSetting.getScoreConversion(); + for(int [] scoreItem : scoreConversion){ + int type = scoreItem[0]; + if(type == 1){ + result+=mineral/scoreItem[1]; + }else{ + result+=killNums/scoreItem[1]; + } + + } + return result; + } } 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 index 9dc43b761..d4c565420 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/BloodyInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/BloodyInfo.java @@ -12,6 +12,8 @@ public class BloodyInfo extends MongoBase { private int hadBuy; //是否已购 + private int killNums;// 每日杀死人数 + private Map stateInfo = new HashMap<>(); @@ -41,4 +43,13 @@ public class BloodyInfo extends MongoBase { updateString("stateInfo." + missionId,status); this.stateInfo.put(missionId,status); } + + public int getKillNums() { + return killNums; + } + + public void setKillNums(int killNums) { + updateString("killNums",killNums); + this.killNums = killNums; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java index d8a6f5a2b..efe98ac2e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java @@ -196,6 +196,10 @@ public class CumulationData { this.subType = subType; this.param2 = param2; } + + public void setValue(long value) { + this.value = value; + } } public void updateHeroUpStarTimes(int heroTid){ 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 0edffe2fb..860cfdcd8 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 @@ -87,6 +87,7 @@ public class UserManager { PlayerLogic.getInstance().playerInfoUpdate(user); 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); user.getUserMissionManager().onGameEvent(user, GameEvent.BEGINNER); KtEventUtils.onKtEvent(user, ParamEventBean.UserRegister); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index 7b0f2f405..e4dca8731 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -1,10 +1,7 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; -import com.ljsd.jieling.config.SBeginnerTask; -import com.ljsd.jieling.config.SDailyTasksConfig; -import com.ljsd.jieling.config.STreasureTaskConfig; -import com.ljsd.jieling.config.SVipLevelConfig; +import com.ljsd.jieling.config.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.mission.*; import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; @@ -22,6 +19,7 @@ public class UserMissionManager extends MongoBase { private TreasureMissionType treasureMissionIdsType=new TreasureMissionType(); private ServenMissionIdsType sevenHappyMissionType =new ServenMissionIdsType(); + private BloodyMissionIdsType bloodyMissionIdsType =new BloodyMissionIdsType(); //数据累加项 private CumulationData cumulationData = new CumulationData(); private CumulationData dailyCumulationData = new CumulationData(); @@ -94,6 +92,15 @@ public class UserMissionManager extends MongoBase { updateString("beginerTaskIdsType", beginerTaskIdsType); updateString("beginCumulationData", beginCumulationData); break; + + case BLOODY_REFRESH: + Set bloodyMissionIds = SBloodyBattleTask.sBloodyBattleTaskMap.keySet(); + bloodyMissionIdsType.getDoingMissionIds().clear(); + bloodyMissionIdsType.getFinishMissionIds().clear(); + bloodyMissionIdsType.getRewardedMissionIds().clear(); + bloodyMissionIdsType.getDoingMissionIds().addAll(bloodyMissionIds); + updateString("bloodyMissionIdsType",bloodyMissionIdsType); + break; } } @@ -132,6 +139,11 @@ public class UserMissionManager extends MongoBase { updateString("beginerTaskIdsType",beginerTaskIdsType); } break; + case BLOODY_MISSION_REWARD:{ + bloodyMissionIdsType.rewardMission((int)parm[0], missionTypeEnumListMap.get(GameMisionType.BLOODYMISSION)); + updateString("bloodyMissionIdsType",bloodyMissionIdsType); + } + break; } } @@ -142,6 +154,16 @@ public class UserMissionManager extends MongoBase { public void calCumulationDataResult(User user, MissionType missionType, Map> missionTypeEnumListMap , Object...parm) throws Exception { + if( missionType == MissionType.BLOODY_KILL_NUMS ){ + if(!bloodyMissionIdsType.getDoingMissionIds().isEmpty()){ + CumulationData.Result result = new CumulationData.Result(missionType, 0); + bloodyMissionIdsType.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.BLOODYMISSION),null); + if(result.value == 1){ + updateString("bloodyMissionIdsType",bloodyMissionIdsType); + } + } + return; + } if(!dailyMissionIdsType.getDoingMissionIds().isEmpty()){ List sTaskConfigs = SDailyTasksConfig.getsTaskConfigByTypeMap(missionType.getMissionTypeValue()); if (sTaskConfigs != null) { @@ -248,4 +270,8 @@ public class UserMissionManager extends MongoBase { public CumulationData getBeginCumulationData() { return beginCumulationData; } + + public BloodyMissionIdsType getBloodyMissionIdsType() { + return bloodyMissionIdsType; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java index 82222ae31..aa715d8f1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.mission; public enum GameEvent { VIP_LEVLUP, //vip等级提升 DAILY_REFRESH,//日常任务刷新 + BLOODY_REFRESH,//血战任务刷新 TREASH_REFRESH,//孙龙的宝藏 SERVENHAPPY_REFRESH,//七日狂欢 BEGINNER,//新手 @@ -25,6 +26,7 @@ public enum GameEvent { VIP_MISSION_REWARD, //vip任务领取事件 DAILY_MISSION_REWARD, //每日任务领取事件 BEGINNER_MISSION_REWARD, //新手任务领取 + BLOODY_MISSION_REWARD, //血战任务领取 TREASURE_MISSION_REWARD,// 领取孙龙的宝藏 SEVENHAPPY_MISSION_REWARD,// 领取孙龙的宝藏 WORKSHOP_CREATE_EQUIP,//打造装备 @@ -54,4 +56,6 @@ public enum GameEvent { TO_BE_STRONGER,//我要变强 + BLOODY_END,// 血战结束 + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java index 286eef1fb..a4f2288cd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java @@ -7,6 +7,7 @@ public enum GameMisionType { TREASUREMISSION(4), SEVENMISSION(5), BEGINNERMISSION(6), + BLOODYMISSION(7), ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index c7d1daa24..5f91e0332 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -36,12 +36,35 @@ public class MissionLoigc { getVipMission(user,missionList); getCopyMission(user,missionList); getTreasureMission(user,missionList,ActivityType.TREASURE); - getTreasureMission(user,missionList,ActivityType.SERVERHAPPY); - getBeginnerMisssion(user,missionList); + getTreasureMission(user,missionList,ActivityType.SERVERHAPPY); + getBeginnerMisssion(user,missionList); + getBloodyMisison(user,missionList); PlayerInfoProto.GetMissionResponse build = PlayerInfoProto.GetMissionResponse.newBuilder().addAllUserMissionInfo(missionList).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_MISSION_RESPONSE_VALUE,build,true); } + private static void getBloodyMisison(User user, List missionList){ + UserMissionManager userMissionManager = user.getUserMissionManager(); + BloodyMissionIdsType bloodyMissionIdsType = userMissionManager.getBloodyMissionIdsType(); + + Set doingMissionIds = bloodyMissionIdsType.getDoingMissionIds(); + Set finishMissionIds = bloodyMissionIdsType.getFinishMissionIds(); + Map sBloodyBattleTaskMap = SBloodyBattleTask.sBloodyBattleTaskMap; + int dailymissionType = GameMisionType.BLOODYMISSION.getType(); + for(SBloodyBattleTask sBloodyBattleTask:sBloodyBattleTaskMap.values()){ + int state = 2; + int missionId = sBloodyBattleTask.getId(); + int progrss = sBloodyBattleTask.getTaskValue()[1][0]; + if(doingMissionIds.contains(missionId)){ + state = 0; + progrss = getDoingProgress(user,null,sBloodyBattleTask.getTaskType(),sBloodyBattleTask.getTaskValue()[0]); + }else if(finishMissionIds.contains(missionId)){ + state = 1; + } + missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(missionId).setState(state).setType(dailymissionType).setProgress(progrss).build()); + } + } + private static void getBeginnerMisssion(User user, List missionList) { UserMissionManager userMissionManager = user.getUserMissionManager(); BeginerTaskIdsType beginerTaskIdsType = userMissionManager.getBeginerTaskIdsType(); @@ -277,6 +300,21 @@ public class MissionLoigc { User user = UserManager.getUser(uid); UserMissionManager userMissionManager = user.getUserMissionManager(); List missionStateChangeInfos = null; + if(type == GameMisionType.BLOODYMISSION.getType()){ //vip 任务 + Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.BLOODY_MISSION_REWARD, missionId); + missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.BLOODYMISSION); + if(missionStateChangeInfos.isEmpty()){ + MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.TAKE_MISSION_REWARD_RESPONSE_VALUE,"had taked reward"); + return; + } + int rewardGroup = SBloodyBattleTask.sBloodyBattleTaskMap.get(missionId).getRewardGroup(); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, new int[]{rewardGroup}, 1.0f, 0, BIReason.TAKE_MISSION_REWARD); + PlayerInfoProto.TakeMissionRewardResponse build = PlayerInfoProto.TakeMissionRewardResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.TAKE_MISSION_REWARD_RESPONSE_VALUE,build,true); + KtEventUtils.onKtEvent(user, ParamEventBean.UserTaskEvent,type,missionId); + Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.TASK_FINISH_EVEMT,missionId,""); + return; + } if(type == GameMisionType.VIPMISSION.getType()){ //vip 任务 Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.VIP_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.VIPMISSION); @@ -587,6 +625,9 @@ public class MissionLoigc { case TO_BE_STRONGER: count = cumulationData.toBeStronger; break; + case BLOODY_KILL_NUMS: + count = user.getBloodyInfo().getKillNums(); + break; default: count = 0; break; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java index 3f2f988db..f07d05f7c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java @@ -76,7 +76,8 @@ public enum MissionType { JOIN_MONSTER_ATTACK_TIMES(56),//参与兽潮来袭的次数 MONSTER_ATTACK_LEVEL(57),//兽潮来袭到达x层 - TO_BE_STRONGER(58)//我要变强点击:%s次 + TO_BE_STRONGER(58),//我要变强点击:%s次 + BLOODY_KILL_NUMS(59),// 血战每日击杀人数 ; @@ -208,6 +209,8 @@ public enum MissionType { return MONSTER_ATTACK_LEVEL;//兽潮来袭到达x层 case 58: return TO_BE_STRONGER; + case 59: + return BLOODY_KILL_NUMS; default: return null; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java index c5e430d03..4b67e3b6d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java @@ -33,6 +33,7 @@ public class MissionEventDistributor { eventProcessor.put(GameEvent.DAILY_REFRESH,new DailyRefreshEventProcess()); + eventProcessor.put(GameEvent.BLOODY_REFRESH,new DailyRefreshEventProcess()); eventProcessor.put(GameEvent.TREASH_REFRESH,new TreasureRefreshEventProcess()); eventProcessor.put(GameEvent.SERVENHAPPY_REFRESH,new TreasureRefreshEventProcess()); eventProcessor.put(GameEvent.BEGINNER,new BeginneRefreshEventProcessor()); @@ -170,6 +171,7 @@ public class MissionEventDistributor { eventProcessor.put(GameEvent.TREASURE_MISSION_REWARD,new RewardEventProcessor()); eventProcessor.put(GameEvent.SEVENHAPPY_MISSION_REWARD,new RewardEventProcessor()); eventProcessor.put(GameEvent.BEGINNER_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.BLOODY_MISSION_REWARD,new RewardEventProcessor()); typeList = new ArrayList<>(); typeList.add(MissionType.RING_FIREA_DVANCED); @@ -246,6 +248,11 @@ public class MissionEventDistributor { eventEnumListMap.put(GameEvent.TO_BE_STRONGER,typeList); eventProcessor.put(GameEvent.TO_BE_STRONGER,new CumulationDataEventProcessor()); + typeList = new ArrayList<>(); + typeList.add(MissionType.BLOODY_KILL_NUMS); + eventEnumListMap.put(GameEvent.BLOODY_END,typeList); + eventProcessor.put(GameEvent.BLOODY_END,new CumulationDataEventProcessor()); + } private static final ThreadLocal>> threadMissionChangeList = @@ -270,6 +277,7 @@ public class MissionEventDistributor { missionTypeEnumListMap.put(GameMisionType.TREASUREMISSION, new ArrayList<>()); missionTypeEnumListMap.put(GameMisionType.SEVENMISSION, new ArrayList<>()); missionTypeEnumListMap.put(GameMisionType.BEGINNERMISSION, new ArrayList<>()); + missionTypeEnumListMap.put(GameMisionType.BLOODYMISSION, new ArrayList<>()); } else { missionTypeEnumListMap.get(GameMisionType.VIPMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.DAILYMISSION).clear(); @@ -277,6 +285,7 @@ public class MissionEventDistributor { missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.SEVENMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.BEGINNERMISSION).clear(); + missionTypeEnumListMap.get(GameMisionType.BLOODYMISSION).clear(); } threadMissionChangeList.set(missionTypeEnumListMap); } @@ -309,7 +318,7 @@ public class MissionEventDistributor { MissionState missionState = missionStateChangeInfo.getMissionState(); int state = missionState.getState(); int progress = 0; - if(gameMisionType == GameMisionType.COPYMISSION || gameMisionType == GameMisionType.TREASUREMISSION || gameMisionType == GameMisionType.SEVENMISSION){ + if(gameMisionType == GameMisionType.COPYMISSION || gameMisionType == GameMisionType.TREASUREMISSION || gameMisionType == GameMisionType.SEVENMISSION || gameMisionType == GameMisionType.BLOODYMISSION){ progress = missionStateChangeInfo.getProgress(); } if(missionState == MissionState.DOING){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/BloodyMissionIdsType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/BloodyMissionIdsType.java new file mode 100644 index 000000000..5367ee79f --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/BloodyMissionIdsType.java @@ -0,0 +1,40 @@ +package com.ljsd.jieling.logic.mission.main; + +import com.ljsd.jieling.config.SBloodyBattleTask; +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.MissionState; + +import java.util.Iterator; +import java.util.List; + + +public class BloodyMissionIdsType extends AbstractMissionType{ + @Override + public void openMission(User user, int missionId, List missionTypeEnumList) { + } + + @Override + public int[][] reward(int missionId) { + return new int[0][]; + } + + @Override + public void calCumulationDataResult(User user, CumulationData.Result result, List missionStateChangeInfos, CumulationData cumulationData) { + int killNums = user.getBloodyInfo().getKillNums(); + Iterator iterator = getDoingMissionIds().iterator(); + while (iterator.hasNext()){ + Integer doingMissionId = iterator.next(); + SBloodyBattleTask sBloodyBattleTask = SBloodyBattleTask.sBloodyBattleTaskMap.get(doingMissionId); + if(killNums>=sBloodyBattleTask.getTaskValue()[1][0]){ + iterator.remove(); + missionStateChangeInfos.add(new MissionStateChangeInfo(doingMissionId, MissionState.FINISH,killNums)); + getFinishMissionIds().add(doingMissionId); + result.setValue(1); + }else{ + missionStateChangeInfos.add(new MissionStateChangeInfo(doingMissionId, MissionState.DOING,killNums)); + } + } + + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java index 4715ccf47..218a08337 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java @@ -86,6 +86,7 @@ public class ThreadManager { scheduledExecutor.scheduleAtFixedRate(platConfigureTask, 10, SLEEP_INTEVAL_TIME, TimeUnit.SECONDS); scheduledExecutor.scheduleAtFixedRate(new MinuteTask(), delayForMinute, 60, TimeUnit.SECONDS); scheduledExecutor.scheduleAtFixedRate(new SecondsTask(), 0, 1, TimeUnit.SECONDS); + scheduledExecutor.scheduleAtFixedRate(new FetchBloodyEndDataThread(), 0, 1, TimeUnit.SECONDS); scheduledExecutor.scheduleAtFixedRate(new Thread(){ public void run () { long lastMilis = System.currentTimeMillis(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java new file mode 100644 index 000000000..1e6e98f48 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java @@ -0,0 +1,53 @@ +package com.ljsd.jieling.thread.task; + +import com.ljsd.GameApplication; +import com.ljsd.jieling.bloody.SortDataBean; +import com.ljsd.jieling.core.HandlerLogicThread; +import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.blood.BloodLogic; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.server.ProtocolsManager; +import com.ljsd.jieling.util.AyyncWorker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +public class FetchBloodyEndDataThread extends Thread{ + private static final Logger LOGGER = LoggerFactory.getLogger(FetchBloodyEndDataThread.class); + + public FetchBloodyEndDataThread(){ + this.setName("FetchBloodyEndDataThread"); + } + + + @Override + public void run() { + try { + Map mapValues = RedisUtil.getInstence().getMapValues(RedisKey.BLOODY_PERSON_BATTLE_INFO, Integer.toString(GameApplication.serverId), Integer.class, SortDataBean.class); + for(SortDataBean sortDataBean : mapValues.values()){ + int uid = sortDataBean.getUid(); + User user = UserManager.getUser(uid); + AyyncWorker ayyncWorker = new AyyncWorker(user,true) { + @Override + public void work(User user) throws Exception { + BloodLogic.getInstance().calBloodyMissionInfo(user,sortDataBean); + } + }; + ProtocolsManager instance = ProtocolsManager.getInstance(); + HandlerLogicThread handlerThread = instance.handlerThreads[uid % instance.HANDLER_THREAD_NUM]; + handlerThread.addAyyncWorker(ayyncWorker); + RedisUtil.getInstence().removeMapEntrys(RedisKey.BLOODY_PERSON_BATTLE_INFO, Integer.toString(GameApplication.serverId),Integer.toString(uid)); + + } + }catch (Exception e){ + LOGGER.error("e->",e); + } + + } + +}