@ -73,36 +73,36 @@ public enum LootManager {
				@@ -73,36 +73,36 @@ public enum LootManager {
					 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  void  GenerateMobLoot ( Mob  mob )  {   
			
		
	
		
			
				
					        int  mobBootySet  =  mob . getMobBase ( ) . bootySet ;   
			
		
	
		
			
				
					        if  ( mobBootySet  ! =  0 )  {   
			
		
	
		
			
				
					            RunBootySetIfPresent ( mobBootySet ,  mob ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        mobBootySet  =  mob . bootySet ;   
			
		
	
		
			
				
					        if  ( mobBootySet  ! =  0 )  {   
			
		
	
		
			
				
					            RunBootySetIfPresent ( mobBootySet ,  mob ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        //iterate the booty sets
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( mob . getMobBase ( ) . bootySet  ! =  0  & &  _bootySetMap . containsKey ( mob . getMobBase ( ) . bootySet )  = =  true )   
			
		
	
		
			
				
					            RunBootySet ( _bootySetMap . get ( mob . getMobBase ( ) . bootySet ) ,  mob ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( mob . bootySet  ! =  0  & &  _bootySetMap . containsKey ( mob . bootySet )  = =  true )   
			
		
	
		
			
				
					            RunBootySet ( _bootySetMap . get ( mob . bootySet ) ,  mob ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        //lastly, check mobs inventory for godly or disc runes to send a server announcement
   
			
		
	
		
			
				
					            for  ( Item  it  :  mob . getInventory ( ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Check mob's inventory for godly or disc runes to send a server announcement
   
			
		
	
		
			
				
					        for  ( Item  item  :  mob . getInventory ( ) )  {   
			
		
	
		
			
				
					            ItemBase  itemBase  =  item . getItemBase ( ) ;   
			
		
	
		
			
				
					            if  ( itemBase  ! =  null  & &  itemBase . getName ( ) . toLowerCase ( ) . contains ( "of the gods" ) )  {   
			
		
	
		
			
				
					                ChatSystemMsg  chatMsg  =  new  ChatSystemMsg (   
			
		
	
		
			
				
					                        null ,   
			
		
	
		
			
				
					                        mob . getName ( )  +  " in "  +  mob . getParentZone ( ) . getName ( )  +  " has found the "  +  itemBase . getName ( )  +  ". Are you tough enough to take it?"   
			
		
	
		
			
				
					                ) ;   
			
		
	
		
			
				
					                ItemBase  ib  =  it . getItemBase ( ) ;   
			
		
	
		
			
				
					                if ( ib  = =  null )   
			
		
	
		
			
				
					                    break ;   
			
		
	
		
			
				
					                if  ( ib . getName ( ) . toLowerCase ( ) . contains ( "of the gods" ) )  {   
			
		
	
		
			
				
					                    ChatSystemMsg  chatMsg  =  new  ChatSystemMsg ( null ,  mob . getName ( )  +  " in "  +  mob . getParentZone ( ) . getName ( )  +  " has found the "  +  ib . getName ( )  +  ". Are you tough enough to take it?" ) ;   
			
		
	
		
			
				
					                    chatMsg . setMessageType ( 10 ) ;   
			
		
	
		
			
				
					                    chatMsg . setChannel ( Enum . ChatChannelType . SYSTEM . getChannelID ( ) ) ;   
			
		
	
		
			
				
					                    DispatchMessage . dispatchMsgToAll ( chatMsg ) ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  void  RunBootySet ( ArrayList < BootySetEntry >  entries ,  Mob  mob )  {   
			
		
	
		
			
				
					        float  dropRate  =  NORMAL_DROP_RATE ;   
			
		
	
		
			
				
					        boolean  isSafeZone  =  mob . parentZone . getSafeZone ( )  = =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( isSafeZone )  {   
			
		
	
		
			
				
					        float  dropRate  =  NORMAL_DROP_RATE ;   
			
		
	
		
			
				
					        //roll the geenric world drop table
   
			
		
	
		
			
				
					        if ( mob . parentZone . getSafeZone ( )  = =  0 )  {   
			
		
	
		
			
				
					            GenerateLootDrop ( mob ,  1300 ) ;   
			
		
	
		
			
				
					            if ( ThreadLocalRandom . current ( ) . nextInt ( 1 ,  10000 )  = =  5000 )  {   
			
		
	
		
			
				
					                MobLoot  extraLoot  =  rollForGlass ( mob ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -112,6 +112,7 @@ public enum LootManager {
				@@ -112,6 +112,7 @@ public enum LootManager {
					 
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Iterate all entries in this bootySet and process accordingly
   
			
		
	
		
			
				
					        boolean  hasExtraRolled  =  false ;   
			
		
	
		
			
				
					        for  ( BootySetEntry  bse  :  entries )  {   
			
		
	
		
			
				
					            switch  ( bse . bootyType )  {   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -119,26 +120,17 @@ public enum LootManager {
				@@ -119,26 +120,17 @@ public enum LootManager {
					 
			
		
	
		
			
				
					                    GenerateGoldDrop ( mob ,  bse ) ;   
			
		
	
		
			
				
					                    break ;   
			
		
	
		
			
				
					                case  "LOOT" :   
			
		
	
		
			
				
					                    if  ( ThreadLocalRandom . current ( ) . nextInt ( 1 ,  101 )  <  ( bse . dropChance  *  dropRate ) )  {   
			
		
	
		
			
				
					                        GenerateLootDrop ( mob ,  bse . genTable ) ;   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                    if  ( isSafeZone  & &  ! hasExtraRolled  & &  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  5000 )  <  15  *  dropRate )  {   
			
		
	
		
			
				
					                        MobLoot  extraLoot  =  ( ThreadLocalRandom . current ( ) . nextInt ( 1 ,  101 )  < =  50 )   
			
		
	
		
			
				
					                                ?  rollForContract ( bse . genTable ,  mob )   
			
		
	
		
			
				
					                                :  rollForRune ( bse . genTable ,  mob ) ;   
			
		
	
		
			
				
					                        if  ( extraLoot  ! =  null )  {   
			
		
	
		
			
				
					                        if  ( ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100  +  1 )  <  ( bse . dropChance  *  dropRate ) )   
			
		
	
		
			
				
					                            GenerateLootDrop ( mob ,  bse . genTable ) ;   //generate normal loot drop
   
			
		
	
		
			
				
					                    if ( mob . contractCounter  > =  250 ) {   
			
		
	
		
			
				
					                        MobLoot  extraLoot  =  rollForContract ( bse . genTable ,  mob ) ;   
			
		
	
		
			
				
					                        if  ( extraLoot  ! =  null )   
			
		
	
		
			
				
					                            mob . getCharItemManager ( ) . addItemToInventory ( extraLoot ) ;   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                        hasExtraRolled  =  true ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                        if ( mob . parentZone . lastContractDrop  +  3600000  >  System . currentTimeMillis ( ) ) {   
			
		
	
		
			
				
					                            //no contract in last hour, force roll for one
   
			
		
	
		
			
				
					                            rollForContract ( bse . genTable ,  mob ) ;   
			
		
	
		
			
				
					                        }   
			
		
	
		
			
				
					                        if ( mob . parentZone . lastRuneDrop  +  3600000  >  System . currentTimeMillis ( ) ) {   
			
		
	
		
			
				
					                            //no rune in last hour, force roll for one
   
			
		
	
		
			
				
					                            rollForRune ( bse . genTable ,  mob ) ;   
			
		
	
		
			
				
					                        }   
			
		
	
		
			
				
					                    if ( mob . runeCounter  > =  250 ) {   
			
		
	
		
			
				
					                        MobLoot  extraLoot  =  rollForRune ( bse . genTable ,  mob ) ;   
			
		
	
		
			
				
					                        if  ( extraLoot  ! =  null )   
			
		
	
		
			
				
					                            mob . getCharItemManager ( ) . addItemToInventory ( extraLoot ) ;   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                    break ;   
			
		
	
		
			
				
					                case  "ITEM" :   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -146,60 +138,45 @@ public enum LootManager {
				@@ -146,60 +138,45 @@ public enum LootManager {
					 
			
		
	
		
			
				
					                    break ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        MobLoot  specialDrop  =  getSpecialDropForMob ( mob ) ;   
			
		
	
		
			
				
					        if  ( specialDrop  ! =  null )  {   
			
		
	
		
			
				
					            enhanceMob ( mob ,  specialDrop ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  void  RunBootySetIfPresent ( int  bootySet ,  Mob  mob )  {   
			
		
	
		
			
				
					        if  ( _bootySetMap . containsKey ( bootySet ) )  {   
			
		
	
		
			
				
					            RunBootySet ( _bootySetMap . get ( bootySet ) ,  mob ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  MobLoot  getSpecialDropForMob ( Mob  mob )  {   
			
		
	
		
			
				
					        MobLoot  specialDrop  =  null ;   
			
		
	
		
			
				
					        int  mobUUID  =  mob . getObjectUUID ( ) ;   
			
		
	
		
			
				
					        switch  ( mobUUID )  {   
			
		
	
		
			
				
					            case  22595 :   
			
		
	
		
			
				
					                specialDrop  =  createSpecialDrop ( mob ,  252134 ,  "Melandrach The Blood-Mage" ) ;   
			
		
	
		
			
				
					        switch ( mob . getObjectUUID ( ) )  {   
			
		
	
		
			
				
					            case  22595 : //elf 1
   
			
		
	
		
			
				
					                specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( 252134 ) , true ) ;   
			
		
	
		
			
				
					                mob . setFirstName ( "Melandrach The Blood-Mage" ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  22432 :   
			
		
	
		
			
				
					                specialDrop  =  createSpecialDrop ( mob ,  252135 ,  "Kyrtaar The Blood-Mage" ) ;   
			
		
	
		
			
				
					            case  22432 :  //elf 2
   
			
		
	
		
			
				
					                specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( 252135 ) , true ) ;   
			
		
	
		
			
				
					                mob . setFirstName ( "Kyrtaar The Blood-Mage" ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  22537 :   
			
		
	
		
			
				
					                specialDrop  =  createSpecialDrop ( mob ,  252136 ,  "Vamir The Blood-Mage" ) ;   
			
		
	
		
			
				
					            case  22537 :  //elf 3
   
			
		
	
		
			
				
					                specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( 252136 ) , true ) ;   
			
		
	
		
			
				
					                mob . setFirstName ( "Vamir The Blood-Mage" ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  16387 :   
			
		
	
		
			
				
					                specialDrop  =  createSpecialDrop ( mob ,  252129 ,  "Alatar The Blood-Mage" ) ;   
			
		
	
		
			
				
					            case  16387 :  //human 4 DONE
   
			
		
	
		
			
				
					                specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( 252129 ) , true ) ;   
			
		
	
		
			
				
					                mob . setFirstName ( "Alatar The Blood-Mage" ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  32724 :   
			
		
	
		
			
				
					                specialDrop  =  createSpecialDrop ( mob ,  252130 ,  "Elphaba The Blood-Mage" ) ;   
			
		
	
		
			
				
					            case  32724 : // human 5 GOOD
   
			
		
	
		
			
				
					                specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( 252130 ) , true ) ;   
			
		
	
		
			
				
					                mob . setFirstName ( "Elphaba The Blood-Mage" ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  23379 :   
			
		
	
		
			
				
					                specialDrop  =  createSpecialDrop ( mob ,  252131 ,  "Bavmorda The Blood-Mage" ) ;   
			
		
	
		
			
				
					            case  23379 :  //human 1 GOOD
   
			
		
	
		
			
				
					                specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( 252131 ) , true ) ;   
			
		
	
		
			
				
					                mob . setFirstName ( "Bavmorda The Blood-Mage" ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  10826 :   
			
		
	
		
			
				
					                specialDrop  =  createSpecialDrop ( mob ,  252132 ,  "Draco The Blood-Mage" ) ;   
			
		
	
		
			
				
					            case  10826 :  //human 2 REDO
   
			
		
	
		
			
				
					                specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( 252132 ) , true ) ;   
			
		
	
		
			
				
					                mob . setFirstName ( "Draco The Blood-Mage" ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  15929 :   
			
		
	
		
			
				
					                specialDrop  =  createSpecialDrop ( mob ,  252133 ,  "Atlantes The Blood-Mage" ) ;   
			
		
	
		
			
				
					            case  15929 :  //human 3 GOOD
   
			
		
	
		
			
				
					                specialDrop  =  new  MobLoot ( mob , ItemBase . getItemBase ( 252133 ) , true ) ;   
			
		
	
		
			
				
					                mob . setFirstName ( "Atlantes The Blood-Mage" ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        return  specialDrop ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  MobLoot  createSpecialDrop ( Mob  mob ,  int  itemBaseId ,  String  name )  {   
			
		
	
		
			
				
					        mob . setFirstName ( name ) ;   
			
		
	
		
			
				
					        return  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemBaseId ) ,  true ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  void  enhanceMob ( Mob  mob ,  MobLoot  specialDrop )  {   
			
		
	
		
			
				
					        if ( specialDrop  ! =  null )  {   
			
		
	
		
			
				
					            mob . setLevel ( ( short )  65 ) ;   
			
		
	
		
			
				
					            mob . setSpawnTime ( 10800 ) ;   
			
		
	
		
			
				
					        mob . healthMax  =  7500 ;   
			
		
	
		
			
				
					            mob . healthMax  =  ( 7500 ) ;   
			
		
	
		
			
				
					            mob . setHealth ( 7500 ) ;   
			
		
	
		
			
				
					            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 ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -208,81 +185,100 @@ public enum LootManager {
				@@ -208,81 +185,100 @@ public enum LootManager {
					 
			
		
	
		
			
				
					            mob . getCharItemManager ( ) . addItemToInventory ( specialDrop ) ;   
			
		
	
		
			
				
					            mob . setResists ( new  Resists ( "Dropper" ) ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  MobLoot  getGenTableItem ( int  genTableID ,  AbstractCharacter  mob )  {   
			
		
	
		
			
				
					        if  ( mob  = =  null  | |  ! _genTables . containsKey ( genTableID ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( mob  = =  null  | |  _genTables . containsKey ( genTableID )  = =  false )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  genRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  95 ) ;   
			
		
	
		
			
				
					        MobLoot  outItem ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  genRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 94  +  1 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        GenTableEntry  selectedRow  =  GenTableEntry . rollTable ( genTableID ,  genRoll ,  1 . 0f ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( selectedRow  = =  null  | |  ! _itemTables . containsKey ( selectedRow . itemTableID ) )  {   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  itemTableRoll  =  ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  ?   
			
		
	
		
			
				
					                ThreadLocalRandom . current ( ) . nextInt ( 1 ,  321 )  :   
			
		
	
		
			
				
					                TableRoll ( mob . level ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( selectedRow . itemTableID ,  itemTableRoll ) ;   
			
		
	
		
			
				
					        int  itemTableId  =  selectedRow . itemTableID ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( tableRow  = =  null  | |  tableRow . cacheID  = =  0 )  {   
			
		
	
		
			
				
					        if  ( _itemTables . containsKey ( itemTableId )  = =  false )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        //gets the 1-320 roll for this mob
   
			
		
	
		
			
				
					        int  itemTableRoll  =  0 ;   
			
		
	
		
			
				
					        int  objectType  =  mob . getObjectType ( ) . ordinal ( ) ;   
			
		
	
		
			
				
					        if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {  //52 = player character
   
			
		
	
		
			
				
					            itemTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;   
			
		
	
		
			
				
					        }  else {   
			
		
	
		
			
				
					            itemTableRoll  =  TableRoll ( mob . level ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( itemTableId ,  itemTableRoll ) ;   
			
		
	
		
			
				
					        if  ( tableRow  = =  null )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  itemUUID  =  tableRow . cacheID ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        ItemBase  itemBase  =  ItemBase . getItemBase ( tableRow . cacheID ) ;   
			
		
	
		
			
				
					        if  ( itemBase  = =  null )  {   
			
		
	
		
			
				
					        if  ( itemUUID  = =  0 )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( itemBase . getType ( )  = =  Enum . ItemType . RESOURCE )  {   
			
		
	
		
			
				
					            if  ( ThreadLocalRandom . current ( ) . nextInt ( 1 ,  101 )  >  10 )  {   
			
		
	
		
			
				
					        if  ( ItemBase . getItemBase ( itemUUID ) . getType ( ) . ordinal ( )  = =  Enum . ItemType . RESOURCE . ordinal ( ) )  {   
			
		
	
		
			
				
					            int  chance  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 101 ) ;   
			
		
	
		
			
				
					            if ( chance  >  10 )   
			
		
	
		
			
				
					                return  null ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            int  amount  =  ThreadLocalRandom . current ( ) . nextInt ( ( int )  ( tableRow . minSpawn  *  0 . 5f ) ,   
			
		
	
		
			
				
					                    ( int )  ( ( tableRow . maxSpawn  +  1 )  *  0 . 5f ) ) ;   
			
		
	
		
			
				
					            return  new  MobLoot ( mob ,  itemBase ,  amount ,  false ) ;   
			
		
	
		
			
				
					            int  amount  =  ThreadLocalRandom . current ( ) . nextInt ( ( int ) ( tableRow . minSpawn  *  0 . 5f ) ,  ( int ) ( ( tableRow . maxSpawn  +  1 )  *  0 . 5f ) ) ;   
			
		
	
		
			
				
					            return  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  amount ,  false ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        MobLoot  outItem  =  new  MobLoot ( mob ,  itemBase ,  false ) ;   
			
		
	
		
			
				
					        try  {   
			
		
	
		
			
				
					        outItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  false ) ;   
			
		
	
		
			
				
					        Enum . ItemType  outType  =  outItem . getItemBase ( ) . getType ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if ( selectedRow . pModTable  ! =  0 ) {   
			
		
	
		
			
				
					            try  {   
			
		
	
		
			
				
					                outItem  =  GeneratePrefix ( mob ,  outItem ,  genTableID ,  genRoll ) ;   
			
		
	
		
			
				
					                outItem . setIsID ( false ) ;   
			
		
	
		
			
				
					            }  catch  ( Exception  e )  {   
			
		
	
		
			
				
					                Logger . error ( "Failed to GeneratePrefix for item: "  +  outItem . getName ( ) ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if ( selectedRow . sModTable  ! =  0 ) {   
			
		
	
		
			
				
					            try  {   
			
		
	
		
			
				
					                outItem  =  GenerateSuffix ( mob ,  outItem ,  genTableID ,  genRoll ) ;   
			
		
	
		
			
				
					                outItem . setIsID ( false ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            }  catch  ( Exception  e )  {   
			
		
	
		
			
				
					            Logger . error ( "Failed to generate mod for item: "  +  outItem . getName ( ) ,  e ) ;   
			
		
	
		
			
				
					                Logger . error ( "Failed to GenerateSuffix for item: "  +  outItem . getName ( ) ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        return  outItem ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  MobLoot  GeneratePrefix ( AbstractCharacter  mob ,  MobLoot  inItem ,  int  genTableID ,  int  genRoll )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        GenTableEntry  selectedRow  =  GenTableEntry . rollTable ( genTableID ,  genRoll ,  1 . 0f ) ;   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )  {   
			
		
	
		
			
				
					            return  inItem ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        ModTypeTableEntry  prefixTable  =  ModTypeTableEntry . rollTable ( selectedRow . pModTable ,  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  101 ) ) ;   
			
		
	
		
			
				
					        if  ( prefixTable  = =  null )  {   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )   
			
		
	
		
			
				
					            return  inItem ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  prefixTableRoll  =  ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  ?   
			
		
	
		
			
				
					                ThreadLocalRandom . current ( ) . nextInt ( 1 ,  321 )  :   
			
		
	
		
			
				
					                TableRoll ( mob . level ) ;   
			
		
	
		
			
				
					        int  prefixroll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100  +  1 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        ModTableEntry  prefixMod  =  ModTableEntry . rollTable ( prefixTable . modTableID ,  prefixTableRoll ) ;   
			
		
	
		
			
				
					        if  ( prefixMod  = =  null )  {   
			
		
	
		
			
				
					        ModTypeTableEntry  prefixTable  =  ModTypeTableEntry . rollTable ( selectedRow . pModTable ,  prefixroll ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( prefixTable  = =  null )   
			
		
	
		
			
				
					            return  inItem ;   
			
		
	
		
			
				
					        int  prefixTableRoll  =  0 ;   
			
		
	
		
			
				
					        if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {   
			
		
	
		
			
				
					            prefixTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;   
			
		
	
		
			
				
					        }  else {   
			
		
	
		
			
				
					            prefixTableRoll  =  TableRoll ( mob . level ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        ModTableEntry  prefixMod  =  ModTableEntry . rollTable ( prefixTable . modTableID ,  prefixTableRoll ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( ! prefixMod . action . isEmpty ( ) )  {   
			
		
	
		
			
				
					        if  ( prefixMod  = =  null )   
			
		
	
		
			
				
					            return  inItem ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( prefixMod . action . length ( )  >  0 )  {   
			
		
	
		
			
				
					            inItem . setPrefix ( prefixMod . action ) ;   
			
		
	
		
			
				
					            inItem . addPermanentEnchantment ( prefixMod . action ,  0 ,  prefixMod . level ,  true ) ;   
			
		
	
		
			
				
					        }   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -291,26 +287,30 @@ public enum LootManager {
				@@ -291,26 +287,30 @@ public enum LootManager {
					 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  MobLoot  GenerateSuffix ( AbstractCharacter  mob ,  MobLoot  inItem ,  int  genTableID ,  int  genRoll )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        GenTableEntry  selectedRow  =  GenTableEntry . rollTable ( genTableID ,  genRoll ,  1 . 0f ) ;   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )  {   
			
		
	
		
			
				
					            return  inItem ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        ModTypeTableEntry  suffixTable  =  ModTypeTableEntry . rollTable ( selectedRow . sModTable ,  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  101 ) ) ;   
			
		
	
		
			
				
					        if  ( suffixTable  = =  null )  {   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )   
			
		
	
		
			
				
					            return  inItem ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  suffixTableRoll  =  ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  ?   
			
		
	
		
			
				
					                ThreadLocalRandom . current ( ) . nextInt ( 1 ,  321 )  :   
			
		
	
		
			
				
					                TableRoll ( mob . level ) ;   
			
		
	
		
			
				
					        int  suffixRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100  +  1 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        ModTableEntry  suffixMod  =  ModTableEntry . rollTable ( suffixTable . modTableID ,  suffixTableRoll ) ;   
			
		
	
		
			
				
					        if  ( suffixMod  = =  null )  {   
			
		
	
		
			
				
					        ModTypeTableEntry  suffixTable  =  ModTypeTableEntry . rollTable ( selectedRow . sModTable ,  suffixRoll ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( suffixTable  = =  null )   
			
		
	
		
			
				
					            return  inItem ;   
			
		
	
		
			
				
					        int  suffixTableRoll  =  0 ;   
			
		
	
		
			
				
					        if ( mob . getObjectType ( ) . ordinal ( )  = =  52 )  {   
			
		
	
		
			
				
					            suffixTableRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 , 320  +  1 ) ;   
			
		
	
		
			
				
					        }  else {   
			
		
	
		
			
				
					            suffixTableRoll  =  TableRoll ( mob . level ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        ModTableEntry  suffixMod  =  ModTableEntry . rollTable ( suffixTable . modTableID ,  suffixTableRoll ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( ! suffixMod . action . isEmpty ( ) )  {   
			
		
	
		
			
				
					        if  ( suffixMod  = =  null )   
			
		
	
		
			
				
					            return  inItem ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( suffixMod . action . length ( )  >  0 )  {   
			
		
	
		
			
				
					            inItem . setSuffix ( suffixMod . action ) ;   
			
		
	
		
			
				
					            inItem . addPermanentEnchantment ( suffixMod . action ,  0 ,  suffixMod . level ,  false ) ;   
			
		
	
		
			
				
					        }   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -319,23 +319,36 @@ public enum LootManager {
				@@ -319,23 +319,36 @@ public enum LootManager {
					 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  int  TableRoll ( int  mobLevel )  {   
			
		
	
		
			
				
					        mobLevel  =  Math . min ( mobLevel ,  65 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  max  =  Math . min ( ( int )  ( 4 . 882  *  mobLevel  +  127 . 0 ) ,  319 ) ;   
			
		
	
		
			
				
					        int  min  =  Math . max ( ( int )  ( 4 . 469  *  mobLevel  -  3 . 469 ) ,  70 ) ;   
			
		
	
		
			
				
					        if  ( mobLevel  >  65 )   
			
		
	
		
			
				
					            mobLevel  =  65 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  max  =  ( int )  ( 4 . 882  *  mobLevel  +  127 . 0 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( max  >  319 )   
			
		
	
		
			
				
					            max  =  319 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  min  =  ( int )  ( 4 . 469  *  mobLevel  -  3 . 469 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        return  ThreadLocalRandom . current ( ) . nextInt ( min ,  max  +  1 ) ;   
			
		
	
		
			
				
					        if  ( min  <  70 )   
			
		
	
		
			
				
					            min  =  70 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  roll  =  ThreadLocalRandom . current ( ) . nextInt ( min ,  max  +  1 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        return  roll ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  void  GenerateGoldDrop ( Mob  mob ,  BootySetEntry  bse )  {   
			
		
	
		
			
				
					        int  chanceRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  101 ) ;  // Simplified the chance roll to be out of 100 directly
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Early exit if failed to hit minimum chance roll
   
			
		
	
		
			
				
					        if  ( chanceRoll  >  bse . dropChance )  {   
			
		
	
		
			
				
					        int  chanceRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100  +  1 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        //early exit, failed to hit minimum chance roll
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( chanceRoll  >  bse . dropChance )   
			
		
	
		
			
				
					            return ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Determine and add gold to mob inventory
   
			
		
	
		
			
				
					        //determine and add gold to mob inventory
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  high  =  ( int ) ( bse . highGold  *  NORMAL_GOLD_RATE ) ;   
			
		
	
		
			
				
					        int  low  =  ( int ) ( bse . lowGold  *  NORMAL_GOLD_RATE ) ;   
			
		
	
		
			
				
					        int  gold  =  ThreadLocalRandom . current ( ) . nextInt ( low ,  high ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -344,63 +357,72 @@ public enum LootManager {
				@@ -344,63 +357,72 @@ public enum LootManager {
					 
			
		
	
		
			
				
					            MobLoot  goldAmount  =  new  MobLoot ( mob ,  gold ) ;   
			
		
	
		
			
				
					            mob . getCharItemManager ( ) . addItemToInventory ( goldAmount ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  void  GenerateLootDrop ( Mob  mob ,  int  tableID )  {   
			
		
	
		
			
				
					        if  ( mob . parentZone . getSafeZone ( )  = =  1 )  {   
			
		
	
		
			
				
					            return ;  // Exit early if in a safe zone
   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        try  {   
			
		
	
		
			
				
					            if ( mob . parentZone . getSafeZone ( )  = =  1 )  {   
			
		
	
		
			
				
					                return ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            MobLoot  toAdd  =  getGenTableItem ( tableID ,  mob ) ;   
			
		
	
		
			
				
					            if  ( toAdd  ! =  null  & &  ! isContractOrRune ( toAdd ) )  {   
			
		
	
		
			
				
					            if ( toAdd . getItemBase ( ) . getType ( ) . equals ( Enum . ItemType . CONTRACT )  | |  toAdd . getItemBase ( ) . getType ( ) . equals ( Enum . ItemType . RUNE ) )   
			
		
	
		
			
				
					                return ; //block all contracts and runes that drop outside the confines of the new system
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            if  ( toAdd  ! =  null )  {   
			
		
	
		
			
				
					                toAdd . setIsID ( true ) ;   
			
		
	
		
			
				
					                mob . getCharItemManager ( ) . addItemToInventory ( toAdd ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }  catch  ( Exception  e )  {   
			
		
	
		
			
				
					            // Handle exceptions if necessary 
   
			
		
	
		
			
				
					            //TODO chase down loot generation error, affects roughly 2% of drops 
   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  boolean  isContractOrRune ( MobLoot  loot )  {   
			
		
	
		
			
				
					        Enum . ItemType  type  =  loot . getItemBase ( ) . getType ( ) ;   
			
		
	
		
			
				
					        return  type  = =  Enum . ItemType . CONTRACT  | |  type  = =  Enum . ItemType . RUNE ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  void  GenerateEquipmentDrop ( Mob  mob )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if ( mob . parentZone . getSafeZone ( )  = =  1 )  {   
			
		
	
		
			
				
					            return ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        //do equipment here
   
			
		
	
		
			
				
					        int  dropCount  =  0 ;   
			
		
	
		
			
				
					        if  ( mob . getEquip ( )  ! =  null )  {    
			
		
	
		
			
				
					        if  ( mob . getEquip ( )  ! =  null )   
			
		
	
		
			
				
					            for  ( MobEquipment  me  :  mob . getEquip ( ) . values ( ) )  {   
			
		
	
		
			
				
					                if  ( me . getDropChance ( )  = =  0 )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( me . getDropChance ( )  = =  0 )   
			
		
	
		
			
				
					                    continue ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                float  equipmentRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  101 ) ;  // Simplified the roll to be out of 100 directly
    
			
		
	
		
			
				
					                float  equipmentRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100  +  1 ) ;    
			
		
	
		
			
				
					                float  dropChance  =  me . getDropChance ( )  *  100 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( equipmentRoll  >  dropChance )  {   
			
		
	
		
			
				
					                if  ( equipmentRoll  >  dropChance )   
			
		
	
		
			
				
					                    continue ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                ItemBase  genericIB  =  me . getItemBase ( ) ;   
			
		
	
		
			
				
					                if ( genericIB . isVorg ( ) ) {   
			
		
	
		
			
				
					                    genericIB  =  getRandomVorgPiece ( genericIB ) ;  // Replaced separate method calls with a single one
   
			
		
	
		
			
				
					                    if ( genericIB . isClothArmor ( ) ) {   
			
		
	
		
			
				
					                        //get random cloth piece
   
			
		
	
		
			
				
					                        genericIB  =  getRandomVorgCloth ( ) ; //ItemBase.getItemBase(vorg_cloth_uuids.get(ThreadLocalRandom.current().nextInt(0,vorg_cloth_uuids.size() - 1)));
   
			
		
	
		
			
				
					                    }  else  if ( genericIB . isHeavyArmor ( ) ) {   
			
		
	
		
			
				
					                        //get random heavy armor piece
   
			
		
	
		
			
				
					                        genericIB  =  getRandomVorgHA ( ) ; //ItemBase.getItemBase(vorg_ha_uuids.get(ThreadLocalRandom.current().nextInt(0,vorg_ha_uuids.size() - 1)));
   
			
		
	
		
			
				
					                    }  else  if ( genericIB . isMediumArmor ( ) ) {   
			
		
	
		
			
				
					                        //get random medium armor piece
   
			
		
	
		
			
				
					                        genericIB  =  getRandomVorgMA ( ) ; //ItemBase.getItemBase(vorg_ma_uuids.get(ThreadLocalRandom.current().nextInt(0,vorg_ma_uuids.size() - 1)));
   
			
		
	
		
			
				
					                    }  else  if ( genericIB . isLightArmor ( ) ) {   
			
		
	
		
			
				
					                        //get random light armor piece
   
			
		
	
		
			
				
					                        genericIB  =  getRandomVorgLA ( ) ; //ItemBase.getItemBase(vorg_la_uuids.get(ThreadLocalRandom.current().nextInt(0,vorg_la_uuids.size() - 1)));
   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                    mob . spawnTime  =  ThreadLocalRandom . current ( ) . nextInt ( 300 , 2700 ) ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    MobLoot  ml  =  new  MobLoot ( mob ,  genericIB ,  false ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( ml  ! =  null  & &  dropCount  <  1 )  {   
			
		
	
		
			
				
					                if  ( ml  ! =  null  & &  dropCount  <  1  & &  genericIB . isVorg ( )  = =  false  )  {   
			
		
	
		
			
				
					                    ml . setIsID ( true ) ;   
			
		
	
		
			
				
					                    ml . setDurabilityCurrent ( ( short )  ( ml . getDurabilityCurrent ( )  -  ThreadLocalRandom . current ( ) . nextInt ( 5 )  +  1 ) ) ;   
			
		
	
		
			
				
					                    mob . getCharItemManager ( ) . addItemToInventory ( ml ) ;   
			
		
	
		
			
				
					                    dropCount + + ;   
			
		
	
		
			
				
					                    dropCount  =  1 ;   
			
		
	
		
			
				
					                    //break; // Exit on first successful roll.
   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if ( ml  ! =  null  & &  genericIB . isVorg ( )  & &  mob . getMobBaseID ( )  ! =  14062 ) {   
			
		
	
		
			
				
					                    ml . setIsID ( true ) ;   
			
		
	
		
			
				
					                    ml . setDurabilityCurrent ( ml . getDurabilityMax ( ) ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -408,53 +430,40 @@ public enum LootManager {
				@@ -408,53 +430,40 @@ public enum LootManager {
					 
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  ItemBase  getRandomVorgPiece ( ItemBase  genericIB )  {   
			
		
	
		
			
				
					        if  ( genericIB . isClothArmor ( ) )  {   
			
		
	
		
			
				
					            return  getRandomVorgCloth ( ) ;   
			
		
	
		
			
				
					        }  else  if  ( genericIB . isHeavyArmor ( ) )  {   
			
		
	
		
			
				
					            return  getRandomVorgHA ( ) ;   
			
		
	
		
			
				
					        }  else  if  ( genericIB . isMediumArmor ( ) )  {   
			
		
	
		
			
				
					            return  getRandomVorgMA ( ) ;   
			
		
	
		
			
				
					        }  else  if  ( genericIB . isLightArmor ( ) )  {   
			
		
	
		
			
				
					            return  getRandomVorgLA ( ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        return  genericIB ;  // Return the original item base if it's not a vorg piece
   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  void  GenerateInventoryDrop ( Mob  mob ,  BootySetEntry  bse )  {   
			
		
	
		
			
				
					        // Check if the item is a discipline rune 
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if ( ItemBase . getItemBase ( bse . itemBase ) . isDiscRune ( ) )  {   
			
		
	
		
			
				
					            if   ( ! Mob . disciplineDroppers . contains ( mob ) )  {    
			
		
	
		
			
				
					            if ( ! Mob . disciplineDroppers . contains ( mob ) )   
			
		
	
		
			
				
					                Mob . disciplineDroppers . add ( mob ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            mob . setResists ( new  Resists ( "Dropper" ) ) ;   
			
		
	
		
			
				
					            ChatSystemMsg  chatMsg  =  new  ChatSystemMsg ( null ,  mob . getName ( )  +  " in "  +  mob . getParentZone ( ) . getName ( )  +  " has found the "  +  ItemBase . getItemBase ( bse . itemBase ) . getName ( )  +  ". Are you tough enough to take it?" ) ;   
			
		
	
		
			
				
					            chatMsg . setMessageType ( 10 ) ;   
			
		
	
		
			
				
					            chatMsg . setChannel ( Enum . ChatChannelType . SYSTEM . getChannelID ( ) ) ;   
			
		
	
		
			
				
					            DispatchMessage . dispatchMsgToAll ( chatMsg ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Skip drop if mob is in a safe zone
   
			
		
	
		
			
				
					        //if((bse.itemBase == 3040 || bse.itemBase == 3021) && mob.level < 80){
   
			
		
	
		
			
				
					        //    chance = 100;
   
			
		
	
		
			
				
					        //}
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if ( mob . parentZone . getSafeZone ( )  = =  1 )  {   
			
		
	
		
			
				
					            return ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Roll for drop chance
   
			
		
	
		
			
				
					        int  chanceRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  100 ) ;  // Changed upper bound to 100
   
			
		
	
		
			
				
					        int  chanceRoll  =  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  99 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Check if the chance roll exceeds drop chance 
   
			
		
	
		
			
				
					        if  ( chanceRoll  >  bse . dropChance )  {   
			
		
	
		
			
				
					            return ;  // Early exit if the drop chance fails
    
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        //early exit, failed to hit minimum chance roll 
   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					        if  ( chanceRoll  >  bse . dropChance )   
			
		
	
		
			
				
					            return ;    
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Create and add the loot item to the mob's inventory
   
			
		
	
		
			
				
					        MobLoot  lootItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( bse . itemBase ) ,  true ) ;   
			
		
	
		
			
				
					        if  ( lootItem  ! =  null )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( lootItem  ! =  null )   
			
		
	
		
			
				
					            mob . getCharItemManager ( ) . addItemToInventory ( lootItem ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  void  peddleFate ( PlayerCharacter  playerCharacter ,  Item  gift )  {   
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -541,76 +550,154 @@ public enum LootManager {
				@@ -541,76 +550,154 @@ public enum LootManager {
					 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  MobLoot  rollForContract ( int  table ,  Mob  mob ) {   
			
		
	
		
			
				
					        mob . parentZone . lastContractDrop  =  System . currentTimeMillis ( ) ;   
			
		
	
		
			
				
					        int  roll  =  ( table  = =  1900  | |  table  = =  1500 )  ?  73  :  99 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  roll  =  99 ;   
			
		
	
		
			
				
					        if  ( table  = =  1900  | |  table  = =  1500 )   
			
		
	
		
			
				
					            roll  =  73 ;   
			
		
	
		
			
				
					        GenTableEntry  selectedRow  =  GenTableEntry . rollTable ( table ,  roll ,  1 . 0f ) ;   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )  {   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  itemTableId  =  selectedRow . itemTableID ;   
			
		
	
		
			
				
					        if  ( ! _itemTables . containsKey ( itemTableId ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( _itemTables . containsKey ( itemTableId )  = =  false )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( itemTableId ,  ThreadLocalRandom . current ( ) . nextInt ( 75 , 321 ) ) ;   
			
		
	
		
			
				
					        if  ( tableRow  = =  null )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  itemUUID  =  tableRow . cacheID ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( itemTableId ,  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  321 ) ) ;   
			
		
	
		
			
				
					        if  ( tableRow  = =  null  | |  tableRow . cacheID  = =  0 )  {   
			
		
	
		
			
				
					        if  ( itemUUID  = =  0 )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        return  new  MobLoot ( mob ,  ItemBase . getItemBase ( tableRow . cacheID ) ,  false ) ;   
			
		
	
		
			
				
					        MobLoot  outItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  false ) ;   
			
		
	
		
			
				
					        if ( outItem  ! =  null )  {   
			
		
	
		
			
				
					            mob . contractCounter  =  0 ;   
			
		
	
		
			
				
					            return  outItem ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        return  null ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  MobLoot  rollForRune ( int  table ,  Mob  mob ) {   
			
		
	
		
			
				
					        mob . parentZone . lastRuneDrop  =  System . currentTimeMillis ( ) ;   
			
		
	
		
			
				
					        int  roll  =  ( table  = =  1900  | |  table  = =  1500 )  ?  77  :  97 ;   
			
		
	
		
			
				
					        int  roll  =  97 ;   
			
		
	
		
			
				
					        if ( table  = =  1900  | |  table  = =  1500 ) {   
			
		
	
		
			
				
					            roll  =  77 ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        GenTableEntry  selectedRow  =  GenTableEntry . rollTable ( table ,  roll ,  1 . 0f ) ;   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )  {   
			
		
	
		
			
				
					        if  ( selectedRow  = =  null )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        int  itemTableId  =  selectedRow . itemTableID ;   
			
		
	
		
			
				
					        if  ( ! _itemTables . containsKey ( itemTableId ) )  {   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( itemTableId ,  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  321 ) ) ;   
			
		
	
		
			
				
					        if  ( tableRow  = =  null  | |  tableRow . cacheID  = =  0 )  {   
			
		
	
		
			
				
					        if  ( _itemTables . containsKey ( itemTableId )  = =  false )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( itemTableId ,  ThreadLocalRandom . current ( ) . nextInt ( 75 , 321 ) ) ;   
			
		
	
		
			
				
					        if  ( tableRow  = =  null )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        return  new  MobLoot ( mob ,  ItemBase . getItemBase ( tableRow . cacheID ) ,  false ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					        int  itemUUID  =  tableRow . cacheID ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  MobLoot  rollForGlass ( Mob  mob )  {   
			
		
	
		
			
				
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( 126 ,  ThreadLocalRandom . current ( ) . nextInt ( 1 ,  321 ) ) ;   
			
		
	
		
			
				
					        if  ( tableRow  ! =  null  & &  tableRow . cacheID  ! =  0 )  {   
			
		
	
		
			
				
					            return  new  MobLoot ( mob ,  ItemBase . getItemBase ( tableRow . cacheID ) ,  false ) ;   
			
		
	
		
			
				
					        if  ( itemUUID  = =  0 )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        MobLoot  outItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  false ) ;   
			
		
	
		
			
				
					        if ( outItem  ! =  null )  {   
			
		
	
		
			
				
					            mob . runeCounter  =  0 ;   
			
		
	
		
			
				
					            return  outItem ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        return  null ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    public  static  MobLoot  rollForGlass (  Mob  mob ) {   
			
		
	
		
			
				
					        ItemTableEntry  tableRow  =  ItemTableEntry . rollTable ( 126 ,  ThreadLocalRandom . current ( ) . nextInt ( 220 , 321 ) ) ;   
			
		
	
		
			
				
					        if  ( tableRow  = =  null )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  ItemBase  getRandomVorgItem ( int  maxRandom ,  int . . .  itemBaseIDs )  {   
			
		
	
		
			
				
					        int  random  =  ThreadLocalRandom . current ( ) . nextInt ( maxRandom ) ;   
			
		
	
		
			
				
					        int  index  =  random  /  ( maxRandom  /  itemBaseIDs . length ) ;   
			
		
	
		
			
				
					        if  ( index  > =  itemBaseIDs . length )  {   
			
		
	
		
			
				
					            index  =  itemBaseIDs . length  -  1 ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        return  ItemBase . getItemBase ( itemBaseIDs [ index ] ) ;   
			
		
	
		
			
				
					        int  itemUUID  =  tableRow . cacheID ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( itemUUID  = =  0 )   
			
		
	
		
			
				
					            return  null ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        MobLoot  outItem  =  new  MobLoot ( mob ,  ItemBase . getItemBase ( itemUUID ) ,  false ) ;   
			
		
	
		
			
				
					        if ( outItem  ! =  null )   
			
		
	
		
			
				
					            return  outItem ;   
			
		
	
		
			
				
					        return  null ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  ItemBase  getRandomVorgCloth ( ) {   
			
		
	
		
			
				
					        return  getRandomVorgItem ( 100 ,  27600 ,  188700 ,  188720 ,  189550 ,  189560 ) ;   
			
		
	
		
			
				
					        int  random  =  ThreadLocalRandom . current ( ) . nextInt ( 100 ) ;   
			
		
	
		
			
				
					        if ( random  <  20 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 27600 ) ;   
			
		
	
		
			
				
					        if ( random  >  20  & &  random  <  40 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188700 ) ;   
			
		
	
		
			
				
					        if ( random  >  40  & &  random  <  60 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188720 ) ;   
			
		
	
		
			
				
					        if ( random  >  60  & &  random  <  80 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189550 ) ;   
			
		
	
		
			
				
					        if ( random  >  80 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189560 ) ;   
			
		
	
		
			
				
					        return  null ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  ItemBase  getRandomVorgLA ( ) {   
			
		
	
		
			
				
					        return  getRandomVorgItem ( 160 ,  27550 ,  27560 ,  189100 ,  189110 ,  189120 ,  189130 ,  189140 ,  189150 ) ;   
			
		
	
		
			
				
					        int  random  =  ThreadLocalRandom . current ( ) . nextInt ( 160 ) ;   
			
		
	
		
			
				
					        if ( random  <  20 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 27550 ) ;   
			
		
	
		
			
				
					        if ( random  >  20  & &  random  <  40 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 27560 ) ;   
			
		
	
		
			
				
					        if ( random  >  40  & &  random  <  60 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189100 ) ;   
			
		
	
		
			
				
					        if ( random  >  60  & &  random  <  80 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189110 ) ;   
			
		
	
		
			
				
					        if ( random  >  80  & &  random  <  100 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189120 ) ;   
			
		
	
		
			
				
					        if ( random  >  100  & &  random  <  120 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189130 ) ;   
			
		
	
		
			
				
					        if ( random  >  120  & &  random  <  140 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189140 ) ;   
			
		
	
		
			
				
					        if ( random  >  140 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189150 ) ;   
			
		
	
		
			
				
					        return  null ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  ItemBase  getRandomVorgMA ( ) {   
			
		
	
		
			
				
					        return  getRandomVorgItem ( 160 ,  27570 ,  188900 ,  188910 ,  188920 ,  188930 ,  188940 ,  188950 ,  189500 ) ;   
			
		
	
		
			
				
					        int  random  =  ThreadLocalRandom . current ( ) . nextInt ( 160 ) ;   
			
		
	
		
			
				
					        if ( random  <  20 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 27570 ) ;   
			
		
	
		
			
				
					        if ( random  >  20  & &  random  <  40 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188900 ) ;   
			
		
	
		
			
				
					        if ( random  >  40  & &  random  <  60 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188910 ) ;   
			
		
	
		
			
				
					        if ( random  >  60  & &  random  <  80 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188920 ) ;   
			
		
	
		
			
				
					        if ( random  >  80  & &  random  <  100 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188930 ) ;   
			
		
	
		
			
				
					        if ( random  >  100  & &  random  <  120 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188940 ) ;   
			
		
	
		
			
				
					        if ( random  >  120  & &  random  <  140 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188950 ) ;   
			
		
	
		
			
				
					        if ( random  >  140 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189500 ) ;   
			
		
	
		
			
				
					        return  null ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  ItemBase  getRandomVorgHA ( ) {   
			
		
	
		
			
				
					        return  getRandomVorgItem ( 180 ,  27580 ,  27590 ,  188500 ,  188510 ,  188520 ,  188530 ,  188540 ,  188550 ,  189510 ) ;   
			
		
	
		
			
				
					        int  random  =  ThreadLocalRandom . current ( ) . nextInt ( 180 ) ;   
			
		
	
		
			
				
					        if ( random  <  20 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 27580 ) ;   
			
		
	
		
			
				
					        if ( random  >  20  & &  random  <  40 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 27590 ) ;   
			
		
	
		
			
				
					        if ( random  >  40  & &  random  <  60 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188500 ) ;   
			
		
	
		
			
				
					        if ( random  >  60  & &  random  <  80 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188510 ) ;   
			
		
	
		
			
				
					        if ( random  >  80  & &  random  <  100 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188520 ) ;   
			
		
	
		
			
				
					        if ( random  >  100  & &  random  <  120 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188530 ) ;   
			
		
	
		
			
				
					        if ( random  >  120  & &  random  <  140 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188540 ) ;   
			
		
	
		
			
				
					        if ( random  >  140  & &  random  <  160 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 188550 ) ;   
			
		
	
		
			
				
					        if ( random  >  160 )   
			
		
	
		
			
				
					            return  ItemBase . getItemBase ( 189510 ) ;   
			
		
	
		
			
				
					        return  null ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					}