Fixed dungeon challenge scoreboard and implement dungeon drops

Also fixed a few dungeon script handlers
This commit is contained in:
Melledy
2022-05-03 23:13:42 -07:00
parent ae31e4fd98
commit 1b97b4afa0
15 changed files with 298 additions and 24 deletions

View File

@@ -66,7 +66,8 @@ public class GameData {
private static final Int2ObjectMap<DailyDungeonData> dailyDungeonDataMap = new Int2ObjectOpenHashMap<>();
private static final Int2ObjectMap<DungeonData> dungeonDataMap = new Int2ObjectOpenHashMap<>();
private static final Int2ObjectMap<ShopGoodsData> shopGoodsDataMap = new Int2ObjectOpenHashMap<>();
private static final Int2ObjectMap<RewardPreviewData> rewardPreviewDataMap = new Int2ObjectOpenHashMap<>();
// Cache
private static Map<Integer, List<Integer>> fetters = new HashMap<>();
private static Map<Integer, List<ShopGoodsData>> shopGoods = new HashMap<>();
@@ -300,6 +301,13 @@ public class GameData {
return shopGoods;
}
/**
* @return the rewardpreviewdatamap
*/
public static Int2ObjectMap<RewardPreviewData> getRewardPreviewDataMap() {
return rewardPreviewDataMap;
}
public static IntList getScenePointIdList() {
return scenePointIdList;
}

View File

@@ -0,0 +1,26 @@
package emu.grasscutter.data.common;
public class ItemParamStringData {
private int Id;
private String Count;
public ItemParamStringData() {}
public int getId() {
return Id;
}
public String getCount() {
return Count;
}
public ItemParamData toItemParamData() {
if (Count.contains(";")) {
String[] split = Count.split(";");
Count = Count.split(";")[split.length - 1];
} else if (Count.contains(".")) {
return new ItemParamData(Id, (int) Math.ceil(Double.parseDouble(Count)));
}
return new ItemParamData(Id, Integer.parseInt(Count));
}
}

View File

@@ -11,7 +11,10 @@ public class DungeonData extends GameResource {
private int Id;
private int SceneId;
private int ShowLevel;
private int PassRewardPreviewID;
private String InvolveType; // TODO enum
private RewardPreviewData previewData;
@Override
public int getId() {
@@ -26,8 +29,14 @@ public class DungeonData extends GameResource {
return ShowLevel;
}
public RewardPreviewData getRewardPreview() {
return previewData;
}
@Override
public void onLoad() {
if (this.PassRewardPreviewID > 0) {
this.previewData = GameData.getRewardPreviewDataMap().get(this.PassRewardPreviewID);
}
}
}

View File

@@ -0,0 +1,43 @@
package emu.grasscutter.data.def;
import java.util.Arrays;
import java.util.List;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.GameResource;
import emu.grasscutter.data.ResourceType;
import emu.grasscutter.game.props.SceneType;
import emu.grasscutter.data.ResourceType.LoadPriority;
import emu.grasscutter.data.common.ItemParamData;
import emu.grasscutter.data.common.ItemParamStringData;
@ResourceType(name = "RewardPreviewExcelConfigData.json", loadPriority = LoadPriority.HIGH)
public class RewardPreviewData extends GameResource {
private int Id;
private ItemParamStringData[] PreviewItems;
private ItemParamData[] PreviewItemsArray;
@Override
public int getId() {
return this.Id;
}
public ItemParamData[] getPreviewItems() {
return PreviewItemsArray;
}
@Override
public void onLoad() {
if (this.PreviewItems != null && this.PreviewItems.length > 0) {
this.PreviewItemsArray = Arrays.stream(this.PreviewItems)
.filter(d -> d.getId() > 0 && d.getCount() != null && !d.getCount().isEmpty())
.map(ItemParamStringData::toItemParamData)
.toArray(size -> new ItemParamData[size]);
} else {
this.PreviewItemsArray = new ItemParamData[0];
}
}
}