戒灵秘宝

back_recharge
lvxinran 2019-10-10 10:04:02 +08:00
parent a8f94462d7
commit ea8ab53cb8
13 changed files with 224 additions and 58 deletions

View File

@ -27,7 +27,9 @@ public class SSpecialConfig implements BaseConfig {
public static final String FRIENDAMOUNT_LIMIT = "FriendAmount_limit";//好友上限 public static final String FRIENDAMOUNT_LIMIT = "FriendAmount_limit";//好友上限
public static final String FRIENDAPPLYAMOUNT_LIMIT = "FriendApplyAmount_limit";//好友申请上限 public static final String FRIENDAPPLYAMOUNT_LIMIT = "FriendApplyAmount_limit";//好友申请上限
public static final String SUNLONG_DAILYTASKS = "Sunlong_DailyTasks";//孙龙的宝藏每日、每周、每月任务个数 public static final String SUNLONG_DAILYTASKS = "Sunlong_DailyTasks";//孙龙的宝藏每日、每周、每月任务个数
public static final String SUNLONG_COST = "Sunlong_Cost";//孙龙的宝藏购买等级
public static final String SUNLONG_INTEGRAL ="Sunlong_Integral";//孙龙的宝藏每日积分礼包
public static final String SUNLONG_REWARD = "Sunlong_Reward";//孙龙的宝藏礼包
@Override @Override
public void init() throws Exception { public void init() throws Exception {
@ -55,13 +57,27 @@ public class SSpecialConfig implements BaseConfig {
} }
public static int[] getOnceArrayValue(String key){ public static int[] getOnceArrayValue(String key){
String value = enumers.get(key); String value = enumers.get(key);
String[] array = value.split("#"); String[] array = value.split("\\#");
int[] arrayNum = new int[array.length]; int[] arrayNum = new int[array.length];
for (int i = 0 ; i < array.length;i++) { for (int i = 0 ; i < array.length;i++) {
arrayNum[i] = Integer.parseInt(array[i]); arrayNum[i] = Integer.parseInt(array[i]);
} }
return arrayNum; return arrayNum;
} }
public static int[][] getTwiceArrayValue(String key){
String value = enumers.get(key);
String[] array = value.split("\\|");
int[][] arrayNum = new int[array.length][];
for (int i = 0 ; i < array.length;i++) {
String[] temp = array[i].split("\\#");
int[] tempNum = new int[temp.length];
for (int j = 0 ; j < tempNum.length;j++) {
tempNum[j] = Integer.parseInt(temp[j]);
}
arrayNum[i] = tempNum;
}
return arrayNum;
}
public int getId() { public int getId() {
@ -76,5 +92,4 @@ public class SSpecialConfig implements BaseConfig {
return value; return value;
} }
} }

View File

@ -28,16 +28,23 @@ public class STreasureSunlongTaskConfig implements BaseConfig {
public static Map<Integer,STreasureSunlongTaskConfig> treasureTaskConfig; public static Map<Integer,STreasureSunlongTaskConfig> treasureTaskConfig;
public static Map<Integer, List<Integer>> taskTypeMap; public static Map<Integer, List<Integer>> taskTypeMap;
public static Map<Integer,List<STreasureSunlongTaskConfig>> sTreasureTaskConfigListByTypeMapTmp;
@Override @Override
public void init() throws Exception { public void init() throws Exception {
treasureTaskConfig = STableManager.getConfig(STreasureSunlongTaskConfig.class); treasureTaskConfig = STableManager.getConfig(STreasureSunlongTaskConfig.class);
taskTypeMap = new HashMap<>(); taskTypeMap = new HashMap<>();
sTreasureTaskConfigListByTypeMapTmp = new HashMap<>();
for(Map.Entry<Integer,STreasureSunlongTaskConfig> entry:treasureTaskConfig.entrySet()){ for(Map.Entry<Integer,STreasureSunlongTaskConfig> entry:treasureTaskConfig.entrySet()){
entry.getValue(); STreasureSunlongTaskConfig entryValue = entry.getValue();
if(!taskTypeMap.containsKey(entry.getValue().getType())){ if(!taskTypeMap.containsKey(entryValue.getType())){
taskTypeMap.put(entry.getValue().getType(),new ArrayList<>()); taskTypeMap.put(entryValue.getType(),new ArrayList<>());
} }
taskTypeMap.get(entry.getValue().getType()).add(entry.getKey()); if(!sTreasureTaskConfigListByTypeMapTmp.containsKey(entryValue.getTaskType())){
sTreasureTaskConfigListByTypeMapTmp.put(entryValue.getTaskType(),new ArrayList<>());
}
sTreasureTaskConfigListByTypeMapTmp.get(entryValue.getTaskType()).add(entryValue);
taskTypeMap.get(entryValue.getType()).add(entry.getKey());
} }
} }

View File

@ -45,11 +45,8 @@ public class STreasureTaskConfig implements BaseConfig {
if(!treasureTaskConfigByActivityMap.containsKey(activityId)){ if(!treasureTaskConfigByActivityMap.containsKey(activityId)){
treasureTaskConfigByActivityMap.put(activityId,new ArrayList<>()); treasureTaskConfigByActivityMap.put(activityId,new ArrayList<>());
} }
if(!sTreasureTaskConfigListByTypeMapTmp.containsKey(sTreasureTaskConfig.getTaskType())){
sTreasureTaskConfigListByTypeMapTmp.put(sTreasureTaskConfig.getTaskType(),new ArrayList<>());
}
treasureTaskConfigByActivityMap.get(activityId).add(sTreasureTaskConfig); treasureTaskConfigByActivityMap.get(activityId).add(sTreasureTaskConfig);
sTreasureTaskConfigListByTypeMapTmp.get(sTreasureTaskConfig.getTaskType()).add(sTreasureTaskConfig);
if(sTreasureTaskConfig.getTaskType() == MissionType.SENVER_HAPPY.getMissionTypeValue()){ if(sTreasureTaskConfig.getTaskType() == MissionType.SENVER_HAPPY.getMissionTypeValue()){
sTreasureSevenTaskConfigByActivityMapTmp.put(sTreasureTaskConfig.getActivityId(),sTreasureTaskConfig); sTreasureSevenTaskConfigByActivityMapTmp.put(sTreasureTaskConfig.getActivityId(),sTreasureTaskConfig);
} }

View File

@ -154,4 +154,6 @@ public interface BIReason {
int TREASURE_LEVEL_UP_CONCUME = 1038;//孙龙宝藏等级提升消耗 int TREASURE_LEVEL_UP_CONCUME = 1038;//孙龙宝藏等级提升消耗
int TREASURE_BUY_LEVEL_CONSUME = 1039;//孙龙宝藏等级快速购买
} }

View File

@ -330,7 +330,7 @@ public class GMRequestHandler extends BaseHandler{
} }
public void treasureScore(ISession session,int score) throws Exception { public void treasureScore(ISession session,int score) throws Exception {
User user = UserManager.getUser(session.getUid()); User user = UserManager.getUser(session.getUid());
// user.getPlayerInfoManager().setTreasureScore(score); user.getPlayerInfoManager().setTreasureLevel(score);
} }
} }

