刷新必出

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()) .addAllPlayedMapTypes(mapManager.getPlayedMapType())
.setAmount(rechargeInfo.getSaveAmt()) .setAmount(rechargeInfo.getSaveAmt())
.setVipDaily(playerInfoManager.getHadTakeDailyBoxVip()) .setVipDaily(playerInfoManager.getHadTakeDailyBoxVip())
.setMissingRefreshCount(user.getUserMissionManager().getMissingRoomMissionType().getCoinRefreshCount())
.build(); .build();
try { try {
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true); 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 util.TimeUtils;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class UserMissionManager extends MongoBase { public class UserMissionManager extends MongoBase {
@ -158,17 +160,30 @@ public class UserMissionManager extends MongoBase {
updateString("bloodyMissionIdsType",bloodyMissionIdsType); updateString("bloodyMissionIdsType",bloodyMissionIdsType);
break; break;
case MISSING_ROOM_REFRESH: case MISSING_ROOM_REFRESH:
Map<Integer,Integer> mustAppear = new HashMap<>();
if((int)parm[0]==1){ if((int)parm[0]==1){
//删除已经领取奖励的
missingRoomMissionType.getFinishMissionIds().removeIf(value->missingRoomMissionType.getAllMissingTime().get(value)==-1);
missingRoomMissionType.getAllMissingTime().values().removeIf(value->value==-1);
boolean result; boolean result;
SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSettingMap.get(1); SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSettingMap.get(1);
result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1);
if(!result){ if(!result){
result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1);
if(!result){ 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[][] 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); result = ItemUtil.itemCost(user, new int[][]{new int[]{cost[0][0], count}}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1);
missingRoomMissionType.setCoinRefreshCount(coinRefreshCount +1);
} }
} }
if(!result){ if(!result){
@ -176,17 +191,39 @@ public class UserMissionManager extends MongoBase {
} }
missingRoomMissionType.getDoingMissionIds().clear(); 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()){ for(Map.Entry<Integer,SMazeTreasure> entry:SMazeTreasure.sMazeTreasureMap.entrySet()){
int[] refreshWeight = new int[2]; int[] refreshWeight = new int[2];
refreshWeight[0] = entry.getKey(); refreshWeight[0] = entry.getKey();
refreshWeight[1] = entry.getValue().getTaskRefreshProbability(); 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){ for(int mission:missions){
missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission); missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission);
} }
for(int mission:mustMissions){
missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission);
}
updateString("missingRoomMissionType",missingRoomMissionType); updateString("missingRoomMissionType",missingRoomMissionType);
break; break;
} }

View File

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

View File

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

View File

@ -3,6 +3,9 @@ package config;
import manager.STableManager; import manager.STableManager;
import manager.Table; import manager.Table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@ -28,10 +31,16 @@ public class SMazeTreasure implements BaseConfig {
private int needCard; private int needCard;
public static Map<Integer,SMazeTreasure> sMazeTreasureMap; public static Map<Integer,SMazeTreasure> sMazeTreasureMap;
public static Map<Integer, List<SMazeTreasure>> mazeMapByTaskType;
@Override @Override
public void init() throws Exception { public void init() throws Exception {
sMazeTreasureMap = STableManager.getConfig(SMazeTreasure.class); 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());
}
} }