fix mission & guild walk

back_recharge
wangyuan 2019-08-09 17:14:45 +08:00
parent 516c45c2da
commit 15ffc5a164
9 changed files with 188 additions and 40 deletions

View File

@ -37,4 +37,6 @@ public class MongoKey {
public final static String userMissionManager = "userMissionManager";
public final static String friendManager = "friendManager";
public final static String guildMyInfo = "guildMyInfo";
}

View File

@ -0,0 +1,23 @@
package com.ljsd.jieling.handler.family;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.Family;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
@Component
public class FamilyWalkHandler extends BaseHandler {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.FAMILY_WALK_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
Family.FamilyWalkRequest familyWalkRequest = Family.FamilyWalkRequest.parseFrom(netData.parseClientProtoNetData());
GuildLogic.walkInGuildScene(iSession,familyWalkRequest.getPathList());
}
}

View File

@ -1319,7 +1319,7 @@ public class MapLogic {
* @param messageType
* @throws Exception
*/
public void endFight(ISession session, String frames, MessageTypeProto.MessageType messageType) throws Exception {
public void endFight(ISession session, String frames, MessageTypeProto.MessageType messageType,int dropout) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
String key = RedisKey.getKey(RedisKey.FIGHT, Integer.toString(uid), false);
@ -1338,48 +1338,44 @@ public class MapLogic {
return;
}
}
int seed = Integer.parseInt((String) valueMap.get(RedisKey.FIGHT_SEED));
int monsterGroupId = Integer.parseInt((String) valueMap.get(RedisKey.FIGHT_GROUPID));
CommonProto.FightTeamInfo.Builder builder = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge((String) valueMap.get(RedisKey.FIGHT_HEROES), builder);
CommonProto.FightTeamInfo fightTeamInfo = builder.build();
List<CommonProto.FightTeamInfo> monsterTeamList = BehaviorUtil.getFightTeamInfos(valueMap);
SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(monsterGroupId);
if (sMonsterGroup == null) {
LOGGER.info("endFight() uid=>{} monsterGroupId=>{} sMonsterGroup == null", uid, monsterGroupId);
MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "");
return;
}
// frames = "14#1#0|132#2#3|152#2#5|178#3#2|219#2#4|260#3#1|287#2#2|312#3#5|467#1#1";
// frames ="";
LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterTeamList);
// LuaValue getFightData = FightDataUtil.getTestFightData();
LuaValue getOptionData = FightDataUtil.getOptionData(frames);
int mostTime = SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getMostTime();
int[] checkResult = CheckFight.getInstance().checkFight(seed, mostTime, getFightData, getOptionData);
List<Integer> remainHp = new ArrayList<>(5);
for (int i = 2; i < checkResult.length; i++) {
if (checkResult[i] <= 0) {
remainHp.add(0);
} else {
remainHp.add(checkResult[i]);
}
}
int triggerXY = mapManager.getTriggerXY();
int optionId = Integer.parseInt((String) valueMap.get(RedisKey.NEED_VICTORY_AFTER));
int nextEventId = 0;
SOptionConfig sOptionConfig = SOptionConfig.sOptionConfigMap.get(optionId);
SChallengeConfig sChallengeConfig = SChallengeConfig.sChallengeConfigs.get(user.getMapManager().getCurMapId());
//校验结果码 1胜利
int resultCode = checkResult[0];
if (resultCode == -1) {
MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "战斗异常!");
return;
int resultCode=0;
int[] checkResult = new int[0];
int monsterGroupId=0;
SMonsterGroup sMonsterGroup=null;
if(dropout ==0){
int seed = Integer.parseInt((String) valueMap.get(RedisKey.FIGHT_SEED));
monsterGroupId = Integer.parseInt((String) valueMap.get(RedisKey.FIGHT_GROUPID));
CommonProto.FightTeamInfo.Builder builder = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge((String) valueMap.get(RedisKey.FIGHT_HEROES), builder);
CommonProto.FightTeamInfo fightTeamInfo = builder.build();
List<CommonProto.FightTeamInfo> monsterTeamList = BehaviorUtil.getFightTeamInfos(valueMap);
sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(monsterGroupId);
if (sMonsterGroup == null) {
LOGGER.info("endFight() uid=>{} monsterGroupId=>{} sMonsterGroup == null", uid, monsterGroupId);
MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "");
return;
}
LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterTeamList);
LuaValue getOptionData = FightDataUtil.getOptionData(frames);
int mostTime = SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getMostTime();
checkResult = CheckFight.getInstance().checkFight(seed, mostTime, getFightData, getOptionData);
resultCode = checkResult[0];
if (resultCode == -1) {
MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "战斗异常!");
return;
}
}
mapManager.setLastFightResult(resultCode);
if (resultCode == 0) {
if (resultCode == 0 || dropout == 1) {
//无尽副本复活消耗
reviveConsumeExecution(user);
// 失败需要等待n秒后复活所有英雄
@ -1435,6 +1431,13 @@ public class MapLogic {
MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse.build(), true);
return;
}
for (int i = 2; i < checkResult.length; i++) {
if (checkResult[i] <= 0) {
remainHp.add(0);
} else {
remainHp.add(checkResult[i]);
}
}
int teamId = mapManager.getTeamId();
List<TeamPosHeroInfo> team = user.getTeamPosManager().getTeamPosForHero().get(teamId);
for (TeamPosHeroInfo teamPosHeroInfo : team) {

View File

@ -27,7 +27,8 @@ public class FightEndRequestHandler extends BaseHandler {
if (type == 1){
MapLogic.getInstance().endDifficultyFight(iSession, frames,fightId,MessageTypeProto.MessageType.FIGHT_END_RESPONSE);
}else if(type == 2){
MapLogic.getInstance().endFight(iSession, frames, MessageTypeProto.MessageType.FIGHT_END_RESPONSE);
int dropout = fightEndRequest.getDropout();
MapLogic.getInstance().endFight(iSession, frames, MessageTypeProto.MessageType.FIGHT_END_RESPONSE,dropout);
}else if(type == 3){
MapLogic.getInstance().endSuddlenlyFight(iSession, frames, MessageTypeProto.MessageType.FIGHT_END_RESPONSE);
} else {

View File

@ -0,0 +1,77 @@
package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.MongoBase;
import java.util.List;
public class GuildMyInfo extends MongoBase {
private static int speed = 500;
private List<Integer> path; //行走路线
private int curPos=257;//当前位置
private long preMoveTimestamp; //上次更新时间
//用户移动到新位置, 返回下一个点的坐标,用户展示客户端的转向,及模拟移动
public void move(List<Integer> path){
long timestamp = System.currentTimeMillis();
if(!this.path.isEmpty()){
move(timestamp);
}
if(path == null){
return;
}
this.path.clear();
this.path.addAll(path);
this.path.remove(0);
preMoveTimestamp = timestamp;
setPreMoveTimestamp(timestamp);
}
//服务器模拟移动,如果前端模拟,则不需要服务气端调用这个函数,服务器端在事件触发的时候做校验即可
//如果位置发生变化,则返回新的当前点
public int move(long timestamp){
if(path.size() <= 0){
return -1;
}
int moveDistance = (int)((timestamp - preMoveTimestamp)/speed);
if(moveDistance < 1){
//格子没有发生变化
return -1;
}
int pathSize = path.size();
for(int i=0; i<moveDistance && i<pathSize; i++){
curPos = path.remove(0);
}
setCurPos(curPos);
setPreMoveTimestamp(timestamp);
return curPos;
}
public void setCurPos(int curPos) {
updateString("curPos",curPos);
this.curPos = curPos;
}
public void setPreMoveTimestamp(long preMoveTimestamp) {
updateString("preMoveTimestamp",preMoveTimestamp);
this.preMoveTimestamp = preMoveTimestamp;
}
public void setPath(List<Integer> path) {
updateString("path",path);
this.path = path;
}
public List<Integer> getPath() {
return path;
}
public int getCurPos() {
return curPos;
}
public long getPreMoveTimestamp() {
return preMoveTimestamp;
}
}

View File

@ -45,6 +45,8 @@ public class User {
private UserMissionManager userMissionManager;
private FriendManager friendManager;
private GuildMyInfo guildMyInfo;
private RoomInfo roomInfo;
//构造函数必须要声明否则从mongodb读出来反编译成类不通过
@ -70,6 +72,7 @@ public class User {
this.storeManager = new StoreManager();
this.userMissionManager = new UserMissionManager();
this.friendManager = new FriendManager();
this.guildMyInfo = new GuildMyInfo();
//綁定关系
@ -90,6 +93,7 @@ public class User {
this.storeManager.init(id,MongoKey.storeManager);
this.userMissionManager.init(id,MongoKey.userMissionManager);
this.friendManager.init(id,MongoKey.friendManager);
this.guildMyInfo.init(id,MongoKey.guildMyInfo);
}
public int getId() {
@ -200,6 +204,10 @@ public class User {
return friendManager;
}
public GuildMyInfo getGuildMyInfo() {
return guildMyInfo;
}
public RoomInfo getRoomInfo() {
if(roomInfo == null){
roomInfo = new RoomInfo();

View File

@ -1,5 +1,7 @@
package com.ljsd.jieling.logic.family;
import com.google.protobuf.GeneratedMessage;
import com.ljsd.jieling.config.SChallengeMapConfig;
import com.ljsd.jieling.config.SErrorCodeEerverConfig;
import com.ljsd.jieling.config.SGuildSetting;
import com.ljsd.jieling.core.GlobalsDef;
@ -647,18 +649,22 @@ public class GuildLogic {
}
public static void sendFamilyBaseUpdateIndication(GuildInfo guildInfo){
Map<Integer, Set<Integer>> members = guildInfo.getMembers();
CommonProto.FamilyBaseInfo familyBaseInfo = CBean2Proto.getFamilyBaseInfo(guildInfo);
Family.FamilyChangeIndication build = Family.FamilyChangeIndication.newBuilder().setFamilyBaseInfo(familyBaseInfo).build();
sendFamilyMsgIndication(guildInfo,MessageTypeProto.MessageType.FAMILY_CHANGE_BASE_INDICATION_VALUE,build);
}
public static void sendFamilyMsgIndication(GuildInfo guildInfo, int msgId, GeneratedMessage generatedMessage){
Map<Integer, Set<Integer>> members = guildInfo.getMembers();
for(Set<Integer> items : members.values()){
for(Integer sendUid : items){
ISession session = OnlineUserManager.getSessionByUid(sendUid);
if(session!=null){
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.FAMILY_CHANGE_BASE_INDICATION_VALUE,build,true);
MessageUtil.sendIndicationMessage(session,1, msgId,generatedMessage,true);
}
}
}
}
@ -672,6 +678,27 @@ public class GuildLogic {
}
}
public static void walkInGuildScene(ISession session,List<Integer> path) throws Exception {
int msgId = MessageTypeProto.MessageType.FAMILY_WALK_RESPONSE_VALUE;
int uid = session.getUid();
User user = UserManager.getUser(uid);
int guildId = user.getPlayerInfoManager().getGuildId();
if(guildId == 0){
MessageUtil.sendErrorResponse(session,0,msgId,"未加入公会");
return;
}
GuildMyInfo guildMyInfo = user.getGuildMyInfo();
boolean continuous = CellUtil.isContinuous(guildMyInfo.getCurPos(),path);
if(!continuous){
MessageUtil.sendErrorResponse(session,0,msgId,"路线有误");
return;
}
user.getGuildMyInfo().move(path);
Family.FamilyWalkIndicaiton familyWalkIndicaiton = CBean2Proto.getFamilyWalkIndicaiton(user);
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId);
sendFamilyMsgIndication(guildInfo, MessageTypeProto.MessageType.FAMILY_WALK_INDICATION_VALUE,familyWalkIndicaiton);
}
public static void addGuildLog(int guildId, int type,String name) throws Exception {
switch (type) {
case GuildDef.Log.CREATE: {

View File

@ -88,7 +88,7 @@ public class MissionLoigc {
}
}
if(state!=2 && sTreasureTaskConfig.getTaskType() == MissionType.SENVER_HAPPY.getMissionTypeValue()){
if(System.currentTimeMillis()>user.getActivityManager().getSenvenTime()){
if(progrss>0 && System.currentTimeMillis()>user.getActivityManager().getSenvenTime()){
state=1;
}else {
state =0;

View File

@ -1,7 +1,6 @@
package com.ljsd.jieling.util;
import com.ljsd.jieling.config.SGameSetting;
import com.ljsd.jieling.config.SItem;
import com.ljsd.jieling.config.SMonsterConfig;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.map.Cell;
@ -12,7 +11,6 @@ import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.ChatProto;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.Family;
@ -394,4 +392,13 @@ public class CBean2Proto {
.build();
}
public static Family.FamilyWalkIndicaiton getFamilyWalkIndicaiton(User user){
return Family.FamilyWalkIndicaiton.newBuilder()
.setCurPos(user.getGuildMyInfo().getCurPos())
.addAllPath(user.getGuildMyInfo().getPath())
.setUid(user.getId())
.setName(user.getPlayerInfoManager().getNickName())
.build();
}
}