七界合并3--bug修改

duhui 2021-09-24 00:38:14 +08:00
parent 613a724623
commit 5cbba695bf
10 changed files with 195 additions and 37 deletions

View File

@ -69,7 +69,7 @@ public enum FunctionIdEnum {
GodTree(84,null),
HongMeng(86,null),
CrossYuxulundao(87,null),//跨服-玉虚论道
CrossSevenWorld(112,null),//七界试炼
CrossSevenWorld(112,new SevenWorldFunction()),//七界试炼
WeekGood(9091,null),
;

View File

@ -4,6 +4,8 @@ import com.ljsd.jieling.core.FunctionManager;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.dao.TimeControllerOfFunction;
import com.ljsd.jieling.logic.rank.RankContext;
import com.ljsd.jieling.logic.rank.RankEnum;
import com.ljsd.jieling.logic.sevenworld.SevenWorldLogic;
/**
@ -15,13 +17,15 @@ public class SevenWorldFunction implements FunctionManager {
@Override
public void closeAction(){
// 发奖
SevenWorldLogic.getInstance().sendRankReward();
}
@Override
public void startAction(TimeControllerOfFunction timeControllerOfFunction) {
// 清除排行榜信息
RedisUtil.getInstence().del(RedisKey.SEVEN_WORLD_INTEGRAL_RANK);
String crossRedisKey = RankContext.getRankEnum(RankEnum.CROSS_SEVEN_WORLD_RANK.getType()).getCrossRedisKey();
String key = RedisUtil.getInstence().getKey(crossRedisKey, "",false);
RedisUtil.getInstence().del(key);
SevenWorldLogic.setEnd(false);
System.out.printf("七界试炼活动开始,清理排行榜...{%s}\n",key);
}
}

View File

@ -38,6 +38,7 @@ import com.ljsd.jieling.logic.mission.data.DataManagerDistributor;
import com.ljsd.jieling.logic.mission.event.MissionEventDistributor;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.logic.redpacket.WelfareRedPackSendHandler;
import com.ljsd.jieling.logic.sevenworld.SevenWorldLogic;
import com.ljsd.jieling.logic.store.BuyGoodsNewLogic;
import com.ljsd.jieling.logic.store.StoreLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
@ -211,12 +212,6 @@ public class GlobalDataManaager implements IManager {
}
for(Integer id: closeList){
/* TimeControllerOfFunction timeControllerOfFunction = timeControllerOfFunctionMap.get(id);
if(timeControllerOfFunction != null && timeControllerOfFunction.getStartTime()!=openTimeOfFuntionCache.get(id).getStartTime()){
needUpdate = true;
globalSystemControl.updateTimeControllerOfFunction(openTimeOfFuntionCache.get(id));
reallyCloseList.add(id);'
}*/
openTimeOfFuntionCache.remove(id);
}
@ -426,13 +421,12 @@ public class GlobalDataManaager implements IManager {
// 距离上次登陆相隔几天
int num = TimeUtils.differentDays(user.getPlayerInfoManager().getLoginTime(), TimeUtils.now());
// 四灵试炼,计算每天次数
FourChallengeLogic.getInstance().addFourChallengeNum(user,num);
// 助战清理
HelpHeroLogic.getInstance().clearHelpInfo(user);
// 公会援助刷新
// GuildLogic.getInstance().everyDayFlushHelpLog(user);
// 七界推送
SevenWorldLogic.getInstance().sevenWorldInfoIndication(session);
// GuildChallengeLogic.getInstance().resetBossDamage(user);
if(TimeUtils.isSpanTime(user.getPlayerInfoManager().getLoginTime(),TimeUtils.now(),1,0)){

View File

@ -5,6 +5,10 @@ import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SevenWorldIntegralEvent;
import com.ljsd.jieling.logic.activity.event.SuperBoxEvent;
import com.ljsd.jieling.logic.dao.Item;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
@ -21,6 +25,7 @@ import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import java.util.ArrayList;
import java.util.Optional;
import java.util.Set;
/**
@ -36,6 +41,49 @@ public class SevenWorldActivity extends AbstractActivity {
SevenWorldActivity(int id) {
super(id);
Poster.getPoster().listenEvent(this, SuperBoxEvent.class);
Poster.getPoster().listenEvent(this, SevenWorldIntegralEvent.class);
}
@Override
public void onEvent(IEvent event) throws Exception {
int uid = 0;
int param1 = 0;
int param2 = 0;
// 购买礼包
if (event instanceof SuperBoxEvent) {
SuperBoxEvent event1 = (SuperBoxEvent) event;
uid = event1.getUserId();
param1 = event1.getGiftId();
}
if (event instanceof SevenWorldIntegralEvent) {
SevenWorldIntegralEvent event1 = (SevenWorldIntegralEvent) event;
uid = event1.getUid();
param2 = event1.getIntegral();
}
if (uid == 0) {
return;
}
// 验证玩家信息和活动信息
User user = UserManager.getUser(uid);
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
if (mission == null) {
return;
}
// 已购买礼包
if (param1 == GIFT) {
ActivityProgressInfo info = Optional.ofNullable(mission.getActivityMissionMap()).map(v -> v.get(-1)).orElse(null);
if (info != null) {
info.setState(1);
mission.getActivityMissionMap().put(-1, info);
}
}
// 七界秘宝积分
if (param2 > 0){
mission.setV(mission.getV()+param2);
}
// 状态推送
sendActivityProgress(user, mission, null);
}
@Override
@ -51,13 +99,18 @@ public class SevenWorldActivity extends AbstractActivity {
if (bag != null){
bag.setOpen(true);
}
ActivityProgressInfo info = new ActivityProgressInfo();
// 礼包是否购买的状态
info.setState(0);
user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap().put(-1,info);
LOGGER.info("七界秘宝初始化...{}",id);
}
@Override
public void onActivityEndOnMySelf(User user) throws Exception {
// 删除活动积分
int removeItemId = STableManager.getConfig(SQijieStage.class).get(0).getTreasureIntegral()[0];
int removeItemId = STableManager.getConfig(SQijieStage.class).get(1001).getTreasureIntegral()[0];
Item item = user.getItemManager().getItem(removeItemId);
if(item!=null){
int[][] cost = {{item.getItemId(), (int) item.getItemNum()}};
@ -81,19 +134,28 @@ public class SevenWorldActivity extends AbstractActivity {
throw new ErrorCodeException(ErrorCode.HAD_TAKE_REWARD);
}
SQijieTreasure treasure = STableManager.getConfig(SQijieTreasure.class).get(missionId);
CommonProto.Drop.Builder drop = null;
CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder();
// 未领取
if (progressInfo.getState() == ActivityType.WILL_TAKE && checkValue(user,missionId)){
drop = ItemUtil.drop(user, treasure.getReward(), BIReason.SEVEN_WORLD_TREASURE);
// 满足挑战,普通领取
ItemUtil.drop(user, treasure.getReward(), drop, BIReason.SEVEN_WORLD_TREASURE);
progressInfo.setState(ActivityType.HAD_TAKED);
// 购买礼包,完美领取
if (checkGift(user)){
ItemUtil.drop(user, treasure.getReward(), drop, BIReason.SEVEN_WORLD_TREASURE);
progressInfo.setState(ActivityType.FINISH_TAKED);
}
reportTakeActivityReward(user,treasure.getReward(),missionId);
}
// 完美领取
if (progressInfo.getState() == ActivityType.HAD_TAKED && checkGift(user)){
drop = ItemUtil.drop(user, treasure.getTreasureReward(), BIReason.SEVEN_WORLD_TREASURE);
ItemUtil.drop(user, treasure.getTreasureReward(), drop, BIReason.SEVEN_WORLD_TREASURE);
progressInfo.setState(ActivityType.FINISH_TAKED);
reportTakeActivityReward(user,treasure.getTreasureReward(),missionId);
}
if (drop.getItemlistCount() <= 0){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
// 更新数据库
mission.getActivityMissionMap().put(missionId, progressInfo);
// 发送奖励
@ -110,8 +172,7 @@ public class SevenWorldActivity extends AbstractActivity {
* @return
*/
private boolean checkGift(User user){
ReceiveWelfareBag bag = (ReceiveWelfareBag)user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap().get(GIFT);
return bag != null && bag.isOpen() && bag.isBought();
return user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap().get(-1).getState() == 1;
}
/**
@ -127,12 +188,8 @@ public class SevenWorldActivity extends AbstractActivity {
return false;
}
int[][] integral = treasure.getIntegral();
Item item = user.getItemManager().getItem(integral[0][0]);
if (item == null){
LOGGER.error("七界秘宝道具不存,uid:{},itemId:{}",user.getId(),integral[0][0]);
return false;
}
return item.getItemNum() >= integral[0][1];
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
return mission.getV() >= integral[0][1];
}
}

View File

@ -0,0 +1,33 @@
package com.ljsd.jieling.logic.activity.event;
/**
* @Author hj
* @Date 2021/9/17 15:00:01
* @Description:
* @Version 1.0
*/
public class SevenWorldIntegralEvent implements IEvent {
private int uid;
private int integral;
public SevenWorldIntegralEvent(int uid, int integral) {
this.uid = uid;
this.integral = integral;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public int getIntegral() {
return integral;
}
public void setIntegral(int integral) {
this.integral = integral;
}
}

View File

@ -1028,10 +1028,9 @@ public class ItemLogic {
user.getItemManager().removeItem(item.getId());
continue;
}
LOGGER.info("清理玩家道具uid:{},type:{},reason:{},item:{}",uid,type,reason,item.getId());
int[][] cost= new int[1][];
cost[0] = new int[]{item1.getItemId(),(int)item1.getItemNum()};
ItemUtil.itemCost(user,cost,reason,0);
LOGGER.info("清理玩家道具uid:{},type:{},reason:{},item:{}:{}",uid,type,reason,item1.getItemId(),item1.getItemNum());
int[][] cost= new int[][]{{item1.getItemId(),(int)item1.getItemNum()}};
ItemUtil.itemCost(user,cost,reason,-999);
}
}
}catch (Exception e){

View File

@ -11,6 +11,8 @@ import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SevenWorldIntegralEvent;
import com.ljsd.jieling.logic.dao.Hero;
import com.ljsd.jieling.logic.dao.TeamEnum;
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;
@ -26,8 +28,10 @@ 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.CBean2Proto;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.*;
import manager.STableManager;
import org.slf4j.Logger;
@ -35,6 +39,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import util.MathUtils;
import util.StringUtil;
@ -62,6 +67,16 @@ public class SevenWorldLogic {
return instance;
}
private static boolean end = false;
public static boolean isEnd() {
return end;
}
public static void setEnd(boolean end) {
SevenWorldLogic.end = end;
}
/**
*
* @param user
@ -99,12 +114,24 @@ public class SevenWorldLogic {
}
// 开关
boolean open = SevenWorldLogic.open(user);
if (!true){
if (!open){
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN,"功能未开启");
}
return user;
}
/**
*
* @param session
* @throws Exception
*/
public void sevenWorldInfoIndication(ISession session) throws Exception {
PlayerInfoProto.SevenWorldInfoRequest.Builder builder = PlayerInfoProto.SevenWorldInfoRequest.newBuilder();
builder.setTierId(0);
PlayerInfoProto.SevenWorldInfoResponse sevenWorldInfo = getSevenWorldInfo(session.getUid(), builder.build());
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.SevenWorldInfoIndication_VALUE,sevenWorldInfo,true);
}
/**
*
* @param uid
@ -159,7 +186,7 @@ public class SevenWorldLogic {
Integer relic = user.getPlayerInfoManager().getSevenWorldRelic().get(relicId);
// null表示遗物未解锁
if (relic == null){
SQijieHolyConfig config = STableManager.getConfig(SQijieHolyConfig.class).get(relic);
SQijieHolyConfig config = STableManager.getConfig(SQijieHolyConfig.class).get(relicId);
if (config == null){
throw new ErrorCodeException(ErrorCode.CFG_NULL,"遗物信息未找到");
}
@ -307,15 +334,30 @@ public class SevenWorldLogic {
ItemUtil.drop(user,stage.getReward(),drop,BIReason.SEVEN_WORLD_CHALLENGE);
// 星界奖励,有加成
int[][] jieLingReward = stage.getJielingReward();
// 奖励的拼接字符串
StringBuilder rewardStr = new StringBuilder();
for (int[] reward : jieLingReward) {
// 向上取整积分
int ceil = (int) Math.ceil(reward[1] * (buff / 10000));
reward[1] = reward[1]+ceil;
// 排行榜积分
if (reward[0] == 1241) {
if (isEnd()) {
// 规定时间不获得积分
continue;
}
// 排行榜添加积分
addRank(user.getId(),reward[1] + ceil);
}
rewardStr.append(reward[0]).append("#").append(reward[1] + ceil).append("|");
}
ItemUtil.drop(user,jieLingReward,drop,BIReason.SEVEN_WORLD_CHALLENGE);
// 排行榜添加积分
addRank(user.getId(),jieLingReward[1][1]);
// string转int二维数组
int[][] rewardMap = StringUtil.parseFiledInt2(rewardStr.substring(0, rewardStr.length() - 1));
ItemUtil.drop(user,rewardMap,drop,BIReason.SEVEN_WORLD_CHALLENGE);
// 七界秘宝积分,没有加成
ItemUtil.drop(user,new int[][]{stage.getTreasureIntegral()},drop,BIReason.SEVEN_WORLD_CHALLENGE);
// 事件监听
Poster.getPoster().dispatchEvent(new SevenWorldIntegralEvent(user.getId(),stage.getTreasureIntegral()[1]));
response.setDrop(drop);
}
@ -385,8 +427,12 @@ public class SevenWorldLogic {
*
*/
public void sendRankReward(){
if (!isTime()){
return;
}
// 排行榜
Set<ZSetOperations.TypedTuple<String>> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.SEVEN_WORLD_INTEGRAL_RANK,"",0,-1);
String crossRedisKey = RankContext.getRankEnum(RankEnum.CROSS_SEVEN_WORLD_RANK.getType()).getCrossRedisKey();
Set<ZSetOperations.TypedTuple<String>> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(crossRedisKey,"",0,-1,false);
// 排名
int rank = 1;
for (ZSetOperations.TypedTuple<String> tuple : range) {
@ -412,8 +458,19 @@ public class SevenWorldLogic {
}
rank++;
}
SevenWorldLogic.setEnd(true);
System.out.print("七界试炼活动结束,发奖完成...\n");
}
/**
* 2330
* @return
*/
private boolean isTime(){
int week = TimeUtils.getDayOfWeek();
int hour = TimeUtils.getHourOfDay();
int minute = TimeUtils.getMiunte();
return week == 7 && hour == 23 && minute == 30;
}
}

