mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-16 15:24:44 +01:00
Fix drop values for trace/avatar/lightcone exp cocoons
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user