迷宫寻宝提交

back_recharge
lvxinran 2019-12-13 13:44:11 +08:00
parent cc0f4c51c1
commit 2a62f39194
12 changed files with 421 additions and 7 deletions

View File

@ -188,6 +188,10 @@ public interface BIReason {
int CHAMPIION_BET_CONSUME = 1046; //巅峰赛竞猜消耗
int MISSING_ROOM_REFRESH_CONSUME = 1047;//迷宫寻宝刷新消耗
int MISSING_ROOM_SEND_CONSUME = 1048;//迷宫寻宝派遣消耗

View File

@ -0,0 +1,41 @@
package com.ljsd.jieling.handler.missingRoom;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.mission.MissionLoigc;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.MessageUtil;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @author lvxinran
* @date 2019/12/12
* @discribe
*/
@Component
public class MissingRoomRefreshHandler extends BaseHandler {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.MISSING_ROOM_MISSION_REFRESH_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
User user = UserManager.getUser(iSession.getUid());
user.getUserMissionManager().onGameEvent(user, GameEvent.MISSING_ROOM_REFRESH,1);
List<CommonProto.UserMissionInfo> userMissionInfos = new ArrayList<>();
MissionLoigc.getMissingRoomMission(user,userMissionInfos);
PlayerInfoProto.MissingRoomRefreshResponse response = PlayerInfoProto.MissingRoomRefreshResponse.newBuilder().addAllInfos(userMissionInfos).build();
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.MISSING_ROOM_MISSION_REFRESH_RESPONSE_VALUE,response,true);
}
}

View File

@ -0,0 +1,26 @@
package com.ljsd.jieling.handler.missingRoom;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.mission.MissionLoigc;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import org.springframework.stereotype.Component;
/**
* @author lvxinran
* @date 2019/12/12
* @discribe
*/
@Component
public class MissingRoomSendHandler extends BaseHandler<PlayerInfoProto.MissingRoomSendHeroRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.MISSING_ROOM_HERO_SEND_REQUEST;
}
@Override
public void processWithProto(ISession iSession, PlayerInfoProto.MissingRoomSendHeroRequest proto) throws Exception {
MissionLoigc.missingRoomSendHero(iSession,proto.getHeroIdsList(),proto.getMissionId(), MessageTypeProto.MessageType.MISSING_ROOM_HERO_SEND_RESPONSE);
}
}

View File

@ -97,6 +97,7 @@ public class UserManager {
user.getUserMissionManager().onGameEvent(user, GameEvent.USER_LEVELUP,0,1);
user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH,0);
user.getUserMissionManager().onGameEvent(user, GameEvent.BLOODY_REFRESH,0);
user.getUserMissionManager().onGameEvent(user, GameEvent.MISSING_ROOM_REFRESH,0);
user.getUserMissionManager().onGameEvent(user, GameEvent.BEGINNER);
Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.LOGIN_TIMES.getType(),1));
ItemUtil.drop(user,gameSetting.getBornItem(), BIReason.USER_BORN_REWARD);

View File

@ -2,6 +2,8 @@ package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.config.clazzStaticCfg.TaskStaticConfig;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.OnlineUserManager;
@ -20,10 +22,7 @@ import config.*;
import manager.STableManager;
import util.TimeUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
public class UserMissionManager extends MongoBase {
@ -34,6 +33,7 @@ public class UserMissionManager extends MongoBase {
private TreasureMissionType treasureMissionIdsType=new TreasureMissionType();
private ServenMissionIdsType sevenHappyMissionType =new ServenMissionIdsType();
private BloodyMissionIdsType bloodyMissionIdsType =new BloodyMissionIdsType();
private MissingRoomMissionType missingRoomMissionType = new MissingRoomMissionType();
//数据累加项
private CumulationData cumulationData = new CumulationData();
private CumulationData dailyCumulationData = new CumulationData();
@ -44,7 +44,7 @@ public class UserMissionManager extends MongoBase {
private CumulationData treasureMonthCumulationData = new CumulationData();
private CumulationData sevenHappyCumulationData = new CumulationData();
public void openMission(User user,GameEvent event,Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap, Object... parm){
public void openMission(User user,GameEvent event,Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap, Object... parm) throws Exception {
ISession session= OnlineUserManager.getSessionByUid(user.getId());
switch (event){
case VIP_LEVLUP:{
@ -157,6 +157,38 @@ public class UserMissionManager extends MongoBase {
bloodyMissionIdsType.getDoingMissionIds().addAll(bloodyMissionIds);
updateString("bloodyMissionIdsType",bloodyMissionIdsType);
break;
case MISSING_ROOM_REFRESH:
if((int)parm[0]==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[][] cost = sMazeTreasureSetting.getCost();
int count = (int)MathUtils.calABX(missingRoomMissionType.getCoinRefreshCount(), cost[1]);
result = ItemUtil.itemCost(user, new int[][]{new int[]{cost[0][0], count}}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1);
}
}
if(!result){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
missingRoomMissionType.getDoingMissionIds().clear();
}
int[][] missingRoomMission = new int[SMazeTreasure.sMazeTreasureMap.size()][];
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;
}
int[] missions = MathUtils.randomFromWeightWithTaking(missingRoomMission, 6);
for(int mission:missions){
missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission);
}
updateString("missingRoomMissionType",missingRoomMissionType);
break;
}
}
@ -203,6 +235,12 @@ public class UserMissionManager extends MongoBase {
updateString("bloodyMissionIdsType",bloodyMissionIdsType);
}
break;
case MISSING_ROOM_MISSION_REWARD:{
missingRoomMissionType.rewardMission((int)parm[0],missionTypeEnumListMap.get(GameMisionType.MISSINGROOMMISSION));
}
break;
default:
break;
}
}
@ -413,4 +451,8 @@ public class UserMissionManager extends MongoBase {
public CumulationData getTreasureMonthCumulationData() {
return treasureMonthCumulationData;
}
public MissingRoomMissionType getMissingRoomMissionType() {
return missingRoomMissionType;
}
}

View File

@ -8,6 +8,7 @@ public enum GameEvent {
TREASH_WEEK_REFRESH,//孙龙的宝藏周任务
TREASH_MONTH_REFRESH,//孙龙的宝藏月任务
SERVENHAPPY_REFRESH,//七日狂欢
MISSING_ROOM_REFRESH,//迷宫寻宝刷新
BEGINNER,//新手
RANDOM_HERO,// 抽卡
@ -31,6 +32,7 @@ public enum GameEvent {
BLOODY_MISSION_REWARD, //血战任务领取
TREASURE_MISSION_REWARD,// 领取孙龙的宝藏
SEVENHAPPY_MISSION_REWARD,// 领取孙龙的宝藏
MISSING_ROOM_MISSION_REWARD,//迷宫寻宝领奖
WORKSHOP_CREATE_EQUIP,//打造装备
ADVENTURE_TAKEREWARD, //收取秘境奖励

View File

@ -8,6 +8,7 @@ public enum GameMisionType {
SEVENMISSION(5),
BEGINNERMISSION(6),
BLOODYMISSION(7),
MISSINGROOMMISSION(8),
;
private int type;

View File

@ -43,6 +43,7 @@ public class MissionLoigc {
getTreasureMission(user,missionList,ActivityType.SERVERHAPPY);
getBeginnerMisssion(user,missionList);
getBloodyMisison(user,missionList);
getMissingRoomMission(user,missionList);
PlayerInfoProto.GetMissionResponse build = PlayerInfoProto.GetMissionResponse.newBuilder().addAllUserMissionInfo(missionList).build();
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_MISSION_RESPONSE_VALUE,build,true);
}
@ -285,6 +286,24 @@ public class MissionLoigc {
missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(missionId).setState(state).setType(vipmissionType).setProgress(progrss).build());
}
}
public static void getMissingRoomMission(User user ,List<CommonProto.UserMissionInfo> missionList){
UserMissionManager userMissionManager = user.getUserMissionManager();
MissingRoomMissionType missingRoomMissionType = userMissionManager.getMissingRoomMissionType();
for(Integer missionId:missingRoomMissionType.getDoingMissionIds()){
CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder();
info.setMissionId(missionId).setState(0)
.setType(GameMisionType.MISSINGROOMMISSION.getType());
missionList.add(info.build());
}
for(Integer missionId:missingRoomMissionType.getFinishMissionIds()){
CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder();
int missingTime = missingRoomMissionType.getMissingTime(missionId);
info.setMissionId(missionId).setState(missingTime>0?1:2)
.setType(GameMisionType.MISSINGROOMMISSION.getType())
.setProgress(missingTime).addAllHeroId(missingRoomMissionType.getHerosInfo());
missionList.add(info.build());
}
}
public static void takeMissionReward(ISession session,int type,int missionId) throws Exception {
int uid = session.getUid();
@ -366,6 +385,9 @@ public class MissionLoigc {
Map<GameMisionType, List<MissionStateChangeInfo>> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.SEVENHAPPY_MISSION_REWARD, missionId);
missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.SEVENMISSION);
}
if(type==GameMisionType.MISSINGROOMMISSION.getType()){
}
if(missionStateChangeInfos!=null && !missionStateChangeInfos.isEmpty()){
CommonProto.Drop.Builder drop = ItemUtil.drop(user, missionStateChangeInfos.get(0).getRewwardGroups(), BIReason.TAKE_MISSION_REWARD);
@ -665,7 +687,12 @@ public class MissionLoigc {
}
return count;
}
public static void missingRoomSendHero(ISession session, List<String> hero,int missionId, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
MissingRoomMissionType missingRoomMissionType = user.getUserMissionManager().getMissingRoomMissionType();
missingRoomMissionType.heroSend(user,hero,missionId);
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
}

