调整玉虚处理方案
parent
60ef42bead
commit
76e4dd6d8d
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue