Bootysim displays chance.
This commit is contained in:
@@ -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'";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -57,7 +57,7 @@ public enum DevCmdManager {
|
|||||||
DevCmdManager.registerDevCmd(new PrintLocationCmd());
|
DevCmdManager.registerDevCmd(new PrintLocationCmd());
|
||||||
DevCmdManager.registerDevCmd(new InfoCmd());
|
DevCmdManager.registerDevCmd(new InfoCmd());
|
||||||
DevCmdManager.registerDevCmd(new aiInfoCmd());
|
DevCmdManager.registerDevCmd(new aiInfoCmd());
|
||||||
DevCmdManager.registerDevCmd(new simulateBootyCmd());
|
DevCmdManager.registerDevCmd(new SimulateBootyCmd());
|
||||||
DevCmdManager.registerDevCmd(new GetHeightCmd());
|
DevCmdManager.registerDevCmd(new GetHeightCmd());
|
||||||
|
|
||||||
// Tester
|
// Tester
|
||||||
|
|||||||
Reference in New Issue
Block a user