1.6版本优化,初版,待测试

duhui 2021-01-08 10:14:53 +08:00
parent b37c3146c9
commit fc05c6a1cb
12 changed files with 224 additions and 24 deletions

View File

@ -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);
}
}
}

View File

@ -167,6 +167,8 @@ public enum ErrorCode implements IErrorCode {
BAG_FULL(135,"背包内存储空间不足,无法领取附件"),
LOCK_FILL(138,"锁定数量已满,无法刷新"),
;
private static final Set<Integer> CodeSet = new HashSet<>();

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}
}

View File

@ -17,6 +17,7 @@ import java.util.ArrayList;
import java.util.List;
/**
*
* @author lvxinran
* @date 2019/12/12
* @discribe

View File

@ -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

View File

@ -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:{

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}
}