@ -1,15 +1,21 @@
				@@ -1,15 +1,21 @@
					 
			
		
	
		
			
				
					package  engine.devcmd.cmds ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					import  engine.Enum ;  
			
		
	
		
			
				
					import  engine.devcmd.AbstractDevCmd ;  
			
		
	
		
			
				
					import  engine.gameManager.* ;  
			
		
	
		
			
				
					import  engine.objects.* ;  
			
		
	
		
			
				
					import  java.util.ArrayList ;  
			
		
	
		
			
				
					import  java.util.concurrent.ThreadLocalRandom ;  
			
		
	
		
			
				
					import static  engine.loot.LootManager.getGenTableItem ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					public  class  simulateBootyCmd   extends  AbstractDevCmd  {  
			
		
	
		
			
				
					    public  simulateBootyCmd ( )  {   
			
		
	
		
			
				
					        super ( "simulatebooty" ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    @Override   
			
		
	
		
			
				
					    protected  void  _doCmd ( PlayerCharacter  pc ,  String [ ]  words ,  AbstractGameObject  target )  {   
			
		
	
		
			
				
					    protected  void  _doCmd ( PlayerCharacter  pc ,  String [ ]  words ,   
			
		
	
		
			
				
					                          AbstractGameObject  target )  {   
			
		
	
		
			
				
					        // Arg Count Check
   
			
		
	
		
			
				
					        if  ( words . length  ! =  1 )  {   
			
		
	
		
			
				
					            this . sendUsage ( pc ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -18,19 +24,9 @@ public class simulateBootyCmd  extends AbstractDevCmd {
				@@ -18,19 +24,9 @@ public class simulateBootyCmd  extends AbstractDevCmd {
					 
			
		
	
		
			
				
					        if  ( pc  = =  null )  {   
			
		
	
		
			
				
					            return ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        int  iterations  =  100 ;   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					        String  newline  =  "\r\n " ;   
			
		
	
		
			
				
					        if ( words [ 1 ] . length ( )  >  0 ) {   
			
		
	
		
			
				
					            try {   
			
		
	
		
			
				
					                iterations  =  Integer . parseInt ( words [ 1 ] ) ;   
			
		
	
		
			
				
					            } catch ( Exception  ex ) {   
			
		
	
		
			
				
					                iterations  =  100 ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        boolean  isZone  =  false ;   
			
		
	
		
			
				
					        if ( words [ 2 ] . length ( )  >  0  & &  words [ 2 ] . toLowerCase ( ) . equals ( "zone" ) ) {   
			
		
	
		
			
				
					            isZone  =  true ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        try  {   
			
		
	
		
			
				
					            int  targetID  =  Integer . parseInt ( words [ 0 ] ) ;   
			
		
	
		
			
				
					            Building  b  =  BuildingManager . getBuilding ( targetID ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -41,6 +37,7 @@ public class simulateBootyCmd  extends AbstractDevCmd {
				@@ -41,6 +37,7 @@ public class simulateBootyCmd  extends AbstractDevCmd {
					 
			
		
	
		
			
				
					                target  =  b ;   
			
		
	
		
			
				
					        }  catch  ( Exception  e )  {   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( target  = =  null )  {   
			
		
	
		
			
				
					            throwbackError ( pc ,  "Target is unknown or of an invalid type."   
			
		
	
		
			
				
					                    +  newline  +  "Type ID: 0x"   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -48,17 +45,26 @@ public class simulateBootyCmd  extends AbstractDevCmd {
				@@ -48,17 +45,26 @@ public class simulateBootyCmd  extends AbstractDevCmd {
					 
			
		
	
		
			
				
					                    +  "   Table ID: "  +  pc . getLastTargetID ( ) ) ;   
			
		
	
		
			
				
					            return ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        Enum . GameObjectType  objType  =  target . getObjectType ( ) ;   
			
		
	
		
			
				
					        int  objectUUID  =  target . getObjectUUID ( ) ;   
			
		
	
		
			
				
					        String  output ;   
			
		
	
		
			
				
					        output  =  "Booty Simulation:"  +  newline ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        output  =  "Loot Simulation:"  +  newline ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        switch  ( objType )  {   
			
		
	
		
			
				
					            case  Building :   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  PlayerCharacter :   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            case  NPC :   
			
		
	
		
			
				
					            default :   
			
		
	
		
			
				
					                output  + =  "Target is Not a Mob! Please Select a Mob to Simulate Booty"  +  newline ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            case  Mob :   
			
		
	
		
			
				
					                Mob  mob  =  ( Mob )  target ;   
			
		
	
		
			
				
					                ArrayList < Item >  GlassItems  =  new  ArrayList < Item > ( ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -68,18 +74,13 @@ public class simulateBootyCmd  extends AbstractDevCmd {
				@@ -68,18 +74,13 @@ public class simulateBootyCmd  extends AbstractDevCmd {
					 
			
		
	
		
			
				
					                ArrayList < Item >  Offerings  =  new  ArrayList < Item > ( ) ;   
			
		
	
		
			
				
					                ArrayList < Item >  OtherDrops  =  new  ArrayList < Item > ( ) ;   
			
		
	
		
			
				
					                int  failures  =  0 ;   
			
		
	
		
			
				
					                    ArrayList < Item >  simulatedBooty  =  new  ArrayList < > ( ) ;   
			
		
	
		
			
				
					                    if ( isZone  = =  false ) {   
			
		
	
		
			
				
					                        //simulate individual mob booty
   
			
		
	
		
			
				
					                        output  + =  "Simulated "  +  iterations  +  " Iterations 0n "  +  mob . parentZone . zoneMobSet . size ( )  +  " Mobs."  +  newline ;   
			
		
	
		
			
				
					                        simulatedBooty  =  simulateMobBooty ( mob ,  iterations ) ;   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                    else  {   
			
		
	
		
			
				
					                        output  + =  "Simulated "  +  iterations  +  " Iterations 0n "  +  mob . getName ( )  +  newline ;   
			
		
	
		
			
				
					                        simulatedBooty  =  simulateZoneBooty ( mob . getParentZone ( ) ,  iterations ) ;   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                for ( int  i  =  0 ;  i  <  100 ;  + + i )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    try  {   
			
		
	
		
			
				
					                        for  ( Item  lootItem  :  simulatedBooty )  {   
			
		
	
		
			
				
					                        mob . loadInventory ( ) ;   
			
		
	
		
			
				
					                        for  ( Item  lootItem  :  mob . getCharItemManager ( ) . getInventory ( ) )  {   
			
		
	
		
			
				
					                            ItemBase  ib  =  lootItem . getItemBase ( ) ;   
			
		
	
		
			
				
					                            int  ordinal  =  ib . getType ( ) . ordinal ( ) ;   
			
		
	
		
			
				
					                            switch  ( lootItem . getItemBase ( ) . getType ( ) )  {   
			
		
	
		
			
				
					                                case  CONTRACT :  //CONTRACT
   
			
		
	
		
			
				
					                                    Contracts . add ( lootItem ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -108,58 +109,27 @@ public class simulateBootyCmd  extends AbstractDevCmd {
				@@ -108,58 +109,27 @@ public class simulateBootyCmd  extends AbstractDevCmd {
					 
			
		
	
		
			
				
					                    }  catch  ( Exception  ex )  {   
			
		
	
		
			
				
					                        failures + + ;   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                    output  + =  "Time Required To Gain Simulated Booty: "  +  mob . getMobBase ( ) . getSpawnTime ( )  *  iterations  +  " Seconds"  +  newline ;   
			
		
	
		
			
				
					                    output  + =  "Glass Drops:"  +  GlassItems . size ( )  +  newline ;   
			
		
	
		
			
				
					                for ( Item  glassItem  :  GlassItems ) {   
			
		
	
		
			
				
					                    output  + =  glassItem . getName ( )  +  newline ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                    output  + =  "Rune Drops:"  +  Runes . size ( )  +  newline ;   
			
		
	
		
			
				
					                for ( Item  runeItem  :  Runes ) {   
			
		
	
		
			
				
					                    output  + =  runeItem . getName ( )  +  newline ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                    output  + =  "Contract Drops:"  +  Contracts . size ( )  +  newline ;   
			
		
	
		
			
				
					                for ( Item  contractItem  :  Contracts ) {   
			
		
	
		
			
				
					                    output  + =  contractItem . getName ( )  +  newline ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                    output  + =  "Resource Drops:"  +  Resources . size ( )  +  newline ;   
			
		
	
		
			
				
					                for ( Item  resourceItem  :  Contracts ) {   
			
		
	
		
			
				
					                    output  + =  resourceItem . getName ( )  +  newline ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                    output  + =  "OFFERINGS DROPPED: "  +  Offerings . size ( )  +  newline ;   
			
		
	
		
			
				
					                    output  + =  "OTHER ITEMS DROPPED: "  +  OtherDrops . size ( )  +  newline ;   
			
		
	
		
			
				
					                    output  + =  "FAILED ROLLS: "  +  failures  +  newline ;   
			
		
	
		
			
				
					                    break ;   
			
		
	
		
			
				
					                output  + =  "GLASS ITEMS DROPPED: "  +  GlassItems . size ( )  +  newline ;   
			
		
	
		
			
				
					                output  + =  "RESOURCE STACKS DROPPED: "  +  Resources . size ( )  +  newline ;   
			
		
	
		
			
				
					                output  + =  "RUNES DROPPED: "  +  Runes . size ( )  +  newline ;   
			
		
	
		
			
				
					                output  + =  "CONTRACTS DROPPED: "  +  Contracts . size ( )  +  newline ;   
			
		
	
		
			
				
					                output  + =  "OFFERINGS DROPPED: "  +  Offerings . size ( )  +  newline ;   
			
		
	
		
			
				
					                output  + =  "OTHERS DROPPED: "  +  OtherDrops . size ( )  +  newline ;   
			
		
	
		
			
				
					                output  + =  "FAILED ROLLS: "  +  failures  +  newline ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        throwbackInfo ( pc ,  output ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    @Override   
			
		
	
		
			
				
					    protected  String  _getHelpString ( )  {   
			
		
	
		
			
				
					        return  "simulates mob loot X amount of times for mob or zone " ;   
			
		
	
		
			
				
					        return  "Gets information on an Object." ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    @Override   
			
		
	
		
			
				
					    protected  String  _getUsageString ( )  {   
			
		
	
		
			
				
					        return  "' ./simluatebooty <ITERATIONS> <zone or blank>" ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    public  static  ArrayList < Item >  simulateMobBooty ( Mob  mob ,  int  iterations ) {   
			
		
	
		
			
				
					        ArrayList < Item >  producedBooty  =  new  ArrayList < > ( ) ;   
			
		
	
		
			
				
					        for ( int  i  =  0 ;  i  <  iterations ;  + + i )  {   
			
		
	
		
			
				
					            mob . loadInventory ( ) ;   
			
		
	
		
			
				
					            for  ( Item  lootItem  :  mob . getCharItemManager ( ) . getInventory ( ) )  {   
			
		
	
		
			
				
					                producedBooty . add ( lootItem ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        return  producedBooty ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    public  static  ArrayList < Item >  simulateZoneBooty ( Zone  zone ,  int  iterations ) {   
			
		
	
		
			
				
					        ArrayList < Item >  producedBooty  =  new  ArrayList < > ( ) ;   
			
		
	
		
			
				
					        for ( Mob  mob  :  zone . zoneMobSet )  {   
			
		
	
		
			
				
					            for  ( int  i  =  0 ;  i  <  iterations ;  + + i )  {   
			
		
	
		
			
				
					                mob . loadInventory ( ) ;   
			
		
	
		
			
				
					                for  ( Item  lootItem  :  mob . getCharItemManager ( ) . getInventory ( ) )  {   
			
		
	
		
			
				
					                    producedBooty . add ( lootItem ) ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        return  producedBooty ;   
			
		
	
		
			
				
					        return  "' /info targetID'" ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					}