zhangshanxue 2020-06-21 05:42:29 +08:00
commit 6c9dfab0cc
12 changed files with 204 additions and 11 deletions

View File

@ -75,6 +75,7 @@ public class CarDelayFunction implements FunctionManager {
});
for(ZSetOperations.TypedTuple<String> item : guildRangeWithScores){
rank++;
String value = item.getValue();
int guildId = Integer.parseInt(value);
@ -83,7 +84,6 @@ public class CarDelayFunction implements FunctionManager {
if(guildInfo==null){
continue;
}
rank++;
Collection<Set<Integer>> values = guildInfo.getMembers().values();
if(userLevelGuildMap.containsKey(guildId)){
values.add(usersByGuildId.get(guildId));

View File

@ -133,6 +133,7 @@ public class RedisKey {
public static final String RANDOM_CARD_RANK="RANDOM_CARD_RANK";
public static final String RANDOM_CARD_PERFECT_RANK = "RANDOM_CARD_PERFECT_RANK";
public static final String GUILD_FORCE_RANK = "GUILD_FORCE_RANK";
public static final String GUILD_BOSS_RANK = "GUILD_BOSS_RANK";
public static final String GUILD_RED_PACKAGE_RANK = "GUILD_RED_PACKAGE_RANK";

View File

@ -20,6 +20,6 @@ public class RankFirstHandler extends BaseHandler<PlayerInfoProto.RankFirstReque
@Override
public void processWithProto(ISession iSession, PlayerInfoProto.RankFirstRequest proto) throws Exception {
RankLogic.getInstance().getRankFirstInfo(iSession,proto.getTypesList(),MessageTypeProto.MessageType.RANK_GET_FIRST_RESPONSE);
RankLogic.getInstance().getRankFirstInfo(iSession,proto.getTypesList(),proto.getActiviteIdList(),MessageTypeProto.MessageType.RANK_GET_FIRST_RESPONSE);
}
}

View File

@ -15,6 +15,7 @@ import com.ljsd.jieling.logic.activity.RemoveEventHeroHandler;
import com.ljsd.jieling.logic.activity.UserLevelEventHandler;
import com.ljsd.jieling.logic.activity.eventhandler.ActivityStateChangeHandler;
import com.ljsd.jieling.logic.activity.eventhandler.BuyGoodsDirectHandler;
import com.ljsd.jieling.logic.activity.eventhandler.GuildForceChangeEventHandler;
import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.championship.ChampionshipLogic;
import com.ljsd.jieling.logic.dao.ServerConfig;
@ -245,6 +246,7 @@ public class GlobalDataManaager implements IManager {
new FightMainEventHandler();
new BuyGoodsDirectHandler();
new ActivityStateChangeHandler();
new GuildForceChangeEventHandler();
ChampionshipLogic.minuteCheck(true);
GuildFightLogic.minuteCheckForCarFight();
} catch (Exception e) {

View File

@ -0,0 +1,55 @@
package com.ljsd.jieling.logic.activity.event;
/**
* @author lvxinran
* @date 2020/6/8
* @discribe
*/
public class GuildForceChangeEvent implements IEvent {
private int uid;
private int gid;
private int type;//1为新加入 2为修改 3为退出
private int force;
public int getUid() {
return uid;
}
public int getType() {
return type;
}
public int getForce() {
return force;
}
public int getGid() {
return gid;
}
public void setUid(int uid) {
this.uid = uid;
}
public void setGid(int gid) {
this.gid = gid;
}
public void setType(int type) {
this.type = type;
}
public void setForce(int force) {
this.force = force;
}
public GuildForceChangeEvent(int uid, int gid, int type, int force) {
this.uid = uid;
this.gid = gid;
this.type = type;
this.force = force;
}
}

View File

@ -0,0 +1,34 @@
package com.ljsd.jieling.logic.activity.eventhandler;
import com.ljsd.jieling.logic.activity.IEventHandler;
import com.ljsd.jieling.logic.activity.event.GuildForceChangeEvent;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.rank.RankContext;
import com.ljsd.jieling.logic.rank.RankEnum;
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
/**
* @author lvxinran
* @date 2020/6/8
* @discribe
*/
public class GuildForceChangeEventHandler implements IEventHandler {
public GuildForceChangeEventHandler() {
Poster.getPoster().listenEvent(this, GuildForceChangeEvent.class);
}
@Override
public void onEvent(IEvent event) throws Exception {
GuildForceChangeEvent forceChangeEvent = (GuildForceChangeEvent) event;
AbstractRank rankEnum = RankContext.getRankEnum(RankEnum.GUILD_FORCE_RANK.getType());
double score = rankEnum.getScoreById(forceChangeEvent.getGid(), "");
if(score<0){
score=0;
}
int resultForce = (int)(score+forceChangeEvent.getForce());
rankEnum.addRank(((GuildForceChangeEvent) event).getGid(),"",resultForce);
}
}

View File

@ -16,6 +16,7 @@ import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.activity.IEventHandler;
import com.ljsd.jieling.logic.activity.event.GuildForceChangeEvent;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.MinuteTaskEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
@ -591,6 +592,8 @@ public class GuildLogic {
AyyncWorker ayyncWorker = new AyyncWorker(targetUser, true, new AynMissionWorker(GameEvent.JOIN_FAMILY));
ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker);
RedisUtil.getInstence().removeMapEntrys(RedisKey.USER_LEVEL_GUILD_INFO,"",String.valueOf(applyId));
Poster.getPoster().dispatchEvent(new GuildForceChangeEvent(targetUser.getId(),targetUser.getPlayerInfoManager().getGuildId(),1,targetUser.getPlayerInfoManager().getMaxForce()));
// targetUser.getUserMissionManager().onGameEvent(targetUser, GameEvent.JOIN_FAMILY);
}finally {
RedisUtil.getInstence().releaseDistributedLock(RedisKey.OPERATE_FAMILY_APPLY_JOIN,Integer.toString(applyId), Integer.toString(applyId));
@ -1361,7 +1364,8 @@ public class GuildLogic {
sendGuildHelpRewardEmail(user);
int guildId = user.getPlayerInfoManager().getGuildId();
RedisUtil.getInstence().putMapEntry(RedisKey.USER_LEVEL_GUILD_INFO,"",String.valueOf(user.getId()),guildId);
//删除战力
Poster.getPoster().dispatchEvent(new GuildForceChangeEvent(user.getId(),user.getPlayerInfoManager().getGuildId(),3,0-user.getPlayerInfoManager().getMaxForce()));
//notify all
Family.GuildHelpInfoIndication.Builder build = Family.GuildHelpInfoIndication.newBuilder();
for (Map.Entry<Integer, Integer> entry : user.getGuildMyInfo().getGuidHelpInfo().entrySet()) {

View File

@ -16,6 +16,7 @@ import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.activity.event.GuildForceChangeEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.UserForceChangeEvent;
import com.ljsd.jieling.logic.activity.eventhandler.UserForceUpEventHandler;
@ -266,6 +267,9 @@ public class PlayerLogic {
int teamForce = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false);
System.out.println(teamForce);
if(user.getPlayerInfoManager().getMaxForce() < teamForce){
if(user.getPlayerInfoManager().getGuildId()!=0){
Poster.getPoster().dispatchEvent(new GuildForceChangeEvent(user.getId(),user.getPlayerInfoManager().getGuildId(),2,teamForce-user.getPlayerInfoManager().getMaxForce()));
}
user.getPlayerInfoManager().setMaxForce(teamForce);
Poster.getPoster().dispatchEvent(new UserForceChangeEvent(uid,teamForce));
user.getUserMissionManager().onGameEvent(user,GameEvent.USER_FORCE_CHANGE);

View File

@ -27,8 +27,8 @@ public enum RankEnum {
DEATH_PATH_EVERY_PERSON_RANK(15,RedisKey.DEATH_PATH_EVERY_PERSON_RANK,DeathPathEveryPersonRank::new),//param1当前阵玩家伤害 param2无 param3:无
DEATH_PATH_EVERY_GUILD_RANK(16,RedisKey.DEATH_PATH_EVERY_GUILD_RANK, DeathPathEveryGuildRank::new),//param1当前阵公会伤害 param2当前工会挑战人数 param3:无
DEATH_PATH_TOTAL_PERSON_RANK(17,RedisKey.DEATH_PATH_TOTAL_PERSON_RANK,DeathPathTotalPersonRank::new),//param1玩家总伤害 param2无 param3:无
DEATH_PATH_TOTAL_GUILD_RANK(18,RedisKey.DEATH_PATH_TOTAL_GUILD_RANK,DeathPathTotalGuildRank::new);//param1工会总伤害 param2无 param3:无
DEATH_PATH_TOTAL_GUILD_RANK(18,RedisKey.DEATH_PATH_TOTAL_GUILD_RANK,DeathPathTotalGuildRank::new),//param1工会总伤害 param2无 param3:无
GUILD_FORCE_RANK(20,RedisKey.GUILD_FORCE_RANK,GuildForceRank::new);//param1公会总战力 param2无 param3:无
private int type;
private String redisKey;

View File

@ -60,12 +60,14 @@ public class RankLogic {
* @param messageType
* @throws Exception
*/
public void getRankFirstInfo(ISession session, List<Integer> rankTypes, MessageTypeProto.MessageType messageType) throws Exception {
public void getRankFirstInfo(ISession session, List<Integer> rankTypes,List<Integer> activityId,MessageTypeProto.MessageType messageType) throws Exception {
PlayerManager playerManager = UserManager.getUser(session.getUid()).getPlayerInfoManager();
PlayerInfoProto.RankFirstResponse.Builder response = PlayerInfoProto.RankFirstResponse.newBuilder();
for(int type :rankTypes){
for(int i = 0 ; i <rankTypes.size();i++){
int type = rankTypes.get(i);
int param = activityId.get(i);
AbstractRank rankEnum = RankContext.getRankEnum(type);
CommonProto.UserRank.Builder first = rankEnum.getFirst();
CommonProto.UserRank.Builder first = rankEnum.getFirst(param);
response.addRanks(first.build());
response.addProud(playerManager.getProudInfo().contains(type)?1:0);
}

View File

@ -91,8 +91,8 @@ public abstract class AbstractRank implements IRank {
}
//获取第一名信息
public CommonProto.UserRank.Builder getFirst() throws Exception {
Set<ZSetOperations.TypedTuple<String>> rankByKey = getRankByKey("", 0, 1);
public CommonProto.UserRank.Builder getFirst(int activityId) throws Exception {
Set<ZSetOperations.TypedTuple<String>> rankByKey = getRankByKey(activityId==0?"":String.valueOf(activityId), 0, 0);
CommonProto.UserRank.Builder builder = CommonProto.UserRank.newBuilder();
if(rankByKey.size()!=1){
return builder;
@ -129,7 +129,7 @@ public abstract class AbstractRank implements IRank {
CommonProto.UserRank.Builder oneUserRank = getOneUserRank(everyUser, everyRankInfo);
builder.addRanks(oneUserRank);
}
public CommonProto.UserRank.Builder getOneUserRank(User everyUser,CommonProto.RankInfo.Builder everyRankInfo){
public CommonProto.UserRank.Builder getOneUserRank(User everyUser,CommonProto.RankInfo.Builder everyRankInfo) throws Exception {
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
.setUid(everyUser.getId())
.setUserName(everyUser.getPlayerInfoManager().getNickName())

View File

@ -0,0 +1,91 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import org.springframework.data.redis.core.ZSetOperations;
import java.util.Set;
/**
* @author lvxinran
* @date 2020/6/8
* @discribe
*/
public class GuildForceRank extends AbstractRank {
public GuildForceRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public int[] getDataByScore(Double score) {
return new int[]{score.intValue()};
}
@Override
public double getScore(double... data) {
return data[0];
}
@Override
protected void getOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) throws Exception {
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(data.getValue()));
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(index)
.setParam1(getParam1(data.getScore()))
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
.setUid(guildInfo.getId())
.setGuildName(guildInfo.getName())
.setRankInfo(everyRankInfo);
builder.addRanks(everyRank);
}
@Override
protected void getMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){
int guildId = user.getPlayerInfoManager().getGuildId();
int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey,rkey,Integer.toString(guildId)).intValue();
Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, rkey, Integer.toString(guildId));
CommonProto.RankInfo towerRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(myRank)
.setParam1(getParam1(zSetScore))
.setParam2(getParam2(zSetScore)).build();
allUserResponse.setMyRankInfo(towerRankInfo);
}
public CommonProto.UserRank.Builder getFirst(int activityId) throws Exception {
Set<ZSetOperations.TypedTuple<String>> rankByKey = getRankByKey(activityId==0?"":String.valueOf(activityId), 0, 0);
CommonProto.UserRank.Builder builder = CommonProto.UserRank.newBuilder();
if(rankByKey.size()!=1){
return builder;
}
ZSetOperations.TypedTuple<String> data = rankByKey.iterator().next();
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(1)
.setParam1(getParam1(data.getScore()))
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
int gid = Integer.parseInt(data.getValue());
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid);
Set<Integer> chairMan = guildInfo.getMembers().get(GlobalsDef.CHAIRMAN);
int chairManId = chairMan.iterator().next();
User user = UserManager.getUser(chairManId);
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
.setUid(chairManId)
.setUserName(user.getPlayerInfoManager().getNickName())
.setHead(user.getPlayerInfoManager().getHead())
.setHeadFrame(user.getPlayerInfoManager().getHeadFrame())
.setLevel(user.getPlayerInfoManager().getLevel())
.setRankInfo(everyRankInfo)
.setForce(user.getPlayerInfoManager().getMaxForce())
.setSex(user.getPlayerInfoManager().getSex())
.setGuildName(guildInfo.getName());
return everyRank;
}
}