Browse Source

Unused methods deleted.

master
MagicBot 1 year ago
parent
commit
765b837df0
  1. 4
      src/engine/gameManager/LootManager.java
  2. 740
      src/engine/objects/LootTable.java

4
src/engine/gameManager/LootManager.java

@ -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());

740
src/engine/objects/LootTable.java

@ -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,16 +381,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)
prefixValue = modRow.getValueOne();
modifierPrefix = modRow.getAction(); modifierPrefix = modRow.getAction();
} }
} }
} }
}
} else if (chanceMod < 50) { } else if (chanceMod < 50) {
modGroup = LootTable.modGroups.get(groupRow.getValueThree()); modGroup = LootTable.modGroups.get(groupRow.getValueThree());
@ -1064,23 +417,19 @@ 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();
} }
} }
} }
}
} else { } else {
modGroup = LootTable.modGroups.get(groupRow.getValueTwo()); modGroup = LootTable.modGroups.get(groupRow.getValueTwo());
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,20 +452,16 @@ 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();
} }
} }
} }
}
//get modifierSuffix //get modifierSuffix
modGroup = LootTable.modGroups.get(groupRow.getValueThree()); modGroup = LootTable.modGroups.get(groupRow.getValueThree());
@ -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;
}
public ConcurrentHashMap<Integer, LootRow> getLootTable() { return null;
return lootTable;
} }
} }

Loading…
Cancel
Save