小兵招募加保底
parent
e0b0eb793e
commit
e0695cf73e
|
@ -200,7 +200,7 @@ public class ArenaLogic {
|
|||
*/
|
||||
public void checkChallenge(User user, boolean ifUpdate) throws Exception {
|
||||
if (!user.getTeamPosManager().getTeamPosForHero().containsKey(TeamEnum.TEAM_ARENA_DEFENSE.getTeamId())) {
|
||||
throw new ErrorTableException(161);//编队未配置
|
||||
throw new ErrorTableException(189);//编队未配置
|
||||
}
|
||||
SArenaSetting sArenaSetting = SArenaSetting.getSArenaSetting();
|
||||
int battleFree = sArenaSetting.getBattleFree();
|
||||
|
|
|
@ -31,6 +31,8 @@ public class MainLevelManager extends MongoBase {
|
|||
private int upSoldierLvEndTime;//兵力升级结束时间
|
||||
private int soldierRestartTime;//小兵挂机开始时间
|
||||
private Map<Integer, Integer> soldierStateInfo = new HashMap<>();//小兵每关单独挂机时间
|
||||
private int soldierLowCount;// 小兵最低属性次数
|
||||
|
||||
public void init(){
|
||||
int nowInt = TimeUtils.nowInt();
|
||||
setStartTime(nowInt);
|
||||
|
@ -269,4 +271,18 @@ public class MainLevelManager extends MongoBase {
|
|||
this.soldierStateInfo.clear();
|
||||
updateString("soldierStateInfo",soldierStateInfo);
|
||||
}
|
||||
|
||||
public int getSoldierLowCount() {
|
||||
return soldierLowCount;
|
||||
}
|
||||
|
||||
public void setSoldierLowCount(int soldierLowCount) {
|
||||
this.soldierLowCount = soldierLowCount;
|
||||
updateString("soldierLowCount",soldierLowCount);
|
||||
}
|
||||
|
||||
public void addSoldierLowCount(int count) {
|
||||
this.soldierLowCount += count;
|
||||
updateString("soldierLowCount",soldierLowCount);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -101,7 +101,7 @@ public class DuoduiTowerLogic {
|
|||
}
|
||||
if (!verifyTeam(type, user)) {
|
||||
LOGGER.error("队伍存在空阵容,类型:{},当前层数:{},要挑战层数:{},uid:{}", type, rankTier, tier, user.getId());
|
||||
throw new ErrorTableException(187);
|
||||
throw new ErrorTableException(187);//编队为空
|
||||
}
|
||||
for (SDuoDuiTower tower : towers) {
|
||||
PVEFightEvent pveFightEvent = new PVEFightEvent(user.getId(), tower.getTowerWaveTeam(), 20, GameFightType.DuoduiFight, tower.getId());
|
||||
|
|
|
@ -25,6 +25,7 @@ import com.ljsd.jieling.util.ItemUtil;
|
|||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.ljsd.jieling.util.ToolsUtil;
|
||||
import config.*;
|
||||
import org.apache.commons.lang3.RandomUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import rpc.protocols.CommonProto;
|
||||
|
@ -159,6 +160,35 @@ public class SoldierLogic {
|
|||
if (lotteryConfig == null){
|
||||
throw new ErrorCodeException(ErrorCode.CFG_NULL);//配置不存在
|
||||
}
|
||||
Soldier soldier = null;
|
||||
int lowCount = mainLevelManager.getSoldierLowCount();//be
|
||||
int maxNumber = SSpecialConfig.getIntegerValue("Soldiers_Lottery_Maxnumber");
|
||||
if (lowCount >= maxNumber){
|
||||
// 特殊招募
|
||||
soldier = specialRecruitSoldier(user);
|
||||
}
|
||||
if (soldier == null){
|
||||
// 普通招募
|
||||
soldier = usuallyRecruitSoldier(user);
|
||||
}
|
||||
// 消耗
|
||||
ItemUtil.itemCost(user, new int[][]{lotteryCost}, BIReason.SOLDIER_LOTTERY_COST, 0);
|
||||
// 获得
|
||||
mainLevelManager.updateSoldier(soldier);
|
||||
|
||||
CommonProto.Soldier soldierProto = CBean2Proto.getSoldierProto(soldier);
|
||||
MapInfoProto.RecruitSoldierResponse.Builder builder = MapInfoProto.RecruitSoldierResponse.newBuilder().setSoldier(soldierProto);
|
||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.RecruitSoldierResponse_VALUE, builder.build(), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 普通招募小兵
|
||||
* @param user 用户
|
||||
* @return 小兵
|
||||
*/
|
||||
public Soldier usuallyRecruitSoldier(User user){
|
||||
int soldierLv = user.getMainLevelManager().getSoldierLv();
|
||||
SSoldiersLotteryConfig lotteryConfig = SSoldiersLotteryConfig.levelMap.get(soldierLv);
|
||||
int[] soldierType = lotteryConfig.getSoldierType();
|
||||
Random random = new Random();
|
||||
int typeIndex = random.nextInt(soldierType.length);
|
||||
|
@ -193,14 +223,73 @@ public class SoldierLogic {
|
|||
soldier.setLevel(level);
|
||||
soldier.setPosition(-1);
|
||||
soldier.setAttributes(attributes);
|
||||
// 消耗
|
||||
ItemUtil.itemCost(user, new int[][]{lotteryCost}, BIReason.SOLDIER_LOTTERY_COST, 0);
|
||||
// 获得
|
||||
mainLevelManager.updateSoldier(soldier);
|
||||
|
||||
CommonProto.Soldier soldierProto = CBean2Proto.getSoldierProto(soldier);
|
||||
MapInfoProto.RecruitSoldierResponse.Builder builder = MapInfoProto.RecruitSoldierResponse.newBuilder().setSoldier(soldierProto);
|
||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.RecruitSoldierResponse_VALUE, builder.build(), true);
|
||||
return soldier;
|
||||
}
|
||||
|
||||
/**
|
||||
* 特殊小兵招募返回
|
||||
* @param user 用户
|
||||
* @return 小兵信息
|
||||
*/
|
||||
public Soldier specialRecruitSoldier(User user){
|
||||
MainLevelManager manager = user.getMainLevelManager();
|
||||
int size = manager.getSoldierMap().values().size();
|
||||
if (size == 0){
|
||||
LOGGER.error("特殊次数招募小兵退出,玩家当前没有小兵, uid:{}, size:{}",user.getId(), size);
|
||||
return null;
|
||||
}
|
||||
int[] randomIntS = new int[size];
|
||||
int index = 0;
|
||||
for (Soldier value : manager.getSoldierMap().values()) {
|
||||
randomIntS[index] = value.getPosition();
|
||||
index++;
|
||||
}
|
||||
int i = RandomUtils.nextInt(0, size);
|
||||
Soldier soldier = manager.getSoldier(randomIntS[i]);
|
||||
if (soldier == null){
|
||||
LOGGER.error("特殊次数招募小兵退出,随机的位置没有小兵, uid:{}, position:{}",user.getId(), randomIntS[i]);
|
||||
return null;
|
||||
}
|
||||
SSoldiersSetting setting = SSoldiersSetting.idMap.get(soldier.getId());
|
||||
if (setting == null){
|
||||
LOGGER.error("特殊次数招募小兵退出,小兵id在SoldiersSetting表找不到, uid:{}, id:{}",user.getId(), soldier.getId());
|
||||
return null;
|
||||
}
|
||||
SSoldiersLevelConfig levelConfig = SSoldiersLevelConfig.libForLevelMap.get(setting.getSoldiers()).get(soldier.getLevel());
|
||||
if (levelConfig == null){
|
||||
LOGGER.error("特殊次数招募小兵退出,小兵信息在SoldiersLevelConfig表找不到, uid:{}, libraryId:{}, level:{}",user.getId(), setting.getSoldiers(), soldier.getLevel());
|
||||
return null;
|
||||
}
|
||||
// 最大属性
|
||||
HashMap<Integer, Long> maxAttrMap = new HashMap<>();
|
||||
for (int[] ints : levelConfig.getProperty()) {
|
||||
maxAttrMap.put(ints[0], (long) (ints[1] * (setting.getSoldierProperty()[1]/10000D)));
|
||||
}
|
||||
// 属性
|
||||
HashMap<Integer, Long> attributes = new HashMap<>();
|
||||
for (Map.Entry<Integer, Long> entry : soldier.getAttributes().entrySet()) {
|
||||
int id = entry.getKey();
|
||||
long value = entry.getValue();
|
||||
Long maxValue = maxAttrMap.getOrDefault(id, 0L);
|
||||
// 不到最大属性值,则随机增加
|
||||
if (maxValue != 0 && value < maxValue){
|
||||
attributes.put(id, value+1);
|
||||
}else {
|
||||
attributes.put(id, value);
|
||||
}
|
||||
}
|
||||
// 封装
|
||||
Soldier resultSoldier = new Soldier();
|
||||
resultSoldier.setId(soldier.getId());
|
||||
resultSoldier.setType(soldier.getType());
|
||||
resultSoldier.setQuality(soldier.getQuality());
|
||||
resultSoldier.setLevel(soldier.getLevel());
|
||||
resultSoldier.setPosition(-1);
|
||||
resultSoldier.setAttributes(attributes);
|
||||
// 清零特殊次数
|
||||
manager.setSoldierLowCount(0);
|
||||
return resultSoldier;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -249,6 +338,8 @@ public class SoldierLogic {
|
|||
builder.setDrop(drop);
|
||||
// 删除待招募区小兵
|
||||
soldierMap.remove(notUsePosition);
|
||||
// 记录遣散次数
|
||||
mainLevelManager.addSoldierLowCount(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -276,7 +367,7 @@ public class SoldierLogic {
|
|||
}
|
||||
boolean levelOpen = MapLogic.getInstance().checkMainLevelOpen(user, stageConfig.getOpenRule());
|
||||
if (!levelOpen){
|
||||
throw new ErrorTableException(162);//关卡条件不满足
|
||||
throw new ErrorTableException(188);//关卡条件不满足
|
||||
}
|
||||
|
||||
int teamId = TeamEnum.MIAN_LINE_TEAM.getTeamId();
|
||||
|
|
Loading…
Reference in New Issue