diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetAllHerosHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetAllHerosHandler.java index 108511e35..da22f030e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetAllHerosHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetAllHerosHandler.java @@ -15,6 +15,7 @@ import com.ljsd.jieling.util.MessageUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import util.TimeUtils; import java.util.*; @@ -44,7 +45,19 @@ public class GetAllHerosHandler extends BaseHandler{ User user = UserManager.getUser(userId); HeroManager heroManager = user.getHeroManager(); Map heroMap = heroManager.getHeroMap(); + int nowTime = TimeUtils.nowInt(); for(Hero hero : heroMap.values()){ + //检测皮肤 + if(hero.getSkin()!=0){ + if(!heroManager.getSkinInfo().containsKey(hero.getSkin())){ + hero.setSkin(0); + }else{ + int skin= heroManager.getSkinInfo().get(hero.getSkin()); + if(skin!=-1&&skin { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.HERO_SKIN_CHANGE_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, HeroInfoProto.ChangeSkinRequest proto) throws Exception { + HeroLogic.getInstance().changeSkin(iSession,proto.getHeroId(),proto.getSkinId(), MessageTypeProto.MessageType.HERO_SKIN_CHANGE_RESPONSE); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/GetAllSkinHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/GetAllSkinHandler.java new file mode 100644 index 000000000..ce74e37ae --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/GetAllSkinHandler.java @@ -0,0 +1,26 @@ +package com.ljsd.jieling.handler.hero; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +/** + * @author lvxinran + * @date 2020/10/31 + * @discribe + */ +@Component +public class GetAllSkinHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.HERO_SKIN_GET_ALL_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + HeroLogic.getInstance().getAllSkin(iSession,MessageTypeProto.MessageType.HERO_SKIN_GET_ALL_RESPONSE); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java index 5f246237d..af089a3ad 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java @@ -117,4 +117,13 @@ public class HeroManager extends MongoBase { this.mustRandomCount = mustRandomCount; updateString("mustRandomCount",mustRandomCount); } + + public Map getSkinInfo() { + return skinInfo; + } + public void addSkin(int skinId,int time){ + skinInfo.put(skinId,time); + updateString("skinInfo."+skinId,time); + } } + 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 3a31a3e7b..0120441f7 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 @@ -3224,6 +3224,47 @@ public class HeroLogic{ Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid())); + MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); + } + + /** + * 获取所有皮肤信息 + * @param session + * @param messageType + */ + public void getAllSkin(ISession session, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(session.getUid()); + Map skinInfo = user.getHeroManager().getSkinInfo(); + HeroInfoProto.GetAllSkinResponse.Builder response = HeroInfoProto.GetAllSkinResponse.newBuilder(); + if(!skinInfo.isEmpty()){ + skinInfo.forEach((k,v)->response.addSkinInfo(CommonProto.SkinInfo.newBuilder().setSkinId(k).setOverTime(v).build())); + } + MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); + } + + /** + * 更换皮肤 + * @param session + * @param messageType + */ + public void changeSkin(ISession session,String heroId,int skinId, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(session.getUid()); + Map skinInfo = user.getHeroManager().getSkinInfo(); + if(!skinInfo.containsKey(skinId)||(skinInfo.get(skinId)!=-1&&skinInfo.get(skinId) skinInfo = user.getHeroManager().getSkinInfo(); + SHeroSkin sHeroSkin = STableManager.getConfig(SHeroSkin.class).get(item.getItemId()); + if(sHeroSkin==null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + if(skinInfo.containsKey(item.getItemId())){ + if(skinInfo.get(item.getItemId())==-1||skinInfo.get(item.getItemId())> TimeUtils.nowInt()){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + } + int time; + if(sHeroSkin.getTime()==0){ + time = -1; + }else{ + time = sHeroSkin.getTime()+TimeUtils.nowInt(); + } + user.getHeroManager().addSkin(sHeroSkin.getType(),time); + HeroInfoProto.GetSkinIndication indication = HeroInfoProto.GetSkinIndication.newBuilder() + .setSkinInfo(CommonProto.SkinInfo.newBuilder().setSkinId(sHeroSkin.getType()).setOverTime(time)) + .build(); + MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.HERO_SKIN_USE_INDICATION_VALUE,indication,true); + + } /** * 使用选择宝箱道具 diff --git a/tablemanager/src/main/java/config/SHeroSkin.java b/tablemanager/src/main/java/config/SHeroSkin.java new file mode 100644 index 000000000..d9147d1fe --- /dev/null +++ b/tablemanager/src/main/java/config/SHeroSkin.java @@ -0,0 +1,93 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.HashMap; +import java.util.Map; + +@Table(name ="HeroSkin") +public class SHeroSkin implements BaseConfig { + + private int id; + + private int type; + + private int heroId; + + private String readingName; + + private int[][] unlockProperty; + + private int[][] monomerProperty; + + private int time; + + private int isDefault; + + private int order; + + private int[] price; + + + public static Map skinMapByType; + + @Override + public void init() throws Exception { + + Map config = STableManager.getConfig(SHeroSkin.class); + + Map skinMapByTypeTemp = new HashMap<>(); + + for(Map.Entry entry:config.entrySet()){ + + skinMapByTypeTemp.put(entry.getValue().getType(),entry.getValue()); + + } + skinMapByType =skinMapByTypeTemp; + } + + + public int getId() { + return id; + } + + public int getType() { + return type; + } + + public int getHeroId() { + return heroId; + } + + public String getReadingName() { + return readingName; + } + + public int[][] getUnlockProperty() { + return unlockProperty; + } + + public int[][] getMonomerProperty() { + return monomerProperty; + } + + public int getTime() { + return time; + } + + + public int getIsDefault() { + return isDefault; + } + + public int getOrder() { + return order; + } + + public int[] getPrice() { + return price; + } + + +} \ No newline at end of file