还原灵脉
parent
761347b776
commit
5e4cf04ff7
|
|
@ -4,7 +4,7 @@ public class LingMaiSecretArea {
|
|||
private int id;
|
||||
private int uid;
|
||||
private String serverName;
|
||||
private int occupyTime;//占领的时长 以分钟为单位
|
||||
private int occupyTime;
|
||||
|
||||
// 下面这四个参数用不到了
|
||||
@Deprecated
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@ import com.ljsd.jieling.logic.fight.PVEFightEvent;
|
|||
import com.ljsd.jieling.logic.fight.result.FightResult;
|
||||
import com.ljsd.jieling.logic.hero.HeroLogic;
|
||||
import com.ljsd.jieling.logic.player.PlayerLogic;
|
||||
import com.ljsd.jieling.logic.rank.RankContext;
|
||||
import com.ljsd.jieling.logic.rank.RankEnum;
|
||||
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import config.SArenaSetting;
|
||||
|
|
@ -51,6 +54,7 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
@Override
|
||||
public void processWithProto(ISession session, ArenaInfoProto.CrossLingmaiSecretAreaRequest request) throws Exception {
|
||||
int uid = session.getUid();
|
||||
|
||||
User user = UserManager.getUser(uid);
|
||||
if (user == null) {
|
||||
return;
|
||||
|
|
@ -79,15 +83,6 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
||||
return;
|
||||
}
|
||||
//跨服灵脉锁
|
||||
RedisUtil redisUtil = RedisUtil.getInstence();
|
||||
String lockKey = "SERVER_LINGMAI_LOCK" + RedisKey.Delimiter_colon + crossGroup + RedisKey.Delimiter_colon + group;
|
||||
boolean lock = redisUtil.lock(lockKey, TimeUtils.ONE_MINUTE);
|
||||
if (!lock) {
|
||||
//没有拿到锁直接返回
|
||||
LOGGER.info("跨服灵脉,跨服分组 ={},灵脉分组 ={},未获取到锁", crossGroup, group);
|
||||
return;
|
||||
}
|
||||
//检测特权次数
|
||||
boolean countBol = PlayerLogic.getInstance().check(user, request.getPrivilageTypeId(), 1);
|
||||
if (request.getPrivilageTypeId() == 0 || !countBol) {
|
||||
|
|
@ -95,9 +90,19 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
throw new ErrorCodeException(ErrorCode.REFRESH_WHEL_TIME_NOT, "挑战次数不足");
|
||||
}
|
||||
SLodeConfig config = SLodeConfig.lodeConfig.get(id);
|
||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||
if (config == null) {
|
||||
return;
|
||||
}
|
||||
//跨服灵脉锁
|
||||
RedisUtil redisUtil = RedisUtil.getInstence();
|
||||
String lockKey = "SERVER_LINGMAI_LOCK" + RedisKey.Delimiter_colon + crossGroup + RedisKey.Delimiter_colon + group;
|
||||
boolean lock = redisUtil.lock(lockKey, TimeUtils.ONE_SECOND * 10);
|
||||
if (!lock) {
|
||||
//没有拿到锁直接返回
|
||||
LOGGER.info("跨服灵脉,跨服分组 ={},灵脉分组 ={},未获取到锁", crossGroup, group);
|
||||
return;
|
||||
}
|
||||
String serverName = CrossServiceLogic.simplifyServerName(GameApplication.serverId);
|
||||
String key = RedisKey.CROSS_LINGMAISECRET_INFO;
|
||||
int nowInt = TimeUtils.nowInt();
|
||||
|
|
@ -121,9 +126,20 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
//赢了
|
||||
if (fightResult.getResult() == 1) {
|
||||
//结算已有的灵脉
|
||||
int score =0;
|
||||
if (myLingmaiId != 0){
|
||||
LingMaiSecretArea myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));
|
||||
CrossLingmaiLogic.getInstance().sendNormalMail(uid,myLingmai);
|
||||
config = SLodeConfig.lodeConfig.get(myLingmaiId);
|
||||
//int minute = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60);
|
||||
int minute = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60);
|
||||
int second =((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) % 60) >60 ?
|
||||
60 : ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) % 60);
|
||||
myLingmai.setScore1(myLingmai.getScore1() + minute*config.getRewardList()[0][1]+(second*config.getRewardList()[0][1]/60));
|
||||
//myLingmai.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt());
|
||||
LOGGER.info("uid:"+uid+"first occupy myLingmaiId: "+myLingmaiId+" minute:"+minute+"second:"+second);
|
||||
score = myLingmai.getScore1() + config.getRewardList()[0][1] * myLingmai.getOccupyTime()/60;
|
||||
rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||
rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score);
|
||||
//清除已有灵脉数据
|
||||
RedisUtil.getInstence().old_removemapentry(key, groupKey, String.valueOf(myLingmaiId));
|
||||
}
|
||||
|
|
@ -131,7 +147,18 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
lingMaiSecretArea.setId(id);
|
||||
lingMaiSecretArea.setUid(uid);
|
||||
lingMaiSecretArea.setServerName(serverName);
|
||||
lingMaiSecretArea.setOccupyTime(nowInt);
|
||||
lingMaiSecretArea.setGetAwardTimeOrOccupyTime(nowInt);
|
||||
lingMaiSecretArea.setBeginOccupyTime(nowInt);
|
||||
if(myLingmaiId != 0 && score!=0){
|
||||
lingMaiSecretArea.setScore1(score);
|
||||
}
|
||||
//被打下榜 重新上
|
||||
if(myLingmaiId ==0){
|
||||
double disappearScore = rank.getScoreById(uid, crossGroup + RedisKey.Delimiter_colon + group);
|
||||
if(disappearScore>0){
|
||||
lingMaiSecretArea.setScore1((int) disappearScore);
|
||||
}
|
||||
}
|
||||
RedisUtil.getInstence().old_putmap(key, groupKey, String.valueOf(id), lingMaiSecretArea);
|
||||
}
|
||||
res.setResult(fightResult.getResult());
|
||||
|
|
@ -168,24 +195,50 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
LOGGER.error("跨服灵脉秘境真人战斗结果:"+result);
|
||||
if (result == 1) {
|
||||
//赢了 我有灵脉 我没灵脉
|
||||
//别人积分收益结算
|
||||
LingMaiSecretArea oldOwner = lingMaiMap.get(String.valueOf(id));//上一个占领者
|
||||
//int minute = ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60);
|
||||
int minute = ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60);
|
||||
int second =((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) % 60) >60 ?
|
||||
60 : ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) % 60);
|
||||
long tempScore = second*config.getRewardList()[0][1]/60;
|
||||
LOGGER.info("uid:"+uid+"pvp other occupy id:"+id+" minute:"+minute+"second:"+second);
|
||||
//oldOwner.setScore1(oldOwner.getScore1()+minute*config.getRewardList()[0][1]+(int)tempScore);
|
||||
int score1 =oldOwner.getScore1()+minute*config.getRewardList()[0][1]+(int)tempScore;
|
||||
long scoreOld = score1 + config.getRewardList()[0][1]*(long)oldOwner.getOccupyTime()/60;
|
||||
rank.addRank(defUid, String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, scoreOld);
|
||||
LingMaiSecretArea myLingmai =null;
|
||||
if (myLingmaiId != 0) {
|
||||
//本人已有灵脉结算
|
||||
LingMaiSecretArea myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));
|
||||
CrossLingmaiLogic.getInstance().sendNormalMail(uid,myLingmai);
|
||||
myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));//上一个占领者
|
||||
config = SLodeConfig.lodeConfig.get(myLingmaiId);
|
||||
//minute = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60);
|
||||
minute = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60);
|
||||
second =((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) % 60) >60 ?
|
||||
60 : ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) % 60);
|
||||
LOGGER.info("uid:"+uid+"pvp owner occupy id:"+myLingmaiId+" minute:"+minute+"second:"+second);
|
||||
tempScore =(second*config.getRewardList()[0][1]/60);
|
||||
score1 = myLingmai.getScore1()+minute*config.getRewardList()[0][1]+(int)tempScore;
|
||||
//long newScore = score1+
|
||||
//myLingmai.setScore1(myLingmai.getScore1()+minute*config.getRewardList()[0][1]+(int)tempScore);
|
||||
myLingmai.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt());
|
||||
//我的
|
||||
long score = score1 + config.getRewardList()[0][1] * (long)myLingmai.getOccupyTime()/60;
|
||||
rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||
rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score);
|
||||
myLingmai.setScore1((int)score);
|
||||
//清除已有灵脉数据
|
||||
RedisUtil.getInstence().old_removemapentry(key, groupKey, String.valueOf(myLingmai.getId()));
|
||||
}
|
||||
//易主
|
||||
LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id, uid,crossGroup,group);
|
||||
if(myLingmai!=null){
|
||||
lingMaiSecretArea.setScore1(myLingmai.getScore1());
|
||||
}
|
||||
RedisUtil.getInstence().old_putmap(key, groupKey, String.valueOf(id), lingMaiSecretArea);
|
||||
// 给失败者发邮件
|
||||
LingMaiSecretArea nowLingMai = lingMaiMap.get(String.valueOf(id));
|
||||
CrossLingmaiLogic.getInstance().sendBeAckMail(nowLingMai.getUid(),nowLingMai,uid);
|
||||
//清除已有灵脉数据
|
||||
RedisUtil.getInstence().old_removemapentry(key, groupKey, String.valueOf(nowLingMai.getId()));
|
||||
|
||||
// 更新灵脉信息
|
||||
nowLingMai.setUid(uid);
|
||||
nowLingMai.setServerName(serverName);
|
||||
nowLingMai.setOccupyTime(nowInt);
|
||||
RedisUtil.getInstence().old_putmap(key, groupKey, String.valueOf(id), nowLingMai);
|
||||
CrossLingmaiLogic.getInstance().sendBeAckMail(defUid,nowLingMai,user.getPlayerInfoManager().getNickName());
|
||||
|
||||
//挑战者记录
|
||||
String key1 = RedisKey.getKey(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(user.getId()));
|
||||
|
|
|
|||
|
|
@ -102,17 +102,17 @@ public class CrossLingmaiLogic {
|
|||
String groupKey = crossGroup + RedisKey.Delimiter_colon + group;
|
||||
int second = SSpecialConfig.getIntegerValue(SSpecialConfig.lingmai_basic_configuration);
|
||||
Map<String, LingMaiSecretArea> mapValues = RedisUtil.getInstence().old_getmapvalue_toclass(key, groupKey, String.class, LingMaiSecretArea.class);
|
||||
Iterator<Map.Entry<String, LingMaiSecretArea>> iterator = mapValues.entrySet().iterator();
|
||||
while (iterator.hasNext()){
|
||||
Map.Entry<String, LingMaiSecretArea> next = iterator.next();
|
||||
LingMaiSecretArea lingMaiSecretArea = next.getValue();
|
||||
int time = nowInt - lingMaiSecretArea.getOccupyTime();
|
||||
if (time > second){
|
||||
iterator.remove();
|
||||
sendNormalMail(lingMaiSecretArea.getUid(),lingMaiSecretArea);
|
||||
RedisUtil.getInstence().old_removemapentry(key, groupKey, String.valueOf(lingMaiSecretArea.getId()));
|
||||
}
|
||||
}
|
||||
// Iterator<Map.Entry<String, LingMaiSecretArea>> iterator = mapValues.entrySet().iterator();
|
||||
// while (iterator.hasNext()){
|
||||
// Map.Entry<String, LingMaiSecretArea> next = iterator.next();
|
||||
// LingMaiSecretArea lingMaiSecretArea = next.getValue();
|
||||
// int time = nowInt - lingMaiSecretArea.getOccupyTime();
|
||||
// if (time > second){
|
||||
// iterator.remove();
|
||||
// sendNormalMail(lingMaiSecretArea.getUid(),lingMaiSecretArea);
|
||||
// RedisUtil.getInstence().old_removemapentry(key, groupKey, String.valueOf(lingMaiSecretArea.getId()));
|
||||
// }
|
||||
// }
|
||||
return mapValues;
|
||||
}
|
||||
|
||||
|
|
@ -129,15 +129,11 @@ public class CrossLingmaiLogic {
|
|||
LOGGER.info("灵脉发送正常结束邮件:{}",uid);
|
||||
}
|
||||
|
||||
public void sendBeAckMail(int uid, LingMaiSecretArea myLingmai, int ackId){
|
||||
public void sendBeAckMail(int uid, LingMaiSecretArea myLingmai, String atkName){
|
||||
int nowInt = TimeUtils.nowInt();
|
||||
SLodeConfig sLodeConfig = SLodeConfig.lodeConfig.get(myLingmai.getId());
|
||||
int time = (nowInt - myLingmai.getOccupyTime()) / 60;
|
||||
int minute = SSpecialConfig.getIntegerValue(SSpecialConfig.lingmai_basic_configuration)/60;
|
||||
int minTime = Math.min(time, minute);
|
||||
String title = SErrorCodeEerverConfig.getI18NMessage("LingmaikaicaiReward1_mail_title");
|
||||
String content = SErrorCodeEerverConfig.getI18NMessage("LingmaikaicaiReward1_mail_txt", new Object[]{ackId,minTime});
|
||||
String reward = CrossLingmaiLogic.getInstance().getReward(minTime, sLodeConfig.getRewardList());
|
||||
String content = SErrorCodeEerverConfig.getI18NMessage("LingmaikaicaiReward1_mail_txt", new Object[]{atkName});
|
||||
String reward = "";
|
||||
MailLogic.getInstance().sendMailToRedis(uid,title,content,reward,nowInt,Global.MAIL_EFFECTIVE_TIME);
|
||||
LOGGER.info("灵脉发送被占领结束邮件:{}",uid);
|
||||
}
|
||||
|
|
@ -160,9 +156,9 @@ public class CrossLingmaiLogic {
|
|||
// 清理组别1
|
||||
String groupKey1 = crossGroup + RedisKey.Delimiter_colon + 1;
|
||||
Map<String, LingMaiSecretArea> mapValues = redisUtil.old_getmapvalue_toclass(key, groupKey1, String.class, LingMaiSecretArea.class);
|
||||
for (LingMaiSecretArea value : mapValues.values()) {
|
||||
sendNormalMail(value.getUid(),value);
|
||||
}
|
||||
// for (LingMaiSecretArea value : mapValues.values()) {
|
||||
// sendNormalMail(value.getUid(),value);
|
||||
// }
|
||||
String key1 = redisUtil.getKeyLocal(key, groupKey1);
|
||||
redisUtil.del(key1);
|
||||
LOGGER.info("灵脉初始化,key:{}, 长度:{}",key1,mapValues.size());
|
||||
|
|
@ -171,9 +167,9 @@ public class CrossLingmaiLogic {
|
|||
// 清理组别2
|
||||
String groupKey2 = crossGroup + RedisKey.Delimiter_colon + 2;
|
||||
Map<String, LingMaiSecretArea> mapValue2 = redisUtil.old_getmapvalue_toclass(key, groupKey1, String.class, LingMaiSecretArea.class);
|
||||
for (LingMaiSecretArea value : mapValue2.values()) {
|
||||
sendNormalMail(value.getUid(),value);
|
||||
}
|
||||
// for (LingMaiSecretArea value : mapValue2.values()) {
|
||||
// sendNormalMail(value.getUid(),value);
|
||||
// }
|
||||
String key2 = redisUtil.getKeyLocal(key, groupKey2);
|
||||
redisUtil.del(key2);
|
||||
LOGGER.info("灵脉初始化,key:{}, 长度:{}",key2,mapValue2.size());
|
||||
|
|
@ -210,6 +206,14 @@ public class CrossLingmaiLogic {
|
|||
if (crossGroup == -1) {
|
||||
return;
|
||||
}
|
||||
//获取开服分布式锁,保证只有一个组计算
|
||||
String lockKey = "SERVER_LINGMAI_UPDATE_LOCK" + RedisKey.Delimiter_colon + crossGroup;
|
||||
boolean lock = RedisUtil.getInstence().lock(lockKey, TimeUtils.ONE_SECOND * 60);
|
||||
if (!lock) {
|
||||
//没有拿到锁直接返回
|
||||
LOGGER.info("跨服灵脉,灵脉积分定时更新, key:{} 跨服分组 ={},未获取到锁",lockKey, crossGroup);
|
||||
return;
|
||||
}
|
||||
Map<String, LingMaiSecretArea> lingMaiMap1 = RedisUtil.getInstence().old_getmapvalue_toclass(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + 1, String.class, LingMaiSecretArea.class);
|
||||
Map<String, LingMaiSecretArea> lingMaiMap2 = RedisUtil.getInstence().old_getmapvalue_toclass(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + 2, String.class, LingMaiSecretArea.class);
|
||||
updateLingmaiData(lingMaiMap1, crossGroup, 1);
|
||||
|
|
@ -222,28 +226,24 @@ public class CrossLingmaiLogic {
|
|||
String groupkey = crossGroup + RedisKey.Delimiter_colon + group;
|
||||
for (Map.Entry<String, LingMaiSecretArea> map : lingMaiMap.entrySet()) {
|
||||
try {
|
||||
User user = UserManager.getUser(map.getValue().getUid());
|
||||
if (user != null) {
|
||||
SLodeConfig config = SLodeConfig.lodeConfig.get(map.getValue().getId());
|
||||
if (config != null) {
|
||||
int occupyTime = (int) map.getValue().getGetAwardTimeOrOccupyTime();
|
||||
//分钟
|
||||
int minute = (nowTime - occupyTime) / 60;
|
||||
//秒
|
||||
int second = Math.min((nowTime - occupyTime) % 60, 60);
|
||||
//difVal =1 ;
|
||||
LOGGER.error("玩家" + map.getValue().getUid() + "原有秒:"+map.getValue().getOccupyTime()+" 获得秒:" + (minute*60+second));
|
||||
map.getValue().setOccupyTime(map.getValue().getOccupyTime() + minute*60+second);
|
||||
map.getValue().setGetAwardTimeOrOccupyTime(nowTime);
|
||||
|
||||
RedisUtil.getInstence().old_putmap(RedisKey.CROSS_LINGMAISECRET_INFO, groupkey, map.getKey(), map.getValue());
|
||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||
LOGGER.error("minute:"+map.getValue().getOccupyTime()+" per:"+(config.getRewardList()[0][1]/60));
|
||||
long score = (long)map.getValue().getOccupyTime() * config.getRewardList()[0][1]/60 + map.getValue().getScore1();
|
||||
double test = rank.getScoreById(user.getId(), groupkey);
|
||||
LOGGER.error("之前是:" + test + "之后是:" + score);
|
||||
rank.addRank(user.getId(), groupkey, score);
|
||||
}
|
||||
SLodeConfig config = SLodeConfig.lodeConfig.get(map.getValue().getId());
|
||||
if (config != null) {
|
||||
int occupyTime = (int) map.getValue().getGetAwardTimeOrOccupyTime();
|
||||
//分钟
|
||||
int minute = (nowTime - occupyTime) / 60;
|
||||
//秒
|
||||
int second = Math.min((nowTime - occupyTime) % 60, 60);
|
||||
//difVal =1 ;
|
||||
LOGGER.error("玩家" + map.getValue().getUid() + "原有秒:"+map.getValue().getOccupyTime()+" 获得秒:" + (minute*60+second));
|
||||
map.getValue().setOccupyTime(map.getValue().getOccupyTime() + minute*60+second);
|
||||
map.getValue().setGetAwardTimeOrOccupyTime(nowTime);
|
||||
RedisUtil.getInstence().old_putmap(RedisKey.CROSS_LINGMAISECRET_INFO, groupkey, map.getKey(), map.getValue());
|
||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||
LOGGER.error("second:"+map.getValue().getOccupyTime()+" perMinuteReward:"+(config.getRewardList()[0][1]));
|
||||
long score = (long)map.getValue().getOccupyTime() * config.getRewardList()[0][1]/60 + map.getValue().getScore1();
|
||||
double test = rank.getScoreById(map.getValue().getUid(), groupkey);
|
||||
LOGGER.error("之前是:" + test + "之后是:" + score);
|
||||
rank.addRank(map.getValue().getUid(), groupkey, score);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
|
|
|||
Loading…
Reference in New Issue