特训道具加速

master_haizei01
grimm 2024-06-13 16:35:35 +08:00
parent cba052557f
commit 777be8c60a
6 changed files with 126 additions and 4 deletions

View File

@ -456,4 +456,20 @@ public interface BIReason {
int GIFT_UP_STAR_COST = 1342;//礼物装备升星
int GIFT_UP_STAR_GET = 1343;//礼物装备获得
int ARENA_UP_LV_REWARD = 1344;//竞技场段位升级奖励
int SOLDIER_UP_LV = 1345;//兵力升级
int SOLDIER_SPEED_UP_LV = 1346;//兵力加速升级
int SOLDIER_LOTTERY_REWARD = 1347;//小兵招募获得
int SOLDIER_LOTTERY_COST = 1348;//小兵招募消耗
int SOLDIER_DISMISS_REWARD = 1349;//小兵遣散获得
int SOLDIER_MIAN_LEVEL_REWARD = 1350;//小兵主线奖励
int COMPARE_NUM_GAME_REWARD = 1351;//比数小游戏挂机奖励
int MONEY_BUY_GOOD_COST = 1352;//现金点卷购买礼包消耗
int EVERYDAY_DISCOUNT_GET_REFRESH_COUNT = 1353;//天天折扣获得刷新次数
int EVERYDAY_DISCOUNT_COST_REFRESH_COUNT = 1354;//天天折扣刷新消耗
int EVERYDAY_DISCOUNT_GET_MISSION_COUNT = 1355;//天天折扣获得档位次数
int EVERYDAY_DISCOUNT_COST_MISSION_COUNT = 1356;//天天折扣消耗档位次数
int EVERYDAY_DISCOUNT_CLEAN_MISSION_COUNT = 1357;//天天折扣清零次数
int TRAINGING_SPEED_ITEM_COST = 1358;//特训加速道具消耗
}

View File

