1.6版本优化,初版,待测试
parent
b37c3146c9
commit
fc05c6a1cb
|
|
@ -145,13 +145,14 @@ public class RedisUtil {
|
|||
String oldName = key[i];
|
||||
// 新名字
|
||||
String newName = oldName+"BACK:"+System.currentTimeMillis();
|
||||
// 重命名
|
||||
if(get(oldName)==null){
|
||||
continue;
|
||||
// key是否存在
|
||||
boolean aBoolean = hasKey(oldName);
|
||||
if (aBoolean){
|
||||
// 重命名
|
||||
redisTemplate.rename(oldName,newName);
|
||||
// 设置过期时间
|
||||
expire(newName,60*60*24-60);
|
||||
}
|
||||
redisTemplate.rename(oldName,newName);
|
||||
// 设置过期时间
|
||||
expire(newName,60*60*24-60);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,6 +167,8 @@ public enum ErrorCode implements IErrorCode {
|
|||
|
||||
BAG_FULL(135,"背包内存储空间不足,无法领取附件"),
|
||||
|
||||
LOCK_FILL(138,"锁定数量已满,无法刷新"),
|
||||
|
||||
;
|
||||
private static final Set<Integer> CodeSet = new HashSet<>();
|
||||
|
||||
|
|
|
|||
|
|
@ -2810,6 +2810,28 @@ public class MapLogic {
|
|||
this.endlessSeason = season;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理无尽副本道具
|
||||
* @param session
|
||||
* @throws Exception
|
||||
*/
|
||||
public void clearEndLessDrop(int uid) throws Exception {
|
||||
User user = UserManager.getUser(uid);
|
||||
// 根据功能类型获取需要清理的道具列表
|
||||
List<SItem> itemList = SItem.getItemMapByRecycle().get(FunctionIdEnum.Endless.getFunctionType());
|
||||
if (!itemList.isEmpty()){
|
||||
for (SItem item:itemList){
|
||||
// 获取玩家背包道具并消耗
|
||||
Item item1 = user.getItemManager().getItem(item.getId());
|
||||
if(item1!=null){
|
||||
int[][] cost= new int[1][];
|
||||
cost[0] = new int[]{item1.getItemId(),item1.getItemNum()};
|
||||
ItemUtil.itemCost(user,cost,BIReason.ENDLESS_REASON_CHANGE,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 无尽副本设置当前mapId
|
||||
* @param endlessMapId
|
||||
|
|
@ -2908,6 +2930,8 @@ public class MapLogic {
|
|||
|
||||
for(Map.Entry<Integer, ISession> entry:onlineUserMap.entrySet()){
|
||||
endLessClear(entry.getValue());
|
||||
// 清理无尽副本道具
|
||||
clearEndLessDrop(entry.getValue().getUid());
|
||||
}
|
||||
updateEndlessSeason(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ public class EndlessMap extends AbstractMap{
|
|||
mapManager.endlessWalkCellSave(new HashSet<>());
|
||||
mapManager.endlessMapInfoSave(new HashMap<>());
|
||||
//清除当前副本信息
|
||||
|
||||
// 清理无尽副本道具
|
||||
MapLogic.getInstance().clearEndLessDrop(uid);
|
||||
//新创建地图
|
||||
mapManager.setCurMapType(type);
|
||||
// enterNewMap(user,4001,GlobalsDef.ENDLESS_TEAM,mapEnterResponse);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
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 org.springframework.stereotype.Component;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import rpc.protocols.PlayerInfoProto;
|
||||
|
||||
/**
|
||||
* 天宫探险上锁
|
||||
* @author hj
|
||||
*/
|
||||
@Component
|
||||
public class MissingRoomLockHandler extends BaseHandler<PlayerInfoProto.MissingRoomLockRequest> {
|
||||
@Override
|
||||
public MessageTypeProto.MessageType getMessageCode() {
|
||||
return MessageTypeProto.MessageType.MISSING_ROOM_LOCK_REQUEST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processWithProto(ISession iSession, PlayerInfoProto.MissingRoomLockRequest proto) throws Exception {
|
||||
MissionLoigc.missiongRoomLock(iSession,proto.getMissionId(),proto.getLock(),MessageTypeProto.MessageType.MISSING_ROOM_LOCK_RESPONSE);
|
||||
}
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 天宫寻宝刷新
|
||||
* @author lvxinran
|
||||
* @date 2019/12/12
|
||||
* @discribe
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ import rpc.protocols.PlayerInfoProto;
|
|||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 天宫寻宝探险
|
||||
* @author lvxinran
|
||||
* @date 2019/12/12
|
||||
* @date 2019/12/12MISSING_ROOM_HERO_SEND_REQUEST
|
||||
* @discribe
|
||||
*/
|
||||
@Component
|
||||
|
|
|
|||
|
|
@ -196,16 +196,24 @@ public class UserMissionManager extends MongoBase {
|
|||
updateString("achievementMap",achievementMap);
|
||||
|
||||
break;
|
||||
case MISSING_ROOM_REFRESH:
|
||||
case MISSING_ROOM_REFRESH://天宫寻宝
|
||||
Map<Integer,Integer> mustAppear = new HashMap<>();
|
||||
List<Integer> mustMissions = new ArrayList<>();
|
||||
List<Integer> lockMissions = new ArrayList<>();
|
||||
if((int)parm[0]==1){
|
||||
//删除已经领取奖励的
|
||||
missingRoomMissionType.getFinishMissionIds().removeIf(value->missingRoomMissionType.getAllMissingTime().get(value)==-1);
|
||||
missingRoomMissionType.getAllMissingTime().values().removeIf(value->value==-1);
|
||||
boolean result;
|
||||
|
||||
// 任务全部锁定
|
||||
Set<Integer> lockMissionIds = missingRoomMissionType.getLockMissionIds();
|
||||
if (lockMissionIds.size() >= 6){
|
||||
throw new ErrorCodeException(ErrorCode.LOCK_FILL);
|
||||
}
|
||||
|
||||
// 读表
|
||||
SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSetting;
|
||||
result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1);
|
||||
boolean 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){
|
||||
|
|
@ -222,22 +230,45 @@ public class UserMissionManager extends MongoBase {
|
|||
missingRoomMissionType.privilegeRefresh(user,sMazeTreasureSetting.getHighDailyPrivilege(),mustAppear);
|
||||
//豪华特权
|
||||
missingRoomMissionType.privilegeRefresh(user,sMazeTreasureSetting.getLuxuryDailyPrivilege(),mustAppear);
|
||||
int[][] refreshHighTypeNum = sMazeTreasureSetting.getRefreshHighTypeNum();
|
||||
for(int[] refresh:refreshHighTypeNum){
|
||||
if(missingRoomMissionType.getRefreshTotalCount()==0||missingRoomMissionType.getRefreshTotalCount()%refresh[0]!=0){
|
||||
continue;
|
||||
}else{
|
||||
mustAppear.put(refresh[1],mustAppear.get(refresh[1])==null?1:(mustAppear.get(refresh[1])+1));
|
||||
}
|
||||
}
|
||||
//非免费抽取次数必出
|
||||
missingRoomMissionType.notFreeRefreshMust(user,sMazeTreasureSetting.getRefreshHighTypeNum(),mustAppear);
|
||||
// 刷新次数+1
|
||||
missingRoomMissionType.setRefreshTotalCount(missingRoomMissionType.getRefreshTotalCount()+1);
|
||||
}
|
||||
|
||||
Set<Integer> doingMissionIds = missingRoomMissionType.getDoingMissionIds();
|
||||
doingMissionIds.forEach((doing)->{
|
||||
if (lockMissionIds.contains(doing)){
|
||||
lockMissions.add(doing);
|
||||
}
|
||||
});
|
||||
|
||||
missingRoomMissionType.getDoingMissionIds().clear();
|
||||
}else{
|
||||
for(int firstTask:SMazeTreasureSetting.sMazeTreasureSetting.getFirstRefresh()){
|
||||
mustMissions.add(firstTask);
|
||||
}
|
||||
}
|
||||
|
||||
// 更新最大长度限制6条
|
||||
if (lockMissions.size() + mustAppear.size() > 6){
|
||||
// 锁定的不能动,获取特权任务数量
|
||||
int num = 6 - lockMissions.size();
|
||||
// 特权的key
|
||||
Set<Integer> keys = mustAppear.keySet();
|
||||
// 正序的set
|
||||
Set<Integer> sortSet = new TreeSet<Integer>(Comparator.naturalOrder());
|
||||
// 赋值
|
||||
sortSet.addAll(keys);
|
||||
// 遍历,如果数量满足,停止,不满足则删除等级小的任务
|
||||
for (Integer ints:sortSet){
|
||||
if (mustAppear.size() == num){
|
||||
break;
|
||||
}
|
||||
mustAppear.remove(ints);
|
||||
}
|
||||
}
|
||||
|
||||
if(!mustAppear.isEmpty()){
|
||||
for(Map.Entry<Integer,Integer> entry:mustAppear.entrySet()){
|
||||
List<SMazeTreasure> sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey());
|
||||
|
|
@ -265,7 +296,7 @@ public class UserMissionManager extends MongoBase {
|
|||
// missingRoomMission.add(refreshWeight);
|
||||
// }
|
||||
//根据品质来随机
|
||||
int[] qualityArray = MathUtils.randomForWeight(qualityRate, 6 - mustMissions.size());
|
||||
int[] qualityArray = MathUtils.randomForWeight(qualityRate, 6 - (mustMissions.size() + lockMissions.size()));
|
||||
Map<Integer,Integer> qualityNum = new HashMap<>();
|
||||
for(int quality:qualityArray){
|
||||
qualityNum.put(quality,qualityNum.getOrDefault(quality,0)+1);
|
||||
|
|
@ -285,9 +316,14 @@ public class UserMissionManager extends MongoBase {
|
|||
missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+id);
|
||||
}
|
||||
}
|
||||
// 必须任务
|
||||
for(int mission:mustMissions){
|
||||
missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission);
|
||||
}
|
||||
// 上锁任务
|
||||
for(int mission:lockMissions){
|
||||
missingRoomMissionType.addDoingMission(mission);
|
||||
}
|
||||
updateString("missingRoomMissionType",missingRoomMissionType);
|
||||
break;
|
||||
default:{
|
||||
|
|
|
|||
|
|
@ -333,15 +333,28 @@ public class MissionLoigc {
|
|||
missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(missionId).setState(state).setType(vipmissionType).setProgress(progrss).build());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取天宫寻宝任务列表
|
||||
* @param user
|
||||
* @param missionList
|
||||
*/
|
||||
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());
|
||||
|
||||
info.setMissionId(missionId).setState(0).setType(GameMisionType.MISSINGROOMMISSION.getType());
|
||||
// 是否上锁
|
||||
Set<Integer> lockMissionIds = missingRoomMissionType.getLockMissionIds();
|
||||
if (lockMissionIds.contains(missionId)){
|
||||
info.setLock(1);
|
||||
}
|
||||
missionList.add(info.build());
|
||||
}
|
||||
// 完成的任务
|
||||
for(Integer missionId:missingRoomMissionType.getFinishMissionIds()){
|
||||
CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder();
|
||||
int missingTime = missingRoomMissionType.getMissingTime(missionId);
|
||||
|
|
@ -886,6 +899,44 @@ public class MissionLoigc {
|
|||
user.getUserMissionManager().updateString("missingRoomMissionType",missingRoomMissionType);
|
||||
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 天宫探险加锁
|
||||
* @param session
|
||||
* @param missionId
|
||||
* @param operation
|
||||
* @param messageType
|
||||
* @throws Exception
|
||||
*/
|
||||
public static void missiongRoomLock(ISession session,int missionId,int operation, MessageTypeProto.MessageType messageType) throws Exception{
|
||||
User user = UserManager.getUser(session.getUid());
|
||||
// 获取天宫探险任务
|
||||
MissingRoomMissionType missingRoomMissionType = user.getUserMissionManager().getMissingRoomMissionType();
|
||||
// 不是待做任务,不能操作
|
||||
Set<Integer> doingMissionIds = missingRoomMissionType.getDoingMissionIds();
|
||||
if(!doingMissionIds.contains(missionId)){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
|
||||
Set<Integer> lockMissionIds = missingRoomMissionType.getLockMissionIds();
|
||||
// 上锁
|
||||
if (operation == 1){
|
||||
if (lockMissionIds.contains(missionId)) {
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
missingRoomMissionType.addLockMissionId(missionId);
|
||||
// 解锁
|
||||
}else {
|
||||
if (!lockMissionIds.contains(missionId)) {
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
missingRoomMissionType.getLockMissionIds().removeIf(value->value==missionId);
|
||||
}
|
||||
// 更新数据库
|
||||
user.getUserMissionManager().updateString("missingRoomMissionType",missingRoomMissionType);
|
||||
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
|
||||
}
|
||||
|
||||
public static boolean checkMainLevel(User user,int levelId){
|
||||
if(!SMainLevelConfig.config.containsKey(levelId)){
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@ public abstract class AbstractMissionType {
|
|||
//可领取的任务,在可控范围内,使用map存储,利于查找
|
||||
private Set<Integer> finishMissionIds = Sets.newConcurrentHashSet();
|
||||
|
||||
// 上锁的任务,不可刷新
|
||||
private Set<Integer> lockMissionIds = Sets.newConcurrentHashSet();
|
||||
|
||||
//已领取的任务,在可控范围内,使用map存储,利于查找
|
||||
private BitSet rewardedMissionIds = new BitSet(1024);
|
||||
|
||||
|
|
@ -64,4 +67,16 @@ public abstract class AbstractMissionType {
|
|||
public BitSet getRewardedMissionIds() {
|
||||
return rewardedMissionIds;
|
||||
}
|
||||
|
||||
public Set<Integer> getLockMissionIds() {
|
||||
return lockMissionIds;
|
||||
}
|
||||
|
||||
public void setLockMissionIds(Set<Integer> lockMissionIds) {
|
||||
this.lockMissionIds = lockMissionIds;
|
||||
}
|
||||
|
||||
public void addLockMissionId(int missionId) {
|
||||
lockMissionIds.add(missionId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -152,14 +152,22 @@ public class MissingRoomMissionType extends AbstractMissionType{
|
|||
if(!itemCost){
|
||||
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
|
||||
}
|
||||
|
||||
getLockMissionIds().removeIf(value->value==missionId);
|
||||
getDoingMissionIds().remove(missionId);
|
||||
getFinishMissionIds().add(missionId);
|
||||
missingTime.put(missionId, (int)(TimeUtils.now()/1000)+sMazeTreasure.getWasteTime());
|
||||
heroesInfo.put(missionId,heroes);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 特权刷新
|
||||
* @param user 用户信息
|
||||
* @param privilege 特权类型
|
||||
* @param mustAppear 必出
|
||||
*/
|
||||
public void privilegeRefresh(User user,int[][] privilege,Map<Integer,Integer> mustAppear){
|
||||
// 是否包含特权,包含奖励【1】
|
||||
if(user.getPlayerInfoManager().checkFunctionIsAllowed(privilege[0][0])&&privilege.length>1){
|
||||
int especialCount = user.getPlayerInfoManager().getVipPrivilageValue(privilege[0][0]);
|
||||
for(int i = 1; i< privilege.length; i++){
|
||||
|
|
@ -169,8 +177,25 @@ public class MissingRoomMissionType extends AbstractMissionType{
|
|||
}
|
||||
user.getPlayerInfoManager().updateVipPrivilage(privilege[0][0],1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 非免费刷新必出
|
||||
* @param user
|
||||
* @param refreshHighTypeNum
|
||||
* @param mustAppear
|
||||
*/
|
||||
public void notFreeRefreshMust(User user, int[][] refreshHighTypeNum,Map<Integer,Integer> mustAppear){
|
||||
int refreshTotalCount = user.getUserMissionManager().getMissingRoomMissionType().getRefreshTotalCount();
|
||||
for(int[] refresh:refreshHighTypeNum){
|
||||
if(refreshTotalCount==0||refreshTotalCount%refresh[0]!=0){
|
||||
continue;
|
||||
}else{
|
||||
mustAppear.put(refresh[1],mustAppear.get(refresh[1])==null?1:(mustAppear.get(refresh[1])+1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Map<Integer,Integer> getAllMissingTime(){
|
||||
return missingTime;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,11 +4,15 @@ package config;
|
|||
import manager.STableManager;
|
||||
import manager.Table;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Table(name = "ItemConfig")
|
||||
public class SItem implements BaseConfig {
|
||||
public static Map<Integer, SItem> sItemMap;
|
||||
public static Map<Integer, List<SItem>> itemMapByRecycle;
|
||||
private int id;
|
||||
private boolean backpackOrNot; //是否进背包
|
||||
private int itemType;
|
||||
|
|
@ -25,12 +29,18 @@ public class SItem implements BaseConfig {
|
|||
private String resolveReward;
|
||||
private int itemNumlimit;
|
||||
private int[][] extraReward;
|
||||
private int recycle;
|
||||
|
||||
private String name;
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
sItemMap = STableManager.getConfig(SItem.class);
|
||||
Map<Integer, List<SItem>> map = new HashMap<>();
|
||||
sItemMap.forEach((k,v)->{
|
||||
map.computeIfAbsent(v.getRecycle(),n->new ArrayList<>()).add(v);
|
||||
});
|
||||
itemMapByRecycle = map;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
|
|
@ -41,6 +51,10 @@ public class SItem implements BaseConfig {
|
|||
return sItemMap;
|
||||
}
|
||||
|
||||
public static Map<Integer, List<SItem>> getItemMapByRecycle() {
|
||||
return itemMapByRecycle;
|
||||
}
|
||||
|
||||
public boolean isBackpackOrNot() {
|
||||
return backpackOrNot;
|
||||
}
|
||||
|
|
@ -104,4 +118,8 @@ public class SItem implements BaseConfig {
|
|||
public int[][] getExtraReward() {
|
||||
return extraReward;
|
||||
}
|
||||
|
||||
public int getRecycle() {
|
||||
return recycle;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue