You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							254 lines
						
					
					
						
							9.0 KiB
						
					
					
				
			
		
		
	
	
							254 lines
						
					
					
						
							9.0 KiB
						
					
					
				| // • ▌ ▄ ·.  ▄▄▄·  ▄▄ • ▪   ▄▄· ▄▄▄▄·  ▄▄▄·  ▐▄▄▄  ▄▄▄ . | |
| // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· | |
| // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ | |
| // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ | |
| // ▀▀  █▪▀▀▀ ▀  ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀  ▀  ▀ ▀▀  █▪ ▀▀▀ | |
| //      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]'"; | |
|     } | |
|  | |
| }
 | |
| 
 |