From 6513469c647c794907b9e4cdfc643371e4b52d34 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Tue, 18 Jun 2019 11:33:21 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A4=A9=E8=B5=8B=20&=20?= =?UTF-8?q?match?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/FunctionOfTimeHandler.java | 1 + .../ljsd/jieling/handler/map/MapLogic.java | 3 +- .../room/RoomMapUpdateEventHandler.java | 25 ++++++ .../jieling/logic/GlobalDataManaager.java | 8 +- .../jieling/logic/dao/PokemonManager.java | 2 +- .../ljsd/jieling/logic/hero/HeroLogic.java | 9 +- .../com/ljsd/jieling/logic/room/Room.java | 75 ++++++---------- .../ljsd/jieling/logic/room/RoomManager.java | 90 ++++++++++++++++--- .../jieling/logic/room/RoomPlayerInfo.java | 26 +++--- .../jieling/network/session/ISession.java | 4 + .../thread/task/PlatConfigureTask.java | 2 +- .../com/ljsd/jieling/util/MessageUtil.java | 4 +- 12 files changed, 161 insertions(+), 88 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMapUpdateEventHandler.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/FunctionOfTimeHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/FunctionOfTimeHandler.java index bade8b031..50652e09e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/FunctionOfTimeHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/FunctionOfTimeHandler.java @@ -16,6 +16,7 @@ public class FunctionOfTimeHandler extends BaseHandler{ @Override public void process(ISession iSession, PacketNetData netData) throws Exception { + iSession.setFiveReady(1); GlobalDataManaager.getInstance().getTimeOfControl(iSession); } } 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 97b69e456..89dd1a73a 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 @@ -437,7 +437,8 @@ public class MapLogic { return; } if (mapManager.getStartExporeTime() == 0) { - LOGGER.info("mapManager.getStartExporeTime() == 0"); + LOGGER.info("mapMana" + + "ger.getStartExporeTime() == 0"); MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "未开始探索"); return; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMapUpdateEventHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMapUpdateEventHandler.java new file mode 100644 index 000000000..169f8fb9d --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMapUpdateEventHandler.java @@ -0,0 +1,25 @@ +package com.ljsd.jieling.handler.room; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.room.RoomManager; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.RoomFightProto; +import org.springframework.stereotype.Component; + +@Component +public class RoomMapUpdateEventHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.ROOM_MAP_UPDATE_EVENT_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + RoomFightProto.RoomMapUpdateEventRequest roomMapUpdateEventRequest = RoomFightProto.RoomMapUpdateEventRequest.parseFrom(netData.parseClientProtoNetData()); + int triggerXY = roomMapUpdateEventRequest.getTriggerXY(); + int eventType = roomMapUpdateEventRequest.getEventType(); + RoomManager.updateRoomMapEvent(iSession,triggerXY,eventType); + } +} 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 a751b992a..f0d77744c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -239,10 +239,10 @@ public class GlobalDataManaager { fBuilder.addUserMissionInfo(CommonProto.UserMissionInfo.newBuilder().setMissionId(sDailyTasksConfig.getId()).setState(0).setType(dailymissionType).setProgress(0)); } if(session.getFiveReady() == 1){ //客户端准备好接受五点刷新请求 - MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.FIVE_PLAYER_REFLUSH_INDICATION_VALUE,null,true); + MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.FIVE_PLAYER_REFLUSH_INDICATION_VALUE,fBuilder.build(),true); }else{ int indicationIndex = session.getIndicationIndex(); - byte[] byteBuf = MessageUtil.wrappedBuffer(session.getUid(), session.getToken(), indicationIndex,1, MessageTypeProto.MessageType.FIVE_PLAYER_REFLUSH_INDICATION_VALUE, null); + byte[] byteBuf = MessageUtil.wrappedBuffer(session.getUid(), session.getToken(), indicationIndex,1, MessageTypeProto.MessageType.FIVE_PLAYER_REFLUSH_INDICATION_VALUE, fBuilder.build()); session.setFiveByteBuf(byteBuf); } } @@ -267,9 +267,7 @@ public class GlobalDataManaager { Tea.intToByte(packetData, 4, session.getToken()); //token Tea.intToByte(packetData, 8,msgNum); //msgId Tea.intToByte(packetData, 12, 0); // msgIndex - int[] secretKey = Tea.KEY; - byte[] finalData = Tea.encrypt2(packetData, secretKey); - return finalData; + return packetData; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PokemonManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PokemonManager.java index 0f67d6285..aa7f6a209 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PokemonManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PokemonManager.java @@ -23,7 +23,7 @@ public class PokemonManager extends MongoBase { } public void addRingFirePokemon(Pokemon pokemon) throws Exception { - pokemon.init(this.getRootId(),getMongoKey() + ".pokemonMap." + pokemon.getId()); + pokemon.init(this.getRootId(),getMongoKey() + ".ringFireMap." + pokemon.getId()); updateString("ringFireMap." + pokemon.getId(), pokemon); ringFireMap.put(pokemon.getId(),pokemon); } 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 e61372c1a..3875f24cb 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 @@ -868,11 +868,14 @@ public class HeroLogic { Pokemon pokemon = item.getValue(); int allStage = pokemon.getAllStage(); SRingFireConfig sRingFireConfig = SRingFireConfig.getsRingFireByRingIdAndLevel(pokemon.getId(), allStage); - int[][] property = sRingFireConfig.getProperty(); - if(property == null){ + if(sRingFireConfig == null){ continue; } - combinedAttribute(property,heroAllAttribute); + int[][] property = sRingFireConfig.getProperty(); + if(property != null){ + combinedAttribute(property,heroAllAttribute); + } + for(int i=1;i roomPlayerInfoMap; private long gameStartTimestamp; //游戏开始时间戳 //private static long MAX_GAME_LENGTH = 2*60*1000; //2分钟 private static int MAX_GAME_LENGTH = 15*1000; //15秒测试使用 @@ -27,29 +26,25 @@ public class Room { { this.roomId = roomId; this.type = type; - roomPlayerInfos = new RoomPlayerInfo[playerArray.length]; - for(int i=0; i(2); + for(int uid:playerArray){ + roomPlayerInfoMap.put(uid,new RoomPlayerInfo(uid)); } } private RoomPlayerInfo getPlayer(int uid){ - for(int i=0; i iterator = roomPlayerInfoMap.keySet().iterator(); + while (iterator.hasNext()){ + Integer uid = iterator.next(); + if(user.getId() == uid){ //将该用户从房间中移除 - roomPlayerInfos[i] = null; - } - if(roomPlayerInfos[i] != null){ + iterator.remove(); + }else{ curUserNumber++; } } @@ -67,14 +62,10 @@ public class Room { if(user != null){ MessageUtil.sendRoomGameEndIndication(user.getId(), roomId); } - for(int i=0; i uids = roomPlayerInfoMap.keySet(); + for(int uid :uids){ + user = UserManager.getUserInMem(uid); user.getRoomInfo().setRoomId(-1); - MessageUtil.sendRoomGameEndIndication(user.getId(), roomId); } } @@ -99,28 +90,22 @@ public class Room { public void startGame(){ gameStartTimestamp = System.currentTimeMillis(); - for(int i=0; i uids = roomPlayerInfoMap.keySet(); + for(int uid : uids){ + MessageUtil.sendRoomSyncOtherMoveIndiction(uid,iSession.getUid(),request.getTartXYsList()); } } - //测试使用 - public RoomPlayerInfo[] getPlayerArray() - { - return roomPlayerInfos; + public Map getRoomPlayers(){ + return roomPlayerInfoMap; } + public int getType(){ return type; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomManager.java index f99dcfb7d..fada6e9d5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomManager.java @@ -1,5 +1,7 @@ package com.ljsd.jieling.logic.room; +import com.google.protobuf.GeneratedMessage; +import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.network.session.ISession; @@ -7,12 +9,16 @@ import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.RoomFightProto; import com.ljsd.jieling.protocols.RoomProto; +import com.ljsd.jieling.thread.task.MinuteTask; import com.ljsd.jieling.util.CellUtil; import com.ljsd.jieling.util.MessageUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.*; public class RoomManager { + private static final Logger LOGGER = LoggerFactory.getLogger(MinuteTask.class); //先加入的玩家,在符合规则的情况下,要先匹配上 //value uid private static final List matchingPlayerList = new ArrayList(); @@ -107,18 +113,22 @@ public class RoomManager { List cells = new ArrayList<>(); List agentInfoList = new ArrayList<>(); - + Map roomPlayers = room.getRoomPlayers(); for(int i=0; i cells = new ArrayList<>(); - RoomPlayerInfo[] playerArray = room.getPlayerArray(); - int i=0; + Map roomPlayers = room.getRoomPlayers(); List agentInfoList = new ArrayList<>(); - for(RoomPlayerInfo roomPlayerInfo:playerArray) { + for(RoomPlayerInfo roomPlayerInfo:roomPlayers.values()) { RoomProto.AgentInfo.Builder agentInfoBuilder = RoomProto.AgentInfo.newBuilder(); agentInfoBuilder.setPlayerUid(roomPlayerInfo.getUid()) .setCurHp(1000) .setMaxHp(1000) - .setCamp(i++) - .setCurXY(CellUtil.xy2Pos(4+i,4+i)); + .setCamp(roomPlayerInfo.getCamp()) + .setCurXY(roomPlayerInfo.getCurPos()); agentInfoList.add(agentInfoBuilder.build()); } MessageUtil.sendRoomInfoToPerson(iSession, room.getType(), roomId, 1, cells, agentInfoList); @@ -191,11 +200,6 @@ public class RoomManager { MessageUtil.sendRoomStartGameReadyResponse(iSession, responseMsgId, room.getType()); room.ready(user.getId()); } - //测试使用 - public static List getMatchingPlayerList() - { - return matchingPlayerList; - } //客户端发起请求,获取开始游戏时的初始数据 public static synchronized void startGameRequset(ISession iSession, RoomFightProto.RoomGameStartRequest request, int responseMsgId) throws Exception { @@ -243,5 +247,67 @@ public class RoomManager { { return roomMap; } + + public static void updateRoomMapEvent(ISession iSession, int triggerXY, int eventType) throws Exception { + User user = UserManager.getUserInMem(iSession.getUid()); + int roomId = user.getRoomInfo().getRoomId(); + int responseMsgId = MessageTypeProto.MessageType.ROOM_MAP_UPDATE_EVENT_RESPONSE_VALUE; + if(roomId == -1){ + //没有在房间中 + MessageUtil.sendErrorResponse(iSession, 0, responseMsgId, "没有在房间中"); + return; + } + + Room room = getRoomById(user.getRoomInfo().getRoomId()); + if(room == null){ + //房间已经销毁,如果走到这一步,说明其他地方有错了 + MessageUtil.sendErrorResponse(iSession, 0, responseMsgId, "房间已经销毁"); + return; + } + RoomPlayerInfo mine = room.getRoomPlayers().get(iSession.getUid()); + mine.move(System.currentTimeMillis()); + if(mine.getCurPos() != triggerXY){ + LOGGER.info("the uid={},the server pos={},the client pos ={}",iSession.getUid(),mine.getCurPos(),triggerXY); + mine.setCurPos(triggerXY); + } + + MessageUtil.sendMessage(iSession, 1, responseMsgId, null,true); + int targetUid = -1; + for(RoomPlayerInfo roomPlayerInfo : room.getRoomPlayers().values()){ + int uid = roomPlayerInfo.getUid(); + int curPos = roomPlayerInfo.getCurPos(); + if(uid != iSession.getUid() && CellUtil.checkIsNextCell(curPos,triggerXY)){ + RoomFightProto.RoomMapPointIndication build = RoomFightProto.RoomMapPointIndication.newBuilder().setEventType(eventType).setPlayer(uid).setTriggerXY(triggerXY).build(); + sendRoomMapPointIndication(room.getRoomPlayers().keySet(),build,MessageTypeProto.MessageType.ROOM_MAP_POINT_INDICATION_VALUE); + build = RoomFightProto.RoomMapPointIndication.newBuilder().setEventType(eventType).setPlayer(iSession.getUid()).setTriggerXY(triggerXY).build(); + sendRoomMapPointIndication(room.getRoomPlayers().keySet(),build,MessageTypeProto.MessageType.ROOM_MAP_POINT_INDICATION_VALUE); + targetUid = uid; + break; + } + } + if(targetUid!=-1){ + //更新血量 + RoomFightProto.RoomTriggerFightIndication build = RoomFightProto.RoomTriggerFightIndication.newBuilder().setFightResult(1) + .setBluecurHp(150) + .setBluePlayer(iSession.getUid()) + .setRedcurHp(100) + .setRedPlayer(targetUid) + .build(); + sendRoomMapPointIndication(room.getRoomPlayers().keySet(),build,MessageTypeProto.MessageType.ROOM_PLAY_HP_UPDATE_INDICATION_VALUE); + } + + + } + + public static void sendRoomMapPointIndication( Set notifyUids,GeneratedMessage generatedMessage,int msgId){ + for(int uid : notifyUids){ + ISession sessionByUid = OnlineUserManager.getSessionByUid(uid); + if(sessionByUid == null){ + continue; + } + MessageUtil.sendIndicationMessage(sessionByUid,1, msgId,generatedMessage,true); + } + + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomPlayerInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomPlayerInfo.java index 397183b2a..a1646c9ca 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomPlayerInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomPlayerInfo.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.room; import com.ljsd.jieling.protocols.RoomFightProto; +import com.ljsd.jieling.util.CellUtil; import com.ljsd.jieling.util.MapPoint; import java.util.ArrayList; @@ -17,8 +18,8 @@ public class RoomPlayerInfo { private int curPos; private int camp; private long preMoveTimestamp; //上次移动时间 - private int speed; //移动速度 - private List path; //根据目标点计算出来的移动路径 + private int speed=500; //移动速度 + private List path=new ArrayList<>(0); //根据目标点计算出来的移动路径 public RoomPlayerInfo(int uid) { this.uid = uid; @@ -27,22 +28,14 @@ public class RoomPlayerInfo { //用户移动到新位置, 返回下一个点的坐标,用户展示客户端的转向,及模拟移动 public boolean move(List path){ - int nextXY = path.get(0); //移动时的下一个点 - if(MapPoint.getX(curPos) == MapPoint.getX(nextXY)){ - if(MapPoint.getY(curPos) != MapPoint.getY(nextXY) + 1 || MapPoint.getY(curPos) != MapPoint.getY(nextXY) -1){ - //下一个点不是相邻的格子,作弊了 - return false; - } + if(!this.path.isEmpty()){ + move(System.currentTimeMillis()); } - if(MapPoint.getY(curPos) == MapPoint.getY(nextXY)){ - if(MapPoint.getX(curPos) != MapPoint.getX(nextXY) + 1 || MapPoint.getX(curPos) != MapPoint.getX(nextXY) -1){ - //下一个点不是相邻的格子,作弊了 - return false; - } + boolean continuous = CellUtil.isContinuous(curPos, path); + if(continuous){ + this.path = path; } - - this.path = path; - return true; + return continuous; } //服务器模拟移动,如果前端模拟,则不需要服务气端调用这个函数,服务器端在事件触发的时候做校验即可 @@ -60,6 +53,7 @@ public class RoomPlayerInfo { for(int i=0; i path) { + public static void sendRoomSyncOtherMoveIndiction(int uid, int targetUid,List path) { RoomFightProto.RoomSyncOtherMoveIndiction.Builder builder = RoomFightProto.RoomSyncOtherMoveIndiction.newBuilder(); - builder.setUid(uid); + builder.setUid(targetUid); builder.addAllTartXYs(path); ISession sessionByUid = OnlineUserManager.getSessionByUid(uid); if(sessionByUid!=null){ From 5f2d97cd7a3b56b70064f33c6485761178f62f71 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Tue, 18 Jun 2019 11:50:37 +0800 Subject: [PATCH 2/2] fix --- .../java/com/ljsd/jieling/config/SRingFireMaterialConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SRingFireMaterialConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SRingFireMaterialConfig.java index a37fbf90a..dea9ce2e2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SRingFireMaterialConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SRingFireMaterialConfig.java @@ -23,7 +23,7 @@ public class SRingFireMaterialConfig implements BaseConfig { public void init() throws Exception { Map configTmp = STableManager.getConfig(SRingFireMaterialConfig.class); Map configMap = new HashMap<>(); - for(SRingFireMaterialConfig sRingFireMaterialConfig : configMap.values()){ + for(SRingFireMaterialConfig sRingFireMaterialConfig : configTmp.values()){ configMap.put(sRingFireMaterialConfig.getFireId(),sRingFireMaterialConfig); } config = configMap;