lvxinran 2019-08-31 06:24:20 +08:00
commit bf36633caf
26 changed files with 270 additions and 89 deletions

View File

@ -5,6 +5,7 @@ import com.ljsd.common.mogodb.LjsdMongoTemplate;
import com.ljsd.common.mogodb.test.pojo.PlayerForTest;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.util.MathUtils;
import com.mongodb.DBObject;
import com.mongodb.MongoClientURI;
import org.slf4j.Logger;
@ -60,28 +61,23 @@ public class MongoUtil {
}
public static LjsdMongoTemplate getLjsdMongoTemplate() throws UnknownHostException {
SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory(new MongoClientURI("mongodb://60.1.1.14:27017/jieling_10212"));
DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(simpleMongoDbFactory);
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, new MongoMappingContext());
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
// MongoTemplate mongoTemplate = new MongoTemplate(simpleMongoDbFactory, converter);
/* MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter();
mongoMapping.setCustomConversions(customConversions()); // tell mongodb to use the custom converters
mongoMapping.afterPropertiesSet();*/
return new LjsdMongoTemplate(new MongoTemplate(simpleMongoDbFactory, converter));
return MongoUtil.getInstence().getMyMongoTemplate();
}
public List<User> getRandomUsers(int size, int uid, int level) throws Exception {
if(size <= 0){
return null;
}
int randomLevel = MathUtils.random(5, 20);
Criteria criatira = new Criteria();
Random random = new Random();
int minLevel = random.nextInt(level) - 10;
int minLevel = level - randomLevel;
minLevel = minLevel <= 5 ? 5 : minLevel;
int maxLevel = random.nextInt(level) + 10;
int maxLevel = level + randomLevel;
long befor3Day = System.currentTimeMillis() - BEFOR_3_DAY;
criatira.andOperator(Criteria.where("id").nin(uid),
Criteria.where("playerManager.level").gte(minLevel), Criteria.where("playerManager.level").lte(maxLevel),
Criteria.where("playerManager.loginTime").gte(befor3Day));//不包含自己
Query query = new Query(criatira).limit(size);
Query query = new Query(criatira).limit(size*2+1);
query.fields().include("playerManager");
return this.myMongoTemplate.findAllByCondition(query, User.class) ;
}

View File

@ -74,6 +74,7 @@ public interface BIReason {
int MONSTERATTACK_BACK = 45; // 妖兽来袭预扣归还
int FIRST_ADVENTURE_REWARD = 46; // 秘境首次奖励外敌挑战券
int UPHERO_DECOMPOS_HERO_REWARD= 47 ;//进阶妖灵师返还奖励
//道具消耗原因 1000开头
int ADVENTURE_UPLEVEL_CONSUME = 1000; //秘境升级

View File

@ -138,7 +138,7 @@ public class GetPlayerInfoHandler extends BaseHandler{
try {
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true);
ActivityLogic.getInstance().flushForLogin(user);
DoFix.getInstance().loginFix(user);
// DoFix.getInstance().loginFix(user);
if(playerInfoManager.getIsdayFirst()==0){
playerInfoManager.setIsdayFirst(1);
}

View File

@ -47,13 +47,13 @@ public class LoginRequestHandler extends BaseHandler {
LoginParamType.NETWORK_WIFI.equals(loginRequest.getNetworkS()));
switch (loginRequest.getPlatformS()){
case LoginParamType.PLATFORM_ANDRIOD:
paramEnvironmentSimpleBean.setIdfa_s(loginRequest.getIdfaSOrImeiS());
paramEnvironmentSimpleBean.setImei_s(loginRequest.getIdfaSOrImeiS());
break;
case LoginParamType.PLATFORM_IOS:
paramEnvironmentSimpleBean.setImei_s(loginRequest.getIdfaSOrImeiS());
paramEnvironmentSimpleBean.setIdfa_s(loginRequest.getIdfaSOrImeiS());
break;
case LoginParamType.PLATFORM_IOS_YY:
paramEnvironmentSimpleBean.setImei_s(loginRequest.getIdfaSOrImeiS());
paramEnvironmentSimpleBean.setIdfa_s(loginRequest.getIdfaSOrImeiS());
break;
case LoginParamType.PLATFORM_PC:
break;
@ -73,8 +73,17 @@ public class LoginRequestHandler extends BaseHandler {
//登陆注册入内存
User user = UserManager.userLogin(userId,loginRequest.getOpenId());
user.getPlayerInfoManager().setOpenId(loginRequest.getOpenId());
String openIdFront = loginRequest.getOpenId();
String[] split = openIdFront.split("\\.");
User user = null;
if(split.length>=2){
String openId = split[0];
String chanel = split[1];
user = UserManager.userLogin(userId,openId,chanel);
}else{
user = UserManager.userLogin(userId,openIdFront,"");
}
String newToken = UserManager.getNewToken(userId);

View File

@ -37,7 +37,8 @@ public class UseAndPriceItemHandler extends BaseHandler {
} else if (type == 2){ //分解装备
ItemLogic.getInstance().decomposeEquip(iSession,equipIdsList);
}else{
ItemLogic.getInstance().decomposeHero(iSession,heroIdsList);
CommonProto.Drop.Builder baseBuilder =ItemLogic.getInstance().decomposeHero(iSession,heroIdsList,null, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE);
ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, baseBuilder);
}
}

View File

@ -188,7 +188,7 @@ public class MapLogic {
}
user.setMapManager(mapManager);
user.getUserMissionManager().onGameEvent(user,GameEvent.PlAY_STORY,SChallengeConfig.sChallengeConfigs.get(mapId).getType(),1);
Poster.getPoster().dispatchEvent(new StoryEvent(user.getId()));
Poster.getPoster().dispatchEvent(new StoryEvent(user.getId(),1));
} else if (mapManager.getCurMapId() != mapId) {
MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "地图错误,应进入" + mapManager.getCurMapId());
@ -1813,6 +1813,7 @@ public class MapLogic {
CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, sChallengeMapConfig.getSweepingAward(), 1, 0, BIReason.MAP_SWEEP_REWARD);
mapSweepResponse.addDrop(dropBuilder);
}
Poster.getPoster().dispatchEvent(new StoryEvent(user.getId(),count));
user.getUserMissionManager().onGameEvent(user, GameEvent.STORY_FIGHT, mapId,1,count);
user.getUserMissionManager().onGameEvent(user, GameEvent.PlAY_STORY, type,count);
MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapSweepResponse.build(), true);