View File

@ -373,6 +373,9 @@ public class StoreLogic implements IEventHandler {
}
}
}
if(storeManager.getStoreInfoMap().containsKey(sStoreTypeConfig.getId())){
continue;
}
if(sStoreTypeConfig.getStoreOpenRule() == 7){
long startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(),ActivityType.OPEN_TYPE_SERVER,0, 1);

View File

@ -32,6 +32,7 @@ import com.ljsd.jieling.logic.help.HelpHeroLogic;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.question.QuestionLogic;
import com.ljsd.jieling.logic.rank.CrossRankManager;
import com.ljsd.jieling.logic.sevenworld.SevenWorldLogic;
import com.ljsd.jieling.logic.store.BuyGoodsNewLogic;
import com.ljsd.jieling.logic.store.StoreLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
@ -109,6 +110,12 @@ public class MinuteTask extends Thread {
e.printStackTrace();
LOGGER.error("Exception::=>{}",e.toString());
}
try {
SevenWorldLogic.getInstance().sendRankReward();
}catch (Exception e){
e.printStackTrace();
LOGGER.error("七界Exception::=>{}",e.toString());
}
try {
// 跨服分组
everyMondayZeroClockTask();

View File

@ -1033,6 +1033,10 @@ public class ItemUtil {
if(!sendTemToFront.isEmpty()){
MessageUtil.sendBagIndication(user.getId(),1,sendTemToFront,false);
}
if (subReason == -999){
// -999不算任务
return;
}
user.getUserMissionManager().onGameEvent(user,GameEvent.CONSUMER_MATERIAL,useItemMap);
Poster.getPoster().dispatchEvent(new UseItemEvent(user.getId(),useItemMap));
}