diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SDifferDemonsComonpentsConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SDifferDemonsComonpentsConfig.java index d4f2fb72b..b16133c27 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SDifferDemonsComonpentsConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SDifferDemonsComonpentsConfig.java @@ -40,19 +40,17 @@ public class SDifferDemonsComonpentsConfig implements BaseConfig { extraAddMapTmp.put(comonpentsId,new HashMap<>()); } int[][] extraAdd = sDifferDemonsComonpentsConfig.getExtraAdd(); - if(extraAdd!=null&&extraAdd.length>0){ - Map> extraMapTmpInfo = extraAddMapTmp.get(comonpentsId); - for(int [] extraItem : extraAdd){ - int profession = extraItem[0]; - int propertyId = extraItem[1]; - int propertyValue = extraItem[2]; - if(!extraMapTmpInfo.containsKey(profession)){ - extraMapTmpInfo.put(profession,new HashMap<>()); - } - extraMapTmpInfo.get(profession).put(propertyId,propertyValue); + Map> extraMapTmpInfo = extraAddMapTmp.get(comonpentsId); + for(int [] extraItem : extraAdd){ + int profession = extraItem[0]; + int propertyId = extraItem[1]; + int propertyValue = extraItem[2]; + if(!extraMapTmpInfo.containsKey(profession)){ + extraMapTmpInfo.put(profession,new HashMap<>()); } - sDifferDemonsComonpentsConfig.setExtraAddMap(new HashMap<>(extraMapTmpInfo)); + extraMapTmpInfo.get(profession).put(propertyId,propertyValue); } + sDifferDemonsComonpentsConfig.setExtraAddMap(new HashMap<>(extraMapTmpInfo)); sDifferDemonsComonpentsConfigTmp.get(comonpentsId).put(stage,sDifferDemonsComonpentsConfig); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SPlayerLevelConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SPlayerLevelConfig.java index 5c57c411f..ca19d363c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SPlayerLevelConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SPlayerLevelConfig.java @@ -17,6 +17,8 @@ public class SPlayerLevelConfig implements BaseConfig { private int addEnergy; + private int extraAdd; + @Override public void init() throws Exception { @@ -40,6 +42,10 @@ public class SPlayerLevelConfig implements BaseConfig { return addEnergy; } + public int getExtraAdd() { + return extraAdd; + } + public static Map getsPlayerLevelConfigMap() { return sPlayerLevelConfigMap; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SStoreConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SStoreConfig.java index 15b90ef8f..6fbe6b83d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SStoreConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SStoreConfig.java @@ -40,6 +40,8 @@ public class SStoreConfig implements BaseConfig { private int relatedtoVIP; + private int[][] extraAdd; + @Override public void init() throws Exception { @@ -114,4 +116,8 @@ public class SStoreConfig implements BaseConfig { public int getRelatedtoVIP() { return relatedtoVIP; } + + public int[][] getExtraAdd() { + return extraAdd; + } } \ 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 8e9fde4e0..55bba6e75 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 @@ -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"; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyWalkHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyWalkHandler.java new file mode 100644 index 000000000..a53391244 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyWalkHandler.java @@ -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()); + } +} 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 6822055a8..c115afca8 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 @@ -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 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 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 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 team = user.getTeamPosManager().getTeamPosForHero().get(teamId); for (TeamPosHeroInfo teamPosHeroInfo : team) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/FightEndRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/FightEndRequestHandler.java index d25613362..3da04ef2a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/FightEndRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/FightEndRequestHandler.java @@ -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 { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java index 054138946..34b0c7c98 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java @@ -44,6 +44,11 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { } + /** + * 子类重写 + * @param user + * @throws Exception + */ @Override public void onResume(User user) throws Exception { ActivityManager activityManager = user.getActivityManager(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index 69ea10d38..1cb71f413 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -273,7 +273,7 @@ public class ActivityLogic { public void updateActivityMissionProgress(User user, int activityType, int count) { - for (Integer id : getOpenActivityIdsByType(user, activityType)) { + for (Integer id : getOpenActivityIdsByType(user, activityType,true)) { AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(id); if (abstractActivity == null) { continue; @@ -284,7 +284,7 @@ public class ActivityLogic { } public void resumeActivity(User user, int activityType) throws Exception { - for (Integer id : getOpenActivityIdsByType(user, activityType)) { + for (Integer id : getOpenActivityIdsByType(user, activityType,false)) { AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(id); if (abstractActivity == null) { continue; @@ -293,13 +293,13 @@ public class ActivityLogic { } } - private Set getOpenActivityIdsByType(User user, int activityType) { + private Set getOpenActivityIdsByType(User user, int activityType,boolean withState) { Set ids = new HashSet<>(); ActivityManager activityManager = user.getActivityManager(); Map activityMissionMap = activityManager.getActivityMissionMap(); for (Map.Entry item : activityMissionMap.entrySet()) { ActivityMission activityMission = item.getValue(); - if (activityMission.getActivityState() != ActivityType.OPEN_STATE) { + if (withState && activityMission.getActivityState() != ActivityType.OPEN_STATE) { continue; } Integer activityId = item.getKey(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuildMyInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuildMyInfo.java new file mode 100644 index 000000000..45e405ef7 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuildMyInfo.java @@ -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 path; //行走路线 + private int curPos=257;//当前位置 + private long preMoveTimestamp; //上次更新时间 + + + //用户移动到新位置, 返回下一个点的坐标,用户展示客户端的转向,及模拟移动 + public void move(List 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 path) { + updateString("path",path); + this.path = path; + } + + public List getPath() { + return path; + } + + public int getCurPos() { + return curPos; + } + + public long getPreMoveTimestamp() { + return preMoveTimestamp; + } +} 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 668a206b9..aca137861 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 @@ -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(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java index 4b3ddbbbd..e0a6ff813 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java @@ -7,9 +7,6 @@ import com.ljsd.jieling.core.GlobalsDef; 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.KTGameType; -import com.ljsd.jieling.ktbeans.KtEventUtils; -import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.GuildApply; @@ -671,6 +668,27 @@ public class GuildLogic { } } + public static void walkInGuildScene(ISession session,List 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); + sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_WALK_INDICATION,familyWalkIndicaiton); + } + public static void addGuildLog(int guildId, int type,String name) throws Exception { switch (type) { case GuildDef.Log.CREATE: { @@ -718,7 +736,6 @@ public class GuildLogic { /** * 查看工会布防信息 * @param session - * @param buildId * @param messageType * @throws Exception */ 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 f0ab26982..8267d9dc1 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 @@ -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; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index 94f09aa98..0b1e6e05f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.store; import com.ljsd.jieling.config.SGameSetting; +import com.ljsd.jieling.config.SPlayerLevelConfig; import com.ljsd.jieling.config.SStoreConfig; import com.ljsd.jieling.config.SStoreTypeConfig; import com.ljsd.jieling.globals.BIReason; @@ -272,11 +273,25 @@ public class StoreLogic { } int[][] goods = sStoreConfig.getGoods(); int length = goods.length; + int[][] extraAdd = sStoreConfig.getExtraAdd(); + int add = 10000; + if(extraAdd!=null && extraAdd.length>0){ + for(int[] extra : extraAdd){ + int type = extra[0]; + if(type == 1){ + SPlayerLevelConfig sPlayerLevelConfig = SPlayerLevelConfig.sPlayerLevelConfigMap.get(user.getPlayerInfoManager().getLevel()); + add += sPlayerLevelConfig.getExtraAdd(); + }else if(type == 2){ + int addPrivageId = extra[0]; + add += user.getPlayerInfoManager().getVipPrivilageValue(addPrivageId); + } + } + } int[][] dropItems = new int[length][]; for(int i=0;i