Merge branch 'master_test_gn' into master_test_gn_lifeGrid

# Conflicts:
#	serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java
back_recharge
yuanshuai 2021-12-23 09:53:52 +08:00
commit 9b545e5eea
41 changed files with 1060 additions and 140 deletions

View File

@ -2,7 +2,7 @@ package com.ljsd.jieling.core;
public interface GlobalsDef {
String DEFAULT_NAME = "无名妖灵师";
int VERSION_CODE=4;//后端兼容版本号
int VERSION_CODE = 5;//后端兼容版本号
int MAP_MISSION_RETURN = -9999;
int MAP_MISSION_FAILURE = -10000;
@ -21,6 +21,10 @@ public interface GlobalsDef {
int addReason = 0;
int subReason = 1;
int LUOFUZHENG_MONEY = 1207; // 罗浮争锋道具
int FIVE_STAR_ITEM = 12059; // 5星万能将魂道具 ID
int BATTLING = -1;
int BREAK_TYPE = 1; //1突破
@ -73,6 +77,8 @@ public interface GlobalsDef {
int EXPLORE_MAP_DIGGLE_TYPE =4;
int EXPLORE_MAP_ACTION_POWER_RORMULA_TYPE =5;
int WUJINGMIBAO_STAR = 5; // 无尽秘宝 英雄需要的星级
int MUST_BE = -1;

View File

@ -85,8 +85,8 @@ public class AreaManager {
serverIds.add(masterServerId);
serverIds.addAll(serverAreaInfo.getSlaveAreaIds());
}
serverArenaInfoManagerCache = serverArenaInfoManager;
}
serverArenaInfoManagerCache = serverArenaInfoManager;
}
} catch (Exception e) {
LOGGER.error("the exception {}", e);

View File

@ -181,6 +181,8 @@ public enum ErrorCode implements IErrorCode {
SHOP_XIA_JIA(150,"商品已下架"),
SHOP_COLSE(151,"商店已关闭"),
SHOP_NO_ITEM(152,"商品不存在"),
HERO_RETURN_ONLY_LEVEL_ONE(153,"只有1级的神将才可回退请先进行归元"),
HERO_RETURN_CAN_NOT(154,"此神将不可回退"),
GUILD_NOT_AUTHORITY(300,"账号因错误发言导致相关功能封禁中,操作失败"),

View File

@ -176,6 +176,8 @@ public interface BIReason {
int ENDLESS_TREASURE_REWARD = 100;//无尽秘宝获得
int ENDLESS_RESET = 101;//无尽重置获得
int HERO_RETURN = 102;// 神将回退
int ITEM_RETURN = 103;// 罗浮晶石转化逐胜徽章
int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级
int SECRETBOX_CONSUME = 1001;//秘盒抽卡

View File

@ -39,6 +39,7 @@ public interface GlobalItemType {
int TRANSFORMATION_CARD = 29;//化身卡
int TRUMP_CHIP=30;//法宝碎片(法宝聚灵使用)
int LIFE_STONE=31;//命石
int HOOK_PROP=32;//挂机奖励资源道具
//物品使用类型
int NO_USE = 0 ; //不使用
int RANDOM_USE = 1; // 随机使用

View File

@ -18,6 +18,7 @@ import com.ljsd.jieling.logic.activity.fourChallenge.FourChallengeLogic;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.GlobalSystemControl;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.logic.question.QuestionLogic;
@ -172,6 +173,69 @@ public class GetPlayerInfoHandler extends BaseHandler{
if (playerInfoManager.getVersionCode() < 4) {
user.getStoreManager().removeStoreInfo(17);
}
// 升星配方调整 涉及到线上补偿,上线时根据玩家队伍列表中用拥有的各升星过的神将数量进行补偿
if (playerInfoManager.getVersionCode() < 5) {
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
Map<Integer, Integer> hasHeroMap = new TreeMap<>();
for (Hero value : heroMap.values()) {
if (value.getStar() == 6) {
if (hasHeroMap.containsKey(6)) {
hasHeroMap.put(6, hasHeroMap.get(6) + 1);
} else {
hasHeroMap.put(6, 1);
}
} else if (value.getStar() == 7) {
if (hasHeroMap.containsKey(7)) {
hasHeroMap.put(7, hasHeroMap.get(7) + 1);
} else {
hasHeroMap.put(7, 1);
}
} else if (value.getStar() == 8) {
if (hasHeroMap.containsKey(8)) {
hasHeroMap.put(8, hasHeroMap.get(8) + 1);
} else {
hasHeroMap.put(8, 1);
}
} else if (value.getStar() == 9) {
if (hasHeroMap.containsKey(9)) {
hasHeroMap.put(9, hasHeroMap.get(9) + 1);
} else {
hasHeroMap.put(9, 1);
}
} else if (value.getStar() == 10) {
if (hasHeroMap.containsKey(10)) {
hasHeroMap.put(10, hasHeroMap.get(10) + 1);
} else {
hasHeroMap.put(10, 1);
}
} else if (value.getStar() == 11) {
if (hasHeroMap.containsKey(11)) {
hasHeroMap.put(11, hasHeroMap.get(11) + 1);
} else {
hasHeroMap.put(11, 1);
}
}
}
if (!hasHeroMap.isEmpty()) {
StringBuilder stringBuilder = new StringBuilder();
String txtStart = SErrorCodeEerverConfig.getI18NMessage("starcomposechange_mail_txt_start");
stringBuilder.append(txtStart);
int totalCount = 0;
for (Map.Entry<Integer, Integer> entry : hasHeroMap.entrySet()) {
int count = entry.getValue() * map.getOrDefault(entry.getKey(), 0);
totalCount += count;
String txt = SErrorCodeEerverConfig.getFormatMessage("starcomposechange_mail_txt_" + entry.getKey(), new Object[]{entry.getValue(), count});
stringBuilder.append(txt);
}
String txtEnd = SErrorCodeEerverConfig.getFormatMessage("starcomposechange_mail_txt_end", new Object[]{totalCount});
stringBuilder.append(txtEnd);
String title = SErrorCodeEerverConfig.getI18NMessage("starcomposechange_mail_title");
MailLogic.getInstance().sendMail(user.getId(), title, stringBuilder.toString(), GlobalsDef.FIVE_STAR_ITEM + "#" + totalCount, TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
}
}
playerInfoManager.setVersionCode(GlobalsDef.VERSION_CODE);
}
// 处理玩家旧头像框,兼容,一个玩家只执行一次
@ -278,6 +342,16 @@ public class GetPlayerInfoHandler extends BaseHandler{
}
}
private static Map<Integer, Integer> map = new HashMap<>(6);
{
map.put(6, 4);
map.put(7, 4);
map.put(8, 8);
map.put(9, 12);
map.put(10, 28);
map.put(11, 40);
}
/**
*
* @param user

View File

@ -21,11 +21,15 @@ public class HeroReturnHandler extends BaseHandler<HeroInfoProto.HeroReturnReque
@Override
public void processWithProto(ISession iSession, HeroInfoProto.HeroReturnRequest proto) throws Exception {
// 验证是否可以使用功能,神将归元
boolean useFunction = HeroLogic.getInstance().isUseFunction(iSession.getUid(), HongMengFunctionEnum.HERO_BACK_TO_BEGIN.getPropertyId(), proto.getHeroId());
if (!useFunction){
throw new ErrorCodeException(ErrorCode.HONGMENG_ING);
if (proto.getType() == 0) {
// 验证是否可以使用功能,神将归元
boolean useFunction = HeroLogic.getInstance().isUseFunction(iSession.getUid(), HongMengFunctionEnum.HERO_BACK_TO_BEGIN.getPropertyId(), proto.getHeroId());
if (!useFunction){
throw new ErrorCodeException(ErrorCode.HONGMENG_ING);
}
HeroLogic.getInstance().heroBack(iSession,proto.getHeroId());
} else {
HeroLogic.getInstance().heroReturn(iSession,proto.getHeroId());
}
HeroLogic.getInstance().heroBack(iSession,proto.getHeroId());
}
}

View File

@ -2,10 +2,21 @@ package com.ljsd.jieling.handler;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.logic.dao.Item;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.hero.HongMengFunctionEnum;
import com.ljsd.jieling.logic.item.ItemLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ItemMap;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import com.sun.javafx.collections.MappingChange;
import config.SItem;
import config.SMainLevelConfig;
import config.SRewardGroup;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
@ -14,7 +25,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class UseAndPriceItemHandler extends BaseHandler<PlayerInfoProto.UseAndPriceItemRequest> {
@ -55,8 +68,64 @@ public class UseAndPriceItemHandler extends BaseHandler<PlayerInfoProto.UseAndPr
ItemLogic.getInstance().decomposeJewel(iSession,equipIdsList);
}else if(type==6){
ItemLogic.getInstance().useItem(iSession,itemList,useAndPriceItemRequest.getItemId());
}else{
}else if (type==7){//资源包 可以获取指定挂机奖励
int uid = iSession.getUid();
User user = UserManager.getUser(uid);
int itemId=useAndPriceItemRequest.getItemsList().get(0).getItemId();
SItem sItem=SItem.getsItemMap().get(itemId);
if (user.getPlayerInfoManager().getLevel()<sItem.getUseLevel()){
LOGGER.error("等级不足");
throw new ErrorCodeException(ErrorCode.HANDLE_FAILED);
}
int useNum=(int)useAndPriceItemRequest.getItemsList().get(0).getItemNum();
Map<Integer,Integer>costMap=new HashMap<>();
costMap.put(itemId,useNum);
int[][]rewardArr=sItem.getUseGain();
boolean isCost= ItemUtil.itemCost(user, costMap, BIReason.USER_ITEM, 0);
if (!isCost){
LOGGER.error("资源包道具消耗失败");
throw new ErrorCodeException(ErrorCode.HANDLE_FAILED);
}
long[][]dropArr=useItemGetHookReward(user,rewardArr,useNum);
ItemUtil.drop(user,dropArr,BIReason.USER_ITEM);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropArr, BIReason.USER_ITEM);
ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, drop);
}
else{
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
}
/**
* 使
* @param user
* @param itemDropTime
* @return
* @throws ErrorCodeException
*/
public long[][] useItemGetHookReward(User user, int[][] itemDropTime,long useNum)throws ErrorCodeException{
long[][]dropArr=new long[itemDropTime.length][2];
int index=0;
for (int i = 0; i < itemDropTime.length; i++) {
int itemId=itemDropTime[i][0];
int dropRatio=itemDropTime[i][1];
ItemMap itemObj=new ItemMap();
int fightId = user.getMainLevelManager().getFightId();
SMainLevelConfig targetMainLevelConfig = SMainLevelConfig.config.get(fightId);
int[] randomRewardMin = targetMainLevelConfig.getRandomRewardMin();
int[] randomReward = targetMainLevelConfig.getRandomReward();
ItemUtil.combineRewardByMainLine(user,false, true, randomRewardMin, dropRatio,itemObj,BIReason.ADVENTURE_BASE_REWARD);
ItemUtil.combineRewardByMainLine(user,true, false,randomReward, dropRatio,itemObj,BIReason.ADVENTURE_RANDOM_REWARDD);
if (itemObj.getItemMap().containsKey(itemId)){
dropArr[index][0]=itemId;
dropArr[index][1]=itemObj.getItemMap().get(itemId)*useNum;
index++;
}
}
return dropArr;
}
}

View File

@ -147,6 +147,7 @@ public class JourneyMap {
.setFirst(v.isFirstPass()?1:0)
.build();
response.addInfos(info);
response.setFinishNum(user.getMapManager().getJourneyFinishNum());
});
MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true);
}
@ -468,6 +469,8 @@ public class JourneyMap {
// 逍遥游最终奖励埋点
if (pathType == 7){
ReportUtil.onReportEvent(user, ReportEventEnum.COMPLETE_TRAVEL.getType(), pathType, mapId);
int finishNum=user.getMapManager().getJourneyFinishNum()+1;
user.getMapManager().setJourneyFinishNum(finishNum);
}
}

