// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2022 // www.magicbane.com package engine.devcmd.cmds; import engine.Enum.ItemContainerType; import engine.Enum.ItemType; import engine.Enum.OwnerType; import engine.devcmd.AbstractDevCmd; import engine.gameManager.DbManager; import engine.objects.*; import engine.powers.EffectsBase; import java.util.ArrayList; /** * @author Eighty */ public class MakeItemCmd extends AbstractDevCmd { public MakeItemCmd() { super("makeitem"); } @Override protected void _doCmd(PlayerCharacter pc, String[] words, AbstractGameObject target) { if (words[0].equals("resources")) { for (int ibID : Warehouse.getMaxResources().keySet()) { if (ibID == 7) continue; ItemBase ib = ItemBase.getItemBase(ibID); short weight = ib.getWeight(); if (!pc.getCharItemManager().hasRoomInventory(weight)) { throwbackError(pc, "Not enough room in inventory for any more of this item"); pc.getCharItemManager().updateInventory(); return; } boolean worked = false; Item item = new Item(ib, pc.getObjectUUID(), OwnerType.PlayerCharacter, (byte) 0, (byte) 0, (short) ib.getDurability(), (short) ib.getDurability(), true, false, ItemContainerType.INVENTORY, (byte) 0, new ArrayList<>(), ""); item.setNumOfItems(Warehouse.getMaxResources().get(ibID)); try { item = DbManager.ItemQueries.ADD_ITEM(item); worked = true; } catch (Exception e) { throwbackError(pc, "DB error 1: Unable to create item. " + e.getMessage()); return; } if (item == null || !worked) { throwbackError(pc, "DB error 2: Unable to create item."); return; } //add item to inventory pc.getCharItemManager().addItemToInventory(item); } return; } if (words.length < 3 || words.length > 5) { this.sendUsage(pc); return; } int quantity = 1; if (words.length > 3) { try { quantity = Integer.parseInt(words[3]); } catch (NumberFormatException e) { throwbackError(pc, "Quantity must be a number, " + words[3] + " is invalid"); return; } if (quantity < 1 || quantity > 100) quantity = 1; } int numItems = 1; if (words.length > 4) { try { numItems = Integer.parseInt(words[4]); } catch (NumberFormatException e) { throwbackError(pc, "numResources must be a number, " + words[4] + " is invalid"); return; } numItems = (numItems < 1) ? 1 : numItems; numItems = (numItems > 5000) ? 5000 : numItems; } int itembaseID; try { itembaseID = Integer.parseInt(words[0]); } catch (NumberFormatException e) { itembaseID = ItemBase.getIDByName(words[0].toLowerCase()); if (itembaseID == 0) { throwbackError(pc, "Supplied type " + words[0] + " failed to parse to an Integer"); return; } } catch (Exception e) { throwbackError(pc, "An unknown exception occurred when trying to use createitem command for type " + words[0]); return; // NaN } if (itembaseID == 7) { this.throwbackInfo(pc, "use /addgold to add gold."); return; } String prefix = ""; String suffix = ""; if (!(words[1].equals("0"))) { prefix = words[1]; if (!(prefix.substring(0, 4).equals("PRE-"))) prefix = EffectsBase.getItemEffectsByName(prefix.toLowerCase()); if (!(prefix.substring(0, 4).equals("PRE-"))) { throwbackError(pc, "Invalid Prefix. Prefix must consist of PRE-001 to PRE-334 or 0 for no Prefix."); return; } boolean validInt = false; try { int num = Integer.parseInt(prefix.substring(4, 7)); if (num > 0 && num < 335) validInt = true; } catch (Exception e) { throwbackError(pc, "error parsing number " + prefix); } if (!validInt) { throwbackError(pc, "Invalid Prefix. Prefix must consist of PRE-001 to PRE-334 or 0 for no Prefix."); return; } } if (!(words[2].equals("0"))) { suffix = words[2]; if (!(suffix.substring(0, 4).equals("SUF-"))) suffix = EffectsBase.getItemEffectsByName(suffix.toLowerCase()); if (!(suffix.substring(0, 4).equals("SUF-"))) { throwbackError(pc, "Invalid Suffix. Suffix must consist of SUF-001 to SUF-328 or 0 for no Suffix."); return; } boolean validInt = false; try { int num = Integer.parseInt(suffix.substring(4, 7)); if (num > 0 && num < 329) validInt = true; } catch (Exception e) { throwbackError(pc, "error parsing number " + suffix); } if (!validInt) { throwbackError(pc, "Invalid Suffix. Suffix must consist of SUF-001 to SUF-328 or 0 for no Suffix."); return; } } ItemBase ib = ItemBase.getItemBase(itembaseID); if (ib == null) { throwbackError(pc, "Unable to find itembase of ID " + itembaseID); return; } if ((numItems > 1) && (ib.getType().equals(ItemType.RESOURCE) == false) && (ib.getType().equals(ItemType.OFFERING)) == false) numItems = 1; CharacterItemManager cim = pc.getCharItemManager(); if (cim == null) { throwbackError(pc, "Unable to find the character item manager for player " + pc.getFirstName() + '.'); return; } byte charges = (byte) ib.getNumCharges(); short dur = (short) ib.getDurability(); String result = ""; for (int i = 0; i < quantity; i++) { short weight = ib.getWeight(); if (!cim.hasRoomInventory(weight)) { throwbackError(pc, "Not enough room in inventory for any more of this item. " + i + " produced."); if (i > 0) cim.updateInventory(); return; } boolean worked = false; Item item = new Item(ib, pc.getObjectUUID(), OwnerType.PlayerCharacter, charges, charges, dur, dur, true, false, ItemContainerType.INVENTORY, (byte) 0, new ArrayList<>(), ""); if (numItems > 1) item.setNumOfItems(numItems); try { item = DbManager.ItemQueries.ADD_ITEM(item); worked = true; } catch (Exception e) { throwbackError(pc, "DB error 1: Unable to create item. " + e.getMessage()); return; } if (item == null || !worked) { throwbackError(pc, "DB error 2: Unable to create item."); return; } //create prefix if (!prefix.isEmpty()) item.addPermanentEnchantmentForDev(prefix, 0); //create suffix if (!suffix.isEmpty()) item.addPermanentEnchantmentForDev(suffix, 0); //add item to inventory cim.addItemToInventory(item); result += " " + item.getObjectUUID(); } this.setResult(result); cim.updateInventory(); } @Override protected String _getHelpString() { return "Creates an item of type 'itembaseID' with a prefix and suffix"; } @Override protected String _getUsageString() { return "'./makeitem itembaseID PrefixID SuffixID [quantity] [numResources]'"; } }