调整玉虚处理方案

master_yuenan
DESKTOP-C3M45P4\dengdan 2025-04-15 15:01:33 +08:00
parent 60ef42bead
commit 76e4dd6d8d
2 changed files with 225 additions and 137 deletions

View File

@ -153,8 +153,8 @@ public class GetPlayerInfoHandler extends BaseHandler{
if(dropShow != null && !dropShow.isEmpty()){
dropShow.clear();
}
//玉虚异常奖励处理
CrossYuxulundaoLogic.getInstance().dealYuxuError(user,iSession);
//玉虚异常奖励处理
CrossYuxulundaoLogic.getInstance().dealYuxuErrorNew(user,iSession);
//问卷状态
int questState =-1;

View File

@ -416,141 +416,141 @@ public class CrossYuxulundaoLogic {
* @param user
*/
public void dealYuxuError(User user, ISession session) throws Exception {
Map<Integer,Integer> dealServers = this.dealServers;
//为null首次加载
if(dealServers == null){
dealServers = new HashMap<>();
String key = RedisUtil.getInstence().getKeyLocal(RedisKey.CROSS_YUXULUNDAO_DEAL_SERVER, "");
String servers = (String)RedisUtil.getInstence().get(key);
if(StringUtils.isEmpty(servers)){
this.dealServers = dealServers;
return;
}
String[] sers = servers.split(",");
if(sers.length == 0){
this.dealServers = dealServers;
return;
}
for(String id : sers){
int serverId = Integer.parseInt(id);
dealServers.put(serverId,serverId);
this.dealServers = dealServers;
}
}
//不需要处理
if(dealServers.isEmpty()){
return;
}
//不在处理范围内
if(!dealServers.containsKey(GameApplication.serverId)){
return;
}
String dealKey = RedisUtil.getInstence().getKeyLocal(RedisKey.CROSS_YUXULUNDAO_DEAL_MARK, String.valueOf(user.getId()));
String deal = (String)RedisUtil.getInstence().get(dealKey);
//已经处理过了
if(deal != null && "1".equals(deal)){
return;
}
MongoTemplate otherMonogTemplate = MongoUtil.getInstence().getMonogTemplate(GameApplication.serverId);
if(otherMonogTemplate == null){
return;
}
int score = 0;
int getNum = 0;
//查询玉虚论道货币获取记录
Query query = new Query();
query.addCriteria(Criteria.where("uid").is(user.getId()));
query.addCriteria(Criteria.where("type").is(0));
query.addCriteria(Criteria.where("reason").is(16));
query.addCriteria(Criteria.where("itemId").is(107));
List<ItemLog> list = otherMonogTemplate.find(query,ItemLog.class);
if(list != null && list.size() > 0){
for(ItemLog log : list){
//记录当时获取的货币积分
score = (int)log.getItemNum();
getNum++;
}
}
//记录要删除的邮件id
List<String> removeList = new ArrayList<>();
//领取数量小于20说明可能有未领取的邮件
if(getNum <20){
String title = SErrorCodeEerverConfig.getI18NMessage("MsRankTitle");
List<CommonProto.Mail> mailList = MailLogic.getInstance().getAllUserMail(user.getId());
for(CommonProto.Mail mail : mailList){
//不是玉虚论道奖励
if(!title.equals(mail.getHead())){
continue;
}
// 包装邮件奖励
StringBuilder mailItem = new StringBuilder(mail.getMailItem());
if(mailItem.length()==0){
continue;
}
// 转换二维数组
long[][] itemArr = StringUtil.parseFiledLong2(mailItem.toString());
for(long[] items : itemArr){
int itemId = (int)items[0];
//不是玉虚货币跳过
if(itemId != 107){
continue;
}
int num = (int)items[1];
//道具日志里没有领取记录,记录邮件的货币积分为当时发奖的积分
if(score == 0){
score = num;
}
removeList.add(mail.getMailId());
break;
}
}
}
//删除未领取的异常邮件
if(removeList.size() > 0){
MailLogic.getInstance().deleteForceMail(session,removeList);
}
//修正货币数量
//有记录再处理
if(score >0){
int overGet = getNum - 1;
//额外获取的总分数
int total = score * overGet;
//获取异常期间使用掉的积分
int used = this.getUsedScore(user,otherMonogTemplate);
//获取已有的道具数量
int have = 0;
Item item = user.getItemManager().getItem(107);
if(item != null){
have = (int)item.getItemNum();
}
//修正
int trueNum = have + used - total;
//用掉的比获取的多,添加差价分数,有部分用掉的积分是正常获取的
if(trueNum > have){
long add = trueNum - have;
Map<Long,Long> adds = new HashMap<>();
adds.put(107l,add);
long[][] items = ToolsUtil.getTwoArrayLong(adds);
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
ItemUtil.dropByMail(user, items, dropBuilder, BIReason.YUXU_DEAL);
}else{
int cost = have - trueNum;
if(cost > 0){
//扣除道具
Map<Integer,Integer> removes = new HashMap<>();
removes.put(107,cost);
int[][] items = ToolsUtil.getTwoArrayInt(removes);
ItemUtil.itemCost(user, items, BIReason.YUXU_DEAL, 0);
}
}
}
//清除礼物
this.dealGiftEquip(user);
//刷新商店
this.dealStore(user);
//标记为已处理
String mark = RedisKey.CROSS_YUXULUNDAO_DEAL_MARK + RedisKey.Delimiter_colon + user.getId();
RedisUtil.getInstence().set(mark, "1");
// Map<Integer,Integer> dealServers = this.dealServers;
// //为null首次加载
// if(dealServers == null){
// dealServers = new HashMap<>();
// String key = RedisUtil.getInstence().getKeyLocal(RedisKey.CROSS_YUXULUNDAO_DEAL_SERVER, "");
// String servers = (String)RedisUtil.getInstence().get(key);
// if(StringUtils.isEmpty(servers)){
// this.dealServers = dealServers;
// return;
// }
// String[] sers = servers.split(",");
// if(sers.length == 0){
// this.dealServers = dealServers;
// return;
// }
// for(String id : sers){
// int serverId = Integer.parseInt(id);
// dealServers.put(serverId,serverId);
// this.dealServers = dealServers;
// }
// }
// //不需要处理
// if(dealServers.isEmpty()){
// return;
// }
// //不在处理范围内
// if(!dealServers.containsKey(GameApplication.serverId)){
// return;
// }
// String dealKey = RedisUtil.getInstence().getKeyLocal(RedisKey.CROSS_YUXULUNDAO_DEAL_MARK, String.valueOf(user.getId()));
// String deal = (String)RedisUtil.getInstence().get(dealKey);
// //已经处理过了
// if(deal != null && "1".equals(deal)){
// return;
// }
// MongoTemplate otherMonogTemplate = MongoUtil.getInstence().getMonogTemplate(GameApplication.serverId);
// if(otherMonogTemplate == null){
// return;
// }
// int score = 0;
// int getNum = 0;
// //查询玉虚论道货币获取记录
// Query query = new Query();
// query.addCriteria(Criteria.where("uid").is(user.getId()));
// query.addCriteria(Criteria.where("type").is(0));
// query.addCriteria(Criteria.where("reason").is(16));
// query.addCriteria(Criteria.where("itemId").is(107));
// List<ItemLog> list = otherMonogTemplate.find(query,ItemLog.class);
// if(list != null && list.size() > 0){
// for(ItemLog log : list){
// //记录当时获取的货币积分
// score = (int)log.getItemNum();
// getNum++;
// }
// }
// //记录要删除的邮件id
// List<String> removeList = new ArrayList<>();
// //领取数量小于20说明可能有未领取的邮件
// if(getNum <20){
// String title = SErrorCodeEerverConfig.getI18NMessage("MsRankTitle");
// List<CommonProto.Mail> mailList = MailLogic.getInstance().getAllUserMail(user.getId());
// for(CommonProto.Mail mail : mailList){
// //不是玉虚论道奖励
// if(!title.equals(mail.getHead())){
// continue;
// }
// // 包装邮件奖励
// StringBuilder mailItem = new StringBuilder(mail.getMailItem());
// if(mailItem.length()==0){
// continue;
// }
// // 转换二维数组
// long[][] itemArr = StringUtil.parseFiledLong2(mailItem.toString());
// for(long[] items : itemArr){
// int itemId = (int)items[0];
// //不是玉虚货币跳过
// if(itemId != 107){
// continue;
// }
// int num = (int)items[1];
// //道具日志里没有领取记录,记录邮件的货币积分为当时发奖的积分
// if(score == 0){
// score = num;
// }
// removeList.add(mail.getMailId());
// break;
// }
// }
// }
// //删除未领取的异常邮件
// if(removeList.size() > 0){
// MailLogic.getInstance().deleteForceMail(session,removeList);
// }
// //修正货币数量
// //有记录再处理
// if(score >0){
// int overGet = getNum - 1;
// //额外获取的总分数
// int total = score * overGet;
// //获取异常期间使用掉的积分
// int used = this.getUsedScore(user,otherMonogTemplate);
// //获取已有的道具数量
// int have = 0;
// Item item = user.getItemManager().getItem(107);
// if(item != null){
// have = (int)item.getItemNum();
// }
// //修正
// int trueNum = have + used - total;
// //用掉的比获取的多,添加差价分数,有部分用掉的积分是正常获取的
// if(trueNum > have){
// long add = trueNum - have;
// Map<Long,Long> adds = new HashMap<>();
// adds.put(107l,add);
// long[][] items = ToolsUtil.getTwoArrayLong(adds);
// CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
// ItemUtil.dropByMail(user, items, dropBuilder, BIReason.YUXU_DEAL);
// }else{
// int cost = have - trueNum;
// if(cost > 0){
// //扣除道具
// Map<Integer,Integer> removes = new HashMap<>();
// removes.put(107,cost);
// int[][] items = ToolsUtil.getTwoArrayInt(removes);
// ItemUtil.itemCost(user, items, BIReason.YUXU_DEAL, 0);
// }
// }
// }
// //清除礼物
// this.dealGiftEquip(user);
// //刷新商店
// this.dealStore(user);
//// 标记为已处理
// String mark = RedisKey.CROSS_YUXULUNDAO_DEAL_MARK + RedisKey.Delimiter_colon + user.getId();
// RedisUtil.getInstence().set(mark, "1");
}
/**
@ -678,4 +678,92 @@ public class CrossYuxulundaoLogic {
}
}
}
/**
* ,0,
* @param user
* @param session
* @throws Exception
*/
public void dealYuxuErrorNew(User user, ISession session) throws Exception {
Map<Integer,Integer> dealServers = this.dealServers;
//为null首次加载
if(dealServers == null){
dealServers = new HashMap<>();
String key = RedisUtil.getInstence().getKeyLocal(RedisKey.CROSS_YUXULUNDAO_DEAL_SERVER, "");
String servers = (String)RedisUtil.getInstence().get(key);
if(StringUtils.isEmpty(servers)){
this.dealServers = dealServers;
return;
}
String[] sers = servers.split(",");
if(sers.length == 0){
this.dealServers = dealServers;
return;
}
for(String id : sers){
int serverId = Integer.parseInt(id);
dealServers.put(serverId,serverId);
this.dealServers = dealServers;
}
}
//不需要处理
if(dealServers.isEmpty()){
return;
}
//不在处理范围内
if(!dealServers.containsKey(GameApplication.serverId)){
return;
}
String dealKey = RedisUtil.getInstence().getKeyLocal(RedisKey.CROSS_YUXULUNDAO_DEAL_MARK, String.valueOf(user.getId()));
String deal = (String)RedisUtil.getInstence().get(dealKey);
//已经处理过了
if(deal != null && "1".equals(deal)){
return;
}
//记录要删除的邮件id
List<String> removeList = new ArrayList<>();
//删除邮件
String title = SErrorCodeEerverConfig.getI18NMessage("MsRankTitle");
List<CommonProto.Mail> mailList = MailLogic.getInstance().getAllUserMail(user.getId());
for(CommonProto.Mail mail : mailList){
//不是玉虚论道奖励
if(!title.equals(mail.getHead())){
continue;
}
// 包装邮件奖励
StringBuilder mailItem = new StringBuilder(mail.getMailItem());
if(mailItem.length()==0){
continue;
}
// 转换二维数组
long[][] itemArr = StringUtil.parseFiledLong2(mailItem.toString());
for(long[] items : itemArr){
int itemId = (int)items[0];
//不是玉虚货币跳过
if(itemId != 107){
continue;
}
removeList.add(mail.getMailId());
break;
}
}
//删除未领取的异常邮件
if(removeList.size() > 0){
MailLogic.getInstance().deleteForceMail(session,removeList);
}
//清空论道币
int have = 0;
Item item = user.getItemManager().getItem(107);
if(item != null){
have = (int)item.getItemNum();
}
Map<Integer,Integer> removes = new HashMap<>();
removes.put(107,have);
int[][] items = ToolsUtil.getTwoArrayInt(removes);
ItemUtil.itemCost(user, items, BIReason.YUXU_DEAL, 0);
// 标记为已处理
String mark = RedisKey.CROSS_YUXULUNDAO_DEAL_MARK + RedisKey.Delimiter_colon + user.getId();
RedisUtil.getInstence().set(mark, "1");
}
}