[Cleanup] Some code cleaups before merge

This commit is contained in:
hartie95 2023-01-25 21:10:36 +01:00
parent ca10b6e6b5
commit 1e3767b5f6
13 changed files with 80 additions and 109 deletions

View File

@ -165,7 +165,7 @@ public class GameData {
protected static Int2ObjectMap<IntSet> avatarSkillLevels = new Int2ObjectOpenHashMap<>();
@Getter private static final Map<String, List<QuestData>> beginCondQuestMap = new HashMap<>(); // cache filled by QuestData
@Getter private static final Map<Integer, Integer> questTalkMap = new HashMap<>();
@Getter private static final Map<Integer, TrialAvatarCustomData> trialAvatarCustomData = new HashMap<>();
@Getter private static final Int2ObjectMap<TrialAvatarCustomData> trialAvatarCustomData = new Int2ObjectOpenHashMap<>();
@Getter private static final Map<Integer, TrialAvatarActivityCustomData> trialAvatarActivityCustomData = new HashMap<>();
@Getter private static final Map<Integer, TrialAvatarActivityDataCustomData> trialAvatarActivityDataCustomData = new HashMap<>();

View File

@ -0,0 +1,8 @@
package emu.grasscutter.data.common;
import java.util.List;
public interface BaseTrialActivityData {
List<Integer> getAvatarIndexIdList();
List<Integer> getRewardIdList();
}

View File

@ -1,10 +1,11 @@
package emu.grasscutter.data.custom;
import emu.grasscutter.data.common.BaseTrialActivityData;
import lombok.*;
import java.util.List;
@Data
public class TrialAvatarActivityCustomData {
public class TrialAvatarActivityCustomData implements BaseTrialActivityData {
private int ScheduleId;
private List<Integer> AvatarIndexIdList;
private List<Integer> RewardIdList;

View File

@ -2,13 +2,14 @@ package emu.grasscutter.data.excels;
import emu.grasscutter.data.GameResource;
import emu.grasscutter.data.ResourceType;
import emu.grasscutter.data.common.BaseTrialActivityData;
import lombok.*;
import java.util.List;
@ResourceType(name = "TrialAvatarActivityExcelConfigData.json")
@ResourceType(name = "TrialAvatarActivityExcelConfigData.json")
@EqualsAndHashCode(callSuper=false)
@Data
public class TrialAvatarActivityData extends GameResource {
public class TrialAvatarActivityData extends GameResource implements BaseTrialActivityData {
private int ScheduleId;
private List<Integer> AvatarIndexIdList;
private List<Integer> RewardIdList;

View File

@ -5,7 +5,7 @@ import emu.grasscutter.data.ResourceType;
import lombok.*;
import java.util.List;
@ResourceType(name = "TrialAvatarExcelConfigData.json")
@ResourceType(name = "TrialAvatarExcelConfigData.json")
@EqualsAndHashCode(callSuper=false)
@Data
public class TrialAvatarData extends GameResource {

View File

@ -18,6 +18,7 @@ import emu.grasscutter.game.activity.PlayerActivityData;
import emu.grasscutter.game.props.ActivityType;
import emu.grasscutter.net.proto.ActivityInfoOuterClass.ActivityInfo;
import emu.grasscutter.server.packet.send.PacketActivityInfoNotify;
import emu.grasscutter.server.packet.send.PacketScenePlayerLocationNotify;
import emu.grasscutter.utils.JsonUtils;
import java.util.*;
@ -88,12 +89,16 @@ public class TrialAvatarActivityHandler extends ActivityHandler {
}
public boolean enterTrialDungeon(Player player, int trialAvatarIndexId, int enterPointId) {
// TODO, not sure if this will cause problem in MP, since we are entering trial activity dungeon
player.sendPacket(new PacketScenePlayerLocationNotify(player.getScene())); // official does send this
if (!player.getServer().getDungeonSystem().enterDungeon(
player,
enterPointId,
player,
enterPointId,
getTrialActivityDungeonId(trialAvatarIndexId))) return false;
setSelectedTrialAvatarIndex(trialAvatarIndexId);
return true;
}
@ -125,8 +130,14 @@ public class TrialAvatarActivityHandler extends ActivityHandler {
setSelectedTrialAvatarIndex(0);
}
public boolean getReward(Player player, PlayerActivityData playerActivityData, int trialAvatarIndexId) {
TrialAvatarPlayerData trialAvatarPlayerData = getTrialAvatarPlayerData(playerActivityData);
public boolean getReward(Player player, int trialAvatarIndexId) {
val playerActivityData = player.getActivityManager().getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_TRIAL_AVATAR);
if(playerActivityData.isEmpty()){
return false;
}
TrialAvatarPlayerData trialAvatarPlayerData = getTrialAvatarPlayerData(playerActivityData.get());
TrialAvatarPlayerData.RewardInfoItem rewardInfo = trialAvatarPlayerData.getRewardInfo(trialAvatarIndexId);
if (rewardInfo == null) return false;
@ -135,8 +146,8 @@ public class TrialAvatarActivityHandler extends ActivityHandler {
player.getInventory().addItemParamDatas(rewardParam.getRewardItemList(), ActionReason.TrialAvatarActivityFirstPassReward);
rewardInfo.setReceivedReward(true);
playerActivityData.setDetail(trialAvatarPlayerData);
playerActivityData.save();
playerActivityData.get().setDetail(trialAvatarPlayerData);
playerActivityData.get().save();
return true;
}

View File

@ -1,14 +1,14 @@
package emu.grasscutter.game.activity.trialavatar;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.TrialAvatarActivityData;
import emu.grasscutter.game.activity.ActivityConfigItem;
import emu.grasscutter.data.common.BaseTrialActivityData;
import emu.grasscutter.net.proto.TrialAvatarActivityDetailInfoOuterClass.TrialAvatarActivityDetailInfo;
import emu.grasscutter.net.proto.TrialAvatarActivityRewardDetailInfoOuterClass.TrialAvatarActivityRewardDetailInfo;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import lombok.val;
import java.util.List;
import java.util.stream.*;
@ -19,24 +19,20 @@ import java.util.stream.*;
public class TrialAvatarPlayerData {
List<RewardInfoItem> rewardInfoList;
public static List<Integer> getAvatarIdList(int scheduleId) {
if (GameData.getTrialAvatarActivityCustomData().isEmpty()) {
if (GameData.getTrialAvatarActivityDataMap().get(scheduleId) == null) return List.of();
private static BaseTrialActivityData getActivityData(int scheduleId){
// prefer custom data over official data
return GameData.getTrialAvatarActivityCustomData().isEmpty() ? GameData.getTrialAvatarActivityDataMap().get(scheduleId)
: GameData.getTrialAvatarActivityCustomData().get(scheduleId);
}
return GameData.getTrialAvatarActivityDataMap().get(scheduleId).getAvatarIndexIdList();
}
if (GameData.getTrialAvatarActivityCustomData().get(scheduleId) == null) return List.of();
return GameData.getTrialAvatarActivityCustomData().get(scheduleId).getAvatarIndexIdList();
public static List<Integer> getAvatarIdList(int scheduleId) {
val activityData = getActivityData(scheduleId);
return activityData != null ? activityData.getAvatarIndexIdList() : List.of();
}
public static List<Integer> getRewardIdList(int scheduleId) {
if (GameData.getTrialAvatarActivityCustomData().isEmpty()) {
if (GameData.getTrialAvatarActivityDataMap().get(scheduleId) == null) return List.of();
return GameData.getTrialAvatarActivityDataMap().get(scheduleId).getRewardIdList();
}
if (GameData.getTrialAvatarActivityCustomData().get(scheduleId) == null) return List.of();
return GameData.getTrialAvatarActivityCustomData().get(scheduleId).getRewardIdList();
val activityData = getActivityData(scheduleId);
return activityData != null ? activityData.getRewardIdList() : List.of();
}
public static TrialAvatarPlayerData create(int scheduleId) {
@ -46,7 +42,7 @@ public class TrialAvatarPlayerData {
.rewardInfoList(IntStream.range(0, avatarIds.size())
.filter(i -> avatarIds.get(i) > 0 && rewardIds.get(i) > 0)
.mapToObj(i -> RewardInfoItem.create(
avatarIds.get(i),
avatarIds.get(i),
rewardIds.get(i)))
.collect(Collectors.toList()))
.build();

View File

@ -233,7 +233,7 @@ public class DungeonManager {
case DUNGEON_PLAY_TYPE_TRIAL_AVATAR -> {
val playerData = player.getActivityManager()
.getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_TRIAL_AVATAR);
if (playerData == null) return;
if (playerData.isEmpty()) return;
val handler = (TrialAvatarActivityHandler) playerData.get().getActivityHandler();
if (handler == null) return;

View File

@ -14,46 +14,20 @@ import lombok.val;
@Opcodes(PacketOpcodes.EnterTrialAvatarActivityDungeonReq)
public class HandlerEnterTrialAvatarActivityDungeonReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
EnterTrialAvatarActivityDungeonReq req = EnterTrialAvatarActivityDungeonReq.parseFrom(payload);
val req = EnterTrialAvatarActivityDungeonReq.parseFrom(payload);
val playerData = session.getPlayer().getActivityManager()
.getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_TRIAL_AVATAR);
if (playerData == null) {
session.getPlayer().sendPacket(new PacketEnterTrialAvatarActivityDungeonRsp(
req.getActivityId(),
req.getTrialAvatarIndexId(),
Retcode.RET_FAIL_VALUE));
return;
}
val handler = session.getPlayer().getActivityManager()
.getActivityHandlerAs(ActivityType.NEW_ACTIVITY_TRIAL_AVATAR, TrialAvatarActivityHandler.class);
val handler = (TrialAvatarActivityHandler) playerData.get().getActivityHandler();
if (handler == null) {
session.getPlayer().sendPacket(new PacketEnterTrialAvatarActivityDungeonRsp(
req.getActivityId(),
req.getTrialAvatarIndexId(),
Retcode.RET_FAIL_VALUE));
return;
}
boolean result = handler.isPresent() && handler.get().enterTrialDungeon(session.getPlayer(), req.getTrialAvatarIndexId(), req.getEnterPointId());
// TODO, not sure if this will cause problem in MP, since we are entering trial activity dungeon
session.getPlayer().sendPacket(new PacketScenePlayerLocationNotify(session.getPlayer().getScene())); // official does send this
if (!handler.enterTrialDungeon(session.getPlayer(), req.getTrialAvatarIndexId(), req.getEnterPointId())) {
session.getPlayer().sendPacket(new PacketEnterTrialAvatarActivityDungeonRsp(
req.getActivityId(),
req.getTrialAvatarIndexId(),
Retcode.RET_FAIL_VALUE));
return;
}
session.getPlayer().sendPacket(new PacketEnterTrialAvatarActivityDungeonRsp(
req.getActivityId(),
req.getTrialAvatarIndexId(),
Retcode.RET_SUCC_VALUE));
session.getPlayer().sendPacket(new PacketEnterTrialAvatarActivityDungeonRsp(
req.getActivityId(),
req.getTrialAvatarIndexId(),
result));
}
}

View File

@ -1,12 +1,11 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.props.ActivityType;
import emu.grasscutter.game.activity.trialavatar.TrialAvatarActivityHandler;
import emu.grasscutter.game.props.ActivityType;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.server.game.GameSession;
import lombok.val;
@Opcodes(PacketOpcodes.PlayerQuitDungeonReq)
@ -14,14 +13,10 @@ public class HandlerPlayerQuitDungeonReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
val playerData = session.getPlayer().getActivityManager()
.getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_TRIAL_AVATAR);
if (playerData != null) {
val handler = (TrialAvatarActivityHandler) playerData.get().getActivityHandler();
if (handler != null) {
handler.unsetTrialAvatarTeam(session.getPlayer());
}
}
val handler = session.getPlayer().getActivityManager().getActivityHandlerAs(ActivityType.NEW_ACTIVITY_TRIAL_AVATAR, TrialAvatarActivityHandler.class);
handler.ifPresent(trialAvatarActivityHandler -> trialAvatarActivityHandler.unsetTrialAvatarTeam(session.getPlayer()));
session.getPlayer().getServer().getDungeonSystem().exitDungeon(session.getPlayer());
}

View File

@ -14,41 +14,19 @@ import lombok.val;
@Opcodes(PacketOpcodes.ReceivedTrialAvatarActivityRewardReq)
public class HandlerReceivedTrialAvatarActivityRewardReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
ReceivedTrialAvatarActivityRewardReq req = ReceivedTrialAvatarActivityRewardReq.parseFrom(payload);
val req = ReceivedTrialAvatarActivityRewardReq.parseFrom(payload);
val player = session.getPlayer();
val handler = player.getActivityManager().getActivityHandlerAs(ActivityType.NEW_ACTIVITY_TRIAL_AVATAR, TrialAvatarActivityHandler.class);
val playerData = session.getPlayer().getActivityManager()
.getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_TRIAL_AVATAR);
if (playerData == null) {
session.getPlayer().sendPacket(new PacketReceivedTrialAvatarActivityRewardRsp(
5002, // trial activity id
req.getTrialAvatarIndexId(),
Retcode.RET_FAIL_VALUE));
return;
}
boolean result = handler.isPresent() && handler.get().getReward(player, req.getTrialAvatarIndexId());
val handler = (TrialAvatarActivityHandler) playerData.get().getActivityHandler();
if (handler == null) {
session.getPlayer().sendPacket(new PacketReceivedTrialAvatarActivityRewardRsp(
5002, // trial activity id
req.getTrialAvatarIndexId(),
Retcode.RET_FAIL_VALUE));
return;
}
if (!handler.getReward(session.getPlayer(), playerData.get(), req.getTrialAvatarIndexId())) {
session.getPlayer().sendPacket(new PacketReceivedTrialAvatarActivityRewardRsp(
5002, // trial activity id
req.getTrialAvatarIndexId(),
Retcode.RET_FAIL_VALUE));
return;
}
session.getPlayer().sendPacket(new PacketReceivedTrialAvatarActivityRewardRsp(
5002, // trial activity id
req.getTrialAvatarIndexId(),
Retcode.RET_SUCC_VALUE));
session.getPlayer().sendPacket(new PacketReceivedTrialAvatarActivityRewardRsp(
5002, // trial activity id
req.getTrialAvatarIndexId(),
result));
}
}

View File

@ -3,9 +3,13 @@ package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.EnterTrialAvatarActivityDungeonRspOuterClass.EnterTrialAvatarActivityDungeonRsp;
import emu.grasscutter.net.proto.RetcodeOuterClass;
public class PacketEnterTrialAvatarActivityDungeonRsp extends BasePacket {
public PacketEnterTrialAvatarActivityDungeonRsp(int activityId, int trialAvatarIndexId, boolean success) {
this(activityId, trialAvatarIndexId, success ? RetcodeOuterClass.Retcode.RET_SUCC_VALUE : RetcodeOuterClass.Retcode.RET_FAIL_VALUE);
}
public PacketEnterTrialAvatarActivityDungeonRsp(int activityId, int trialAvatarIndexId, int retcodeVal) {
super(PacketOpcodes.EnterTrialAvatarActivityDungeonRsp);
this.setData(EnterTrialAvatarActivityDungeonRsp.newBuilder()

View File

@ -6,7 +6,10 @@ import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.net.proto.ReceivedTrialAvatarActivityRewardRspOuterClass.ReceivedTrialAvatarActivityRewardRsp;
public class PacketReceivedTrialAvatarActivityRewardRsp extends BasePacket {
public PacketReceivedTrialAvatarActivityRewardRsp(int activityId, int trialAvatarId, boolean success) {
this(activityId, trialAvatarId, success ? Retcode.RET_SUCC_VALUE : Retcode.RET_FAIL_VALUE);
}
public PacketReceivedTrialAvatarActivityRewardRsp(int activityId, int trialAvatarId, int retcodeVal) {
super(PacketOpcodes.ReceivedTrialAvatarActivityRewardRsp);
this.setData(ReceivedTrialAvatarActivityRewardRsp.newBuilder()