View File

@ -37,6 +37,7 @@ public class MissionEventDistributor {
eventProcessor.put(GameEvent.TREASH_MONTH_REFRESH,new TreasureRefreshEventProcess());
eventProcessor.put(GameEvent.SERVENHAPPY_REFRESH,new TreasureRefreshEventProcess());
eventProcessor.put(GameEvent.BEGINNER,new BeginneRefreshEventProcessor());
eventProcessor.put(GameEvent.MISSING_ROOM_REFRESH,new DailyRefreshEventProcess());
List<MissionType> typeList = new ArrayList<>();
typeList.add(MissionType.RECRUITMENT_RANDOM_HEROES);
@ -306,6 +307,8 @@ public class MissionEventDistributor {
missionTypeEnumListMap.put(GameMisionType.SEVENMISSION, new ArrayList<>());
missionTypeEnumListMap.put(GameMisionType.BEGINNERMISSION, new ArrayList<>());
missionTypeEnumListMap.put(GameMisionType.BLOODYMISSION, new ArrayList<>());
missionTypeEnumListMap.put(GameMisionType.MISSINGROOMMISSION, new ArrayList<>());
} else {
missionTypeEnumListMap.get(GameMisionType.VIPMISSION).clear();
missionTypeEnumListMap.get(GameMisionType.DAILYMISSION).clear();
@ -314,6 +317,8 @@ public class MissionEventDistributor {
missionTypeEnumListMap.get(GameMisionType.SEVENMISSION).clear();
missionTypeEnumListMap.get(GameMisionType.BEGINNERMISSION).clear();
missionTypeEnumListMap.get(GameMisionType.BLOODYMISSION).clear();
missionTypeEnumListMap.get(GameMisionType.MISSINGROOMMISSION).clear();
}
threadMissionChangeList.set(missionTypeEnumListMap);
}
@ -334,7 +339,6 @@ public class MissionEventDistributor {
if(builder.getUserMissionInfoCount()>0){
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.MISSION_UPDATE_INDICATION_VALUE,builder.build(),true);
}
}
}

View File

