Added support for tertiary drop tables

This commit is contained in:
Ceikry 2023-10-04 23:17:01 +00:00 committed by Ryan
parent 3a72aadbab
commit cc989d5844
2 changed files with 11 additions and 3 deletions

View file

@ -5,16 +5,22 @@ import core.game.node.item.Item
class NPCDropTable : WeightBasedTable() {
private val charmDrops = WeightBasedTable()
private val tertiaryDrops = WeightBasedTable()
fun addToCharms(element: WeightedItem): Boolean {
return charmDrops.add(element)
}
fun addToTertiary(element: WeightedItem) : Boolean {
return tertiaryDrops.add(element)
}
override fun roll(receiver: Entity?, times: Int): ArrayList<Item> {
val items = ArrayList<Item>()
// Charms table is always rolled, and should contain explicit "Nothing"
// entries at the data level to account for the chance to not drop a charm.
items.addAll(charmDrops.roll(receiver, times))
items.addAll(tertiaryDrops.roll(receiver, times))
items.addAll(super.roll(receiver, times))
return items
}

View file

@ -25,8 +25,9 @@ class DropTableParser {
try {
val table = NPCDropTable()
parseTable(tab["main"] as JSONArray, table, false)
parseTable(tab["charm"] as JSONArray, table, false, true)
parseTable(tab["main"] as JSONArray, table, isAlways = false)
parseTable(tab["charm"] as JSONArray, table, isAlways = false, isCharms = true)
(tab["tertiary"] as? JSONArray)?.let { parseTable(it, table, isAlways = false, isTertiary = true) }
parseTable(tab["default"] as JSONArray, table, true)
for(n in ids){
@ -42,7 +43,7 @@ class DropTableParser {
log(this::class.java, Log.FINE, "Parsed $count drop tables.")
}
private fun parseTable(data: JSONArray, destTable: NPCDropTable, isAlways: Boolean, isCharms: Boolean = false) {
private fun parseTable(data: JSONArray, destTable: NPCDropTable, isAlways: Boolean, isTertiary: Boolean = false, isCharms: Boolean = false) {
for(it in data){
val item = it as JSONObject
val id = item["id"].toString().toInt()
@ -56,6 +57,7 @@ class DropTableParser {
val weight = item["weight"].toString().toDouble()
val newItem = WeightedItem(id,minAmount,maxAmount,weight.toDouble(),isAlways)
if(isCharms) destTable.addToCharms(newItem)
else if (isTertiary) destTable.addToTertiary(newItem)
else destTable.add(newItem)
}
}