View File

@ -1,13 +1,26 @@
package com.ljsd.jieling.handler; package com.ljsd.jieling.handler;
import com.ljsd.jieling.config.SErrorCodeEerverConfig;
import com.ljsd.jieling.config.SGlobalActivity;
import com.ljsd.jieling.config.SSpecialConfig;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.dao.ActivityManager;
import com.ljsd.jieling.logic.dao.ActivityMission;
import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.util.TimeUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Map;
@Component @Component
public class ServerZeroHandler extends BaseHandler { public class ServerZeroHandler extends BaseHandler {
@Override @Override
@ -17,6 +30,18 @@ public class ServerZeroHandler extends BaseHandler {
@Override @Override
public void process(ISession iSession, PacketNetData netData) throws Exception { public void process(ISession iSession, PacketNetData netData) throws Exception {
PlayerLogic.getInstance().sendDayilyMail(UserManager.getUser(iSession.getUid()),-1); User user = UserManager.getUser(iSession.getUid());
PlayerLogic.getInstance().sendDayilyMail(user,-1);
//发送每日孙龙邮件
if(user.getPlayerInfoManager().getHadBuyTreasure()!=0){
Map<Integer, ActivityMission> activityMissionMap = user.getActivityManager().getActivityMissionMap();
for(Map.Entry<Integer, ActivityMission> entry:activityMissionMap.entrySet()){
if(SGlobalActivity.getsGlobalActivityMap().get(entry).getType()== ActivityType.TREASURE){
MailLogic.getInstance().sendMail(iSession.getUid(), SErrorCodeEerverConfig.getI18NMessage("secret_daily_title"),SErrorCodeEerverConfig.getI18NMessage("secret_daily_txt"), SSpecialConfig.getStringValue(SSpecialConfig.SUNLONG_INTEGRAL),(int)(TimeUtils.now()/1000), Global.MAIL_EFFECTIVE_TIME);
break;
}
}
}
} }
} }

View File

@ -0,0 +1,23 @@
package com.ljsd.jieling.handler.activity;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import org.springframework.stereotype.Component;
@Component
public class TreasureQuickBuyLevel extends BaseHandler<PlayerInfoProto.QuickBuyTreasureLevelRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.BUY_TREASURE_LEVEL_REQUEST;
}
@Override
public void processWithProto(ISession iSession, PlayerInfoProto.QuickBuyTreasureLevelRequest proto) throws Exception {
int level = proto.getLevel();
ActivityLogic.getInstance().treasureBuyLevel(iSession,level,MessageTypeProto.MessageType.BUY_TREASURE_LEVEL_RESPONSE);
}
}

