|  |  | @ -127,46 +127,58 @@ public enum LootManager { | 
			
		
	
		
		
			
				
					
					|  |  |  |         float dropRate; |  |  |  |         float dropRate; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (!mob.getSafeZone()) { |  |  |  |         if (!mob.getSafeZone()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             boolean allow = false; |  |  |  |             int contractLow = 1, contractHigh = 400; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             if(mob.level >= 50){ |  |  |  |             int runeLow = 401, runeHigh = 800; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 allow = true; |  |  |  |             int resourceLow = 801, resourceHigh = 900; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             }else{ |  |  |  |             int glassLow = 901, glassHigh = 910; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 if((50 - mob.level) > ThreadLocalRandom.current().nextInt(0,101)){ |  |  |  |             int guardLow = 911, guardHigh = 920; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     allow = true; |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |             // Pre-compute adjusted high values
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             int contractAdjust = 0, runeAdjust = 0, resourceAdjust = 0, glassAdjust = 0, guardAdjust = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if (mob.level < 50) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 int dif = 50 - mob.level; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 contractAdjust = (int)(400 * (dif * 0.02f)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 runeAdjust = (int)(400 * (dif * 0.02f)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 resourceAdjust = (int)(100 * (dif * 0.02f)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 glassAdjust = (int)(10 * (dif * 0.02f)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 guardAdjust = (int)(10 * (dif * 0.02f)); | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(allow) { |  |  |  |             // Generate a single random roll
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 // Roll within the adjusted range
 |  |  |  |             int specialCaseRoll = ThreadLocalRandom.current().nextInt(1, 100001); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 int specialCaseRoll = ThreadLocalRandom.current().nextInt(1, 100000 + 1); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |             // Calculate adjusted high values once
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 // Special Case Contract Drop
 |  |  |  |             int contractHighAdjusted = contractHigh - contractAdjust; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 if (specialCaseRoll <= 400) { // 0.4% of the range
 |  |  |  |             int runeHighAdjusted = runeHigh - runeAdjust; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     SpecialCaseResourceDrop(mob, entries); |  |  |  |             int resourceHighAdjusted = resourceHigh - resourceAdjust; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } else if (specialCaseRoll <= 800) { // Next 0.4% of the range
 |  |  |  |             int glassHighAdjusted = glassHigh - glassAdjust; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     SpecialCaseContractDrop(mob, entries); |  |  |  |             int guardHighAdjusted = guardHigh - guardAdjust; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } else if (specialCaseRoll <= 1200) { // Next 0.4% of the range
 |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     SpecialCaseRuneDrop(mob, entries); |  |  |  |             // Check the roll range and handle accordingly
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } else if (specialCaseRoll <= 1210) { // Next 0.01% of the range
 |  |  |  |             if (specialCaseRoll >= contractLow && specialCaseRoll <= contractHighAdjusted) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     int glassID = rollRandomItem(126); |  |  |  |                 SpecialCaseContractDrop(mob, entries); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     ItemBase glassItem = ItemBase.getItemBase(glassID); |  |  |  |             } else if (specialCaseRoll >= runeLow && specialCaseRoll <= runeHighAdjusted) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     if (glassItem != null) { |  |  |  |                 SpecialCaseRuneDrop(mob, entries); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         MobLoot toAddGlass = new MobLoot(mob, glassItem, false); |  |  |  |             } else if (specialCaseRoll >= resourceLow && specialCaseRoll <= resourceHighAdjusted) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         if (toAddGlass != null) |  |  |  |                 SpecialCaseResourceDrop(mob, entries); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             mob.getCharItemManager().addItemToInventory(toAddGlass); |  |  |  |             } else if (specialCaseRoll >= glassLow && specialCaseRoll <= glassHighAdjusted) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                 int glassID = rollRandomItem(126); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } else if (specialCaseRoll <= 1220) { // Next 0.01% of the range
 |  |  |  |                 ItemBase glassItem = ItemBase.getItemBase(glassID); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     int guardContractID = racial_guard_uuids.get(new java.util.Random().nextInt(racial_guard_uuids.size())); |  |  |  |                 if (glassItem != null) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     ItemBase guardContract = ItemBase.getItemBase(guardContractID); |  |  |  |                     MobLoot toAddGlass = new MobLoot(mob, glassItem, false); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     if (guardContract != null) { |  |  |  |                     mob.getCharItemManager().addItemToInventory(toAddGlass); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         MobLoot toAddContract = new MobLoot(mob, guardContract, false); |  |  |  |                 } | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         if (toAddContract != null) |  |  |  |             } else if (specialCaseRoll >= guardLow && specialCaseRoll <= guardHighAdjusted) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             mob.getCharItemManager().addItemToInventory(toAddContract); |  |  |  |                 int guardContractID = racial_guard_uuids.get(new java.util.Random().nextInt(racial_guard_uuids.size())); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                 ItemBase guardContract = ItemBase.getItemBase(guardContractID); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if (guardContract != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     MobLoot toAddContract = new MobLoot(mob, guardContract, false); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     mob.getCharItemManager().addItemToInventory(toAddContract); | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Iterate all entries in this bootySet and process accordingly
 |  |  |  |         // Iterate all entries in this bootySet and process accordingly
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         for (BootySetEntry bse : entries) { |  |  |  |         for (BootySetEntry bse : entries) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             switch (bse.bootyType) { |  |  |  |             switch (bse.bootyType) { | 
			
		
	
	
		
		
			
				
					|  |  | 
 |