View File

@ -2133,6 +2133,7 @@ public class MapLogic {
* 3鸿6-15
* 4
* 55-10
* 65-10
* 7
*
* @param user
@ -2170,9 +2171,18 @@ public class MapLogic {
case 4: {
int num = 0;
Map<Integer, SEquipConfig> equipConfig = STableManager.getConfig(SEquipConfig.class);
for (Map.Entry<Integer, Long> entry : user.getItemManager().getEquipBookMap().entrySet()) {
if (equipConfig.get(entry.getKey()).getStar() >= ints[1]) {
num++;
for (Map.Entry<Integer, Item> equipEntry : user.getItemManager().getItemMap().entrySet()) {
if (SItem.getsItemMap().get(equipEntry.getKey()).getItemType() == 3) {
if (equipConfig.get(equipEntry.getKey()).getStar() >= ints[1]) {
num+=equipEntry.getValue().getItemNum();
}
}
}
for (Map.Entry<String, Hero> stringHeroEntry : user.getHeroManager().getHeroMap().entrySet()) {
for (Map.Entry<Integer, Integer> entry : stringHeroEntry.getValue().getEquipByPositionMap().entrySet()) {
if (equipConfig.get(entry.getValue()).getStar() >= ints[1]) {
num++;
}
}
}
if (num < ints[2]) {
@ -2186,11 +2196,20 @@ public class MapLogic {
}
break;
}
case 6:{
if (user.getMapManager().getJourneyFinishNum() < ints[1]) {
return false;
}
break;
}
case 7: {
int num = 0;
for (Map.Entry<String, Hero> stringHeroEntry : user.getHeroManager().getHeroMap().entrySet()) {
if (stringHeroEntry.getValue().getOriginalLevel()>= ints[1]) {
num++;
if (num >= ints[2]) {
break;
}
}
}
if (num < ints[2]) {

View File

@ -122,6 +122,8 @@ public class MapManager extends MongoBase {
private Map<Integer,PathInfo> journeyInfo = new HashMap<>();
private int journeyFinishNum;//逍遥游通关次数
private int currentJourneyId;
private EndlessTreasureReward endlessTreasureReward = new EndlessTreasureReward();
@ -878,6 +880,15 @@ public class MapManager extends MongoBase {
updateString("journeyInfo",journeyInfo);
}
public int getJourneyFinishNum() {
return journeyFinishNum;
}
public void setJourneyFinishNum(int journeyFinishNum) {
this.journeyFinishNum = journeyFinishNum;
updateString("journeyFinishNum",journeyFinishNum);
}
public int getCurrentJourneyId() {
return currentJourneyId;
}

View File

@ -1,6 +1,10 @@
package com.ljsd.jieling.handler.store;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.activity.event.NewWelfareEvent;
import com.ljsd.jieling.logic.activity.event.NewWelfareTypeEnum;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.store.StoreLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
@ -23,6 +27,9 @@ public class BuyStoreItemHandler extends BaseHandler {
PlayerInfoProto.BuyStoreItemRequest buyStoreItemRequest
= PlayerInfoProto.BuyStoreItemRequest.parseFrom(netData.parseClientProtoNetData());
CommonProto.Drop drop = StoreLogic.buyStoreItem(iSession.getUid(), buyStoreItemRequest.getStoreId(), buyStoreItemRequest.getItemId(), buyStoreItemRequest.getItemNum());
if (buyStoreItemRequest.getItemId()==1106){
Poster.getPoster().dispatchEvent(new NewWelfareEvent(UserManager.getUser(iSession.getUid()), NewWelfareTypeEnum.BUY_1106.getType(),0));
}
int msgId = MessageTypeProto.MessageType.BUY_STORE_ITEM_RESPONSE_VALUE;
PlayerInfoProto.BuyStoreItemResponse builder = PlayerInfoProto.BuyStoreItemResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(iSession, 1,msgId, builder, true);

View File

@ -115,6 +115,8 @@ public enum ReportEventEnum {
//七界试炼
SEVENWORLDS_TRIAL(77 ,"sevenworlds_Trial",CommonEventHandler.getInstance(),new String[]{"sevenworlds_Trial_type","sevenworlds_Trial_id","combat_results","reward_nums_list"}),
HERO_RETURN(78,"hero_return", CommonEventHandler.getInstance(),new String[]{"hero_id","hero_level","hero_quality","reward_list","reward_nums_list"}),
VIP_LEVEL_UP(100,"", new VipLevelUpEventHandler(),new String[]{""});
private int type;

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

@ -23,8 +23,6 @@ import com.ljsd.jieling.util.MessageUtil;
import config.SActivityRewardConfig;
import config.SErrorCodeEerverConfig;
import config.SGlobalActivity;
import config.SSpiritAnimalSummon;
import manager.STableManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rpc.protocols.CommonProto;
@ -395,18 +393,20 @@ public abstract class AbstractActivity implements IActivity, IEventHandler {
* @param filterMissId miss
*/
public void sendActivityProgress(ISession session, ActivityMission activityMission, Set<Integer> filterMissId) {
if (session == null) {
return;
}
PlayerInfoProto.ActivityUpateProgressIndication.Builder builder = PlayerInfoProto.ActivityUpateProgressIndication.newBuilder();
if (session != null) {
User user = UserManager.getUserInMem(session.getUid());
if (user != null && activityMission != null){
List<CommonProto.ActivityInfo.MissionInfo> missInfo = getAllMissInfo(user, activityMission, filterMissId);
CommonProto.ActivityInfo.Builder builder1 = CommonProto.ActivityInfo.newBuilder()
.setValue(activityMission.getV())
.addAllMission(missInfo)
.setActivityId(id);
builder.setActivityInfo(builder1);
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), true);
}
User user = UserManager.getUserInMem(session.getUid());
if (user != null && activityMission != null) {
List<CommonProto.ActivityInfo.MissionInfo> missInfo = getAllMissInfo(user, activityMission, filterMissId);
CommonProto.ActivityInfo.Builder builder1 = CommonProto.ActivityInfo.newBuilder()
.setValue(activityMission.getV())
.addAllMission(missInfo)
.setActivityId(id);
builder.setActivityInfo(builder1);
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), true);
}
}

View File

@ -100,6 +100,10 @@ public class ActivityLogic implements IEventHandler{
//更新累计充值天数
ActivityLogic.getInstance().resumeActivity(user, ActivityType.RECHARGE_SUM_DAY);
//更新新积天豪礼天数
ActivityLogic.getInstance().resumeActivity(user, ActivityType.NEW_RECHARGE_SUM_DAY_6);
ActivityLogic.getInstance().resumeActivity(user, ActivityType.NEW_RECHARGE_SUM_DAY_30);
ActivityLogic.getInstance().resumeActivity(user, ActivityType.LUCKY_GET);
ActivityLogic.getInstance().resumeActivity(user,ActivityType.JADE_DYNASTY_MISSION);
@ -113,7 +117,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);
@ -172,6 +177,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 = 当前是开服第几个月
}
@ -187,6 +195,7 @@ public class ActivityLogic implements IEventHandler{
// 开服条件判断
boolean open = SGlobalActivity.checkActivityIfOpen(sGlobalActivity.getId(),0,GameApplication.serverConfig.getCacheOpenTime());
if (!open){
openActivityIds.remove(sGlobalActivity.getId());
continue;
}
if (endTime != 0 && now > endTime) {
@ -294,6 +303,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){
@ -369,6 +381,10 @@ public class ActivityLogic implements IEventHandler{
//初始化活动 绝对时间和相对开服时间
for (Integer openActivityId : openActivityIds) {
SGlobalActivity sGlobalActivity = sGlobalActivityMap.get(openActivityId);
if (sGlobalActivity == null) {
LOGGER.info("checkActivityOfUser uid={} remove activity={}", user.getId(), openActivityId);
continue;
}
int[] ifOpen = sGlobalActivity.getIfOpen();
//创角
if(ifOpen!=null && ifOpen.length>0 && ifOpen[0]==1){
@ -402,6 +418,15 @@ public class ActivityLogic implements IEventHandler{
}
}
}
// 登录检测已开启的活动,商店是否开启
int[] shopId = sGlobalActivity.getShopId();
if (shopId != null && shopId.length > 0 && shopId[0] != 0) {
boolean b = user.getStoreManager().getStoreInfoMap().containsKey(shopId[0]);
if (!b) {
LOGGER.info("checkActivityOfUser uid={} activityId={} reopen shopId={}", user.getId(), openActivityId, shopId[0]);
Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),openActivityId,1));
}
}
continue;
}
initAllActivityMission(activityManager.getActivityMissionMap(),openActivityId);
@ -422,7 +447,20 @@ 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)){
if (activityId==4201){
continue;
}
}else{
if (activityId==42){
continue;
}
}
if (openActivityIds.contains(activityId)) {
int[] ifOpen = sGlobalActivity.getIfOpen();
if (ifOpen == null || ifOpen.length <= 0){
@ -549,6 +587,12 @@ public class ActivityLogic implements IEventHandler{
for (Map.Entry<Integer, ActivityMission> activityState : activityMissionMap.entrySet()) {
Integer activityId = activityState.getKey();
ActivityMission activityMission = activityState.getValue();
boolean open = SGlobalActivity.checkActivityIfOpen(activityId,user.getPlayerInfoManager().getCreateTime(),GameApplication.serverConfig.getCacheOpenTime());
if (!open){
// 开服条件判断
continue;
}
//todo 活动未初始化成功
if (activityMission == null) {
continue;
@ -556,6 +600,7 @@ public class ActivityLogic implements IEventHandler{
if(activityId == 7201){
continue;
}
int activityStatus = activityMission.getActivityState();
if(activityStatus == -1){
continue;
@ -564,6 +609,13 @@ public class ActivityLogic implements IEventHandler{
if(sGlobalActivity == null){
continue;
}
///旧版积天豪礼数据兼容
if (sGlobalActivity.getType()==ActivityType.RECHARGE_SUM_DAY){
if (activityMissionMap.get(activityId).getV()<=0||activityMissionMap.get(activityId).getV()>=15) {
continue;
}
}
if(activityStatus == ActivityType.CLOSE_STATE){
long prepareTime = ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, sGlobalActivity.getGapTime());
activityInfoList.add(CommonProto.ActivityInfo.newBuilder().setActivityId(activityId).setEndTime((int)(prepareTime/1000)).build());
@ -589,12 +641,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){
@ -617,6 +675,11 @@ public class ActivityLogic implements IEventHandler{
}
public void sendActivityInfo(User user,int activityId){
// 开服条件判断
boolean open = SGlobalActivity.checkActivityIfOpen(activityId,user.getPlayerInfoManager().getCreateTime(),GameApplication.serverConfig.getCacheOpenTime());
if (!open){
return;
}
ISession session = OnlineUserManager.getSessionByUid(user.getId());
if(session!=null){
PlayerInfoProto.ActivityUpateIndication.Builder builder = PlayerInfoProto.ActivityUpateIndication.newBuilder();
@ -716,8 +779,10 @@ public class ActivityLogic implements IEventHandler{
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
for (Map.Entry<Integer, ActivityMission> item : activityMissionMap.entrySet()) {
ActivityMission activityMission = item.getValue();
if (withState && activityMission.getActivityState() != ActivityType.OPEN_STATE) {
continue;
if (activityType != ActivityType.NEW_WELFARE) { // 这个活动未开启也需要记录进度
if (withState && activityMission.getActivityState() != ActivityType.OPEN_STATE) {
continue;
}
}
Integer activityId = item.getKey();
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);

View File

@ -104,9 +104,13 @@ 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_6 = 90;//新积天豪礼6元充值活动
int NEW_RECHARGE_SUM_DAY_30 = 92;//新积天豪礼30元充值活动
int SPECIAL_MONSTER_RANDOM_ACTIVITY = 100;//灵兽宝阁活动
int SPECIAL_MONSTER_GIFT_ACTIVITY = 101;//灵兽礼包
int NEW_PLAYER_SHOP = 91; // 新人商城
int NEW_GENERAL_ATTACK = 200;//新将来袭

View File

@ -94,7 +94,11 @@ public enum ActivityTypeEnum {
TRANSFORMATION_DRAW_CARD(ActivityType.TRANSFORMATION_DRAW_CARD,DefaultEmptyActivity::new),//方寸寻宝
CONTINUOUS_GIFT_NEW(ActivityType.CONTINUOUS_GIFT_NEW,ContinuousGiftActivity::new),//新连续礼包
ARENA_RANK_EXPERIMENT(ActivityType.ARENA_RANK_EXPERIMENT,ArenaRankActivity::new),//竞技试炼
NEW_RECHARGE_SUM_DAY_6(ActivityType.NEW_RECHARGE_SUM_DAY_6,NewRechargeSumDayActivity::new),//新积天豪礼
NEW_RECHARGE_SUM_DAY_30(ActivityType.NEW_RECHARGE_SUM_DAY_30,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

@ -138,7 +138,7 @@ public class ChoiceDrawCardActivity extends AbstractActivity {
mission.getActivityMissionMap().put(id, activityProgressInfo);
}
mission.setOpenType(1);
mission.setV(0);
// mission.setV(0);
mission.setActivityState(ActivityType.OPEN_STATE);
}
}

View File

@ -0,0 +1,188 @@
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(0);
mission.setCreatTime(TimeUtils.getAppointTime(0));
user.getActivityManager().getActivityMissionMap().put(id, mission);
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;
}
//开启礼包的第几天
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){
//第八天登錄 發送所有獎勵
//下线当天的活动处理
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);
}
//刪除數據
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);
}
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
if(sActivityRewardConfigs == null){return;}
for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){
ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo();
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();
int num=0;
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;
}
num++;
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){
if(progressMap.size()==num){
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(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

@ -31,15 +31,16 @@ class DailyRechargeActivity extends AbstractActivity {
// ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
// takeAllReward(sessionByUid);
// }
ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
takeAllReward(sessionByUid);
super.onResume(user);
// ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
// takeAllReward(sessionByUid);
// super.onResume(user);
}
@Override
void updateProgress(ActivityMission activityMission, int count) {
activityMission.setV(count + activityMission.getV());
// activityMission.setV(count + activityMission.getV());
}
@Override

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

@ -0,0 +1,84 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.config.clazzStaticCfg.ActivityStaticConfig;
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.BuyGoodsDirectEvent;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.NewWelfareEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.GiftGoodsType;
import com.ljsd.jieling.logic.store.newRechargeInfo.RechargeType;
import com.ljsd.jieling.network.session.ISession;
import config.SActivityRewardConfig;
import config.SRechargeCommodityNewConfig;
import manager.STableManager;
import java.util.Map;
class NewRechargeSumDayActivity extends AbstractActivity {
public NewRechargeSumDayActivity(int id) {
super(id);
Poster.getPoster().listenEvent(this, BuyGoodsDirectEvent.class);
}
@Override
public void onEvent(IEvent event) throws Exception {
super.onEvent(event);
if (!(event instanceof BuyGoodsDirectEvent)) {
return;
}
BuyGoodsDirectEvent buyGoodsDirectEvent = (BuyGoodsDirectEvent) event;
int goodsId=buyGoodsDirectEvent.getGoodsId();
SRechargeCommodityNewConfig rechargeConfig=SRechargeCommodityNewConfig.getConfigById(goodsId);
if (rechargeConfig==null||rechargeConfig.getType()!= GiftGoodsType.RechargeSumDay){
return;
}
User user = UserManager.getUser(buyGoodsDirectEvent.getUid());
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
boolean isSend=false;
for (Map.Entry<Integer, ActivityProgressInfo> item : activityMission.getActivityMissionMap().entrySet()) {
ActivityProgressInfo activityProgressInfo = item.getValue();
int missionId=item.getKey();
SActivityRewardConfig missionConfig=SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId);
if (missionConfig.getValues()[0][0]==goodsId&&missionConfig.getSort()-1==activityMission.getV()&&activityProgressInfo.getState()==ActivityType.WILL_TAKE){
activityProgressInfo.setState(1);
isSend=true;
}
activityMission.getActivityMissionMap().put(item.getKey(), activityProgressInfo);
}
if (isSend){
//更新进度
ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
sendActivityProgress(sessionByUid, activityMission, null);
}
}
@Override
public void onResume(User user)throws Exception {
ActivityManager activityManager = user.getActivityManager();
ActivityMission activityMission = activityManager.getActivityMissionMap().get(id);
int buyNum=0;
for (Map.Entry<Integer, ActivityProgressInfo> progressInfoEntry : activityMission.getActivityMissionMap().entrySet()) {
if (progressInfoEntry.getValue().getState()==ActivityType.HAD_TAKED){
buyNum++;
}
}
if (buyNum > activityMission.getV()) {
activityMission.setV(activityMission.getV() + 1);
}
if (activityMission.getV() >= SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).size()) {
ActivityLogic.getInstance().initMissionInfo(activityMission,id);
}
ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
sendActivityProgress(sessionByUid, activityMission, null);
}
}

View File

@ -14,6 +14,7 @@ import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
@ -22,6 +23,7 @@ import config.SGlobalActivity;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class NewWelfareActivity extends AbstractActivity {
@ -30,98 +32,209 @@ public class NewWelfareActivity extends AbstractActivity {
Poster.getPoster().listenEvent(this, NewWelfareEvent.class);
}
@Override
public void initActivity(User user) throws Exception {
super.initActivity(user);
}
/**
*
*
* @param filterMissId miss
*/
@Override
public void sendActivityProgress(ISession session, ActivityMission activityMission, Set<Integer> filterMissId) {
if (session == null) {
return;
}
PlayerInfoProto.ActivityUpateProgressIndication.Builder builder = PlayerInfoProto.ActivityUpateProgressIndication.newBuilder();
User user = UserManager.getUserInMem(session.getUid());
if (user != null && activityMission != null) {
if (activityMission.getActivityState() != ActivityType.OPEN_STATE) {
return;
}
List<CommonProto.ActivityInfo.MissionInfo> missInfo = getAllMissInfo(user, activityMission, filterMissId);
CommonProto.ActivityInfo.Builder builder1 = CommonProto.ActivityInfo.newBuilder()
.setValue(activityMission.getV())
.addAllMission(missInfo)
.setActivityId(id);
builder.setActivityInfo(builder1);
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), true);
}
}
@Override
public void onEvent(IEvent event) throws Exception {
if(! (event instanceof NewWelfareEvent) ){
return;
}
if (!(event instanceof NewWelfareEvent)) {
return;
}
if (this.id == 42) {
oldActivityEvent(event);
} else {
NewWelfareEvent newWelfareEvent = (NewWelfareEvent) event;
if (newWelfareEvent.getType() == NewWelfareTypeEnum.BUY_1106.getType()) {
User user = newWelfareEvent.getUser();
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
for (Map.Entry<Integer, ActivityProgressInfo> item : activityMission.getActivityMissionMap().entrySet()) {
ActivityProgressInfo activityProgressInfo = item.getValue();
int missionId=item.getKey();
if (missionId==4209){
activityProgressInfo.setState(1);
}
activityMission.getActivityMissionMap().put(item.getKey(), activityProgressInfo);
}
//更新进度
ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
sendActivityProgress(sessionByUid, activityMission, null);
}
}
}
@Override
public boolean takeReward(ISession session, int missionId) throws Exception {
if (this.id == 42) {
User user = UserManager.getUser(session.getUid());
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
if (sGlobalActivity == null || !user.getActivityManager().getActivityMissionMap().containsKey(id)) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
oldActivityTakeReward(session,missionId,user,activityMission,activityProgressInfoMap);
} else {
super.takeReward(session,missionId);
}
return true;
}
@Override
public void getAllMissRewards(User user, ISession session, List<int[][]> itemAttrs) throws Exception {
if (this.id == 42) {
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
if (sGlobalActivity == null || !user.getActivityManager().getActivityMissionMap().containsKey(id)) {
return;
}
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
for (ActivityProgressInfo activityProgressInfo : activityProgressInfoMap.values()) {
if (activityProgressInfo.getState() != 1) {
return;
}
}
for (ActivityProgressInfo activityProgressInfo : activityProgressInfoMap.values()) {
activityProgressInfo.setState(2);
}
for (Map.Entry<Integer, ActivityProgressInfo> item : activityProgressInfoMap.entrySet()) {
item.getValue().setState(2);
activityMission.getActivityMissionMap().put(item.getKey(), item.getValue());
}
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
itemAttrs.add(sActivityRewardConfigs.get(0).getReward());
}else{
super.getAllMissRewards(user,session,itemAttrs);
}
}
@Override
void updateProgress(ActivityMission activityMission, int count) {
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
for (Map.Entry<Integer, ActivityProgressInfo> item : activityProgressInfoMap.entrySet()) {
ActivityProgressInfo activityProgressInfo = item.getValue();
int missionId=item.getKey();
SActivityRewardConfig rewardConfig=SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId);
activityProgressInfo.setProgrss(count);
if (activityProgressInfo.getProgrss()>=rewardConfig.getValues()[0][0]&&rewardConfig.getReward().length<=0&&missionId!=4209){
activityProgressInfo.setState(ActivityType.HAD_TAKED);
}
activityMission.getActivityMissionMap().put(item.getKey(), activityProgressInfo);
}
}
private void oldActivityEvent(IEvent event) {
NewWelfareEvent newWelfareEvent = (NewWelfareEvent) event;
User user =newWelfareEvent.getUser();
User user = newWelfareEvent.getUser();
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
if( null == activityMission){
if (null == activityMission) {
return;
}
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
boolean isUpdate = false;
for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){
for (SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs) {
ActivityProgressInfo activityProgressInfo = activityProgressInfoMap.get(sActivityRewardConfig.getId());
if(sActivityRewardConfig.getSort()==1){//拿sort区分新老至尊降世活动任务
if(activityProgressInfo.getState() == 1){
if (sActivityRewardConfig.getSort() == 1) {//拿sort区分新老至尊降世活动任务
if (activityProgressInfo.getState() == 1) {
continue;
}
if(sActivityRewardConfig.getValues()[0][0] == newWelfareEvent.getType() ){
if (sActivityRewardConfig.getValues()[0][0] == newWelfareEvent.getType()) {
int parm = newWelfareEvent.getParm();
if( newWelfareEvent.getType() == NewWelfareTypeEnum.LOGIN_TIMES.getType()){
activityProgressInfo.setProgrss(activityProgressInfo.getProgrss()+1);
parm=activityProgressInfo.getProgrss();
if (newWelfareEvent.getType() == NewWelfareTypeEnum.LOGIN_TIMES.getType()) {
activityProgressInfo.setProgrss(activityProgressInfo.getProgrss() + 1);
parm = activityProgressInfo.getProgrss();
}
if(parm ==sActivityRewardConfig.getValues()[1][0]){
if(newWelfareEvent.getType() == NewWelfareTypeEnum.RECHARGE_BUY.getType()){
if (parm == sActivityRewardConfig.getValues()[1][0]) {
if (newWelfareEvent.getType() == NewWelfareTypeEnum.RECHARGE_BUY.getType()) {
//可领取奖励
activityProgressInfo.setState(3);
}else{
} else {
activityProgressInfo.setState(1);
}
activityMission.getActivityMissionMap().put(sActivityRewardConfig.getId(), activityProgressInfo);
isUpdate = true;
}
}
}else{
} else {
//新增任务
if(activityProgressInfo.getState()!= 0){
if (activityProgressInfo.getState() != 0) {
continue;
}
if(sActivityRewardConfig.getValues()[0][0] == newWelfareEvent.getType() ){
if (sActivityRewardConfig.getValues()[0][0] == newWelfareEvent.getType()) {
int parm = newWelfareEvent.getParm();
if (newWelfareEvent.getType() == NewWelfareTypeEnum.ALL_MISSION_FIN.getType()||newWelfareEvent.getType() == NewWelfareTypeEnum.EXPLORE.getType()){
activityProgressInfo.setProgrss(activityProgressInfo.getProgrss()+1);
parm=activityProgressInfo.getProgrss();
if (newWelfareEvent.getType() == NewWelfareTypeEnum.ALL_MISSION_FIN.getType() || newWelfareEvent.getType() == NewWelfareTypeEnum.EXPLORE.getType()) {
activityProgressInfo.setProgrss(activityProgressInfo.getProgrss() + 1);
parm = activityProgressInfo.getProgrss();
}
if(parm ==sActivityRewardConfig.getValues()[1][0]){
if (parm == sActivityRewardConfig.getValues()[1][0]) {
activityProgressInfo.setState(3);
activityMission.getActivityMissionMap().put(sActivityRewardConfig.getId(), activityProgressInfo);
isUpdate = true;
if (sActivityRewardConfig.getSort()==2){
Poster.getPoster().dispatchEvent(new NewWelfareEvent(user,NewWelfareTypeEnum.ALL_MISSION_FIN.getType(),1));
if (sActivityRewardConfig.getSort() == 2) {
Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.ALL_MISSION_FIN.getType(), 1));
}
}
}
}
}
if(isUpdate){
if (isUpdate) {
//更新进度
ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
sendActivityProgress(sessionByUid, activityMission, null);
}
}
@Override
public boolean takeReward(ISession session, int missionId) throws Exception {
private void oldActivityTakeReward(ISession session, int missionId, User user, ActivityMission activityMission, Map<Integer, ActivityProgressInfo> activityProgressInfoMap) throws Exception {
PlayerInfoProto.TakeActivityRewardResponse build = null;
User user = UserManager.getUser(session.getUid());
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
if (sGlobalActivity == null || !user.getActivityManager().getActivityMissionMap().containsKey(id)) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
//0是领取最后奖励
if(missionId==0){
if (missionId == 0) {
for (Map.Entry<Integer, ActivityProgressInfo> inter : activityProgressInfoMap.entrySet()) {
ActivityProgressInfo activityProgressInfo=inter.getValue();
int activityMissionId=inter.getKey();
SActivityRewardConfig missonConfig= SActivityRewardConfig.getsActivityRewardConfigByMissionId(activityMissionId);
if(activityProgressInfo.getState() != 1&&missonConfig.getSort()==1){
ActivityProgressInfo activityProgressInfo = inter.getValue();
int activityMissionId = inter.getKey();
SActivityRewardConfig missonConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(activityMissionId);
if (activityProgressInfo.getState() != 1 && missonConfig.getSort() == 1) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
}
for(Map.Entry<Integer,ActivityProgressInfo> item: activityProgressInfoMap.entrySet()){
SActivityRewardConfig missonConfig= SActivityRewardConfig.getsActivityRewardConfigByMissionId(item.getKey());
if (missonConfig.getSort()==1){
for (Map.Entry<Integer, ActivityProgressInfo> item : activityProgressInfoMap.entrySet()) {
SActivityRewardConfig missonConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(item.getKey());
if (missonConfig.getSort() == 1) {
item.getValue().setState(2);
activityMission.getActivityMissionMap().put(item.getKey(),item.getValue());
activityMission.getActivityMissionMap().put(item.getKey(), item.getValue());
}
}
@ -129,52 +242,24 @@ public class NewWelfareActivity extends AbstractActivity {
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sActivityRewardConfigs.get(0).getReward(), BIReason.TAKE_ACTIVITY_REWARD);
build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
reportTakeActivityReward(user,sActivityRewardConfigs.get(0).getReward(),missionId);
reportTakeActivityReward(user, sActivityRewardConfigs.get(0).getReward(), missionId);
}else{
} else {
//领取第三个奖励用
if(!activityProgressInfoMap.containsKey(missionId)||activityProgressInfoMap.get(missionId).getState()!=3){
if (!activityProgressInfoMap.containsKey(missionId) || activityProgressInfoMap.get(missionId).getState() != 3) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
//领过了
activityProgressInfoMap.get(missionId).setState(1);
SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId);
if(sActivityRewardConfig==null){
if (sActivityRewardConfig == null) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
sendActivityProgress(session, activityMission, null);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sActivityRewardConfig.getReward(), BIReason.TAKE_ACTIVITY_REWARD);
build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
reportTakeActivityReward(user,sActivityRewardConfig.getReward(),missionId);
reportTakeActivityReward(user, sActivityRewardConfig.getReward(), missionId);
}
MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true);
return true;
}
@Override
public void getAllMissRewards(User user, ISession session, List<int[][]> itemAttrs){
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
if (sGlobalActivity == null || !user.getActivityManager().getActivityMissionMap().containsKey(id)) {
return;
}
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
for(ActivityProgressInfo activityProgressInfo : activityProgressInfoMap.values()){
if(activityProgressInfo.getState() != 1){
return;
}
}
for(ActivityProgressInfo activityProgressInfo : activityProgressInfoMap.values()){
activityProgressInfo.setState(2);
}
for(Map.Entry<Integer,ActivityProgressInfo> item: activityProgressInfoMap.entrySet()){
item.getValue().setState(2);
activityMission.getActivityMissionMap().put(item.getKey(),item.getValue());
}
List<SActivityRewardConfig> sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
itemAttrs.add(sActivityRewardConfigs.get(0).getReward());
}
}

View File

@ -11,6 +11,8 @@ import com.ljsd.jieling.network.session.ISession;
import config.SActivityRewardConfig;
import manager.STableManager;
import java.util.Map;
class RechargeSumDayActivity extends AbstractActivity {
public RechargeSumDayActivity(int id) {
@ -26,24 +28,33 @@ class RechargeSumDayActivity extends AbstractActivity {
} catch (Exception e) {
e.printStackTrace();
}
if (user.getPlayerInfoManager().getRechargedaily() > 0 ) {//充值0.99不触发修改
// 该活动已被替换,未参与的玩家不再累计
if (activityMission.getV() <= 0 || activityMission.getV() >= 15) {
return;
}
if (user.getPlayerInfoManager().getRechargedaily() >= 6 ) {//充值小于六块不触发修改
// SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId).getValues()[0][0]
activityMission.setV(activityMission.getV() + 1);
}
if (activityMission.getV() >= SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).size()) {
ActivityLogic.getInstance().initMissionInfo(activityMission,id);
}
// if (activityMission.getV() >= SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).size()) {
// ActivityLogic.getInstance().initMissionInfo(activityMission,id);
// }
}
@Override
void updateProgress(ActivityMission activityMission, int count) {
int missionId =STableManager.getFigureConfig(ActivityStaticConfig.class).getRechargeDaySum().get(activityMission.getV() + 1);
ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId);
Map<Integer, ActivityProgressInfo> activityMissionMap = activityMission.getActivityMissionMap();
ActivityProgressInfo activityProgressInfo = activityMissionMap.get(missionId);
if (activityProgressInfo == null || activityProgressInfo.getProgrss() == 1) {
return;
}
if (count>0 ) {//只要是充值就算
// 该活动已被替换,未参与的玩家不再累计
if (activityMission.getV() <= 0 || activityMission.getV() >= 15) {
return;
}
if (count>=6000 ) {//大于6块钱才算
//>= SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId).getValues()[0][0]
activityProgressInfo.setProgrss(1);
}

View File

@ -1,13 +1,21 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.GameApplication;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.newRechargeInfo.NewRechargeInfo;
import com.ljsd.jieling.network.session.ISession;
import config.SActivityRewardConfig;
import rpc.protocols.CommonProto;
import util.TimeUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
class RechargeTotalActivity extends AbstractActivity {
public RechargeTotalActivity(int id) {
@ -27,4 +35,33 @@ class RechargeTotalActivity extends AbstractActivity {
}
return true;
}
@Override
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user, ActivityMission activityMission, Set<Integer> filter) {
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
List<CommonProto.ActivityInfo.MissionInfo> missionInfos = new ArrayList<>(activityProgressInfoMap.size());
long openTime = TimeUtils.stringToTimeLong2(GameApplication.serverConfig.getOpenTime());
for (Map.Entry<Integer, ActivityProgressInfo> missionProgress : activityProgressInfoMap.entrySet()) {
if (filter != null && !filter.contains(missionProgress.getKey())) {
continue;
}
Integer missionId = missionProgress.getKey();
SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId);
if (sActivityRewardConfig == null) {
continue;
}
if(id == ActivityType.RechargeTotal){
// 2021-12-22 09:00:00 之后开的服首充不显示累充满100元任务
if (openTime > 1640134800000L) {
int value = sActivityRewardConfig.getValues()[0][0];
if (value == 100) {
continue;
}
}
}
ActivityProgressInfo activityProgressInfo = missionProgress.getValue();
missionInfos.add(CommonProto.ActivityInfo.MissionInfo.newBuilder().setMissionId(missionId).setProgress(activityProgressInfo.getProgrss()).setState(activityProgressInfo.getState()).build());
}
return missionInfos;
}
}

View File

@ -152,6 +152,10 @@ public class SuperFundActivity extends AbstractActivity {
private void updateState(User user) throws Exception {
// 活动信息
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
if(mission == null){
LOGGER.info("updateState 玩家id ={},activityId={}",user.getId(),id);
return;
}
if (mission.getV() != 2){
return;
}

View File

@ -6,7 +6,8 @@ public enum NewWelfareTypeEnum {
RECHARGE_BUY(3),
EXPLORE(4),//极速探索n次
UPSTAR(5),//指定英雄升级至x星
ALL_MISSION_FIN(6)//sort为2所有任务完成
ALL_MISSION_FIN(6),//sort为2所有任务完成
BUY_1106(7),//购买1106礼包
;
private int type;

View File

@ -1,5 +1,6 @@
package com.ljsd.jieling.logic.activity.eventhandler;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.logic.activity.IEventHandler;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
@ -19,7 +20,7 @@ public class SummonTreasureHandler implements IEventHandler {
}
SummonTreasureEvent event1 = (SummonTreasureEvent) event;
User user = UserManager.getUser(event1.getUid());
if (event1.getStar() == 5){
if (event1.getStar() == GlobalsDef.WUJINGMIBAO_STAR){
user.getPlayerInfoManager().setGetFiveStarHeroNum(user.getPlayerInfoManager().getGetFiveStarHeroNum()+event1.getNum());
Poster.getPoster().dispatchEvent(new SummonTreasureActivityEvent(user.getId()));
}

View File

@ -153,6 +153,7 @@ public class UserManager {
playerManager.setIp(ip);
playerManager.setChannel_id(channle_id);
playerManager.setBundle_id(bundle_id);
playerManager.setVersionCode(GlobalsDef.VERSION_CODE);
int headFrameId = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getDefaultPicture();
playerManager.setHeadFrame(headFrameId);
playerManager.putHeadFrameValidTime(headFrameId,0L);

View File

@ -255,7 +255,6 @@ public class HeroLogic {
public void random(ISession session, int type) throws Exception {
long time = System.currentTimeMillis();
int uid = session.getUid();
User user = UserManager.getUser(uid);
SLotterySetting sLotterySetting = STableManager.getConfig(SLotterySetting.class).get(type);
@ -1548,8 +1547,11 @@ public class HeroLogic {
throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT);
}
}
if (needTotalHeroNums != (removeHeroIds.size() + removeItemMap.size())) {
int itemNum = 0;
for (Integer value : removeItemMap.values()) {
itemNum += value;
}
if (needTotalHeroNums != (removeHeroIds.size() + itemNum)) {
LOGGER.error("hero num not enough");
throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH);
}
@ -1644,6 +1646,9 @@ public class HeroLogic {
}
hero.upStar(1);
user.getHeroManager().addHeroHandBook(hero.getTemplateId(),hero.getStar());
if (hero.getStar() == GlobalsDef.WUJINGMIBAO_STAR){
Poster.getPoster().dispatchEvent(new SummonTreasureEvent(user.getId(),hero.getStar(),1));
}
}
@ -3027,7 +3032,7 @@ public class HeroLogic {
}
Map<Integer, Long> heroSkillAdMap = new HashMap<>();
heroSkillList.forEach(skill -> {
for (Integer skill : heroSkillList) {
SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill);
if (null != config.getValue() && config.getValue().length > 2 && config.getValue()[2] != 4) {
PassiveskillCalEnum passiveskillCalEnum = PassiveskillCalEnum.calEnumMap.get(config.getType());
@ -3035,7 +3040,7 @@ public class HeroLogic {
passiveskillCalEnum.getPassiveSkillProcessor().process(config, hero, heroSkillAdMap);
}
}
});
}
if (!heroSkillAdMap.isEmpty()) {
combinedAttribute(heroSkillAdMap, heroAllAttribute);
@ -4022,6 +4027,107 @@ public class HeroLogic {
MessageUtil.sendMessage(session, 1, responseMsgId, build, true);
}
/**
* 退
* 6-9
* @param session
* @param heroId
* @throws Exception
*/
public void heroReturn(ISession session, String heroId) throws Exception {
int uid = session.getUid();
int responseMsgId = MessageTypeProto.MessageType.HERO_RETURN_RESPONSE_VALUE;
User user = UserManager.getUser(uid);
Hero hero = user.getHeroManager().getHero(heroId);
if (hero == null || hero.getOriginalLevel() != 1) {
throw new ErrorCodeException(ErrorCode.HERO_RETURN_ONLY_LEVEL_ONE);
}
String recallCostDiamond = SSpecialConfig.getStringValue(SSpecialConfig.RecallCostDiamond);
Map<Integer, Integer> cost = new HashMap<>(1);
if (recallCostDiamond != null && !recallCostDiamond.isEmpty()) {
String[] split = recallCostDiamond.split("#");
cost.put(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
boolean b = ItemUtil.checkCost(user, cost);
if (!b) {
throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT);
}
}
SCHero scHero = SCHero.sCHero.get(hero.getTemplateId());
int[][] returnBook = scHero.getReturnBook();
if (returnBook == null || returnBook.length == 0) {
throw new ErrorCodeException(ErrorCode.HERO_RETURN_CAN_NOT);
}
List<int[]> returnPercent = new ArrayList<>(5);
for (int i = 0; i < returnBook.length; i++) {
if (returnBook[i][0] == hero.getStar()) {
returnPercent.add(returnBook[i]);
continue;
}
}
if (returnPercent.isEmpty()) {
throw new ErrorCodeException(ErrorCode.HERO_RETURN_CAN_NOT);
}
Map<Integer, Integer> dropMap = new HashMap<>();
// 法宝归元
if (hero.getEspecialEquipLevel() > 0) {
Map<Integer, Integer> dropTempMap = ItemLogic.getInstance().heroEspecialEquipReturnItem(hero);
if (dropTempMap != null) {
dropTempMap.forEach((k, v) -> dropMap.put(k, dropMap.getOrDefault(k, 0) + v));
hero.updateEspecial(1);
}
}
// 卸下魂印
Map<Integer, Integer> soulEquipByPositionMap = hero.getSoulEquipByPositionMap();
for (Integer value : soulEquipByPositionMap.values()) {
dropMap.put(value, 1);
}
for (int[] ints : returnPercent) {
for (int i = 1; i < ints.length; i++) {
SHeroRankupGroup sHeroRankupGroup=STableManager.getConfig(SHeroRankupGroup.class).get(ints[i]);
if (sHeroRankupGroup == null) {
continue;
}
i++;
int isSame = sHeroRankupGroup.getIssame();
// int starLimit = sHeroRankupGroup.getStarLimit();
// int isSameClan = sHeroRankupGroup.getIsSameClan();
int isId = sHeroRankupGroup.getIsId();
if (isSame == 1) {
dropMap.put(hero.getTemplateId(), ints[i]);
}
if (isId != 0) {
dropMap.put(isId, ints[i]);
}
}
}
ItemUtil.itemCost(user, cost, BIReason.HERO_RETURN, hero.getTemplateId());
CommonProto.Drop.Builder drop = ItemUtil.drop(user, ItemUtil.mapToArray(dropMap), BIReason.HERO_RETURN);
if (!soulEquipByPositionMap.isEmpty()) {
List<CommonProto.Item> itemlistList = drop.getItemlistList();
Set<Integer> needRemove = new HashSet<>(soulEquipByPositionMap.size());
for (int i = 0; i < itemlistList.size(); i++) {
CommonProto.Item item = itemlistList.get(i);
if (soulEquipByPositionMap.values().contains(item.getItemId())) {
needRemove.add(i);
}
}
for (Integer index : needRemove) {
drop.removeItemlist(index);
}
}
hero.setLevel(1);
hero.setBreakId(0);
hero.setStar(5);
//鸿蒙阵
addOrUpdateHongmeng(session);
HeroInfoProto.HeroReturnResponse build = HeroInfoProto.HeroReturnResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(session, 1, responseMsgId, build, true);
Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(uid));
}
/**
*
*

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.logic.ridingSward;
import com.google.gson.reflect.TypeToken;
import com.ljsd.GameApplication;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.exception.ErrorCode;
@ -231,8 +232,16 @@ public class RidingSwardLogic{
if (startTime == 0 || endTime == 0) {
// 初始化活动数据
SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(proto.getActivityId());
startTime = (int) (TimeUtils.stringToTimeLong(activity.getStartTime(), "yyyyMMdd HHmmss")/1000);
endTime = (int) (TimeUtils.stringToTimeLong(activity.getEndtime(), "yyyyMMdd HHmmss")/1000);
if(activity.getTime()==ActivityType.OPEN_TYPE_SERVER){
String openTime = GameApplication.serverConfig.getOpenTime();
long timeStamp2 = TimeUtils.stringToTimeLong2(openTime);
startTime = (int)(timeStamp2/1000)+Integer.parseInt(activity.getStartTime());
endTime = (int)(timeStamp2/1000)+Integer.parseInt(activity.getEndtime());
}
if(activity.getTime()==ActivityType.OPEN_TYPE_TIME){
startTime = (int) (TimeUtils.stringToTimeLong(activity.getStartTime(), "yyyyMMdd HHmmss")/1000);
endTime = (int) (TimeUtils.stringToTimeLong(activity.getEndtime(), "yyyyMMdd HHmmss")/1000);
}
// 定时器启动
getInstance().createExecuteScript();
}

View File

@ -21,7 +21,10 @@ import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.activity.ActivityTypeEnum;
import com.ljsd.jieling.logic.activity.activityLogic.WeekCardLogic;
import com.ljsd.jieling.logic.activity.event.*;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.RechargeInfo;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.VipInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.expedition.ExpeditionLogic;
import com.ljsd.jieling.logic.fight.CombatLogic;
@ -224,6 +227,7 @@ public class BuyGoodsNewLogic {
//处理特权
activePrivilege(user,config);
resultRes.setResultCode(1);
//发送邮件
int[] mail = config.getMail();
if(config.getPrice()!=0&&mail!=null&&mail.length>1){
@ -329,6 +333,7 @@ public class BuyGoodsNewLogic {
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.JADE_DYNASTY_RECHARGE_SUM,(int)(price*1000));
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RECHARGE_SUM_DAY, (int)(user.getPlayerInfoManager().getRechargedaily()*1000) );
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.FIND_FAIRY_FESTIVAL, (int)(price*1000));
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.NEW_WELFARE, (int)(info.getRr()));
AyyncWorker ayyncWorker = new AyyncWorker(user, true, new AynMissionWorker(GameEvent.RECHARGE_TOTAL,(int)(price*1000))) ;
ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker);
@ -377,9 +382,8 @@ public class BuyGoodsNewLogic {
if(dropArray!=null && dropArray.length>=1){
drop = ItemUtil.drop(user,dropArray, BIReason.DIRECT_BUY);
}
if(type==GiftGoodsType.RED_PACKET){
//红包事件
//红包事件 和积天豪礼事件
if(type==GiftGoodsType.RED_PACKET||type==GiftGoodsType.RechargeSumDay){
Poster.getPoster().dispatchEvent(new BuyGoodsDirectEvent(user.getId(),config.getId()));
}
if(type==GiftGoodsType.SKY_TREASURE){
@ -405,6 +409,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);
@ -848,9 +857,14 @@ public class BuyGoodsNewLogic {
public static CommonProto.GiftGoodsInfo buildGoodsInfo(AbstractWelfareBag bag){
SRechargeCommodityNewConfig configById = SRechargeCommodityNewConfig.getConfigById(bag.getModId());
// 配置表里已删除的礼包 删除
if (configById == null) {
return null;
}
// 礼包类型已更改的删除
if (bag.getType() != configById.getOtype()) {
return null;
}
CommonProto.GiftGoodsInfo.Builder builder = CommonProto.GiftGoodsInfo.newBuilder();
builder.setGoodsId(bag.getModId());
builder.setBuyTimes(bag.getBuyTimes());

View File

@ -14,5 +14,8 @@ public interface GiftGoodsType {
int SUN_LONG = 11; //豪华基金
int SKY_TREASURE = 12; //天宫秘宝
int ENDLESS_TREASURE = 14;//无尽秘宝
int DailyPreferentialGift = 17 ;//每日特惠礼包
int RechargeSumDay = 18 ;//超值返利礼包(在积天豪礼活动里购买)
}

View File

@ -38,7 +38,12 @@ public class PerpetualWelfareBag extends AbstractWelfareBag {
setStartTime(TimeUtils.getCurWeekdayStartTime(1,0));
setRefreshTime(TimeUtils.getCurWeekdayStartTime(1,0) + TimeUtils.WEEK);
}else if(config.getTime() == 8){//自然月
setStartTime(TimeUtils.getCurMonthStartTime(1));
//TODO 不支持礼包每天刷新 用类型8有瑕疵 之后容错
if(config.getId() == 1005 || config.getId() == 1006|| config.getId() == 1007){
TimeUtils.getAppointTime(0);
}else{
setStartTime(TimeUtils.getCurMonthStartTime(1));
}
setRefreshTime(TimeUtils.getMonthStartTime(1,1));
}
}

View File

@ -25,7 +25,7 @@ public class FightDataUtil {
LuaValue LuaTable = new LuaTable();
LuaTable.set("uid",data);
// LuaTable.set("enemyData", getEnemyData(monsterTeamList));
// LuaTable.set("enemyData", getEnemyData(monsterTeamList));
//
// if (data.equals("") || data==null){
// return new LuaTable();
@ -99,6 +99,7 @@ public class FightDataUtil {
SCHero hero = SCHero.getsCHero().get(sMonster.getMonsterId());
if(hero!=null){
unitData.set("job",hero.getJob());
unitData.set("star",hero.getStar());
}
if (unitSkill.length==1){
unitData.set("skill", getSkill(unitSkill[0],sMonster.getSkinId()));
@ -389,6 +390,7 @@ public class FightDataUtil {
unitData.set("property", getProperty(property));
unitData.set("skinId",data.getSkinId());
unitData.set("job",hero.getJob());
unitData.set("star",data.getStar());
return unitData;
}

View File

@ -395,7 +395,7 @@ public class ItemUtil {
getMap((int)items[0],items[1],itemObj,1);
}
}
private static void selectDrop(User user, SRewardGroup sRewardGroup,ItemMap itemObj, float dropRatio)throws ErrorCodeException {
public static void selectDrop(User user, SRewardGroup sRewardGroup,ItemMap itemObj, float dropRatio)throws ErrorCodeException {
String dropInfo = dropRewardMap.get(sRewardGroup.getId());
String rewardStr = dropInfo.split("\\|")[0];
String weight = dropInfo.split("\\|")[1];
@ -544,7 +544,8 @@ public class ItemUtil {
private static void getMap(int itemId ,long itemNum,ItemMap itemObj,float dropRatio) throws ErrorCodeException{
SItem sItem = SItem.getsItemMap().get(itemId);
if(sItem==null){
throw new ErrorCodeException("SItem配置不存在 id:"+itemId);
LOGGER.info("getMap SItem配置不存在 id:{}", itemId);
return;
}
int itemType =getItemType(sItem);
long amount = MathUtils.numRount((itemNum * MathUtils.floatToDouble(dropRatio)));
@ -592,6 +593,7 @@ public class ItemUtil {
case GlobalItemType.TRUMP_CHIP:
case GlobalItemType.LIFE_STONE:
case GlobalItemType.TRANSFORMATION_CARD:
case GlobalItemType.HOOK_PROP:
itemType = GlobalItemType.ITEM;
break;
default:
@ -1161,6 +1163,19 @@ public class ItemUtil {
ItemManager itemManager = user.getItemManager();
Map<Integer, Item> itemMap = itemManager.getItemMap();
boolean needUpdateHero = true;
Item item1 = itemMap.get(GlobalsDef.LUOFUZHENG_MONEY);
if (item1 != null && item1.getItemNum() > 0) {
String title = SErrorCodeEerverConfig.getI18NMessage("msarenashopchange_mile_title");
String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("msarenashopchange_mile_txt", new Object[]{item1.getItemNum(), item1.getItemNum()}, new int[]{0,0}, "#");
MailLogic.getInstance().sendMail(user.getId(), title, content, "24#" + item1.getItemNum(), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
Map<Integer, Integer> map = new HashMap<>(1);
map.put(item1.getItemId(), (int) item1.getItemNum());
useItem(user, map, BIReason.ITEM_RETURN, 0);
itemMap.remove(GlobalsDef.LUOFUZHENG_MONEY);
}
if (itemMap.size() !=0 ){
for (Map.Entry<Integer, Item> entry :itemMap.entrySet()){
@ -1354,6 +1369,10 @@ public class ItemUtil {
SItem sItem = SItem.getsItemMap().get(entry.getKey());
extraDropAop(user,dropBuilder,sItem);
}
// 回退所得神将不更新任务或活动
if (reason == BIReason.HERO_RETURN) {
continue;
}
fiveStarEvent(user,entry.getKey());
if(reason != BIReason.HERO_RANDOM){
fiveStarPushByCombine(user,entry.getKey(),count);
@ -1389,11 +1408,18 @@ public class ItemUtil {
PlayerManager playerInfoManager = user.getPlayerInfoManager();
int[] heroStar = SItem.getsItemMap().get(cardId).getHeroStar();
Hero hero = new Hero(user.getId(),heroStar[0],heroStar[1]);
Poster.getPoster().dispatchEvent(new SummonTreasureEvent(user.getId(),hero.getStar(),1));
if (reason != BIReason.HERO_RETURN) {
if (hero.getStar() == GlobalsDef.WUJINGMIBAO_STAR){
Poster.getPoster().dispatchEvent(new SummonTreasureEvent(user.getId(),hero.getStar(),1));
}
}
heroManager.addHero(hero);
// 鸿蒙阵推送
HeroLogic.getInstance().addOrUpdateHongmeng(OnlineUserManager.getSessionByUid(user.getId()));
heroList.add(CBean2Proto.getHero(hero));
if (reason == BIReason.HERO_RETURN) {
return;
}
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
if (scHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_lottery_content_parm)) { //策划资质改成星级
String message = SErrorCodeEerverConfig.getI18NMessageNeedConvert("lamp_lottery_content", new Object[]{playerInfoManager.getNameColor(), playerInfoManager.getNickName(), scHero.getStar(), scHero.getReadingName()},new int[]{0,0,0,1});

View File

@ -74,6 +74,8 @@ public class SCHero implements BaseConfig{
private Map<Integer, List<Integer>> skillListByStar;
private int[][] returnBook;
// 觉醒增加的技能属性
private Map<Integer,TreeMap<Integer,List<Integer>>> awakSkillMap;
@ -378,4 +380,8 @@ public class SCHero implements BaseConfig{
public int getIsSoulOpen() {
return isSoulOpen;
}
public int[][] getReturnBook() {
return returnBook;
}
}

View File

@ -101,4 +101,15 @@ public class SErrorCodeEerverConfig implements BaseConfig {
return value.getvalue()+str.toString();
}
public static String getFormatMessage(String key, Object[] obj) {
SErrorCodeEerverConfig value = errorCodeMap.get(key);
if (value == null) {
return "";
}
String string = MessageFormat.format(value.getvalue(), obj);
return string;
}
}

View File

@ -31,7 +31,8 @@ public class SItem implements BaseConfig {
private int[][] extraReward;
private int recycle;
private int[][] useGain;
private int useLevel;
private String name;
@Override
@ -123,4 +124,12 @@ public class SItem implements BaseConfig {
public int getRecycle() {
return recycle;
}
public int[][] getUseGain() {
return useGain;
}
public int getUseLevel() {
return useLevel;
}
}

View File

@ -86,6 +86,8 @@ public class SSpecialConfig implements BaseConfig {
public static final String REPLACE_ITEM_ID = "replace_item_id";//置换玉道具ID
public static final String REPLACE_COST = "replace_cost";//置换玉消耗
public static final String RecallCostDiamond = "RecallCostDiamond";// 回退消耗妖晶数量
public static final String XUANYUAN_OPEN_TIME = "xuanyuan_open_time";//轩辕开始时间(星期)
public static final String EXCHANGE_FORCE_TYPE = "exchange_focus_type";//货币转换类型