RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
NpcDropParser.java
1package com.osroyale.util.parser.impl;
2
3import com.google.gson.JsonObject;
4import com.osroyale.game.world.entity.mob.npc.drop.NpcDrop;
5import com.osroyale.game.world.entity.mob.npc.drop.NpcDropChance;
6import com.osroyale.game.world.entity.mob.npc.drop.NpcDropManager;
7import com.osroyale.game.world.entity.mob.npc.drop.NpcDropTable;
8import com.osroyale.game.world.items.ItemDefinition;
9import com.osroyale.util.parser.GsonParser;
10import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
11import it.unimi.dsi.fastutil.ints.IntSet;
12import org.jire.tarnishps.OldToNew;
13
14import java.util.Arrays;
15import java.util.LinkedList;
16import java.util.List;
17
49
50public class NpcDropParser extends GsonParser {
51
52 public NpcDropParser() {
53 super("def/npc/npc_drops", false);
54 }
55
56 @Override
57 protected void parse(JsonObject data) {
58 int[] npcIds = builder.fromJson(data.get("id"), int[].class);
59 IntSet newNpcIds = new IntOpenHashSet(npcIds.length);
60 for (int id : npcIds) {
61 int newId = OldToNew.get(id);
62 if (newId != -1) {
63 newNpcIds.add(newId);
64 } else {
65 newNpcIds.add(id);
66 }
67 }
68 npcIds = newNpcIds.toIntArray();
69
70 boolean rareDropTable = data.get("rare_table").getAsBoolean();
71 NpcDrop[] npcDrops = builder.fromJson(data.get("drops"), NpcDrop[].class);
72
73 List<NpcDrop> always = new LinkedList<>();
74 List<NpcDrop> common = new LinkedList<>();
75 List<NpcDrop> uncommon = new LinkedList<>();
76 List<NpcDrop> rare = new LinkedList<>();
77 List<NpcDrop> veryRare = new LinkedList<>();
78
79 for (NpcDrop drop : npcDrops) {
80 ItemDefinition itemDefinition = ItemDefinition.get(drop.id);
81
82 if (itemDefinition == null)
83 continue;
84
85 if (drop.id == 12073) {// elite clue
86 veryRare.add(drop);
87 drop.setType(NpcDropChance.VERY_RARE);
88 continue;
89 }
90
91 if (drop.id == 2722) {// hard clue
92 rare.add(drop);
93 drop.setType(NpcDropChance.RARE);
94 continue;
95 }
96
97 if (drop.id == 2801) {// medium clue
98 uncommon.add(drop);
99 drop.setType(NpcDropChance.UNCOMMON);
100 continue;
101 }
102
103 if (drop.id == 2677) {// easy clue
104 common.add(drop);
105 drop.setType(NpcDropChance.COMMON);
106 continue;
107 }
108
109 if (drop.id == 11942) {// ecu key
110 veryRare.add(drop);
111 drop.setType(NpcDropChance.VERY_RARE);
112 continue;
113 }
114
115 if (drop.id == 1436) {
116 drop.id = 7936;
117 }
118
119 if (drop.id == 1437) {
120 drop.id = 7937;
121 }
122
123 if (drop.type == NpcDropChance.ALWAYS) {
124 always.add(drop);
125 } else if (drop.type == NpcDropChance.COMMON) {
126 common.add(drop);
127 } else if (drop.type == NpcDropChance.UNCOMMON) {
128 uncommon.add(drop);
129 } else if (drop.type == NpcDropChance.RARE) {
130 rare.add(drop);
131 } else if (drop.type == NpcDropChance.VERY_RARE) {
132 veryRare.add(drop);
133 }
134 }
135
136 //Custom drops
137// for (int npc : npcIds) {
138// if (NpcDefinition.get(npc).getCombatLevel() > 10) {
139// uncommon.add(new NpcDrop(985, NpcDropChance.UNCOMMON, 1, 1, 1));
140// uncommon.add(new NpcDrop(987, NpcDropChance.UNCOMMON, 1, 1, 1));
141// rare.add(new NpcDrop(405, NpcDropChance.RARE, 1, 1, 1));
142// }
143// }
144
145
146 Arrays.sort(npcDrops);
147
148 NpcDropTable table = new NpcDropTable(npcIds, rareDropTable, npcDrops, always.toArray(new NpcDrop[0]), common.toArray(new NpcDrop[0]), uncommon.toArray(new NpcDrop[0]), rare.toArray(new NpcDrop[0]), veryRare.toArray(new NpcDrop[0]));
149
150 if (data.has("roll-data")) {
151 int[] rollData = builder.fromJson(data.get("roll-data"), int[].class);
152 table.setRollData(rollData);
153 }
154
155 for (int id : npcIds) {
156 NpcDropManager.NPC_DROPS.put(id, table);
157 }
158 }
159}