@ -0,0 +1,123 @@
package com.ljsd.jieling.logic.mission.main;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.logic.dao.CumulationData;
import com.ljsd.jieling.logic.dao.Hero;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mission.MissionState;
import com.ljsd.jieling.util.ItemUtil;
import config.SCHero;
import config.SMazeTreasure;
import util.TimeUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author lvxinran
* @date 2019/12/14
* @discribe
*/
public class MissingRoomMissionType extends AbstractMissionType{
private Map<Integer,Integer> missingTime = new HashMap<>();
private List<String> herosInfo = new ArrayList<>();
private int missionIndex;
private int coinRefreshCount;
@Override
public void openMission(User user, int missionId, List<MissionStateChangeInfo> missionTypeEnumList) {
}
@Override
public int[][] reward(int missionId) {
return new int[0][];
}
@Override
public void rewardMission(int missionId, List<MissionStateChangeInfo> missionTypeEnumListMap) {
MissionStateChangeInfo stateChangeInfo = new MissionStateChangeInfo(missionId, MissionState.REWARD, reward(missionId));
missionTypeEnumListMap.add(stateChangeInfo);
}
@Override
public void calCumulationDataResult(User user, CumulationData.Result result, List<MissionStateChangeInfo> missionStateChangeInfos, CumulationData cumulationData) {
}
public void heroSend(User user ,List<String> heroes,int missionId) throws Exception {
if(!getDoingMissionIds().contains(missionId)){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
for(String hero:heroes){
if(herosInfo.contains(hero)){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
}
int realId = missionId%10000;
SMazeTreasure sMazeTreasure = SMazeTreasure.sMazeTreasureMap.get(realId);
if(heroes.size()>sMazeTreasure.getNeedCard()){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
int[][] condition = sMazeTreasure.getCondition();
int star = 0;
int type = 0;
for(int[] cond:condition) {
if(cond[0]==1){
star = cond[1];
}else if(cond[0]==2){
type = type | (1<<cond[1]-1);
}
}
for(String heroId:heroes){
Hero hero = user.getHeroManager().getHero(heroId);
if(star!=0&&hero.getStar()>=star){
star = 0;
}
int propertyName = SCHero.getsCHero().get(hero.getTemplateId()).getPropertyName();
int propValue = 1<<(propertyName-1);
type = (type |propValue) ^ propValue;
}
if(star!=0||type!=0){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
boolean itemCost = ItemUtil.itemCost(user, new int[][]{sMazeTreasure.getTakeItem()}, BIReason.MISSING_ROOM_SEND_CONSUME, 1);
if(!itemCost){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
getDoingMissionIds().remove(missionId);
getFinishMissionIds().add(missionId);
missingTime.put(missionId, (int)(TimeUtils.now()/1000)+sMazeTreasure.getWasteTime());
herosInfo.addAll(heroes);
}
public int getMissingTime(int missionId) {
return missingTime.get(missionId);
}
public List<String> getHerosInfo() {
return herosInfo;
}
public int getMissionIndex() {
missionIndex++;
return missionIndex;
}
public int getCoinRefreshCount() {
return coinRefreshCount;
}
public void setCoinRefreshCount(int coinRefreshCount) {
this.coinRefreshCount = coinRefreshCount;
}
}

View File

@ -0,0 +1,75 @@
package config;
import manager.STableManager;
import manager.Table;
import java.util.Map;
@Table(name ="MazeTreasure")
public class SMazeTreasure implements BaseConfig {
private int id;
private int taskType;
private int taskRefreshProbability;
private int[] takeItem;
private int wasteTime;
private int[] speedUpTake;
private int[][] reward;
private int[][] condition;
private int needCard;
public static Map<Integer,SMazeTreasure> sMazeTreasureMap;
@Override
public void init() throws Exception {
sMazeTreasureMap = STableManager.getConfig(SMazeTreasure.class);
}
public int getId() {
return id;
}
public int getTaskType() {
return taskType;
}
public int getTaskRefreshProbability() {
return taskRefreshProbability;
}
public int[] getTakeItem() {
return takeItem;
}
public int getWasteTime() {
return wasteTime;
}
public int[] getSpeedUpTake() {
return speedUpTake;
}
public int[][] getReward() {
return reward;
}
public int[][] getCondition() {
return condition;
}
public int getNeedCard() {
return needCard;
}
}

View File

@ -0,0 +1,68 @@
package config;
import manager.STableManager;
import manager.Table;
import java.util.Map;
@Table(name ="MazeTreasureSetting")
public class SMazeTreasureSetting implements BaseConfig {
private int refreshType;
private int needItem;
private int refreshNum;
private int[] takeOrder;
private int[] refreshItem;
private int[][] cost;
private int[][] refreshHighTypeNum;
private int[][] dailyPrivilege;
public static Map<Integer,SMazeTreasureSetting> sMazeTreasureSettingMap;
@Override
public void init() throws Exception {
sMazeTreasureSettingMap = STableManager.getConfig(SMazeTreasureSetting.class);
}
public int getRefreshType() {
return refreshType;
}
public int getNeedItem() {
return needItem;
}
public int getRefreshNum() {
return refreshNum;
}
public int[] getRefreshItem() {
return refreshItem;
}
public int[][] getCost() {
return cost;
}
public int[][] getRefreshHighTypeNum() {
return refreshHighTypeNum;
}
public int[][] getDailyPrivilege() {
return dailyPrivilege;
}
public int[] getTakeOrder() {
return takeOrder;
}
}