View File

@ -16,7 +16,7 @@ public class EatBuffBehavior extends BaseBehavior {
@Override
public boolean process(int optionId, User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception {
CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user.getMapManager(), behaviorTypeValues[0][0]);
CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user, behaviorTypeValues[0][0]);
return true;
}
}

View File

@ -17,7 +17,7 @@ public class FourtyBehavior extends BaseBehavior {
@Override
public boolean process(int optionId, User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception {
BehaviorUtil.updateMission(user, eventUpdateResponse);
CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user.getMapManager(), behaviorTypeValues[0][0]);
CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user, behaviorTypeValues[0][0]);
BehaviorUtil.destoryPoints(user, behaviorTypeValues[1]);
for (int i = 2; i < behaviorTypeValues.length; i++) {
BehaviorUtil.addBehaviorInfo(user,behaviorTypeValues[i][3], user.getMapManager(), behaviorTypeValues[i][0], behaviorTypeValues[i][1], behaviorTypeValues[i][2]);

View File

@ -15,7 +15,7 @@ public class ThirtyFourBehavior extends BaseBehavior {
@Override
public boolean process(int optionId, User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception {
CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user.getMapManager(), behaviorTypeValues[0][0]);
CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user, behaviorTypeValues[0][0]);
BehaviorUtil.destoryPoint(user, behaviorTypeValues[0][1]);
return true;
}

View File

@ -21,7 +21,7 @@ public class ThirtySevenBehavior extends BaseBehavior{
cost[0][0] = behaviorTypeValues[0][0];
cost[0][1] = behaviorTypeValues[0][1];
ItemUtil.itemCost(user,cost, BIReason.MAP_CONSUME,user.getMapManager().getCurMapId());
CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user.getMapManager(), behaviorTypeValues[0][2]);
CombatLogic.getInstance().bufferAddByEatFoodOrEventTrigger(user, behaviorTypeValues[0][2]);
return true;
}

View File

@ -58,7 +58,11 @@ public class KtEventUtils {
int itemTotalNum = (int)parm[4];
paramEventBean.add(itemUseType[useType]);
paramEventBean.add(String.valueOf(useReson));
paramEventBean.add(String.valueOf(itemId));
if(currencyMap.containsKey(itemId)){
paramEventBean.add(currencyMap.get(itemId));
}else{
paramEventBean.add(String.valueOf(itemId));
}
paramEventBean.add(String.valueOf(itemNum));
PlayerManager playerInfoManager = user.getPlayerInfoManager();
BILog.info("itemflow {}|{}|{}|{}|{}|{}|{}|{}",user.getId(), playerInfoManager.getLevel(), playerInfoManager.getVipLevel(),useType,useReson,itemId,itemNum,itemTotalNum);

View File

@ -97,7 +97,13 @@ public class ActivityLogic {
if (endTime != 0 && now > endTime) {
if (openActivityIds.contains(sGlobalActivity.getId())) {
openActivityIds.remove(sGlobalActivity.getId());
ActivityTypeEnum.getActicityType(sGlobalActivity.getId()).onActivityEnd();
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId());
if (null == abstractActivity) {
continue;
}
abstractActivity.onActivityEnd();
}
continue;
}
@ -106,6 +112,9 @@ public class ActivityLogic {
for (Map.Entry<Integer, ISession> entry : OnlineUserManager.sessionMap.entrySet()) {
User user = UserManager.getUserInMem(entry.getKey());
if(user==null){
continue;
}
PlayerInfoProto.ActivityUpateIndication.Builder builder = PlayerInfoProto.ActivityUpateIndication.newBuilder();
MissionEventDistributor.requestStart();
Set<Integer> openNews = checkActivityOfUser(user, builder);
@ -156,7 +165,7 @@ public class ActivityLogic {
activityManager.initAllActivityMission(openActivityId);
}
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(openActivityId);
if (abstractActivity == null) {
if (null==abstractActivity) {
continue;
}
abstractActivity.initActivity(user);
@ -185,7 +194,11 @@ public class ActivityLogic {
if (endTime != 0 && now > endTime) {
ActivityMission activityMission = activityMissionMap.get(activityId);
if (activityMission != null) {
ActivityTypeEnum.getActicityType(sGlobalActivity.getId()).onActivityEndSelfWithDealReward(user);
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId());
if (null==abstractActivity) {
continue;
}
abstractActivity .onActivityEndSelfWithDealReward(user);
activityManager.removeActivity(activityId);
LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId);
if (builder != null) {
@ -206,7 +219,11 @@ public class ActivityLogic {
} else {
ActivityMission activityMission = activityMissionMap.get(activityId);
if (activityMission != null) {
ActivityTypeEnum.getActicityType(sGlobalActivity.getId()).onActivityEndSelfWithDealReward(user);
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId());
if (null==abstractActivity) {
continue;
}
abstractActivity.onActivityEndSelfWithDealReward(user);
activityManager.removeActivity(activityId);
LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId);
if (builder != null) {
@ -364,7 +381,7 @@ public class ActivityLogic {
}
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(activityId);
if (abstractActivity == null) {
if (null==abstractActivity) {
continue;
}

View File

@ -18,7 +18,7 @@ class CopyExpectRankActivity extends ExpectRankActivity {
public void onEvent(IEvent event) throws Exception {
if (!(event instanceof StoryEvent))
return;
update(UserManager.getUser(((StoryEvent) event).getUid()), 1);
update(UserManager.getUser(((StoryEvent) event).getUid()), ((StoryEvent) event).getCount());
}
}

View File

@ -58,6 +58,9 @@ class RechargeSumDayActivity extends AbstractActivity {
if (value < values[0][1]) {
return false;
}
if(activityProgressInfo.getProgrss()!=1){
return false;
}
return true;
}

View File

@ -6,12 +6,18 @@ package com.ljsd.jieling.logic.activity.event;
public class StoryEvent implements IEvent {
private int uid;
private int count;
public StoryEvent(int uid) {
public StoryEvent(int uid, int count) {
this.uid = uid;
this.count = count;
}
public int getUid() {
return uid;
}
public int getCount() {
return count;
}
}

View File

@ -80,6 +80,8 @@ public class PlayerManager extends MongoBase {
private int sendDays;
private String channel;
private Map<Integer,Long> onlineTimeOfDay = new HashMap<>(); // 20190808
public PlayerManager(){
@ -436,7 +438,7 @@ public class PlayerManager extends MongoBase {
public void addOnlineTime(long onlineTime) {
this.onlineTime += onlineTime;
setOnlineTimeOfDay(onlineTime);
//setOnlineTimeOfDay(onlineTime);
updateString("onlineTime", this.onlineTime);
}
@ -464,6 +466,16 @@ public class PlayerManager extends MongoBase {
updateString("onlineTimeOfDay", this.onlineTimeOfDay);
}
public String getChannel() {
return channel;
}
public void setChannel(String channel) {
updateString("channel", this.channel);
this.channel = channel;
}
public Map<Integer, Long> getOnlineTimeOfDay() {
return onlineTimeOfDay;
}

View File

@ -10,6 +10,7 @@ import java.util.*;
public class RechargeInfo extends MongoBase{
private int saveAmt;//累计充值
private int soulCrystalAmt;//累计充值购买魂晶
private int isFirst;
private long createTime;
private int hadBuyFound;
@ -152,4 +153,13 @@ public class RechargeInfo extends MongoBase{
updateString("goodseSendDailyMap." + goodsType,sendTime);
this.goodseSendDailyMap.put(goodsType,sendTime);
}
public int getSoulCrystalAmt() {
return soulCrystalAmt;
}
public void addSoulCrystalAmt(int soulCrystalAmt) {
this.soulCrystalAmt += soulCrystalAmt;
updateString("soulCrystalAmt",soulCrystalAmt);
}
}

View File

@ -31,12 +31,12 @@ public class UserManager {
return userMap.containsKey(uid);
}
public static User userLogin(int uid,String openId) throws Exception {
public static User userLogin(int uid,String openId,String channel) throws Exception {
User user = null;
if (!UserManager.isUserExist(uid)){
user = MongoUtil.getInstence().getMyMongoTemplate().findById(User.getCollectionName(), uid, User.class);
if (user == null) {
user = registerUser(uid,openId);
user = registerUser(uid,openId,channel);
}
UserManager.addUser(user);
}else{
@ -46,16 +46,16 @@ public class UserManager {
}
private static User registerUser(int uid,String openId) throws Exception {
private static User registerUser(int uid,String openId,String channel) throws Exception {
User user = new User(uid);
initPlayer(user,openId);
initPlayer(user,openId,channel);
UserManager.addUser(user);
MongoUtil.getInstence().getMyMongoTemplate().save(user);
PlayerLogic.getInstance().sendTestWelfareMail(user,1,1);
return user;
}
private static void initPlayer(User user,String openId) throws Exception {
private static void initPlayer(User user,String openId,String channel) throws Exception {
SGameSetting gameSetting = SGameSetting.getGameSetting();
PlayerManager playerManager = user.getPlayerInfoManager();
long now = TimeUtils.now();
@ -70,6 +70,7 @@ public class UserManager {
playerManager.setSendDays(1);
playerManager.updateVipInfo(user,0);
playerManager.setRechargeInfo(new RechargeInfo());
playerManager.setChannel(channel);
playerManager.setHeadFrame(SGameSetting.getGameSetting().getDefaultPicture());
SPlayerLevelConfig sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(1);
playerManager.setMaxStamina(sPlayerLevelConfig.getMaxEnergy());

View File

@ -8,6 +8,7 @@ import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.map.EndlessHero;
import com.ljsd.jieling.handler.map.MapManager;
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
import com.ljsd.jieling.ktbeans.KTGameType;
@ -19,6 +20,7 @@ import com.ljsd.jieling.logic.activity.event.SecretEvent;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.hero.HeroAttributeEnum;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.store.StoreLogic;
@ -114,13 +116,33 @@ public class CombatLogic {
return heroAllAttributeMap;
}
public void bufferAddByEatFoodOrEventTrigger(MapManager mapManager,int foodIdOrEventId) throws Exception {
public void bufferAddByEatFoodOrEventTrigger(User user,int foodIdOrEventId) throws Exception {
MapManager mapManager = user.getMapManager();
Map<String, Map<Integer, Integer>> heroAllAttributeMap = bufferAddByEatFoodOrEventTrigger(foodIdOrEventId, mapManager.getHeroAllAttributeMap());
mapManager.setHeroAllAttributeMap(heroAllAttributeMap);
SFoodsConfig sFoodsConfig = SFoodsConfig.getsFoodsConfigByFoodId(foodIdOrEventId);
int contiue = sFoodsConfig.getContiue();
if(contiue==0){
contiue=-1;
int teamId = mapManager.getTeamId();
List<TeamPosHeroInfo> teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(teamId);
Map<Integer,Integer> foodAddMap = new HashMap<>();
getFoodAttributeAdd(GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON, foodAddMap, sFoodsConfig);
for (TeamPosHeroInfo heroInfo : teamPosHeroInfoList) {
Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId());
if (hero == null) {
continue;
}
Map<Integer, Integer> heroAllAttribute = user.getMapManager().getHeroAllAttributeByHeroId(hero.getId());
if(heroAllAttribute == null || heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId()) <= 0){
continue;
}
HeroLogic.getInstance().combinedAttribute(foodAddMap,heroAllAttribute);
HeroLogic.getInstance().calInteractAdd(heroAllAttribute);
heroAllAttributeMap.put(hero.getId(), heroAllAttribute);
}
mapManager.setHeroAllAttributeMap(heroAllAttributeMap);
}
mapManager.eatFood(foodIdOrEventId,contiue);
}
@ -136,24 +158,27 @@ public class CombatLogic {
}
int foodId = foodBuffer.getKey();
SFoodsConfig sFoodsConfig = SFoodsConfig.getsFoodsConfigByFoodId(foodId);
int typeTmp = sFoodsConfig.getType();
int targetTmp = sFoodsConfig.getTarget();
if( typeTmp==type && targetTmp==target ){
int[][] effectParas = sFoodsConfig.getEffectPara();
for(int[] effectPara : effectParas){
int effectId = effectPara[0];
int effectValue = effectPara[1];
if(!foddAddResult.containsKey(effectId)){
foddAddResult.put(effectId,effectValue);
continue;
}
foddAddResult.put( effectId,foddAddResult.get(effectId) + effectValue );
}
}
getFoodAttributeAdd(type, target, foddAddResult, sFoodsConfig);
}
return foddAddResult;
}
private void getFoodAttributeAdd(int type, int target, Map<Integer, Integer> foddAddResult, SFoodsConfig sFoodsConfig) {
int typeTmp = sFoodsConfig.getType();
int targetTmp = sFoodsConfig.getTarget();
if( typeTmp==type && targetTmp==target ){
int[][] effectParas = sFoodsConfig.getEffectPara();
for(int[] effectPara : effectParas){
int effectId = effectPara[0];
int effectValue = effectPara[1];
if(!foddAddResult.containsKey(effectId)){
foddAddResult.put(effectId,effectValue);
continue;
}
foddAddResult.put( effectId,foddAddResult.get(effectId) + effectValue );
}
}
}
/************** 新挂机*****************/

View File

@ -24,10 +24,7 @@ import com.ljsd.jieling.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
public class FriendLogic {
@ -95,18 +92,54 @@ public class FriendLogic {
FriendManager friendManager = user.getFriendManager();
int selectSize = 10;
Set<Integer> recommondIds = new HashSet<>();
Set<Integer> onlineUIds = OnlineUserManager.sessionMap.keySet();
int level = playerInfoManager.getLevel();
int randomLevel = MathUtils.random(5, 20);
List<Integer> recommandFriends = new ArrayList<>();
List<CommonProto.Friend> friendList = new CopyOnWriteArrayList<>();
for(Integer recommandId : onlineUIds){
if(recommandId == uid ){
continue;
}
if (!checkIsAllowRecommandFriend(friendManager, recommandId,recommondIds)){
continue;
}
User recommandIdUser = UserManager.getUserInMem(recommandId);
int minLevel = level - randomLevel;
minLevel = minLevel <= 5 ? 5 : minLevel;
int maxLevel = level + randomLevel;
int recommandLevel = recommandIdUser.getPlayerInfoManager().getLevel();
if(recommandLevel < minLevel || recommandLevel > maxLevel){
continue;
}
recommondIds.add(recommandId);
recommandFriends.add(recommandId);
selectSize--;
if(selectSize<=0){
break;
}
}
Collections.shuffle(recommandFriends);
List<User> cUsers = MongoUtil.getInstence().getRandomUsers(selectSize, uid, playerInfoManager.getLevel());
if (cUsers != null){
Collections.shuffle(cUsers);
for (User cUser1 : cUsers) {
int recommandId = cUser1.getId();
if (!checkIsAllowRecommandFriend(friendManager, recommandId,recommondIds)){
continue;
}
recommondIds.add(recommandId);
recommandFriends.add(recommandId);
selectSize--;
if(selectSize<=0){
break;
}
}
}
List<CommonProto.Friend> friendList = new CopyOnWriteArrayList<>();
for (Integer commondUid : recommondIds){
for (Integer commondUid : recommandFriends){
CommonProto.Friend friend = CBean2Proto.getFriendInfo(commondUid,friendManager);
friendList.add(friend);
}
@ -298,9 +331,7 @@ public class FriendLogic {
@Override
public void work(User user) throws Exception {
boolean isOnline = OnlineUserManager.checkUidOnline(user.getId());
if(isOnline){
MissionEventDistributor.requestStart();
}
MissionEventDistributor.requestStart();
user.getUserMissionManager().onGameEvent(user, GameEvent.FRIEND_NUMS, 1);
if(isOnline){
ISession session = OnlineUserManager.getSessionByUid(user.getId());
@ -420,7 +451,7 @@ public class FriendLogic {
User friendUser = UserManager.getUser(friendId);
FriendManager friendManager1 = friendUser.getFriendManager();
Map<Integer, Integer> haveRewardMap = friendUser.getFriendManager().getHaveRewardMap();
if (haveRewardMap.get(uid) != 0) {
if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) {
MessageUtil.sendErrorResponse(iSession, 0, msgId, "已经赠送过");
return;
}
@ -439,14 +470,14 @@ public class FriendLogic {
User friendUser = UserManager.getUser(friendUserId);
FriendManager friendManager1 = friendUser.getFriendManager();
Map<Integer, Integer> haveRewardMap = friendManager1.getHaveRewardMap();
if (haveRewardMap.get(uid) != 0) {
if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) {
continue;
}
friendManager.updateGiveMap(friendUserId,1);
boolean check = friendUser.getPlayerInfoManager().check(SGameSetting.getGameSetting().getMaxEnergyGet(), 0);
if(check){
friendManager1.updateHaveRewardMap(uid,1);
sendFriendStatedication(uid,friendId,2);
sendFriendStatedication(uid,friendUserId,2);
times++;
}
}
@ -481,7 +512,7 @@ public class FriendLogic {
MessageUtil.sendErrorResponse(iSession, 0, msgId, "没有该好友");
return;
}
if (haveRewardMap.get(friendId) !=1){
if (haveRewardMap.containsKey(friendId) && haveRewardMap.get(friendId) !=1){
MessageUtil.sendErrorResponse(iSession, 0, msgId, "已领取赠礼");
return;
}
@ -492,7 +523,7 @@ public class FriendLogic {
receieveFriends.add(friendId);
}else{
for (Integer friend : friends) {
if (haveRewardMap.get(friend) != 1) {
if (haveRewardMap.containsKey(friend) && haveRewardMap.get(friend) != 1) {
continue;
}
check = playerInfoManager.check(SGameSetting.getGameSetting().getMaxEnergyGet(), 1);
@ -570,6 +601,7 @@ public class FriendLogic {
User user = UserManager.getUser(uid);
FriendManager friendManager = user.getFriendManager();
Map<Integer, Integer> giveMap = friendManager.getGiveMap();
friendManager.setHaveRewardMap(new HashMap<>());
for (Map.Entry<Integer,Integer> entry: giveMap.entrySet()){
Integer friendId = entry.getKey();
User friendUser = UserManager.getUser(friendId);

View File

@ -4,15 +4,21 @@ import com.ljsd.GameApplication;
import com.ljsd.jieling.chat.logic.ChatLogic;
import com.ljsd.jieling.config.*;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.core.HandlerLogicThread;
import com.ljsd.jieling.core.VipPrivilegeType;
import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.event.HeroUpStarEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.fight.CombatLogic;
import com.ljsd.jieling.logic.item.ItemLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.mission.event.MissionEventDistributor;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.HeroInfoProto;
@ -626,12 +632,13 @@ public class HeroLogic {
}
//删除hero
recyleHeroBySystem(user,removeHeroIds);
CommonProto.Drop.Builder baseBuilder = ItemLogic.getInstance().decomposeHero(session,new LinkedList<>(removeHeroIds),Collections.singleton(26),MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE);
// recyleHeroBySystem(user,removeHeroIds);
targetHero.upStar( 1 );
Poster.getPoster().dispatchEvent(new HeroUpStarEvent(user.getId(),targetHero.getStar()));
targetHero.setStarBreakId(scHeroRankUpConfig.getId());
user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_UP,2,targetHero.getTemplateId(),targetHero.getStar());
MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,null,true);
MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,baseBuilder.build(),true);
if(targetHero.getStar()>=7){
String message = SErrorCodeEerverConfig.getI18NMessage("lamp_rankup_hero_content", new Object[]{user.getPlayerInfoManager().getNickName(), scHero.getReadingName(),targetHero.getStar()});
ChatLogic.getInstance().sendSysChatMessage(message,Global.DILIGENT,targetHero.getTemplateId(),0,0,0,0,0);
@ -912,7 +919,7 @@ public class HeroLogic {
public Map<Integer,Integer> calHeroNotBufferAttribute(User user, Hero hero,boolean isForce,int teamId){
Map<Integer, Integer> heroAllAttribute = calHeroAllAttribute(hero,isForce);
heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE));
Collection<String> values = hero.getEquipByPositionMap().values();
EquipManager equipManager = user.getEquipManager();
PokemonManager pokemonManager = user.getPokemonManager();
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
@ -936,16 +943,50 @@ public class HeroLogic {
}
//装备总战力评分
int equipForce=0;
for(String equipId:values){
boolean needRemove = false;
Iterator<Map.Entry<Integer, String>> iterator = hero.getEquipByPositionMap().entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<Integer, String> next = iterator.next();
String equipId = next.getValue();
Equip equip = equipManager.getEquipMap().get(equipId);
if(equip == null){
needRemove = true;
continue;
}
Map<Integer, Integer> propertyValueByIdMap = equip.getPropertyValueByIdMap();
Map<Integer, Integer> secondValueByIdMap = equip.getSecondValueByIdMap();
// LOGGER.info("cal equip = {}",equip.getEquipId());
// LOGGER.info("cal equip = {}",equip.getEquipId());
combinedAttribute(propertyValueByIdMap,heroAllAttribute);
combinedAttribute(secondValueByIdMap,heroAllAttribute);
SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equip.getEquipId());
equipForce+=sEquipConfig.getScore();
// LOGGER.info("cal equip = {} end",equip.getEquipId());
}
if(needRemove){
AyyncWorker ayyncWorker = new AyyncWorker(user,true) {
@Override
public void work(User user) throws Exception {
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
for(Hero heroTmp : heroMap.values()){
Iterator<Map.Entry<Integer, String>> iterator = heroTmp.getEquipByPositionMap().entrySet().iterator();
boolean isUpate = false;
while (iterator.hasNext()){
Map.Entry<Integer, String> next = iterator.next();
String equipId = next.getValue();
Equip equip = equipManager.getEquipMap().get(equipId);
if(equip == null){
iterator.remove();
isUpate = true;
}
}
if(isUpate){
heroTmp.setEquipByPositionMap(heroTmp.getEquipByPositionMap());
}
}
}
};
ProtocolsManager instance = ProtocolsManager.getInstance();
HandlerLogicThread handlerThread = instance.handlerThreads[user.getId() % instance.HANDLER_THREAD_NUM];
handlerThread.addAyyncWorker(ayyncWorker);
}
//天赋异妖加成
Map<Integer, Pokemon> ringFireMap = pokemonManager.getRingFireMap();
@ -1079,7 +1120,7 @@ public class HeroLogic {
return heroAllAttribute;
}
//食物buffer加成
Map<Integer, Integer> foodAddMap = CombatLogic.getInstance().attributeByEatFood(user,GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_TEAM);
Map<Integer, Integer> foodAddMap = CombatLogic.getInstance().attributeByEatFood(user,GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON);
if(foodAddMap.isEmpty()){
return heroAllAttribute;
}

View File

@ -15,10 +15,7 @@ import com.ljsd.jieling.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
public class ItemLogic {
private static final Logger LOGGER = LoggerFactory.getLogger(ItemLogic.class);
@ -92,7 +89,7 @@ public class ItemLogic {
return "";
}
private void sendUseAndPriceItemMessage(ISession iSession, int msgId, CommonProto.Drop.Builder drop) {
public static void sendUseAndPriceItemMessage(ISession iSession, int msgId, CommonProto.Drop.Builder drop) {
PlayerInfoProto.UseAndPriceItemResponse useAndPriceItemResponse = PlayerInfoProto.UseAndPriceItemResponse.newBuilder()
.setDrop(drop)
.build();
@ -200,20 +197,20 @@ public class ItemLogic {
}
/**
*
* |
* @param iSession
* @param heroIdsList
*/
public void decomposeHero(ISession iSession, List<String> heroIdsList) throws Exception {
int msgId = MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE;
public CommonProto.Drop.Builder decomposeHero(ISession iSession, List<String> heroIdsList,Set<Integer> filterItem,int msgId) throws Exception {
int uid = iSession.getUid();
CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder();
User user = UserManager.getUser(uid);
HeroManager heroManager = user.getHeroManager();
StringBuilder reward = new StringBuilder();
String erroMags = checkHeroResolve(heroIdsList,user);
if (!erroMags.isEmpty()){
MessageUtil.sendErrorResponse(iSession,0,msgId,erroMags);
return;
return baseBuilder;
}
//1裸角色卡没有突破过的角色卡熔炼后返还的材料=当前等级返还升级材料+item表返还材料
//2有过突破的卡 =当前等级返还升级材料+突破表返还材料
@ -248,10 +245,21 @@ public class ItemLogic {
reward.append("#").append(sItem.getResolveReward());
}
}
int reson =BIReason.DECOMPOS_HERO_REWARD;
if(null!=filterItem){
reson= BIReason.UPHERO_DECOMPOS_HERO_REWARD;
for (Integer id:filterItem){
if(baseItemMap.containsKey(id)){
baseItemMap.remove(id);
}
}
// filterItem.retainAll(baseItemMap.keySet());
// filterItem.forEach(baseItemMap::remove);
}
ItemUtil.combineReward(user,StringUtil.parseFiledInt(reward.toString()),1,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap);
CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder();
ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap, BIReason.DECOMPOS_HERO_REWARD);
sendUseAndPriceItemMessage(iSession, msgId, baseBuilder);
ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap, reson);
return baseBuilder;
}
private String checkHeroResolve(List<String> heroIdsList,User user){

View File

@ -71,8 +71,8 @@ public class MailLogic {
if (size > Global.MAIL_BOX_CAPACITY){
Collections.sort(cMailList, Comparator.comparingInt(Mail::getSendTime));
for(int i = 0; i < (size - Global.MAIL_BOX_CAPACITY); i++){
cMailList.remove(0);
mailManager.removeMail(cMailList.get(0).getId());
cMailList.remove(0);
}
}
getAllMailProtoList(cMailList,mailList);
@ -192,6 +192,10 @@ public class MailLogic {
// mail.setState(Global.MAIL_DRAW_ST_GOT);
// mailManager.addMail(mail);
}
if(mailItem.length()==0){
MessageUtil.sendErrorResponse(iSession,0,msgId,"该邮件没有附件可以领取");
return;
}
int[][] itemArr = StringUtil.parseFiledInt2(mailItem.toString());
boolean isLimit = ItemUtil.checkCardAndEquipLimit(user,itemArr);
if (isLimit){

View File

@ -171,6 +171,13 @@ public class BuyGoodsLogic {
}
if(sRechargeCommodityConfig.getAccumulativeRecharge() == 1){
int saveAmt = rechargeInfo.getSaveAmt();
int[][] costItemArr = StringUtil.parseFiledInt2(rewardStr);
for (int i = 0; i <costItemArr.length ; i++) {
if(costItemArr[i][0]==Global.SOULCRYSTAL){
rechargeInfo.addSoulCrystalAmt(costItemArr[i][1]);
}
}
rechargeInfo.setSaveAmt(price+saveAmt);
user.getPlayerInfoManager().addRechargedaily(price);
//TODO 用事件分发

View File

@ -274,7 +274,7 @@ public class CBean2Proto {
if (giveMap.size() != 0 && giveMap.containsKey(friendId)){
isGrive = giveMap.get(friendId);
}
if (haveRewardMap.size() != 0 && giveMap.containsKey(friendId)){
if (haveRewardMap.size() != 0 && giveMap.containsKey(friendId) && haveRewardMap.containsKey(friendId)){
haveReward = haveRewardMap.get(friendId) ==2?0:haveRewardMap.get(friendId);
}
}

View File

@ -42,6 +42,9 @@ public class ItemUtil {
currencyMap.add(Global.GEM);
currencyMap.add(Global.GOLD);
currencyMap.add(Global.SOULCRYSTAL);
currencyMap.add(Global.DEVILJADE);//妖灵玉
currencyMap.add(Global.ELITEPROOF);//精英证明
currencyMap.add(Global.HEARTFIRE);//心火明晶
}
public static void initNoDelete(){