forked from MagicBane/Server
				
			
				 3 changed files with 167 additions and 170 deletions
			
			
		| @ -0,0 +1,166 @@@@ -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<Item> GlassItems = new ArrayList<Item>(); | ||||
|         ArrayList<Item> Resources = new ArrayList<Item>(); | ||||
|         ArrayList<Item> Runes = new ArrayList<Item>(); | ||||
|         ArrayList<Item> Contracts = new ArrayList<Item>(); | ||||
|         ArrayList<Item> Offerings = new ArrayList<Item>(); | ||||
|         ArrayList<Item> OtherDrops = new ArrayList<Item>(); | ||||
|         ArrayList<Item> EquipmentDrops = new ArrayList<Item>(); | ||||
|         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'"; | ||||
|     } | ||||
| } | ||||
| @ -1,169 +0,0 @@@@ -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<Item> GlassItems = new ArrayList<Item>(); | ||||
|                 ArrayList<Item> Resources = new ArrayList<Item>(); | ||||
|                 ArrayList<Item> Runes = new ArrayList<Item>(); | ||||
|                 ArrayList<Item> Contracts = new ArrayList<Item>(); | ||||
|                 ArrayList<Item> Offerings = new ArrayList<Item>(); | ||||
|                 ArrayList<Item> OtherDrops = new ArrayList<Item>(); | ||||
|                 ArrayList<Item> EquipmentDrops = new ArrayList<Item>(); | ||||
|                 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'"; | ||||
|     } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue