back_recharge
wangyuan 2019-06-20 18:17:29 +08:00
parent 97241f0f5b
commit 32480ab936
5 changed files with 68 additions and 13 deletions

View File

@ -9,7 +9,7 @@ public class HeroLevelUpManager implements BaseDataManager{
@Override @Override
public CumulationData.Result updateData(CumulationData data, MissionType missionType, Object... parm) { public CumulationData.Result updateData(CumulationData data, MissionType missionType, Object... parm) {
if(missionType == MissionType.HERO_LEVLE_COUNT){ if(missionType == MissionType.HERO_LEVLE_COUNT){
int oldLevle = (int)parm[0]; int oldLevle = (int)parm[0]+1;
int newLevle = (int)parm[1]; int newLevle = (int)parm[1];
Map<Integer, Integer> heroLevleCountMap = data.getHeroLevleCountMap(); Map<Integer, Integer> heroLevleCountMap = data.getHeroLevleCountMap();
for(;oldLevle<=newLevle;oldLevle++){ for(;oldLevle<=newLevle;oldLevle++){

View File

@ -24,7 +24,7 @@ public class RoomManager {
private static final List<Integer> matchingPlayerList = new ArrayList(); private static final List<Integer> matchingPlayerList = new ArrayList();
private static Object lock; //线程安全锁 private static Object lock; //线程安全锁
private static int PLAYER_NUMBER_IN_ROOM = 2; //单个房间的最大数量 private static int PLAYER_NUMBER_IN_ROOM = 3; //单个房间的最大数量
public static int SIMPLEST_MATCH_RULE = 0; public static int SIMPLEST_MATCH_RULE = 0;
@ -120,7 +120,7 @@ public class RoomManager {
user.getRoomInfo().setMatching(false); user.getRoomInfo().setMatching(false);
user.getRoomInfo().setRoomId(roomId); user.getRoomInfo().setRoomId(roomId);
RoomProto.AgentInfo.Builder agentInfoBuilder = RoomProto.AgentInfo.newBuilder(); RoomProto.AgentInfo.Builder agentInfoBuilder = RoomProto.AgentInfo.newBuilder();
int curXY = CellUtil.xy2Pos(4 + i, 4 + i); int curXY = CellUtil.xy2Pos( i*10+1, i*10+1);
agentInfoBuilder.setPlayerUid(user.getId()) agentInfoBuilder.setPlayerUid(user.getId())
.setCurHp(1000) .setCurHp(1000)
.setMaxHp(1000) .setMaxHp(1000)
@ -154,12 +154,16 @@ public class RoomManager {
Map<Integer, RoomPlayerInfo> roomPlayers = room.getRoomPlayers(); Map<Integer, RoomPlayerInfo> roomPlayers = room.getRoomPlayers();
List<RoomProto.AgentInfo> agentInfoList = new ArrayList<>(); List<RoomProto.AgentInfo> agentInfoList = new ArrayList<>();
for(RoomPlayerInfo roomPlayerInfo:roomPlayers.values()) { for(RoomPlayerInfo roomPlayerInfo:roomPlayers.values()) {
if(!roomPlayerInfo.getPath().isEmpty()){
roomPlayerInfo.move(System.currentTimeMillis());
}
RoomProto.AgentInfo.Builder agentInfoBuilder = RoomProto.AgentInfo.newBuilder(); RoomProto.AgentInfo.Builder agentInfoBuilder = RoomProto.AgentInfo.newBuilder();
agentInfoBuilder.setPlayerUid(roomPlayerInfo.getUid()) agentInfoBuilder.setPlayerUid(roomPlayerInfo.getUid())
.setCurHp(1000) .setCurHp(1000)
.setMaxHp(1000) .setMaxHp(1000)
.setCamp(roomPlayerInfo.getCamp()) .setCamp(roomPlayerInfo.getCamp())
.setCurXY(roomPlayerInfo.getCurPos()); .setCurXY(roomPlayerInfo.getCurPos())
.addAllPath(roomPlayerInfo.getPath());
agentInfoList.add(agentInfoBuilder.build()); agentInfoList.add(agentInfoBuilder.build());
} }
MessageUtil.sendRoomInfoToPerson(iSession, room.getType(), roomId, 1, cells, agentInfoList); MessageUtil.sendRoomInfoToPerson(iSession, room.getType(), roomId, 1, cells, agentInfoList);

View File

@ -1,13 +1,17 @@
package com.ljsd.jieling.logic.room; package com.ljsd.jieling.logic.room;
import com.ljsd.jieling.protocols.RoomFightProto; import com.ljsd.jieling.protocols.RoomFightProto;
import com.ljsd.jieling.thread.task.MinuteTask;
import com.ljsd.jieling.util.CellUtil; import com.ljsd.jieling.util.CellUtil;
import com.ljsd.jieling.util.MapPoint; import com.ljsd.jieling.util.MapPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class RoomPlayerInfo { public class RoomPlayerInfo {
private static final Logger LOGGER = LoggerFactory.getLogger(RoomPlayerInfo.class);
private int uid; private int uid;
public static final int UNREADY_STATE = 0; //还未准备 public static final int UNREADY_STATE = 0; //还未准备
@ -28,12 +32,17 @@ public class RoomPlayerInfo {
//用户移动到新位置, 返回下一个点的坐标,用户展示客户端的转向,及模拟移动 //用户移动到新位置, 返回下一个点的坐标,用户展示客户端的转向,及模拟移动
public boolean move(List<Integer> path){ public boolean move(List<Integer> path){
long timestamp = System.currentTimeMillis();
if(!this.path.isEmpty()){ if(!this.path.isEmpty()){
move(System.currentTimeMillis()); move(timestamp);
} }
boolean continuous = CellUtil.isContinuous(curPos, path); boolean continuous = CellUtil.isContinuous(curPos, path);
if(continuous){ if(continuous){
this.path = path; this.path.clear();
this.path.addAll(path);
this.path.remove(0);
preMoveTimestamp = timestamp;
LOGGER.info("the uid={},the preMoveTimestamp={}",uid,preMoveTimestamp);
} }
return continuous; return continuous;
} }
@ -44,15 +53,18 @@ public class RoomPlayerInfo {
if(path.size() <= 0){ if(path.size() <= 0){
return -1; return -1;
} }
int nextPoint = path.get(0); int moveDistance = (int)((timestamp - preMoveTimestamp)/speed);
int moveDistance = (int)((timestamp - preMoveTimestamp)*speed);
if(moveDistance < 1){ if(moveDistance < 1){
//格子没有发生变化 //格子没有发生变化
return -1; return -1;
} }
for(int i=0; i<moveDistance && i<path.size(); i++){ int oldXY=curPos;
int pathSize = path.size();
for(int i=0; i<moveDistance && i<pathSize; i++){
curPos = path.remove(0); curPos = path.remove(0);
} }
LOGGER.info("the uid={},the preMoveTimestamp={},the time ={},move={},the oldXy={},the curXy={}",uid,preMoveTimestamp,timestamp,moveDistance,oldXY,curPos);
preMoveTimestamp = timestamp; preMoveTimestamp = timestamp;
return curPos; return curPos;
} }
@ -88,6 +100,10 @@ public class RoomPlayerInfo {
this.camp = camp; this.camp = camp;
} }
public List<Integer> getPath() {
return path;
}
//todo …… //todo ……
} }

View File

@ -22,12 +22,16 @@ import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.fight.CombatLogic;
import com.ljsd.jieling.logic.room.Room;
import com.ljsd.jieling.logic.room.RoomManager;
import com.ljsd.jieling.logic.room.RoomPlayerInfo;
import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.netty.cocdex.Tea; import com.ljsd.jieling.netty.cocdex.Tea;
import com.ljsd.jieling.netty.handler.GameMessageHandler; import com.ljsd.jieling.netty.handler.GameMessageHandler;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocol.ProtocolsAbstract; import com.ljsd.jieling.protocol.ProtocolsAbstract;
import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.RoomFightProto;
import com.ljsd.jieling.session.GameSession; import com.ljsd.jieling.session.GameSession;
import com.ljsd.jieling.util.MathUtils; import com.ljsd.jieling.util.MathUtils;
import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.MessageUtil;
@ -280,6 +284,18 @@ public class ProtocolsManager implements ProtocolsAbstract {
// } catch (FileNotFoundException e) { // } catch (FileNotFoundException e) {
// e.printStackTrace(); // e.printStackTrace();
// } // }
User user = UserManager.getUserInMem(session.getUid());
int roomId = user.getRoomInfo().getRoomId();
if(roomId!=-1){
Room room = RoomManager.getRoomById(roomId);
if(room!=null){
RoomPlayerInfo roomPlayerInfo = room.getRoomPlayers().get(session.getUid());
roomPlayerInfo.move(System.currentTimeMillis());
roomPlayerInfo.getPath().clear();
RoomFightProto.RoomMapPointIndication build = RoomFightProto.RoomMapPointIndication.newBuilder().setEventType(10).setPlayer(session.getUid()).setTriggerXY(roomPlayerInfo.getCurPos()).build();
RoomManager.sendRoomMapPointIndication(room.getRoomPlayers().keySet(),build,MessageTypeProto.MessageType.ROOM_MAP_POINT_INDICATION_VALUE);
}
}
if(session.getOfflineType() == ErrorCode.reloginCode){ if(session.getOfflineType() == ErrorCode.reloginCode){
return; return;
} }
@ -296,7 +312,6 @@ public class ProtocolsManager implements ProtocolsAbstract {
try { try {
OnlineUserManager.userOffline(session.getUid()); OnlineUserManager.userOffline(session.getUid());
User user = UserManager.getUser(session.getUid());
PlayerManager playerInfoManager = user.getPlayerInfoManager(); PlayerManager playerInfoManager = user.getPlayerInfoManager();
playerInfoManager.setOffLineTime(TimeUtils.now()); playerInfoManager.setOffLineTime(TimeUtils.now());
long onlineTime = playerInfoManager.getOffLineTime() - playerInfoManager.getLoginTime(); long onlineTime = playerInfoManager.getOffLineTime() - playerInfoManager.getLoginTime();

View File

@ -36,6 +36,9 @@ public class CellUtil {
int[] new_xy = pos2XY(i); int[] new_xy = pos2XY(i);
System.out.println("=======> nX : "+new_xy[0]+" , nY : "+new_xy[1]); System.out.println("=======> nX : "+new_xy[0]+" , nY : "+new_xy[1]);
} }
System.out.println(pos2XY(520)[0]);
System.out.println(pos2XY(520)[1]);
} }
@ -111,15 +114,32 @@ public class CellUtil {
return false ; return false ;
} }
public static boolean checkIsNextOrMineCell(int pos1 , int pos2){
int[] xy1 = pos2XY(pos1);
int[] xy2 = pos2XY(pos2);
if(pos1 == pos2){
return true;
}
if ((xy1[0]==xy2[0] && Math.abs(xy1[1]-xy2[1])==1) || (xy1[1]==xy2[1] && Math.abs(xy1[0]-xy2[0])==1)){
return true;
}
return false ;
}
public static boolean isContinuous(int lastXY, List<Integer> cells){ public static boolean isContinuous(int lastXY, List<Integer> cells){
boolean first = false; boolean first = false;
if (cells.size() > 0) { if (cells.size() > 0) {
first = checkIsNextCell(lastXY, cells.get(0)); first = checkIsNextOrMineCell(lastXY, cells.get(0));
if(!first){
return false;
}
} }
for (int i = 1; i < cells.size() - 1; i++) { for (int i = 1; i < cells.size() - 1; i++) {
boolean other = checkIsNextCell(cells.get(i), cells.get(i + 1)); boolean other = checkIsNextOrMineCell(cells.get(i), cells.get(i + 1));
if (!first && !other) { if (!other) {
return false; return false;
} }
} }