@ -233,7 +233,7 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
return getFightForPVP(attachId,fightTeamInfo,deffightTeamInfo,seed,isRever,fightType,SArenaSetting.getSArenaSetting().getMostTime());
}
public static FightResult getFightForPVP(int attachId,CommonProto.FightTeamInfo fightTeamInfo, CommonProto.FightTeamInfo deffightTeamInfo,int seed,boolean isRever,FightType fightType,int mostTime) throws Exception {
public static FightResult getFightForPVP(int attachId,CommonProto.FightTeamInfo fightTeamInfo, CommonProto.FightTeamInfo deffightTeamInfo,int seed,boolean isRever,FightType fightType,int mostTime) {
LuaValue getFightData;
if(isRever){
deffightTeamInfo = CommonProto.FightTeamInfo.newBuilder().mergeFrom(deffightTeamInfo).setFirstCamp(1).build();

View File

@ -0,0 +1,25 @@
package com.ljsd.jieling.handler.training;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.hero.TrainingLogic;
import com.ljsd.jieling.network.session.ISession;
import org.springframework.stereotype.Component;
import rpc.protocols.HeroInfoProto;
import rpc.protocols.MessageTypeProto;
/**
* @author hj
*
*/
@Component
public class TrainingPropSpeedHandler extends BaseHandler<HeroInfoProto.TrainingPropSpeedRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.TrainingPropSpeedRequest;
}
@Override
public void processWithProto(ISession iSession, HeroInfoProto.TrainingPropSpeedRequest proto) throws Exception {
TrainingLogic.getInstance().trainingPropSpeed(iSession, proto);
}
}

View File

@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.hero;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.exception.ErrorTableException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.GlobalItemType;
import com.ljsd.jieling.logic.activity.event.Poster;
@ -14,12 +15,14 @@ import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.CBean2Proto;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.ToolsUtil;
import config.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rpc.protocols.CommonProto;
import rpc.protocols.HeroInfoProto;
import rpc.protocols.MessageTypeProto;
import util.StringUtil;
import util.TimeUtils;
import java.util.*;
@ -114,7 +117,7 @@ public class TrainingLogic {
int archId = proto.getArchId();
TrainingArchitecture architecture = getTrainingArchitecture(user, archId);
if (architecture == null){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE, "建筑未解锁!");
throw new ErrorTableException(190);//建筑未解锁
}
STrainBuild trainBuild = STrainBuild.getMap().get(archId);
@ -188,7 +191,7 @@ public class TrainingLogic {
TrainingArchitecture architecture = getTrainingArchitecture(user, architectureId);
if (architecture == null){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE, "建筑未解锁!");
throw new ErrorTableException(190);//建筑未解锁
}
Hero hero = user.getHeroManager().getHero(heroId);
Set<Integer> heroIds = STrain.getTrainByHeroMap().keySet();
@ -244,6 +247,65 @@ public class TrainingLogic {
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.TrainingResponse_VALUE, builder.build(), true);
}
/**
*
*/
public void trainingPropSpeed(ISession iSession, HeroInfoProto.TrainingPropSpeedRequest proto) throws Exception {
User user = UserManager.getUser(iSession.getUid());
int archId = proto.getArchId();
int itemId = proto.getItemId();
int num = proto.getNum();
TrainingArchitecture architecture = getTrainingArchitecture(user, archId);
if (architecture == null){
throw new ErrorTableException(190);//建筑未解锁
}
if (StringUtil.isEmpty(architecture.getHeroId())){
throw new ErrorTableException(191);//特训建筑中没有英雄在特训
}
STrainBuild trainBuild = STrainBuild.getMap().get(archId);
STrainBuildLevel buildLevel = STrainBuildLevel.getPoolMap().get(trainBuild.getLvupCostPool()).get(architecture.getLv());
if (buildLevel == null || buildLevel.getCost() == null){
throw new ErrorCodeException(ErrorCode.CFG_NULL, "未找到对应等级的建筑!");
}
Map<Integer, Long> selected = ToolsUtil.selectCostItem(buildLevel.getCost());
if (!selected.containsKey(itemId)){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);//物品不足
}
HeroManager heroManager = user.getHeroManager();
Hero hero = heroManager.getHero(architecture.getHeroId());
if (hero == null){
throw new ErrorCodeException(ErrorCode.ITEM_DECOMPOSE_NO_HERO);//英雄不存在
}
boolean checkCost = ItemUtil.checkCost(user, new int[][]{{itemId, num}});
if (!checkCost){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);//物品不足
}
Training training = hero.getTraining();
int gain = buildLevel.getGain();
int exp = (int) (selected.get(itemId) * gain);
// 攻击
if (buildLevel.getPosition() == 1){
training.addAttackExp(exp);
}
// 防御
if (buildLevel.getPosition() == 2){
training.addDefenseExp(exp);
}
// 生命
if (buildLevel.getPosition() == 3){
training.addHpExp(exp);
}
hero.setTraining(training);
ItemUtil.itemCost(user, new int[][]{{itemId, num}}, BIReason.TRAINGING_SPEED_ITEM_COST, 1);
CommonProto.HeroTraining trainingProto = CBean2Proto.getTrainingProto(hero);
CommonProto.TrainingArchitectureInfo architectureProto = CBean2Proto.getTrainingArchitectureProto(architecture);
HeroInfoProto.TrainingResponse.Builder builder = HeroInfoProto.TrainingResponse.newBuilder();
builder.setTraining(trainingProto).setInfo(architectureProto);
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.TrainingPropSpeedResponse_VALUE, builder.build(), true);
}
/**
*
* ,,,,

View File

@ -223,4 +223,20 @@ public class ToolsUtil {
return result;
}
public static Map<Integer, Long> selectCostItem(int[][] costItems) {
HashMap<Integer, Long> map = new HashMap<>();
if (costItems == null){
return map;
}
for (int[] costItem : costItems){
int itemId = costItem[0];
int itemNum = costItem[1];
if (itemId == 0 || itemNum == 0){
continue;
}
map.put(itemId, map.getOrDefault(itemId, 0L) + itemNum);
}
return map;
}
}

View File

@ -25,6 +25,7 @@ public class STrainBuildLevel implements BaseConfig {
private int time;
private int[][] speedUp;
@Override
public void init() throws Exception {
@ -84,5 +85,7 @@ public class STrainBuildLevel implements BaseConfig {
return time;
}
public int[][] getSpeedUp() {
return speedUp;
}
}