Fix drop values for trace/avatar/lightcone exp cocoons

This commit is contained in:
Melledy
2023-12-14 20:39:11 -08:00
parent 04f3feb15c
commit 4a7653ec89
2 changed files with 40 additions and 12 deletions

View File

@@ -11,7 +11,6 @@ import emu.lunarcore.data.ResourceType.LoadPriority;
import emu.lunarcore.data.common.ItemParam; import emu.lunarcore.data.common.ItemParam;
import emu.lunarcore.game.drops.DropParam; import emu.lunarcore.game.drops.DropParam;
import emu.lunarcore.game.enums.ItemMainType; import emu.lunarcore.game.enums.ItemMainType;
import emu.lunarcore.game.enums.ItemRarity;
import emu.lunarcore.game.enums.ItemSubType; import emu.lunarcore.game.enums.ItemSubType;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntArrayList;
@@ -94,35 +93,66 @@ public class MappingInfoExcel extends GameResource {
} else if (itemExcel.getItemMainType() == ItemMainType.Material) { } else if (itemExcel.getItemMainType() == ItemMainType.Material) {
// Calculate amount to drop by purpose level // Calculate amount to drop by purpose level
DropParam drop = switch (itemExcel.getPurposeType()) { DropParam drop = switch (itemExcel.getPurposeType()) {
// Avatar exp. TODO drop rate is not correct // Avatar exp. Drop rate is guessed (with data)
case 1 -> new DropParam(itemParam.getId(), 1); case 1 -> {
// Calc amount
double amount = switch (itemExcel.getRarity()) {
case NotNormal -> getWorldLevel() < 3 ? getWorldLevel() + 3 : 2.5;
case Rare -> getWorldLevel() < 3 ? getWorldLevel() + 3 : (getWorldLevel() * 2) - 3;
default -> 1;
};
yield new DropParam(itemParam.getId(), amount);
}
// Boss materials // Boss materials
case 2 -> new DropParam(itemParam.getId(), this.getWorldLevel()); case 2 -> new DropParam(itemParam.getId(), this.getWorldLevel());
// Trace materials. TODO drop rate is not correct // Trace materials. Drop rate is guessed (with data)
case 3 -> { case 3 -> {
var dropInfo = new DropParam(itemParam.getId(), 1); var dropInfo = new DropParam(itemParam.getId(), 1);
if (itemExcel.getRarity() == ItemRarity.VeryRare) { switch (itemExcel.getRarity()) {
dropInfo.setChance((this.getWorldLevel() - 3) * 75); case NotNormal -> {
double amount = getWorldLevel() >= 1 && getWorldLevel() <= 3 ? 2.5 : 1.5;
dropInfo.setCount(amount);
}
case Rare -> {
dropInfo.setChance(Math.min((getWorldLevel() - 1) * 334, 1000));
}
case VeryRare -> {
dropInfo.setChance((getWorldLevel() - 3) * 75);
}
default -> {
}
} }
yield dropInfo; yield dropInfo;
} }
// Boss Trace materials. TODO drop rate is not correct // Boss Trace materials. Drop rate is guessed (with data)
case 4 -> new DropParam(itemParam.getId(), (this.getWorldLevel() * 0.5) + 0.5); case 4 -> new DropParam(itemParam.getId(), (this.getWorldLevel() * 0.5) + 0.5);
// Lightcone exp. TODO drop rate is not correct // Lightcone exp. Drop rate is guessed (with data)
case 5 -> new DropParam(itemParam.getId(), 1); case 5 -> {
// Calc amount
double amount = switch (itemExcel.getRarity()) {
case NotNormal -> Math.max(5 - getWorldLevel(), 2.5);
case Rare -> (getWorldLevel() % 3) + 1;
default -> 1;
};
yield new DropParam(itemParam.getId(), amount);
}
// Lucent afterglow // Lucent afterglow
case 11 -> new DropParam(itemParam.getId(), 4 + this.getWorldLevel()); case 11 -> new DropParam(itemParam.getId(), 4 + this.getWorldLevel());
// Unknown // Unknown
default -> null; default -> null;
}; };
// Add to drop list
if (drop != null) { if (drop != null) {
dropList.add(drop); dropList.add(drop);
} }
} else if (itemExcel.getItemMainType() == ItemMainType.Equipment) { } else if (itemExcel.getItemMainType() == ItemMainType.Equipment) {
// Lightcones // Add lightcones
equipmentDrops.add(itemParam.getId()); equipmentDrops.add(itemParam.getId());
} }
} }

View File

@@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import emu.lunarcore.GameConstants; import emu.lunarcore.GameConstants;
import emu.lunarcore.LunarCore;
import emu.lunarcore.data.GameData; import emu.lunarcore.data.GameData;
import emu.lunarcore.data.common.ItemParam; import emu.lunarcore.data.common.ItemParam;
import emu.lunarcore.data.excel.ItemExcel; import emu.lunarcore.data.excel.ItemExcel;
@@ -72,7 +71,6 @@ public class DropService extends BaseGameService {
} }
// Create item and add it to player // Create item and add it to player
int itemId = 0;
ItemExcel excel = GameData.getItemExcelMap().get(entry.getIntKey()); ItemExcel excel = GameData.getItemExcelMap().get(entry.getIntKey());
if (excel == null) continue; if (excel == null) continue;