forked from MagicBane/Server
				
			
				 3 changed files with 167 additions and 170 deletions
			
			
		| @ -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 @@ | |||||||
| 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