56 private final boolean rareDropTable;
63 private int maxRoll = 20_000;
69 private static final int[] ROLL_DATA = {
86 private int[] rollData;
91 this.rareDropTable = rareDropTable;
92 this.drops = npcDrops;
101 public List<NpcDrop> generate(
Player player,
boolean simulated) {
102 LinkedList<NpcDrop> items =
new LinkedList<>();
103 int roll = RandomUtils.inclusive(maxRoll);
104 if (player.equipment.hasRow()) {
108 if (roll < rollData[0] && old >= rollData[0]) {
110 player.message(
"Very Rare drop table accessed by ring");
111 player.playerAssistant.useROW();
113 }
else if (roll < rollData[1] && old >= rollData[1]) {
115 player.message(
"Rare drop table accessed by ring");
116 player.playerAssistant.useROW();
124 for (
int chance = 0, index = 0; index < rollData.length - 1; index++) {
125 chance += rollData[index];
127 if (rollData[index] == 0 || roll >= chance) {
131 if (table[index].length > 0) {
132 items.addFirst(RandomUtils.random(table[index]));
137 for (NpcDrop drop : table[4]) {
138 items.addFirst(drop);
144 public void setRollData(
int[] rollData) {
145 this.rollData = rollData;
147 for (
int roll : rollData) {
152 public static void main(String[] args) {
164 int[] customRolls = {
181 ItemDefinition.createParser().run();
182 new NpcDropParser().run();
184 NpcDropTable table = NpcDropManager.NPC_DROPS.get(npcId);
186 System.out.println();
187 System.out.println(
"Table lengths (vr, r, uc, c): ");
188 for (
int index = 0; index < table.table.length - 1; index++) {
189 System.out.print(table.table[index].length +
" ");
191 System.out.println(
"\n");
192 System.out.println(
"--------------------------------------------------");
193 System.out.println(
"Current rolls: \t \t \t \t Custom rolls:");
194 printRates(table.table, table.rollData, customRolls);
195 System.out.println();
198 private static void printRates(NpcDrop[][] tables,
int[] rollData,
int[] rollData2) {
199 long maxRoll = 0, maxRoll2 = 0;
201 for (
int index = 0; index < rollData.length; index++) {
202 maxRoll += rollData[index];
203 maxRoll2 += rollData2[index];
206 System.out.println(
"--------------------------------------------------");
207 System.out.println(
"Very Rare ---- " + ((
long) rollData[0] * 100_00 / maxRoll) / 100.0 +
"% \t\t Very Rare ---- " + ((
long) rollData2[0] * 100_00 / maxRoll2) / 100.0 +
"%");
208 System.out.println(
"Rare --------- " + ((
long) rollData[1] * 100_00 / maxRoll) / 100.0 +
"% \t\t Rare --------- " + ((
long) rollData2[1] * 100_00 / maxRoll2) / 100.0 +
"%");
209 System.out.println(
"Uncommon ----- " + ((
long) rollData[2] * 100_00 / maxRoll) / 100.0 +
"% \t\t Uncommon ----- " + ((
long) rollData2[2] * 100_00 / maxRoll2) / 100.0 +
"%");
210 System.out.println(
"Common ------- " + ((
long) rollData[3] * 100_00 / maxRoll) / 100.0 +
"% \t\t Common ------- " + ((
long) rollData2[3] * 100_00 / maxRoll2) / 100.0 +
"%");
211 System.out.println(
"Empty Drop --- " + ((
long) rollData[4] * 100_00 / maxRoll) / 100.0 +
"% \t\t Empty Drop --- " + ((
long) rollData2[4] * 100_00 / maxRoll2) / 100.0 +
"%");
212 System.out.println(
"--------------------------------------------------");
213 System.out.println(
"Very Rare ---- " + ((
long) rollData[0] * 100_00 / maxRoll) / tables[0].length / 100.0 +
"% \t\t Very Rare ---- " + ((
long) rollData2[0] * 100_00 / maxRoll2) / tables[0].length / tables[0].length / 100.0 +
"%");
214 System.out.println(
"Rare --------- " + ((
long) rollData[1] * 100_00 / maxRoll) / tables[1].length / 100.0 +
"% \t\t Rare --------- " + ((
long) rollData2[1] * 100_00 / maxRoll2) / tables[0].length / tables[1].length / 100.0 +
"%");
215 System.out.println(
"Uncommon ----- " + ((
long) rollData[2] * 100_00 / maxRoll) / tables[2].length / 100.0 +
"% \t\t Uncommon ----- " + ((
long) rollData2[2] * 100_00 / maxRoll2) / tables[0].length / tables[2].length / 100.0 +
"%");
216 System.out.println(
"Common ------- " + ((
long) rollData[3] * 100_00 / maxRoll) / tables[3].length / 100.0 +
"% \t\t Common ------- " + ((
long) rollData2[3] * 100_00 / maxRoll2) / tables[0].length / tables[3].length / 100.0 +
"%");
217 System.out.println(
"--------------------------------------------------");