Commit 63b6b805 authored by GanyusLeftHorn's avatar GanyusLeftHorn Committed by Melledy
Browse files

Bring back dungeon drops.

parent b01a29c1
...@@ -8,6 +8,7 @@ import emu.grasscutter.auth.DefaultAuthentication; ...@@ -8,6 +8,7 @@ import emu.grasscutter.auth.DefaultAuthentication;
import emu.grasscutter.command.CommandMap; import emu.grasscutter.command.CommandMap;
import emu.grasscutter.command.DefaultPermissionHandler; import emu.grasscutter.command.DefaultPermissionHandler;
import emu.grasscutter.command.PermissionHandler; import emu.grasscutter.command.PermissionHandler;
import emu.grasscutter.game.dungeons.challenge.DungeonChallenge;
import emu.grasscutter.game.managers.energy.EnergyManager; import emu.grasscutter.game.managers.energy.EnergyManager;
import emu.grasscutter.game.managers.stamina.StaminaManager; import emu.grasscutter.game.managers.stamina.StaminaManager;
import emu.grasscutter.plugin.PluginManager; import emu.grasscutter.plugin.PluginManager;
...@@ -113,6 +114,7 @@ public final class Grasscutter { ...@@ -113,6 +114,7 @@ public final class Grasscutter {
ResourceLoader.loadAll(); ResourceLoader.loadAll();
ScriptLoader.init(); ScriptLoader.init();
EnergyManager.initialize(); EnergyManager.initialize();
DungeonChallenge.initialize();
// Initialize database. // Initialize database.
DatabaseManager.initialize(); DatabaseManager.initialize();
......
package emu.grasscutter.game.dungeons;
import java.util.List;
public class DungeonDrop {
private int dungeonId;
private List<DungeonDropEntry> drops;
public int getDungeonId() {
return dungeonId;
}
public void setDungeonId(int dungeonId) {
this.dungeonId = dungeonId;
}
public List<DungeonDropEntry> getDrops() {
return drops;
}
public void setDrops(List<DungeonDropEntry> drops) {
this.drops = drops;
}
}
package emu.grasscutter.game.dungeons;
import java.util.List;
public class DungeonDropEntry {
private List<Integer> counts;
private List<Integer> items;
private List<Integer> probabilities;
private List<Integer> itemProbabilities;
private boolean mpDouble;
public List<Integer> getCounts() {
return counts;
}
public void setCounts(List<Integer> counts) {
this.counts = counts;
}
public List<Integer> getItems() {
return items;
}
public void setItems(List<Integer> items) {
this.items = items;
}
public List<Integer> getProbabilities() {
return probabilities;
}
public void setProbabilities(List<Integer> probabilities) {
this.probabilities = probabilities;
}
public List<Integer> getItemProbabilities() {
return itemProbabilities;
}
public void setItemProbabilities(List<Integer> itemProbabilities) {
this.itemProbabilities = itemProbabilities;
}
public boolean isMpDouble() {
return mpDouble;
}
public void setMpDouble(boolean mpDouble) {
this.mpDouble = mpDouble;
}
}
package emu.grasscutter.game.dungeons.challenge; package emu.grasscutter.game.dungeons.challenge;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.DataLoader;
import emu.grasscutter.data.common.ItemParamData; import emu.grasscutter.data.common.ItemParamData;
import emu.grasscutter.data.excels.DungeonData; import emu.grasscutter.data.excels.DungeonData;
import emu.grasscutter.game.dungeons.DungeonDrop;
import emu.grasscutter.game.dungeons.DungeonDropEntry;
import emu.grasscutter.game.dungeons.challenge.trigger.ChallengeTrigger; import emu.grasscutter.game.dungeons.challenge.trigger.ChallengeTrigger;
import emu.grasscutter.game.inventory.GameItem; import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.inventory.ItemType;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.ActionReason; import emu.grasscutter.game.props.ActionReason;
import emu.grasscutter.game.world.Scene; import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.scripts.constants.EventType; import emu.grasscutter.scripts.constants.EventType;
import emu.grasscutter.scripts.data.SceneGroup; import emu.grasscutter.scripts.data.SceneGroup;
import emu.grasscutter.scripts.data.ScriptArgs; import emu.grasscutter.scripts.data.ScriptArgs;
import emu.grasscutter.server.packet.send.PacketGadgetAutoPickDropInfoNotify; import emu.grasscutter.server.packet.send.PacketGadgetAutoPickDropInfoNotify;
import emu.grasscutter.utils.Utils;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.ints.IntSet;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import com.google.gson.reflect.TypeToken;
public class DungeonChallenge extends WorldChallenge { public class DungeonChallenge extends WorldChallenge {
...@@ -25,6 +41,24 @@ public class DungeonChallenge extends WorldChallenge { ...@@ -25,6 +41,24 @@ public class DungeonChallenge extends WorldChallenge {
private boolean stage; private boolean stage;
private IntSet rewardedPlayers; private IntSet rewardedPlayers;
private final static Int2ObjectMap<List<DungeonDropEntry>> dungeonDropData = new Int2ObjectOpenHashMap<>();
public static void initialize() {
// Read the data we need for dungeon rewards drops.
try (Reader fileReader = new InputStreamReader(DataLoader.load("DungeonDrop.json"))) {
List<DungeonDrop> dungeonDropList = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, DungeonDrop.class).getType());
for (DungeonDrop entry : dungeonDropList) {
dungeonDropData.put(entry.getDungeonId(), entry.getDrops());
}
Grasscutter.getLogger().info("Loaded {} dungeon drop data entries.", dungeonDropData.size());
}
catch (Exception ex) {
Grasscutter.getLogger().error("Unable to load dungeon drop data.", ex);
}
}
public DungeonChallenge(Scene scene, SceneGroup group, public DungeonChallenge(Scene scene, SceneGroup group,
int challengeId, int challengeIndex, int challengeId, int challengeIndex,
List<Integer> paramList, List<Integer> paramList,
...@@ -67,8 +101,64 @@ public class DungeonChallenge extends WorldChallenge { ...@@ -67,8 +101,64 @@ public class DungeonChallenge extends WorldChallenge {
} }
} }
public void getStatueDrops(Player player) { private List<GameItem> rollRewards(boolean useCondensed) {
List<GameItem> rewards = new ArrayList<>();
int dungeonId = this.getScene().getDungeonData().getId();
// If we have specific drop data for this dungeon, we use it.
if (dungeonDropData.containsKey(dungeonId)) {
List<DungeonDropEntry> dropEntries = dungeonDropData.get(dungeonId);
// Roll for each drop group.
for (var entry : dropEntries) {
// Determine the number of drops we get for this entry.
int start = entry.getCounts().get(0);
int end = entry.getCounts().get(entry.getCounts().size() - 1);
var candidateAmounts = IntStream.range(start, end + 1).boxed().collect(Collectors.toList());
int amount = Utils.drawRandomListElement(candidateAmounts, entry.getProbabilities());
if (useCondensed) {
amount += Utils.drawRandomListElement(candidateAmounts, entry.getProbabilities());
}
// Double rewards in multiplay mode, if specified.
if (entry.isMpDouble() && this.getScene().getPlayerCount() > 1) {
amount *= 2;
}
// Roll items for this group.
// Here, we have to handle stacking, or the client will not display results correctly.
// For now, we use the following logic: If the possible drop item are a list of multiple items,
// we roll them separately. If not, we stack them. This should work out in practice, at least
// for the currently existing set of dungeons.
if (entry.getItems().size() == 1) {
rewards.add(new GameItem(entry.getItems().get(0), amount));
}
else {
for (int i = 0; i < amount; i++) {
// int itemIndex = ThreadLocalRandom.current().nextInt(0, entry.getItems().size());
// int itemId = entry.getItems().get(itemIndex);
int itemId = Utils.drawRandomListElement(entry.getItems(), entry.getItemProbabilities());
rewards.add(new GameItem(itemId, 1));
}
}
}
}
// Otherwise, we fall back to the preview data.
else {
Grasscutter.getLogger().info("No drop data found or dungeon {}, falling back to preview data ...", dungeonId);
for (ItemParamData param : getScene().getDungeonData().getRewardPreview().getPreviewItems()) {
rewards.add(new GameItem(param.getId(), Math.max(param.getCount(), 1)));
}
}
return rewards;
}
public void getStatueDrops(Player player, GadgetInteractReq request) {
DungeonData dungeonData = getScene().getDungeonData(); DungeonData dungeonData = getScene().getDungeonData();
int resinCost = dungeonData.getStatueCostCount() != 0 ? dungeonData.getStatueCostCount() : 20;
if (!isSuccess() || dungeonData == null || dungeonData.getRewardPreview() == null || dungeonData.getRewardPreview().getPreviewItems().length == 0) { if (!isSuccess() || dungeonData == null || dungeonData.getRewardPreview() == null || dungeonData.getRewardPreview().getPreviewItems().length == 0) {
return; return;
} }
...@@ -78,11 +168,42 @@ public class DungeonChallenge extends WorldChallenge { ...@@ -78,11 +168,42 @@ public class DungeonChallenge extends WorldChallenge {
return; return;
} }
// Get rewards.
List<GameItem> rewards = new ArrayList<>(); List<GameItem> rewards = new ArrayList<>();
for (ItemParamData param : getScene().getDungeonData().getRewardPreview().getPreviewItems()) {
rewards.add(new GameItem(param.getId(), Math.max(param.getCount(), 1))); if (request.getIsUseCondenseResin()) {
// Check if condensed resin is usable here.
// For this, we use the following logic for now:
// The normal resin cost of the dungeon has to be 20.
if (resinCost != 20) {
return;
}
// Make sure the player has condensed resin.
GameItem condensedResin = player.getInventory().getInventoryTab(ItemType.ITEM_MATERIAL).getItemById(220007);
if (condensedResin == null || condensedResin.getCount() <= 0) {
return;
}
// Deduct.
player.getInventory().removeItem(condensedResin, 1);
// Roll rewards.
rewards.addAll(this.rollRewards(true));
}
else {
// If the player used regular resin, try to deduct.
// Stop if insufficient resin.
boolean success = player.getResinManager().useResin(resinCost);
if (!success) {
return;
}
// Roll rewards.
rewards.addAll(this.rollRewards(false));
} }
// Add rewards to player and send notification.
player.getInventory().addItems(rewards, ActionReason.DungeonStatueDrop); player.getInventory().addItems(rewards, ActionReason.DungeonStatueDrop);
player.sendPacket(new PacketGadgetAutoPickDropInfoNotify(rewards)); player.sendPacket(new PacketGadgetAutoPickDropInfoNotify(rewards));
......
...@@ -4,7 +4,7 @@ import emu.grasscutter.Grasscutter; ...@@ -4,7 +4,7 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.entity.EntityGadget; import emu.grasscutter.game.entity.EntityGadget;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.proto.BossChestInfoOuterClass.BossChestInfo; import emu.grasscutter.net.proto.BossChestInfoOuterClass.BossChestInfo;
import emu.grasscutter.net.proto.InterOpTypeOuterClass; import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.InterOpTypeOuterClass.InterOpType; import emu.grasscutter.net.proto.InterOpTypeOuterClass.InterOpType;
import emu.grasscutter.net.proto.InteractTypeOuterClass; import emu.grasscutter.net.proto.InteractTypeOuterClass;
import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType; import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType;
...@@ -18,7 +18,7 @@ public class GadgetChest extends GadgetContent { ...@@ -18,7 +18,7 @@ public class GadgetChest extends GadgetContent {
super(gadget); super(gadget);
} }
public boolean onInteract(Player player, InterOpType opType) { public boolean onInteract(Player player, GadgetInteractReq req) {
var chestInteractHandlerMap = getGadget().getScene().getWorld().getServer().getWorldDataManager().getChestInteractHandlerMap(); var chestInteractHandlerMap = getGadget().getScene().getWorld().getServer().getWorldDataManager().getChestInteractHandlerMap();
var handler = chestInteractHandlerMap.get(getGadget().getGadgetData().getJsonName()); var handler = chestInteractHandlerMap.get(getGadget().getGadgetData().getJsonName());
if(handler == null){ if(handler == null){
...@@ -26,7 +26,7 @@ public class GadgetChest extends GadgetContent { ...@@ -26,7 +26,7 @@ public class GadgetChest extends GadgetContent {
return false; return false;
} }
if(opType == InterOpType.INTER_OP_TYPE_START && handler.isTwoStep()){ if(req.getOpType() == InterOpType.INTER_OP_TYPE_START && handler.isTwoStep()){
player.sendPacket(new PacketGadgetInteractRsp(getGadget(), InteractType.INTERACT_TYPE_OPEN_CHEST, InterOpType.INTER_OP_TYPE_START)); player.sendPacket(new PacketGadgetInteractRsp(getGadget(), InteractType.INTERACT_TYPE_OPEN_CHEST, InterOpType.INTER_OP_TYPE_START));
return false; return false;
}else{ }else{
......
...@@ -3,6 +3,7 @@ package emu.grasscutter.game.entity.gadget; ...@@ -3,6 +3,7 @@ package emu.grasscutter.game.entity.gadget;
import emu.grasscutter.game.entity.EntityGadget; import emu.grasscutter.game.entity.EntityGadget;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.proto.InterOpTypeOuterClass; import emu.grasscutter.net.proto.InterOpTypeOuterClass;
import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo; import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
public abstract class GadgetContent { public abstract class GadgetContent {
...@@ -16,7 +17,7 @@ public abstract class GadgetContent { ...@@ -16,7 +17,7 @@ public abstract class GadgetContent {
return gadget; return gadget;
} }
public abstract boolean onInteract(Player player, InterOpTypeOuterClass.InterOpType opType); public abstract boolean onInteract(Player player, GadgetInteractReq req);
public abstract void onBuildProto(SceneGadgetInfo.Builder gadgetInfo); public abstract void onBuildProto(SceneGadgetInfo.Builder gadgetInfo);
} }
...@@ -7,7 +7,7 @@ import emu.grasscutter.game.inventory.GameItem; ...@@ -7,7 +7,7 @@ import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.ActionReason; import emu.grasscutter.game.props.ActionReason;
import emu.grasscutter.net.proto.GatherGadgetInfoOuterClass.GatherGadgetInfo; import emu.grasscutter.net.proto.GatherGadgetInfoOuterClass.GatherGadgetInfo;
import emu.grasscutter.net.proto.InterOpTypeOuterClass; import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo; import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
public class GadgetGatherPoint extends GadgetContent { public class GadgetGatherPoint extends GadgetContent {
...@@ -26,7 +26,7 @@ public class GadgetGatherPoint extends GadgetContent { ...@@ -26,7 +26,7 @@ public class GadgetGatherPoint extends GadgetContent {
return getGatherData().getItemId(); return getGatherData().getItemId();
} }
public boolean onInteract(Player player, InterOpTypeOuterClass.InterOpType opType) { public boolean onInteract(Player player, GadgetInteractReq req) {
GameItem item = new GameItem(gatherData.getItemId(), 1); GameItem item = new GameItem(gatherData.getItemId(), 1);
player.getInventory().addItem(item, ActionReason.Gather); player.getInventory().addItem(item, ActionReason.Gather);
......
...@@ -3,7 +3,7 @@ package emu.grasscutter.game.entity.gadget; ...@@ -3,7 +3,7 @@ package emu.grasscutter.game.entity.gadget;
import emu.grasscutter.game.dungeons.challenge.DungeonChallenge; import emu.grasscutter.game.dungeons.challenge.DungeonChallenge;
import emu.grasscutter.game.entity.EntityGadget; import emu.grasscutter.game.entity.EntityGadget;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.proto.InterOpTypeOuterClass; import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType; import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo; import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
import emu.grasscutter.server.packet.send.PacketGadgetInteractRsp; import emu.grasscutter.server.packet.send.PacketGadgetInteractRsp;
...@@ -14,9 +14,9 @@ public class GadgetRewardStatue extends GadgetContent { ...@@ -14,9 +14,9 @@ public class GadgetRewardStatue extends GadgetContent {
super(gadget); super(gadget);
} }
public boolean onInteract(Player player, InterOpTypeOuterClass.InterOpType opType) { public boolean onInteract(Player player, GadgetInteractReq req) {
if (player.getScene().getChallenge() != null && player.getScene().getChallenge() instanceof DungeonChallenge dungeonChallenge) { if (player.getScene().getChallenge() != null && player.getScene().getChallenge() instanceof DungeonChallenge dungeonChallenge) {
dungeonChallenge.getStatueDrops(player); dungeonChallenge.getStatueDrops(player, req);
} }
player.sendPacket(new PacketGadgetInteractRsp(getGadget(), InteractType.INTERACT_TYPE_OPEN_STATUE)); player.sendPacket(new PacketGadgetInteractRsp(getGadget(), InteractType.INTERACT_TYPE_OPEN_STATUE));
......
...@@ -4,7 +4,7 @@ import java.util.Arrays; ...@@ -4,7 +4,7 @@ import java.util.Arrays;
import emu.grasscutter.game.entity.EntityGadget; import emu.grasscutter.game.entity.EntityGadget;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.proto.InterOpTypeOuterClass; import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo; import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
import emu.grasscutter.net.proto.WorktopInfoOuterClass.WorktopInfo; import emu.grasscutter.net.proto.WorktopInfoOuterClass.WorktopInfo;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
...@@ -35,7 +35,7 @@ public class GadgetWorktop extends GadgetContent { ...@@ -35,7 +35,7 @@ public class GadgetWorktop extends GadgetContent {
this.worktopOptions.remove(option); this.worktopOptions.remove(option);
} }
public boolean onInteract(Player player, InterOpTypeOuterClass.InterOpType opType) { public boolean onInteract(Player player, GadgetInteractReq req) {
return false; return false;
} }
......
...@@ -990,7 +990,7 @@ public class Player { ...@@ -990,7 +990,7 @@ public class Player {
} }
public void interactWith(int gadgetEntityId, InterOpTypeOuterClass.InterOpType opType) { public void interactWith(int gadgetEntityId, GadgetInteractReq req) {
GameEntity entity = getScene().getEntityById(gadgetEntityId); GameEntity entity = getScene().getEntityById(gadgetEntityId);
if (entity == null) { if (entity == null) {
return; return;
...@@ -1023,7 +1023,7 @@ public class Player { ...@@ -1023,7 +1023,7 @@ public class Player {
return; return;
} }
boolean shouldDelete = gadget.getContent().onInteract(this, opType); boolean shouldDelete = gadget.getContent().onInteract(this, req);
if (shouldDelete) { if (shouldDelete) {
entity.getScene().removeEntity(entity); entity.getScene().removeEntity(entity);
......
...@@ -13,7 +13,7 @@ public class HandlerGadgetInteractReq extends PacketHandler { ...@@ -13,7 +13,7 @@ public class HandlerGadgetInteractReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
GadgetInteractReq req = GadgetInteractReq.parseFrom(payload); GadgetInteractReq req = GadgetInteractReq.parseFrom(payload);
session.getPlayer().interactWith(req.getGadgetEntityId(), req.getOpType()); session.getPlayer().interactWith(req.getGadgetEntityId(), req);
} }
} }
...@@ -7,6 +7,7 @@ import java.nio.file.StandardCopyOption; ...@@ -7,6 +7,7 @@ import java.nio.file.StandardCopyOption;
import java.time.*; import java.time.*;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
import java.util.*; import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.DataLoader; import emu.grasscutter.data.DataLoader;
...@@ -61,7 +62,7 @@ public final class Utils { ...@@ -61,7 +62,7 @@ public final class Utils {
BufferedInputStream bis = new BufferedInputStream(inputStream); BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream(); ByteArrayOutputStream buf = new ByteArrayOutputStream();
for (int result = bis.read(); result != -1; result = bis.read()) { for (int result = bis.read(); result != -1; result = bis.read()) {
buf.write((byte) result); buf.write((byte) result);
} }
return buf.toString(); return buf.toString();
} }
...@@ -75,17 +76,17 @@ public final class Utils { ...@@ -75,17 +76,17 @@ public final class Utils {
private static final char[] HEX_ARRAY = "0123456789abcdef".toCharArray(); private static final char[] HEX_ARRAY = "0123456789abcdef".toCharArray();
public static String bytesToHex(byte[] bytes) { public static String bytesToHex(byte[] bytes) {
if (bytes == null) return ""; if (bytes == null) return "";
char[] hexChars = new char[bytes.length * 2]; char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) { for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF; int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4]; hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
} }
return new String(hexChars); return new String(hexChars);
} }
public static String bytesToHex(ByteBuf buf) { public static String bytesToHex(ByteBuf buf) {
return bytesToHex(byteBufToArray(buf)); return bytesToHex(byteBufToArray(buf));
} }
public static byte[] byteBufToArray(ByteBuf buf) { public static byte[] byteBufToArray(ByteBuf buf) {
...@@ -97,10 +98,10 @@ public final class Utils { ...@@ -97,10 +98,10 @@ public final class Utils {
public static int abilityHash(String str) { public static int abilityHash(String str) {
int v7 = 0; int v7 = 0;
int v8 = 0; int v8 = 0;
while (v8 < str.length()) { while (v8 < str.length()) {
v7 = str.charAt(v8++) + 131 * v7; v7 = str.charAt(v8++) + 131 * v7;
} }
return v7; return v7;
} }
/** /**
...@@ -377,4 +378,35 @@ public final class Utils { ...@@ -377,4 +378,35 @@ public final class Utils {
return null; return null;
} }
} }
/***
* Draws a random element from the given list, following the given probability distribution, if given.
* @param list The list from which to draw the element.
* @param probabilities The probability distribution. This is given as a list of probabilities of the same length it `list`.
* @return A randomly drawn element from the given list.
*/
public static <T> T drawRandomListElement(List<T> list, List<Integer> probabilities) {
// If we don't have a probability distribution, or the size of the distribution does not match
// the size of the list, we assume uniform distribution.
if (probabilities == null || probabilities.size() <= 1 || probabilities.size() != list.size()) {
int index = ThreadLocalRandom.current().nextInt(0, list.size());
return list.get(index);
}
// Otherwise, we roll with the given distribution.
int totalProbabilityMass = probabilities.stream().reduce(Integer::sum).get();
int roll = ThreadLocalRandom.current().nextInt(1, totalProbabilityMass + 1);
int currentTotalChance = 0;
for (int i = 0; i < list.size(); i++) {
currentTotalChance += probabilities.get(i);
if (roll <= currentTotalChance) {
return list.get(i);
}
}
// Should never happen.
return list.get(0);
}
} }
[
{
"dungeonId": 5100,
"comment": "Domain of Guyun 1",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Artifacts",
"counts": [5],
"items": [61240, 61241, 61220, 61221, 61250, 61251, 61210, 61211, 61230, 61231]
},
{
"comment": "3-star Artifacts",
"counts": [2, 3],
"probabilities": [85, 15],
"items": [61341, 61342, 61321, 61322, 61351, 61352, 61311, 61312, 61331, 61332, 52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332]
}
]
},
{
"dungeonId": 5101,
"comment": "Domain of Guyun 2",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1700],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Artifacts",
"counts": [2, 3],
"items": [61240, 61241, 61220, 61221, 61250, 61251, 61210, 61211, 61230, 61231]
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [20, 80],
"items": [
61341, 61342, 61321, 61322, 61351, 61352, 61311, 61312, 61331, 61332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
}
]
},
{
"dungeonId": 5102,
"comment": "Domain of Guyun 3",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [6, 7],
"probabilities": [60, 40],
"items": [
61341, 61342, 61321, 61322, 61351, 61352, 61311, 61312, 61331, 61332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
},
{
"comment": "4-star Artifacts",
"counts": [0, 2],
"probabilities": [20, 70, 10],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
88442, 88443, 88422, 88423, 88452, 88453, 88412, 88413, 88432, 88433,
89442, 89443, 89422, 89423, 89452, 89453, 89412, 89413, 89432, 89433
]
}
]
},
{
"dungeonId": 5103,
"comment": "Domain of Guyun 4",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2025],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [5, 6],
"probabilities": [20, 80],
"items": [
61341, 61342, 61321, 61322, 61351, 61352, 61311, 61312, 61331, 61332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [60, 40],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
88442, 88443, 88422, 88423, 88452, 88453, 88412, 88413, 88432, 88433,
89442, 89443, 89422, 89423, 89452, 89453, 89412, 89413, 89432, 89433
]
}
]
},
{
"dungeonId": 5104,
"comment": "Domain of Guyun 5",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [2, 98],
"items": [
61341, 61342, 61321, 61322, 61351, 61352, 61311, 61312, 61331, 61332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
88442, 88443, 88422, 88423, 88452, 88453, 88412, 88413, 88432, 88433,
89442, 89443, 89422, 89423, 89452, 89453, 89412, 89413, 89432, 89433
]
},
{
"comment": "5-star Artifacts",
"counts": [0, 1],
"probabilities": [60, 40],
"items": [
88543, 88544, 88523, 88524, 88553, 88554, 88513, 88514, 88533, 88534,
89543, 89544, 89523, 89524, 89553, 89554, 89513, 89514, 89533, 89534
]
}
]
},
{
"dungeonId": 5105,
"comment": "Domain of Guyun 6",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [3, 4],
"probabilities": [50, 50],
"items": [
61341, 61342, 61321, 61322, 61351, 61352, 61311, 61312, 61331, 61332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
},
{
"comment": "4-star Artifacts",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
88442, 88443, 88422, 88423, 88452, 88453, 88412, 88413, 88432, 88433,
89442, 89443, 89422, 89423, 89452, 89453, 89412, 89413, 89432, 89433
]
},
{
"comment": "5-star Artifacts",
"counts": [1, 2],
"probabilities": [90, 10],
"items": [
88543, 88544, 88523, 88524, 88553, 88554, 88513, 88514, 88533, 88534,
89543, 89544, 89523, 89524, 89553, 89554, 89513, 89514, 89533, 89534
]
}
]
},
{
"dungeonId": 5014,
"comment": "Ridge Watch 1",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [6, 7],
"probabilities": [60, 40],
"items": [
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332,
56341, 56342, 56321, 56322, 56351, 56352, 56311, 56312, 56331, 56332
]
},
{
"comment": "4-star Artifacts",
"counts": [0, 2],
"probabilities": [20, 70, 10],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
56442, 56443, 56422, 56423, 56452, 56453, 56412, 56413, 56432, 56433,
91442, 91443, 91422, 91423, 91452, 91453, 91412, 91413, 91432, 91433,
92442, 92443, 92422, 92423, 92452, 92453, 92412, 92413, 92432, 92433
]
}
]
},
{
"dungeonId": 5015,
"comment": "Ridge Watch 2",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2025],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [5, 6],
"probabilities": [20, 80],
"items": [
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332,
56341, 56342, 56321, 56322, 56351, 56352, 56311, 56312, 56331, 56332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [60, 40],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
56442, 56443, 56422, 56423, 56452, 56453, 56412, 56413, 56432, 56433,
91442, 91443, 91422, 91423, 91452, 91453, 91412, 91413, 91432, 91433,
92442, 92443, 92422, 92423, 92452, 92453, 92412, 92413, 92432, 92433
]
}
]
},
{
"dungeonId": 5016,
"comment": "Ridge Watch 3",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [2, 98],
"items": [
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332,
56341, 56342, 56321, 56322, 56351, 56352, 56311, 56312, 56331, 56332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
56442, 56443, 56422, 56423, 56452, 56453, 56412, 56413, 56432, 56433,
91442, 91443, 91422, 91423, 91452, 91453, 91412, 91413, 91432, 91433,
92442, 92443, 92422, 92423, 92452, 92453, 92412, 92413, 92432, 92433
]
},
{
"comment": "5-star Artifacts",
"counts": [0, 1],
"probabilities": [60, 40],
"items": [
91543, 91544, 91523, 91524, 91553, 91554, 91513, 91514, 91533, 91534,
92543, 92544, 92523, 92524, 92553, 92554, 92513, 92514, 92533, 92534
]
}
]
},
{
"dungeonId": 5017,
"comment": "Ridge Watch 4",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [3, 4],
"probabilities": [50, 50],
"items": [
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332,
56341, 56342, 56321, 56322, 56351, 56352, 56311, 56312, 56331, 56332
]
},
{
"comment": "4-star Artifacts",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
56442, 56443, 56422, 56423, 56452, 56453, 56412, 56413, 56432, 56433,
91442, 91443, 91422, 91423, 91452, 91453, 91412, 91413, 91432, 91433,
92442, 92443, 92422, 92423, 92452, 92453, 92412, 92413, 92432, 92433
]
},
{
"comment": "5-star Artifacts",
"counts": [1, 2],
"probabilities": [90, 10],
"items": [
91543, 91544, 91523, 91524, 91553, 91554, 91513, 91514, 91533, 91534,
92543, 92544, 92523, 92524, 92553, 92554, 92513, 92514, 92533, 92534
]
}
]
},
{
"dungeonId": 5112,
"comment": "Clear Pool and Mountain Caverns 1",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2025],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [5, 6],
"probabilities": [20, 80],
"items": [
58341, 58342, 58321, 58322, 58351, 58352, 58311, 58312, 58331, 58332,
62341, 62342, 62321, 62322, 62351, 62352, 62311, 62312, 62331, 62332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [60, 40],
"items": [
58442, 58443, 58422, 58423, 58452, 58453, 58412, 58413, 58432, 58433,
62442, 62443, 62422, 62423, 62452, 62453, 62412, 62413, 62432, 62433,
81442, 81443, 81422, 81423, 81452, 81453, 81412, 81413, 81432, 81433,
82442, 82443, 82422, 82423, 82452, 82453, 82412, 82413, 82432, 82433
]
}
]
},
{
"dungeonId": 5113,
"comment": "Clear Pool and Mountain Caverns 2",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [2, 98],
"items": [
58341, 58342, 58321, 58322, 58351, 58352, 58311, 58312, 58331, 58332,
62341, 62342, 62321, 62322, 62351, 62352, 62311, 62312, 62331, 62332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [
58442, 58443, 58422, 58423, 58452, 58453, 58412, 58413, 58432, 58433,
62442, 62443, 62422, 62423, 62452, 62453, 62412, 62413, 62432, 62433,
81442, 81443, 81422, 81423, 81452, 81453, 81412, 81413, 81432, 81433,
82442, 82443, 82422, 82423, 82452, 82453, 82412, 82413, 82432, 82433
]
},
{
"comment": "5-star Artifacts",
"counts": [0, 1],
"probabilities": [60, 40],
"items": [
81543, 81544, 81523, 81524, 81553, 81554, 81513, 81514, 81533, 81534,
82543, 82544, 82523, 82524, 82553, 82554, 82513, 82514, 82533, 82534
]
}
]
},
{
"dungeonId": 5114,
"comment": "Clear Pool and Mountain Caverns 3",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [3, 4],
"probabilities": [50, 50],
"items": [
58341, 58342, 58321, 58322, 58351, 58352, 58311, 58312, 58331, 58332,
62341, 62342, 62321, 62322, 62351, 62352, 62311, 62312, 62331, 62332
]
},
{
"comment": "4-star Artifacts",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [
58442, 58443, 58422, 58423, 58452, 58453, 58412, 58413, 58432, 58433,
62442, 62443, 62422, 62423, 62452, 62453, 62412, 62413, 62432, 62433,
81442, 81443, 81422, 81423, 81452, 81453, 81412, 81413, 81432, 81433,
82442, 82443, 82422, 82423, 82452, 82453, 82412, 82413, 82432, 82433
]
},
{
"comment": "5-star Artifacts",
"counts": [1, 2],
"probabilities": [90, 10],
"items": [
81543, 81544, 81523, 81524, 81553, 81554, 81513, 81514, 81533, 81534,
82543, 82544, 82523, 82524, 82553, 82554, 82513, 82514, 82533, 82534
]
}
]
},
{
"dungeonId": 5001,
"comment": "Midsummer Courtyard 1",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Artifacts",
"counts": [5],
"items": [60240, 60241, 60220, 60221, 60250, 60251, 60210, 60211, 60230, 60231]
},
{
"comment": "3-star Artifacts",
"counts": [2, 3],
"probabilities": [85, 15],
"items": [
60341, 60342, 60321, 60322, 60351, 60352, 60311, 60312, 60331, 60332,
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332
]
}
]
},
{
"dungeonId": 5002,
"comment": "Midsummer Courtyard 2",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1700],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Artifacts",
"counts": [2, 3],
"items": [60240, 60241, 60220, 60221, 60250, 60251, 60210, 60211, 60230, 60231]
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [20, 80],
"items": [
60341, 60342, 60321, 60322, 60351, 60352, 60311, 60312, 60331, 60332,
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332
]
}
]
},
{
"dungeonId": 5003,
"comment": "Midsummer Courtyard 3",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [6, 7],
"probabilities": [60, 40],
"items": [
60341, 60342, 60321, 60322, 60351, 60352, 60311, 60312, 60331, 60332,
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332
]
},
{
"comment": "4-star Artifacts",
"counts": [0, 2],
"probabilities": [20, 70, 10],
"items": [
51442, 51443, 51422, 51423, 51452, 51453, 51412, 51413, 51432, 51433,
72442, 72443, 72422, 72423, 72452, 72453, 72412, 72413, 72432, 72433,
79442, 79443, 79422, 79423, 79452, 79453, 79412, 79413, 79432, 79433
]
}
]
},
{
"dungeonId": 5004,
"comment": "Midsummer Courtyard 4",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2025],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [5, 6],
"probabilities": [20, 80],
"items": [
60341, 60342, 60321, 60322, 60351, 60352, 60311, 60312, 60331, 60332,
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [60, 40],
"items": [
51442, 51443, 51422, 51423, 51452, 51453, 51412, 51413, 51432, 51433,
72442, 72443, 72422, 72423, 72452, 72453, 72412, 72413, 72432, 72433,
79442, 79443, 79422, 79423, 79452, 79453, 79412, 79413, 79432, 79433
]
}
]
},
{
"dungeonId": 5005,
"comment": "Midsummer Courtyard 5",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [2, 98],
"items": [
60341, 60342, 60321, 60322, 60351, 60352, 60311, 60312, 60331, 60332,
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [
51442, 51443, 51422, 51423, 51452, 51453, 51412, 51413, 51432, 51433,
72442, 72443, 72422, 72423, 72452, 72453, 72412, 72413, 72432, 72433,
79442, 79443, 79422, 79423, 79452, 79453, 79412, 79413, 79432, 79433
]
},
{
"comment": "5-star Artifacts",
"counts": [0, 1],
"probabilities": [60, 40],
"items": [
72543, 72544, 72523, 72524, 72553, 72554, 72513, 72514, 72533, 72534,
79543, 79544, 79523, 79524, 79553, 79554, 79513, 79514, 79533, 79534
]
}
]
},
{
"dungeonId": 5006,
"comment": "Midsummer Courtyard 6",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [3, 4],
"probabilities": [50, 50],
"items": [
60341, 60342, 60321, 60322, 60351, 60352, 60311, 60312, 60331, 60332,
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332
]
},
{
"comment": "4-star Artifacts",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [
51442, 51443, 51422, 51423, 51452, 51453, 51412, 51413, 51432, 51433,
72442, 72443, 72422, 72423, 72452, 72453, 72412, 72413, 72432, 72433,
79442, 79443, 79422, 79423, 79452, 79453, 79412, 79413, 79432, 79433
]
},
{
"comment": "5-star Artifacts",
"counts": [1, 2],
"probabilities": [90, 10],
"items": [
72543, 72544, 72523, 72524, 72553, 72554, 72513, 72514, 72533, 72534,
79543, 79544, 79523, 79524, 79553, 79554, 79513, 79514, 79533, 79534
]
}
]
},
{
"dungeonId": 5200,
"comment": "Momiji-Dyed Court 1",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [6, 7],
"probabilities": [60, 40],
"items": [
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
},
{
"comment": "4-star Artifacts",
"counts": [0, 2],
"probabilities": [20, 70, 10],
"items": [
51442, 51443, 51422, 51423, 51452, 51453, 51412, 51413, 51432, 51433,
54442, 54443, 54422, 54423, 54452, 54453, 54412, 54413, 54432, 54433,
93442, 93443, 93422, 93423, 93452, 93453, 93412, 93413, 93432, 93433,
94442, 94443, 94422, 94423, 94452, 94453, 94412, 94413, 94432, 94433
]
}
]
},
{
"dungeonId": 5201,
"comment": "Momiji-Dyed Court 2",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2025],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [5, 6],
"probabilities": [20, 80],
"items": [
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [60, 40],
"items": [
51442, 51443, 51422, 51423, 51452, 51453, 51412, 51413, 51432, 51433,
54442, 54443, 54422, 54423, 54452, 54453, 54412, 54413, 54432, 54433,
93442, 93443, 93422, 93423, 93452, 93453, 93412, 93413, 93432, 93433,
94442, 94443, 94422, 94423, 94452, 94453, 94412, 94413, 94432, 94433
]
}
]
},
{
"dungeonId": 5202,
"comment": "Momiji-Dyed Court 3",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [2, 98],
"items": [
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [
51442, 51443, 51422, 51423, 51452, 51453, 51412, 51413, 51432, 51433,
54442, 54443, 54422, 54423, 54452, 54453, 54412, 54413, 54432, 54433,
93442, 93443, 93422, 93423, 93452, 93453, 93412, 93413, 93432, 93433,
94442, 94443, 94422, 94423, 94452, 94453, 94412, 94413, 94432, 94433
]
},
{
"comment": "5-star Artifacts",
"counts": [0, 1],
"probabilities": [60, 40],
"items": [
93543, 93544, 93523, 93524, 93553, 93554, 93513, 93514, 93533, 93534,
94543, 94544, 94523, 94524, 94553, 94554, 94513, 94514, 94533, 94534
]
}
]
},
{
"dungeonId": 5203,
"comment": "Momiji-Dyed Court 4",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [3, 4],
"probabilities": [50, 50],
"items": [
51341, 51342, 51321, 51322, 51351, 51352, 51311, 51312, 51331, 51332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
},
{
"comment": "4-star Artifacts",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [
51442, 51443, 51422, 51423, 51452, 51453, 51412, 51413, 51432, 51433,
54442, 54443, 54422, 54423, 54452, 54453, 54412, 54413, 54432, 54433,
93442, 93443, 93422, 93423, 93452, 93453, 93412, 93413, 93432, 93433,
94442, 94443, 94422, 94423, 94452, 94453, 94412, 94413, 94432, 94433
]
},
{
"comment": "5-star Artifacts",
"counts": [1, 2],
"probabilities": [90, 10],
"items": [
93543, 93544, 93523, 93524, 93553, 93554, 93513, 93514, 93533, 93534,
94543, 94544, 94523, 94524, 94553, 94554, 94513, 94514, 94533, 94534
]
}
]
},
{
"dungeonId": 5204,
"comment": "Slumbering Court 1",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [6, 7],
"probabilities": [60, 40],
"items": [
53341, 53342, 53321, 53322, 53351, 53352, 53311, 53312, 53331, 53332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
},
{
"comment": "4-star Artifacts",
"counts": [0, 2],
"probabilities": [20, 70, 10],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
53442, 53443, 53422, 53423, 53452, 53453, 53412, 53413, 53432, 53433,
95442, 95443, 95422, 95423, 95452, 95453, 95412, 95413, 95432, 95433,
96442, 96443, 96422, 96423, 96452, 96453, 96412, 96413, 96432, 96433
]
}
]
},
{
"dungeonId": 5205,
"comment": "Slumbering Court 2",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2025],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [5, 6],
"probabilities": [20, 80],
"items": [
53341, 53342, 53321, 53322, 53351, 53352, 53311, 53312, 53331, 53332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [60, 40],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
53442, 53443, 53422, 53423, 53452, 53453, 53412, 53413, 53432, 53433,
95442, 95443, 95422, 95423, 95452, 95453, 95412, 95413, 95432, 95433,
96442, 96443, 96422, 96423, 96452, 96453, 96412, 96413, 96432, 96433
]
}
]
},
{
"dungeonId": 5206,
"comment": "Slumbering Court 3",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [2, 98],
"items": [
53341, 53342, 53321, 53322, 53351, 53352, 53311, 53312, 53331, 53332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
53442, 53443, 53422, 53423, 53452, 53453, 53412, 53413, 53432, 53433,
95442, 95443, 95422, 95423, 95452, 95453, 95412, 95413, 95432, 95433,
96442, 96443, 96422, 96423, 96452, 96453, 96412, 96413, 96432, 96433
]
},
{
"comment": "5-star Artifacts",
"counts": [0, 1],
"probabilities": [60, 40],
"items": [
95543, 95544, 95523, 95524, 95553, 95554, 95513, 95514, 95533, 95534,
96543, 96544, 96523, 96524, 96553, 96554, 96513, 96514, 96533, 96534
]
}
]
},
{
"dungeonId": 5207,
"comment": "Slumbering Court 4",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [3, 4],
"probabilities": [50, 50],
"items": [
53341, 53342, 53321, 53322, 53351, 53352, 53311, 53312, 53331, 53332,
52341, 52342, 52321, 52322, 52351, 52352, 52311, 52312, 52331, 52332
]
},
{
"comment": "4-star Artifacts",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [
52442, 52443, 52422, 52423, 52452, 52453, 52412, 52413, 52432, 52433,
53442, 53443, 53422, 53423, 53452, 53453, 53412, 53413, 53432, 53433,
95442, 95443, 95422, 95423, 95452, 95453, 95412, 95413, 95432, 95433,
96442, 96443, 96422, 96423, 96452, 96453, 96412, 96413, 96432, 96433
]
},
{
"comment": "5-star Artifacts",
"counts": [1, 2],
"probabilities": [90, 10],
"items": [
95543, 95544, 95523, 95524, 95553, 95554, 95513, 95514, 95533, 95534,
96543, 96544, 96523, 96524, 96553, 96554, 96513, 96514, 96533, 96534
]
}
]
},
{
"dungeonId": 5125,
"comment": "The Lost Valley 1",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [6, 7],
"probabilities": [60, 40],
"items": [
56341, 56342, 56321, 56322, 56351, 56352, 56311, 56312, 56331, 56332,
58341, 58342, 58321, 58322, 58351, 58352, 58311, 58312, 58331, 58332
]
},
{
"comment": "4-star Artifacts",
"counts": [0, 2],
"probabilities": [20, 70, 10],
"items": [
56442, 56443, 56422, 56423, 56452, 56453, 56412, 56413, 56432, 56433,
58442, 58443, 58422, 58423, 58452, 58453, 58412, 58413, 58432, 58433,
97442, 97443, 97422, 97423, 97452, 97453, 97412, 97413, 97432, 97433,
98442, 98443, 98422, 98423, 98452, 98453, 98412, 98413, 98432, 98433
]
}
]
},
{
"dungeonId": 5126,
"comment": "The Lost Valley 2",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2025],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [5, 6],
"probabilities": [20, 80],
"items": [
56341, 56342, 56321, 56322, 56351, 56352, 56311, 56312, 56331, 56332,
58341, 58342, 58321, 58322, 58351, 58352, 58311, 58312, 58331, 58332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [60, 40],
"items": [
56442, 56443, 56422, 56423, 56452, 56453, 56412, 56413, 56432, 56433,
58442, 58443, 58422, 58423, 58452, 58453, 58412, 58413, 58432, 58433,
97442, 97443, 97422, 97423, 97452, 97453, 97412, 97413, 97432, 97433,
98442, 98443, 98422, 98423, 98452, 98453, 98412, 98413, 98432, 98433
]
}
]
},
{
"dungeonId": 5127,
"comment": "The Lost Valley 3",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [2, 98],
"items": [
56341, 56342, 56321, 56322, 56351, 56352, 56311, 56312, 56331, 56332,
58341, 58342, 58321, 58322, 58351, 58352, 58311, 58312, 58331, 58332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [
56442, 56443, 56422, 56423, 56452, 56453, 56412, 56413, 56432, 56433,
58442, 58443, 58422, 58423, 58452, 58453, 58412, 58413, 58432, 58433,
97442, 97443, 97422, 97423, 97452, 97453, 97412, 97413, 97432, 97433,
98442, 98443, 98422, 98423, 98452, 98453, 98412, 98413, 98432, 98433
]
},
{
"comment": "5-star Artifacts",
"counts": [0, 1],
"probabilities": [60, 40],
"items": [
97543, 97544, 97523, 97524, 97553, 97554, 97513, 97514, 97533, 97534,
98543, 98544, 98523, 98524, 98553, 98554, 98513, 98514, 98533, 98534
]
}
]
},
{
"dungeonId": 5128,
"comment": "The Lost Valley 4",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [3, 4],
"probabilities": [50, 50],
"items": [
56341, 56342, 56321, 56322, 56351, 56352, 56311, 56312, 56331, 56332,
58341, 58342, 58321, 58322, 58351, 58352, 58311, 58312, 58331, 58332
]
},
{
"comment": "4-star Artifacts",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [
56442, 56443, 56422, 56423, 56452, 56453, 56412, 56413, 56432, 56433,
58442, 58443, 58422, 58423, 58452, 58453, 58412, 58413, 58432, 58433,
97442, 97443, 97422, 97423, 97452, 97453, 97412, 97413, 97432, 97433,
98442, 98443, 98422, 98423, 98452, 98453, 98412, 98413, 98432, 98433
]
},
{
"comment": "5-star Artifacts",
"counts": [1, 2],
"probabilities": [90, 10],
"items": [
97543, 97544, 97523, 97524, 97553, 97554, 97513, 97514, 97533, 97534,
98543, 98544, 98523, 98524, 98553, 98554, 98513, 98514, 98533, 98534
]
}
]
},
{
"dungeonId": 5008,
"comment": "Valley of Remembrance 1",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1700],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Artifacts",
"counts": [2, 3],
"items": [63240, 63241, 63220, 63221, 63250, 63251, 63210, 63211, 63230, 63231]
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [20, 80],
"items": [
63341, 63342, 63321, 63322, 63351, 63352, 63311, 63312, 63331, 63332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
}
]
},
{
"dungeonId": 5009,
"comment": "Valley of Remembrance 2",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [6, 7],
"probabilities": [60, 40],
"items": [
63341, 63342, 63321, 63322, 63351, 63352, 63311, 63312, 63331, 63332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
},
{
"comment": "4-star Artifacts",
"counts": [0, 2],
"probabilities": [20, 70, 10],
"items": [
54442, 54443, 54422, 54423, 54452, 54453, 54412, 54413, 54432, 54433,
76442, 76443, 76422, 76423, 76452, 76453, 76412, 76413, 76432, 76433,
74442, 74443, 74422, 74423, 74452, 74453, 74412, 74413, 74432, 74433
]
}
]
},
{
"dungeonId": 5010,
"comment": "Valley of Remembrance 3",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2025],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [5, 6],
"probabilities": [20, 80],
"items": [
63341, 63342, 63321, 63322, 63351, 63352, 63311, 63312, 63331, 63332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [60, 40],
"items": [
54442, 54443, 54422, 54423, 54452, 54453, 54412, 54413, 54432, 54433,
76442, 76443, 76422, 76423, 76452, 76453, 76412, 76413, 76432, 76433,
74442, 74443, 74422, 74423, 74452, 74453, 74412, 74413, 74432, 74433
]
}
]
},
{
"dungeonId": 5011,
"comment": "Valley of Remembrance 4",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [4, 5],
"probabilities": [2, 98],
"items": [
63341, 63342, 63321, 63322, 63351, 63352, 63311, 63312, 63331, 63332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
},
{
"comment": "4-star Artifacts",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [
54442, 54443, 54422, 54423, 54452, 54453, 54412, 54413, 54432, 54433,
76442, 76443, 76422, 76423, 76452, 76453, 76412, 76413, 76432, 76433,
74442, 74443, 74422, 74423, 74452, 74453, 74412, 74413, 74432, 74433
]
},
{
"comment": "5-star Artifacts",
"counts": [0, 1],
"probabilities": [60, 40],
"items": [
76543, 76544, 76523, 76524, 76553, 76554, 76513, 76514, 76533, 76534,
74543, 74544, 74523, 74524, 74553, 74554, 74513, 74514, 74533, 74534
]
}
]
},
{
"dungeonId": 5012,
"comment": "Valley of Remembrance 5",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2525],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "3-star Artifacts",
"counts": [3, 4],
"probabilities": [50, 50],
"items": [
63341, 63342, 63321, 63322, 63351, 63352, 63311, 63312, 63331, 63332,
54341, 54342, 54321, 54322, 54351, 54352, 54311, 54312, 54331, 54332
]
},
{
"comment": "4-star Artifacts",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [
54442, 54443, 54422, 54423, 54452, 54453, 54412, 54413, 54432, 54433,
76442, 76443, 76422, 76423, 76452, 76453, 76412, 76413, 76432, 76433,
74442, 74443, 74422, 74423, 74452, 74453, 74412, 74413, 74432, 74433
]
},
{
"comment": "5-star Artifacts",
"counts": [1, 2],
"probabilities": [90, 10],
"items": [
76543, 76544, 76523, 76524, 76553, 76554, 76513, 76514, 76533, 76534,
74543, 74544, 74523, 74524, 74553, 74554, 74513, 74514, 74533, 74534
]
}
]
},
{
"dungeonId": 4210,
"comment": "Forsaken Rift 1: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104301]
}
]
},
{
"dungeonId": 4211,
"comment": "Forsaken Rift 2: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104301]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104302]
}
]
},
{
"dungeonId": 4212,
"comment": "Forsaken Rift 3: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104301]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104302]
}
]
},
{
"dungeonId": 4213,
"comment": "Forsaken Rift 4: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104301]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104302]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104303]
}
]
},
{
"dungeonId": 4220,
"comment": "Forsaken Rift 1: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104304]
}
]
},
{
"dungeonId": 4221,
"comment": "Forsaken Rift 2: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104304]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104305]
}
]
},
{
"dungeonId": 4222,
"comment": "Forsaken Rift 3: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104304]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104305]
}
]
},
{
"dungeonId": 4223,
"comment": "Forsaken Rift 4: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104304]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104305]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104306]
}
]
},
{
"dungeonId": 4230,
"comment": "Forsaken Rift 1: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104307]
}
]
},
{
"dungeonId": 4231,
"comment": "Forsaken Rift 2: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104307]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104308]
}
]
},
{
"dungeonId": 4232,
"comment": "Forsaken Rift 3: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104307]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104308]
}
]
},
{
"dungeonId": 4233,
"comment": "Forsaken Rift 4: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104307]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104308]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104309]
}
]
},
{
"dungeonId": 4400,
"comment": "Violet Court 1: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104320]
}
]
},
{
"dungeonId": 4401,
"comment": "Violet Court 2: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104320]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104321]
}
]
},
{
"dungeonId": 4402,
"comment": "Violet Court 3: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104320]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104321]
}
]
},
{
"dungeonId": 4403,
"comment": "Violet Court 4: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104320]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104321]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104322]
}
]
},
{
"dungeonId": 4410,
"comment": "Violet Court 1: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104323]
}
]
},
{
"dungeonId": 4411,
"comment": "Violet Court 2: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104323]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104324]
}
]
},
{
"dungeonId": 4412,
"comment": "Violet Court 3: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104323]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104324]
}
]
},
{
"dungeonId": 4413,
"comment": "Violet Court 4: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104323]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104324]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104325]
}
]
},
{
"dungeonId": 4420,
"comment": "Violet Court 1: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104326]
}
]
},
{
"dungeonId": 4421,
"comment": "Violet Court 2: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104326]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104327]
}
]
},
{
"dungeonId": 4422,
"comment": "Violet Court 3: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104326]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104327]
}
]
},
{
"dungeonId": 4423,
"comment": "Violet Court 4: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104326]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104327]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104328]
}
]
},
{
"dungeonId": 5254,
"comment": "Taishan Mansion 1: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104310]
}
]
},
{
"dungeonId": 5255,
"comment": "Taishan Mansion 2: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104310]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104311]
}
]
},
{
"dungeonId": 5256,
"comment": "Taishan Mansion 3: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104310]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104311]
}
]
},
{
"dungeonId": 5257,
"comment": "Taishan Mansion 4: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104310]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104311]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104312]
}
]
},
{
"dungeonId": 5258,
"comment": "Taishan Mansion 1: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104313]
}
]
},
{
"dungeonId": 5259,
"comment": "Taishan Mansion 2: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104313]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104314]
}
]
},
{
"dungeonId": 5260,
"comment": "Taishan Mansion 3: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104313]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104314]
}
]
},
{
"dungeonId": 5261,
"comment": "Taishan Mansion 4: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104313]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104314]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104315]
}
]
},
{
"dungeonId": 5262,
"comment": "Taishan Mansion 1: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1575],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [3, 4],
"probabilities": [80, 20],
"items": [104316]
}
]
},
{
"dungeonId": 5263,
"comment": "Taishan Mansion 2: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1800],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [50, 50],
"items": [104316]
},
{
"comment": "3-star Books",
"counts": [1],
"items": [104317]
}
]
},
{
"dungeonId": 5264,
"comment": "Taishan Mansion 3: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2050],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [1, 2],
"probabilities": [20, 80],
"items": [104316]
},
{
"comment": "3-star Books",
"counts": [2],
"items": [104317]
}
]
},
{
"dungeonId": 5265,
"comment": "Taishan Mansion 4: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2375],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Books",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [104316]
},
{
"comment": "3-star Books",
"counts": [0, 3],
"probabilities": [1, 14, 80, 5],
"items": [104317]
},
{
"comment": "4-star Books",
"counts": [0, 3],
"probabilities": [80, 15, 4, 1],
"items": [104318]
}
]
},
{
"dungeonId": 4310,
"comment": "Cecilia Garden 1: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114001]
}
]
},
{
"dungeonId": 4311,
"comment": "Cecilia Garden 2: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114001]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114002]
}
]
},
{
"dungeonId": 4312,
"comment": "Cecilia Garden 3: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114001]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114002]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114003]
}
]
},
{
"dungeonId": 4313,
"comment": "Cecilia Garden 4: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114001]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114002]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114003]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114004]
}
]
},
{
"dungeonId": 4320,
"comment": "Cecilia Garden 1: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114005]
}
]
},
{
"dungeonId": 4321,
"comment": "Cecilia Garden 2: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114005]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114006]
}
]
},
{
"dungeonId": 4322,
"comment": "Cecilia Garden 3: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114005]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114006]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114007]
}
]
},
{
"dungeonId": 4323,
"comment": "Cecilia Garden 4: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114005]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114006]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114007]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114008]
}
]
},
{
"dungeonId": 4330,
"comment": "Cecilia Garden 1: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114009]
}
]
},
{
"dungeonId": 4331,
"comment": "Cecilia Garden 2: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114009]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114010]
}
]
},
{
"dungeonId": 4332,
"comment": "Cecilia Garden 3: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114009]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114010]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114011]
}
]
},
{
"dungeonId": 4333,
"comment": "Cecilia Garden 4: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114009]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114010]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114011]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114012]
}
]
},
{
"dungeonId": 4340,
"comment": "Court of Flowing Sands 1: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114025]
}
]
},
{
"dungeonId": 4341,
"comment": "Court of Flowing Sands 2: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114025]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114026]
}
]
},
{
"dungeonId": 4342,
"comment": "Court of Flowing Sands 3: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114025]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114026]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114027]
}
]
},
{
"dungeonId": 4343,
"comment": "Court of Flowing Sands 4: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114025]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114026]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114027]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114028]
}
]
},
{
"dungeonId": 4350,
"comment": "Court of Flowing Sands 1: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114029]
}
]
},
{
"dungeonId": 4351,
"comment": "Court of Flowing Sands 2: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114029]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114030]
}
]
},
{
"dungeonId": 4352,
"comment": "Court of Flowing Sands 3: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114029]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114030]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114031]
}
]
},
{
"dungeonId": 4353,
"comment": "Court of Flowing Sands 4: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114029]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114030]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114031]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114032]
}
]
},
{
"dungeonId": 4360,
"comment": "Court of Flowing Sands 1: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114033]
}
]
},
{
"dungeonId": 4361,
"comment": "Court of Flowing Sands 2: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114033]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114034]
}
]
},
{
"dungeonId": 4362,
"comment": "Court of Flowing Sands 3: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114033]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114034]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114035]
}
]
},
{
"dungeonId": 4363,
"comment": "Court of Flowing Sands 4: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114033]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114034]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114035]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114036]
}
]
},
{
"dungeonId": 5214,
"comment": "Hidden Palace of Lianshan Formula 1: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114013]
}
]
},
{
"dungeonId": 5215,
"comment": "Hidden Palace of Lianshan Formula 2: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114013]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114014]
}
]
},
{
"dungeonId": 5216,
"comment": "Hidden Palace of Lianshan Formula 3: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114013]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114014]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114015]
}
]
},
{
"dungeonId": 5217,
"comment": "Hidden Palace of Lianshan Formula 4: Monday/Thursday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114013]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114014]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114015]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114016]
}
]
},
{
"dungeonId": 5218,
"comment": "Hidden Palace of Lianshan Formula 1: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114017]
}
]
},
{
"dungeonId": 5219,
"comment": "Hidden Palace of Lianshan Formula 2: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114017]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114018]
}
]
},
{
"dungeonId": 5220,
"comment": "Hidden Palace of Lianshan Formula 3: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114017]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114018]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114019]
}
]
},
{
"dungeonId": 5221,
"comment": "Hidden Palace of Lianshan Formula 4: Tuesday/Friday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114017]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114018]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114019]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114020]
}
]
},
{
"dungeonId": 5222,
"comment": "Hidden Palace of Lianshan Formula 1: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1125],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [10],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [4, 6],
"probabilities": [20, 60, 30],
"items": [114021]
}
]
},
{
"dungeonId": 5223,
"comment": "Hidden Palace of Lianshan Formula 2: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1550],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114021]
},
{
"comment": "3-star Weapon Material",
"counts": [2],
"items": [114022]
}
]
},
{
"dungeonId": 5224,
"comment": "Hidden Palace of Lianshan Formula 3: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [1850],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [15],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114021]
},
{
"comment": "3-star Weapon Material",
"counts": [2, 3],
"probabilities": [20, 80],
"items": [114022]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114023]
}
]
},
{
"dungeonId": 5225,
"comment": "Hidden Palace of Lianshan Formula 4: Wednesday/Saturday",
"drops": [
{
"comment": "AR exp",
"counts": [100],
"items": [102]
},
{
"comment": "Mora",
"counts": [2200],
"items": [202]
},
{
"comment": "Friendship exp",
"counts": [20],
"items": [105],
"mpDouble": true
},
{
"comment": "2-star Weapon Material",
"counts": [2, 3],
"probabilities": [80, 20],
"items": [114021]
},
{
"comment": "3-star Weapon Material",
"counts": [0, 4],
"probabilities": [5, 45, 40, 5, 5],
"items": [114022]
},
{
"comment": "4-star Weapon Material",
"counts": [0, 4],
"probabilities": [40, 40, 15, 4, 1],
"items": [114023]
},
{
"comment": "5-star Weapon Material",
"counts": [0, 2],
"probabilities": [80, 15, 5],
"items": [114024]
}
]
}
]
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment