Merge branch 'master' of 60.1.1.230:backend/jieling_server
commit
ee140b7495
|
@ -10,15 +10,12 @@ import com.ljsd.jieling.core.CoreLogic;
|
|||
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.handler.BaseHandler;
|
||||
import com.ljsd.jieling.handler.map.MapLogic;
|
||||
import com.ljsd.jieling.logic.GlobalDataManaager;
|
||||
import com.ljsd.jieling.logic.OnlineUserManager;
|
||||
import com.ljsd.jieling.logic.STableManager;
|
||||
import com.ljsd.jieling.logic.activity.ActivityLogic;
|
||||
import com.ljsd.jieling.logic.dao.GuilidManager;
|
||||
import com.ljsd.jieling.logic.dao.MailingSystemManager;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.fight.CheckFight;
|
||||
import com.ljsd.jieling.logic.hero.HeroLogic;
|
||||
import com.ljsd.jieling.netty.server.NettyGameServer;
|
||||
|
@ -30,7 +27,6 @@ import com.ljsd.jieling.thread.ThreadManager;
|
|||
import com.ljsd.jieling.thread.task.MongoDataHandlerTask;
|
||||
import com.ljsd.jieling.thrift.pool.ThriftPoolUtils;
|
||||
import com.ljsd.jieling.util.KeyGenUtils;
|
||||
import com.ljsd.jieling.util.SensitiveWordInit;
|
||||
import com.ljsd.jieling.util.SensitivewordFilter;
|
||||
import com.ljsd.jieling.util.TimeUtils;
|
||||
import com.ljsd.jieling.util.http.HttpPool;
|
||||
|
@ -43,11 +39,9 @@ import org.springframework.context.annotation.ComponentScan;
|
|||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@Configuration
|
||||
|
@ -85,15 +79,10 @@ public class GameApplication {
|
|||
register(configurableApplicationContext);
|
||||
ProtocolsManager protocolsManager = ProtocolsManager.getInstance();
|
||||
protocolsManager.initCheck();
|
||||
// 追加ProtocolsManager消息处理器 注解和非注解
|
||||
protocolsManager.initHandler("com.ljsd.jieling.handler",configurableApplicationContext);
|
||||
// protocolsManager.initContext();
|
||||
|
||||
// 追加ProtocolsManager消息处理器
|
||||
Map<String, BaseHandler> gameHanderMap = configurableApplicationContext.getBeansOfType(BaseHandler.class);
|
||||
for (BaseHandler handler : gameHanderMap.values()) {
|
||||
protocolsManager.addHandler(handler);
|
||||
}
|
||||
|
||||
|
||||
//http线程池初始化
|
||||
// HttpPool.init();
|
||||
//todo 设置开服时间
|
||||
|
|
|
@ -304,7 +304,7 @@ public class HandlerLogicThread extends Thread{
|
|||
int type = sGlobalSystemConfig.getOpenRules()[0];
|
||||
int condition = sGlobalSystemConfig.getOpenRules()[1];
|
||||
if (type ==1){
|
||||
if (mainLevelManager.getFightId()>condition) {
|
||||
if (mainLevelManager.getFightId()<condition) {
|
||||
return true;
|
||||
}
|
||||
}else if(type == 2){
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.ljsd.jieling.chat.handler;
|
||||
package com.ljsd.jieling.handler.chat;
|
||||
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.chat.logic.ChatLogic;
|
|
@ -1,4 +1,4 @@
|
|||
package com.ljsd.jieling.chat.handler;
|
||||
package com.ljsd.jieling.handler.chat;
|
||||
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.chat.logic.ChatLogic;
|
|
@ -7,7 +7,6 @@ import com.ljsd.jieling.protocols.HeroInfoProto;
|
|||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class RandSoulEquipHandler extends BaseHandler<HeroInfoProto.SoulRandRequest> {
|
||||
@Override
|
||||
public MessageTypeProto.MessageType getMessageCode() {
|
||||
|
|
|
@ -2386,7 +2386,7 @@ public class MapLogic {
|
|||
LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterTeamList);
|
||||
LuaValue getOptionData = FightDataUtil.getOptionData(frames);
|
||||
|
||||
int[] checkResult = CheckFight.getInstance().checkFight(seed, sFloodConfig.getBattleTime(), getFightData, getOptionData,FightType.MapExploreFight);
|
||||
int[] checkResult = CheckFight.getInstance().checkFight(seed, sFloodConfig.getBattleTime(), getFightData, getOptionData,FightType.MonterFight);
|
||||
|
||||
//校验结果码 1:胜利
|
||||
int resultCode = checkResult[0];
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
package com.ljsd.jieling.handler.monsterAttack;
|
||||
|
||||
import com.ljsd.jieling.config.SFloodConfig;
|
||||
import com.ljsd.jieling.db.redis.RedisKey;
|
||||
import com.ljsd.jieling.db.redis.RedisUtil;
|
||||
import com.ljsd.jieling.exception.LogicException;
|
||||
import com.ljsd.jieling.globals.BIReason;
|
||||
import com.ljsd.jieling.globals.Global;
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
|
||||
import com.ljsd.jieling.ktbeans.KTGameType;
|
||||
import com.ljsd.jieling.ktbeans.KtEventUtils;
|
||||
import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean;
|
||||
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.logic.fight.CheckFight;
|
||||
import com.ljsd.jieling.logic.fight.FightType;
|
||||
import com.ljsd.jieling.logic.mission.GameEvent;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.protocols.CommonProto;
|
||||
import com.ljsd.jieling.protocols.FightInfoProto;
|
||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import com.ljsd.jieling.util.FightDataUtil;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.ljsd.jieling.util.MonsterUtil;
|
||||
import org.luaj.vm2.LuaValue;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Description: 兽潮快速战斗
|
||||
* Author: zsx
|
||||
* CreateDate: 2019/10/8 14:05
|
||||
*/
|
||||
@Component
|
||||
public class QuickStartMonsterFighter extends BaseHandler<FightInfoProto.QuickStartMonsterFightRequest> {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(QuickStartMonsterFighter.class);
|
||||
@Override
|
||||
public MessageTypeProto.MessageType getMessageCode() {
|
||||
return MessageTypeProto.MessageType.QUICK_START_MONSTERFIGHTER_REQUEST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processWithProto(ISession iSession, FightInfoProto.QuickStartMonsterFightRequest proto) throws Exception {
|
||||
|
||||
int fightId = proto.getFightId();
|
||||
int teamId = proto.getTeamId();
|
||||
int uid = iSession.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
if(user.getMapManager().getLastMonsterAttack()!=fightId){
|
||||
LOGGER.info("endFight() uid=>{} fightId=>{} oldfightId=>{} SLevelDifficultyConfig == null", uid, fightId, user.getMapManager().getLastMonsterAttack(),teamId);
|
||||
MessageUtil.sendErrorResponse(iSession, 0,MessageTypeProto.MessageType.QUICK_START_MONSTERFIGHTER_REPONSE_VALUE , "fightId 有误");
|
||||
return;
|
||||
}
|
||||
SFloodConfig sFloodConfig =SFloodConfig.getsFloodConfigMap().get(fightId);
|
||||
if (sFloodConfig == null) {
|
||||
LOGGER.info("endFight() uid=>{} fightId=>{} SLevelDifficultyConfig == null", uid, fightId);
|
||||
MessageUtil.sendErrorResponse(iSession, 0, MessageTypeProto.MessageType.QUICK_START_MONSTERFIGHTER_REPONSE_VALUE, "");
|
||||
return;
|
||||
}
|
||||
int[][] cost = new int[1][];
|
||||
int[] temp = new int[2];
|
||||
temp[0] = Global.DROP;
|
||||
temp[1] = 1;
|
||||
cost[0] = temp;
|
||||
boolean flag = ItemUtil.fightItemCost(user, cost);
|
||||
if (!flag) {
|
||||
MessageUtil.sendErrorResponse(iSession, 0, MessageTypeProto.MessageType.QUICK_START_MONSTERFIGHTER_REPONSE_VALUE, "道具不足");
|
||||
return;
|
||||
}
|
||||
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
|
||||
if (teamPosHeroInfos == null || teamPosHeroInfos.size() == 0) {
|
||||
LOGGER.info("startLevelDifficultyFight==> uid={},fightId={},teamId={}", uid, fightId, teamId);
|
||||
MessageUtil.sendErrorResponse(iSession, 0, MessageTypeProto.MessageType.QUICK_START_MONSTERFIGHTER_REPONSE_VALUE, "阵容有误!!");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
KtEventUtils.onKtEvent(user, ParamEventBean.UserGameType, KTGameType.CHALLENGE_MONSTERATTACK.getIndex(), fightId);
|
||||
user.getUserMissionManager().onGameEvent(user, GameEvent.MONSTER_ATTACK_PLAY);
|
||||
|
||||
|
||||
int groupId = sFloodConfig.getMonster();
|
||||
CommonProto.FightTeamInfo fightTeamInfo = BehaviorUtil.getFightTeamInfo(user, teamId, true);
|
||||
Map<Integer, List<CommonProto.FightUnitInfo>> monsterByGroup = MonsterUtil.getMonsterByGroup(groupId);
|
||||
List<CommonProto.FightTeamInfo> monsterTeamList = new ArrayList<>(3);
|
||||
List<CommonProto.FightTeamInfo> monsterGroupList = BehaviorUtil.getFightTeamInfos(groupId, monsterByGroup, Global.MONSTER_1);
|
||||
monsterTeamList.addAll(monsterGroupList);
|
||||
List<CommonProto.FightTeamInfo> monsterGroupList1 = BehaviorUtil.getFightTeamInfos(groupId, monsterByGroup, Global.MONSTER_2);
|
||||
monsterTeamList.addAll(monsterGroupList1);
|
||||
List<CommonProto.FightTeamInfo> monsterGroupList2 = BehaviorUtil.getFightTeamInfos(groupId, monsterByGroup, Global.MONSTER_3);
|
||||
monsterTeamList.addAll(monsterGroupList2);
|
||||
//设置战斗随机种子
|
||||
int seed = (int) (System.currentTimeMillis() / 1000);
|
||||
LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterTeamList);
|
||||
LuaValue getOptionData = FightDataUtil.getOptionData("");
|
||||
int mostTime = sFloodConfig.getBattleTime();
|
||||
|
||||
int[] checkResult = CheckFight.getInstance().checkFight(seed, mostTime, getFightData, getOptionData, FightType.MonterFight);
|
||||
|
||||
//校验结果码 1:胜利
|
||||
int resultCode = checkResult[0];
|
||||
if (resultCode == -1) {
|
||||
ItemUtil.itemCost(user,cost, BIReason.MONSTERATTACK_CONSUME, fightId);
|
||||
MessageUtil.sendErrorResponse(iSession, 0, MessageTypeProto.MessageType.QUICK_START_MONSTERFIGHTER_REPONSE_VALUE, "战斗异常!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (resultCode == 0) {
|
||||
ItemUtil.itemCost(user,cost, BIReason.MONSTERATTACK_CONSUME, fightId);
|
||||
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
|
||||
FightInfoProto.QuickStartMonsterFightResponse builder = FightInfoProto.QuickStartMonsterFightResponse.newBuilder()
|
||||
.setResult(resultCode)
|
||||
.setEnventDrop(dropBuilder)
|
||||
.build();
|
||||
MessageUtil.sendMessage(iSession, 1,MessageTypeProto.MessageType.QUICK_START_MONSTERFIGHTER_REPONSE_VALUE, builder, true);
|
||||
return;
|
||||
|
||||
}
|
||||
//排行榜
|
||||
String rankKey = RedisKey.getKey(RedisKey.MONSTER_ATTACK_RANK,"", false);
|
||||
RedisUtil.getInstence().zsetAddOneOffsetByTime(rankKey, String.valueOf(user.getId()), fightId);
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sFloodConfig.getReward(), BIReason.MONSTERATTACK_REWARD);
|
||||
|
||||
FightInfoProto.QuickStartMonsterFightResponse builder = FightInfoProto.QuickStartMonsterFightResponse.newBuilder()
|
||||
.setResult(resultCode)
|
||||
.setEnventDrop(drop)
|
||||
.build();
|
||||
|
||||
user.getMapManager().setLastMonsterAttack(fightId + 1);
|
||||
user.getUserMissionManager().onGameEvent(user,GameEvent.MONSTER_ATTACK_LEVEL);
|
||||
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.QUICK_START_MONSTERFIGHTER_REPONSE_VALUE, builder, true);
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ public enum FightType {
|
|||
AdventureLock(5), // 解锁秘境
|
||||
GuildFight(6), // 公会站
|
||||
BloodyFight(7), // 血战
|
||||
MonterFight(8), // 兽潮
|
||||
|
||||
|
||||
;
|
||||
|
|
|
@ -26,12 +26,15 @@ import com.ljsd.jieling.network.session.ISession;
|
|||
import com.ljsd.jieling.protocol.ProtocolsAbstract;
|
||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import com.ljsd.jieling.session.GameSession;
|
||||
import com.ljsd.jieling.util.ClassLoaderHelper;
|
||||
import com.ljsd.jieling.util.MathUtils;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.ljsd.jieling.util.StringUtil;
|
||||
import com.ljsd.jieling.util.TimeUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.stereotype.Component;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.*;
|
||||
|
@ -50,7 +53,7 @@ public class ProtocolsManager implements ProtocolsAbstract {
|
|||
private static ProtocolsManager instance = new ProtocolsManager();
|
||||
public static Map<MessageTypeProto.MessageType, String> gameMessageForLogin = new ConcurrentHashMap<>();
|
||||
private Map<Integer, BaseHandler> handlers = new HashMap<>();
|
||||
|
||||
private static ClassLoader classLoader = GameApplication.class.getClassLoader();
|
||||
private static Set<Integer> forbidLogin = new HashSet<>();
|
||||
public final int HANDLER_THREAD_NUM = 50;
|
||||
public HandlerLogicThread[] handlerThreads = new HandlerLogicThread[HANDLER_THREAD_NUM];
|
||||
|
@ -493,5 +496,33 @@ public class ProtocolsManager implements ProtocolsAbstract {
|
|||
}
|
||||
forbidLogin = forbidMap.keySet();
|
||||
}
|
||||
|
||||
public void initHandler(String pck, ConfigurableApplicationContext configurableApplicationContext){
|
||||
List<Class<?>> handlers = new LinkedList<>();
|
||||
try
|
||||
{
|
||||
ClassLoaderHelper.findLocalClass(pck, BaseHandler.class, classLoader, handlers);
|
||||
handlers.forEach(hand ->
|
||||
{
|
||||
BaseHandler baseHandler = null;
|
||||
try {
|
||||
baseHandler = (BaseHandler) configurableApplicationContext.getBean(hand);
|
||||
} catch (NoSuchBeanDefinitionException e1) {
|
||||
try {
|
||||
baseHandler = (BaseHandler) hand.newInstance();
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (null != baseHandler) {
|
||||
addHandler(baseHandler);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch(RuntimeException e2)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
package com.ljsd.jieling.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Description: des
|
||||
* Author: zsx
|
||||
* CreateDate: 2019/10/8 17:23
|
||||
*/
|
||||
public class ClassLoaderHelper {
|
||||
|
||||
/**
|
||||
* 获取指定接口的某个包下的所有实现类(不包括接口和抽象类)
|
||||
*/
|
||||
public static void findLocalClass(String packName, Class<?> classinterface, ClassLoader classLoader, List<Class<?>> classes)
|
||||
{
|
||||
URI url;
|
||||
try
|
||||
{
|
||||
url = classLoader.getResource(packName.replace(".", "/")).toURI();
|
||||
}
|
||||
catch(URISyntaxException e1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
File file = new File(url);
|
||||
file.listFiles((subfile) ->
|
||||
{
|
||||
if(subfile.isDirectory())
|
||||
{
|
||||
findLocalClass(packName + "." + subfile.getName(), classinterface,classLoader,classes);
|
||||
}
|
||||
if(subfile.getName().endsWith(".class"))
|
||||
{
|
||||
Class<?> clazz = null;
|
||||
try
|
||||
{
|
||||
String classname = packName + "." + subfile.getName().replace(".class", "");
|
||||
clazz = classLoader.loadClass(classname);
|
||||
}
|
||||
catch(ClassNotFoundException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
if(clazz == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(ClassLoaderHelper.filter(clazz, classinterface))
|
||||
{
|
||||
classes.add(clazz);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 过滤接口和抽象类
|
||||
*/
|
||||
private static boolean filter(Class<?> clazz, Class<?> filterclass)
|
||||
{
|
||||
if(clazz.isInterface())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(Modifier.isAbstract(clazz.getModifiers()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return filterclass.isAssignableFrom(clazz);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue