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) { // Arg Count Check if (words.length != 1) { this.sendUsage(pc); return; } if (pc == null) { return; } String newline = "\r\n "; try { int targetID = Integer.parseInt(words[0]); Building b = BuildingManager.getBuilding(targetID); if (b == null) throwbackError(pc, "Building with ID " + targetID + " not found"); else target = b; } catch (Exception e) { } if (target == null) { throwbackError(pc, "Target is unknown or of an invalid type." + newline + "Type ID: 0x" + pc.getLastTargetType().toString() + " Table ID: " + pc.getLastTargetID()); return; } Enum.GameObjectType objType = target.getObjectType(); int objectUUID = target.getObjectUUID(); String output; output = "Booty Simulation:" + newline; switch (objType) { case Building: break; case PlayerCharacter: break; case NPC: break; case Mob: Mob mob = (Mob) target; output += "Name: " + mob.getName() + newline; int minRollRange = mob.getLevel() + 0 + mob.getParentZone().minLvl; int maxRollRange = (mob.getLevel() * 2) + 100 + (mob.getParentZone().maxLvl * 2); output += "Roll Range: " + minRollRange + " - " + maxRollRange + newline; ArrayList GlassItems = new ArrayList(); ArrayList Resources = new ArrayList(); ArrayList Runes = new ArrayList(); ArrayList Contracts = new ArrayList(); ArrayList Offerings = new ArrayList(); ArrayList OtherDrops = new ArrayList(); int failures = 0; for (int i = 0; i < 100; ++i) { try { mob.loadInventory(); for (Item lootItem : mob.getCharItemManager().getInventory()) { 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++; } } int respawnTime = mob.getMobBase().getSpawnTime(); if(mob.spawnTime > 0){ respawnTime = mob.spawnTime; } output += "BootySet: " + mob.getMobBase().bootySet + newline; output += "Tables Rolled On: " + newline; for(BootySetEntry entry : NPCManager._bootySetMap.get(mob.getMobBase().bootySet)){ output += "[" + entry.bootyType + "] " + entry.lootTable + newline; } output += "Time Required To Gain Simulated Booty: " + respawnTime * 100 + " Seconds" + newline; output += "GLASS DROPS: " + GlassItems.size() + newline; output += "RUNE DROPS: " + Runes.size() + newline; output += "CONTRACTS DROPS: " + Contracts.size() + newline; output += "RESOURCE DROPS: " + Resources.size() + newline; output += "OFFERINGS DROPPED: " + Offerings.size() + newline; output += "OTHER ITEMS DROPPED: " + OtherDrops.size() + newline; output += "FAILED ROLLS: " + failures + newline; break; } throwbackInfo(pc, output); } @Override protected String _getHelpString() { return "Gets information on an Object."; } @Override protected String _getUsageString() { return "' /info targetID'"; } }