@ -17,7 +17,9 @@ import engine.objects.*; 
			
		
	
		
		
			
				
					
					import  org.pmw.tinylog.Logger ; import  org.pmw.tinylog.Logger ;  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					import  java.util.ArrayList ; import  java.util.ArrayList ;  
			
		
	
		
		
			
				
					
					import  java.util.Arrays ;  
			
		
	
		
		
			
				
					
					import  java.util.HashMap ; import  java.util.HashMap ;  
			
		
	
		
		
			
				
					
					import  java.util.List ;  
			
		
	
		
		
			
				
					
					import  java.util.concurrent.ThreadLocalRandom ; import  java.util.concurrent.ThreadLocalRandom ;  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					/ * * / * *  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -34,6 +36,12 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					    public  static  HashMap < Integer ,  ArrayList < ModTableEntry > >  _modTables  =  new  HashMap < > ( ) ;      public  static  HashMap < Integer ,  ArrayList < ModTableEntry > >  _modTables  =  new  HashMap < > ( ) ;   
			
		
	
		
		
			
				
					
					    public  static  HashMap < Integer ,  ArrayList < ModTypeTableEntry > >  _modTypeTables  =  new  HashMap < > ( ) ;      public  static  HashMap < Integer ,  ArrayList < ModTypeTableEntry > >  _modTypeTables  =  new  HashMap < > ( ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  final  ArrayList < Integer >  vorg_ha_uuids  =  new  ArrayList < > ( Arrays . asList ( 27580 ,  27590 ,  188500 ,  188510 ,  188520 ,  188530 ,  188540 ,  188550 ,  189510 ) ) ;   
			
		
	
		
		
			
				
					
					    public  static  final  ArrayList < Integer >  vorg_ma_uuids  =  new  ArrayList < > ( Arrays . asList ( 27570 , 188900 , 188910 , 188920 , 188930 , 188940 , 188950 , 189500 ) ) ;   
			
		
	
		
		
			
				
					
					    public  static  final  ArrayList < Integer >  vorg_la_uuids  =  new  ArrayList < > ( Arrays . asList ( 27550 , 27560 , 189100 , 189110 , 189120 , 189130 , 189140 , 189150 ) ) ;   
			
		
	
		
		
			
				
					
					    public  static  final  ArrayList < Integer >  vorg_cloth_uuids  =  new  ArrayList < > ( Arrays . asList ( 27600 , 188700 , 188720 , 189550 , 189560 ) ) ;   
			
		
	
		
		
			
				
					
					    public  static  final  ArrayList < Integer >  racial_guard_uuids  =  new  ArrayList < > ( Arrays . asList ( 841 , 951 , 952 , 1050 , 1052 , 1180 , 1182 , 1250 , 1252 , 1350 , 1352 , 1450 , 1452 , 1500 , 1502 , 1525 , 1527 , 1550 , 1552 , 1575 , 1577 , 1600 , 1602 , 1650 , 1652 , 1700 , 980100 , 980102 ) ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    // Drop Rates
      // Drop Rates
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  float  NORMAL_DROP_RATE ;      public  static  float  NORMAL_DROP_RATE ;   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -68,16 +76,39 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  GenerateMobLoot ( Mob  mob )  {      public  static  void  GenerateMobLoot ( Mob  mob )  {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( mob  = =  null ) {   
			
		
	
		
		
			
				
					
					            return ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //determine if mob is in hotzone
          //determine if mob is in hotzone
   
			
		
	
		
		
			
				
					
					        boolean  inHotzone  =  ZoneManager . inHotZone ( mob . getLoc ( ) ) ;          boolean  inHotzone  =  false ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //iterate the booty sets
          //iterate the booty sets
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( mob . getMobBase ( ) . bootySet  ! =  0  & &  _bootySetMap . containsKey ( mob . getMobBase ( ) . bootySet )  = =  true )          if ( mob . mobBase  = =  null  | |  mob . getMobBaseID ( )  = =  253003 ) {   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					            int  i  =  0 ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( mob . getMobBase ( ) . bootySet  ! =  0  & &  _bootySetMap . containsKey ( mob . getMobBase ( ) . bootySet ) )   
			
		
	
		
		
			
				
					
					            RunBootySet ( _bootySetMap . get ( mob . getMobBase ( ) . bootySet ) ,  mob ,  inHotzone ) ;              RunBootySet ( _bootySetMap . get ( mob . getMobBase ( ) . bootySet ) ,  mob ,  inHotzone ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( mob . bootySet  ! =  0  & &  _bootySetMap . containsKey ( mob . bootySet )  = =  true )          if  ( mob . bootySet  ! =  0  & &  _bootySetMap . containsKey ( mob . bootySet ) )  {   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					            RunBootySet ( _bootySetMap . get ( mob . bootySet ) ,  mob ,  inHotzone ) ;              RunBootySet ( _bootySetMap . get ( mob . bootySet ) ,  mob ,  inHotzone ) ;   
			
		
	
		
		
			
				
					
					        } else  if ( mob . bootySet  ! =  0  & &  ItemBase . getItemBase ( mob . bootySet )  ! =  null ) {   
			
		
	
		
		
			
				
					
					            MobLoot  specialDrop  =  null ;   
			
		
	
		
		
			
				
					
					            specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( mob . bootySet ) , true ) ;   
			
		
	
		
		
			
				
					
					            if ( specialDrop  ! =  null )  {   
			
		
	
		
		
			
				
					
					                ChatSystemMsg  chatMsg  =  new  ChatSystemMsg ( null ,  mob . getName ( )  +  " in "  +  mob . getParentZone ( ) . getName ( )  +  " has found the "  +  specialDrop . getName ( )  +  ". Are you tough enough to take it?" ) ;   
			
		
	
		
		
			
				
					
					                chatMsg . setMessageType ( 10 ) ;   
			
		
	
		
		
			
				
					
					                chatMsg . setChannel ( Enum . ChatChannelType . SYSTEM . getChannelID ( ) ) ;   
			
		
	
		
		
			
				
					
					                DispatchMessage . dispatchMsgToAll ( chatMsg ) ;   
			
		
	
		
		
			
				
					
					                mob . getCharItemManager ( ) . addItemToInventory ( specialDrop ) ;   
			
		
	
		
		
			
				
					
					                mob . setResists ( new  Resists ( "Dropper" ) ) ;   
			
		
	
		
		
			
				
					
					                if ( ! Mob . discDroppers . contains ( mob ) )   
			
		
	
		
		
			
				
					
					                    Mob . AddDiscDropper ( mob ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //lastly, check mobs inventory for godly or disc runes to send a server announcement
          //lastly, check mobs inventory for godly or disc runes to send a server announcement
   
			
		
	
		
		
			
				
					
					        for  ( Item  it  :  mob . getInventory ( ) )  {          for  ( Item  it  :  mob . getInventory ( ) )  {   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -98,18 +129,74 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					    private  static  void  RunBootySet ( ArrayList < BootySetEntry >  entries ,  Mob  mob ,  boolean  inHotzone )  {      private  static  void  RunBootySet ( ArrayList < BootySetEntry >  entries ,  Mob  mob ,  boolean  inHotzone )  {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        boolean  hotzoneWasRan  =  false ;          boolean  hotzoneWasRan  =  false ;   
			
		
	
		
		
			
				
					
					        float  dropRate  =  1 . 0f ;          float  dropRate ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( ! mob . getSafeZone ( ) )  {   
			
		
	
		
		
			
				
					
					            int  contractLow  =  1 ,  contractHigh  =  400 ;   
			
		
	
		
		
			
				
					
					            int  runeLow  =  401 ,  runeHigh  =  800 ;   
			
		
	
		
		
			
				
					
					            int  resourceLow  =  801 ,  resourceHigh  =  900 ;   
			
		
	
		
		
			
				
					
					            int  glassLow  =  901 ,  glassHigh  =  910 ;   
			
		
	
		
		
			
				
					
					            int  guardLow  =  911 ,  guardHigh  =  920 ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            // 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 ) ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            // Generate a single random roll
   
			
		
	
		
		
			
				
					
					            int  specialCaseRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100001 ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            // Calculate adjusted high values once
   
			
		
	
		
		
			
				
					
					            int  contractHighAdjusted  =  contractHigh  -  contractAdjust ;   
			
		
	
		
		
			
				
					
					            int  runeHighAdjusted  =  runeHigh  -  runeAdjust ;   
			
		
	
		
		
			
				
					
					            int  resourceHighAdjusted  =  resourceHigh  -  resourceAdjust ;   
			
		
	
		
		
			
				
					
					            int  glassHighAdjusted  =  glassHigh  -  glassAdjust ;   
			
		
	
		
		
			
				
					
					            int  guardHighAdjusted  =  guardHigh  -  guardAdjust ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            // Check the roll range and handle accordingly
   
			
		
	
		
		
			
				
					
					            if  ( specialCaseRoll  > =  contractLow  & &  specialCaseRoll  < =  contractHighAdjusted )  {   
			
		
	
		
		
			
				
					
					                SpecialCaseContractDrop ( mob ,  entries ) ;   
			
		
	
		
		
			
				
					
					            }  else  if  ( specialCaseRoll  > =  runeLow  & &  specialCaseRoll  < =  runeHighAdjusted )  {   
			
		
	
		
		
			
				
					
					                SpecialCaseRuneDrop ( mob ,  entries ) ;   
			
		
	
		
		
			
				
					
					            }  else  if  ( specialCaseRoll  > =  resourceLow  & &  specialCaseRoll  < =  resourceHighAdjusted )  {   
			
		
	
		
		
			
				
					
					                SpecialCaseResourceDrop ( mob ,  entries ) ;   
			
		
	
		
		
			
				
					
					            }  else  if  ( specialCaseRoll  > =  glassLow  & &  specialCaseRoll  < =  glassHighAdjusted )  {   
			
		
	
		
		
			
				
					
					                int  glassID  =  rollRandomItem ( 126 ) ;   
			
		
	
		
		
			
				
					
					                ItemBase  glassItem  =  ItemBase . getItemBase ( glassID ) ;   
			
		
	
		
		
			
				
					
					                if  ( glassItem  ! =  null )  {   
			
		
	
		
		
			
				
					
					                    MobLoot  toAddGlass  =  new  MobLoot ( mob ,  glassItem ,  false ) ;   
			
		
	
		
		
			
				
					
					                    mob . getCharItemManager ( ) . addItemToInventory ( toAddGlass ) ;   
			
		
	
		
		
			
				
					
					                }   
			
		
	
		
		
			
				
					
					            }  else  if  ( specialCaseRoll  > =  guardLow  & &  specialCaseRoll  < =  guardHighAdjusted )  {   
			
		
	
		
		
			
				
					
					                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
   
			
		
	
		
		
			
				
					
					        Zone  zone  =  ZoneManager . findSmallestZone ( mob . loc ) ;   
			
		
	
		
		
			
				
					
					        for  ( BootySetEntry  bse  :  entries )  {          for  ( BootySetEntry  bse  :  entries )  {   
			
		
	
		
		
			
				
					
					            switch  ( bse . bootyType )  {              switch  ( bse . bootyType )  {   
			
		
	
		
		
			
				
					
					                case  "GOLD" :                  case  "GOLD" :   
			
		
	
		
		
			
				
					
					                    if  ( zone  ! =  null  & &  zone . getSafeZone ( )  = =  ( byte ) 1 )   
			
		
	
		
		
			
				
					
					                        return ;  // no loot to drop in safezones
   
			
		
	
		
		
			
				
					
					                    GenerateGoldDrop ( mob ,  bse ,  inHotzone ) ;                      GenerateGoldDrop ( mob ,  bse ,  inHotzone ) ;   
			
		
	
		
		
			
				
					
					                    break ;                      break ;   
			
		
	
		
		
			
				
					
					                case  "LOOT" :                  case  "LOOT" :   
			
		
	
		
		
			
				
					
					                    if  ( zone  ! =  null  & &  zone . getSafeZone ( )  = =  ( byte ) 1 )   
			
		
	
		
		
			
				
					
					                        return ;  // no loot to drop in safezones
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                    if  ( mob . getSafeZone ( )  = =  false )   
			
		
	
		
		
			
				
					
					                    dropRate  =  LootManager . NORMAL_DROP_RATE ;                      dropRate  =  LootManager . NORMAL_DROP_RATE ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                    if  ( inHotzone  = =  true )                      if  ( inHotzone  = =  true )   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -135,6 +222,109 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  SpecialCaseContractDrop ( Mob  mob , ArrayList < BootySetEntry >  entries ) {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  lootTableID  =  0 ;   
			
		
	
		
		
			
				
					
					        for ( BootySetEntry  entry  :  entries ) {   
			
		
	
		
		
			
				
					
					            if ( entry . bootyType . equals ( "LOOT" ) ) {   
			
		
	
		
		
			
				
					
					                lootTableID  =  entry . genTable ;   
			
		
	
		
		
			
				
					
					                break ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( lootTableID  = =  0 )   
			
		
	
		
		
			
				
					
					            return ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  ContractTableID  =  0 ;   
			
		
	
		
		
			
				
					
					        for ( GenTableEntry  entry  :  _genTables . get ( lootTableID ) ) {   
			
		
	
		
		
			
				
					
					            try  {   
			
		
	
		
		
			
				
					
					                if  ( ItemBase . getItemBase ( _itemTables . get ( entry . itemTableID ) . get ( 0 ) . cacheID ) . getType ( ) . equals ( Enum . ItemType . CONTRACT ) )  {   
			
		
	
		
		
			
				
					
					                    ContractTableID  =  entry . itemTableID ;   
			
		
	
		
		
			
				
					
					                    break ;   
			
		
	
		
		
			
				
					
					                }   
			
		
	
		
		
			
				
					
					            } catch ( Exception  e ) {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( ContractTableID  = =  0 )   
			
		
	
		
		
			
				
					
					            return ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        ItemBase  ib  =  ItemBase . getItemBase ( rollRandomItem ( ContractTableID ) ) ;   
			
		
	
		
		
			
				
					
					        if ( ib  ! =  null ) {   
			
		
	
		
		
			
				
					
					            MobLoot  toAdd  =  new  MobLoot ( mob , ib , false ) ;   
			
		
	
		
		
			
				
					
					            mob . getCharItemManager ( ) . addItemToInventory ( toAdd ) ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  SpecialCaseRuneDrop ( Mob  mob , ArrayList < BootySetEntry >  entries ) {   
			
		
	
		
		
			
				
					
					        int  lootTableID  =  0 ;   
			
		
	
		
		
			
				
					
					        for ( BootySetEntry  entry  :  entries ) {   
			
		
	
		
		
			
				
					
					            if ( entry . bootyType . equals ( "LOOT" ) ) {   
			
		
	
		
		
			
				
					
					                lootTableID  =  entry . genTable ;   
			
		
	
		
		
			
				
					
					                break ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( lootTableID  = =  0 )   
			
		
	
		
		
			
				
					
					            return ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  RuneTableID  =  0 ;   
			
		
	
		
		
			
				
					
					        for ( GenTableEntry  entry  :  _genTables . get ( lootTableID ) ) {   
			
		
	
		
		
			
				
					
					            try  {   
			
		
	
		
		
			
				
					
					                if  ( ItemBase . getItemBase ( _itemTables . get ( entry . itemTableID ) . get ( 0 ) . cacheID ) . getType ( ) . equals ( Enum . ItemType . RUNE ) )  {   
			
		
	
		
		
			
				
					
					                    RuneTableID  =  entry . itemTableID ;   
			
		
	
		
		
			
				
					
					                    break ;   
			
		
	
		
		
			
				
					
					                }   
			
		
	
		
		
			
				
					
					            } catch ( Exception  e ) {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( RuneTableID  = =  0 )   
			
		
	
		
		
			
				
					
					            return ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        ItemBase  ib  =  ItemBase . getItemBase ( rollRandomItem ( RuneTableID ) ) ;   
			
		
	
		
		
			
				
					
					        if ( ib  ! =  null ) {   
			
		
	
		
		
			
				
					
					            MobLoot  toAdd  =  new  MobLoot ( mob , ib , false ) ;   
			
		
	
		
		
			
				
					
					            mob . getCharItemManager ( ) . addItemToInventory ( toAdd ) ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  SpecialCaseResourceDrop ( Mob  mob , ArrayList < BootySetEntry >  entries ) {   
			
		
	
		
		
			
				
					
					        int  lootTableID  =  0 ;   
			
		
	
		
		
			
				
					
					        for ( BootySetEntry  entry  :  entries ) {   
			
		
	
		
		
			
				
					
					            if ( entry . bootyType . equals ( "LOOT" ) ) {   
			
		
	
		
		
			
				
					
					                lootTableID  =  entry . genTable ;   
			
		
	
		
		
			
				
					
					                break ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( lootTableID  = =  0 )   
			
		
	
		
		
			
				
					
					            return ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  ResourceTableID  =  0 ;   
			
		
	
		
		
			
				
					
					        for ( GenTableEntry  entry  :  _genTables . get ( lootTableID ) ) {   
			
		
	
		
		
			
				
					
					            try  {   
			
		
	
		
		
			
				
					
					                if  ( ItemBase . getItemBase ( _itemTables . get ( entry . itemTableID ) . get ( 0 ) . cacheID ) . getType ( ) . equals ( Enum . ItemType . RESOURCE ) )  {   
			
		
	
		
		
			
				
					
					                    ResourceTableID  =  entry . itemTableID ;   
			
		
	
		
		
			
				
					
					                    break ;   
			
		
	
		
		
			
				
					
					                }   
			
		
	
		
		
			
				
					
					            } catch ( Exception  e ) {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( ResourceTableID  = =  0 )   
			
		
	
		
		
			
				
					
					            return ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        ItemBase  ib  =  ItemBase . getItemBase ( rollRandomItem ( ResourceTableID ) ) ;   
			
		
	
		
		
			
				
					
					        if ( ib  ! =  null ) {   
			
		
	
		
		
			
				
					
					            MobLoot  toAdd  =  new  MobLoot ( mob , ib , false ) ;   
			
		
	
		
		
			
				
					
					            mob . getCharItemManager ( ) . addItemToInventory ( toAdd ) ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  MobLoot  getGenTableItem ( int  genTableID ,  AbstractCharacter  mob ,  Boolean  inHotzone )  {      public  static  MobLoot  getGenTableItem ( int  genTableID ,  AbstractCharacter  mob ,  Boolean  inHotzone )  {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( mob  = =  null  | |  _genTables . containsKey ( genTableID )  = =  false )          if  ( mob  = =  null  | |  _genTables . containsKey ( genTableID )  = =  false )   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -156,11 +346,10 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //gets the 1-320 roll for this mob
          //gets the 1-320 roll for this mob
   
			
		
	
		
		
			
				
					
					        int  itemTableRoll  =  0 ;          int  itemTableRoll  =  0 ;   
			
		
	
		
		
			
				
					
					        int  objectType  =  mob . getObjectType ( ) . ordinal ( ) ;   
			
		
	
		
		
			
				
					
					        if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {  //52 = player character
          if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {  //52 = player character
   
			
		
	
		
		
			
				
					
					            itemTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;              itemTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;   
			
		
	
		
		
			
				
					
					        }  else {          }  else {   
			
		
	
		
		
			
				
					
					            itemTableRoll  =  TableRoll ( mob . level ,  inHotzone ) ;              itemTableRoll  =  TableRoll ( mob . level ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( itemTableId ,  itemTableRoll ) ;          ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( itemTableId ,  itemTableRoll ) ;   
			
		
	
		
		
			
				
					
					        if  ( tableRow  = =  null )          if  ( tableRow  = =  null )   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -172,13 +361,23 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					            return  null ;              return  null ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( ItemBase . getItemBase ( itemUUID ) . getType ( ) . ordinal ( )  = =  Enum . ItemType . RESOURCE . ordinal ( ) )  {          if  ( ItemBase . getItemBase ( itemUUID ) . getType ( ) . ordinal ( )  = =  Enum . ItemType . RESOURCE . ordinal ( ) )  {   
			
		
	
		
		
			
				
					
					            if ( ThreadLocalRandom . current ( ) . nextInt ( 1 , 101 )  <  91 )   
			
		
	
		
		
			
				
					
					                return  null ;  // cut down world drops rates of resources by 90%
   
			
		
	
		
		
			
				
					
					            int  amount  =  ThreadLocalRandom . current ( ) . nextInt ( tableRow . minSpawn ,  tableRow . maxSpawn  +  1 ) ;              int  amount  =  ThreadLocalRandom . current ( ) . nextInt ( tableRow . minSpawn ,  tableRow . maxSpawn  +  1 ) ;   
			
		
	
		
		
			
				
					
					            return  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  amount ,  false ) ;              return  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  amount ,  false ) ;   
			
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					
        if ( ItemBase . getItemBase ( itemUUID ) . getType ( ) . equals ( Enum . ItemType . RUNE ) ) {   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					            int  randomRune  =  rollRandomItem ( itemTableId ) ;   
			
		
	
		
		
			
				
					
					            if ( randomRune  ! =  0 )  {   
			
		
	
		
		
			
				
					
					                itemUUID  =  randomRune ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }  else  if ( ItemBase . getItemBase ( itemUUID ) . getType ( ) . equals ( Enum . ItemType . CONTRACT ) ) {   
			
		
	
		
		
			
				
					
					            int  randomContract  =  rollRandomItem ( itemTableId ) ;   
			
		
	
		
		
			
				
					
					            if ( randomContract  ! =  0 )  {   
			
		
	
		
		
			
				
					
					                itemUUID  =  randomContract ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					        outItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  false ) ;          outItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  false ) ;   
			
		
	
		
		
			
				
					
					        Enum . ItemType  outType  =  outItem . getItemBase ( ) . getType ( ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( selectedRow . pModTable  ! =  0 ) {          if ( selectedRow . pModTable  ! =  0 ) {   
			
		
	
		
		
			
				
					
					            try  {              try  {   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -196,6 +395,12 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					                Logger . error ( "Failed to GenerateSuffix for item: "  +  outItem . getName ( ) ) ;                  Logger . error ( "Failed to GenerateSuffix for item: "  +  outItem . getName ( ) ) ;   
			
		
	
		
		
			
				
					
					            }              }   
			
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( outItem . getItemBase ( ) . getType ( ) . equals ( Enum . ItemType . CONTRACT )  | |  outItem . getItemBase ( ) . getType ( ) . equals ( Enum . ItemType . RUNE ) ) {   
			
		
	
		
		
			
				
					
					            if ( ThreadLocalRandom . current ( ) . nextInt ( 1 , 101 )  <  66 )   
			
		
	
		
		
			
				
					
					                return  null ;  // cut down world drops rates of resources by 65%
   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        return  outItem ;          return  outItem ;   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -216,7 +421,7 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					        if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {          if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {   
			
		
	
		
		
			
				
					
					            prefixTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;              prefixTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;   
			
		
	
		
		
			
				
					
					        }  else {          }  else {   
			
		
	
		
		
			
				
					
					            prefixTableRoll  =  TableRoll ( mob . level ,  inHotzone ) ;              prefixTableRoll  =  TableRoll ( mob . level ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					        ModTableEntry  prefixMod  =  ModTableEntry . rollTable ( prefixTable . modTableID ,  prefixTableRoll ) ;          ModTableEntry  prefixMod  =  ModTableEntry . rollTable ( prefixTable . modTableID ,  prefixTableRoll ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -248,7 +453,7 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					        if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {          if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {   
			
		
	
		
		
			
				
					
					            suffixTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;              suffixTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;   
			
		
	
		
		
			
				
					
					        }  else {          }  else {   
			
		
	
		
		
			
				
					
					            suffixTableRoll  =  TableRoll ( mob . level ,  inHotzone ) ;              suffixTableRoll  =  TableRoll ( mob . level ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					        ModTableEntry  suffixMod  =  ModTableEntry . rollTable ( suffixTable . modTableID ,  suffixTableRoll ) ;          ModTableEntry  suffixMod  =  ModTableEntry . rollTable ( suffixTable . modTableID ,  suffixTableRoll ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -263,23 +468,36 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					        return  inItem ;          return  inItem ;   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  int  TableRoll ( int  mobLevel ,  Boolean  inHotzone )  {      public  static  int  TableRoll ( int  mobLevel )  {   
			
				
				
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( mobLevel  >  65 )   
			
		
	
		
		
			
				
					
					            mobLevel  =  65 ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  max  =  ( int )  ( 4 . 882  *  mobLevel  +  127 . 0 ) ;   
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( max  >  319 )          int  rank  =  ( int ) ( mobLevel  *  0 . 1f ) ;   
			
				
				
			
		
	
		
		
			
				
					
					            max  =  319 ;          int  min  =  50 ;   
			
				
				
			
		
	
		
		
			
				
					
					
        int  max  =  100 ;   
			
				
				
			
		
	
		
		
			
				
					
					        int  min  =  ( int )  ( 4 . 469  *  mobLevel  -  3 . 469 ) ;          switch ( rank ) {   
			
				
				
			
		
	
		
		
			
				
					
					
            case  1 :   
			
				
				
			
		
	
		
		
			
				
					
					        if  ( min  <  70 )                  min  =  200 ;   
			
				
				
			
		
	
		
		
			
				
					
					            min  =  70 ;                  max  =  250 ;   
			
				
				
			
		
	
		
		
			
				
					
					
                break ;   
			
				
				
			
		
	
		
		
			
				
					
					        if  ( inHotzone )              case  2 :   
			
				
				
			
		
	
		
		
			
				
					
					            min  + =  mobLevel ;                  min  =  210 ;   
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					                max  =  275 ;   
			
		
	
		
		
			
				
					
					                break ;   
			
		
	
		
		
			
				
					
					            case  3 :   
			
		
	
		
		
			
				
					
					                min  =  220 ;   
			
		
	
		
		
			
				
					
					                max  =  300 ;   
			
		
	
		
		
			
				
					
					                break ;   
			
		
	
		
		
			
				
					
					            case  4 :   
			
		
	
		
		
			
				
					
					                min  =  230 ;   
			
		
	
		
		
			
				
					
					                max  =  320 ;   
			
		
	
		
		
			
				
					
					                break ;   
			
		
	
		
		
			
				
					
					            case  5 :   
			
		
	
		
		
			
				
					
					            case  6 :   
			
		
	
		
		
			
				
					
					            case  7 :   
			
		
	
		
		
			
				
					
					            case  8 :   
			
		
	
		
		
			
				
					
					                min  =  240 ;   
			
		
	
		
		
			
				
					
					                max  =  320 ;   
			
		
	
		
		
			
				
					
					                break ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  roll  =  ThreadLocalRandom . current ( ) . nextInt ( min ,  max  +  1 ) ;          int  roll  =  ThreadLocalRandom . current ( ) . nextInt ( min ,  max  +  1 ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -299,12 +517,7 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  high  =  bse . highGold ;          int  high  =  bse . highGold ;   
			
		
	
		
		
			
				
					
					        int  low  =  bse . lowGold ;          int  low  =  bse . lowGold ;   
			
		
	
		
		
			
				
					
					        int  gold  =  ThreadLocalRandom . current ( ) . nextInt ( low ,  high  +  1 ) ;          int  gold  =  ( int )  ( ThreadLocalRandom . current ( ) . nextInt ( low ,  high  +  1 )  *  NORMAL_GOLD_RATE ) ;   
			
				
				
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( inHotzone  = =  true )   
			
		
	
		
		
			
				
					
					            gold  =  ( int )  ( gold  *  HOTZONE_GOLD_RATE ) ;   
			
		
	
		
		
			
				
					
					        else   
			
		
	
		
		
			
				
					
					            gold  =  ( int )  ( gold  *  NORMAL_GOLD_RATE ) ;   
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( gold  >  0 )  {          if  ( gold  >  0 )  {   
			
		
	
		
		
			
				
					
					            MobLoot  goldAmount  =  new  MobLoot ( mob ,  gold ) ;              MobLoot  goldAmount  =  new  MobLoot ( mob ,  gold ) ;   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -315,43 +528,61 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  GenerateLootDrop ( Mob  mob ,  int  tableID ,  Boolean  inHotzone )  {      public  static  void  GenerateLootDrop ( Mob  mob ,  int  tableID ,  Boolean  inHotzone )  {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        try  {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        MobLoot  toAdd  =  getGenTableItem ( tableID ,  mob ,  inHotzone ) ;          MobLoot  toAdd  =  getGenTableItem ( tableID ,  mob ,  inHotzone ) ;   
			
		
	
		
		
			
				
					
					
        if ( toAdd  ! =  null ) {   
			
				
				
			
		
	
		
		
			
				
					
					            if  ( toAdd  ! =  null )              ItemBase  ib  =  toAdd . getItemBase ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					            switch ( ib . getType ( ) ) {   
			
		
	
		
		
			
				
					
					                case  CONTRACT :   
			
		
	
		
		
			
				
					
					                case  RUNE :   
			
		
	
		
		
			
				
					
					                case  RESOURCE :   
			
		
	
		
		
			
				
					
					                    return ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					            toAdd . setIsID ( true ) ;   
			
		
	
		
		
			
				
					
					            mob . getCharItemManager ( ) . addItemToInventory ( toAdd ) ;              mob . getCharItemManager ( ) . addItemToInventory ( toAdd ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        }  catch  ( Exception  e )  {   
			
		
	
		
		
			
				
					
					            //TODO chase down loot generation error, affects roughly 2% of drops
   
			
		
	
		
		
			
				
					
					            int  i  =  0 ;   
			
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  GenerateEquipmentDrop ( Mob  mob )  {      public  static  void  GenerateEquipmentDrop ( Mob  mob )  {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( mob  = =  null  | |  mob . getSafeZone ( ) )   
			
		
	
		
		
			
				
					
					            return ;  // no equipment to drop in safezones
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( mob . StrongholdGuardian  | |  mob . StrongholdCommander  | |  mob . StrongholdEpic )   
			
		
	
		
		
			
				
					
					            return ;  // stronghold mobs don't drop equipment
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //do equipment here
          //do equipment here
   
			
		
	
		
		
			
				
					
					        int  dropCount  =  0 ;          if  ( mob . getEquip ( )  ! =  null )  {   
			
				
				
			
		
	
		
		
			
				
					
					        if  ( mob . getEquip ( )  ! =  null )              boolean  isVorg  =  false ;    
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					            for  ( MobEquipment  me  :  mob . getEquip ( ) . values ( ) )  {              for  ( MobEquipment  me  :  mob . getEquip ( ) . values ( ) )  {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                if  ( me . getDropChance ( )  = =  0 )                  if  ( me . getDropChance ( )  = =  0 )   
			
		
	
		
		
			
				
					
					                    continue ;                      continue ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                String  name  =  me . getItemBase ( ) . getName ( ) . toLowerCase ( ) ;   
			
		
	
		
		
			
				
					
					                if  ( name . contains ( "vorgrim legionnaire's" )  | |  name . contains ( "vorgrim auxiliary's" )  | | name . contains ( "bellugh nuathal" )  | |  name . contains ( "crimson circle" ) )   
			
		
	
		
		
			
				
					
					                    isVorg  =  true ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                if ( isVorg  & &  ! mob . isDropper ) {   
			
		
	
		
		
			
				
					
					                    continue ;   
			
		
	
		
		
			
				
					
					                }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                float  equipmentRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100  +  1 ) ;                  float  equipmentRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100  +  1 ) ;   
			
		
	
		
		
			
				
					
					                float  dropChance  =  me . getDropChance ( )  *  100 ;                  float  dropChance  =  me . getDropChance ( )  *  100 ;   
			
		
	
		
		
			
				
					
					
                ItemBase  itemBase  =  me . getItemBase ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					                if ( isVorg )  {   
			
		
	
		
		
			
				
					
					                    mob . spawnTime  =  ThreadLocalRandom . current ( ) . nextInt ( 300 ,  2700 ) ;   
			
		
	
		
		
			
				
					
					                    dropChance  =  10 ;   
			
		
	
		
		
			
				
					
					                    itemBase  =  getRandomVorg ( itemBase ) ;   
			
		
	
		
		
			
				
					
					                }   
			
		
	
		
		
			
				
					
					                if  ( equipmentRoll  >  dropChance )                  if  ( equipmentRoll  >  dropChance )   
			
		
	
		
		
			
				
					
					                    continue ;                      continue ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                MobLoot  ml  =  new  MobLoot ( mob ,  me . getItemBase ( ) ,  false ) ;                  MobLoot  ml  =  new  MobLoot ( mob ,  itemBase ,  false ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                if  ( ml  ! =  null  & &  dropCount  <  1 )  {   
			
		
	
		
		
			
				
					
					                ml . setIsID ( true ) ;                  ml . setIsID ( true ) ;   
			
		
	
		
		
			
				
					
					                ml . setDurabilityCurrent ( ( short )  ( ml . getDurabilityCurrent ( )  -  ThreadLocalRandom . current ( ) . nextInt ( 5 )  +  1 ) ) ;                  ml . setDurabilityCurrent ( ( short )  ( ml . getDurabilityCurrent ( )  -  ThreadLocalRandom . current ( ) . nextInt ( 5 )  +  1 ) ) ;   
			
		
	
		
		
			
				
					
					                mob . getCharItemManager ( ) . addItemToInventory ( ml ) ;                  mob . getCharItemManager ( ) . addItemToInventory ( ml ) ;   
			
		
	
		
		
			
				
					
					                    dropCount  =  1 ;   
			
		
	
		
		
			
				
					
					                    //break; // Exit on first successful roll.
   
			
		
	
		
		
			
				
					
					            }              }   
			
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -367,8 +598,11 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        MobLoot  lootItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( bse . itemBase ) ,  true ) ;          MobLoot  lootItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( bse . itemBase ) ,  true ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( lootItem  ! =  null )          if  ( lootItem  ! =  null )  {    
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					            mob . getCharItemManager ( ) . addItemToInventory ( lootItem ) ;              mob . getCharItemManager ( ) . addItemToInventory ( lootItem ) ;   
			
		
	
		
		
			
				
					
					            if ( lootItem . getItemBase ( ) . isDiscRune ( )  & &  ! Mob . discDroppers . contains ( mob ) )   
			
		
	
		
		
			
				
					
					                Mob . AddDiscDropper ( mob ) ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  peddleFate ( PlayerCharacter  playerCharacter ,  Item  gift )  {      public  static  void  peddleFate ( PlayerCharacter  playerCharacter ,  Item  gift )  {   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -392,12 +626,12 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //check if player owns the gift he is trying to open
          //check if player owns the gift he is trying to open
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( itemMan . doesCharOwnThisItem ( gift . getObjectUUID ( ) )  = =  false  )          if  ( ! itemMan . doesCharOwnThisItem ( gift . getObjectUUID ( ) ) )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					            return ;              return ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //roll 1-100 for the gen table selection
          //roll 1-100 for the gen table selection
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  genRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100  +  1 ) ;          int  genRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 94 ,  100 )  +  1 ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        GenTableEntry  selectedRow  =  GenTableEntry . rollTable ( tableID ,  genRoll ,  LootManager . NORMAL_DROP_RATE ) ;          GenTableEntry  selectedRow  =  GenTableEntry . rollTable ( tableID ,  genRoll ,  LootManager . NORMAL_DROP_RATE ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( selectedRow  = =  null )          if ( selectedRow  = =  null )   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -413,12 +647,22 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //create the item from the table, quantity is always 1
          //create the item from the table, quantity is always 1
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        MobLoot  winnings  =  new  MobLoot ( playerCharacter ,  ItemBase . getItemBase ( selectedItem . cacheID ) ,  1 ,  false ) ;          ItemBase  ib  =  ItemBase . getItemBase ( selectedItem . cacheID ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        if ( ib . getUUID ( )  = =  Warehouse . coalIB . getUUID ( ) ) {   
			
		
	
		
		
			
				
					
					            //no more coal, give gold instead
   
			
		
	
		
		
			
				
					
					            if  ( itemMan . getGoldInventory ( ) . getNumOfItems ( )  +  250000  >  10000000 )  {   
			
		
	
		
		
			
				
					
					                ErrorPopupMsg . sendErrorPopup ( playerCharacter ,  21 ) ;   
			
		
	
		
		
			
				
					
					                return ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					            itemMan . addGoldToInventory ( 250000 , false ) ;   
			
		
	
		
		
			
				
					
					            itemMan . updateInventory ( ) ;   
			
		
	
		
		
			
				
					
					        } else  {   
			
		
	
		
		
			
				
					
					            MobLoot  winnings  =  new  MobLoot ( playerCharacter ,  ib ,  1 ,  false ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            if  ( winnings  = =  null )              if  ( winnings  = =  null )   
			
		
	
		
		
			
				
					
					                return ;                  return ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //early exit if the inventory of the player will not old the item
               //early exit if the inventory of the player will not h old the item
   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            if  ( itemMan . hasRoomInventory ( winnings . getItemBase ( ) . getWeight ( ) )  = =  false )  {              if  ( itemMan . hasRoomInventory ( winnings . getItemBase ( ) . getWeight ( ) )  = =  false )  {   
			
		
	
		
		
			
				
					
					                ErrorPopupMsg . sendErrorPopup ( playerCharacter ,  21 ) ;                  ErrorPopupMsg . sendErrorPopup ( playerCharacter ,  21 ) ;   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -455,3 +699,224 @@ public enum LootManager { 
			
		
	
		
		
			
				
					
					            itemMan . updateInventory ( ) ;              itemMan . updateInventory ( ) ;   
			
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  int  rollRandomItem ( int  itemTable ) {   
			
		
	
		
		
			
				
					
					        int  returnedID  =  ItemTableEntry . getRandomItem ( itemTable ) ;   
			
		
	
		
		
			
				
					
					        return  returnedID ;   
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  ItemBase  getRandomVorg ( ItemBase  itemBase ) {   
			
		
	
		
		
			
				
					
					        int  roll  =  0 ;   
			
		
	
		
		
			
				
					
					        if ( vorg_ha_uuids . contains ( itemBase . getUUID ( ) ) )  {   
			
		
	
		
		
			
				
					
					            roll  =  ThreadLocalRandom . current ( ) . nextInt ( 0 ,  10 ) ;   
			
		
	
		
		
			
				
					
					            switch  ( roll )  {   
			
		
	
		
		
			
				
					
					                case  1 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 0 ) ) ;   
			
		
	
		
		
			
				
					
					                case  2 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 1 ) ) ;   
			
		
	
		
		
			
				
					
					                case  3 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 2 ) ) ;   
			
		
	
		
		
			
				
					
					                case  4 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 3 ) ) ;   
			
		
	
		
		
			
				
					
					                case  5 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 4 ) ) ;   
			
		
	
		
		
			
				
					
					                case  6 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 5 ) ) ;   
			
		
	
		
		
			
				
					
					                case  7 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 6 ) ) ;   
			
		
	
		
		
			
				
					
					                case  8 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 7 ) ) ;   
			
		
	
		
		
			
				
					
					                default :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ha_uuids . get ( 8 ) ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( vorg_ma_uuids . contains ( itemBase . getUUID ( ) ) )  {   
			
		
	
		
		
			
				
					
					            roll  =  ThreadLocalRandom . current ( ) . nextInt ( 0 ,  10 ) ;   
			
		
	
		
		
			
				
					
					            switch  ( roll )  {   
			
		
	
		
		
			
				
					
					                case  1 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ma_uuids . get ( 0 ) ) ;   
			
		
	
		
		
			
				
					
					                case  2 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ma_uuids . get ( 1 ) ) ;   
			
		
	
		
		
			
				
					
					                case  3 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ma_uuids . get ( 2 ) ) ;   
			
		
	
		
		
			
				
					
					                case  4 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ma_uuids . get ( 3 ) ) ;   
			
		
	
		
		
			
				
					
					                case  5 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ma_uuids . get ( 4 ) ) ;   
			
		
	
		
		
			
				
					
					                case  6 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ma_uuids . get ( 5 ) ) ;   
			
		
	
		
		
			
				
					
					                case  7 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ma_uuids . get ( 6 ) ) ;   
			
		
	
		
		
			
				
					
					                default :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_ma_uuids . get ( 7 ) ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( vorg_la_uuids . contains ( itemBase . getUUID ( ) ) )  {   
			
		
	
		
		
			
				
					
					            roll  =  ThreadLocalRandom . current ( ) . nextInt ( 0 ,  10 ) ;   
			
		
	
		
		
			
				
					
					            switch  ( roll )  {   
			
		
	
		
		
			
				
					
					                case  1 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_la_uuids . get ( 0 ) ) ;   
			
		
	
		
		
			
				
					
					                case  2 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_la_uuids . get ( 1 ) ) ;   
			
		
	
		
		
			
				
					
					                case  3 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_la_uuids . get ( 2 ) ) ;   
			
		
	
		
		
			
				
					
					                case  4 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_la_uuids . get ( 3 ) ) ;   
			
		
	
		
		
			
				
					
					                case  5 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_la_uuids . get ( 4 ) ) ;   
			
		
	
		
		
			
				
					
					                case  6 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_la_uuids . get ( 5 ) ) ;   
			
		
	
		
		
			
				
					
					                case  7 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_la_uuids . get ( 6 ) ) ;   
			
		
	
		
		
			
				
					
					                default :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_la_uuids . get ( 7 ) ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if ( vorg_cloth_uuids . contains ( itemBase . getUUID ( ) ) )  {   
			
		
	
		
		
			
				
					
					            roll  =  ThreadLocalRandom . current ( ) . nextInt ( 0 ,  10 ) ;   
			
		
	
		
		
			
				
					
					            switch  ( roll )  {   
			
		
	
		
		
			
				
					
					                case  1 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_cloth_uuids . get ( 0 ) ) ;   
			
		
	
		
		
			
				
					
					                case  2 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_cloth_uuids . get ( 1 ) ) ;   
			
		
	
		
		
			
				
					
					                case  3 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_cloth_uuids . get ( 2 ) ) ;   
			
		
	
		
		
			
				
					
					                case  4 :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_cloth_uuids . get ( 3 ) ) ;   
			
		
	
		
		
			
				
					
					                default :   
			
		
	
		
		
			
				
					
					                    return  ItemBase . getItemBase ( vorg_cloth_uuids . get ( 4 ) ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        return  null ;   
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  DropPresent ( Mob  mob ) {   
			
		
	
		
		
			
				
					
					        int  random  =  971049  +  ThreadLocalRandom . current ( ) . nextInt ( 24 ) ;   
			
		
	
		
		
			
				
					
					        if  ( random  >  971071 )   
			
		
	
		
		
			
				
					
					            random  =  971071 ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        ItemBase  present  =  ItemBase . getItemBase ( random ) ;   
			
		
	
		
		
			
				
					
					        if  ( present  ! =  null )  {   
			
		
	
		
		
			
				
					
					            MobLoot  toAdd  =  new  MobLoot ( mob ,  present ,  true ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            if  ( toAdd  ! =  null )   
			
		
	
		
		
			
				
					
					                mob . getCharItemManager ( ) . addItemToInventory ( toAdd ) ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  GenerateStrongholdLoot ( Mob  mob ,  boolean  commander ,  boolean  epic )  {   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        mob . getCharItemManager ( ) . clearInventory ( ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  multiplier  =  1 ;   
			
		
	
		
		
			
				
					
					        if  ( commander )   
			
		
	
		
		
			
				
					
					            multiplier  =  2 ;   
			
		
	
		
		
			
				
					
					        if ( epic )   
			
		
	
		
		
			
				
					
					            multiplier  =  10 ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        int  high  =  125000 ;   
			
		
	
		
		
			
				
					
					        int  low  =  50000 ;   
			
		
	
		
		
			
				
					
					        int  gold  =  ThreadLocalRandom . current ( ) . nextInt ( low ,  high  +  1 )  *  multiplier ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( gold  >  0 )  {   
			
		
	
		
		
			
				
					
					            MobLoot  goldAmount  =  new  MobLoot ( mob ,  gold ) ;   
			
		
	
		
		
			
				
					
					            mob . getCharItemManager ( ) . addItemToInventory ( goldAmount ) ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //present drop chance for all
   
			
		
	
		
		
			
				
					
					        if  ( ThreadLocalRandom . current ( ) . nextInt ( 100 )  <  35 )   
			
		
	
		
		
			
				
					
					            DropPresent ( mob ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //random contract drop chance for all
   
			
		
	
		
		
			
				
					
					        if  ( ThreadLocalRandom . current ( ) . nextInt ( 100 )  <  40 )  {   
			
		
	
		
		
			
				
					
					            int  contractTableID  =  250 ;   
			
		
	
		
		
			
				
					
					            contractTableID  + =  ThreadLocalRandom . current ( ) . nextInt ( 0 ,  11 ) ;   
			
		
	
		
		
			
				
					
					            if  ( contractTableID  >  259 )   
			
		
	
		
		
			
				
					
					                contractTableID  =  659 ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                int  id  =  rollRandomItem ( contractTableID ) ;   
			
		
	
		
		
			
				
					
					                ItemBase  ib  =  ItemBase . getItemBase ( id ) ;   
			
		
	
		
		
			
				
					
					                if  ( ib  ! =  null )  {   
			
		
	
		
		
			
				
					
					                    MobLoot  contract  =  new  MobLoot ( mob ,  ib ,  true ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                    if  ( contract  ! =  null )   
			
		
	
		
		
			
				
					
					                        mob . getCharItemManager ( ) . addItemToInventory ( contract ) ;   
			
		
	
		
		
			
				
					
					                }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //special commander drop chances
   
			
		
	
		
		
			
				
					
					        if  ( commander )   
			
		
	
		
		
			
				
					
					            GenerateCommanderLoot ( mob , false ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //special epic drop chances
   
			
		
	
		
		
			
				
					
					        if  ( epic )  {   
			
		
	
		
		
			
				
					
					            GenerateCommanderLoot ( mob ,  true ) ;   
			
		
	
		
		
			
				
					
					            GenerateCommanderLoot ( mob , false ) ;   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    public  static  void  GenerateCommanderLoot ( Mob  mob ,  boolean  epic ) {   
			
		
	
		
		
			
				
					
					        //present chance
   
			
		
	
		
		
			
				
					
					        if  ( ThreadLocalRandom . current ( ) . nextInt ( 100 )  <  25 )   
			
		
	
		
		
			
				
					
					            DropPresent ( mob ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //present chance
   
			
		
	
		
		
			
				
					
					        if  ( ThreadLocalRandom . current ( ) . nextInt ( 100 )  <  25 )   
			
		
	
		
		
			
				
					
					            DropPresent ( mob ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //chance for glass
   
			
		
	
		
		
			
				
					
					        if  ( ThreadLocalRandom . current ( ) . nextInt ( 100 )  <  75 )  {   
			
		
	
		
		
			
				
					
					            int  glassID  =  rollRandomItem ( 126 ) ;   
			
		
	
		
		
			
				
					
					            ItemBase  glassItem  =  ItemBase . getItemBase ( glassID ) ;   
			
		
	
		
		
			
				
					
					            if  ( glassItem  ! =  null )  {   
			
		
	
		
		
			
				
					
					                MobLoot  toAdd2  =  new  MobLoot ( mob ,  glassItem ,  true ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                if  ( toAdd2  ! =  null )   
			
		
	
		
		
			
				
					
					                    mob . getCharItemManager ( ) . addItemToInventory ( toAdd2 ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //chance for disc
   
			
		
	
		
		
			
				
					
					        if  ( ThreadLocalRandom . current ( ) . nextInt ( 100 )  <  75 )  {   
			
		
	
		
		
			
				
					
					            int  discID  =  rollRandomItem ( 3202 ) ;   
			
		
	
		
		
			
				
					
					            ItemBase  discItem  =  ItemBase . getItemBase ( discID ) ;   
			
		
	
		
		
			
				
					
					            if  ( discItem  ! =  null )  {   
			
		
	
		
		
			
				
					
					                MobLoot  toAdd3  =  new  MobLoot ( mob ,  discItem ,  true ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                if  ( toAdd3  ! =  null )   
			
		
	
		
		
			
				
					
					                    mob . getCharItemManager ( ) . addItemToInventory ( toAdd3 ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        //chance for stat rune
   
			
		
	
		
		
			
				
					
					        if  ( ThreadLocalRandom . current ( ) . nextInt ( 100 )  <  75 )  {   
			
		
	
		
		
			
				
					
					            int  runeID  =  rollRandomItem ( 3201 ) ;   
			
		
	
		
		
			
				
					
					            ItemBase  runeItem  =  ItemBase . getItemBase ( runeID ) ;   
			
		
	
		
		
			
				
					
					            if  ( runeItem  ! =  null )  {   
			
		
	
		
		
			
				
					
					                MobLoot  toAdd4  =  new  MobLoot ( mob ,  runeItem ,  true ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                if  ( toAdd4  ! =  null )   
			
		
	
		
		
			
				
					
					                    mob . getCharItemManager ( ) . addItemToInventory ( toAdd4 ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					        if ( epic ) {   
			
		
	
		
		
			
				
					
					            int  contractTableID  =  250 ;   
			
		
	
		
		
			
				
					
					            contractTableID  + =  ThreadLocalRandom . current ( ) . nextInt ( 0 ,  11 ) ;   
			
		
	
		
		
			
				
					
					            if  ( contractTableID  >  259 )   
			
		
	
		
		
			
				
					
					                contractTableID  =  659 ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            int  id  =  rollRandomItem ( contractTableID ) ;   
			
		
	
		
		
			
				
					
					            ItemBase  ib  =  ItemBase . getItemBase ( id ) ;   
			
		
	
		
		
			
				
					
					            if  ( ib  ! =  null )  {   
			
		
	
		
		
			
				
					
					                MobLoot  contract  =  new  MobLoot ( mob ,  ib ,  true ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                if  ( contract  ! =  null )   
			
		
	
		
		
			
				
					
					                    mob . getCharItemManager ( ) . addItemToInventory ( contract ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
			
				
					
					}