|  |  | @ -9,17 +9,10 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | package engine.objects; |  |  |  | package engine.objects; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.Enum.ItemContainerType; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.Enum.ItemType; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.Enum.OwnerType; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.gameManager.DbManager; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.server.MBServerStatics; |  |  |  | import engine.server.MBServerStatics; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.pmw.tinylog.Logger; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.ArrayList; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.HashMap; |  |  |  | import java.util.HashMap; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.concurrent.ConcurrentHashMap; |  |  |  | import java.util.concurrent.ConcurrentHashMap; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.concurrent.ThreadLocalRandom; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | public class LootTable { |  |  |  | public class LootTable { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -124,377 +117,6 @@ public class LootTable { | 
			
		
	
		
		
			
				
					
					|  |  |  |         return modTypeTable; |  |  |  |         return modTypeTable; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static int gaussianLevel(int level) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int ret = -76; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         while (ret < -75 || ret > 75) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ret = (int) (ThreadLocalRandom.current().nextGaussian() * 75); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         return (level * 5) + ret; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static Item CreateGamblerItem(Item item, PlayerCharacter gambler) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (item == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int groupID = 0; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         switch (item.getItemBase().getUUID()) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971050: //Wrapped Axe
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3000; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971051://Wrapped Great Axe
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3005; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971052://Wrapped Throwing Axe
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3010; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971053://	Wrapped Bow
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3015; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971054://Wrapped Crossbow
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3020; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971055:    //Wrapped Dagger
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3025; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971056:    //	Wrapped Throwing Dagger
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3030; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971057:    //	Wrapped Hammer
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3035; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971058://			Wrapped Great Hammer
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3040; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971059://			Wrapped Throwing Hammer
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3045; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971060://			Wrapped Polearm
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3050; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971061://			Wrapped Spear
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3055; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971062://			Wrapped Staff
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3060; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971063://			Wrapped Sword
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3065; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971064://			Wrapped Great Sword
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3070; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971065://			Wrapped Unarmed Weapon
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3075; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971066://			Wrapped Cloth Armor
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3100; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971067://			Wrapped Light Armor
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3105; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971068://			Wrapped Medium Armor
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3110; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971069://			Wrapped Heavy Armor
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3115; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971070://			Wrapped Rune
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3200; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             case 971071://			Wrapped City Improvement
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 groupID = 3210; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //couldnt find group
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (groupID == 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         LootTable lootGroup = LootTable.genTables.get(groupID); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (lootGroup == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float calculatedMobLevel; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int minSpawn; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int maxSpawn; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int spawnQuanity = 0; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int subTableID; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         String modifierPrefix = ""; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         String modifierSuffix = ""; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Lookup Table Variables
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         LootTable lootTable; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         LootRow lootRow; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         LootRow groupRow = null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         LootTable modTable; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         LootTable modGroup; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         LootRow modRow = null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Used for actual generation of items
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int itemBaseUUID; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         ItemBase itemBase = null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int roll = ThreadLocalRandom.current().nextInt(100) + 1; //Does not return Max, but does return min?
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         groupRow = lootGroup.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         lootTable = LootTable.itemTables.get(groupRow.getValueOne()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         roll = ThreadLocalRandom.current().nextInt(100) + 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         lootRow = lootTable.getLootRow(roll + 220); //get the item row from the bell's curve of level +-15
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (lootRow == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return null; //no item found for roll
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         itemBaseUUID = lootRow.getValueOne(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (lootRow.getValueOne() == 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //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; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //get modifierPrefix
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         calculatedMobLevel = 49; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int chanceMod = ThreadLocalRandom.current().nextInt(100) + 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (chanceMod < 25) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             modGroup = LootTable.modTypeTables.get(groupRow.getValueTwo()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (modGroup != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 for (int a = 0; a < 10; a++) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     roll = ThreadLocalRandom.current().nextInt(100) + 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     modRow = modGroup.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (modRow != null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (modRow != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     subTableID = modRow.getValueOne(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (LootTable.modTables.containsKey(subTableID)) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         modTable = LootTable.modTables.get(subTableID); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         roll = gaussianLevel((int) calculatedMobLevel); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (roll < modTable.minRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             roll = (int) modTable.minRoll; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (roll > modTable.maxRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             roll = (int) modTable.maxRoll; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         modRow = modTable.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (modRow != null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             modifierPrefix = modRow.getAction(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } else if (chanceMod < 50) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             modGroup = LootTable.modTypeTables.get(groupRow.getValueThree()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (modGroup != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 for (int a = 0; a < 10; a++) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     roll = ThreadLocalRandom.current().nextInt(100) + 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     modRow = modGroup.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (modRow != null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (modRow != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     subTableID = modRow.getValueOne(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (LootTable.modTables.containsKey(subTableID)) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         modTable = LootTable.modTables.get(subTableID); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         roll = gaussianLevel((int) calculatedMobLevel); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (roll < modTable.minRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             roll = (int) modTable.minRoll; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (roll > modTable.maxRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             roll = (int) modTable.maxRoll; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         modRow = modTable.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (modRow == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (modRow != null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             modifierSuffix = modRow.getAction(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } else { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             modGroup = LootTable.modTypeTables.get(groupRow.getValueTwo()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (modGroup != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 for (int a = 0; a < 10; a++) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     roll = ThreadLocalRandom.current().nextInt(100) + 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     modRow = modGroup.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (modRow != null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (modRow != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     subTableID = modRow.getValueOne(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (LootTable.modTables.containsKey(subTableID)) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         modTable = LootTable.modTables.get(subTableID); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         roll = gaussianLevel((int) calculatedMobLevel); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (roll < modTable.minRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             roll = (int) modTable.minRoll; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (roll > modTable.maxRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             roll = (int) modTable.maxRoll; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         modRow = modTable.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (modRow == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (modRow != null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             modifierPrefix = modRow.getAction(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             //get modifierSuffix
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             modGroup = LootTable.modTypeTables.get(groupRow.getValueThree()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (modGroup != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 for (int a = 0; a < 10; a++) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     roll = ThreadLocalRandom.current().nextInt(100) + 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     modRow = modGroup.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (modRow != null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (modRow != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     subTableID = modRow.getValueOne(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (LootTable.modTables.containsKey(subTableID)) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         modTable = LootTable.modTables.get(subTableID); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         roll = gaussianLevel((int) calculatedMobLevel); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (roll < modTable.minRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             roll = (int) modTable.minRoll; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (roll > modTable.maxRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             roll = (int) modTable.maxRoll; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         modRow = modTable.getLootRow(roll); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (modRow == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             modRow = modTable.getLootRow((int) ((modTable.minRoll + modTable.maxRoll) * .05f)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (modRow != null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                             modifierSuffix = modRow.getAction(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         itemBase = ItemBase.getItemBase(itemBaseUUID); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         byte charges = (byte) itemBase.getNumCharges(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         short dur = (short) itemBase.getDurability(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         short weight = itemBase.getWeight(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (!gambler.getCharItemManager().hasRoomInventory(weight)) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         Item gambledItem = new Item(itemBase, gambler.getObjectUUID(), |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 OwnerType.PlayerCharacter, charges, charges, dur, dur, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 true, false, ItemContainerType.INVENTORY, (byte) 0, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 new ArrayList<>(), ""); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (spawnQuanity == 0 && itemBase.getType().equals(ItemType.RESOURCE)) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             spawnQuanity = 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (spawnQuanity > 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             item.setNumOfItems(spawnQuanity); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         try { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             gambledItem = DbManager.ItemQueries.ADD_ITEM(gambledItem); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } catch (Exception e) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             Logger.error(e); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (gambledItem == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (!modifierPrefix.isEmpty()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             gambledItem.addPermanentEnchantment(modifierPrefix, 0); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (!modifierSuffix.isEmpty()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             gambledItem.addPermanentEnchantment(modifierSuffix, 0); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //add item to inventory
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         gambler.getCharItemManager().addItemToInventory(gambledItem); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         gambler.getCharItemManager().updateInventory(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         return gambledItem; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     public void addRow(float min, float max, int valueOne, int valueTwo, int valueThree, String action) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //hackey way to set the minimum roll for SHIAT!
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (min < this.minRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             this.minRoll = min; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (max > this.maxRoll) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             this.maxRoll = max; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int minInt = (int) min; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int maxInt = (int) max; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //Round up min
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (minInt != min) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             min = minInt + 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //Round down max;
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (maxInt != max) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             max = maxInt; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         LootRow lootRow = new LootRow(valueOne, valueTwo, valueThree, action); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         for (int i = (int) min; i <= max; i++) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             lootTable.put(i, lootRow); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     public LootRow getLootRow(int probability) { |  |  |  |     public LootRow getLootRow(int probability) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (lootTable.containsKey(probability)) |  |  |  |         if (lootTable.containsKey(probability)) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |