diff --git a/src/engine/devcmd/cmds/simulateBootyCmd.java b/src/engine/devcmd/cmds/simulateBootyCmd.java index 91810521..a06316b7 100644 --- a/src/engine/devcmd/cmds/simulateBootyCmd.java +++ b/src/engine/devcmd/cmds/simulateBootyCmd.java @@ -24,9 +24,19 @@ 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); @@ -45,13 +55,10 @@ public class simulateBootyCmd extends AbstractDevCmd { + " Table ID: " + pc.getLastTargetID()); return; } - - Enum.GameObjectType objType = target.getObjectType(); - int objectUUID = target.getObjectUUID(); String output; - output = "Loot Simulation:" + newline; + output = "Booty Simulation:" + newline; switch (objType) { case Building: @@ -74,49 +81,70 @@ public class simulateBootyCmd extends AbstractDevCmd { ArrayList Offerings = new ArrayList(); ArrayList OtherDrops = new ArrayList(); int failures = 0; - for(int i = 0; i < 100; ++i) { - + //for(int i = 0; i < iterations; ++i) { + ArrayList simulatedBooty = new ArrayList<>(); + if(isZone == false){ + //simulate individual mob booty + simulatedBooty = simulateMobBooty(mob, iterations); + } + else { + simulatedBooty = simulateZoneBooty(mob.getParentZone(), iterations); + } try { - 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); - break; - case OFFERING: //OFFERING - Offerings.add(lootItem); - break; - case RESOURCE: //RESOURCE - Resources.add(lootItem); - break; - case RUNE: //RUNE - Runes.add(lootItem); - break; - case WEAPON: //WEAPON - if (lootItem.getItemBase().isGlass()) { - GlassItems.add(lootItem); - } else { - OtherDrops.add(lootItem); - } - break; - default: - OtherDrops.add(lootItem); - break; + for (Item lootItem : simulatedBooty) { + switch (lootItem.getItemBase().getType()) { + case CONTRACT: //CONTRACT + Contracts.add(lootItem); + break; + case OFFERING: //OFFERING + Offerings.add(lootItem); + break; + case RESOURCE: //RESOURCE + Resources.add(lootItem); + break; + case RUNE: //RUNE + Runes.add(lootItem); + break; + case WEAPON: //WEAPON + if (lootItem.getItemBase().isGlass()) { + GlassItems.add(lootItem); + } else { + OtherDrops.add(lootItem); } + break; + default: + OtherDrops.add(lootItem); + break; + } } } catch (Exception ex) { failures++; } - } + //} 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 += "OTHER ITEMS DROPPED: " + OtherDrops.size() + newline; output += "FAILED ROLLS: " + failures + newline; + + output += "Glass Drops:" + newline; + for(Item glassItem : GlassItems){ + output += glassItem.getName() + newline; + } + output += "Rune Drops:" + newline; + for(Item runeItem : Runes){ + output += runeItem.getName() + newline; + } + output += "Contract Drops:" + newline; + for(Item contractItem : Contracts){ + output += contractItem.getName() + newline; + } + output += "Resource Drops:" + newline; + for(Item resourceItem : Contracts){ + output += resourceItem.getName() + newline; + } break; } @@ -125,69 +153,33 @@ public class simulateBootyCmd extends AbstractDevCmd { @Override protected String _getHelpString() { - return "Gets information on an Object."; + return "simulates mob loot X amount of times for mob or zone"; } @Override protected String _getUsageString() { - return "' /info targetID'"; + return "' ./simluatebooty "; } - public static ArrayList SimulateMobLoot(Mob mob){ - ArrayList outList = new ArrayList<>(); - //determine if mob is in hotzone - boolean inHotzone = ZoneManager.inHotZone(mob.getLoc()); - //get multiplier form config manager - float multiplier = Float.parseFloat(ConfigManager.MB_NORMAL_DROP_RATE.getValue()); - if (inHotzone) { - //if mob is inside hotzone, use the hotzone gold multiplier form the config instead - multiplier = Float.parseFloat(ConfigManager.MB_HOTZONE_DROP_RATE.getValue()); - } - //simulate loot 100 times - for(int i = 0; i < 5; ++i) { - //iterate the booty sets - if (mob.getMobBase().bootySet != 0 && NPCManager._bootySetMap.containsKey(mob.getMobBase().bootySet)) { - try { - ArrayList testList = RunBootySet(NPCManager._bootySetMap.get(mob.getMobBase().bootySet), mob, multiplier, inHotzone); - for (MobLoot lootItem : testList) { - outList.add((lootItem)); - } - }catch(Exception ex){ - } + public static ArrayList simulateMobBooty(Mob mob, int iterations){ + ArrayList producedBooty = new ArrayList<>(); + for(int i = 0; i < iterations; ++i) { + mob.loadInventory(); + for (Item lootItem : mob.getCharItemManager().getInventory()) { + producedBooty.add(lootItem); } } - return outList; + return producedBooty; } - private static ArrayList RunBootySet(ArrayList entries, Mob mob, float multiplier, boolean inHotzone) { - ArrayList outList = new ArrayList<>(); - for (BootySetEntry bse : entries) { - switch (bse.bootyType) { - case "GOLD": - - break; - case "LOOT": - if (ThreadLocalRandom.current().nextInt(100) <= (bse.dropChance * multiplier)) { - //early exit, failed to hit minimum chance roll - break; - } - //iterate the booty tables and add items to mob inventory - MobLoot toAdd = getGenTableItem(bse.lootTable, mob); - if (toAdd != null) { - //mob.getCharItemManager().addItemToInventory(toAdd); - outList.add(toAdd); - } - if (inHotzone) { - int lootTableID = bse.lootTable + 1; - MobLoot toAddHZ = getGenTableItem(lootTableID, mob); - if (toAddHZ != null) - //mob.getCharItemManager().addItemToInventory(toAddHZ); - outList.add(toAdd); - } - break; - case "ITEM": - - break; + public static ArrayList simulateZoneBooty(Zone zone, int iterations){ + ArrayList 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 outList; + return producedBooty; } }