修行功能1.0

back_recharge
duhui 2021-05-14 11:12:47 +08:00
parent e494248bd3
commit b51cd010a3
10 changed files with 462 additions and 39 deletions

View File

@ -329,4 +329,6 @@ public interface BIReason {
int EQUIP_UPLEVEL_COST = 1092;//装备升星消耗
int EQUIP_UPLEVEL_REWARD = 1093;//装备升星获得
int TA_SUI_LING_XIAO = 1094;//踏碎凌霄
int UP_PRACTICE_LEVEL = 1100;//修行升级
}

View File

@ -219,6 +219,8 @@ public class GetPlayerInfoHandler extends BaseHandler{
.addAllUserMountList(CBean2Proto.getUserMountList(user))
.addAllUserSkinList(CBean2Proto.getUserSkinList(user))
.addAllUserTitleList(CBean2Proto.getUserTitleList(user))
.setPracticeLevel(heroManager.getPracticeLevel())
.addAllSealList(CBean2Proto.getPurpleMansionSealInfo(user))
.build();
ReportUtil.onReportEvent(user, ReportEventEnum.APP_LOGIN.getType());
try {
@ -227,14 +229,11 @@ public class GetPlayerInfoHandler extends BaseHandler{
MessageUtil.sendIndicationMessage(iSession, 1, MessageTypeProto.MessageType.WorldLevelIndication_VALUE, PlayerInfoProto.WorldLevelIndication.newBuilder().setWorldLeve(GlobleSystemLogic.getGloableWorldLeveCache()).build(), true);
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true);
// DoFix.getInstance().loginFix(user);
if(playerInfoManager.getIsdayFirst()==0){
playerInfoManager.setIsdayFirst(1);
}
RedisUtil.getInstence().set(RedisKey.USER_LOGIN_URL + userId, RPCServerTask.userCallBackUrl);
/*if(user.getPlayerInfoManager().getGuidePoints().get(1)!=-1){
user.getPlayerInfoManager().updateGuidePoint(1,-1);
}*/
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -0,0 +1,102 @@
package com.ljsd.jieling.handler.hero;
import com.google.protobuf.GeneratedMessage;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.dao.PurpleMansionSeal;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.CBean2Proto;
import com.ljsd.jieling.util.MessageUtil;
import org.springframework.stereotype.Component;
import rpc.protocols.CommonProto;
import rpc.protocols.HeroInfoProto;
import rpc.protocols.MessageTypeProto;
import java.util.List;
import java.util.Map;
/**
* @Author hj
* @Description
*
* 1: oldSealId != newSealId :
* 2: oldSealId == newSealId && newSealId.subId == subId :
* 3: oldSealId == newSealId && newSealId.subId != subId :
* @Date $ $
* @Param $
* @return $
**/
@Component
public class ReplacePurpleMansionSealHandler extends BaseHandler<HeroInfoProto.ReplacePurpleMansionSealRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.ReplacePurpleMansionSealRequest;
}
@Override
public void processWithProto(ISession iSession, HeroInfoProto.ReplacePurpleMansionSealRequest proto) throws Exception {
// 用户信息
User user = UserManager.getUser(iSession.getUid());
if (user == null) {
throw new ErrorCodeException(ErrorCode.UNKNOWN);
}
// 获取参数
int oldSealId = proto.getOldSealId();
int newSealId = proto.getNewSealId();
String subId = proto.getSubId();
// 神印列表
Map<Integer, PurpleMansionSeal> sealMap = user.getHeroManager().getPurpleMansionSeal();
// 替换神印
if (oldSealId != newSealId){
PurpleMansionSeal newSeal = sealMap.get(newSealId);
if (newSeal == null){
throw new ErrorCodeException("神印不存在!");
}
if (newSeal.getType() == 1 && (subId == null || "".equals(subId))){
throw new ErrorCodeException("英雄id不能为空!");
}
// 旧神印状态修改
PurpleMansionSeal oldSeal = sealMap.get(oldSealId);
if (oldSeal != null){
oldSeal.setState(0);
user.getHeroManager().putPurpleMansionSeal(oldSeal);
}
// 新神印状态修改
newSeal.setState(1);
// 附属英雄id修改,类型之后需要读表
if (!newSeal.getSubId().equals(subId) && newSeal.getType() == 1){
newSeal.setSubId(subId);
}
user.getHeroManager().putPurpleMansionSeal(newSeal);
}
// 相同神印
else {
PurpleMansionSeal seal = sealMap.get(newSealId);
// 卸载神印
if (seal.getSubId().equals(subId)){
seal.setState(0);
}
// 替换英雄id
else {
if (seal.getType() != 1){
throw new ErrorCodeException("神印类型错误!");
}
seal.setSubId(subId);
}
user.getHeroManager().putPurpleMansionSeal(seal);
}
// 返回最新神印列表
List<CommonProto.PurpleMansionSeal> sealInfo = CBean2Proto.getPurpleMansionSealInfo(user);
HeroInfoProto.ReplacePrupleMansionSealResponse build = HeroInfoProto.ReplacePrupleMansionSealResponse.newBuilder().addAllSealList(sealInfo).build();
MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.ReplacePurpleMansionSealResponse_VALUE,build,true);
}
}

View File

@ -0,0 +1,81 @@
package com.ljsd.jieling.handler.hero;
import com.google.protobuf.GeneratedMessage;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.dao.PurpleMansionSeal;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.util.ItemUtil;
import config.SXiuXian;
import config.SXiuXianSkill;
import manager.STableManager;
import org.springframework.stereotype.Component;
import rpc.protocols.HeroInfoProto;
import rpc.protocols.MessageTypeProto;
/**
* @Author hj
* @Description ,
* @Date $ $
* @Param $
* @return $
**/
@Component
public class UpPracticeLevelHandler extends BaseHandler<HeroInfoProto.UpPracticeLevelRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.UpPracticeLevelRequest;
}
@Override
public GeneratedMessage processWithProto(int uid, HeroInfoProto.UpPracticeLevelRequest proto) throws Exception {
// 用户信息
User user = UserManager.getUser(uid);
if (user == null) {
throw new ErrorCodeException(ErrorCode.UNKNOWN);
}
// 获取当前等级和之后的等级
int level = user.getHeroManager().getPracticeLevel();
if (level <= 0){
level = 1;
}
SXiuXian xiuXian = STableManager.getConfig(SXiuXian.class).get(level);
SXiuXian xiuXian2 = STableManager.getConfig(SXiuXian.class).get(level+1);
if (xiuXian == null || xiuXian2 == null){
throw new ErrorCodeException("已修行至世间巅峰");
}
// 山河社稷图的星星,先用等级代替,之后要改
int star = user.getPlayerInfoManager().getLevel();
if (star < xiuXian.getNeedStarNum()){
throw new ErrorCodeException("无法破境,请前往山河社稷图获取更多星星!");
}
// 验证道具消耗
boolean cost = ItemUtil.itemCost(user, xiuXian.getLevelUpCost(), BIReason.UP_PRACTICE_LEVEL, 0);
if (!cost){
throw new ErrorCodeException("道具不足!",ErrorCode.ITEM_NOT_ENOUGH);
}
// 升级
user.getHeroManager().setPracticeLevel(xiuXian2.getId());
// 添加技能
if (xiuXian2.getTeamSkill() != null){
for (int seal : xiuXian2.getTeamSkill()) {
SXiuXianSkill xianSkill = STableManager.getConfig(SXiuXianSkill.class).get(seal);
// 添加新神印
PurpleMansionSeal purpleMansionSeal = new PurpleMansionSeal(seal, xianSkill.getType(),"",0);
user.getHeroManager().putPurpleMansionSeal(purpleMansionSeal);
}
}
return HeroInfoProto.UpPracticeLevelResponse.newBuilder().setPracticeLevel(xiuXian2.getId()).build();
}
}

View File

