Merge branch 'master_test_gn' of http://60.1.1.230/backend/jieling_server into master_test_gn

# Conflicts:
#	serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java
#	serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java
yuanshuai 2022-01-03 11:48:04 +08:00
commit d814ecb635
8 changed files with 268 additions and 9 deletions

View File

@ -114,6 +114,9 @@ public class GlobalDataManaager implements IManager {
int id = sGlobalSystemConfig.getId();
long systemOpenLong = sGlobalSystemConfig.getSystemOpenLong();
long systemEndLong = sGlobalSystemConfig.getSystemEndLong();
if (now < systemOpenLong || now > systemEndLong) {
continue;
}
if(openTimeOfFuntionCache.containsKey(id)){
//强制关闭
if(now<systemOpenLong || (now>systemEndLong)){
@ -154,8 +157,8 @@ public class GlobalDataManaager implements IManager {
long mod = passTims % (diffTime + seasonInterval); // 每个周期的时间+间隔时间
if(mod < diffTime ){//新的周期开启 一轮周期的时间
//开服几天后开启
int[]limitDay = sGlobalSystemConfig.getIfOpen();
if(getServerOpenTimeCompareSpecialTimeResult()){
int[]limitDay = sGlobalSystemConfig.getIfOpen();
if(limitDay.length > 0){
if( limitDay[0] == 2 ){
long day = TimeUtils.getGapDaysByTwoTime(GameApplication.serverConfig.getOpenTime(),TimeUtils.getTimeStamp2(TimeUtils.now()))+1;
@ -165,9 +168,18 @@ public class GlobalDataManaager implements IManager {
}
}
}
openList.add(id);
//计算开启时间、关闭时间
long turns = passTims / ((diffTime + seasonInterval));
if (limitDay.length > 0) {
// 达到指定轮数,不再开启该功能
if (limitDay[0] == 3) {
if (turns > limitDay[1]) {
continue;
}
}
}
openList.add(id);
long addTim = turns * (diffTime + seasonInterval);
long timeOpenOfThis =seasonOpenLong+addTim;
long timeCloseOfThis =seasonEndLong+addTim;

View File

@ -116,7 +116,8 @@ public class ActivityLogic implements IEventHandler{
ActivityLogic.getInstance().resumeActivity(user, ActivityType.LUCK_WHEEL);
ActivityLogic.getInstance().resumeActivity(user, ActivityType.LUCK_WHEEL_ADVANCE);
ActivityLogic.getInstance().resumeActivity(user,ActivityType.TREASURE);
//每日特惠礼包开启的活動刷新
ActivityLogic.getInstance().resumeActivity(user,ActivityType.DAILY_PREFERENTIAL_GIFT);
Set<Integer> upFiveActivityTypes = new HashSet<>();
upFiveActivityTypes.add(ActivityType.SevenLogin);
upFiveActivityTypes.add(ActivityType.RECHARGE_SUM_DAY);
@ -175,6 +176,9 @@ public class ActivityLogic implements IEventHandler{
if (time == ActivityType.OPEN_TYPE_ROLE) {
continue;
}
if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){
continue;
}
if(time == ActivityType.OPEN_TYPE_MONTHS){
//now = 当前是开服第几个月
}
@ -297,6 +301,9 @@ public class ActivityLogic implements IEventHandler{
* @param activityId
*/
public void initMissionInfo(ActivityMission activityMission,int activityId){
if(activityId == ActivityType.DAILY_PREFERENTIAL_GIFT){
return;
}
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(activityId);
if(sActivityRewardConfigs == null){return;}
for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){
@ -438,6 +445,9 @@ public class ActivityLogic implements IEventHandler{
}
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) {
if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){
continue;
}
int activityId = sGlobalActivity.getId();
////天尊降世活动特殊处理
if (activityMissionMap.containsKey(42)){
@ -622,12 +632,18 @@ public class ActivityLogic implements IEventHandler{
if (sGlobalActivity.getIsSaving()==0 && activityStatus != ActivityType.OPEN_STATE) {
continue;
}
int startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000);
int endTime;
if(sGlobalActivity.getGapTime()!=0){
endTime = (int) (ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, sGlobalActivity.getGapTime()) / 1000);
int startTime = 0;
int endTime = 0;
if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){
startTime=(int)(activityState.getValue().getCreatTime()/1000);
endTime = startTime+604800;
}else{
endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000);
startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000);
if(sGlobalActivity.getGapTime()!=0){
endTime = (int) (ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, sGlobalActivity.getGapTime()) / 1000);
}else{
endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000);
}
}
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId());
if(abstractActivity==null){

View File

@ -104,11 +104,12 @@ public interface ActivityType {
int TRANSFORMATION_DRAW_CARD = 86;//方寸寻宝
int CONTINUOUS_GIFT_NEW = 87;//新连续礼包
int ARENA_RANK_EXPERIMENT = 88;//竞技试炼
int DAILY_PREFERENTIAL_GIFT = 89;//每日特惠礼包开启的活动
int NEW_RECHARGE_SUM_DAY = 90;//新积天豪礼
int SPECIAL_MONSTER_RANDOM_ACTIVITY = 100;//灵兽宝阁活动
int SPECIAL_MONSTER_GIFT_ACTIVITY = 101;//灵兽礼包
int NEW_PLAYER_SHOP = 91; // 新人商城
int NEW_GENERAL_ATTACK = 200;//新将来袭

View File

@ -95,7 +95,9 @@ public enum ActivityTypeEnum {
CONTINUOUS_GIFT_NEW(ActivityType.CONTINUOUS_GIFT_NEW,ContinuousGiftActivity::new),//新连续礼包
ARENA_RANK_EXPERIMENT(ActivityType.ARENA_RANK_EXPERIMENT,ArenaRankActivity::new),//竞技试炼
NEW_RECHARGE_SUM_DAY(ActivityType.NEW_RECHARGE_SUM_DAY,NewRechargeSumDayActivity::new),//新积天豪礼
DAILY_PREFERENTIAL_GIFT(ActivityType.DAILY_PREFERENTIAL_GIFT,DailyPreferentialGiftActivity::new),
SUMMON_TREASURE(ActivityType.SUMMON_TREASURE,SummonTreasureActivity::new),//招募秘宝
NEW_PLAYER_SHOP(ActivityType.NEW_PLAYER_SHOP, NewPlayerShopActivity::new)
;
private int type;

View File

@ -0,0 +1,192 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.jbean.ActivityManager;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SActivityRewardConfig;
import config.SErrorCodeEerverConfig;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import util.StringUtil;
import util.TimeUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*/
public class DailyPreferentialGiftActivity extends AbstractActivity{
public DailyPreferentialGiftActivity(int id) {
super(id);
}
@Override
public void initActivity(User user) throws Exception{
ActivityMission mission = new ActivityMission();
// 初始化阶段奖励
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
ActivityLogic.getInstance().initOtherMission(mission, sActivityRewardConfigs.stream().mapToInt(n->n.getId()).boxed().collect(Collectors.toList()));
//mission.setV((int)(TimeUtils.getAppointTime(0)/1000)+3600*24*7);
mission.setV(0);
mission.setCreatTime(TimeUtils.getAppointTime(0));
user.getActivityManager().getActivityMissionMap().put(id, mission);
//ActivityMission activityMission =user.getActivityManager().getActivityMissionMap().get(this.id);
//sendActivityProgress(user, activityMission, null);
ActivityLogic.getInstance().sendActivityInfo(user, id);
}
@Override
public void onEvent(IEvent event) throws Exception{
}
/**
*7
*/
@Override
public void onResume(User user) throws Exception {
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
if(mission == null){
return;
}
//long timeTemp = mission.getCreatTime();
//开启礼包的第几天
int day = (int)TimeUtils.getGapDaysByTwoTime(TimeUtils.getTimeStamp2(mission.getCreatTime()),TimeUtils.getTimeStamp2(TimeUtils.now()))+1;
List<SActivityRewardConfig> rewardConfig = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
if(rewardConfig == null){
return;
}
Map<Integer,Integer> rewardMap = new HashMap();
for(SActivityRewardConfig config:rewardConfig){
for(int[]reward:config.getReward()){
if(rewardMap.containsKey(reward[0])){
rewardMap.put(reward[0],rewardMap.get(reward[0])+reward[1]);
}else{
rewardMap.put(reward[0],reward[1]);
}
}
}
String title = SErrorCodeEerverConfig.getI18NMessage("sevendaycard_mail_title");
String content = SErrorCodeEerverConfig.getI18NMessage("sevendaycard_mail_txt");
if(day >7){
//第八天登錄 發送所有獎勵 TODO
//下线当天的活动处理
sendSpecailMail(user,title,content,mission);
for(int i = mission.getV()+1;i <= 7;i++){
MailLogic.getInstance().sendMail(user.getId(), title, content, StringUtil.parseArrayToString(rewardMap.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()})
.toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
LOGGER.info("11:"+i);
}
//刪除數據
user.getActivityManager().getActivityMissionMap().remove(id);
ISession session = OnlineUserManager.sessionMap.get(user.getId());
if(session!=null){
PlayerInfoProto.SpecailActivityUpateIndication.Builder indication = PlayerInfoProto.SpecailActivityUpateIndication.newBuilder();
indication.addCloseActivityId(ActivityType.DAILY_PREFERENTIAL_GIFT);
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.SPECIAL_ACTIVITY_UPDATE_INDICATION_VALUE, indication.build(), true);
}
return;
}else{
//下线当天的活动处理
sendSpecailMail(user,title,content,mission);
for(int i = mission.getV()+1;i<day ;i++){
MailLogic.getInstance().sendMail(user.getId(), title, content, StringUtil.parseArrayToString(rewardMap.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()})
.toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
LOGGER.info("22:"+i);
}
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
if(sActivityRewardConfigs == null){return;}
for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){
ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo();
//activityProgressInfo.setProgrss(ActivityLogic.getInstance().getInitActivityMissionProgress(id));
activityProgressInfo.setState(0);
mission.getActivityMissionMap().put(sActivityRewardConfig.getId(), activityProgressInfo);
}
ActivityLogic.getInstance().initMissionInfo(mission,id);
if(day > mission.getV()){
mission.setV(day-1);
}
sendActivityProgress(user, mission, null);
}
}
//当天为领取特殊处理
public static void sendSpecailMail( User user,String title,String content, ActivityMission mission ){
Map<Integer, ActivityProgressInfo> progressMap = mission.getActivityMissionMap();
Map<Integer,Integer> rewardMap1 = new HashMap();
for (Map.Entry<Integer, ActivityProgressInfo> progress:progressMap.entrySet()){
if(progress.getValue().getState() == ActivityType.WILL_TAKE){
SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(progress.getKey());
if(sActivityRewardConfig == null){
continue;
}
for(int[]reward:sActivityRewardConfig.getReward()){
if(rewardMap1.containsKey(reward[0])){
rewardMap1.put(reward[0],rewardMap1.get(reward[0])+reward[1]);
}else{
rewardMap1.put(reward[0],reward[1]);
}
}
}
}
if(rewardMap1.size()>0){
mission.setV(mission.getV()+1);
MailLogic.getInstance().sendMail(user.getId(), title, content, StringUtil.parseArrayToString(rewardMap1.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()})
.toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
}
}
@Override
public boolean takeReward(ISession session, int missionId) throws Exception{
User user = UserManager.getUser(session.getUid());
SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId);
if (sActivityRewardConfig == null || sActivityRewardConfig.getActivityId() != id) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
ActivityManager activityManager = user.getActivityManager();
ActivityMission activityMission = activityManager.getActivityMissionMap().get(id);
if (activityMission == null){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId);
if (activityProgressInfo == null || activityProgressInfo.getState() == ActivityType.HAD_TAKED) {
throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取"));
}
int day = (int)TimeUtils.getGapDaysByTwoTime(TimeUtils.getTimeStamp2(activityMission.getCreatTime()),TimeUtils.getTimeStamp2(TimeUtils.now()));
//if(activityMission.getV()<day+1 && day<=7){
if(day<7){
int[][] reward = sActivityRewardConfig.getReward();
activityMission.setV(day+1);
checkAndSetProgress(activityMission, activityProgressInfo, missionId);
sendActivityProgress(session, activityMission, null);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD);
reportTakeActivityReward(user,reward,missionId);
PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true);
return true;
}
return false;
}
}

View File

@ -0,0 +1,29 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.logic.activity.event.GoldRefreshEvent;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.dao.root.User;
class NewPlayerShopActivity extends AbstractActivity {
public NewPlayerShopActivity(int id) {
super(id);
// Poster.getPoster().listenEvent(this, UserOnlineEvent.class);
Poster.getPoster().listenEvent(this, GoldRefreshEvent.class);
}
@Override
public void initActivity(User user) throws Exception {
// notifyClient(user, ids);
}
@Override
public void onEvent(IEvent event) throws Exception {
}
}

View File

@ -410,6 +410,11 @@ public class BuyGoodsNewLogic {
WeekCardLogic.getInstance().buyWeekCard(user,config.getId());
WeekCardLogic.getInstance().sendWeekCardInitInfo(session);
}
//礼包开启活动
if(type ==GiftGoodsType.DailyPreferentialGift){
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(ActivityType.DAILY_PREFERENTIAL_GIFT);
abstractActivity.initActivity(user);
}
if(drop!=null&&session!=null){
PlayerInfoProto.DirectBuyIndication build = PlayerInfoProto.DirectBuyIndication.newBuilder().setDrop(drop).build();
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.DIRECT_BUY_GOODS_INDICATION_VALUE,build,true);

View File

@ -14,5 +14,7 @@ public interface GiftGoodsType {
int SUN_LONG = 11; //豪华基金
int SKY_TREASURE = 12; //天宫秘宝
int ENDLESS_TREASURE = 14;//无尽秘宝
int DailyPreferentialGift = 17 ;//每日特惠礼包
}