forked from MagicBane/Server
Unused methods deleted.
This commit is contained in:
@@ -46,11 +46,15 @@ public enum LootManager {
|
|||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
|
|
||||||
|
// Load loot tables from database.
|
||||||
|
|
||||||
DbManager.LootQueries.LOAD_ALL_LOOTGROUPS();
|
DbManager.LootQueries.LOAD_ALL_LOOTGROUPS();
|
||||||
DbManager.LootQueries.LOAD_ALL_LOOTTABLES();
|
DbManager.LootQueries.LOAD_ALL_LOOTTABLES();
|
||||||
DbManager.LootQueries.LOAD_ALL_MODGROUPS();
|
DbManager.LootQueries.LOAD_ALL_MODGROUPS();
|
||||||
DbManager.LootQueries.LOAD_ALL_MODTABLES();
|
DbManager.LootQueries.LOAD_ALL_MODTABLES();
|
||||||
|
|
||||||
|
// Cache drop rate values from Config manager.
|
||||||
|
|
||||||
NORMAL_DROP_RATE = Float.parseFloat(ConfigManager.MB_NORMAL_DROP_RATE.getValue());
|
NORMAL_DROP_RATE = Float.parseFloat(ConfigManager.MB_NORMAL_DROP_RATE.getValue());
|
||||||
NORMAL_EXP_RATE = Float.parseFloat(ConfigManager.MB_NORMAL_EXP_RATE.getValue());
|
NORMAL_EXP_RATE = Float.parseFloat(ConfigManager.MB_NORMAL_EXP_RATE.getValue());
|
||||||
NORMAL_GOLD_RATE = Float.parseFloat(ConfigManager.MB_NORMAL_GOLD_RATE.getValue());
|
NORMAL_GOLD_RATE = Float.parseFloat(ConfigManager.MB_NORMAL_GOLD_RATE.getValue());
|
||||||
|
|||||||
@@ -13,19 +13,14 @@ import engine.Enum.ItemContainerType;
|
|||||||
import engine.Enum.ItemType;
|
import engine.Enum.ItemType;
|
||||||
import engine.Enum.OwnerType;
|
import engine.Enum.OwnerType;
|
||||||
import engine.gameManager.DbManager;
|
import engine.gameManager.DbManager;
|
||||||
import engine.gameManager.NPCManager;
|
|
||||||
import engine.gameManager.ZoneManager;
|
|
||||||
import engine.server.MBServerStatics;
|
import engine.server.MBServerStatics;
|
||||||
import org.pmw.tinylog.Logger;
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
import static engine.gameManager.LootManager.LOOTMANAGER;
|
|
||||||
|
|
||||||
public class LootTable {
|
public class LootTable {
|
||||||
|
|
||||||
private static final ConcurrentHashMap<Integer, LootTable> lootGroups = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
private static final ConcurrentHashMap<Integer, LootTable> lootGroups = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||||
@@ -33,10 +28,6 @@ public class LootTable {
|
|||||||
private static final ConcurrentHashMap<Integer, LootTable> modTables = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
private static final ConcurrentHashMap<Integer, LootTable> modTables = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||||
private static final ConcurrentHashMap<Integer, LootTable> modGroups = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
private static final ConcurrentHashMap<Integer, LootTable> modGroups = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||||
private static final ConcurrentHashMap<Integer, Integer> statRuneChances = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
private static final ConcurrentHashMap<Integer, Integer> statRuneChances = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||||
private static final int oneDrop = 95;
|
|
||||||
private static final int twoDrop = 100;
|
|
||||||
private static final int noDropHotZone = 79;
|
|
||||||
private static final int oneDropHotZone = 98;
|
|
||||||
public static boolean initialized = false;
|
public static boolean initialized = false;
|
||||||
public static HashMap<ItemBase, Integer> itemsDroppedMap = new HashMap<>();
|
public static HashMap<ItemBase, Integer> itemsDroppedMap = new HashMap<>();
|
||||||
public static HashMap<ItemBase, Integer> resourceDroppedMap = new HashMap<>();
|
public static HashMap<ItemBase, Integer> resourceDroppedMap = new HashMap<>();
|
||||||
@@ -79,6 +70,7 @@ public class LootTable {
|
|||||||
|
|
||||||
LootTable lootTable = new LootTable(UUID);
|
LootTable lootTable = new LootTable(UUID);
|
||||||
lootTables.put(UUID, lootTable);
|
lootTables.put(UUID, lootTable);
|
||||||
|
|
||||||
return lootTable;
|
return lootTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,23 +103,30 @@ public class LootTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static LootTable getModGroup(int UUID) {
|
public static LootTable getModGroup(int UUID) {
|
||||||
|
|
||||||
if (modGroups.containsKey(UUID))
|
if (modGroups.containsKey(UUID))
|
||||||
return modGroups.get(UUID);
|
return modGroups.get(UUID);
|
||||||
|
|
||||||
LootTable modTable = new LootTable(UUID);
|
LootTable modTable = new LootTable(UUID);
|
||||||
modGroups.put(UUID, modTable);
|
modGroups.put(UUID, modTable);
|
||||||
|
|
||||||
return modTable;
|
return modTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LootTable getModTable(int UUID) {
|
public static LootTable getModTable(int UUID) {
|
||||||
|
|
||||||
if (modTables.containsKey(UUID))
|
if (modTables.containsKey(UUID))
|
||||||
return modTables.get(UUID);
|
return modTables.get(UUID);
|
||||||
|
|
||||||
LootTable modTypeTable = new LootTable(UUID);
|
LootTable modTypeTable = new LootTable(UUID);
|
||||||
modTables.put(UUID, modTypeTable);
|
modTables.put(UUID, modTypeTable);
|
||||||
|
|
||||||
return modTypeTable;
|
return modTypeTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
//call this on server startup to populate the tables
|
//call this on server startup to populate the tables
|
||||||
public static void populateLootTables() {
|
public static void populateLootTables() {
|
||||||
|
|
||||||
DbManager.LootQueries.populateLootGroups();
|
DbManager.LootQueries.populateLootGroups();
|
||||||
DbManager.LootQueries.populateLootTables();
|
DbManager.LootQueries.populateLootTables();
|
||||||
DbManager.LootQueries.populateModTables();
|
DbManager.LootQueries.populateModTables();
|
||||||
@@ -137,580 +136,8 @@ public class LootTable {
|
|||||||
populateStatRuneChances();
|
populateStatRuneChances();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Returns a list of random loot for a mob based on level, lootTable and hotzone
|
|
||||||
public static ArrayList<MobLoot> getMobLoot(Mob mobile, int mobLevel, int lootTable, boolean hotzone) {
|
|
||||||
|
|
||||||
ArrayList<MobLoot> mobLoot;
|
|
||||||
int calculatedLootTable;
|
|
||||||
int randomRoll;
|
|
||||||
|
|
||||||
mobLoot = new ArrayList<>();
|
|
||||||
|
|
||||||
// Setup default loot table if none exists
|
|
||||||
|
|
||||||
calculatedLootTable = lootTable;
|
|
||||||
|
|
||||||
LootTable.rollCount++;
|
|
||||||
|
|
||||||
if (MobLootBase.MobLootSet.get(mobile.getMobBase().getLoadID()).isEmpty()) {
|
|
||||||
|
|
||||||
randomRoll = ThreadLocalRandom.current().nextInt(100);
|
|
||||||
|
|
||||||
if (randomRoll > 90)
|
|
||||||
if (randomRoll > LootTable.oneDropHotZone)
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, calculatedLootTable, 1, true);
|
|
||||||
else
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, calculatedLootTable, 1, true);
|
|
||||||
} else {
|
|
||||||
for (MobLootBase mlb : MobLootBase.MobLootSet.get(mobile.getMobBase().getLoadID())) {
|
|
||||||
|
|
||||||
float chance = mlb.getChance() * .01f;
|
|
||||||
|
|
||||||
chance *= LOOTMANAGER.NORMAL_DROP_RATE;
|
|
||||||
|
|
||||||
calculatedLootTable = mlb.getLootTableID();
|
|
||||||
|
|
||||||
if (ThreadLocalRandom.current().nextFloat() > chance)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, calculatedLootTable, 1, false);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//calculatedLootTable = lootTable;
|
|
||||||
|
|
||||||
if (calculatedLootTable <= 1)
|
|
||||||
calculatedLootTable = 1300; // GENERIC WORLD
|
|
||||||
|
|
||||||
//handle hotzone random loot
|
|
||||||
|
|
||||||
if (hotzone) {
|
|
||||||
|
|
||||||
LootTable.rollCount++;
|
|
||||||
|
|
||||||
if (!MobLootBase.MobLootSet.get(mobile.getMobBase().getLoadID()).isEmpty())
|
|
||||||
for (MobLootBase mlb : MobLootBase.MobLootSet.get(mobile.getMobBase().getLoadID())) {
|
|
||||||
if (!LootTable.lootGroups.containsKey(mlb.getLootTableID() + 1))
|
|
||||||
continue;
|
|
||||||
calculatedLootTable = mlb.getLootTableID();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
randomRoll = ThreadLocalRandom.current().nextInt(100);
|
|
||||||
|
|
||||||
if (randomRoll > 90)
|
|
||||||
if (randomRoll > LootTable.oneDropHotZone)
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, calculatedLootTable + 1, 1, true);
|
|
||||||
else
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, calculatedLootTable + 1, 1, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
//handle mob specific special loot
|
|
||||||
|
|
||||||
ArrayList bootyLoot = getBootyLoot(mobile);
|
|
||||||
mobLoot.addAll(bootyLoot);
|
|
||||||
|
|
||||||
return mobLoot;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ArrayList<MobLoot> getMobLootDeath(Mob mobile, int mobLevel, int lootTable) {
|
|
||||||
ArrayList<MobLoot> mobLoot = new ArrayList<>();
|
|
||||||
|
|
||||||
if (mobile == null)
|
|
||||||
return mobLoot;
|
|
||||||
|
|
||||||
//handle hotzone random loot
|
|
||||||
boolean hotzone = ZoneManager.inHotZone(mobile.getLoc());
|
|
||||||
if (hotzone) {
|
|
||||||
|
|
||||||
if (MobLootBase.MobLootSet.get(mobile.getMobBase().getLoadID()).isEmpty()) {
|
|
||||||
lootTable += 1;
|
|
||||||
|
|
||||||
if (lootTable <= 1)
|
|
||||||
lootTable = 1301; // GENERIC WORLD
|
|
||||||
int roll = ThreadLocalRandom.current().nextInt(100);
|
|
||||||
if (roll > 90)
|
|
||||||
if (roll > LootTable.oneDropHotZone)
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, lootTable, 1, true);
|
|
||||||
else
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, lootTable, 1, true);
|
|
||||||
} else {
|
|
||||||
for (MobLootBase mlb : MobLootBase.MobLootSet.get(mobile.getMobBase().getLoadID())) {
|
|
||||||
lootTable = mlb.getLootTableID() + 1;
|
|
||||||
if (!LootTable.lootGroups.containsKey(lootTable))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
int roll = ThreadLocalRandom.current().nextInt(100);
|
|
||||||
if (roll > 90)
|
|
||||||
if (roll > LootTable.oneDropHotZone)
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, (lootTable), 1, true);
|
|
||||||
else
|
|
||||||
addMobLoot(mobile, mobLoot, mobLevel, (lootTable), 1, true);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (mobLoot.isEmpty()) {
|
|
||||||
|
|
||||||
LootTable.rollCount++; //add another rollCount here.
|
|
||||||
int resourceRoll = ThreadLocalRandom.current().nextInt(100);
|
|
||||||
if (resourceRoll <= 5)
|
|
||||||
addMobLootResources(mobile, mobLoot, mobLevel, (lootTable), 1, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//handle mob specific booty on death
|
|
||||||
|
|
||||||
ArrayList bootyLoot = getBootyLoot(mobile);
|
|
||||||
mobLoot.addAll(bootyLoot);
|
|
||||||
|
|
||||||
return mobLoot;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ArrayList<MobLoot> getBootyLoot(Mob mob) {
|
|
||||||
|
|
||||||
ArrayList<BootySetEntry> bootySetList;
|
|
||||||
ArrayList<MobLoot> mobLootList = new ArrayList<>();
|
|
||||||
|
|
||||||
if (mob.bootySet == 0)
|
|
||||||
return mobLootList;
|
|
||||||
|
|
||||||
bootySetList = NPCManager._bootySetMap.get(mob.bootySet);
|
|
||||||
|
|
||||||
for (BootySetEntry bootyEntry : bootySetList)
|
|
||||||
if (ThreadLocalRandom.current().nextInt(100) < bootyEntry.dropChance) {
|
|
||||||
ItemBase itemBase = ItemBase.getItemBase(bootyEntry.itemBase);
|
|
||||||
|
|
||||||
if (itemBase != null) {
|
|
||||||
MobLoot mobLoot = new MobLoot(mob, itemBase, true);
|
|
||||||
mobLootList.add(mobLoot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mobLootList;
|
|
||||||
}
|
|
||||||
|
|
||||||
//called by getMobLoot to add the actual loot
|
|
||||||
private static void addMobLoot(Mob mob, ArrayList<MobLoot> loot, int mobLevel, int lootTableID, int cnt, boolean hotzone) {
|
|
||||||
|
|
||||||
// Member variable declaration
|
|
||||||
float calculatedMobLevel;
|
|
||||||
int minSpawn;
|
|
||||||
int maxSpawn;
|
|
||||||
int spawnQuanity = 0;
|
|
||||||
int prefixValue = 0;
|
|
||||||
int suffixValue = 0;
|
|
||||||
int subTableID;
|
|
||||||
String modifierPrefix = "";
|
|
||||||
String modifierSuffix = "";
|
|
||||||
|
|
||||||
// Lookup Table Variables
|
|
||||||
LootTable lootTable;
|
|
||||||
LootRow lootRow;
|
|
||||||
LootTable lootGroup;
|
|
||||||
LootRow groupRow = null;
|
|
||||||
LootTable modTable;
|
|
||||||
LootTable modGroup;
|
|
||||||
LootRow modRow = null;
|
|
||||||
|
|
||||||
// Used for actual generation of items
|
|
||||||
|
|
||||||
int itemBaseUUID;
|
|
||||||
ItemBase itemBase = null;
|
|
||||||
MobLoot mobLoot;
|
|
||||||
|
|
||||||
if (!LootTable.lootGroups.containsKey(lootTableID))
|
|
||||||
return;
|
|
||||||
|
|
||||||
lootGroup = LootTable.lootGroups.get(lootTableID);
|
|
||||||
|
|
||||||
calculatedMobLevel = mobLevel;
|
|
||||||
|
|
||||||
if (calculatedMobLevel > 49)
|
|
||||||
calculatedMobLevel = 49;
|
|
||||||
|
|
||||||
|
|
||||||
int randomRoll = 0;
|
|
||||||
for (int i = 0; i < cnt; i++) {
|
|
||||||
|
|
||||||
Random random = new Random();
|
|
||||||
|
|
||||||
randomRoll = random.nextInt(100) + 1; //random roll between 1 and 100
|
|
||||||
groupRow = lootGroup.getLootRow(randomRoll);
|
|
||||||
|
|
||||||
if (groupRow == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//get loot table for this group
|
|
||||||
if (!LootTable.lootTables.containsKey(groupRow.getValueOne()))
|
|
||||||
return;
|
|
||||||
|
|
||||||
lootTable = LootTable.lootTables.get(groupRow.getValueOne());
|
|
||||||
|
|
||||||
int minRoll = (int) ((calculatedMobLevel - 5) * 5);
|
|
||||||
int maxRoll = (int) ((calculatedMobLevel + 15) * 5);
|
|
||||||
|
|
||||||
if (minRoll < (int) lootTable.minRoll)
|
|
||||||
minRoll = (int) lootTable.minRoll;
|
|
||||||
|
|
||||||
if (maxRoll < minRoll)
|
|
||||||
maxRoll = minRoll;
|
|
||||||
|
|
||||||
if (maxRoll > lootTable.maxRoll)
|
|
||||||
maxRoll = (int) lootTable.maxRoll;
|
|
||||||
|
|
||||||
if (maxRoll > 320)
|
|
||||||
maxRoll = 320;
|
|
||||||
|
|
||||||
randomRoll = (int) ThreadLocalRandom.current().nextDouble(minRoll, maxRoll + 1); //Does not return Max, but does return min?
|
|
||||||
|
|
||||||
lootRow = lootTable.getLootRow(randomRoll); //get the item row from the bell's curve of level +-15
|
|
||||||
|
|
||||||
if (lootRow == null)
|
|
||||||
continue; //no item found for roll
|
|
||||||
|
|
||||||
itemBaseUUID = lootRow.getValueOne();
|
|
||||||
|
|
||||||
if (lootRow.getValueOne() == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
//handle quantities > 1 for resource drops
|
|
||||||
|
|
||||||
minSpawn = lootRow.getValueTwo();
|
|
||||||
maxSpawn = lootRow.getValueThree();
|
|
||||||
|
|
||||||
// spawnQuantity between min spawn (inclusive) and max spawn (inclusive)
|
|
||||||
if (maxSpawn > 1)
|
|
||||||
spawnQuanity = ThreadLocalRandom.current().nextInt((maxSpawn + 1 - minSpawn)) + minSpawn;
|
|
||||||
|
|
||||||
//get modifierPrefix
|
|
||||||
|
|
||||||
calculatedMobLevel = mobLevel;
|
|
||||||
|
|
||||||
if (calculatedMobLevel < 16)
|
|
||||||
calculatedMobLevel = 16;
|
|
||||||
|
|
||||||
if (calculatedMobLevel > 49)
|
|
||||||
calculatedMobLevel = 49;
|
|
||||||
|
|
||||||
int chanceMod = ThreadLocalRandom.current().nextInt(100) + 1;
|
|
||||||
|
|
||||||
if (chanceMod < 25) {
|
|
||||||
modGroup = LootTable.modGroups.get(groupRow.getValueTwo());
|
|
||||||
|
|
||||||
if (modGroup != null) {
|
|
||||||
|
|
||||||
for (int a = 0; a < 10; a++) {
|
|
||||||
randomRoll = ThreadLocalRandom.current().nextInt(100) + 1;
|
|
||||||
modRow = modGroup.getLootRow(randomRoll);
|
|
||||||
if (modRow != null)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modRow != null) {
|
|
||||||
subTableID = modRow.getValueOne();
|
|
||||||
|
|
||||||
if (LootTable.modTables.containsKey(subTableID)) {
|
|
||||||
|
|
||||||
modTable = LootTable.modTables.get(subTableID);
|
|
||||||
|
|
||||||
randomRoll = gaussianLevel((int) calculatedMobLevel);
|
|
||||||
|
|
||||||
if (randomRoll < modTable.minRoll)
|
|
||||||
randomRoll = (int) modTable.minRoll;
|
|
||||||
|
|
||||||
if (randomRoll > modTable.maxRoll)
|
|
||||||
randomRoll = (int) modTable.maxRoll;
|
|
||||||
|
|
||||||
modRow = modTable.getLootRow(randomRoll);
|
|
||||||
|
|
||||||
if (modRow != null) {
|
|
||||||
prefixValue = modRow.getValueOne();
|
|
||||||
modifierPrefix = modRow.getAction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (chanceMod < 50) {
|
|
||||||
modGroup = LootTable.modGroups.get(groupRow.getValueThree());
|
|
||||||
|
|
||||||
if (modGroup != null) {
|
|
||||||
|
|
||||||
for (int a = 0; a < 10; a++) {
|
|
||||||
randomRoll = ThreadLocalRandom.current().nextInt(100) + 1;
|
|
||||||
modRow = modGroup.getLootRow(randomRoll);
|
|
||||||
if (modRow != null)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modRow != null) {
|
|
||||||
|
|
||||||
subTableID = modRow.getValueOne();
|
|
||||||
|
|
||||||
if (LootTable.modTables.containsKey(subTableID)) {
|
|
||||||
|
|
||||||
modTable = LootTable.modTables.get(subTableID);
|
|
||||||
randomRoll = gaussianLevel((int) calculatedMobLevel);
|
|
||||||
|
|
||||||
if (randomRoll < modTable.minRoll)
|
|
||||||
randomRoll = (int) modTable.minRoll;
|
|
||||||
|
|
||||||
if (randomRoll > modTable.maxRoll)
|
|
||||||
randomRoll = (int) modTable.maxRoll;
|
|
||||||
|
|
||||||
modRow = modTable.getLootRow(randomRoll);
|
|
||||||
|
|
||||||
if (modRow == null)
|
|
||||||
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
|
||||||
|
|
||||||
|
|
||||||
if (modRow != null) {
|
|
||||||
suffixValue = modRow.getValueOne();
|
|
||||||
modifierSuffix = modRow.getAction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
modGroup = LootTable.modGroups.get(groupRow.getValueTwo());
|
|
||||||
|
|
||||||
if (modGroup != null) {
|
|
||||||
|
|
||||||
|
|
||||||
for (int a = 0; a < 10; a++) {
|
|
||||||
randomRoll = ThreadLocalRandom.current().nextInt(100) + 1;
|
|
||||||
modRow = modGroup.getLootRow(randomRoll);
|
|
||||||
if (modRow != null)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (modRow != null) {
|
|
||||||
subTableID = modRow.getValueOne();
|
|
||||||
|
|
||||||
if (LootTable.modTables.containsKey(subTableID)) {
|
|
||||||
|
|
||||||
modTable = LootTable.modTables.get(subTableID);
|
|
||||||
|
|
||||||
randomRoll = gaussianLevel((int) calculatedMobLevel);
|
|
||||||
|
|
||||||
if (randomRoll < modTable.minRoll)
|
|
||||||
randomRoll = (int) modTable.minRoll;
|
|
||||||
|
|
||||||
if (randomRoll > modTable.maxRoll)
|
|
||||||
randomRoll = (int) modTable.maxRoll;
|
|
||||||
|
|
||||||
modRow = modTable.getLootRow(randomRoll);
|
|
||||||
|
|
||||||
if (modRow == null)
|
|
||||||
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
|
||||||
|
|
||||||
if (modRow != null) {
|
|
||||||
prefixValue = modRow.getValueOne();
|
|
||||||
modifierPrefix = modRow.getAction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//get modifierSuffix
|
|
||||||
modGroup = LootTable.modGroups.get(groupRow.getValueThree());
|
|
||||||
|
|
||||||
if (modGroup != null) {
|
|
||||||
|
|
||||||
for (int a = 0; a < 10; a++) {
|
|
||||||
randomRoll = ThreadLocalRandom.current().nextInt(100) + 1;
|
|
||||||
modRow = modGroup.getLootRow(randomRoll);
|
|
||||||
if (modRow != null)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modRow != null) {
|
|
||||||
|
|
||||||
subTableID = modRow.getValueOne();
|
|
||||||
|
|
||||||
if (LootTable.modTables.containsKey(subTableID)) {
|
|
||||||
|
|
||||||
modTable = LootTable.modTables.get(subTableID);
|
|
||||||
randomRoll = gaussianLevel((int) calculatedMobLevel);
|
|
||||||
|
|
||||||
if (randomRoll < modTable.minRoll)
|
|
||||||
randomRoll = (int) modTable.minRoll;
|
|
||||||
|
|
||||||
if (randomRoll > modTable.maxRoll)
|
|
||||||
randomRoll = (int) modTable.maxRoll;
|
|
||||||
|
|
||||||
modRow = modTable.getLootRow(randomRoll);
|
|
||||||
|
|
||||||
if (modRow == null)
|
|
||||||
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
|
||||||
|
|
||||||
if (modRow != null) {
|
|
||||||
suffixValue = modRow.getValueOne();
|
|
||||||
modifierSuffix = modRow.getAction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
itemBase = ItemBase.getItemBase(itemBaseUUID);
|
|
||||||
|
|
||||||
if (itemBase == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//Handle logging of drops
|
|
||||||
LootTable.HandleDropLogs(itemBase);
|
|
||||||
|
|
||||||
if (itemBase.getType() == ItemType.OFFERING)
|
|
||||||
spawnQuanity = 1;
|
|
||||||
|
|
||||||
if (spawnQuanity > 0)
|
|
||||||
mobLoot = new MobLoot(mob, itemBase, spawnQuanity, false);
|
|
||||||
else
|
|
||||||
mobLoot = new MobLoot(mob, itemBase, false);
|
|
||||||
|
|
||||||
if (!modifierPrefix.isEmpty())
|
|
||||||
mobLoot.addPermanentEnchantment(modifierPrefix, 0, prefixValue, true);
|
|
||||||
|
|
||||||
if (!modifierSuffix.isEmpty())
|
|
||||||
mobLoot.addPermanentEnchantment(modifierSuffix, 0, suffixValue, false);
|
|
||||||
|
|
||||||
mobLoot.loadEnchantments();
|
|
||||||
|
|
||||||
loot.add(mobLoot);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void addMobLootResources(Mob mob, ArrayList<MobLoot> loot, int mobLevel, int lootTableID, int cnt, boolean hotzone) {
|
|
||||||
|
|
||||||
// Member variable declaration
|
|
||||||
float calculatedMobLevel;
|
|
||||||
int minSpawn;
|
|
||||||
int maxSpawn;
|
|
||||||
int spawnQuanity = 0;
|
|
||||||
|
|
||||||
// Lookup Table Variables
|
|
||||||
LootTable lootTable;
|
|
||||||
LootRow lootRow;
|
|
||||||
LootTable lootGroup;
|
|
||||||
LootRow groupRow = null;
|
|
||||||
|
|
||||||
// Used for actual generation of items
|
|
||||||
int itemBaseUUID;
|
|
||||||
ItemBase itemBase;
|
|
||||||
MobLoot mobLoot;
|
|
||||||
|
|
||||||
if (!LootTable.lootGroups.containsKey(lootTableID))
|
|
||||||
return;
|
|
||||||
|
|
||||||
lootGroup = LootTable.lootGroups.get(lootTableID);
|
|
||||||
|
|
||||||
calculatedMobLevel = mobLevel;
|
|
||||||
|
|
||||||
if (calculatedMobLevel > 49)
|
|
||||||
calculatedMobLevel = 49;
|
|
||||||
|
|
||||||
int roll = 0;
|
|
||||||
for (int i = 0; i < cnt; i++) {
|
|
||||||
|
|
||||||
if (lootTableID == 1901)
|
|
||||||
groupRow = lootGroup.getLootRow(66);
|
|
||||||
else if (lootTableID == 1501)
|
|
||||||
groupRow = lootGroup.getLootRow(98);
|
|
||||||
else
|
|
||||||
groupRow = lootGroup.getLootRow(80);
|
|
||||||
|
|
||||||
if (groupRow == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//get loot table for this group
|
|
||||||
|
|
||||||
if (!LootTable.lootTables.containsKey(groupRow.getValueOne()))
|
|
||||||
return;
|
|
||||||
|
|
||||||
lootTable = LootTable.lootTables.get(groupRow.getValueOne());
|
|
||||||
|
|
||||||
int minRoll = (int) ((calculatedMobLevel - 5) * 5);
|
|
||||||
int maxRoll = (int) ((calculatedMobLevel + 15) * 5);
|
|
||||||
|
|
||||||
if (minRoll < (int) lootTable.minRoll)
|
|
||||||
minRoll = (int) lootTable.minRoll;
|
|
||||||
|
|
||||||
if (maxRoll < minRoll)
|
|
||||||
maxRoll = minRoll;
|
|
||||||
|
|
||||||
if (maxRoll > 320)
|
|
||||||
maxRoll = 320;
|
|
||||||
|
|
||||||
roll = ThreadLocalRandom.current().nextInt(minRoll, maxRoll + 1); //Does not return Max, but does return min?
|
|
||||||
lootRow = lootTable.getLootRow(roll); //get the item row from the bell's curve of level +-15
|
|
||||||
|
|
||||||
if (lootRow == null)
|
|
||||||
continue; //no item found for roll
|
|
||||||
|
|
||||||
itemBaseUUID = lootRow.getValueOne();
|
|
||||||
|
|
||||||
if (lootRow.getValueOne() == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
//handle quantities > 1 for resource drops
|
|
||||||
|
|
||||||
minSpawn = lootRow.getValueTwo();
|
|
||||||
maxSpawn = lootRow.getValueThree();
|
|
||||||
|
|
||||||
// spawnQuanity between minspawn (inclusive) and maxspawn (inclusive)
|
|
||||||
|
|
||||||
if (maxSpawn > 1)
|
|
||||||
spawnQuanity = ThreadLocalRandom.current().nextInt((maxSpawn + 1 - minSpawn)) + minSpawn;
|
|
||||||
|
|
||||||
itemBase = ItemBase.getItemBase(itemBaseUUID);
|
|
||||||
|
|
||||||
if (itemBase == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
LootTable.HandleDropLogs(itemBase);
|
|
||||||
|
|
||||||
switch (itemBase.getUUID()) {
|
|
||||||
case 19290:
|
|
||||||
continue;
|
|
||||||
case 19291:
|
|
||||||
continue;
|
|
||||||
case 19292:
|
|
||||||
continue;
|
|
||||||
case 27530:
|
|
||||||
continue;
|
|
||||||
case 973000:
|
|
||||||
continue;
|
|
||||||
case 973200:
|
|
||||||
continue;
|
|
||||||
|
|
||||||
case 26360:
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle drop rates of resources/runes/contracts.
|
|
||||||
// We intentionally drop them in half
|
|
||||||
|
|
||||||
if (itemBase.getType() == ItemType.OFFERING)
|
|
||||||
spawnQuanity = 1;
|
|
||||||
|
|
||||||
if (spawnQuanity > 0)
|
|
||||||
mobLoot = new MobLoot(mob, itemBase, spawnQuanity, false);
|
|
||||||
else
|
|
||||||
mobLoot = new MobLoot(mob, itemBase, false);
|
|
||||||
|
|
||||||
loot.add(mobLoot);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int gaussianLevel(int level) {
|
public static int gaussianLevel(int level) {
|
||||||
|
|
||||||
int ret = -76;
|
int ret = -76;
|
||||||
|
|
||||||
while (ret < -75 || ret > 75) {
|
while (ret < -75 || ret > 75) {
|
||||||
@@ -723,6 +150,7 @@ public class LootTable {
|
|||||||
|
|
||||||
//This set's the drop chances for stat runes.
|
//This set's the drop chances for stat runes.
|
||||||
public static void populateStatRuneChances() {
|
public static void populateStatRuneChances() {
|
||||||
|
|
||||||
//+3, Increased
|
//+3, Increased
|
||||||
statRuneChances.put(250018, 60);
|
statRuneChances.put(250018, 60);
|
||||||
statRuneChances.put(250009, 60);
|
statRuneChances.put(250009, 60);
|
||||||
@@ -787,74 +215,6 @@ public class LootTable {
|
|||||||
statRuneChances.put(250008, 60);
|
statRuneChances.put(250008, 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleDropLogs(ItemBase itemBase) {
|
|
||||||
|
|
||||||
if (itemBase == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
LootTable.dropCount++; //item dropped, add to all item count.
|
|
||||||
|
|
||||||
|
|
||||||
if (LootTable.itemsDroppedMap.get(itemBase) == null) {
|
|
||||||
LootTable.itemsDroppedMap.put(itemBase, 1); //First time dropping, make count 1.
|
|
||||||
} else {
|
|
||||||
int dropCount = LootTable.itemsDroppedMap.get(itemBase);
|
|
||||||
dropCount++;
|
|
||||||
LootTable.itemsDroppedMap.put(itemBase, dropCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (itemBase.getType()) {
|
|
||||||
case RESOURCE:
|
|
||||||
LootTable.resourceCount++;
|
|
||||||
|
|
||||||
if (LootTable.resourceDroppedMap.get(itemBase) == null) {
|
|
||||||
LootTable.resourceDroppedMap.put(itemBase, 1); //First time dropping, make count 1.
|
|
||||||
} else {
|
|
||||||
int dropCount = LootTable.resourceDroppedMap.get(itemBase);
|
|
||||||
dropCount++;
|
|
||||||
LootTable.resourceDroppedMap.put(itemBase, dropCount);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RUNE:
|
|
||||||
LootTable.runeCount++;
|
|
||||||
if (LootTable.runeDroppedMap.get(itemBase) == null) {
|
|
||||||
LootTable.runeDroppedMap.put(itemBase, 1); //First time dropping, make count 1.
|
|
||||||
} else {
|
|
||||||
int dropCount = LootTable.runeDroppedMap.get(itemBase);
|
|
||||||
dropCount++;
|
|
||||||
LootTable.runeDroppedMap.put(itemBase, dropCount);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CONTRACT:
|
|
||||||
LootTable.contractCount++;
|
|
||||||
|
|
||||||
if (LootTable.contractDroppedMap.get(itemBase) == null) {
|
|
||||||
LootTable.contractDroppedMap.put(itemBase, 1); //First time dropping, make count 1.
|
|
||||||
} else {
|
|
||||||
int dropCount = LootTable.contractDroppedMap.get(itemBase);
|
|
||||||
dropCount++;
|
|
||||||
LootTable.contractDroppedMap.put(itemBase, dropCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case WEAPON: //Glass Drop
|
|
||||||
|
|
||||||
if (itemBase.isGlass()) {
|
|
||||||
LootTable.glassCount++;
|
|
||||||
if (LootTable.glassDroppedMap.get(itemBase) == null) {
|
|
||||||
LootTable.glassDroppedMap.put(itemBase, 1); //First time dropping, make count 1.
|
|
||||||
} else {
|
|
||||||
int dropCount = LootTable.glassDroppedMap.get(itemBase);
|
|
||||||
dropCount++;
|
|
||||||
LootTable.glassDroppedMap.put(itemBase, dropCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Item CreateGamblerItem(Item item, PlayerCharacter gambler) {
|
public static Item CreateGamblerItem(Item item, PlayerCharacter gambler) {
|
||||||
|
|
||||||
if (item == null)
|
if (item == null)
|
||||||
@@ -931,25 +291,25 @@ public class LootTable {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//couldnt find group
|
//couldnt find group
|
||||||
|
|
||||||
if (groupID == 0)
|
if (groupID == 0)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
|
||||||
LootTable lootGroup = LootTable.lootGroups.get(groupID);
|
LootTable lootGroup = LootTable.lootGroups.get(groupID);
|
||||||
|
|
||||||
if (lootGroup == null)
|
if (lootGroup == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
float calculatedMobLevel;
|
float calculatedMobLevel;
|
||||||
int minSpawn;
|
int minSpawn;
|
||||||
int maxSpawn;
|
int maxSpawn;
|
||||||
int spawnQuanity = 0;
|
int spawnQuanity = 0;
|
||||||
int prefixValue = 0;
|
|
||||||
int suffixValue = 0;
|
|
||||||
int subTableID;
|
int subTableID;
|
||||||
String modifierPrefix = "";
|
String modifierPrefix = "";
|
||||||
String modifierSuffix = "";
|
String modifierSuffix = "";
|
||||||
|
|
||||||
// Lookup Table Variables
|
// Lookup Table Variables
|
||||||
|
|
||||||
LootTable lootTable;
|
LootTable lootTable;
|
||||||
LootRow lootRow;
|
LootRow lootRow;
|
||||||
LootRow groupRow = null;
|
LootRow groupRow = null;
|
||||||
@@ -958,10 +318,9 @@ public class LootTable {
|
|||||||
LootRow modRow = null;
|
LootRow modRow = null;
|
||||||
|
|
||||||
// Used for actual generation of items
|
// Used for actual generation of items
|
||||||
|
|
||||||
int itemBaseUUID;
|
int itemBaseUUID;
|
||||||
ItemBase itemBase = null;
|
ItemBase itemBase = null;
|
||||||
MobLoot mobLoot;
|
|
||||||
|
|
||||||
|
|
||||||
int roll = ThreadLocalRandom.current().nextInt(100) + 1; //Does not return Max, but does return min?
|
int roll = ThreadLocalRandom.current().nextInt(100) + 1; //Does not return Max, but does return min?
|
||||||
|
|
||||||
@@ -976,24 +335,23 @@ public class LootTable {
|
|||||||
|
|
||||||
itemBaseUUID = lootRow.getValueOne();
|
itemBaseUUID = lootRow.getValueOne();
|
||||||
|
|
||||||
|
|
||||||
if (lootRow.getValueOne() == 0)
|
if (lootRow.getValueOne() == 0)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
//handle quantities > 1 for resource drops
|
//handle quantities > 1 for resource drops
|
||||||
|
|
||||||
minSpawn = lootRow.getValueTwo();
|
minSpawn = lootRow.getValueTwo();
|
||||||
maxSpawn = lootRow.getValueThree();
|
maxSpawn = lootRow.getValueThree();
|
||||||
|
|
||||||
// spawnQuanity between minspawn (inclusive) and maxspawn (inclusive)
|
// spawnQuanity between minspawn (inclusive) and maxspawn (inclusive)
|
||||||
|
|
||||||
if (maxSpawn > 1)
|
if (maxSpawn > 1)
|
||||||
spawnQuanity = ThreadLocalRandom.current().nextInt((maxSpawn + 1 - minSpawn)) + minSpawn;
|
spawnQuanity = ThreadLocalRandom.current().nextInt((maxSpawn + 1 - minSpawn)) + minSpawn;
|
||||||
|
|
||||||
|
|
||||||
//get modifierPrefix
|
//get modifierPrefix
|
||||||
|
|
||||||
calculatedMobLevel = 49;
|
calculatedMobLevel = 49;
|
||||||
|
|
||||||
|
|
||||||
int chanceMod = ThreadLocalRandom.current().nextInt(100) + 1;
|
int chanceMod = ThreadLocalRandom.current().nextInt(100) + 1;
|
||||||
|
|
||||||
if (chanceMod < 25) {
|
if (chanceMod < 25) {
|
||||||
@@ -1001,7 +359,6 @@ public class LootTable {
|
|||||||
|
|
||||||
if (modGroup != null) {
|
if (modGroup != null) {
|
||||||
|
|
||||||
|
|
||||||
for (int a = 0; a < 10; a++) {
|
for (int a = 0; a < 10; a++) {
|
||||||
roll = ThreadLocalRandom.current().nextInt(100) + 1;
|
roll = ThreadLocalRandom.current().nextInt(100) + 1;
|
||||||
modRow = modGroup.getLootRow(roll);
|
modRow = modGroup.getLootRow(roll);
|
||||||
@@ -1009,7 +366,6 @@ public class LootTable {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (modRow != null) {
|
if (modRow != null) {
|
||||||
subTableID = modRow.getValueOne();
|
subTableID = modRow.getValueOne();
|
||||||
|
|
||||||
@@ -1025,13 +381,10 @@ public class LootTable {
|
|||||||
if (roll > modTable.maxRoll)
|
if (roll > modTable.maxRoll)
|
||||||
roll = (int) modTable.maxRoll;
|
roll = (int) modTable.maxRoll;
|
||||||
|
|
||||||
|
|
||||||
modRow = modTable.getLootRow(roll);
|
modRow = modTable.getLootRow(roll);
|
||||||
|
|
||||||
if (modRow != null) {
|
if (modRow != null)
|
||||||
prefixValue = modRow.getValueOne();
|
|
||||||
modifierPrefix = modRow.getAction();
|
modifierPrefix = modRow.getAction();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1064,14 +417,11 @@ public class LootTable {
|
|||||||
|
|
||||||
modRow = modTable.getLootRow(roll);
|
modRow = modTable.getLootRow(roll);
|
||||||
|
|
||||||
if (modRow == null) {
|
if (modRow == null)
|
||||||
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
||||||
}
|
|
||||||
|
|
||||||
if (modRow != null) {
|
if (modRow != null)
|
||||||
suffixValue = modRow.getValueOne();
|
|
||||||
modifierSuffix = modRow.getAction();
|
modifierSuffix = modRow.getAction();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1080,7 +430,6 @@ public class LootTable {
|
|||||||
|
|
||||||
if (modGroup != null) {
|
if (modGroup != null) {
|
||||||
|
|
||||||
|
|
||||||
for (int a = 0; a < 10; a++) {
|
for (int a = 0; a < 10; a++) {
|
||||||
roll = ThreadLocalRandom.current().nextInt(100) + 1;
|
roll = ThreadLocalRandom.current().nextInt(100) + 1;
|
||||||
modRow = modGroup.getLootRow(roll);
|
modRow = modGroup.getLootRow(roll);
|
||||||
@@ -1088,14 +437,13 @@ public class LootTable {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (modRow != null) {
|
if (modRow != null) {
|
||||||
|
|
||||||
subTableID = modRow.getValueOne();
|
subTableID = modRow.getValueOne();
|
||||||
|
|
||||||
if (LootTable.modTables.containsKey(subTableID)) {
|
if (LootTable.modTables.containsKey(subTableID)) {
|
||||||
|
|
||||||
modTable = LootTable.modTables.get(subTableID);
|
modTable = LootTable.modTables.get(subTableID);
|
||||||
|
|
||||||
roll = gaussianLevel((int) calculatedMobLevel);
|
roll = gaussianLevel((int) calculatedMobLevel);
|
||||||
|
|
||||||
if (roll < modTable.minRoll)
|
if (roll < modTable.minRoll)
|
||||||
@@ -1104,17 +452,13 @@ public class LootTable {
|
|||||||
if (roll > modTable.maxRoll)
|
if (roll > modTable.maxRoll)
|
||||||
roll = (int) modTable.maxRoll;
|
roll = (int) modTable.maxRoll;
|
||||||
|
|
||||||
|
|
||||||
modRow = modTable.getLootRow(roll);
|
modRow = modTable.getLootRow(roll);
|
||||||
|
|
||||||
if (modRow == null) {
|
if (modRow == null)
|
||||||
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
||||||
}
|
|
||||||
|
|
||||||
if (modRow != null) {
|
if (modRow != null)
|
||||||
prefixValue = modRow.getValueOne();
|
|
||||||
modifierPrefix = modRow.getAction();
|
modifierPrefix = modRow.getAction();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1148,30 +492,24 @@ public class LootTable {
|
|||||||
|
|
||||||
modRow = modTable.getLootRow(roll);
|
modRow = modTable.getLootRow(roll);
|
||||||
|
|
||||||
if (modRow == null) {
|
if (modRow == null)
|
||||||
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f));
|
||||||
}
|
|
||||||
|
|
||||||
if (modRow != null) {
|
if (modRow != null)
|
||||||
suffixValue = modRow.getValueOne();
|
|
||||||
modifierSuffix = modRow.getAction();
|
modifierSuffix = modRow.getAction();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
itemBase = ItemBase.getItemBase(itemBaseUUID);
|
itemBase = ItemBase.getItemBase(itemBaseUUID);
|
||||||
byte charges = (byte) itemBase.getNumCharges();
|
byte charges = (byte) itemBase.getNumCharges();
|
||||||
short dur = (short) itemBase.getDurability();
|
short dur = (short) itemBase.getDurability();
|
||||||
|
|
||||||
|
|
||||||
short weight = itemBase.getWeight();
|
short weight = itemBase.getWeight();
|
||||||
if (!gambler.getCharItemManager().hasRoomInventory(weight)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!gambler.getCharItemManager().hasRoomInventory(weight))
|
||||||
|
return null;
|
||||||
|
|
||||||
Item gambledItem = new Item(itemBase, gambler.getObjectUUID(),
|
Item gambledItem = new Item(itemBase, gambler.getObjectUUID(),
|
||||||
OwnerType.PlayerCharacter, charges, charges, dur, dur,
|
OwnerType.PlayerCharacter, charges, charges, dur, dur,
|
||||||
@@ -1186,25 +524,22 @@ public class LootTable {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
gambledItem = DbManager.ItemQueries.ADD_ITEM(gambledItem);
|
gambledItem = DbManager.ItemQueries.ADD_ITEM(gambledItem);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logger.error(e);
|
Logger.error(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gambledItem == null) {
|
if (gambledItem == null)
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
if (!modifierPrefix.isEmpty())
|
if (!modifierPrefix.isEmpty())
|
||||||
gambledItem.addPermanentEnchantment(modifierPrefix, 0);
|
gambledItem.addPermanentEnchantment(modifierPrefix, 0);
|
||||||
|
|
||||||
if (!modifierSuffix.isEmpty())
|
if (!modifierSuffix.isEmpty())
|
||||||
gambledItem.addPermanentEnchantment(modifierSuffix, 0);
|
gambledItem.addPermanentEnchantment(modifierSuffix, 0);
|
||||||
|
|
||||||
|
|
||||||
//add item to inventory
|
//add item to inventory
|
||||||
gambler.getCharItemManager().addItemToInventory(gambledItem);
|
|
||||||
|
|
||||||
|
gambler.getCharItemManager().addItemToInventory(gambledItem);
|
||||||
gambler.getCharItemManager().updateInventory();
|
gambler.getCharItemManager().updateInventory();
|
||||||
|
|
||||||
return gambledItem;
|
return gambledItem;
|
||||||
@@ -1213,6 +548,7 @@ public class LootTable {
|
|||||||
public void addRow(float min, float max, int valueOne, int valueTwo, int valueThree, String action) {
|
public void addRow(float min, float max, int valueOne, int valueTwo, int valueThree, String action) {
|
||||||
|
|
||||||
//hackey way to set the minimum roll for SHIAT!
|
//hackey way to set the minimum roll for SHIAT!
|
||||||
|
|
||||||
if (min < this.minRoll)
|
if (min < this.minRoll)
|
||||||
this.minRoll = min;
|
this.minRoll = min;
|
||||||
|
|
||||||
@@ -1223,29 +559,27 @@ public class LootTable {
|
|||||||
int maxInt = (int) max;
|
int maxInt = (int) max;
|
||||||
|
|
||||||
//Round up min
|
//Round up min
|
||||||
if (minInt != min) {
|
|
||||||
|
if (minInt != min)
|
||||||
min = minInt + 1;
|
min = minInt + 1;
|
||||||
}
|
|
||||||
|
|
||||||
//Round down max;
|
//Round down max;
|
||||||
|
|
||||||
if (maxInt != max)
|
if (maxInt != max)
|
||||||
max = maxInt;
|
max = maxInt;
|
||||||
|
|
||||||
|
|
||||||
LootRow lootRow = new LootRow(valueOne, valueTwo, valueThree, action);
|
LootRow lootRow = new LootRow(valueOne, valueTwo, valueThree, action);
|
||||||
for (int i = (int) min; i <= max; i++) {
|
|
||||||
|
for (int i = (int) min; i <= max; i++)
|
||||||
lootTable.put(i, lootRow);
|
lootTable.put(i, lootRow);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LootRow getLootRow(int probability) {
|
public LootRow getLootRow(int probability) {
|
||||||
|
|
||||||
if (lootTable.containsKey(probability))
|
if (lootTable.containsKey(probability))
|
||||||
return lootTable.get(probability);
|
return lootTable.get(probability);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConcurrentHashMap<Integer, LootRow> getLootTable() {
|
|
||||||
return lootTable;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user