View File

@ -1068,4 +1068,35 @@ public class ActivityLogic {
// } // }
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
} }
/**
*
* @param session
* @param messageType
* @throws Exception
*/
public void treasureBuyLevel(ISession session,int level,MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
int treasureLevel = user.getPlayerInfoManager().getTreasureLevel();
if(level<=treasureLevel){
MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"等级错误");
return;
}
int num = 0;
int[][] cost= SSpecialConfig.getTwiceArrayValue(SSpecialConfig.SUNLONG_COST);
for(int i = level;i>treasureLevel;i--){
num+=MathUtils.calABX(i,cost[1]);
}
int[][] costItems = new int[1][];
int[] costTemp = {cost[0][0],num};
costItems[0]=costTemp;
boolean result = ItemUtil.itemCost(user,costItems,BIReason.TREASURE_BUY_LEVEL_CONSUME,1);
if(result) {
user.getPlayerInfoManager().setTreasureLevel(level);
}else{
MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"消耗道具不足");
return;
}
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
}
} }

View File

@ -19,10 +19,7 @@ import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.MessageUtil;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TreasureActivity extends AbstractActivity { public class TreasureActivity extends AbstractActivity {
@ -32,6 +29,7 @@ public class TreasureActivity extends AbstractActivity {
@Override @Override
public void initActivity(User user) throws Exception { public void initActivity(User user) throws Exception {
user.getPlayerInfoManager().setHadBuyTreasure(0);
LOGGER.info("戒灵秘宝初始化..."); LOGGER.info("戒灵秘宝初始化...");
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_MONTH_REFRESH, sGlobalActivity.getId()); user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_MONTH_REFRESH, sGlobalActivity.getId());
@ -69,16 +67,21 @@ public class TreasureActivity extends AbstractActivity {
changeState = ActivityType.FINISH_TAKED; changeState = ActivityType.FINISH_TAKED;
} }
List<int[][]> dropList = new ArrayList<>(2); List<int[][]> dropList = new ArrayList<>(2);
Set<Integer> missionIds = new HashSet<>();
if(missionId==-1){ if(missionId==-1){
for (Map.Entry<Integer, ActivityProgressInfo> entry : activityMission.getActivityProgressInfoMap().entrySet()) { for(int i = 1 ; i<=user.getPlayerInfoManager().getTreasureLevel();i++){
if(entry.getKey()<user.getPlayerInfoManager().getTreasureLevel()){ Map<Integer, ActivityProgressInfo> progressInfoMap = activityMission.getActivityProgressInfoMap();
int state =entry.getValue().getState(); int state =progressInfoMap.get(i).getState();
if(state==changeState||state==ActivityType.FINISH_TAKED) { if(state==changeState||state==ActivityType.FINISH_TAKED) {
continue; continue;
}
dropByState(dropList,state,changeState,missionId);
} }
missionIds.add(i);
dropByState(dropList,state,changeState,i);
ActivityProgressInfo progressInfo = new ActivityProgressInfo(0,changeState);
activityMission.updateProgressInfo(i, progressInfo);
} }
}else{ }else{
int state = activityMission.getActivityProgressInfoMap().get(missionId).getState(); int state = activityMission.getActivityProgressInfoMap().get(missionId).getState();
if(state==changeState||state==ActivityType.FINISH_TAKED){ if(state==changeState||state==ActivityType.FINISH_TAKED){
@ -86,7 +89,14 @@ public class TreasureActivity extends AbstractActivity {
return; return;
} }
dropByState(dropList,state,changeState,missionId); dropByState(dropList,state,changeState,missionId);
ActivityProgressInfo progressInfo = new ActivityProgressInfo(0,changeState);
activityMission.updateProgressInfo(missionId, progressInfo);
missionIds.add(missionId);
} }
// sendActivityProgress(session,activityMission,missionIds);
// if (missionId == -1) { // if (missionId == -1) {
// List<int[][]> dropList = new ArrayList<>(10); // List<int[][]> dropList = new ArrayList<>(10);
// boolean canTakeFinalReward = true; // boolean canTakeFinalReward = true;

View File

@ -2,11 +2,17 @@ package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.MongoBase; import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.config.*; import com.ljsd.jieling.config.*;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mission.*; import com.ljsd.jieling.logic.mission.*;
import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; import com.ljsd.jieling.logic.mission.event.MissionEventDistributor;
import com.ljsd.jieling.logic.mission.main.*; import com.ljsd.jieling.logic.mission.main.*;
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.MathUtils; import com.ljsd.jieling.util.MathUtils;
import com.ljsd.jieling.util.MessageUtil;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -33,6 +39,7 @@ public class UserMissionManager extends MongoBase {
private CumulationData sevenHappyCumulationData = 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){
ISession session= OnlineUserManager.getSessionByUid(user.getId());
switch (event){ switch (event){
case VIP_LEVLUP:{ case VIP_LEVLUP:{
int vipLevle= (int)parm[0]; int vipLevle= (int)parm[0];
@ -58,17 +65,33 @@ public class UserMissionManager extends MongoBase {
updateString("dailyMissionIdsType",dailyMissionIdsType); updateString("dailyMissionIdsType",dailyMissionIdsType);
break; break;
case TREASH_REFRESH: case TREASH_REFRESH:
resetTreasureTaskInfo(1,missionTypeEnumListMap,treasureCumulationData); int[] refreshIds =resetTreasureTaskInfo(1,missionTypeEnumListMap,treasureCumulationData);
CommonProto.RefreshTask.Builder task = treasureIndicationBuild(1, refreshIds);
PlayerInfoProto.TreasureRefreshIndication indication1 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task.build()).build();
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE,indication1,true);
break; break;
case TREASH_WEEK_REFRESH: case TREASH_WEEK_REFRESH:
resetTreasureTaskInfo(1,missionTypeEnumListMap,treasureCumulationData); int[] dailyRefreshIds = resetTreasureTaskInfo(1,missionTypeEnumListMap,treasureCumulationData);
resetTreasureTaskInfo(2,missionTypeEnumListMap,treasureWeekCumulationData); int[] weekRefreshIds = resetTreasureTaskInfo(2,missionTypeEnumListMap,treasureWeekCumulationData);
CommonProto.RefreshTask.Builder task1 = treasureIndicationBuild(1, dailyRefreshIds);
CommonProto.RefreshTask.Builder task2 = treasureIndicationBuild(2, weekRefreshIds);
PlayerInfoProto.TreasureRefreshIndication indication2 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task1.build()).addTasks(task2.build()).build();
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE,indication2,true);
break; break;
case TREASH_MONTH_REFRESH: case TREASH_MONTH_REFRESH:
System.out.println("戒灵秘宝月任务初始化"); System.out.println("戒灵秘宝月任务初始化");
resetTreasureTaskInfo(1,missionTypeEnumListMap,treasureCumulationData); int[] dailyRefreshIds1 = resetTreasureTaskInfo(1,missionTypeEnumListMap,treasureCumulationData);
resetTreasureTaskInfo(2,missionTypeEnumListMap,treasureWeekCumulationData); int[] weekRefreshIds1 = resetTreasureTaskInfo(2,missionTypeEnumListMap,treasureWeekCumulationData);
resetTreasureTaskInfo(3,missionTypeEnumListMap,treasureMonthCumulationData); int[] monthRefreshIds1 = resetTreasureTaskInfo(3,missionTypeEnumListMap,treasureMonthCumulationData);
CommonProto.RefreshTask.Builder task3 = treasureIndicationBuild(1, dailyRefreshIds1);
CommonProto.RefreshTask.Builder task4 = treasureIndicationBuild(2, weekRefreshIds1);
CommonProto.RefreshTask.Builder task5 = treasureIndicationBuild(3, monthRefreshIds1);
PlayerInfoProto.TreasureRefreshIndication indication3 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task3.build()).addTasks(task4.build()).addTasks(task5.build()).build();
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE,indication3,true);
// openMission(user,GameEvent.TREASH_WEEK_REFRESH,missionTypeEnumListMap,parm);
break; break;
case SERVENHAPPY_REFRESH: case SERVENHAPPY_REFRESH:
List<STreasureTaskConfig> sTreasureTaskConfigs = null; List<STreasureTaskConfig> sTreasureTaskConfigs = null;
@ -189,14 +212,29 @@ public class UserMissionManager extends MongoBase {
} }
} }
if(!treasureMissionIdsType.getDoingMissionIds().isEmpty() ){ if(!treasureMissionIdsType.getDoingMissionIds().isEmpty() ){
List<STreasureTaskConfig> sTreasureTaskConfigs = STreasureTaskConfig.sTreasureTaskConfigListByTypeMap.get(missionType.getMissionTypeValue()); List<STreasureSunlongTaskConfig> sTreasureTaskConfigs = STreasureSunlongTaskConfig.sTreasureTaskConfigListByTypeMapTmp.get(missionType.getMissionTypeValue());
if(sTreasureTaskConfigs!=null && user.getActivityManager().getTrsendTime()>System.currentTimeMillis()){ if(sTreasureTaskConfigs!=null && user.getActivityManager().getTrsendTime()>System.currentTimeMillis()){
CumulationData.Result result = treasureCumulationData.updateData(missionType, parm); CumulationData.Result result = treasureCumulationData.updateData(missionType, parm);
CumulationData.Result weekResult = treasureWeekCumulationData.updateData(missionType, parm);
CumulationData.Result monthResult = treasureMonthCumulationData.updateData(missionType, parm);
if(result!=null){ if(result!=null){
treasureMissionIdsType.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION),treasureCumulationData); treasureMissionIdsType.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION),treasureCumulationData);
updateString("treasureCumulationData",treasureCumulationData); updateString("treasureCumulationData",treasureCumulationData);
updateString("treasureMissionIdsType",treasureMissionIdsType); updateString("treasureMissionIdsType",treasureMissionIdsType);
} }
if(weekResult!=null){
treasureMissionIdsType.calCumulationDataResult(user,weekResult,missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION),treasureWeekCumulationData);
updateString("treasureWeekCumulationData",treasureWeekCumulationData);
updateString("treasureMissionIdsType",treasureMissionIdsType);
}
if(monthResult!=null){
treasureMissionIdsType.calCumulationDataResult(user,monthResult,missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION),treasureMonthCumulationData);
updateString("treasureMonthCumulationData",treasureMonthCumulationData);
updateString("treasureMissionIdsType",treasureMissionIdsType);
}
} }
} }
@ -221,7 +259,7 @@ public class UserMissionManager extends MongoBase {
} }
private void resetTreasureTaskInfo(int type,Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap,CumulationData treasureCumulationData){ private int[] resetTreasureTaskInfo(int type,Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap,CumulationData treasureCumulationData){
int[] typeMissionNum = SSpecialConfig.getOnceArrayValue(SSpecialConfig.SUNLONG_DAILYTASKS); int[] typeMissionNum = SSpecialConfig.getOnceArrayValue(SSpecialConfig.SUNLONG_DAILYTASKS);
List<Integer> taskTypeMap = STreasureSunlongTaskConfig.taskTypeMap.get(type); List<Integer> taskTypeMap = STreasureSunlongTaskConfig.taskTypeMap.get(type);
for(Integer treasure:taskTypeMap){ for(Integer treasure:taskTypeMap){
@ -242,7 +280,7 @@ public class UserMissionManager extends MongoBase {
temp[1] = STreasureSunlongTaskConfig.treasureTaskConfig.get(taskTypeMap.get(i)).getWeight(); temp[1] = STreasureSunlongTaskConfig.treasureTaskConfig.get(taskTypeMap.get(i)).getWeight();
randomTask[i] = temp; randomTask[i] = temp;
} }
int[] tasks= MathUtils.randomFromWeightWithTaking(randomTask, typeMissionNum[type-1]); int[] tasks= MathUtils.randomFromWeightWithTaking(randomTask,5);// typeMissionNum[type-1]
List<MissionStateChangeInfo> missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION); List<MissionStateChangeInfo> missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION);
for(Integer task:tasks){ for(Integer task:tasks){
treasureMissionIdsType.getDoingMissionIds().add(task); treasureMissionIdsType.getDoingMissionIds().add(task);
@ -251,7 +289,15 @@ public class UserMissionManager extends MongoBase {
treasureCumulationData.reset(); treasureCumulationData.reset();
updateString("treasureMissionIdsType",treasureMissionIdsType); updateString("treasureMissionIdsType",treasureMissionIdsType);
updateString("treasureCumulationData",treasureCumulationData); updateString("treasureCumulationData",treasureCumulationData);
return tasks;
}
private CommonProto.RefreshTask.Builder treasureIndicationBuild(int type,int[] refreshIds){
CommonProto.RefreshTask.Builder task = CommonProto.RefreshTask.newBuilder().setType(type);
for(int i = 0;i<refreshIds.length;i++){
CommonProto.UserMissionInfo tempTask = CommonProto.UserMissionInfo.newBuilder().setMissionId(refreshIds[i]).build();
task.addTasks(tempTask).build();
}
return task;
} }
public void setVipMissionIdsType(VipMissionIdsType vipMissionIdsType) { public void setVipMissionIdsType(VipMissionIdsType vipMissionIdsType) {
updateString("vipMissionIdsType",vipMissionIdsType); updateString("vipMissionIdsType",vipMissionIdsType);

View File

@ -156,13 +156,13 @@ public class MissionLoigc {
int progress = config.getTaskValue()[1][0]; int progress = config.getTaskValue()[1][0];
switch (config.getType()){ switch (config.getType()){
case 1: case 1:
progress = getDoingProgress(user,treasureCumulationData,id,config.getTaskValue()[0]); progress = getDoingProgress(user,treasureCumulationData,config.getTaskType(),config.getTaskValue()[0]);
break; break;
case 2: case 2:
progress = getDoingProgress(user,treasureWeekCumulationData,id,config.getTaskValue()[0]); progress = getDoingProgress(user,treasureWeekCumulationData,config.getTaskType(),config.getTaskValue()[0]);
break; break;
case 3: case 3:
progress = getDoingProgress(user,treasureMonthCumulationData,id,config.getTaskValue()[0]); progress = getDoingProgress(user,treasureMonthCumulationData,config.getTaskType(),config.getTaskValue()[0]);
break; break;
default: default:
break; break;
@ -353,7 +353,14 @@ public class MissionLoigc {
// ItemUtil.drop(user,STreasureSunlongTaskConfig.treasureTaskConfig.get(missionId).getIntegral(),BIReason.TREASURE_SCORE); // ItemUtil.drop(user,STreasureSunlongTaskConfig.treasureTaskConfig.get(missionId).getIntegral(),BIReason.TREASURE_SCORE);
KtEventUtils.onKtEvent(user, ParamEventBean.UserTaskEvent,type,missionId); KtEventUtils.onKtEvent(user, ParamEventBean.UserTaskEvent,type,missionId);
Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.TASK_FINISH_EVEMT,missionId,""); Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.TASK_FINISH_EVEMT,missionId,"");
PlayerInfoProto.TakeMissionRewardResponse build = PlayerInfoProto.TakeMissionRewardResponse.newBuilder().build(); CommonProto.Drop.Builder drop = ItemUtil.drop(user, missionStateChangeInfos.get(0).getRewwardGroups(), BIReason.TAKE_MISSION_REWARD);
STreasureSunlongConfig levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(user.getPlayerInfoManager().getTreasureLevel());
while(ItemUtil.itemCost(user,levelConfig.getIntegral(), BIReason.TREASURE_LEVEL_UP_CONCUME,1)){
user.getPlayerInfoManager().addTreasureLevel();
levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(user.getPlayerInfoManager().getTreasureLevel());
}
PlayerInfoProto.TakeMissionRewardResponse build = PlayerInfoProto.TakeMissionRewardResponse.newBuilder().setDrop(drop).setTreasureScore(user.getPlayerInfoManager().getTreasureLevel()).build();
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.TAKE_MISSION_REWARD_RESPONSE_VALUE,build,true); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.TAKE_MISSION_REWARD_RESPONSE_VALUE,build,true);
return; return;
} }

View File

@ -29,18 +29,19 @@ public class TreasureMissionType extends AbstractMissionType{
public void rewardMission(User user,int missionId, List<MissionStateChangeInfo> missionTypeEnumListMap, CumulationData cumulationData) throws Exception { public void rewardMission(User user,int missionId, List<MissionStateChangeInfo> missionTypeEnumListMap, CumulationData cumulationData) throws Exception {
STreasureSunlongTaskConfig taskConfig = STreasureSunlongTaskConfig.treasureTaskConfig.get(missionId); STreasureSunlongTaskConfig taskConfig = STreasureSunlongTaskConfig.treasureTaskConfig.get(missionId);
if(taskConfig == null){return;} if(taskConfig == null){return;}
int doingProgress = MissionLoigc.getDoingProgress(user,cumulationData, taskConfig.getTaskType(), taskConfig.getTaskValue()[0]); // int doingProgress = MissionLoigc.getDoingProgress(user,cumulationData, taskConfig.getTaskType(), taskConfig.getTaskValue()[0]);
//完成 //完成
int finishParm = taskConfig.getTaskValue()[1][0]; // int finishParm = taskConfig.getTaskValue()[1][0];
if(doingProgress<finishParm){ // if(doingProgress<finishParm){
return; // return;
} // }
STreasureSunlongConfig levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(user.getPlayerInfoManager().getTreasureLevel()); if (!getFinishMissionIds().contains(missionId)) {
if(ItemUtil.itemCost(user,levelConfig.getIntegral(), BIReason.TREASURE_LEVEL_UP_CONCUME,1)){ return ;
user.getPlayerInfoManager().addTreasureLevel();
} }
MissionStateChangeInfo stateChangeInfo = new MissionStateChangeInfo(missionId, MissionState.REWARD,taskConfig.getIntegral()); MissionStateChangeInfo stateChangeInfo = new MissionStateChangeInfo(missionId, MissionState.REWARD,taskConfig.getIntegral());
missionTypeEnumListMap.add(stateChangeInfo); missionTypeEnumListMap.add(stateChangeInfo);
getFinishMissionIds().remove(missionId);
getRewardedMissionIds().set(missionId);
} }
@ -52,27 +53,22 @@ public class TreasureMissionType extends AbstractMissionType{
@Override @Override
public void calCumulationDataResult(User user, CumulationData.Result result, List<MissionStateChangeInfo> missionStateChangeInfos, CumulationData cumulationData) { public void calCumulationDataResult(User user, CumulationData.Result result, List<MissionStateChangeInfo> missionStateChangeInfos, CumulationData cumulationData) {
Set<Integer> doingMissionIds = getDoingMissionIds(); Set<Integer> doingMissionIds = getDoingMissionIds();
List<STreasureTaskConfig> sTreasureTaskConfigs = STreasureTaskConfig.sTreasureTaskConfigListByTypeMap.get(result.subType.getMissionTypeValue()); List<STreasureSunlongTaskConfig> sTreasureTaskConfigs = STreasureSunlongTaskConfig.sTreasureTaskConfigListByTypeMapTmp.get(result.subType.getMissionTypeValue());
if(sTreasureTaskConfigs == null){ if(sTreasureTaskConfigs == null){
return; return;
} }
for(STreasureTaskConfig sTreasureTaskConfig : sTreasureTaskConfigs){ for(STreasureSunlongTaskConfig sTreasureTaskConfig : sTreasureTaskConfigs){
int id = sTreasureTaskConfig.getId(); int id = sTreasureTaskConfig.getId();
if(!doingMissionIds.contains(sTreasureTaskConfig.getId())){ if(!doingMissionIds.contains(sTreasureTaskConfig.getId())){
continue; continue;
} }
int doingProgress = MissionLoigc.getDoingProgress(user, cumulationData, sTreasureTaskConfig.getTaskType(), sTreasureTaskConfig.getTaskValue()[0]); int doingProgress = MissionLoigc.getDoingProgress(user, cumulationData, sTreasureTaskConfig.getTaskType(), sTreasureTaskConfig.getTaskValue()[0]);
int times = sTreasureTaskConfig.getTimes();
//完成 //完成
int finishParm = sTreasureTaskConfig.getTaskValue()[1][0]; int finishParm = sTreasureTaskConfig.getTaskValue()[1][0];
Integer takeTimes = this.takeTimes.get(id); if( doingProgress>=finishParm){
if(takeTimes == null){
takeTimes = 0;
}
if(times!=0 && (finishParm>0 && (takeTimes + doingProgress)/finishParm>=times || (doingProgress!=0 && finishParm<0 && (-takeTimes + doingProgress)>=finishParm) )){
doingMissionIds.remove(id); doingMissionIds.remove(id);
getFinishMissionIds().add(id); getFinishMissionIds().add(id);
MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.FINISH,times-takeTimes,takeTimes); MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.FINISH,doingProgress,0);
missionStateChangeInfos.add(missionStateChangeInfo); missionStateChangeInfos.add(missionStateChangeInfo);
continue; continue;
} }
@ -80,18 +76,19 @@ public class TreasureMissionType extends AbstractMissionType{
continue; continue;
} }
int sendProgress = (doingProgress - takeTimes * finishParm) / finishParm; int sendProgress = doingProgress;
if(sTreasureTaskConfig.getTaskType() == MissionType.SENVER_HAPPY.getMissionTypeValue()){ if(sTreasureTaskConfig.getTaskType() == MissionType.SENVER_HAPPY.getMissionTypeValue()){
sendProgress = doingProgress; sendProgress = doingProgress;
} }
if(sendProgress>=finishParm){ if(sendProgress>=finishParm){
MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.FINISH,sendProgress,takeTimes); MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.FINISH,sendProgress,0);
missionStateChangeInfos.add(missionStateChangeInfo); missionStateChangeInfos.add(missionStateChangeInfo);
}else{ }else{
MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.DOING,sendProgress,takeTimes); MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.DOING,sendProgress,0);
missionStateChangeInfos.add(missionStateChangeInfo); missionStateChangeInfos.add(missionStateChangeInfo);
} }
} }
} }
public Map<Integer, Integer> getTakeTimes() { public Map<Integer, Integer> getTakeTimes() {

View File

@ -4,6 +4,7 @@ import com.ljsd.jieling.config.*;
import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.core.HandlerLogicThread;
import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.ktbeans.KtEventUtils; import com.ljsd.jieling.ktbeans.KtEventUtils;
import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean;
import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.OnlineUserManager;
@ -14,6 +15,7 @@ import com.ljsd.jieling.logic.dao.StoreInfo;
import com.ljsd.jieling.logic.dao.StoreManager; import com.ljsd.jieling.logic.dao.StoreManager;
import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; import com.ljsd.jieling.logic.mission.event.MissionEventDistributor;
import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.server.ProtocolsManager;
@ -551,6 +553,10 @@ public class StoreLogic {
return; return;
} }
user.getPlayerInfoManager().setHadBuyTreasure(1); user.getPlayerInfoManager().setHadBuyTreasure(1);
MailLogic.getInstance().sendMail(session.getUid(),SErrorCodeEerverConfig.getI18NMessage("secret_extra_title"),SErrorCodeEerverConfig.getI18NMessage("secret_extra_txt"),SSpecialConfig.getStringValue(SSpecialConfig.SUNLONG_REWARD),(int)(TimeUtils.now()/1000), Global.MAIL_EFFECTIVE_TIME);
MailLogic.getInstance().sendMail(session.getUid(),SErrorCodeEerverConfig.getI18NMessage("secret_daily_title"),SErrorCodeEerverConfig.getI18NMessage("secret_daily_txt"),SSpecialConfig.getStringValue(SSpecialConfig.SUNLONG_INTEGRAL),(int)(TimeUtils.now()/1000), Global.MAIL_EFFECTIVE_TIME);
MessageUtil.sendMessage(session, 1,msgId, null, true); MessageUtil.sendMessage(session, 1,msgId, null, true);
} }
} }