diff --git a/src/engine/devcmd/cmds/SimulateBootyCmd.java b/src/engine/devcmd/cmds/SimulateBootyCmd.java new file mode 100644 index 00000000..f988a519 --- /dev/null +++ b/src/engine/devcmd/cmds/SimulateBootyCmd.java @@ -0,0 +1,166 @@ +package engine.devcmd.cmds; + +import engine.devcmd.AbstractDevCmd; +import engine.gameManager.LootManager; +import engine.gameManager.NPCManager; +import engine.gameManager.ZoneManager; +import engine.objects.*; + +import java.util.ArrayList; +import java.util.concurrent.ThreadLocalRandom; + +public class SimulateBootyCmd extends AbstractDevCmd { + public SimulateBootyCmd() { + super("bootysim"); + } + + @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 "; + + int targetID = Integer.parseInt(words[0]); + Mob mobile = Mob.getMob(targetID); + + if (mobile == null) + throwbackError(pc, "Mobile with ID " + targetID + + " not found"); + else + target = mobile; + + + 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; + } + + String output; + + output = "Booty Simulation:" + newline; + + Mob mob = (Mob) target; + output += "Name: " + mob.getName() + newline; + output += "Special Loot:" + newline; + + if (mob.bootySet != 0) { + for (BootySetEntry entry : NPCManager._bootySetMap.get(mob.bootySet)) { + ItemBase item = ItemBase.getItemBase(entry.itemBase); + if (item != null) { + output += "[" + entry.bootyType + "] " + item.getName() + " [Chance] " + entry.dropChance + 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(); + ArrayList EquipmentDrops = new ArrayList(); + int failures = 0; + int goldAmount = 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; + case GOLD: + goldAmount += lootItem.getNumOfItems(); + break; + default: + OtherDrops.add(lootItem); + break; + } + } + } catch (Exception ex) { + failures++; + } + if (mob.getEquip() != null) { + for (MobEquipment me : mob.getEquip().values()) { + + if (me.getDropChance() == 0) + continue; + + float equipmentRoll = ThreadLocalRandom.current().nextInt(99) + 1; + float dropChance = me.getDropChance() * 100; + + if (equipmentRoll > (dropChance)) + continue; + + MobLoot ml = new MobLoot(mob, me.getItemBase(), false); + + if (ml != null) + EquipmentDrops.add(ml); + } + } + } + output += "MobBase BootySet: " + mob.getMobBase().bootySet + newline; + output += "Mob BootySet: " + mob.bootySet + newline; + output += "Tables Rolled On: " + newline; + + for (BootySetEntry entry : NPCManager._bootySetMap.get(mob.getMobBase().bootySet)) + output += "NORMAL TABLE [" + entry.bootyType + "] " + entry.lootTable + ": " + entry.dropChance * LootManager.NORMAL_DROP_RATE + newline; + + if (ZoneManager.inHotZone(mob.getLoc())) + for (BootySetEntry entry : NPCManager._bootySetMap.get(mob.getMobBase().bootySet)) + if (LootManager.generalItemTables.containsKey(entry.lootTable + 1) == true) + output += "HOTZONE TABLE [" + entry.bootyType + "] " + (entry.lootTable + 1) + ": " + entry.dropChance * LootManager.HOTZONE_DROP_RATE + 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 += "ENCHANTED ITEMS DROPPED: " + OtherDrops.size() + newline; + output += "TOTAL GOLD DROPPED: " + goldAmount + newline; + output += "EQUIPMENT DROPPED: " + EquipmentDrops.size() + newline; + output += "FAILED ROLLS: " + failures + newline; + + throwbackInfo(pc, output); + } + + @Override + protected String _getHelpString() { + return "Simulates loot drops"; + } + + @Override + protected String _getUsageString() { + return "'/bootysim targetID'"; + } +} diff --git a/src/engine/devcmd/cmds/simulateBootyCmd.java b/src/engine/devcmd/cmds/simulateBootyCmd.java deleted file mode 100644 index a27d248b..00000000 --- a/src/engine/devcmd/cmds/simulateBootyCmd.java +++ /dev/null @@ -1,169 +0,0 @@ -package engine.devcmd.cmds; - -import engine.Enum; -import engine.devcmd.AbstractDevCmd; -import engine.gameManager.BuildingManager; -import engine.gameManager.LootManager; -import engine.gameManager.NPCManager; -import engine.gameManager.ZoneManager; -import engine.objects.*; - -import java.util.ArrayList; -import java.util.concurrent.ThreadLocalRandom; - -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(); - String output; - - output = "Booty Simulation:" + newline; - - switch (objType) { - case Mob: - Mob mob = (Mob) target; - output += "Name: " + mob.getName() + newline; - output += "Special Loot:" + newline; - if (mob.bootySet != 0) { - for (BootySetEntry entry : NPCManager._bootySetMap.get(mob.bootySet)) { - ItemBase item = ItemBase.getItemBase(entry.itemBase); - if (item != null) { - output += "[" + entry.bootyType + "] " + item.getName() + " [Chance] " + entry.dropChance + 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(); - ArrayList EquipmentDrops = new ArrayList(); - int failures = 0; - int goldAmount = 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; - case GOLD: - goldAmount += lootItem.getNumOfItems(); - break; - default: - OtherDrops.add(lootItem); - break; - } - } - } catch (Exception ex) { - failures++; - } - if (mob.getEquip() != null) { - for (MobEquipment me : mob.getEquip().values()) { - - if (me.getDropChance() == 0) - continue; - - float equipmentRoll = ThreadLocalRandom.current().nextInt(99) + 1; - float dropChance = me.getDropChance() * 100; - - if (equipmentRoll > (dropChance)) - continue; - MobLoot ml = new MobLoot(mob, me.getItemBase(), false); - if (ml != null) - EquipmentDrops.add(ml); - } - } - } - output += "MobBase BootySet: " + mob.getMobBase().bootySet + newline; - output += "Mob BootySet: " + mob.bootySet + newline; - output += "Tables Rolled On: " + newline; - for (BootySetEntry entry : NPCManager._bootySetMap.get(mob.getMobBase().bootySet)) { - output += "NORMAL TABLE [" + entry.bootyType + "] " + entry.lootTable + newline; - } - if(ZoneManager.inHotZone(mob.getLoc())){ - for (BootySetEntry entry : NPCManager._bootySetMap.get(mob.getMobBase().bootySet)) { - if(LootManager.generalItemTables.containsKey(entry.lootTable + 1) == true) - output += "HOTZONE TABLE [" + entry.bootyType + "] " + (entry.lootTable + 1) + 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 += "ENCHANTED ITEMS DROPPED: " + OtherDrops.size() + newline; - output += "TOTAL GOLD DROPPED: " + goldAmount + newline; - output += "EQUIPMENT DROPPED: " + EquipmentDrops.size() + newline; - output += "FAILED ROLLS: " + failures + newline; - break; - default: - break; - } - throwbackInfo(pc, output); - } - - @Override - protected String _getHelpString() { - return "Gets information on an Object."; - } - - @Override - protected String _getUsageString() { - return "' /info targetID'"; - } -} diff --git a/src/engine/gameManager/DevCmdManager.java b/src/engine/gameManager/DevCmdManager.java index d9a37b29..d7d5cb49 100644 --- a/src/engine/gameManager/DevCmdManager.java +++ b/src/engine/gameManager/DevCmdManager.java @@ -57,7 +57,7 @@ public enum DevCmdManager { DevCmdManager.registerDevCmd(new PrintLocationCmd()); DevCmdManager.registerDevCmd(new InfoCmd()); DevCmdManager.registerDevCmd(new aiInfoCmd()); - DevCmdManager.registerDevCmd(new simulateBootyCmd()); + DevCmdManager.registerDevCmd(new SimulateBootyCmd()); DevCmdManager.registerDevCmd(new GetHeightCmd()); // Tester