Merge branch 'master_test_gn_arean' into master_test_gn

back_recharge
xuexinpeng 2021-04-26 16:27:19 +08:00
commit 197616887a
8 changed files with 268 additions and 2 deletions

View File

@ -22,7 +22,7 @@ public enum FightType {
TenDespairArray(16),//十绝阵
Firend(17),//好友
TowerMap(18),//森罗幻境
TaSuiLingXiao(19),//踏碎凌霄
;
private int type;

View File

@ -0,0 +1,132 @@
package com.ljsd.jieling.handler.activity;
import com.google.protobuf.GeneratedMessage;
import com.ljsd.fight.FightType;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.ktbeans.ReportEventEnum;
import com.ljsd.jieling.ktbeans.ReportUtil;
import com.ljsd.jieling.logic.activity.event.GoldRefreshEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.TaSuiLingXiaoEvent;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.fight.*;
import com.ljsd.jieling.logic.fight.result.FightResult;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.util.ItemUtil;
import config.SMonsterConfig;
import config.SMonsterGroup;
import config.SNewHeroConfig;
import manager.STableManager;
import org.springframework.stereotype.Component;
import rpc.protocols.ActivityProto;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.CommonProto;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
public class TasuilingxiaoHandler extends BaseHandler<ActivityProto.TasuilingxiaoRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.TasuilingxiaoRequest;
}
@Override
public GeneratedMessage processWithProto(int uid, ActivityProto.TasuilingxiaoRequest proto) throws Exception {
// 用户信息
User user = UserManager.getUser(uid);
if (user == null) {
throw new ErrorCodeException(ErrorCode.UNKNOWN);
}
// 读表
SNewHeroConfig newHeroConfig = STableManager.getConfig(SNewHeroConfig.class).get(proto.getActivityId());
int monsterGroupId = newHeroConfig.getMonsterGroup(); //怪物id
// 战斗逻辑
PVEFightEvent pveFightEvent = new PVEFightEvent(user.getId(), GlobalsDef.FORMATION_NORMAL, 20, "", GameFightType.NewGeneral, monsterGroupId, 3);
FightResult fightResult = FightDispatcher.dispatcher(pveFightEvent);
CommonProto.FightData fightData = CommonProto.FightData.newBuilder()
.setFightMaxTime(20)
.setFightSeed(fightResult.getSeed())
.setHeroFightInfos(fightResult.getFightTeamInfo())
.addAllMonsterList(fightResult.getMonsterTeamList())
.setFightType(FightType.TaSuiLingXiao.getType())
.setFightId(FightUtil.getFightId(user.getId(), FightType.TaSuiLingXiao.getType()))
.build();
// 记录战报
FightRecordLogic.getInstance().addRecordMap(user,fightData);
// 道具逻辑,封装好的
CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder();
// 消耗道具
//PlayerLogic.getInstance().checkAndUpdate(user, proto.getPrivilageTypeId(),1);
SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(monsterGroupId);
// 获取怪物组
int[][] contents = sMonsterGroup.getContents();
double bossBlood = 0.0; //怪物初始化血量
for (int i = 0; i < contents.length; i++) {
int[] ints = contents[i];
for (int j = 0; j < ints.length; j++) {
if (ints[j] == 0){
// 怪物不存在
continue;
}
SMonsterConfig monsterConfig = STableManager.getConfig(SMonsterConfig.class).get(ints[j]);
// 计算总血量
bossBlood+=monsterConfig.getHp();
}
}
// 战斗结果,{战斗结果,战斗时间单位1剩余血量......}
long[] checkResult = fightResult.getCheckResult();
//输
double lessBlood = 0.0;
if (checkResult[0] == 1){
lessBlood = bossBlood;
}else {
// 输 checkResult第三位开始为血量下标0开始
for (int i = 2; i < checkResult.length; i++) {
lessBlood+=checkResult[i];
}
lessBlood = bossBlood - lessBlood;
//return ActivityProto.TasuilingxiaoResponse.newBuilder().setFightData(fightData).setDrop(drop).setDamageVal((int)lessBlood).build();
}
//取出所有奖励状态
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(proto.getActivityId());
int [][]damageListData = newHeroConfig.getValueDropCell();
//完成目标个数
int goal = 0;
List<Integer> listState =mission.getActivityMissionMap().entrySet().stream()
.sorted(Map.Entry.comparingByKey()).map(e->e.getValue().getState()).collect(Collectors.toList());
List<Integer>dropList = new ArrayList<Integer>();
for (int i = 0; i < damageListData.length; i++) {
int[] ints = damageListData[i];
if(ints[0] > lessBlood){
break;
}
goal += 1;
if(i <= listState.size()-1){
if( listState.get(i) != 1){
dropList.add(ints[1]);
}
}
}
boolean extarReward = PlayerLogic.getInstance().check(user, newHeroConfig.getDailyNumber(), 1);
if(extarReward){
dropList.add(newHeroConfig.getDailyReward());
user.getPlayerInfoManager().updateVipPrivilage(newHeroConfig.getDailyNumber(),1);
}
Poster.getPoster().dispatchEvent(new TaSuiLingXiaoEvent(uid,(int)lessBlood,goal));
ItemUtil.drop(user,dropList.stream().mapToInt(Integer::intValue).toArray(),drop,1,0, BIReason.TA_SUI_LING_XIAO);
return ActivityProto.TasuilingxiaoResponse.newBuilder().setFightData(fightData).setDrop(drop).setDamageVal((int)lessBlood).build();
}
}

View File

@ -106,7 +106,8 @@ public enum ReportEventEnum {
START_DEMON_INVASION(72,"start_demon_invasion",CommonEventHandler.getInstance(),new String[]{"stage_id_travel","boss_ids","combat_results"}),
// 通过逍遥游
COMPLETE_TRAVEL(73,"complete_travel",CommonEventHandler.getInstance(),new String[]{"stage_id_travel"}),
// 新将来袭
TA_SUI_LING_XIAO(74,"tasuilingxiao_boss",CommonEventHandler.getInstance(),new String[]{"boss_id","damage_num","reward_nums_list"}),
VIP_LEVEL_UP(100,"", new VipLevelUpEventHandler(),new String[]{""});

View File

@ -72,6 +72,7 @@ public interface ActivityType {
int NEW_EIGHT_LOGIN = 56;//新的八日登录
int SIGN_BOX= 57;//累计签到宝箱
int JADE_DYNASTY_RECHARGE_SUM = 58;//破阵诛仙累充
int TA_SUI_LING_XIAO = 66;//踏碎凌霄
int JADE_DYNASTY_MISSION = 20000;//破阵诛仙任务
int JADE_DYNASTY_SHOP = 20001;//破阵诛仙限时商市
int JADE_DYNASTY_RARE_SHOP = 20002;//破阵诛仙珍奇宝阁
@ -92,4 +93,5 @@ public interface ActivityType {
int DEMON_TREASURE = 36;//降妖夺宝
int NEW_GENERAL_ATTACK = 200;//新将来袭
}

View File

@ -70,6 +70,8 @@ public enum ActivityTypeEnum {
FIFTEEN_LOGIN(ActivityType.FIFTEEN_LOGIN,FifteenActivity::new),
LUCKY_GET(ActivityType.LUCKY_GET,LuckyGetActivity::new),
EQUIP_UPLEVEL(ActivityType.EQUIP_UPLEVEL,EquipUpLevelActivity::new),
TA_SUI_LING_XIAO(ActivityType.TA_SUI_LING_XIAO,TaSuiLingXiaoActivity::new),
;
private int type;

View File

@ -0,0 +1,75 @@
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.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.BlessInfoRefreshEvent;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.TaSuiLingXiaoEvent;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SActivityRewardConfig;
import config.SGlobalActivity;
import config.SLuckyCatConfig;
import rpc.protocols.MessageTypeProto;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class TaSuiLingXiaoActivity extends AbstractActivity {
public TaSuiLingXiaoActivity(int id) {
super(id);
Poster.getPoster().listenEvent(this, TaSuiLingXiaoEvent.class);
}
@Override
public void onEvent(IEvent event) throws Exception {
if(event instanceof TaSuiLingXiaoEvent){
User user = UserManager.getUser(((TaSuiLingXiaoEvent) event).getUid());
if(user == null){
return;
}
if(user.getActivityManager().getActivityMissionMap().get(id) == null){
return;
}
update(user,((TaSuiLingXiaoEvent) event).getCount(),((TaSuiLingXiaoEvent) event).getGoal());
}
}
@Override
public boolean takeReward(ISession session, int missionId) throws Exception{
//不能领取 随掉落走
return false;
}
public void update(User user, int count,int goal) {
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
if( null == activityMission){
return;
}
if(count>activityMission.getV()){
//最大伤害更新
activityMission.setV(count);
}
//领取状态更新
activityMission.getActivityMissionMap().entrySet().stream()
.sorted(Map.Entry.comparingByKey()).limit(goal)
.forEachOrdered(x->{
if(x.getValue().getState() !=1){
x.getValue().setState(1);
}
});
//历史最高伤害
ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
sendActivityProgress(sessionByUid, activityMission, null);
}
}

View File

@ -0,0 +1,37 @@
package com.ljsd.jieling.logic.activity.event;
public class TaSuiLingXiaoEvent implements IEvent {
private int uid;
private int count;
private int goal;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public TaSuiLingXiaoEvent(int uid, int count, int goal) {
this.uid = uid;
this.count = count;
this.goal = goal;
}
public int getGoal() {
return goal;
}
public void setGoal(int goal) {
this.goal = goal;
}
}

View File

@ -20,6 +20,14 @@ public class SNewHeroConfig implements BaseConfig {
private int[][] dropCell;
private int[][] valueDropCell;
private int dailyReward;
private int dailyNumber;
@Override
public void init() throws Exception {
@ -50,6 +58,15 @@ public class SNewHeroConfig implements BaseConfig {
public int[][] getDropCell() {
return dropCell;
}
public int[][] getValueDropCell() {
return valueDropCell;
}
public int getDailyReward() {
return dailyReward;
}
public int getDailyNumber() {
return dailyNumber;
}
}