back_recharge
parent
ae0e068b35
commit
4289588f92
|
@ -38,15 +38,15 @@ public class SGlobalActivity implements BaseConfig {
|
|||
int time = sGlobalActivity.getTime();
|
||||
String startTime = sGlobalActivity.getStartTime();
|
||||
String endtime = sGlobalActivity.getEndtime();
|
||||
if(time == 1 ){
|
||||
if(time == ActivityType.OPEN_TYPE_TIME ){
|
||||
if("0".equals(endtime)){
|
||||
continue;
|
||||
}
|
||||
setStartTimeLong(TimeUtils.parseTimeToMiles(startTime,"YYYYMMdd hh:mm:ss"));
|
||||
sGlobalActivity.setStartTimeLong(TimeUtils.parseTimeToMiles(startTime,"YYYYMMdd hh:mm:ss"));
|
||||
continue;
|
||||
}
|
||||
setStartTimeLong(Long.parseLong(startTime));
|
||||
setStartTimeLong(Long.parseLong(endtime));
|
||||
sGlobalActivity.setStartTimeLong(Long.parseLong(startTime));
|
||||
sGlobalActivity.setEndTimeLong(Long.parseLong(endtime));
|
||||
}
|
||||
sGlobalActivityMap = config;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package com.ljsd.jieling.handler;
|
||||
|
||||
import com.ljsd.jieling.handler.map.MapLogic;
|
||||
import com.ljsd.jieling.logic.activity.ActivityLogic;
|
||||
import com.ljsd.jieling.logic.activity.ActivityType;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.netty.cocdex.PacketNetData;
|
||||
|
@ -45,10 +47,11 @@ public class GetPlayerInfoHandler extends BaseHandler{
|
|||
User user = UserManager.getUser(userId);
|
||||
// 需要隔天刷新的字段统一在这里处理
|
||||
if (TimeUtils.isOverTime(5, user.getPlayerInfoManager().getLoginTime())) {
|
||||
user.getPlayerInfoManager().setLoginTime(TimeUtils.now());
|
||||
MapLogic.getInstance().resetDayInfo(user);
|
||||
|
||||
//活动刷新
|
||||
ActivityLogic.getInstance().flushEveryDay(user);
|
||||
}
|
||||
user.getPlayerInfoManager().setLoginTime(TimeUtils.now());
|
||||
MapLogic.getInstance().checkIsInMap(user);
|
||||
Map<Integer, Integer> guidePoints = user.getPlayerInfoManager().getGuidePoints();
|
||||
List<CommonProto.NewPlayerGuidePoint> list = new ArrayList<>();
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.ljsd.jieling.config.SActivityRewardConfig;
|
|||
import com.ljsd.jieling.config.SGlobalActivity;
|
||||
import com.ljsd.jieling.logic.dao.ActivityManager;
|
||||
import com.ljsd.jieling.logic.dao.ActivityMission;
|
||||
import com.ljsd.jieling.logic.dao.PlayerManager;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
|
@ -12,6 +13,7 @@ import com.ljsd.jieling.protocols.MessageTypeProto;
|
|||
import com.ljsd.jieling.protocols.PlayerInfoProto;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.ljsd.jieling.util.TimeUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -24,6 +26,12 @@ public class ActivityLogic {
|
|||
|
||||
private Set<Integer> openActivityIds =new HashSet<>();
|
||||
|
||||
public void flushEveryDay(User user) {
|
||||
updateActivityMissionProgress(user, ActivityType.SevenLogin,1);
|
||||
checkActivityIsFinish(user);
|
||||
checkActivityOfUser(user);
|
||||
}
|
||||
|
||||
|
||||
public static class Instance {
|
||||
public final static ActivityLogic instance = new ActivityLogic();
|
||||
|
@ -34,7 +42,7 @@ public class ActivityLogic {
|
|||
Map<Integer, SGlobalActivity> sGlobalActivityMap = SGlobalActivity.getsGlobalActivityMap();
|
||||
for(SGlobalActivity sGlobalActivity:sGlobalActivityMap.values()){
|
||||
int time = sGlobalActivity.getTime();
|
||||
if(time ==3 ){
|
||||
if(time ==2 ){
|
||||
continue;
|
||||
}
|
||||
long startTime = sGlobalActivity.getTimeLong(0,1);
|
||||
|
@ -48,11 +56,14 @@ public class ActivityLogic {
|
|||
}
|
||||
openActivityIds.add(sGlobalActivity.getId());
|
||||
}
|
||||
}
|
||||
|
||||
public void newPlayerOpenActivityMission(User user){
|
||||
checkActivityOfUser(user);
|
||||
}
|
||||
|
||||
public void checkActivityOfUser(User user){
|
||||
long now = System.currentTimeMillis();
|
||||
long now = TimeUtils.now();
|
||||
ActivityManager activityManager = user.getActivityManager();
|
||||
Map<Integer, Integer> activityState = activityManager.getActivityState();
|
||||
Map<Integer, SGlobalActivity> sGlobalActivityMap = SGlobalActivity.getsGlobalActivityMap();
|
||||
|
@ -63,16 +74,20 @@ public class ActivityLogic {
|
|||
long userCreateTime = user.getPlayerInfoManager().getCreateTime();
|
||||
for(SGlobalActivity sGlobalActivity:sGlobalActivityMap.values()){
|
||||
int activityId = sGlobalActivity.getId();
|
||||
if(!openActivityIds.contains(activityId)){
|
||||
if(openActivityIds.contains(activityId)){
|
||||
continue;
|
||||
}
|
||||
int time = sGlobalActivity.getTime();
|
||||
if(time ==3 ){
|
||||
if(time ==ActivityType.OPEN_TYPE_ROLE ){
|
||||
long startTime = sGlobalActivity.getTimeLong(userCreateTime,1);
|
||||
long endTime = sGlobalActivity.getTimeLong(userCreateTime,2);
|
||||
if(now<startTime){
|
||||
continue;
|
||||
}
|
||||
if(endTime!=0 && now>endTime){
|
||||
activityState.put(activityId,ActivityType.CLOSE_STATE);
|
||||
continue;
|
||||
}
|
||||
activityManager.initAllActivityMission(activityId);
|
||||
}else{
|
||||
activityState.put(activityId,ActivityType.CLOSE_STATE);
|
||||
|
@ -99,19 +114,42 @@ public class ActivityLogic {
|
|||
ActivityManager activityManager = user.getActivityManager();
|
||||
ActivityMission activityMission = activityManager.getActivityMissionMap().get(activityId);
|
||||
Integer missionState = activityMission.getAllMissionStatus().get(missionId);
|
||||
Integer missionProgress = activityMission.getAllMissionProgress().get(missionId);
|
||||
if( null == missionState || missionState == ActivityType.HAD_TAKED){
|
||||
MessageUtil.sendErrorResponse(session,0,rewardResponseValue,"had taked");
|
||||
return;
|
||||
}
|
||||
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
|
||||
int[][] values = sActivityRewardConfig.getValues();
|
||||
if(sGlobalActivity.getType() == ActivityType.ChapterReward){
|
||||
|
||||
/* LevelDifficulty levelDifficulty = user.getLevelDifficultyManager().getLevelDifficultyInfosMap().get(values[0][0]);
|
||||
switch (sGlobalActivity.getType()){
|
||||
case ActivityType.ChapterReward:{
|
||||
/* LevelDifficulty levelDifficulty = user.getLevelDifficultyManager().getLevelDifficultyInfosMap().get(values[0][0]);
|
||||
if(levelDifficulty == null || levelDifficulty.getState()!= Global.FIGHT_CLEARANCE){
|
||||
MessageUtil.sendErrorResponse(session,0,rewardResponseValue,"not pass");
|
||||
return;
|
||||
}*/
|
||||
}
|
||||
break;
|
||||
case ActivityType.OnlineReward:{
|
||||
long now = TimeUtils.now();
|
||||
PlayerManager playerInfoManager = user.getPlayerInfoManager();
|
||||
long loginTime = playerInfoManager.getLoginTime();
|
||||
int limitTime = values[0][0];
|
||||
long remainTime = now - loginTime - limitTime * TimeUtils.ONE_MINUTE + missionProgress * TimeUtils.ONE_SECOND;
|
||||
if(now - loginTime - limitTime * TimeUtils.ONE_MINUTE + missionProgress * TimeUtils.ONE_SECOND<0){
|
||||
LOGGER.error("the uid={} remain time is={}ms,the require time is={}ms",uid,remainTime,limitTime * TimeUtils.ONE_MINUTE);
|
||||
MessageUtil.sendErrorResponse(session,0,rewardResponseValue,"time not");
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if(missionProgress<values[0][0]){
|
||||
LOGGER.error("the uid={} the misionId={},the missionProgress={},the require is={} ",uid,missionId,missionProgress,values[0][0]);
|
||||
MessageUtil.sendErrorResponse(session,0,rewardResponseValue,"time not");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
int[][] reward = sActivityRewardConfig.getReward();
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward);
|
||||
|
@ -155,4 +193,78 @@ public class ActivityLogic {
|
|||
MessageUtil.sendMessage(session,1,rewardResponseValue,build,true);
|
||||
|
||||
}
|
||||
|
||||
public void updateActivityMissionProgress(User user,int activityType,int count){
|
||||
ActivityManager activityManager = user.getActivityManager();
|
||||
Map<Integer, Integer> activityState = activityManager.getActivityState();
|
||||
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
|
||||
for(Map.Entry<Integer,Integer> item : activityState.entrySet()){
|
||||
Integer activityStatus = item.getValue();
|
||||
if(activityStatus != ActivityType.OPEN_STATE){
|
||||
continue;
|
||||
}
|
||||
Integer activityId= item.getKey();
|
||||
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
|
||||
int targetActivityType = sGlobalActivity.getType();
|
||||
if(targetActivityType != activityType){
|
||||
continue;
|
||||
}
|
||||
updateProgress(activityType,activityMissionMap.get(activityId),count);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateProgress(int activityType,ActivityMission activityMission,int count){
|
||||
Map<Integer, Integer> allMissionProgress = activityMission.getAllMissionProgress();
|
||||
int progress;
|
||||
switch (activityType){
|
||||
default:
|
||||
for (Map.Entry<Integer, Integer> item : allMissionProgress.entrySet()) {
|
||||
progress = item.getValue() + count;
|
||||
activityMission.updateMissionProgress(item.getKey(), progress);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void checkActivityIsFinish(User user){
|
||||
ActivityManager activityManager = user.getActivityManager();
|
||||
Map<Integer, Integer> activityState = activityManager.getActivityState();
|
||||
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
|
||||
for(Map.Entry<Integer,Integer> item : activityState.entrySet()){
|
||||
Integer activityStatus = item.getValue();
|
||||
if(activityStatus != ActivityType.OPEN_STATE){
|
||||
continue;
|
||||
}
|
||||
Integer activityId= item.getKey();
|
||||
checkActivityMissionFinishAndTaked(activityManager,activityId,activityMissionMap.get(activityId));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void checkActivityMissionFinishAndTaked(ActivityManager activityManager,int activityId,ActivityMission activityMission){
|
||||
Map<Integer, Integer> allMissionStatus = activityMission.getAllMissionStatus();
|
||||
boolean isAllTaked = true;
|
||||
for(Map.Entry<Integer,Integer> item : allMissionStatus.entrySet()){
|
||||
Integer missionStatus = item.getValue();
|
||||
if(missionStatus == ActivityType.WILL_TAKE){
|
||||
isAllTaked = false;
|
||||
}
|
||||
}
|
||||
if(isAllTaked){
|
||||
activityManager.updateActivityState(activityId,ActivityType.FINISH_STATE);
|
||||
}
|
||||
}
|
||||
|
||||
public int getInitActivityMissionProgress(int activityId){
|
||||
int defalutProgress = 0;
|
||||
switch (activityId){
|
||||
case ActivityType.SevenLogin:
|
||||
defalutProgress =1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return defalutProgress;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,8 +7,9 @@ public interface ActivityType {
|
|||
int FINISH_STATE =2;
|
||||
|
||||
int OPEN_TYPE_TIME = 1; // 活动开启类型:绝对时间
|
||||
int OPEN_TYPE_SERVER = 2; // 活动开启类型:开服时间
|
||||
int OPEN_TYPE_ROLE = 3; // 活动开启类型:创角时间
|
||||
int OPEN_TYPE_ROLE = 2; // 活动开启类型:创角时间
|
||||
int OPEN_TYPE_SERVER = 3; // 活动开启类型:开服时间
|
||||
|
||||
|
||||
|
||||
int WILL_TAKE = 0; //未领取
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.dao;
|
|||
|
||||
import com.ljsd.common.mogodb.MongoBase;
|
||||
import com.ljsd.jieling.config.SActivityRewardConfig;
|
||||
import com.ljsd.jieling.logic.activity.ActivityLogic;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -17,11 +18,16 @@ public class ActivityMission extends MongoBase {
|
|||
allMissionStatus.put(missionId,status);
|
||||
}
|
||||
|
||||
public void updateMissionProgress(int missionId,int progress){
|
||||
updateString("allMissionProgress."+missionId,progress);
|
||||
allMissionProgress.put(missionId,progress);
|
||||
}
|
||||
|
||||
public void initMissionInfo(int activityId){
|
||||
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(activityId);
|
||||
for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){
|
||||
allMissionStatus.put(sActivityRewardConfig.getId(), 0);
|
||||
allMissionProgress.put(sActivityRewardConfig.getId(), 0);
|
||||
allMissionProgress.put(sActivityRewardConfig.getId(), ActivityLogic.getInstance().getInitActivityMissionProgress(activityId));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ package com.ljsd.jieling.logic.dao;
|
|||
import com.ljsd.jieling.config.SGameSetting;
|
||||
import com.ljsd.jieling.config.SPlayerLevelConfig;
|
||||
import com.ljsd.jieling.db.mongo.MongoUtil;
|
||||
import com.ljsd.jieling.logic.activity.ActivityLogic;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.TimeUtils;
|
||||
|
@ -83,6 +84,7 @@ public class UserManager {
|
|||
Map<String, Hero> heroMap = heroManager.getHeroMap();
|
||||
TeamPosManager teamPosManager = user.getTeamPosManager();
|
||||
teamPosManager.addTeamOfInitPlayer(heroMap.values());
|
||||
ActivityLogic.getInstance().newPlayerOpenActivityMission(user);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -37,13 +37,18 @@ public class CombatLogic {
|
|||
int uid = session.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
PlayerManager playerInfoManager = user.getPlayerInfoManager();
|
||||
int offLineTime = (int)((System.currentTimeMillis() -playerInfoManager.getOffLineTime())/1000);
|
||||
int offLineTime = 0;
|
||||
AdventureManager adventureManager = user.getAdventureManager();
|
||||
Map<Integer, AdventureStateInfo> adventureStateInfoMap = adventureManager.getAdventureStateInfoMap();
|
||||
List<CommonProto.AdventureStateInfo> result = new ArrayList<>();
|
||||
CommonProto.Drop.Builder dropBuilder = calAdvenrureReward(user, false,0);
|
||||
boolean hasAdventure = false;
|
||||
for(AdventureStateInfo item : adventureStateInfoMap.values()){
|
||||
result.add(CBean2Proto.getAdventureStateInfo(item,item.getPosition()));
|
||||
hasAdventure =true;
|
||||
}
|
||||
if(hasAdventure){
|
||||
offLineTime = (int)((System.currentTimeMillis() -playerInfoManager.getOffLineTime())/1000);
|
||||
}
|
||||
FightInfoProto.GetAdventureStateInfoResponse response = FightInfoProto.GetAdventureStateInfoResponse.newBuilder().addAllAdventureStateInfoList(result).setDrop(dropBuilder.build()).setOutTime(offLineTime).
|
||||
build();
|
||||
|
@ -131,10 +136,12 @@ public class CombatLogic {
|
|||
//消耗道具全部加一遍基础奖励。
|
||||
public CommonProto.Drop.Builder calAdvenrureReward(User user, boolean isOnLine,int position) throws Exception {
|
||||
Map<int[], Float> tempDropRation = new HashMap<>();
|
||||
Map<int[], Float> onlineReward = new HashMap<>();
|
||||
AdventureManager adventureManager = user.getAdventureManager();
|
||||
Map<Integer, AdventureStateInfo> adventureStateInfoMap = adventureManager.getAdventureStateInfoMap();
|
||||
int now = (int)(System.currentTimeMillis()/1000);
|
||||
int adventureRefresh = SGameSetting.getGameSetting().getAdventureRefresh();
|
||||
int offLineTime = (int)(user.getPlayerInfoManager().getOffLineTime());
|
||||
for(AdventureStateInfo adventureStateInfoTmp:adventureStateInfoMap.values()){
|
||||
int positionTmp = adventureStateInfoTmp.getPosition();
|
||||
if(position!=0 && positionTmp!=position){
|
||||
|
@ -143,18 +150,32 @@ public class CombatLogic {
|
|||
int startTime = adventureStateInfoTmp.getStartTime();
|
||||
int times = (now - startTime)/adventureRefresh;
|
||||
int size = adventureStateInfoTmp.getHeroIds().size();
|
||||
int onlineTimesOfOffline=0;
|
||||
if(!isOnLine){
|
||||
onlineTimesOfOffline = (offLineTime - startTime)/adventureRefresh;
|
||||
}
|
||||
if(times>0){
|
||||
adventureStateInfoTmp.setStartTime(startTime+times*adventureRefresh);
|
||||
SAdventureConfig sAdventureConfig = SAdventureConfig.getSAdventureConfigByPosition(positionTmp);
|
||||
int leaveBonus = sAdventureConfig.getLeaveBonus();
|
||||
int maxTimes = leaveBonus * 3600 / adventureRefresh;
|
||||
if(!isOnLine){
|
||||
times = times>maxTimes?maxTimes:times;
|
||||
}
|
||||
int baseRewardGroup[] = sAdventureConfig.getBaseRewardGroup();
|
||||
float rewardRation = calRation(size,sAdventureConfig.getNumIncome());
|
||||
tempDropRation.put(baseRewardGroup,rewardRation * times);
|
||||
adventureManager.updateTemp(sAdventureConfig.getRandomRewardGroup(),rewardRation*times);
|
||||
if(!isOnLine){
|
||||
int reallyOfflineTims = times - onlineTimesOfOffline;
|
||||
if(reallyOfflineTims>0){
|
||||
reallyOfflineTims = reallyOfflineTims>maxTimes?reallyOfflineTims:times;
|
||||
tempDropRation.put(baseRewardGroup,rewardRation * reallyOfflineTims);
|
||||
adventureManager.updateTemp(sAdventureConfig.getRandomRewardGroup(),rewardRation*reallyOfflineTims);
|
||||
}
|
||||
if(onlineTimesOfOffline!=0){
|
||||
onlineReward.put(baseRewardGroup,rewardRation * onlineTimesOfOffline);
|
||||
}
|
||||
}else{
|
||||
onlineReward.put(baseRewardGroup,rewardRation * times);
|
||||
adventureManager.updateTemp(sAdventureConfig.getRandomRewardGroup(),rewardRation*times);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if(!isOnLine){
|
||||
|
@ -164,6 +185,9 @@ public class CombatLogic {
|
|||
}
|
||||
adventureManager.clearTemp();
|
||||
}
|
||||
if(!onlineReward.isEmpty()){
|
||||
ItemUtil.drop(user, onlineReward);
|
||||
}
|
||||
return ItemUtil.drop(user, tempDropRation);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,9 @@ import com.ljsd.jieling.db.redis.RedisUtil;
|
|||
import com.ljsd.jieling.exception.ErrorCode;
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.logic.OnlineUserManager;
|
||||
import com.ljsd.jieling.logic.activity.ActivityLogic;
|
||||
import com.ljsd.jieling.logic.activity.ActivityType;
|
||||
import com.ljsd.jieling.logic.dao.PlayerManager;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.netty.cocdex.PacketNetData;
|
||||
|
@ -20,6 +23,7 @@ import com.ljsd.jieling.protocols.MessageTypeProto;
|
|||
import com.ljsd.jieling.session.GameSession;
|
||||
import com.ljsd.jieling.util.MathUtils;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.ljsd.jieling.util.TimeUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -229,7 +233,11 @@ public class ProtocolsManager implements ProtocolsAbstract {
|
|||
try {
|
||||
OnlineUserManager.userOffline(session.getUid());
|
||||
User user = UserManager.getUser(session.getUid());
|
||||
user.getPlayerInfoManager().setOffLineTime(System.currentTimeMillis());
|
||||
PlayerManager playerInfoManager = user.getPlayerInfoManager();
|
||||
playerInfoManager.setOffLineTime(TimeUtils.now());
|
||||
long onlineTime = playerInfoManager.getOffLineTime() - playerInfoManager.getLoginTime();
|
||||
//更新在线时长
|
||||
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.OnlineReward,(int)(onlineTime/TimeUtils.ONE_SECOND));
|
||||
MongoUtil.getInstence().lastUpdate();
|
||||
// 下线处理的逻辑需要添加在这里
|
||||
} catch (Exception e) {
|
||||
|
|
Loading…
Reference in New Issue