刷新必出

back_recharge
lvxinran 2019-12-17 09:54:32 +08:00
parent f0ae6a5c13
commit 73d07c8754
5 changed files with 64 additions and 7 deletions

View File

@ -164,6 +164,7 @@ public class GetPlayerInfoHandler extends BaseHandler{
.addAllPlayedMapTypes(mapManager.getPlayedMapType())
.setAmount(rechargeInfo.getSaveAmt())
.setVipDaily(playerInfoManager.getHadTakeDailyBoxVip())
.setMissingRefreshCount(user.getUserMissionManager().getMissingRoomMissionType().getCoinRefreshCount())
.build();
try {
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true);

View File

@ -23,6 +23,8 @@ import manager.STableManager;
import util.TimeUtils;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class UserMissionManager extends MongoBase {
@ -158,17 +160,30 @@ public class UserMissionManager extends MongoBase {
updateString("bloodyMissionIdsType",bloodyMissionIdsType);
break;
case MISSING_ROOM_REFRESH:
Map<Integer,Integer> mustAppear = new HashMap<>();
if((int)parm[0]==1){
//删除已经领取奖励的
missingRoomMissionType.getFinishMissionIds().removeIf(value->missingRoomMissionType.getAllMissingTime().get(value)==-1);
missingRoomMissionType.getAllMissingTime().values().removeIf(value->value==-1);
boolean result;
SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSettingMap.get(1);
result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1);
if(!result){
result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1);
if(!result){
int coinRefreshCount = missingRoomMissionType.getCoinRefreshCount();
int[][] refreshHighTypeNum = SMazeTreasureSetting.sMazeTreasureSettingMap.get(1).getRefreshHighTypeNum();
for(int[] refresh:refreshHighTypeNum){
if(coinRefreshCount==0||coinRefreshCount%refresh[0]!=0){
continue;
}else{
mustAppear.put(refresh[1],mustAppear.get(refresh[1])==null?1:(mustAppear.get(refresh[1])+1));
}
}
int[][] cost = sMazeTreasureSetting.getCost();
int count = (int)MathUtils.calABX(missingRoomMissionType.getCoinRefreshCount(), cost[1]);
int count = (int)MathUtils.calABX(coinRefreshCount, cost[1]);
result = ItemUtil.itemCost(user, new int[][]{new int[]{cost[0][0], count}}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1);
missingRoomMissionType.setCoinRefreshCount(coinRefreshCount +1);
}
}
if(!result){
@ -176,17 +191,39 @@ public class UserMissionManager extends MongoBase {
}
missingRoomMissionType.getDoingMissionIds().clear();
}
int[][] missingRoomMission = new int[SMazeTreasure.sMazeTreasureMap.size()][];
List<Integer> mustMissions = new ArrayList<>();
if(!mustAppear.isEmpty()){
for(Map.Entry<Integer,Integer> entry:mustAppear.entrySet()){
List<SMazeTreasure> sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey());
List<int[]> mustList = new ArrayList<>();
for(SMazeTreasure maze :sMazeTreasures){
if(mustMissions.contains(maze.getId())){
continue;
}
int[] refreshWeight = new int[2];
refreshWeight[0] = maze.getId();
refreshWeight[1] = maze.getTaskRefreshProbability();
mustList.add(refreshWeight);
}
int[][] mustArray = mustList.toArray(new int[mustList.size()][]);
int[] missions = MathUtils.randomFromWeightWithTaking(mustArray, entry.getValue());
Arrays.stream(missions).forEach(mission->mustMissions.add(mission));
}
}
List<int[]> missingRoomMission = new ArrayList<>();
for(Map.Entry<Integer,SMazeTreasure> entry:SMazeTreasure.sMazeTreasureMap.entrySet()){
int[] refreshWeight = new int[2];
refreshWeight[0] = entry.getKey();
refreshWeight[1] = entry.getValue().getTaskRefreshProbability();
missingRoomMission[entry.getKey()-1] =refreshWeight;
missingRoomMission.add(refreshWeight);
}
int[] missions = MathUtils.randomFromWeightWithTaking(missingRoomMission, 6);
int[] missions = MathUtils.randomFromWeightWithTaking(missingRoomMission.toArray(new int[missingRoomMission.size()][]), 6-mustMissions.size());
for(int mission:missions){
missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission);
}
for(int mission:mustMissions){
missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission);
}
updateString("missingRoomMissionType",missingRoomMissionType);
break;
}

View File

@ -298,9 +298,13 @@ public class MissionLoigc {
for(Integer missionId:missingRoomMissionType.getFinishMissionIds()){
CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder();
int missingTime = missingRoomMissionType.getMissingTime(missionId);
List<String> heroesInfo = missingRoomMissionType.getHerosInfo(missionId);
info.setMissionId(missionId).setState(missingTime>0?0:missingTime==0?1:2)
.setType(GameMisionType.MISSINGROOMMISSION.getType())
.setProgress(missingTime).addAllHeroId(missingRoomMissionType.getHerosInfo(missionId));
.setProgress(missingTime);
if(heroesInfo!=null&&!heroesInfo.isEmpty()){
info.addAllHeroId(heroesInfo);
}
missionList.add(info.build());
}
}

View File

@ -21,8 +21,11 @@ import java.util.*;
*/
public class MissingRoomMissionType extends AbstractMissionType{
private Map<Integer,Integer> missingTime = new HashMap<>();
private Map<Integer,List<String>> heroesInfo = new HashMap<>();
private int missionIndex;
private int coinRefreshCount;
@Override
@ -36,7 +39,7 @@ public class MissingRoomMissionType extends AbstractMissionType{
@Override
public int[][] reward(int missionId) {
heroesInfo.remove(missionId);
int realId = missionId % 10000;
return SMazeTreasure.sMazeTreasureMap.get(realId).getReward();
}
@ -126,6 +129,9 @@ public class MissingRoomMissionType extends AbstractMissionType{
heroesInfo.put(missionId,heroes);
}
public Map<Integer,Integer> getAllMissingTime(){
return missingTime;
}
public int getMissingTime(int missionId) {
return missingTime.get(missionId);
}

View File

@ -3,6 +3,9 @@ package config;
import manager.STableManager;
import manager.Table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -28,10 +31,16 @@ public class SMazeTreasure implements BaseConfig {
private int needCard;
public static Map<Integer,SMazeTreasure> sMazeTreasureMap;
public static Map<Integer, List<SMazeTreasure>> mazeMapByTaskType;
@Override
public void init() throws Exception {
sMazeTreasureMap = STableManager.getConfig(SMazeTreasure.class);
mazeMapByTaskType = new HashMap<>();
for (Map.Entry<Integer,SMazeTreasure> entry:sMazeTreasureMap.entrySet()){
mazeMapByTaskType.computeIfAbsent(entry.getValue().getTaskType(),v->new ArrayList<>()).add(entry.getValue());
}
}