@ -7,10 +7,7 @@ import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.hero.HongMengAttributeEnum;
import config.SSpecialConfig;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.*;
public class HeroManager extends MongoBase {
@ -53,15 +50,14 @@ public class HeroManager extends MongoBase {
// 鸿蒙碑最大等级,添加限制,
private Set<Integer> hongmengMaxLevel = new HashSet<>();
// 修行境界等级
/**
*
*/
private int practiceLevel;
/**
*
* key: id
* value: 0
* -1
*
*/
private Map<Integer,String> purpleMansionSeal = new HashMap<>();
private Map<Integer,PurpleMansionSeal> purpleMansionSeal = new HashMap<>();
public void updateRandCount(int type,int count){
updateString("totalCount." + type, count);
@ -285,18 +281,18 @@ public class HeroManager extends MongoBase {
updateString("practiceLevel", practiceLevel);
}
public void addPracticeLevel() {
this.practiceLevel+=1;
updateString("practiceLevel", practiceLevel);
}
public Map<Integer, String> getPurpleMansionSeal() {
public Map<Integer, PurpleMansionSeal> getPurpleMansionSeal() {
return purpleMansionSeal;
}
public void setPurpleMansionSeal(Map<Integer, String> purpleMansionSeal) {
public void setPurpleMansionSeal(Map<Integer, PurpleMansionSeal> purpleMansionSeal) {
this.purpleMansionSeal = purpleMansionSeal;
updateString("purpleMansionSeal", purpleMansionSeal);
}
public void putPurpleMansionSeal(PurpleMansionSeal seal) {
purpleMansionSeal.put(seal.getSealId(),seal);
updateString("purpleMansionSeal", purpleMansionSeal);
}
}

View File

@ -0,0 +1,76 @@
package com.ljsd.jieling.logic.dao;
/**
* @Author hj
* @Description //TODO $
* @Date $ $
* @Param $
* @return $
**/
import com.ljsd.common.mogodb.MongoBase;
public class PurpleMansionSeal extends MongoBase {
/**
* id
*/
private int sealId;
/**
*
*/
private int type;
/**
* id,id
*/
private String subId;
/**
*
* 0:使
* 1:使
*/
private int state;
public PurpleMansionSeal(int sealId, int type, String subId, int state) {
this.sealId = sealId;
this.type = type;
this.subId = subId;
this.state = state;
}
public int getSealId() {
return sealId;
}
public void setSealId(int sealId) {
this.sealId = sealId;
updateString("sealId", sealId);
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
updateString("type", type);
}
public String getSubId() {
return subId;
}
public void setSubId(String subId) {
this.subId = subId;
updateString("subId", subId);
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
updateString("state", state);
}
}

View File

@ -29,7 +29,6 @@ import com.ljsd.jieling.logic.fight.passiveSkillCal.PassiveskillCalEnum;
import com.ljsd.jieling.logic.item.ItemLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.*;
import config.*;
@ -46,7 +45,6 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class HeroLogic{
private static final Logger LOGGER = LoggerFactory.getLogger(HeroLogic.class);
@ -1446,27 +1444,14 @@ public class HeroLogic{
skillList.addAll(tempHero.getPassiveSkills(1, hero.getBreakIdByHongMeng(user.getHeroManager())));
skillList.addAll(tempHero.getPassiveSkills(2, hero.getStarBreakId()));
}
//装备没有技能不用计算
// Map<Integer, Integer> equipByPositionMap = hero.getEquipByPositionMap();
// if(!equipByPositionMap.isEmpty()){
// Map<String, PropertyItem> equipMap = hero.getCreateType()==1?user.getExpeditionManager().getEquipMap():user.getEquipManager().getEquipMap();
// for(Integer position : equipSkillPositionTemaplge){
// Integer equipId = equipByPositionMap.get(position);
// if(equipId==null){
// continue;
// }
// int skillId = equipMap.get(equipId).getSkill();
// if(skillId!=0){
// skillList.add(skillId);
// }
// }
// }
//魂印
Map<Integer, Integer> soulEquipByPositionMap = hero.getSoulEquipByPositionMap();
Map<Integer, SEquipConfig> config = STableManager.getConfig(SEquipConfig.class);
soulEquipByPositionMap.values().forEach(e->{
Arrays.stream(config.get(e).getPassiveSkill()).forEach(skillList::add);
});
//法宝技能
int[] equipTalismana = tempHero.getEquipTalismana();
if(equipTalismana.length<1 ||hero.getStar()<equipTalismana[0]){
@ -1480,9 +1465,62 @@ public class HeroLogic{
Arrays.stream(v.getOpenSkillRules()).forEach(i->skillList.add(i));
}
});
// 紫府神印技能
Collection<PurpleMansionSeal> seals = user.getHeroManager().getPurpleMansionSeal().values();
seals.forEach(v->{
// 使用中神印
if (v.getState() == 1){
// 附身神印
if (v.getType() == 1){
if (v.getSubId().equals(hero.getId())){
getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList);
}
}
// 通用神印
else {
getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList);
}
}
});
return skillList;
}
/**
*
* @param sealId
* @param tempHero
* @param skillList
*/
private void getPurpleMansionSealSkill(int sealId,SCHero tempHero,List<Integer> skillList){
SXiuXianSkill xianSkill = STableManager.getConfig(SXiuXianSkill.class).get(sealId);
// 技能数组转list
int skillId = xianSkill.getSkillId();
// 适用范围
int[] fitList = xianSkill.getFitList();
switch (fitList[0]){
case 0:
// 不限
skillList.add(skillId);
break;
case 1:
// 阵营限制
if (tempHero.getPropertyName() == fitList[1]){
skillList.add(skillId);
}
break;
case 2:
// 职业限制
if (tempHero.getProfession() == fitList[1]){
skillList.add(skillId);
}
break;
default:
break;
}
}
public void coverSkill(List<Integer> heroSkillList){
Set<Integer> coverSkillIds = new HashSet<>();
heroSkillList.forEach(skill->{
@ -1889,6 +1927,15 @@ public class HeroLogic{
}
});
// 修行等级属性加成
Map<Integer, SXiuXian> xiuXianMap = STableManager.getConfig(SXiuXian.class);
int practiceLevel = user.getHeroManager().getPracticeLevel();
xiuXianMap.values().forEach(v->{
if (v.getId() >= practiceLevel && v.getTotalPros() != null){
combinedAttribute(v.getTotalPros(),heroAllAttribute);
}
});
// //皮肤、称号加成 -- 前端未实现,暂时注释
// int decoration = user.getPlayerInfoManager().getDecoration();
// int designation = user.getPlayerInfoManager().getDesignation();

View File

@ -698,11 +698,29 @@ public class CBean2Proto {
return builder.build();
}
public static CommonProto.TeamSimpleInfo getSimpleTeamInfoByHero(User user, Hero hero,int position){
return CommonProto.TeamSimpleInfo.newBuilder().setHeroid(hero.getId()).setHeroTid(hero.getTemplateId()).setLevel(hero.getLevel(user.getHeroManager())).setStar(hero.getStar()).setPosition(position).setSkinId(hero.getSkin()).build();
}
public static CommonProto.TeamSimpleInfo getSimpleTeamInfoByPokeMon(Pokemon pokemon,int position){
return CommonProto.TeamSimpleInfo.newBuilder().setHeroid(pokemon.getId()).setHeroTid(pokemon.getTmpId()).setLevel(pokemon.getLevel()).setStar(pokemon.getStar()).setPosition(position).build();
}
/**
* list by proto
* @param user
* @return
*/
public static List<CommonProto.PurpleMansionSeal> getPurpleMansionSealInfo(User user){
ArrayList<CommonProto.PurpleMansionSeal> list = new ArrayList<>();
user.getHeroManager().getPurpleMansionSeal().values().forEach(v->{
CommonProto.PurpleMansionSeal seal = CommonProto.PurpleMansionSeal.newBuilder()
.setId(v.getSealId())
.setType(v.getType())
.setSubId(v.getSubId())
.setState(v.getState())
.build();
list.add(seal);
});
return list;
}
}

View File

@ -0,0 +1,61 @@
package config;
import manager.STableManager;
import manager.Table;
import java.util.Map;
@Table(name ="XiuXian")
public class SXiuXian implements BaseConfig {
private int id;
private int realmId;
private int realmLevel;
private int[][] levelUpCost;
private int[][] totalPros;
private int needStarNum;
private int[] teamSkill;
@Override
public void init() throws Exception {
}
public int getId() {
return id;
}
public int getRealmId() {
return realmId;
}
public int getRealmLevel() {
return realmLevel;
}
public int[][] getLevelUpCost() {
return levelUpCost;
}
public int[][] getTotalPros() {
return totalPros;
}
public int getNeedStarNum() {
return needStarNum;
}
public int[] getTeamSkill() {
return teamSkill;
}
}

View File

@ -0,0 +1,41 @@
package config;
import manager.STableManager;
import manager.Table;
import java.util.HashMap;
import java.util.Map;
@Table(name ="XiuXianSkill")
public class SXiuXianSkill implements BaseConfig {
private int id;
private int type;
private int[] fitList;
private int skillId;
@Override
public void init() throws Exception {
}
public int getId() {
return id;
}
public int getType() {
return type;
}
public int[] getFitList() {
return fitList;
}
public int getSkillId() {
return skillId;
}
}