package handling.channel.handler; import clientside.InnerAbillity; import clientside.InnerSkillValueHolder; import clientside.MapleCharacter; import clientside.MapleCharacterUtil; import clientside.MapleClient; import clientside.MapleDisease; import clientside.MapleQuestStatus; import clientside.MapleStat; import clientside.MapleTrait; import clientside.MonsterFamiliar; import clientside.PlayerStats; import clientside.Skill; import clientside.SkillEntry; import clientside.SkillFactory; import client.inventory.Equip; import client.inventory.Equip.ScrollResult; import client.inventory.Item; import client.inventory.ItemFlag; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; import client.inventory.MapleMount; import client.inventory.MaplePet; import clientside.MapleTrait.MapleTraitType; import constants.GameConstants; import database.DatabaseConnection; import handling.channel.ChannelServer; import handling.world.MaplePartyCharacter; import handling.world.World; import java.awt.Point; import java.awt.Rectangle; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.EnumMap; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.locks.Lock; import scripting.NPCScriptManager; import server.MapleInventoryManipulator; import static server.MapleInventoryManipulator.equip; import server.MapleItemInformationProvider; import server.MapleShopFactory; import server.MapleStatEffect; import server.RandomRewards; import server.Randomizer; import server.StructFamiliar; import server.StructItemOption; import server.StructRewardItem; import server.life.MapleLifeFactory; import server.life.MapleMonster; import server.maps.FieldLimitType; import server.maps.MapleMap; import server.maps.MapleMapItem; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; import server.maps.MapleMist; import server.maps.SavedLocationType; import server.quest.MapleQuest; import server.shops.HiredMerchant; import server.shops.IMaplePlayerShop; import tools.FileoutputUtil; import tools.Pair; import tools.data.LittleEndianAccessor; import tools.packet.CField; import tools.packet.CWvsContext; import tools.packet.CWvsContext.InventoryPacket; import tools.packet.MTSCSPacket; import tools.packet.MobPacket; import tools.packet.PetPacket; import tools.packet.PlayerShopPacket; public class InventoryHandler { public static final int OWL_ID = 2; public static final void ItemMove(LittleEndianAccessor slea, MapleClient c) { if (c.getPlayer().hasBlockedInventory()) { return; } c.getPlayer().setScrolledPosition((short) 0); slea.readInt(); MapleInventoryType type = MapleInventoryType.getByType(slea.readByte()); short src = slea.readShort(); short dst = slea.readShort(); short quantity = slea.readShort(); if ((src < 0) && (dst > 0)) { MapleInventoryManipulator.unequip(c, src, dst); } else if (dst < 0) { MapleInventoryManipulator.equip(c, src, dst); } else if (dst == 0) { if (c.getPlayer().getGMLevel() == 6 && c.getPlayer().getDGM() == 0) { c.getPlayer().dropMessage(1, "You may not do this as a GM."); c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); return; } MapleInventoryManipulator.drop(c, type, src, quantity); } else { MapleInventoryManipulator.move(c, type, src, dst); } } public static final void SwitchBag(LittleEndianAccessor slea, MapleClient c) { if (c.getPlayer().hasBlockedInventory()) { return; } c.getPlayer().setScrolledPosition((short) 0); slea.readInt(); short src = (short) slea.readInt(); short dst = (short) slea.readInt(); if ((src < 100) || (dst < 100)) { return; } MapleInventoryManipulator.move(c, MapleInventoryType.ETC, src, dst); } public static final void MoveBag(LittleEndianAccessor slea, MapleClient c) { if (c.getPlayer().hasBlockedInventory()) { return; } c.getPlayer().setScrolledPosition((short) 0); slea.readInt(); boolean srcFirst = slea.readInt() > 0; short dst = (short) slea.readInt(); if (slea.readByte() != 4) { c.getSession().write(CWvsContext.enableActions()); return; } short src = slea.readShort(); MapleInventoryManipulator.move(c, MapleInventoryType.ETC, srcFirst ? dst : src, srcFirst ? src : dst); } public static final void ItemSort(LittleEndianAccessor slea, MapleClient c) { slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); MapleInventoryType pInvType = MapleInventoryType.getByType(slea.readByte()); if ((pInvType == MapleInventoryType.UNDEFINED) || (c.getPlayer().hasBlockedInventory())) { c.getSession().write(CWvsContext.enableActions()); return; } MapleInventory pInv = c.getPlayer().getInventory(pInvType); boolean sorted = false; while (!sorted) { byte freeSlot = (byte) pInv.getNextFreeSlot(); if (freeSlot != -1) { byte itemSlot = -1; for (byte i = (byte) (freeSlot + 1); i <= pInv.getSlotLimit(); i = (byte) (i + 1)) { if (pInv.getItem((short) i) != null) { itemSlot = i; break; } } if (itemSlot > 0) { MapleInventoryManipulator.move(c, pInvType, (short) itemSlot, (short) freeSlot); } else { sorted = true; } } else { sorted = true; } } c.getSession().write(CWvsContext.finishedSort(pInvType.getType())); c.getSession().write(CWvsContext.enableActions()); } public static final void ItemGather(LittleEndianAccessor slea, MapleClient c) { slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); if (c.getPlayer().hasBlockedInventory()) { c.getSession().write(CWvsContext.enableActions()); return; } byte mode = slea.readByte(); MapleInventoryType invType = MapleInventoryType.getByType(mode); MapleInventory Inv = c.getPlayer().getInventory(invType); List<Item> itemMap = new LinkedList(); for (Item item : Inv.list()) { itemMap.add(item.copy()); } for (Item itemStats : itemMap) { MapleInventoryManipulator.removeFromSlot(c, invType, itemStats.getPosition(), itemStats.getQuantity(), true, false); } List<Item> sortedItems = sortItems(itemMap); for (Item item : sortedItems) { MapleInventoryManipulator.addFromDrop(c, item, false); } c.getSession().write(CWvsContext.finishedGather(mode)); c.getSession().write(CWvsContext.enableActions()); itemMap.clear(); sortedItems.clear(); } private static final List<Item> sortItems(final List<Item> passedMap) { final List<Integer> itemIds = new ArrayList<Integer>(); // empty list. for (Item item : passedMap) { itemIds.add(item.getItemId()); // adds all item ids to the empty list to be sorted. } Collections.sort(itemIds); // sorts item ids final List<Item> sortedList = new LinkedList<Item>(); // ordered list pl0x <3. for (Integer val : itemIds) { for (Item item : passedMap) { if (val == item.getItemId()) { // Goes through every index and finds the first value that matches sortedList.add(item); passedMap.remove(item); break; } } } return sortedList; } public static final boolean UseRewardItem(byte slot, int itemId, MapleClient c, MapleCharacter chr) { Item toUse = c.getPlayer().getInventory(GameConstants.getInventoryType(itemId)).getItem((short) slot); c.getSession().write(CWvsContext.enableActions()); if ((toUse != null) && (toUse.getQuantity() >= 1) && (toUse.getItemId() == itemId) && (!chr.hasBlockedInventory())) { if ((chr.getInventory(MapleInventoryType.EQUIP).getNextFreeSlot() > -1) && (chr.getInventory(MapleInventoryType.USE).getNextFreeSlot() > -1) && (chr.getInventory(MapleInventoryType.SETUP).getNextFreeSlot() > -1) && (chr.getInventory(MapleInventoryType.ETC).getNextFreeSlot() > -1)) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); Pair<Integer, List<StructRewardItem>> rewards = ii.getRewardItem(itemId); if ((rewards != null) && (((Integer) rewards.getLeft()).intValue() > 0)) { while (true) { for (StructRewardItem reward : rewards.getRight()) { if ((reward.prob > 0) && (Randomizer.nextInt(((Integer) rewards.getLeft()).intValue()) < reward.prob)) { if (GameConstants.getInventoryType(reward.itemid) == MapleInventoryType.EQUIP) { Item item = ii.getEquipById(reward.itemid); if (reward.period > 0L) { item.setExpiration(System.currentTimeMillis() + reward.period * 60L * 60L * 10L); } item.setGMLog(new StringBuilder().append("Reward item: ").append(itemId).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); MapleInventoryManipulator.addbyItem(c, item); } else { MapleInventoryManipulator.addById(c, reward.itemid, reward.quantity, new StringBuilder().append("Reward item: ").append(itemId).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } MapleInventoryManipulator.removeById(c, GameConstants.getInventoryType(itemId), itemId, 1, false, false); c.getSession().write(CField.EffectPacket.showRewardItemAnimation(reward.itemid, reward.effect)); chr.getMap().broadcastMessage(chr, CField.EffectPacket.showRewardItemAnimation(reward.itemid, reward.effect, chr.getId()), false); return true; } } } } chr.dropMessage(6, "Unknown error."); } else { chr.dropMessage(6, "Insufficient inventory slot."); } } return false; } public static void UseItem(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { if (chr == null || !chr.isAlive() || chr.getMapId() == 749040100 || chr.getMap() == null || chr.hasDisease(MapleDisease.POTION) || chr.hasBlockedInventory() || chr.inPVP()) { c.getSession().write(CWvsContext.enableActions()); return; } long time = System.currentTimeMillis(); if (chr.getNextConsume() > time) { chr.dropMessage(5, "You may not use this item yet."); c.getSession().write(CWvsContext.enableActions()); return; } slea.readInt(); byte slot = (byte) slea.readShort(); int itemId = slea.readInt(); Item toUse = chr.getInventory(MapleInventoryType.USE).getItem(slot); if (toUse == null || toUse.getQuantity() < 1 || toUse.getItemId() != itemId) { c.getSession().write(CWvsContext.enableActions()); return; } if (!FieldLimitType.PotionUse.check(chr.getMap().getFieldLimit())) { //cwk quick hack if (MapleItemInformationProvider.getInstance().getItemEffect(toUse.getItemId()).applyTo(chr)) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false); if (chr.getMap().getConsumeItemCoolTime() > 0) { chr.setNextConsume(time + (chr.getMap().getConsumeItemCoolTime() * 1000)); } } } else { c.getSession().write(CWvsContext.enableActions()); } } public static final void UseCosmetic(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { if ((chr == null) || (!chr.isAlive()) || (chr.getMap() == null) || (chr.hasBlockedInventory()) || (chr.inPVP())) { c.getSession().write(CWvsContext.enableActions()); return; } byte slot = (byte) slea.readShort(); int itemId = slea.readInt(); Item toUse = chr.getInventory(MapleInventoryType.USE).getItem((short) slot); if ((toUse == null) || (toUse.getQuantity() < 1) || (toUse.getItemId() != itemId) || (itemId / 10000 != 254) || (itemId / 1000 % 10 != chr.getGender())) { c.getSession().write(CWvsContext.enableActions()); return; } if (MapleItemInformationProvider.getInstance().getItemEffect(toUse.getItemId()).applyTo(chr)) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } } public static final void UseReturnScroll(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { if ((!chr.isAlive()) || (chr.getMapId() == 749040100) || (chr.hasBlockedInventory()) || (chr.isInBlockedMap()) || (chr.inPVP())) { c.getSession().write(CWvsContext.enableActions()); return; } slea.readInt(); byte slot = (byte) slea.readShort(); int itemId = slea.readInt(); Item toUse = chr.getInventory(MapleInventoryType.USE).getItem((short) slot); if ((toUse == null) || (toUse.getQuantity() < 1) || (toUse.getItemId() != itemId)) { c.getSession().write(CWvsContext.enableActions()); return; } if (!FieldLimitType.PotionUse.check(chr.getMap().getFieldLimit())) { if (MapleItemInformationProvider.getInstance().getItemEffect(toUse.getItemId()).applyReturnScroll(chr)) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } else { c.getSession().write(CWvsContext.enableActions()); } } else { c.getSession().write(CWvsContext.enableActions()); } } public static final void UseAlienSocket(LittleEndianAccessor slea, MapleClient c) { slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); Item alienSocket = c.getPlayer().getInventory(MapleInventoryType.USE).getItem((short) (byte) slea.readShort()); int alienSocketId = slea.readInt(); Item toMount = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readShort()); if ((alienSocket == null) || (alienSocketId != alienSocket.getItemId()) || (toMount == null) || (c.getPlayer().hasBlockedInventory())) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); return; } Equip eqq = (Equip) toMount; if (eqq.getSocketState() != 0) { c.getPlayer().dropMessage(1, "This item already has a socket."); } else { eqq.setSocket1(0); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, alienSocket.getPosition(), (short) 1, false); c.getPlayer().forceReAddItem(toMount, MapleInventoryType.EQUIP); } c.getSession().write(MTSCSPacket.useAlienSocket(true)); c.getPlayer().fakeRelog(); c.getPlayer().dropMessage(5, new StringBuilder().append("Added 1 socket successfully to ").append(toMount).toString()); } public static final void UseNebulite(LittleEndianAccessor slea, MapleClient c) { slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); Item nebulite = c.getPlayer().getInventory(MapleInventoryType.SETUP).getItem((short) (byte) slea.readShort()); int nebuliteId = slea.readInt(); Item toMount = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readShort()); if ((nebulite == null) || (nebuliteId != nebulite.getItemId()) || (toMount == null) || (c.getPlayer().hasBlockedInventory())) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); return; } Equip eqq = (Equip) toMount; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); boolean success = false; if (eqq.getSocket1() == 0) { StructItemOption pot = ii.getSocketInfo(nebuliteId); if ((pot != null) && (GameConstants.optionTypeFits(pot.optionType, eqq.getItemId()))) { eqq.setSocket1(pot.opID); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.SETUP, nebulite.getPosition(), (short) 1, false); c.getPlayer().forceReAddItem(toMount, MapleInventoryType.EQUIP); success = true; } } c.getPlayer().getMap().broadcastMessage(CField.showNebuliteEffect(c.getPlayer().getId(), success)); c.getSession().write(CWvsContext.enableActions()); } public static final void UseGoldHammer(LittleEndianAccessor slea, MapleClient c) { slea.skip(4); int slot = slea.readInt(); slea.skip(8); Equip item = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readInt()); if (item != null) { if ((GameConstants.canHammer(item.getItemId())) && (MapleItemInformationProvider.getInstance().getSlots(item.getItemId()) > 0) && (item.getViciousHammer() < 1)) { item.setViciousHammer((byte) (item.getViciousHammer() + 1)); item.setUpgradeSlots((byte) (item.getUpgradeSlots() + 1)); c.getPlayer().forceReAddItem(item, MapleInventoryType.EQUIP); c.getSession().write(MTSCSPacket.ViciousHammer(true, item.getViciousHammer())); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false, true); c.getPlayer().fakeRelog(); c.getPlayer().dropMessage(1, new StringBuilder().append("Added 1 slot successfully to ").append(item).toString()); } else { c.getPlayer().fakeRelog(); c.getPlayer().dropMessage(1, new StringBuilder().append("You may not use this on this item anymore!").toString()); } } } public static final void UseNebuliteFusion(LittleEndianAccessor slea, MapleClient c) { slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); int nebuliteId1 = slea.readInt(); Item nebulite1 = c.getPlayer().getInventory(MapleInventoryType.SETUP).getItem((short) (byte) slea.readShort()); int nebuliteId2 = slea.readInt(); Item nebulite2 = c.getPlayer().getInventory(MapleInventoryType.SETUP).getItem((short) (byte) slea.readShort()); int mesos = slea.readInt(); int premiumQuantity = slea.readInt(); if ((nebulite1 == null) || (nebulite2 == null) || (nebuliteId1 != nebulite1.getItemId()) || (nebuliteId2 != nebulite2.getItemId()) || ((mesos == 0) && (premiumQuantity == 0)) || ((mesos != 0) && (premiumQuantity != 0)) || (mesos < 0) || (premiumQuantity < 0) || (c.getPlayer().hasBlockedInventory())) { c.getPlayer().dropMessage(1, "Failed to fuse Nebulite."); c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); return; } int grade1 = GameConstants.getNebuliteGrade(nebuliteId1); int grade2 = GameConstants.getNebuliteGrade(nebuliteId2); int highestRank = grade1 > grade2 ? grade1 : grade2; if ((grade1 == -1) || (grade2 == -1) || ((highestRank == 3) && (premiumQuantity != 2)) || ((highestRank == 2) && (premiumQuantity != 1)) || ((highestRank == 1) && (mesos != 5000)) || ((highestRank == 0) && (mesos != 3000)) || ((mesos > 0) && (c.getPlayer().getMeso() < mesos)) || ((premiumQuantity > 0) && (c.getPlayer().getItemQuantity(4420000, false) < premiumQuantity)) || (grade1 >= 4) || (grade2 >= 4) || (c.getPlayer().getInventory(MapleInventoryType.SETUP).getNumFreeSlot() < 1)) { c.getSession().write(CField.useNebuliteFusion(c.getPlayer().getId(), 0, false)); return; } int avg = (grade1 + grade2) / 2; int rank = Randomizer.nextInt(100) < 4 ? 0 : avg != 0 ? avg - 1 : Randomizer.nextInt(100) < 70 ? avg : avg != 3 ? avg + 1 : avg; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); List pots = new LinkedList(ii.getAllSocketInfo(rank).values()); int newId = 0; while (newId == 0) { StructItemOption pot = (StructItemOption) pots.get(Randomizer.nextInt(pots.size())); if (pot != null) { newId = pot.opID; } } if (mesos > 0) { c.getPlayer().gainMeso(-mesos, true); } else if (premiumQuantity > 0) { MapleInventoryManipulator.removeById(c, MapleInventoryType.ETC, 4420000, premiumQuantity, false, false); } MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.SETUP, nebulite1.getPosition(), (short) 1, false); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.SETUP, nebulite2.getPosition(), (short) 1, false); MapleInventoryManipulator.addById(c, newId, (short) 1, new StringBuilder().append("Fused from ").append(nebuliteId1).append(" and ").append(nebuliteId2).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); c.getSession().write(CField.useNebuliteFusion(c.getPlayer().getId(), newId, true)); } public static final void UseMagnify(LittleEndianAccessor slea, MapleClient c) { slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); byte src = (byte) slea.readShort(); boolean insight = src == 127; Item magnify = c.getPlayer().getInventory(MapleInventoryType.USE).getItem((short) src); byte dst = (byte) slea.readShort(); Item toReveal = null; if (dst > 0) { toReveal = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) dst); } else { toReveal = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((short) dst); } if (((magnify == null) && (!insight)) || (toReveal == null) || (c.getPlayer().hasBlockedInventory())) { c.getPlayer().dropMessage(5, new StringBuilder().append(magnify).append(" | ").append(insight).append(" | ").append(toReveal).append(" | ").append(c.getPlayer().hasBlockedInventory()).toString()); c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); return; } Equip eqq = (Equip) toReveal; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int reqLevel = ii.getReqLevel(eqq.getItemId()) / 10; if ((eqq.getState() == 1) && ((insight) || (magnify.getItemId() == 2460003) || ((magnify.getItemId() == 2460002) && (reqLevel <= 12)) || ((magnify.getItemId() == 2460001) && (reqLevel <= 7)) || ((magnify.getItemId() == 2460000) && (reqLevel <= 3)))) { List pots = new LinkedList(ii.getAllPotentialInfo().values()); int new_state = Math.abs(eqq.getPotential1()); if ((new_state > 20) || (new_state < 17)) { new_state = 17; } int lines = 2; if (eqq.getPotential2() != 0) { lines++; } while (eqq.getState() != new_state) { for (int i = 0; i < lines; i++) { boolean rewarded = false; while (!rewarded) { StructItemOption pot = (StructItemOption) ((List) pots.get(Randomizer.nextInt(pots.size()))).get(reqLevel); if ((pot != null) && (pot.reqLevel / 10 <= reqLevel) && (GameConstants.optionTypeFits(pot.optionType, eqq.getItemId())) && (GameConstants.potentialIDFits(pot.opID, new_state, i))) { if (i == 0) { eqq.setPotential1(pot.opID); } else if (i == 1) { eqq.setPotential2(pot.opID); } else if (i == 2) { eqq.setPotential3(pot.opID); } rewarded = true; } } } } c.getPlayer().getTrait(MapleTrait.MapleTraitType.insight).addExp((insight ? 10 : magnify.getItemId() + 2 - 2460000) * 2, c.getPlayer()); c.getPlayer().getMap().broadcastMessage(CField.showMagnifyingEffect(c.getPlayer().getId(), eqq.getPosition())); if (!insight) { c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(magnify, toReveal, false, true)); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, magnify.getPosition(), (short) 1, false); } else { c.getPlayer().forceReAddItem(toReveal, MapleInventoryType.EQUIP); } c.getSession().write(CWvsContext.enableActions()); } else { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); } } public static final void addToScrollLog(int accountID, int charID, int scrollID, int itemID, byte oldSlots, byte newSlots, byte viciousHammer, String result, boolean ws, boolean ls, int vega) { try { PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("INSERT INTO scroll_log VALUES(DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); ps.setInt(1, accountID); ps.setInt(2, charID); ps.setInt(3, scrollID); ps.setInt(4, itemID); ps.setByte(5, oldSlots); ps.setByte(6, newSlots); ps.setByte(7, viciousHammer); ps.setString(8, result); ps.setByte(9, (byte) (ws ? 1 : 0)); ps.setByte(10, (byte) (ls ? 1 : 0)); ps.setInt(11, vega); ps.execute(); ps.close(); } catch (SQLException e) { FileoutputUtil.outputFileError("Log_Packet_Except.txt", e); } } public static boolean isAllowedPotentialStat(Equip eqq, int opID) { //For now //if (GameConstants.isWeapon(eqq.getItemId())) { // return !(opID > 60000) || (opID >= 1 && opID <= 4) || (opID >= 9 && opID <= 12) || (opID >= 10001 && opID <= 10006) || (opID >= 10011 && opID <= 10012) || (opID >= 10041 && opID <= 10046) || (opID >= 10051 && opID <= 10052) || (opID >= 10055 && opID <= 10081) || (opID >= 10201 && opID <= 10291) || (opID >= 210001 && opID <= 20006) || (opID >= 20011 && opID <= 20012) || (opID >= 20041 && opID <= 20046) || (opID >= 20051 && opID <= 20052) || (opID >= 20055 && opID <= 20081) || (opID >= 20201 && opID <= 20291) || (opID >= 30001 && opID <= 30006) || (opID >= 30011 && opID <= 30012) || (opID >= 30041 && opID <= 30046) || (opID >= 30051 && opID <= 30052) || (opID >= 30055 && opID <= 30081) || (opID >= 30201 && opID <= 30291) || (opID >= 40001 && opID <= 40006) || (opID >= 40011 && opID <= 40012) || (opID >= 40041 && opID <= 40046) || (opID >= 40051 && opID <= 40052) || (opID >= 40055 && opID <= 40081) || (opID >= 40201 && opID <= 40291); //} return opID < 60000; } public static void UseSpecialScroll(LittleEndianAccessor rh, MapleCharacter chr) { byte slot = (byte) rh.readShort(); byte dst = (byte) rh.readShort(); rh.skip(1); boolean use = false; Equip toScroll; if (dst < 0) { toScroll = (Equip) chr.getInventory(MapleInventoryType.EQUIPPED).getItem(dst); } else { toScroll = (Equip) chr.getInventory(MapleInventoryType.EQUIP).getItem(dst); } Item scroll = chr.getInventory(MapleInventoryType.CASH).getItem(slot); if (scroll == null || !GameConstants.isSpecialScroll(scroll.getItemId())) { scroll = chr.getInventory(MapleInventoryType.USE).getItem(slot); use = true; } if (!use) { if (scroll.getItemId() == 5064000 || scroll.getItemId() == 5064003 || scroll.getItemId() == 5064002 || scroll.getItemId() == 5064004) { short flag = toScroll.getFlag(); flag |= ItemFlag.SHIELD_WARD.getValue(); toScroll.setFlag(flag); chr.getClient().getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(toScroll, toScroll.getType(), chr)); chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); } else if (scroll.getItemId() == 5064100 || scroll.getItemId() == 5064101) { short flag = toScroll.getFlag(); flag |= ItemFlag.SLOTS_PROTECT.getValue(); toScroll.setFlag(flag); chr.getClient().getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(toScroll, toScroll.getType(), chr)); chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); } else if (scroll.getItemId() == 5064300) { short flag = toScroll.getFlag(); flag |= ItemFlag.SLOTS_PROTECT.getValue(); toScroll.setFlag(flag); chr.getClient().getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(toScroll, toScroll.getType(), chr)); chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); } else if (scroll.getItemId() == 5063000) { short flag = toScroll.getFlag(); flag |= ItemFlag.LUCKS_KEY.getValue(); toScroll.setFlag(flag); chr.getClient().getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(toScroll, toScroll.getType(), chr)); chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); } else if (scroll.getItemId() == 5063100) { short flag = toScroll.getFlag(); if (!ItemFlag.LUCKS_KEY.check(flag) && !ItemFlag.SHIELD_WARD.check(flag)) { flag |= ItemFlag.LUCKS_KEY.getValue(); flag |= ItemFlag.SHIELD_WARD.getValue(); toScroll.setFlag(flag); chr.getClient().getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(toScroll, toScroll.getType(), chr)); chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); } else { chr.getClient().getSession().write(CWvsContext.enableActions()); return; } } chr.getInventory(MapleInventoryType.CASH).removeItem(scroll.getPosition(), (short) 1, false); } else { if (scroll.getItemId() == 2531000 || scroll.getItemId() == 2531001) { short flag = toScroll.getFlag(); flag |= ItemFlag.SHIELD_WARD.getValue(); toScroll.setFlag(flag); chr.getClient().getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(toScroll, toScroll.getType(), chr)); chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); } else if (scroll.getItemId() == 2532000) { short flag = toScroll.getFlag(); flag |= ItemFlag.SLOTS_PROTECT.getValue(); toScroll.setFlag(flag); chr.getClient().getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(toScroll, toScroll.getType(), chr)); chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); } else if (scroll.getItemId() == 2530000 || scroll.getItemId() == 2530001 || scroll.getItemId() == 2530002) { short flag = toScroll.getFlag(); flag |= ItemFlag.LUCKS_KEY.getValue(); toScroll.setFlag(flag); chr.getClient().getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(toScroll, toScroll.getType(), chr)); chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); } chr.getInventory(MapleInventoryType.USE).removeItem(scroll.getPosition(), (short) 1, false); } chr.getClient().getSession().write(CWvsContext.InventoryPacket.scrolledItem(scroll, toScroll, false, false)); chr.getMap().broadcastMessage(chr, CField.getScrollEffect(chr.getId(), scroll.getItemId(), toScroll.getItemId(), ScrollResult.SUCCESS, false, false), true); if (dst < 0) { chr.equipChanged(); } } public static boolean UseUpgradeScroll(short slot, short dst, short ws, MapleClient c, MapleCharacter chr, boolean cashs, boolean skill) { return UseUpgradeScroll(slot, dst, ws, c, chr, 0, cashs, skill); } public static final boolean UseUpgradeScroll(short slot, short dst, short ws, MapleClient c, MapleCharacter chr, int vegas, boolean cashs, boolean legendarySpirit) { boolean whiteScroll = false; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); chr.setScrolledPosition((short) 0); if ((ws & 0x2) == 2) { whiteScroll = true; } Equip toScroll = null; if (dst < 0) { toScroll = (Equip) chr.getInventory(MapleInventoryType.EQUIPPED).getItem(dst); } else { toScroll = (Equip) chr.getInventory(MapleInventoryType.EQUIP).getItem(dst); } if ((toScroll == null) || (c.getPlayer().hasBlockedInventory())) { c.getSession().write(CWvsContext.enableActions()); return false; } byte oldLevel = toScroll.getLevel(); byte oldEnhance = toScroll.getEnhance(); byte oldState = toScroll.getState(); short oldFlag = toScroll.getFlag(); byte oldSlots = toScroll.getUpgradeSlots(); Item scroll = chr.getInventory(MapleInventoryType.USE).getItem(slot); if ((scroll == null) || (cashs)) { scroll = chr.getInventory(MapleInventoryType.CASH).getItem(slot); if (scroll == null) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } } if ((!GameConstants.isSpecialScroll(scroll.getItemId())) && !GameConstants.isInnocence(toScroll.getItemId()) && (!GameConstants.isCleanSlate(scroll.getItemId())) && (!GameConstants.isEquipScroll(scroll.getItemId())) && (!GameConstants.isPotentialScroll(scroll.getItemId()))) { if (toScroll.getUpgradeSlots() < 1) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } } else if (GameConstants.isEquipScroll(scroll.getItemId())) { if ((toScroll.getUpgradeSlots() >= 1) || (toScroll.getEnhance() >= 100) || (vegas > 0) || (ii.isCash(toScroll.getItemId()))) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } } else if (GameConstants.isPotentialScroll(scroll.getItemId())) { boolean isEpic = scroll.getItemId() / 100 == 20497; if (((!isEpic) && (toScroll.getState() >= 1)) || ((isEpic) && (toScroll.getState() >= 18)) || ((toScroll.getLevel() == 0) && (toScroll.getUpgradeSlots() == 0) && (toScroll.getItemId() / 10000 != 135) && (!isEpic)) || (vegas > 0) || (ii.isCash(toScroll.getItemId()))) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } } else if ((GameConstants.isSpecialScroll(scroll.getItemId())) && ((ii.isCash(toScroll.getItemId())) || (toScroll.getEnhance() >= 12))) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } if ((!GameConstants.canScroll(toScroll.getItemId())) && (!GameConstants.isChaosScroll(toScroll.getItemId())) && !GameConstants.isInnocence(toScroll.getItemId())) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } if (((GameConstants.isCleanSlate(scroll.getItemId())) || (GameConstants.isTablet(scroll.getItemId())) || !GameConstants.isInnocence(toScroll.getItemId()) || (GameConstants.isGeneralScroll(scroll.getItemId())) || (GameConstants.isChaosScroll(scroll.getItemId()))) && ((vegas > 0) || (ii.isCash(toScroll.getItemId())))) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } if ((GameConstants.isTablet(scroll.getItemId())) && (toScroll.getDurability() < 0)) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } if ((!GameConstants.isTablet(scroll.getItemId())) && (!GameConstants.isPotentialScroll(scroll.getItemId())) && (!GameConstants.isEquipScroll(scroll.getItemId())) && (!GameConstants.isCleanSlate(scroll.getItemId())) && (!GameConstants.isSpecialScroll(scroll.getItemId())) && (!GameConstants.isChaosScroll(scroll.getItemId())) && !GameConstants.isInnocence(toScroll.getItemId()) && (toScroll.getDurability() >= 0)) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } Item wscroll = null; List scrollReqs = ii.getScrollReqs(scroll.getItemId()); if ((scrollReqs != null) && (scrollReqs.size() > 0) && (!scrollReqs.contains(Integer.valueOf(toScroll.getItemId())))) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.enableActions()); return false; } if (whiteScroll) { wscroll = chr.getInventory(MapleInventoryType.USE).findById(2340000); if (wscroll == null) { whiteScroll = false; } } if ((GameConstants.isTablet(scroll.getItemId())) || (GameConstants.isGeneralScroll(scroll.getItemId()))) { switch (scroll.getItemId() % 1000 / 100) { case 0: if ((GameConstants.isTwoHanded(toScroll.getItemId())) || (!GameConstants.isWeapon(toScroll.getItemId()))) { c.getSession().write(CWvsContext.enableActions()); return false; } break; case 1: if ((!GameConstants.isTwoHanded(toScroll.getItemId())) || (!GameConstants.isWeapon(toScroll.getItemId()))) { c.getSession().write(CWvsContext.enableActions()); return false; } break; case 2: if ((GameConstants.isAccessory(toScroll.getItemId())) || (GameConstants.isWeapon(toScroll.getItemId()))) { c.getSession().write(CWvsContext.enableActions()); return false; } break; case 3: if ((!GameConstants.isAccessory(toScroll.getItemId())) || (GameConstants.isWeapon(toScroll.getItemId()))) { c.getSession().write(CWvsContext.enableActions()); return false; } break; } } else if ((!GameConstants.isAccessoryScroll(scroll.getItemId())) && (!GameConstants.isChaosScroll(scroll.getItemId())) && !GameConstants.isInnocence(toScroll.getItemId()) && (!GameConstants.isCleanSlate(scroll.getItemId())) && (!GameConstants.isEquipScroll(scroll.getItemId())) && (!GameConstants.isPotentialScroll(scroll.getItemId())) && (!GameConstants.isSpecialScroll(scroll.getItemId())) && (!ii.canScroll(scroll.getItemId(), toScroll.getItemId()))) { c.getSession().write(CWvsContext.enableActions()); return false; } if ((GameConstants.isAccessoryScroll(scroll.getItemId())) && (!GameConstants.isAccessory(toScroll.getItemId()))) { c.getSession().write(CWvsContext.enableActions()); return false; } if (scroll.getQuantity() <= 0) { c.getSession().write(CWvsContext.enableActions()); return false; } if ((legendarySpirit) && (vegas == 0)) { chr.getStat(); if (chr.getSkillLevel(SkillFactory.getSkill(PlayerStats.getSkillByJob(1003, chr.getJob()))) <= 0) { c.getSession().write(CWvsContext.enableActions()); return false; } } // Scroll Success/ Failure/ Curse Equip scrolled = (Equip) ii.scrollEquipWithId(toScroll, scroll, whiteScroll, chr, vegas); ScrollResult scrollSuccess; if (ItemFlag.SLOTS_PROTECT.check(oldFlag) && scrolled != null) { scrolled.setFlag((short) (oldFlag - ItemFlag.SLOTS_PROTECT.getValue())); } if (scrolled == null) { if (ItemFlag.SHIELD_WARD.check(oldFlag)) { scrolled = toScroll; scrollSuccess = Equip.ScrollResult.FAIL; scrolled.setFlag((short) (oldFlag - ItemFlag.SHIELD_WARD.getValue())); } else { scrollSuccess = Equip.ScrollResult.CURSE; } } else if ((scroll.getItemId() / 100 == 20497 && scrolled.getState() == 1) || scrolled.getLevel() > oldLevel || scrolled.getEnhance() > oldEnhance || scrolled.getState() > oldState || scrolled.getFlag() > oldFlag) { scrollSuccess = Equip.ScrollResult.SUCCESS; } else if ((GameConstants.isCleanSlate(scroll.getItemId()) && scrolled.getUpgradeSlots() > oldSlots)) { scrollSuccess = Equip.ScrollResult.SUCCESS; } else { scrollSuccess = Equip.ScrollResult.FAIL; } chr.getInventory(GameConstants.getInventoryType(scroll.getItemId())).removeItem(scroll.getPosition(), (short) 1, false); if (whiteScroll) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, wscroll.getPosition(), (short) 1, false, false); } else if ((scrollSuccess == Equip.ScrollResult.FAIL) && (scrolled.getUpgradeSlots() < oldSlots) && (c.getPlayer().getInventory(MapleInventoryType.CASH).findById(5640000) != null)) { chr.setScrolledPosition(scrolled.getPosition()); if (vegas == 0) { c.getSession().write(CWvsContext.pamSongUI()); } } if (scrollSuccess == Equip.ScrollResult.CURSE) { c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(scroll, toScroll, true, false)); if (dst < 0) { chr.getInventory(MapleInventoryType.EQUIPPED).removeItem(toScroll.getPosition()); } else { chr.getInventory(MapleInventoryType.EQUIP).removeItem(toScroll.getPosition()); } } else if (vegas == 0) { c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(scroll, scrolled, false, false)); } c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(scrollSuccess == Equip.ScrollResult.CURSE ? 2 : scrollSuccess == Equip.ScrollResult.SUCCESS ? 1 : 0)); if (scrollSuccess == Equip.ScrollResult.SUCCESS && GameConstants.isInnocence(scroll.getItemId())) { c.getSession().write(InventoryPacket.scrolledItem(scroll, toScroll, true, false)); chr.getInventory(MapleInventoryType.EQUIPPED).removeItem(toScroll.getPosition()); } chr.getMap().broadcastMessage(chr, CField.getScrollEffect(c.getPlayer().getId(), scroll.getItemId(), toScroll.getItemId(), scrollSuccess, legendarySpirit, whiteScroll), vegas == 0); if ((dst < 0) && ((scrollSuccess == Equip.ScrollResult.SUCCESS) || (scrollSuccess == Equip.ScrollResult.CURSE)) && (vegas == 0)) { chr.equipChanged(); } return true; } public static final boolean UseSkillBook(byte slot, int itemId, MapleClient c, MapleCharacter chr) { Item toUse = chr.getInventory(GameConstants.getInventoryType(itemId)).getItem((short) slot); if ((toUse == null) || (toUse.getQuantity() < 1) || (toUse.getItemId() != itemId) || (chr.hasBlockedInventory())) { return false; } Map skilldata = MapleItemInformationProvider.getInstance().getEquipStats(toUse.getItemId()); if (skilldata == null) { return false; } boolean canuse = false; boolean success = false; int skill = 0; int maxlevel = 0; Integer SuccessRate = (Integer) skilldata.get("success"); Integer ReqSkillLevel = (Integer) skilldata.get("reqSkillLevel"); Integer MasterLevel = (Integer) skilldata.get("masterLevel"); byte i = 0; while (true) { Integer CurrentLoopedSkillId = (Integer) skilldata.get(new StringBuilder().append("skillid").append(i).toString()); i = (byte) (i + 1); if ((CurrentLoopedSkillId == null) || (MasterLevel == null)) { break; } Skill CurrSkillData = SkillFactory.getSkill(CurrentLoopedSkillId.intValue()); if ((CurrSkillData != null) && (CurrSkillData.canBeLearnedBy(chr.getJob())) && ((ReqSkillLevel == null) || (chr.getSkillLevel(CurrSkillData) >= ReqSkillLevel.intValue())) && (chr.getMasterLevel(CurrSkillData) < MasterLevel.intValue())) { canuse = true; if ((SuccessRate == null) || (Randomizer.nextInt(100) <= SuccessRate.intValue())) { success = true; chr.changeSingleSkillLevel(CurrSkillData, chr.getSkillLevel(CurrSkillData), (byte) MasterLevel.intValue()); } else { success = false; } MapleInventoryManipulator.removeFromSlot(c, GameConstants.getInventoryType(itemId), (short) slot, (short) 1, false); break; } } c.getPlayer().getMap().broadcastMessage(CWvsContext.useSkillBook(chr, skill, maxlevel, canuse, success)); c.getSession().write(CWvsContext.enableActions()); return canuse; } public static final void UseCatchItem(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); byte slot = (byte) slea.readShort(); int itemid = slea.readInt(); MapleMonster mob = chr.getMap().getMonsterByOid(slea.readInt()); Item toUse = chr.getInventory(MapleInventoryType.USE).getItem((short) slot); MapleMap map = chr.getMap(); if ((toUse != null) && (toUse.getQuantity() > 0) && (toUse.getItemId() == itemid) && (mob != null) && (!chr.hasBlockedInventory()) && (itemid / 10000 == 227) && (MapleItemInformationProvider.getInstance().getCardMobId(itemid) == mob.getId())) { if ((!MapleItemInformationProvider.getInstance().isMobHP(itemid)) || (mob.getHp() <= mob.getMobMaxHp() / 2L)) { map.broadcastMessage(MobPacket.catchMonster(mob.getObjectId(), itemid, (byte) 1)); map.killMonster(mob, chr, true, false, (byte) 1); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false, false); if (MapleItemInformationProvider.getInstance().getCreateId(itemid) > 0) { MapleInventoryManipulator.addById(c, MapleItemInformationProvider.getInstance().getCreateId(itemid), (short) 1, new StringBuilder().append("Catch item ").append(itemid).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } } else { map.broadcastMessage(MobPacket.catchMonster(mob.getObjectId(), itemid, (byte) 0)); c.getSession().write(CWvsContext.catchMob(mob.getId(), itemid, (byte) 0)); } } c.getSession().write(CWvsContext.enableActions()); } public static final void UseMountFood(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { slea.readInt(); byte slot = (byte) slea.readShort(); int itemid = slea.readInt(); Item toUse = chr.getInventory(MapleInventoryType.USE).getItem((short) slot); MapleMount mount = chr.getMount(); if ((itemid / 10000 == 226) && (toUse != null) && (toUse.getQuantity() > 0) && (toUse.getItemId() == itemid) && (mount != null) && (!c.getPlayer().hasBlockedInventory())) { int fatigue = mount.getFatigue(); boolean levelup = false; mount.setFatigue((byte) -30); if (fatigue > 0) { mount.increaseExp(); int level = mount.getLevel(); if ((level < 30) && (mount.getExp() >= GameConstants.getMountExpNeededForLevel(level + 1))) { mount.setLevel((byte) (level + 1)); levelup = true; } } chr.getMap().broadcastMessage(CWvsContext.updateMount(chr, levelup)); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } c.getSession().write(CWvsContext.enableActions()); } public static final void UseScriptedNPCItem(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { slea.readInt(); byte slot = (byte) slea.readShort(); int itemId = slea.readInt(); Item toUse = chr.getInventory(GameConstants.getInventoryType(itemId)).getItem((short) slot); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); long expiration_days = 0L; int mountid = 0; if ((toUse != null) && (toUse.getQuantity() >= 1) && (toUse.getItemId() == itemId) && (!chr.hasBlockedInventory()) && (!chr.inPVP())) { MapleQuestStatus marr; long lastTime; switch (toUse.getItemId()) { case 2430746: { int[] randitem = {4310048, 1003552, 1322162, 1332193, 1362067, 1372139, 1382168, 1402151, 1412104, 1422107, 1432138, 1442182, 1052461, 1452170, 1462159, 1472179, 1482140, 1492152, 1522071, 1532074, 1082433, 1072666, 1102441, 1152089, 1132154, 1302227, 1312116, 1003529, 1322154, 1332186, 1362060, 1372131, 1382160, 1402145, 1412102, 1422105, 1432135, 1442173, 1052457, 1452165, 1462156, 1472177, 1482138, 1492138, 1522068, 1532073, 1082430, 1072660, 1102394, 1152088, 1132151, 1302212, 1312114, 2041511, 2046085, 2046086, 2046087, 2046088, 2046089, 2046094, 2046156, 2046162, 2046166, 2046552, 2046553, 2046554, 2046555, 2046556, 2046557, 2046558, 2046559, 2046560, 2046561, 2046562, 2046563, 2046564, 2046565, 2046566, 2046567, 2046568, 2046681, 2046682, 2046683, 2046684, 2046739, 2046740, 2046741, 2046742, 2046743, 2046744, 2046745, 2046746, 2046747, 2046748, 2046749, 2046750, 2046751, 2046752, 2046753, 2046754, 2046799, 2046943, 2046944, 2046945, 2046946, 2048047, 2048048, 2048049, 2048050}; int itemid = randitem[((int) (Math.random() * randitem.length))]; if (ii.itemExists(itemid)) { if (GameConstants.getInventoryType(itemid) == MapleInventoryType.EQUIP) { Equip it = ii.randomizeStats((Equip) ii.getEquipById(itemid)); it.setPotential1(-17); Item item = it.copy(); item.setGMLog(new StringBuilder().append("Scripted item: ").append(itemId).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); MapleInventoryManipulator.addbyItem(c, item); } else { MapleInventoryManipulator.addById(c, itemid, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } c.getSession().write(CWvsContext.InfoPacket.getShowItemGain(itemid, (short) 1, true)); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } break; } case 2430737: { int[] randitem = {4310048, 4001695, 2001530, 2001531, 2450039, 2046743, 2046744, 2046745, 2046746, 2046556, 2046557, 2046558, 2046559}; int itemid = randitem[((int) (Math.random() * randitem.length))]; int itemslot = (itemid == 4310048) || (itemid == 2450039) ? 1 : 10; if (MapleItemInformationProvider.getInstance().itemExists(itemid)) { c.getSession().write(CWvsContext.InfoPacket.getShowItemGain(itemid, (short) itemslot, true)); MapleInventoryManipulator.addById(c, itemid, (short) itemslot, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } break; } case 2430007: { MapleInventory inventory = chr.getInventory(MapleInventoryType.SETUP); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); if ((inventory.countById(3994102) >= 20) && (inventory.countById(3994103) >= 20) && (inventory.countById(3994104) >= 20) && (inventory.countById(3994105) >= 20)) { MapleInventoryManipulator.addById(c, 2430008, (short) 1, new StringBuilder().append("Scripted item: ").append(itemId).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); MapleInventoryManipulator.removeById(c, MapleInventoryType.SETUP, 3994102, 20, false, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.SETUP, 3994103, 20, false, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.SETUP, 3994104, 20, false, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.SETUP, 3994105, 20, false, false); } else { MapleInventoryManipulator.addById(c, 2430007, (short) 1, new StringBuilder().append("Scripted item: ").append(itemId).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } NPCScriptManager.getInstance().start(c, 2084001); break; } case 2430008: { chr.saveLocation(SavedLocationType.RICHIE); boolean warped = false; for (int i = 390001000; i <= 390001004; i++) { MapleMap map = c.getChannelServer().getMapFactory().getMap(i); if (map.getCharactersSize() == 0) { chr.changeMap(map, map.getPortal(0)); warped = true; break; } } if (warped) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } else { c.getPlayer().dropMessage(5, "All maps are currently in use, please try again later."); } break; } case 2430112: if (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() >= 1) { if (c.getPlayer().getInventory(MapleInventoryType.USE).countById(2430112) >= 25) { if ((MapleInventoryManipulator.checkSpace(c, 2049400, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 25, true, false))) { MapleInventoryManipulator.addById(c, 2049400, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else if (c.getPlayer().getInventory(MapleInventoryType.USE).countById(2430112) >= 10) { if ((MapleInventoryManipulator.checkSpace(c, 2049400, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 10, true, false))) { MapleInventoryManipulator.addById(c, 2049401, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else { c.getPlayer().dropMessage(5, "There needs to be 10 Fragments for a Potential Scroll, 25 for Advanced Potential Scroll."); } } else { c.getPlayer().dropMessage(5, "Please make some space."); } break; case 2430481: if (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() >= 1) { if (c.getPlayer().getInventory(MapleInventoryType.USE).countById(2430481) >= 30) { if ((MapleInventoryManipulator.checkSpace(c, 2049701, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 30, true, false))) { MapleInventoryManipulator.addById(c, 2049701, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else if (c.getPlayer().getInventory(MapleInventoryType.USE).countById(2430481) >= 20) { if ((MapleInventoryManipulator.checkSpace(c, 2049300, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 20, true, false))) { MapleInventoryManipulator.addById(c, 2049300, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else { c.getPlayer().dropMessage(5, "There needs to be 20 Fragments for a Advanced Equip Enhancement Scroll, 30 for Epic Potential Scroll 80%."); } } else { c.getPlayer().dropMessage(5, "Please make some space."); } break; case 2430691: if (c.getPlayer().getInventory(MapleInventoryType.CASH).getNumFreeSlot() >= 1) { if (c.getPlayer().getInventory(MapleInventoryType.USE).countById(2430691) >= 10) { if ((MapleInventoryManipulator.checkSpace(c, 5750001, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 10, true, false))) { MapleInventoryManipulator.addById(c, 5750001, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else { c.getPlayer().dropMessage(5, "There needs to be 10 Fragments for a Nebulite Diffuser."); } } else { c.getPlayer().dropMessage(5, "Please make some space."); } break; case 2430748: if (c.getPlayer().getInventory(MapleInventoryType.ETC).getNumFreeSlot() >= 1) { if (c.getPlayer().getInventory(MapleInventoryType.USE).countById(2430748) >= 20) { if ((MapleInventoryManipulator.checkSpace(c, 4420000, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 20, true, false))) { MapleInventoryManipulator.addById(c, 4420000, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else { c.getPlayer().dropMessage(5, "There needs to be 20 Fragments for a Premium Fusion Ticket."); } } else { c.getPlayer().dropMessage(5, "Please make some space."); } break; case 2430692: if (c.getPlayer().getInventory(MapleInventoryType.SETUP).getNumFreeSlot() >= 1) { if (c.getPlayer().getInventory(MapleInventoryType.USE).countById(2430692) >= 1) { int rank = Randomizer.nextInt(100) < 30 ? 1 : Randomizer.nextInt(100) < 4 ? 2 : 0; List pots = new LinkedList(ii.getAllSocketInfo(rank).values()); int newId = 0; while (newId == 0) { StructItemOption pot = (StructItemOption) pots.get(Randomizer.nextInt(pots.size())); if (pot != null) { newId = pot.opID; } } if ((MapleInventoryManipulator.checkSpace(c, newId, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 1, true, false))) { MapleInventoryManipulator.addById(c, newId, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); c.getSession().write(CWvsContext.InfoPacket.getShowItemGain(newId, (short) 1, true)); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else { c.getPlayer().dropMessage(5, "You do not have a Nebulite Box."); } } else { c.getPlayer().dropMessage(5, "Please make some space."); } break; case 5680019: { int hair = 32150 + c.getPlayer().getHair() % 10; c.getPlayer().setHair(hair); c.getPlayer().updateSingleStat(MapleStat.HAIR, hair); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, (short) slot, (short) 1, false); break; } case 5680020: { int hair = 32160 + c.getPlayer().getHair() % 10; c.getPlayer().setHair(hair); c.getPlayer().updateSingleStat(MapleStat.HAIR, hair); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, (short) slot, (short) 1, false); break; } case 3994225: c.getPlayer().dropMessage(5, "Please bring this item to the NPC."); break; case 2430212: marr = c.getPlayer().getQuestNAdd(MapleQuest.getInstance(122500)); if (marr.getCustomData() == null) { marr.setCustomData("0"); } lastTime = Long.parseLong(marr.getCustomData()); if (lastTime + 600000L > System.currentTimeMillis()) { c.getPlayer().dropMessage(5, "You can only use one energy drink per 10 minutes."); } else if (c.getPlayer().getFatigue() > 0) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); c.getPlayer().setFatigue(c.getPlayer().getFatigue() - 5); } break; case 2430213: marr = c.getPlayer().getQuestNAdd(MapleQuest.getInstance(122500)); if (marr.getCustomData() == null) { marr.setCustomData("0"); } lastTime = Long.parseLong(marr.getCustomData()); if (lastTime + 600000L > System.currentTimeMillis()) { c.getPlayer().dropMessage(5, "You can only use one energy drink per 10 minutes."); } else if (c.getPlayer().getFatigue() > 0) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); c.getPlayer().setFatigue(c.getPlayer().getFatigue() - 10); } break; case 2430214: case 2430220: if (c.getPlayer().getFatigue() > 0) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); c.getPlayer().setFatigue(c.getPlayer().getFatigue() - 30); } break; case 2430227: if (c.getPlayer().getFatigue() > 0) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); c.getPlayer().setFatigue(c.getPlayer().getFatigue() - 50); } break; case 2430231: marr = c.getPlayer().getQuestNAdd(MapleQuest.getInstance(122500)); if (marr.getCustomData() == null) { marr.setCustomData("0"); } lastTime = Long.parseLong(marr.getCustomData()); if (lastTime + 600000L > System.currentTimeMillis()) { c.getPlayer().dropMessage(5, "You can only use one energy drink per 10 minutes."); } else if (c.getPlayer().getFatigue() > 0) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); c.getPlayer().setFatigue(c.getPlayer().getFatigue() - 40); } break; case 2430144: int itemid = Randomizer.nextInt(373) + 2290000; if ((MapleItemInformationProvider.getInstance().itemExists(itemid)) && (!MapleItemInformationProvider.getInstance().getName(itemid).contains("Special")) && (!MapleItemInformationProvider.getInstance().getName(itemid).contains("Event"))) { MapleInventoryManipulator.addById(c, itemid, (short) 1, new StringBuilder().append("Reward item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } break; case 2430370: if (MapleInventoryManipulator.checkSpace(c, 2028062, 1, "")) { MapleInventoryManipulator.addById(c, 2028062, (short) 1, new StringBuilder().append("Reward item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } break; case 2430158: if (c.getPlayer().getInventory(MapleInventoryType.ETC).getNumFreeSlot() >= 1) { if (c.getPlayer().getInventory(MapleInventoryType.ETC).countById(4000630) >= 100) { if ((MapleInventoryManipulator.checkSpace(c, 4310010, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 1, true, false))) { MapleInventoryManipulator.addById(c, 4310010, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else if (c.getPlayer().getInventory(MapleInventoryType.ETC).countById(4000630) >= 50) { if ((MapleInventoryManipulator.checkSpace(c, 4310009, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 1, true, false))) { MapleInventoryManipulator.addById(c, 4310009, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else { c.getPlayer().dropMessage(5, "There needs to be 50 Purification Totems for a Noble Lion King Medal, 100 for Royal Lion King Medal."); } } else { c.getPlayer().dropMessage(5, "Please make some space."); } break; case 2430159: MapleQuest.getInstance(3182).forceComplete(c.getPlayer(), 2161004); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); break; case 2430200: if (c.getPlayer().getQuestStatus(31152) != 2) { c.getPlayer().dropMessage(5, "You have no idea how to use it."); } else if (c.getPlayer().getInventory(MapleInventoryType.ETC).getNumFreeSlot() >= 1) { if ((c.getPlayer().getInventory(MapleInventoryType.ETC).countById(4000660) >= 1) && (c.getPlayer().getInventory(MapleInventoryType.ETC).countById(4000661) >= 1) && (c.getPlayer().getInventory(MapleInventoryType.ETC).countById(4000662) >= 1) && (c.getPlayer().getInventory(MapleInventoryType.ETC).countById(4000663) >= 1)) { if ((MapleInventoryManipulator.checkSpace(c, 4032923, 1, "")) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, toUse.getItemId(), 1, true, false)) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.ETC, 4000660, 1, true, false)) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.ETC, 4000661, 1, true, false)) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.ETC, 4000662, 1, true, false)) && (MapleInventoryManipulator.removeById(c, MapleInventoryType.ETC, 4000663, 1, true, false))) { MapleInventoryManipulator.addById(c, 4032923, (short) 1, new StringBuilder().append("Scripted item: ").append(toUse.getItemId()).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "Please make some space."); } } else { c.getPlayer().dropMessage(5, "There needs to be 1 of each Stone for a Dream Key."); } } else { c.getPlayer().dropMessage(5, "Please make some space."); } break; case 2430130: case 2430131: if (GameConstants.isResist(c.getPlayer().getJob())) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); c.getPlayer().gainExp(20000 + c.getPlayer().getLevel() * 50 * c.getChannelServer().getExpRate(), true, true, false); } else { c.getPlayer().dropMessage(5, "You may not use this item."); } break; case 2430132: case 2430133: case 2430134: case 2430142: if (c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNumFreeSlot() >= 1) { if ((c.getPlayer().getJob() == 3200) || (c.getPlayer().getJob() == 3210) || (c.getPlayer().getJob() == 3211) || (c.getPlayer().getJob() == 3212)) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); MapleInventoryManipulator.addById(c, 1382101, (short) 1, new StringBuilder().append("Scripted item: ").append(itemId).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else if ((c.getPlayer().getJob() == 3300) || (c.getPlayer().getJob() == 3310) || (c.getPlayer().getJob() == 3311) || (c.getPlayer().getJob() == 3312)) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); MapleInventoryManipulator.addById(c, 1462093, (short) 1, new StringBuilder().append("Scripted item: ").append(itemId).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else if ((c.getPlayer().getJob() == 3500) || (c.getPlayer().getJob() == 3510) || (c.getPlayer().getJob() == 3511) || (c.getPlayer().getJob() == 3512)) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); MapleInventoryManipulator.addById(c, 1492080, (short) 1, new StringBuilder().append("Scripted item: ").append(itemId).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); } else { c.getPlayer().dropMessage(5, "You may not use this item."); } } else { c.getPlayer().dropMessage(5, "Make some space."); } break; case 2430036: mountid = 1027; expiration_days = 1L; break; case 2430170: mountid = 1027; expiration_days = 7L; break; case 2430037: mountid = 1028; expiration_days = 1L; break; case 2430038: mountid = 1029; expiration_days = 1L; break; case 2430039: mountid = 1030; expiration_days = 1L; break; case 2430040: mountid = 1031; expiration_days = 1L; break; case 2430223: mountid = 1031; expiration_days = 15L; break; case 2430259: mountid = 1031; expiration_days = 3L; break; case 2430242: mountid = 80001018; expiration_days = 10L; break; case 2430243: mountid = 80001019; expiration_days = 10L; break; case 2430261: mountid = 80001019; expiration_days = 3L; break; case 2430249: mountid = 80001027; expiration_days = 3L; break; case 2430225: mountid = 1031; expiration_days = 10L; break; case 2430053: mountid = 1027; expiration_days = 1L; break; case 2430054: mountid = 1028; expiration_days = 30L; break; case 2430055: mountid = 1029; expiration_days = 30L; break; case 2430257: mountid = 1029; expiration_days = 7L; break; case 2430056: mountid = 1035; expiration_days = 30L; break; case 2430057: mountid = 1033; expiration_days = 30L; break; case 2430072: mountid = 1034; expiration_days = 7L; break; case 2430073: mountid = 1036; expiration_days = 15L; break; case 2430074: mountid = 1037; expiration_days = 15L; break; case 2430272: mountid = 1038; expiration_days = 3L; break; case 2430275: mountid = 80001033; expiration_days = 7L; break; case 2430075: mountid = 1038; expiration_days = 15L; break; case 2430076: mountid = 1039; expiration_days = 15L; break; case 2430077: mountid = 1040; expiration_days = 15L; break; case 2430080: mountid = 1042; expiration_days = 20L; break; case 2430082: mountid = 1044; expiration_days = 7L; break; case 2430260: mountid = 1044; expiration_days = 3L; break; case 2430091: mountid = 1049; expiration_days = 10L; break; case 2430092: mountid = 1050; expiration_days = 10L; break; case 2430263: mountid = 1050; expiration_days = 3L; break; case 2430093: mountid = 1051; expiration_days = 10L; break; case 2430101: mountid = 1052; expiration_days = 10L; break; case 2430102: mountid = 1053; expiration_days = 10L; break; case 2430103: mountid = 1054; expiration_days = 30L; break; case 2430266: mountid = 1054; expiration_days = 3L; break; case 2430265: mountid = 1151; expiration_days = 3L; break; case 2430258: mountid = 1115; expiration_days = 365L; break; case 2430117: mountid = 1036; expiration_days = 365L; break; case 2430118: mountid = 1039; expiration_days = 365L; break; case 2430119: mountid = 1040; expiration_days = 365L; break; case 2430120: mountid = 1037; expiration_days = 365L; break; case 2430271: mountid = 1069; expiration_days = 3L; break; case 2430136: mountid = 1069; expiration_days = 30L; break; case 2430137: mountid = 1069; expiration_days = 365L; break; case 2430145: mountid = 1070; expiration_days = 30L; break; case 2430146: mountid = 1070; expiration_days = 365L; break; case 2430147: mountid = 1071; expiration_days = 30L; break; case 2430148: mountid = 1071; expiration_days = 365L; break; case 2430135: mountid = 1065; expiration_days = 15L; break; case 2430149: mountid = 1072; expiration_days = 30L; break; case 2430262: mountid = 1072; expiration_days = 3L; break; case 2430179: mountid = 1081; expiration_days = 15L; break; case 2430264: mountid = 1081; expiration_days = 3L; break; case 2430201: mountid = 1096; expiration_days = 60L; break; case 2430228: mountid = 1101; expiration_days = 60L; break; case 2430276: mountid = 1101; expiration_days = 15L; break; case 2430277: mountid = 1101; expiration_days = 365L; break; case 2430283: mountid = 1025; expiration_days = 10L; break; case 2430291: mountid = 1145; expiration_days = -1L; break; case 2430293: mountid = 1146; expiration_days = -1L; break; case 2430295: mountid = 1147; expiration_days = -1L; break; case 2430297: mountid = 1148; expiration_days = -1L; break; case 2430299: mountid = 1149; expiration_days = -1L; break; case 2430301: mountid = 1150; expiration_days = -1L; break; case 2430303: mountid = 1151; expiration_days = -1L; break; case 2430305: mountid = 1152; expiration_days = -1L; break; case 2430307: mountid = 1153; expiration_days = -1L; break; case 2430309: mountid = 1154; expiration_days = -1L; break; case 2430311: mountid = 1156; expiration_days = -1L; break; case 2430313: mountid = 1156; expiration_days = -1L; break; case 2430315: mountid = 1118; expiration_days = -1L; break; case 2430317: mountid = 1121; expiration_days = -1L; break; case 2430319: mountid = 1122; expiration_days = -1L; break; case 2430321: mountid = 1123; expiration_days = -1L; break; case 2430323: mountid = 1124; expiration_days = -1L; break; case 2430325: mountid = 1129; expiration_days = -1L; break; case 2430327: mountid = 1130; expiration_days = -1L; break; case 2430329: mountid = 1063; expiration_days = -1L; break; case 2430331: mountid = 1025; expiration_days = -1L; break; case 2430333: mountid = 1034; expiration_days = -1L; break; case 2430335: mountid = 1136; expiration_days = -1L; break; case 2430337: mountid = 1051; expiration_days = -1L; break; case 2430339: mountid = 1138; expiration_days = -1L; break; case 2430341: mountid = 1139; expiration_days = -1L; break; case 2430343: mountid = 1027; expiration_days = -1L; break; case 2430346: mountid = 1029; expiration_days = -1L; break; case 2430348: mountid = 1028; expiration_days = -1L; break; case 2430350: mountid = 1033; expiration_days = -1L; break; case 2430352: mountid = 1064; expiration_days = -1L; break; case 2430354: mountid = 1096; expiration_days = -1L; break; case 2430356: mountid = 1101; expiration_days = -1L; break; case 2430358: mountid = 1102; expiration_days = -1L; break; case 2430360: mountid = 1054; expiration_days = -1L; break; case 2430362: mountid = 1053; expiration_days = -1L; break; case 2430292: mountid = 1145; expiration_days = 90L; break; case 2430294: mountid = 1146; expiration_days = 90L; break; case 2430296: mountid = 1147; expiration_days = 90L; break; case 2430298: mountid = 1148; expiration_days = 90L; break; case 2430300: mountid = 1149; expiration_days = 90L; break; case 2430302: mountid = 1150; expiration_days = 90L; break; case 2430304: mountid = 1151; expiration_days = 90L; break; case 2430306: mountid = 1152; expiration_days = 90L; break; case 2430308: mountid = 1153; expiration_days = 90L; break; case 2430310: mountid = 1154; expiration_days = 90L; break; case 2430312: mountid = 1156; expiration_days = 90L; break; case 2430314: mountid = 1156; expiration_days = 90L; break; case 2430316: mountid = 1118; expiration_days = 90L; break; case 2430318: mountid = 1121; expiration_days = 90L; break; case 2430320: mountid = 1122; expiration_days = 90L; break; case 2430322: mountid = 1123; expiration_days = 90L; break; case 2430326: mountid = 1129; expiration_days = 90L; break; case 2430328: mountid = 1130; expiration_days = 90L; break; case 2430330: mountid = 1063; expiration_days = 90L; break; case 2430332: mountid = 1025; expiration_days = 90L; break; case 2430334: mountid = 1034; expiration_days = 90L; break; case 2430336: mountid = 1136; expiration_days = 90L; break; case 2430338: mountid = 1051; expiration_days = 90L; break; case 2430340: mountid = 1138; expiration_days = 90L; break; case 2430342: mountid = 1139; expiration_days = 90L; break; case 2430344: mountid = 1027; expiration_days = 90L; break; case 2430347: mountid = 1029; expiration_days = 90L; break; case 2430349: mountid = 1028; expiration_days = 90L; break; case 2430351: mountid = 1033; expiration_days = 90L; break; case 2430353: mountid = 1064; expiration_days = 90L; break; case 2430355: mountid = 1096; expiration_days = 90L; break; case 2430357: mountid = 1101; expiration_days = 90L; break; case 2430359: mountid = 1102; expiration_days = 90L; break; case 2430361: mountid = 1054; expiration_days = 90L; break; case 2430363: mountid = 1053; expiration_days = 90L; break; case 2430324: mountid = 1158; expiration_days = -1L; break; case 2430345: mountid = 1158; expiration_days = 90L; break; case 2430367: mountid = 1115; expiration_days = 3L; break; case 2430365: mountid = 1025; expiration_days = 365L; break; case 2430366: mountid = 1025; expiration_days = 15L; break; case 2430369: mountid = 1049; expiration_days = 10L; break; case 2430392: mountid = 80001038; expiration_days = 90L; break; case 2430476: mountid = 1039; expiration_days = 15L; break; case 2430477: mountid = 1039; expiration_days = 365L; break; case 2430232: mountid = 1106; expiration_days = 10L; break; case 2430511: mountid = 80001033; expiration_days = 15L; break; case 2430512: mountid = 80001033; expiration_days = 365L; break; case 2430536: mountid = 80001114; expiration_days = 365L; break; case 2430537: mountid = 80001114; expiration_days = 15L; break; case 2430229: mountid = 1102; expiration_days = 60L; break; case 2430199: mountid = 1102; expiration_days = 60L; break; case 2430206: mountid = 1089; expiration_days = 7L; break; case 2430211: mountid = 80001009; expiration_days = 30L; break; default: System.out.println(new StringBuilder().append("New scripted item : ").append(toUse.getItemId()).toString()); } } if (mountid > 0) { mountid = PlayerStats.getSkillByJob(mountid, c.getPlayer().getJob()); int fk = GameConstants.getMountItem(mountid, c.getPlayer()); if (GameConstants.GMS && fk > 0 && mountid < 80001000) { //TODO JUMP for (int i = 80001001; i < 80001999; i++) { Skill skill = SkillFactory.getSkill(i); if (skill != null && GameConstants.getMountItem(skill.getId(), c.getPlayer()) == fk) { mountid = i; break; } } } if (c.getPlayer().getSkillLevel(mountid) > 0) { c.getPlayer().dropMessage(5, "You already have this skill."); } else if (SkillFactory.getSkill(mountid) == null || GameConstants.getMountItem(mountid, c.getPlayer()) == 0) { c.getPlayer().dropMessage(5, "The skill could not be gained."); } else if (expiration_days > 0) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (byte) 1, false); c.getPlayer().changeSingleSkillLevel(SkillFactory.getSkill(mountid), (byte) 1, (byte) 1, System.currentTimeMillis() + (long) (expiration_days * 24 * 60 * 60 * 1000)); c.getPlayer().dropMessage(5, "The skill has been attained."); } } c.getSession().write(CWvsContext.enableActions()); } public static final void UseSummonBag(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { // if ((!chr.isAlive()) || (chr.hasBlockedInventory()) || (chr.inPVP())) { // c.getSession().write(CWvsContext.enableActions()); // return; // } // slea.readInt(); // byte slot = (byte) slea.readShort(); // int itemId = slea.readInt(); // Item toUse = chr.getInventory(MapleInventoryType.USE).getItem((short) slot); // // if ((toUse != null) && (toUse.getQuantity() >= 1) && (toUse.getItemId() == itemId) && ((c.getPlayer().getMapId() < 910000000) || (c.getPlayer().getMapId() > 910000022))) { // Map<String, Integer> toSpawn = MapleItemInformationProvider.getInstance().getEquipStats(itemId); // // if (toSpawn == null) { // c.getSession().write(CWvsContext.enableActions()); // return; // } // MapleMonster ht = null; // int type = 0; // for (Map.Entry i : toSpawn.entrySet()) { // if ((((String) i.getKey()).startsWith("mob")) && (Randomizer.nextInt(99) <= ((Integer) i.getValue()).intValue())) { // ht = MapleLifeFactory.getMonster(Integer.parseInt(((String) i.getKey()).substring(3))); // chr.getMap().spawnMonster_sSack(ht, chr.getPosition(), type); // } // } // if (ht == null) { // c.getSession().write(CWvsContext.enableActions()); // return; // } // // MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); // } c.getPlayer().dropMessage(1, "Disabled, probably because of you."); c.getSession().write(CWvsContext.enableActions()); } public static final void UseTreasureChest(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { short slot = slea.readShort(); int itemid = slea.readInt(); Item toUse = chr.getInventory(MapleInventoryType.ETC).getItem((short) (byte) slot); if ((toUse == null) || (toUse.getQuantity() <= 0) || (toUse.getItemId() != itemid) || (chr.hasBlockedInventory())) { c.getSession().write(CWvsContext.enableActions()); return; } int keyIDforRemoval = 0; int reward; String box; switch (toUse.getItemId()) { case 4280000: reward = RandomRewards.getGoldBoxReward(); keyIDforRemoval = 5490000; box = "Gold"; break; case 4280001: reward = RandomRewards.getSilverBoxReward(); keyIDforRemoval = 5490001; box = "Silver"; break; default: return; } int amount = 1; switch (reward) { case 2000004: amount = 200; break; case 2000005: amount = 100; } if (chr.getInventory(MapleInventoryType.CASH).countById(keyIDforRemoval) > 0) { Item item = MapleInventoryManipulator.addbyId_Gachapon(c, reward, (short) amount); if (item == null) { chr.dropMessage(5, "Please check your item inventory and see if you have a Master Key, or if the inventory is full."); c.getSession().write(CWvsContext.enableActions()); return; } MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.ETC, (short) (byte) slot, (short) 1, true); MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, keyIDforRemoval, 1, true, false); c.getSession().write(CWvsContext.InfoPacket.getShowItemGain(reward, (short) amount, true)); if (GameConstants.gachaponRareItem(item.getItemId()) > 0) { World.Broadcast.broadcastSmega(CWvsContext.getGachaponMega(c.getPlayer().getName(), " : got a(n)", item, (byte) 2, new StringBuilder().append("[").append(box).append(" Chest]").toString())); } } else { chr.dropMessage(5, "Please check your item inventory and see if you have a Master Key, or if the inventory is full."); c.getSession().write(CWvsContext.enableActions()); } } public static final void UseCashItem(LittleEndianAccessor slea, MapleClient c) { if ((c.getPlayer() == null) || (c.getPlayer().getMap() == null) || (c.getPlayer().inPVP())) { c.getSession().write(CWvsContext.enableActions()); return; } if (c.getPlayer().getMap().getId() == GameConstants.JAIL) { c.getPlayer().dropMessage(5, "You're in jail, herp derp."); c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); return; } if (c.getPlayer().isMuted() || (c.getPlayer().getMap().getMuted() && !c.getPlayer().isGM())) { c.getPlayer().dropMessage(5, c.getPlayer().isMuted() ? "You are Muted, therefore you are unable to talk. " : "The map is Muted, therefore you are unable to talk."); c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); return; } slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); byte slot = (byte) slea.readShort(); int itemId = slea.readInt(); Item toUse = c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((short) slot); if ((toUse == null) || (toUse.getItemId() != itemId) || (toUse.getQuantity() < 1) || (c.getPlayer().hasBlockedInventory())) { c.getSession().write(CWvsContext.enableActions()); return; } boolean used = false; boolean cc = false; switch (itemId) { case 5043000: case 5043001: short questid = slea.readShort(); int npcid = slea.readInt(); MapleQuest quest = MapleQuest.getInstance(questid); if ((c.getPlayer().getQuest(quest).getStatus() == 1) && (quest.canComplete(c.getPlayer(), Integer.valueOf(npcid)))) { int mapId = MapleLifeFactory.getNPCLocation(npcid); if (mapId != -1) { MapleMap map = c.getChannelServer().getMapFactory().getMap(mapId); if ((map.containsNPC(npcid)) && (!FieldLimitType.VipRock.check(c.getPlayer().getMap().getFieldLimit())) && (!FieldLimitType.VipRock.check(map.getFieldLimit())) && (!c.getPlayer().isInBlockedMap())) { c.getPlayer().changeMap(map, map.getPortal(0)); } used = true; } else { c.getPlayer().dropMessage(1, "Unknown error has occurred."); } } break; case 2320000: case 5040000: case 5040001: case 5040002: case 5040003: case 5040004: case 5041000: case 5041001: used = UseTeleRock(slea, c, itemId); break; case 5450005: c.getPlayer().setConversation(4); c.getPlayer().getStorage().sendStorage(c, 1022005); break; case 5050000: c.getPlayer().dropMessage(1, "Disabled."); c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; case 5220083: used = true; for (Entry<Integer, StructFamiliar> f : MapleItemInformationProvider.getInstance().getFamiliars().entrySet()) { if ((((StructFamiliar) f.getValue()).itemid == 2870055) || (((StructFamiliar) f.getValue()).itemid == 2871002) || (((StructFamiliar) f.getValue()).itemid == 2870235) || (((StructFamiliar) f.getValue()).itemid == 2870019)) { MonsterFamiliar mf = (MonsterFamiliar) c.getPlayer().getFamiliars().get(f.getKey()); if (mf != null) { if (mf.getVitality() >= 3) { mf.setExpiry(Math.min(System.currentTimeMillis() + 7776000000L, mf.getExpiry() + 2592000000L)); } else { mf.setVitality(mf.getVitality() + 1); mf.setExpiry(mf.getExpiry() + 2592000000L); } } else { mf = new MonsterFamiliar(c.getPlayer().getId(), ((Integer) f.getKey()).intValue(), System.currentTimeMillis() + 2592000000L); c.getPlayer().getFamiliars().put(f.getKey(), mf); } c.getSession().write(CField.registerFamiliar(mf)); } } break; case 5220084: if (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() < 3) { c.getPlayer().dropMessage(5, "Make 3 USE space."); } else { used = true; int[] familiars = new int[3]; while (true) { for (int i = 0; i < familiars.length; i++) { if (familiars[i] <= 0) { for (Map.Entry f : MapleItemInformationProvider.getInstance().getFamiliars().entrySet()) { if ((Randomizer.nextInt(500) == 0) && (((i < 2) && (((StructFamiliar) f.getValue()).grade == 0)) || ((i == 2) && (((StructFamiliar) f.getValue()).grade != 0)))) { MapleInventoryManipulator.addById(c, ((StructFamiliar) f.getValue()).itemid, (short) 1, "Booster Pack"); familiars[i] = ((StructFamiliar) f.getValue()).itemid; break; } } } } if ((familiars[0] > 0) && (familiars[1] > 0) && (familiars[2] > 0)) { break; } } c.getSession().write(MTSCSPacket.getBoosterPack(familiars[0], familiars[1], familiars[2])); c.getSession().write(MTSCSPacket.getBoosterPackClick()); c.getSession().write(MTSCSPacket.getBoosterPackReveal()); } break; case 5050001: case 5050002: case 5050003: case 5050004: case 5050005: case 5050006: case 5050007: case 5050008: case 5050009: if ((itemId >= 5050005) && (!GameConstants.isEvan(c.getPlayer().getJob()))) { c.getPlayer().dropMessage(1, "This reset is only for Evans."); } else if ((itemId < 5050005) && (GameConstants.isEvan(c.getPlayer().getJob()))) { c.getPlayer().dropMessage(1, "This reset is only for non-Evans."); } else { int skill1 = slea.readInt(); int skill2 = slea.readInt(); for (int i : GameConstants.blockedSkills) { if (skill1 == i) { c.getPlayer().dropMessage(1, "You may not add this skill."); return; } } Skill skillSPTo = SkillFactory.getSkill(skill1); Skill skillSPFrom = SkillFactory.getSkill(skill2); if ((skillSPTo.isBeginnerSkill()) || (skillSPFrom.isBeginnerSkill())) { c.getPlayer().dropMessage(1, "You may not add beginner skills."); } else if (GameConstants.getSkillBookForSkill(skill1) != GameConstants.getSkillBookForSkill(skill2)) { c.getPlayer().dropMessage(1, "You may not add different job skills."); } else if ((c.getPlayer().getSkillLevel(skillSPTo) + 1 <= skillSPTo.getMaxLevel()) && (c.getPlayer().getSkillLevel(skillSPFrom) > 0) && (skillSPTo.canBeLearnedBy(c.getPlayer().getJob()))) { if ((skillSPTo.isFourthJob()) && (c.getPlayer().getSkillLevel(skillSPTo) + 1 > c.getPlayer().getMasterLevel(skillSPTo))) { c.getPlayer().dropMessage(1, "You will exceed the master level."); } else { if (itemId >= 5050005) { if ((GameConstants.getSkillBookForSkill(skill1) != (itemId - 5050005) * 2) && (GameConstants.getSkillBookForSkill(skill1) != (itemId - 5050005) * 2 + 1)) { c.getPlayer().dropMessage(1, "You may not add this job SP using this reset."); break; } } else { int theJob = GameConstants.getJobNumber(skill2 / 10000); switch (skill2 / 10000) { case 430: theJob = 1; break; case 431: case 432: theJob = 2; break; case 433: theJob = 3; break; case 434: theJob = 4; } if (theJob != itemId - 5050000) { c.getPlayer().dropMessage(1, "You may not subtract from this skill. Use the appropriate SP reset."); break; } } Map sa = new HashMap(); sa.put(skillSPFrom, new SkillEntry((byte) (c.getPlayer().getSkillLevel(skillSPFrom) - 1), c.getPlayer().getMasterLevel(skillSPFrom), SkillFactory.getDefaultSExpiry(skillSPFrom))); sa.put(skillSPTo, new SkillEntry((byte) (c.getPlayer().getSkillLevel(skillSPTo) + 1), c.getPlayer().getMasterLevel(skillSPTo), SkillFactory.getDefaultSExpiry(skillSPTo))); c.getPlayer().changeSkillsLevel(sa); used = true; } } } break; case 5500000: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(slea.readShort()); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int days = 1; if ((item != null) && (!GameConstants.isAccessory(item.getItemId())) && (item.getExpiration() > -1L) && (!ii.isCash(item.getItemId())) && (System.currentTimeMillis() + 8640000000L > item.getExpiration() + 86400000L)) { boolean change = true; for (String z : GameConstants.RESERVED) { if ((c.getPlayer().getName().indexOf(z) != -1) || (item.getOwner().indexOf(z) != -1)) { change = false; } } if (change) { item.setExpiration(item.getExpiration() + 86400000L); c.getPlayer().forceReAddItem(item, MapleInventoryType.EQUIPPED); used = true; } else { c.getPlayer().dropMessage(1, "It may not be used on this item."); } } break; } case 5500001: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(slea.readShort()); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int days = 7; if ((item != null) && (!GameConstants.isAccessory(item.getItemId())) && (item.getExpiration() > -1L) && (!ii.isCash(item.getItemId())) && (System.currentTimeMillis() + 8640000000L > item.getExpiration() + 604800000L)) { boolean change = true; for (String z : GameConstants.RESERVED) { if ((c.getPlayer().getName().indexOf(z) != -1) || (item.getOwner().indexOf(z) != -1)) { change = false; } } if (change) { item.setExpiration(item.getExpiration() + 604800000L); c.getPlayer().forceReAddItem(item, MapleInventoryType.EQUIPPED); used = true; } else { c.getPlayer().dropMessage(1, "It may not be used on this item."); } } break; } case 5500002: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(slea.readShort()); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int days = 20; if ((item != null) && (!GameConstants.isAccessory(item.getItemId())) && (item.getExpiration() > -1L) && (!ii.isCash(item.getItemId())) && (System.currentTimeMillis() + 8640000000L > item.getExpiration() + 1728000000L)) { boolean change = true; for (String z : GameConstants.RESERVED) { if ((c.getPlayer().getName().indexOf(z) != -1) || (item.getOwner().indexOf(z) != -1)) { change = false; } } if (change) { item.setExpiration(item.getExpiration() + 1728000000L); c.getPlayer().forceReAddItem(item, MapleInventoryType.EQUIPPED); used = true; } else { c.getPlayer().dropMessage(1, "It may not be used on this item."); } } break; } case 5500005: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(slea.readShort()); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int days = 50; if ((item != null) && (!GameConstants.isAccessory(item.getItemId())) && (item.getExpiration() > -1L) && (!ii.isCash(item.getItemId())) && (System.currentTimeMillis() + 8640000000L > item.getExpiration() + 4320000000L)) { boolean change = true; for (String z : GameConstants.RESERVED) { if ((c.getPlayer().getName().indexOf(z) != -1) || (item.getOwner().indexOf(z) != -1)) { change = false; } } if (change) { item.setExpiration(item.getExpiration() + 25032704L); c.getPlayer().forceReAddItem(item, MapleInventoryType.EQUIPPED); used = true; } else { c.getPlayer().dropMessage(1, "It may not be used on this item."); } } break; } case 5500006: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(slea.readShort()); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int days = 99; if ((item != null) && (!GameConstants.isAccessory(item.getItemId())) && (item.getExpiration() > -1L) && (!ii.isCash(item.getItemId())) && (System.currentTimeMillis() + 8640000000L > item.getExpiration() + 8553600000L)) { boolean change = true; for (String z : GameConstants.RESERVED) { if ((c.getPlayer().getName().indexOf(z) != -1) || (item.getOwner().indexOf(z) != -1)) { change = false; } } if (change) { item.setExpiration(item.getExpiration() + -36334592L); c.getPlayer().forceReAddItem(item, MapleInventoryType.EQUIPPED); used = true; } else { c.getPlayer().dropMessage(1, "It may not be used on this item."); } } break; } case 5060000: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(slea.readShort()); if ((item != null) && (item.getOwner().equals(""))) { boolean change = true; for (String z : GameConstants.RESERVED) { if (c.getPlayer().getName().indexOf(z) != -1) { change = false; } } if (change) { item.setOwner(c.getPlayer().getName()); c.getPlayer().forceReAddItem(item, MapleInventoryType.EQUIPPED); used = true; } } break; } case 5680015: if (c.getPlayer().getFatigue() > 0) { c.getPlayer().setFatigue(0); used = true; } break; case 5534000: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readInt()); if (item != null) { Equip eq = (Equip) item; if (eq.getState() == 0) { eq.resetPotential(); c.getPlayer().getMap().broadcastMessage(CField.showPotentialReset(false, c.getPlayer().getId(), true, itemId)); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, true)); c.getPlayer().forceReAddItem_NoUpdate(item, MapleInventoryType.EQUIP); used = true; } else { c.getPlayer().dropMessage(5, "This item's Potential cannot be reset."); } } else { c.getPlayer().getMap().broadcastMessage(CField.showPotentialReset(false, c.getPlayer().getId(), false, itemId)); } c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; } case 5062000: { if (c.getPlayer().getLevel() < 50) { c.getPlayer().dropMessage(1, "You may not use this until level 50."); } else { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readInt()); if ((item != null) && (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() >= 1)) { Equip eq = (Equip) item; if ((eq.getState() >= 17) && (eq.getState() != 20)) { eq.renewPotential(0); c.getPlayer().getMap().broadcastMessage(CField.showPotentialReset(false, c.getPlayer().getId(), true, itemId)); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, true)); c.getPlayer().forceReAddItem_NoUpdate(item, MapleInventoryType.EQUIP); MapleInventoryManipulator.addById(c, 2430112, (short) 1, new StringBuilder().append("Cube on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); used = true; } else { c.getPlayer().dropMessage(5, "This item's Potential cannot be reset."); } } else { c.getPlayer().dropMessage(5, "Please make <USE> some space."); } } c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; } case 5062001: case 5062100: if (c.getPlayer().getLevel() < 70) { c.getPlayer().dropMessage(1, "You may not use this until level 70."); } else { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readInt()); if ((item != null) && (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() >= 1)) { Equip eq = (Equip) item; if ((eq.getState() >= 17) && (eq.getState() != 20)) { eq.renewPotential(1); c.getPlayer().getMap().broadcastMessage(CField.showPotentialReset(false, c.getPlayer().getId(), true, itemId)); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, true)); c.getPlayer().forceReAddItem_NoUpdate(item, MapleInventoryType.EQUIP); MapleInventoryManipulator.addById(c, 2430112, (short) 1, new StringBuilder().append("Cube on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); used = true; } else { c.getPlayer().dropMessage(5, "This item's Potential cannot be reset."); } } else { c.getPlayer().dropMessage(5, "Please make <USE> some space."); } } c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; case 5062002: case 5062003: if (c.getPlayer().getLevel() < 100) { c.getPlayer().dropMessage(1, "You may not use this until level 100."); } else { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readInt()); if ((item != null) && (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() >= 1)) { Equip eq = (Equip) item; if (eq.getState() >= 17) { eq.renewPotential(3); c.getPlayer().getMap().broadcastMessage(CField.showPotentialReset(false, c.getPlayer().getId(), true, itemId)); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, true)); c.getPlayer().forceReAddItem_NoUpdate(item, MapleInventoryType.EQUIP); MapleInventoryManipulator.addById(c, 2430481, (short) 1, new StringBuilder().append("Cube on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); used = true; } else { c.getPlayer().dropMessage(5, "This item's Potential cannot be reset."); } } else { c.getPlayer().dropMessage(5, "Please make <USE> some space."); } } c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; case 5062005: case 5062006: if (c.getPlayer().getLevel() < 100) { c.getPlayer().dropMessage(1, "You may not use this until level 100."); } else { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readInt()); if ((item != null) && (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() >= 1)) { Equip eq = (Equip) item; if (eq.getState() >= 17) { eq.renewPotential(3); c.getPlayer().getMap().broadcastMessage(CField.showPotentialReset(false, c.getPlayer().getId(), true, itemId)); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, true)); c.getPlayer().forceReAddItem_NoUpdate(item, MapleInventoryType.EQUIP); MapleInventoryManipulator.addById(c, 2430759, (short) 1, new StringBuilder().append("Cube on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(1)); used = true; } else { c.getPlayer().dropMessage(5, "This item's Potential cannot be reset."); } } else { c.getPlayer().dropMessage(5, "Please make <USE> some space."); } } c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; case 5750000: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(1, "You may not use this until level 10."); } else { Item item = c.getPlayer().getInventory(MapleInventoryType.SETUP).getItem((short) (byte) slea.readInt()); if ((item != null) && (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() >= 1) && (c.getPlayer().getInventory(MapleInventoryType.SETUP).getNumFreeSlot() >= 1)) { int grade = GameConstants.getNebuliteGrade(item.getItemId()); if ((grade != -1) && (grade < 4)) { int rank = Randomizer.nextInt(100) < 7 ? grade : grade != 3 ? grade + 1 : Randomizer.nextInt(100) < 2 ? grade + 1 : grade; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); List pots = new LinkedList(ii.getAllSocketInfo(rank).values()); int newId = 0; while (newId == 0) { StructItemOption pot = (StructItemOption) pots.get(Randomizer.nextInt(pots.size())); if (pot != null) { newId = pot.opID; } } MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.SETUP, item.getPosition(), (short) 1, false); MapleInventoryManipulator.addById(c, newId, (short) 1, new StringBuilder().append("Upgraded from alien cube on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); MapleInventoryManipulator.addById(c, 2430691, (short) 1, new StringBuilder().append("Alien Cube on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); used = true; } else { c.getPlayer().dropMessage(1, "Grade S Nebulite cannot be added."); } } else { c.getPlayer().dropMessage(5, "You do not have sufficient inventory slot."); } } c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; case 5750001: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(1, "You may not use this until level 10."); } else { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readInt()); if (item != null) { Equip eq = (Equip) item; if (eq.getSocket1() > 0) { eq.setSocket1(0); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, true)); c.getPlayer().forceReAddItem_NoUpdate(item, MapleInventoryType.EQUIP); used = true; } else { c.getPlayer().dropMessage(5, "This item do not have a socket."); } } else { c.getPlayer().dropMessage(5, "This item's nebulite cannot be removed."); } } c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; case 5521000: { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); Item item = c.getPlayer().getInventory(type).getItem((short) (byte) slea.readInt()); // if ((item != null) && (!ItemFlag.KARMA_ACC.check(item.getFlag())) && (!ItemFlag.KARMA_ACC_USE.check(item.getFlag())) // && (MapleItemInformationProvider.getInstance().isShareTagEnabled(item.getItemId()))) { // short flag = item.getFlag(); // if (ItemFlag.UNTRADEABLE.check(flag)) { // flag = (short) (flag - ItemFlag.UNTRADEABLE.getValue()); // } else if (type == MapleInventoryType.EQUIP) { // flag = (short) (flag | ItemFlag.KARMA_ACC.getValue()); // } else { // flag = (short) (flag | ItemFlag.KARMA_ACC_USE.getValue()); // } // item.setFlag(flag); // c.getPlayer().forceReAddItem_NoUpdate(item, type); // c.getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(item, type.getType(), item.getPosition(), true, c.getPlayer())); // used = true; // } c.getPlayer().getClient().getSession().write(CWvsContext.enableActions()); break; } case 5520000: case 5520001: { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); Item item = c.getPlayer().getInventory(type).getItem((short) (byte) slea.readInt()); if ((item != null) && (!ItemFlag.KARMA_EQ.check(item.getFlag())) && (!ItemFlag.KARMA_USE.check(item.getFlag())) && (((itemId == 5520000) && (MapleItemInformationProvider.getInstance().isKarmaEnabled(item.getItemId()))) || ((itemId == 5520001) && (MapleItemInformationProvider.getInstance().isPKarmaEnabled(item.getItemId()))))) { short flag = item.getFlag(); if (ItemFlag.UNTRADEABLE.check(flag)) { flag = (short) (flag - ItemFlag.UNTRADEABLE.getValue()); } else if (type == MapleInventoryType.EQUIP) { flag = (short) (flag | ItemFlag.KARMA_EQ.getValue()); } else { flag = (short) (flag | ItemFlag.KARMA_USE.getValue()); } item.setFlag(flag); c.getPlayer().forceReAddItem_NoUpdate(item, type); c.getSession().write(CWvsContext.InventoryPacket.updateSpecialItemUse(item, type.getType(), item.getPosition(), true, c.getPlayer())); used = true; } break; } case 5570000: { slea.readInt(); Equip item = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) (byte) slea.readInt()); if (item != null) { if ((GameConstants.canHammer(item.getItemId())) && (MapleItemInformationProvider.getInstance().getSlots(item.getItemId()) > 0) && (item.getViciousHammer() < 2)) { item.setViciousHammer((byte) (item.getViciousHammer() + 1)); item.setUpgradeSlots((byte) (item.getUpgradeSlots() + 1)); c.getPlayer().forceReAddItem(item, MapleInventoryType.EQUIP); c.getSession().write(MTSCSPacket.ViciousHammer(true, item.getViciousHammer())); c.getPlayer().fakeRelog(); c.getPlayer().dropMessage(1, new StringBuilder().append("Added 1 slot successfully to ").append(item).toString()); used = true; } else { c.getPlayer().dropMessage(5, "You may not use it on this item."); c.getSession().write(MTSCSPacket.ViciousHammer(true, 0)); } } break; } case 5610000: case 5610001: slea.readInt(); short dst = (short) slea.readInt(); slea.readInt(); short src = (short) slea.readInt(); used = UseUpgradeScroll(src, dst, (short) 2, c, c.getPlayer(), itemId, false, false); cc = used; break; case 5060001: { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); Item item = c.getPlayer().getInventory(type).getItem((short) (byte) slea.readInt()); if ((item != null) && (item.getExpiration() == -1L)) { short flag = item.getFlag(); flag = (short) (flag | ItemFlag.LOCK.getValue()); item.setFlag(flag); c.getPlayer().forceReAddItem_Flag(item, type); used = true; } break; } case 5061000: { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); Item item = c.getPlayer().getInventory(type).getItem((short) (byte) slea.readInt()); if ((item != null) && (item.getExpiration() == -1L)) { short flag = item.getFlag(); flag = (short) (flag | ItemFlag.LOCK.getValue()); item.setFlag(flag); item.setExpiration(System.currentTimeMillis() + 604800000L); c.getPlayer().forceReAddItem_Flag(item, type); used = true; } break; } case 5061001: { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); Item item = c.getPlayer().getInventory(type).getItem((short) (byte) slea.readInt()); if ((item != null) && (item.getExpiration() == -1L)) { short flag = item.getFlag(); flag = (short) (flag | ItemFlag.LOCK.getValue()); item.setFlag(flag); item.setExpiration(System.currentTimeMillis() + -1702967296L); c.getPlayer().forceReAddItem_Flag(item, type); used = true; } break; } case 5064200: case 5062300: {//resets all stats except for potential c.getPlayer().dropMessage(6, "Please use the scrolls.. not this cash item."); break; } case 5064300: case 5064301: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) slea.readShort()); if (item != null && item.getType() == 1) { //equip short flag = item.getFlag(); flag |= ItemFlag.SCROLL_PROTECT.getValue(); item.setFlag(flag); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, false)); used = true; } break; } case 5061002: { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); Item item = c.getPlayer().getInventory(type).getItem((short) (byte) slea.readInt()); if ((item != null) && (item.getExpiration() == -1L)) { short flag = item.getFlag(); flag = (short) (flag | ItemFlag.LOCK.getValue()); item.setFlag(flag); item.setExpiration(System.currentTimeMillis() + -813934592L); c.getPlayer().forceReAddItem_Flag(item, type); used = true; } break; } case 5061003: { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); Item item = c.getPlayer().getInventory(type).getItem((short) (byte) slea.readInt()); if ((item != null) && (item.getExpiration() == -1L)) { short flag = item.getFlag(); flag = (short) (flag | ItemFlag.LOCK.getValue()); item.setFlag(flag); item.setExpiration(System.currentTimeMillis() + 1471228928L); c.getPlayer().forceReAddItem_Flag(item, type); used = true; } break; } case 5063000: { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); Item item = c.getPlayer().getInventory(type).getItem((short) (byte) slea.readInt()); if ((item != null) && (item.getType() == 1)) { short flag = item.getFlag(); flag = (short) (flag | ItemFlag.LUCKS_KEY.getValue()); item.setFlag(flag); c.getPlayer().forceReAddItem_Flag(item, type); used = true; } break; } case 5064000: case 5064002: case 5064003: case 5064004: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) slea.readShort()); if (item != null && item.getType() == 1) { //equip if (((Equip) item).getEnhance() >= 12) { break; //cannot be used } short flag = item.getFlag(); flag |= ItemFlag.SHIELD_WARD.getValue(); item.setFlag(flag); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, false)); used = true; } break; } case 5064100: case 5064101: { Item item = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) slea.readShort()); if (item != null && item.getType() == 1) { //equip if (((Equip) item).getEnhance() >= 12) { break; //cannot be used } short flag = item.getFlag(); flag |= ItemFlag.SLOTS_PROTECT.getValue(); item.setFlag(flag); c.getSession().write(CWvsContext.InventoryPacket.scrolledItem(toUse, item, false, false)); used = true; } break; } case 5060003: case 5060004: { Item item = c.getPlayer().getInventory(MapleInventoryType.ETC).findById(itemId == 5060003 ? 4170023 : 4170024); if ((item == null) || (item.getQuantity() <= 0)) { return; } if (getIncubatedItems(c, itemId)) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.ETC, item.getPosition(), (short) 1, false); used = true; } break; } case 5070000: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { String message = slea.readMapleAsciiString(); if (message.length() <= 65) { StringBuilder sb = new StringBuilder(); addMedalString(c.getPlayer(), sb); sb.append(c.getPlayer().getName()); sb.append(" : "); sb.append(message); c.getPlayer().getMap().broadcastMessage(CWvsContext.serverNotice(2, sb.toString())); used = true; } } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5071000: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { String message = slea.readMapleAsciiString(); if (message.length() <= 65) { StringBuilder sb = new StringBuilder(); addMedalString(c.getPlayer(), sb); sb.append(c.getPlayer().getName()); sb.append(" : "); sb.append(message); c.getChannelServer().broadcastSmegaPacket(CWvsContext.serverNotice(2, sb.toString())); used = true; } } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5077000: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { byte numLines = slea.readByte(); if (numLines > 3) { return; } List messages = new LinkedList(); for (int i = 0; i < numLines; i++) { String message = slea.readMapleAsciiString(); if (message.length() > 65) { break; } messages.add(new StringBuilder().append(c.getPlayer().getName()).append(" : ").append(message).toString()); } boolean ear = slea.readByte() > 0; World.Broadcast.broadcastSmega(CWvsContext.tripleSmega(messages, ear, c.getChannel())); used = true; } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5079004: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { String message = slea.readMapleAsciiString(); if (message.length() <= 65) { World.Broadcast.broadcastSmega(CWvsContext.echoMegaphone(c.getPlayer().getName(), message)); used = true; } } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5073000: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { String message = slea.readMapleAsciiString(); if (message.length() <= 65) { StringBuilder sb = new StringBuilder(); addMedalString(c.getPlayer(), sb); sb.append(c.getPlayer().getName()); sb.append(" : "); sb.append(message); boolean ear = slea.readByte() != 0; World.Broadcast.broadcastSmega(CWvsContext.serverNotice(9, c.getChannel(), sb.toString(), ear)); used = true; } } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5074000: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { String message = slea.readMapleAsciiString(); if (message.length() <= 65) { StringBuilder sb = new StringBuilder(); addMedalString(c.getPlayer(), sb); sb.append(c.getPlayer().getName()); sb.append(" : "); sb.append(message); boolean ear = slea.readByte() != 0; World.Broadcast.broadcastSmega(CWvsContext.serverNotice(22, c.getChannel(), sb.toString(), ear)); used = true; } } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5072000: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { String message = slea.readMapleAsciiString(); if (message.length() <= 65) { StringBuilder sb = new StringBuilder(); addMedalString(c.getPlayer(), sb); sb.append(c.getPlayer().getName()); sb.append(" : "); sb.append(message); boolean ear = slea.readByte() != 0; World.Broadcast.broadcastSmega(CWvsContext.serverNotice(3, c.getChannel(), sb.toString(), ear)); used = true; } } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5076000: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { String message = slea.readMapleAsciiString(); if (message.length() <= 65) { StringBuilder sb = new StringBuilder(); addMedalString(c.getPlayer(), sb); sb.append(c.getPlayer().getName()); sb.append(" : "); sb.append(message); boolean ear = slea.readByte() > 0; Item item = null; if (slea.readByte() == 1) { byte invType = (byte) slea.readInt(); byte pos = (byte) slea.readInt(); if (pos <= 0) { invType = -1; } item = c.getPlayer().getInventory(MapleInventoryType.getByType(invType)).getItem((short) pos); } World.Broadcast.broadcastSmega(CWvsContext.itemMegaphone(sb.toString(), ear, c.getChannel(), item)); used = true; } } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5075000: case 5075001: case 5075002: c.getPlayer().dropMessage(5, "There are no MapleTVs to broadcast the message to."); break; case 5075003: case 5075004: case 5075005: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else { int tvType = itemId % 10; if (tvType == 3) { slea.readByte(); } boolean ear = (tvType != 1) && (tvType != 2) && (slea.readByte() > 1); MapleCharacter victim = (tvType == 1) || (tvType == 4) ? null : c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString()); if ((tvType == 0) || (tvType == 3)) { victim = null; } else if (victim == null) { c.getPlayer().dropMessage(1, "That character is not in the channel."); break; } String message = slea.readMapleAsciiString(); World.Broadcast.broadcastSmega(CWvsContext.serverNotice(3, c.getChannel(), new StringBuilder().append(c.getPlayer().getName()).append(" : ").append(message).toString(), ear)); used = true; } break; case 5090000: case 5090100: { String sendTo = slea.readMapleAsciiString(); String msg = slea.readMapleAsciiString(); c.getPlayer().sendNote(sendTo, msg); used = true; break; } case 5100000: c.getPlayer().getMap().broadcastMessage(CField.musicChange("Jukebox/Congratulation")); used = true; break; case 5190000: case 5190001: case 5190002: case 5190003: case 5190004: case 5190005: case 5190006: case 5190007: case 5190008: { int uniqueid = (int) slea.readLong(); MaplePet pet = c.getPlayer().getPet(0); int slo = 0; if (pet != null) { if (pet.getUniqueId() != uniqueid) { pet = c.getPlayer().getPet(1); slo = 1; if (pet == null) { break; } if (pet.getUniqueId() != uniqueid) { pet = c.getPlayer().getPet(2); slo = 2; if ((pet == null) || (pet.getUniqueId() != uniqueid)) { break; } } } MaplePet.PetFlag zz = MaplePet.PetFlag.getByAddId(itemId); if ((zz != null) && (!zz.check(pet.getFlags()))) { pet.setFlags(pet.getFlags() | zz.getValue()); c.getSession().write(PetPacket.updatePet(pet, c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((short) (byte) pet.getInventoryPosition()), true)); c.getSession().write(CWvsContext.enableActions()); c.getSession().write(MTSCSPacket.changePetFlag(uniqueid, true, zz.getValue())); used = true; } } break; } case 5191000: case 5191001: case 5191002: case 5191003: case 5191004: { int uniqueid = (int) slea.readLong(); MaplePet pet = c.getPlayer().getPet(0); int slo = 0; if (pet != null) { if (pet.getUniqueId() != uniqueid) { pet = c.getPlayer().getPet(1); slo = 1; if (pet == null) { break; } if (pet.getUniqueId() != uniqueid) { pet = c.getPlayer().getPet(2); slo = 2; if ((pet == null) || (pet.getUniqueId() != uniqueid)) { break; } } } MaplePet.PetFlag zz = MaplePet.PetFlag.getByDelId(itemId); if ((zz != null) && (zz.check(pet.getFlags()))) { pet.setFlags(pet.getFlags() - zz.getValue()); c.getSession().write(PetPacket.updatePet(pet, c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((short) (byte) pet.getInventoryPosition()), true)); c.getSession().write(CWvsContext.enableActions()); c.getSession().write(MTSCSPacket.changePetFlag(uniqueid, false, zz.getValue())); used = true; } } break; } case 5501001: case 5501002: { Skill skil = SkillFactory.getSkill(slea.readInt()); if ((skil != null) && (skil.getId() / 10000 == 8000) && (c.getPlayer().getSkillLevel(skil) > 0) && (skil.isTimeLimited()) && (GameConstants.getMountItem(skil.getId(), c.getPlayer()) > 0)) { long toAdd = (itemId == 5501001 ? 30 : 60) * 24 * 60 * 60 * 1000L; long expire = c.getPlayer().getSkillExpiry(skil); if ((expire >= System.currentTimeMillis()) && (expire + toAdd < System.currentTimeMillis() + 31536000000L)) { c.getPlayer().changeSingleSkillLevel(skil, c.getPlayer().getSkillLevel(skil), c.getPlayer().getMasterLevel(skil), expire + toAdd); used = true; } } break; } case 5170000: { MaplePet pet = c.getPlayer().getPet(0); int slo = 0; if (pet != null) { String nName = slea.readMapleAsciiString(); for (String z : GameConstants.RESERVED) { if ((pet.getName().indexOf(z) != -1) || (nName.indexOf(z) != -1)) { break; } } if (MapleCharacterUtil.canChangePetName(nName)) { pet.setName(nName); c.getSession().write(PetPacket.updatePet(pet, c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((short) (byte) pet.getInventoryPosition()), true)); c.getSession().write(CWvsContext.enableActions()); c.getPlayer().getMap().broadcastMessage(MTSCSPacket.changePetName(c.getPlayer(), nName, slo)); used = true; } } break; } case 5700000: { slea.skip(8); if (c.getPlayer().getAndroid() != null) { String nName = slea.readMapleAsciiString(); for (String z : GameConstants.RESERVED) { if ((c.getPlayer().getAndroid().getName().indexOf(z) != -1) || (nName.indexOf(z) != -1)) { break; } } if (MapleCharacterUtil.canChangePetName(nName)) { c.getPlayer().getAndroid().setName(nName); c.getPlayer().setAndroid(c.getPlayer().getAndroid()); used = true; } } break; } case 5240000: case 5240001: case 5240002: case 5240003: case 5240004: case 5240005: case 5240006: case 5240007: case 5240008: case 5240009: case 5240010: case 5240011: case 5240012: case 5240013: case 5240014: case 5240015: case 5240016: case 5240017: case 5240018: case 5240019: case 5240020: case 5240021: case 5240022: case 5240023: case 5240024: case 5240025: case 5240026: case 5240027: case 5240028: case 5240029: case 5240030: case 5240031: case 5240032: case 5240033: case 5240034: case 5240035: case 5240036: case 5240037: case 5240038: case 5240039: case 5240040: MaplePet pet = c.getPlayer().getPet(0); if (pet != null) { if (!pet.canConsume(itemId)) { pet = c.getPlayer().getPet(1); if (pet == null) { break; } if (!pet.canConsume(itemId)) { pet = c.getPlayer().getPet(2); if ((pet == null) || (!pet.canConsume(itemId))) { break; } } } byte petindex = c.getPlayer().getPetIndex(pet); pet.setFullness(100); if (pet.getCloseness() < 30000) { if (pet.getCloseness() + 100 * c.getChannelServer().getTraitRate() > 30000) { pet.setCloseness(30000); } else { pet.setCloseness(pet.getCloseness() + 100 * c.getChannelServer().getTraitRate()); } if (pet.getCloseness() >= GameConstants.getClosenessNeededForLevel(pet.getLevel() + 1)) { pet.setLevel(pet.getLevel() + 1); c.getSession().write(CField.EffectPacket.showOwnPetLevelUp(c.getPlayer().getPetIndex(pet))); c.getPlayer().getMap().broadcastMessage(PetPacket.showPetLevelUp(c.getPlayer(), petindex)); } } c.getSession().write(PetPacket.updatePet(pet, c.getPlayer().getInventory(MapleInventoryType.CASH).getItem(pet.getInventoryPosition()), true)); c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PetPacket.commandResponse(c.getPlayer().getId(), (byte) 1, petindex, true, true), true); used = true; } break; case 5230000: case 5230001: int itemSearch = slea.readInt(); List hms = c.getChannelServer().searchMerchant(itemSearch); if (hms.size() > 0) { c.getSession().write(CWvsContext.getOwlSearched(itemSearch, hms)); used = true; } else { c.getPlayer().dropMessage(1, "Unable to find the item."); } break; case 5280001: case 5281000: case 5281001: Rectangle bounds = new Rectangle((int) c.getPlayer().getPosition().getX(), (int) c.getPlayer().getPosition().getY(), 1, 1); MapleMist mist = new MapleMist(bounds, c.getPlayer()); c.getPlayer().getMap().spawnMist(mist, 10000, true); c.getSession().write(CWvsContext.enableActions()); used = true; break; case 5370000: case 5370001: break; case 5079000: case 5079001: case 5390000: case 5390001: case 5390002: case 5390003: case 5390004: case 5390005: case 5390006: case 5390007: case 5390008: case 5390009: if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "Must be level 10 or higher."); } else if (c.getPlayer().getMapId() == 910310300) { c.getPlayer().dropMessage(5, "Cannot be used here."); } else if (!c.getChannelServer().getMegaphoneMuteState()) { List lines = new LinkedList(); for (int i = 0; i < 4; i++) { String text = slea.readMapleAsciiString(); if (text.length() <= 55) { lines.add(text); } } boolean ear = slea.readByte() != 0; World.Broadcast.broadcastSmega(CWvsContext.getAvatarMega(c.getPlayer(), c.getChannel(), itemId, lines, ear)); used = true; } else { c.getPlayer().dropMessage(5, "The usage of Megaphone is currently disabled."); } break; case 5450000: case 5450003: case 5452001: for (int i : GameConstants.blockedMaps) { if (c.getPlayer().getMapId() == i) { c.getPlayer().dropMessage(5, "You may not use this command here."); c.getSession().write(CWvsContext.enableActions()); return; } } if (c.getPlayer().getLevel() < 10) { c.getPlayer().dropMessage(5, "You must be over level 10 to use this command."); } else if ((c.getPlayer().hasBlockedInventory()) || (c.getPlayer().getMap().getSquadByMap() != null) || (c.getPlayer().getEventInstance() != null) || (c.getPlayer().getMap().getEMByMap() != null) || (c.getPlayer().getMapId() >= 990000000)) { c.getPlayer().dropMessage(5, "You may not use this command here."); } else if (((c.getPlayer().getMapId() >= 680000210) && (c.getPlayer().getMapId() <= 680000502)) || ((c.getPlayer().getMapId() / 1000 == 980000) && (c.getPlayer().getMapId() != 980000000)) || (c.getPlayer().getMapId() / 100 == 1030008) || (c.getPlayer().getMapId() / 100 == 922010) || (c.getPlayer().getMapId() / 10 == 13003000)) { c.getPlayer().dropMessage(5, "You may not use this command here."); } else { MapleShopFactory.getInstance().getShop(61).sendShop(c); } break; case 5300000: case 5300001: case 5300002: { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); ii.getItemEffect(itemId).applyTo(c.getPlayer()); used = true; break; } default: if (itemId / 10000 == 512) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); String msg = ii.getMsg(itemId); String ourMsg = slea.readMapleAsciiString(); if (!msg.contains("%s")) { msg = ourMsg; } else { msg = msg.replaceFirst("%s", c.getPlayer().getName()); if (!msg.contains("%s")) { msg = ii.getMsg(itemId).replaceFirst("%s", ourMsg); } else { try { msg = msg.replaceFirst("%s", ourMsg); } catch (Exception e) { msg = ii.getMsg(itemId).replaceFirst("%s", ourMsg); } } } c.getPlayer().getMap().startMapEffect(msg, itemId); int buff = ii.getStateChangeItem(itemId); if (buff != 0) { for (MapleCharacter mChar : c.getPlayer().getMap().getCharactersThreadsafe()) { ii.getItemEffect(buff).applyTo(mChar); } } used = true; } else if (itemId / 10000 == 510) { c.getPlayer().getMap().startJukebox(c.getPlayer().getName(), itemId); used = true; } else if (itemId / 10000 == 520) { int mesars = MapleItemInformationProvider.getInstance().getMeso(itemId); if ((mesars > 0) && (c.getPlayer().getMeso() < 2147483647 - mesars)) { used = true; if (Math.random() > 0.1D) { int gainmes = Randomizer.nextInt(mesars); c.getPlayer().gainMeso(gainmes, false); c.getSession().write(MTSCSPacket.sendMesobagSuccess(gainmes)); } else { c.getSession().write(MTSCSPacket.sendMesobagFailed(false)); } } } else if (itemId / 10000 == 562) { if (UseSkillBook(slot, itemId, c, c.getPlayer())) { c.getPlayer().gainSP(1); } } else if (itemId / 10000 == 553) { UseRewardItem(slot, itemId, c, c.getPlayer()); } else if (itemId / 10000 != 519) { System.out.println(new StringBuilder().append("Unhandled CS item : ").append(itemId).toString()); System.out.println(slea.toString(true)); } break; } if (used) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, (short) slot, (short) 1, false, true); } c.getSession().write(CWvsContext.enableActions()); if (cc) { if ((!c.getPlayer().isAlive()) || (c.getPlayer().getEventInstance() != null) || (FieldLimitType.ChannelSwitch.check(c.getPlayer().getMap().getFieldLimit()))) { c.getPlayer().dropMessage(1, "Auto relog failed."); return; } c.getPlayer().dropMessage(5, "Auto relogging. Please wait."); c.getPlayer().fakeRelog(); if (c.getPlayer().getScrolledPosition() != 0) { c.getSession().write(CWvsContext.pamSongUI()); } } } public static void ResetCoreAura(int slot, MapleClient c, MapleCharacter chr) { Item starDust = chr.getInventory(MapleInventoryType.USE).getItem((short) (byte) slot); if ((starDust == null) || (c.getPlayer().hasBlockedInventory())) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); return; } } public static final void useInnerCirculator(LittleEndianAccessor slea, MapleClient c) { int itemid = slea.readInt(); short slot = (short) slea.readInt(); Item item = c.getPlayer().getInventory(MapleInventoryType.USE).getItem(slot); if (item.getItemId() == itemid) { List<InnerSkillValueHolder> newValues = new LinkedList(); int i = 0; for (InnerSkillValueHolder isvh : c.getPlayer().getInnerSkills()) { if ((i == 0) && (c.getPlayer().getInnerSkills().size() > 1) && (itemid == 2701000)) { newValues.add(InnerAbillity.getInstance().renewSkill(isvh.getRank(), itemid, true)); } else { newValues.add(InnerAbillity.getInstance().renewSkill(isvh.getRank(), itemid, false)); } i++; } c.getPlayer().getInnerSkills().clear(); for (InnerSkillValueHolder isvh : newValues) { c.getPlayer().getInnerSkills().add(isvh); } c.getPlayer().getInventory(MapleInventoryType.USE).removeItem(slot, (short) 1, false); c.getSession().write(CField.getCharInfo(c.getPlayer())); MapleMap currentMap = c.getPlayer().getMap(); currentMap.removePlayer(c.getPlayer()); currentMap.addPlayer(c.getPlayer()); c.getPlayer().dropMessage(5, "Inner Potential has been reconfigured."); } } public static final void Pickup_Player(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { if (c.getPlayer().hasBlockedInventory()) { return; } slea.readInt(); c.getPlayer().setScrolledPosition((short) 0); slea.skip(1); Point Client_Reportedpos = slea.readPos(); if ((chr == null) || (chr.getMap() == null)) { return; } MapleMapObject ob = chr.getMap().getMapObject(slea.readInt(), MapleMapObjectType.ITEM); if (ob == null) { c.getSession().write(CWvsContext.enableActions()); return; } MapleMapItem mapitem = (MapleMapItem) ob; Lock lock = mapitem.getLock(); lock.lock(); try { if (mapitem.isPickedUp()) { c.getSession().write(CWvsContext.enableActions()); } else if ((mapitem.getQuest() > 0) && (chr.getQuestStatus(mapitem.getQuest()) != 1)) { c.getSession().write(CWvsContext.enableActions()); } else if ((mapitem.getOwner() != chr.getId()) && (((!mapitem.isPlayerDrop()) && (mapitem.getDropType() == 0)) || ((mapitem.isPlayerDrop()) && (chr.getMap().getEverlast())))) { c.getSession().write(CWvsContext.enableActions()); } else if ((!mapitem.isPlayerDrop()) && (mapitem.getDropType() == 1) && (mapitem.getOwner() != chr.getId()) && ((chr.getParty() == null) || (chr.getParty().getMemberById(mapitem.getOwner()) == null))) { c.getSession().write(CWvsContext.enableActions()); } else { double Distance = Client_Reportedpos.distanceSq(mapitem.getPosition()); if (mapitem.getMeso() > 0) { if ((chr.getParty() != null) && (mapitem.getOwner() != chr.getId())) { List<MapleCharacter> toGive = new LinkedList(); int splitMeso = mapitem.getMeso() * 40 / 100; for (MaplePartyCharacter z : chr.getParty().getMembers()) { MapleCharacter m = chr.getMap().getCharacterById(z.getId()); if ((m != null) && (m.getId() != chr.getId())) { toGive.add(m); } } for (MapleCharacter m : toGive) { int mesos = splitMeso / toGive.size(); if (((mapitem.getDropper() instanceof MapleMonster)) && (m.getStat().incMesoProp > 0)) { mesos = (int) (mesos + Math.floor(m.getStat().incMesoProp * mesos / 100.0F)); } m.gainMeso(mesos, true); } int mesos = mapitem.getMeso() - splitMeso; if (((mapitem.getDropper() instanceof MapleMonster)) && (chr.getStat().incMesoProp > 0)) { mesos = (int) (mesos + Math.floor(chr.getStat().incMesoProp * mesos / 100.0F)); } chr.gainMeso(mesos, true); } else { int mesos = mapitem.getMeso(); if (((mapitem.getDropper() instanceof MapleMonster)) && (chr.getStat().incMesoProp > 0)) { mesos = (int) (mesos + Math.floor(chr.getStat().incMesoProp * mesos / 100.0F)); } chr.gainMeso(mesos, true); } removeItem(chr, mapitem, ob); // } else if (MapleItemInformationProvider.getInstance().isPickupBlocked(mapitem.getItemId())) { // c.getSession().write(CWvsContext.enableActions()); // c.getPlayer().dropMessage(5, "This item cannot be picked up."); // if (c.getPlayer().haveItem(4001326, 1)) { // c.getSession().write(CWvsContext.enableActions()); // c.getPlayer().dropMessage(5, "You may only have 1 of the color Red at a time."); // return; // } // if (c.getPlayer().haveItem(4001327, 1)) { // c.getSession().write(CWvsContext.enableActions()); // c.getPlayer().dropMessage(5, "You may only have 1 of the color Orange at a time."); // return; // } // if (c.getPlayer().haveItem(4001328, 1)) { // c.getSession().write(CWvsContext.enableActions()); // c.getPlayer().dropMessage(5, "You may only have 1 of the color Yellow at a time."); // return; // } // if (c.getPlayer().haveItem(4001329, 1)) { // c.getSession().write(CWvsContext.enableActions()); // c.getPlayer().dropMessage(5, "You may only have 1 of the color Green at a time."); // return; // } // if (c.getPlayer().haveItem(4001330, 1)) { // c.getSession().write(CWvsContext.enableActions()); // c.getPlayer().dropMessage(5, "You may only have 1 of the color Blue at a time."); // return; // } // if (c.getPlayer().haveItem(4001331, 1)) { // c.getSession().write(CWvsContext.enableActions()); // c.getPlayer().dropMessage(5, "You may only have 1 of the color Indigo at a time."); // return; // } // if (c.getPlayer().haveItem(4001332, 1)) { // c.getSession().write(CWvsContext.enableActions()); // c.getPlayer().dropMessage(5, "You may only have 1 of the color Violet at a time."); // } } else if ((c.getPlayer().inPVP()) && (Integer.parseInt(c.getPlayer().getEventInstance().getProperty("ice")) == c.getPlayer().getId())) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.InventoryPacket.getShowInventoryFull()); c.getSession().write(CWvsContext.enableActions()); } else if (useItem(c, mapitem.getItemId())) { removeItem(c.getPlayer(), mapitem, ob); if (mapitem.getItemId() / 10000 == 291) { c.getPlayer().getMap().broadcastMessage(CField.getCapturePosition(c.getPlayer().getMap())); c.getPlayer().getMap().broadcastMessage(CField.resetCapture()); } } else if ((mapitem.getItemId() / 10000 != 291) && (MapleInventoryManipulator.checkSpace(c, mapitem.getItemId(), mapitem.getItem().getQuantity(), mapitem.getItem().getOwner()))) { if ((mapitem.getItem().getQuantity() >= 50) && (mapitem.getItemId() == 2340000)) { c.setMonitored(true); } MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), true, mapitem.getDropper() instanceof MapleMonster); removeItem(chr, mapitem, ob); } else { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); c.getSession().write(CWvsContext.InventoryPacket.getShowInventoryFull()); c.getSession().write(CWvsContext.enableActions()); } } } finally { lock.unlock(); } } public static final void Pickup_Pet(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) { if (chr == null) { return; } c.getPlayer().setScrolledPosition((short) 0); byte petz = (byte) (GameConstants.GMS ? c.getPlayer().getPetIndex((int) slea.readLong()) : slea.readInt()); MaplePet pet = chr.getPet(petz); slea.skip(1); slea.readInt(); Point Client_Reportedpos = slea.readPos(); MapleMapObject ob = chr.getMap().getMapObject(slea.readInt(), MapleMapObjectType.ITEM); if ((ob == null) || (pet == null)) { return; } MapleMapItem mapitem = (MapleMapItem) ob; Lock lock = mapitem.getLock(); lock.lock(); try { if (mapitem.isPickedUp()) { c.getSession().write(CWvsContext.InventoryPacket.getInventoryFull()); } else { if ((mapitem.getOwner() != chr.getId()) && (mapitem.isPlayerDrop())) { return; } if ((mapitem.getOwner() != chr.getId()) && (((!mapitem.isPlayerDrop()) && (mapitem.getDropType() == 0)) || ((mapitem.isPlayerDrop()) && (chr.getMap().getEverlast())))) { c.getSession().write(CWvsContext.enableActions()); } else if ((!mapitem.isPlayerDrop()) && (mapitem.getDropType() == 1) && (mapitem.getOwner() != chr.getId()) && ((chr.getParty() == null) || (chr.getParty().getMemberById(mapitem.getOwner()) == null))) { c.getSession().write(CWvsContext.enableActions()); } else { double Distance = Client_Reportedpos.distanceSq(mapitem.getPosition()); if (mapitem.getMeso() > 0) { if ((chr.getParty() != null) && (mapitem.getOwner() != chr.getId())) { List<MapleCharacter> toGive = new LinkedList(); int splitMeso = mapitem.getMeso() * 40 / 100; for (MaplePartyCharacter z : chr.getParty().getMembers()) { MapleCharacter m = chr.getMap().getCharacterById(z.getId()); if ((m != null) && (m.getId() != chr.getId())) { toGive.add(m); } } for (MapleCharacter m : toGive) { m.gainMeso(splitMeso / toGive.size(), true); } chr.gainMeso(mapitem.getMeso() - splitMeso, true); } else { chr.gainMeso(mapitem.getMeso(), true); } removeItem_Pet(chr, mapitem, petz); } else if (mapitem.getItemId() / 10000 == 291) { c.getSession().write(CWvsContext.enableActions()); } else if (useItem(c, mapitem.getItemId())) { removeItem_Pet(chr, mapitem, petz); } else if (MapleInventoryManipulator.checkSpace(c, mapitem.getItemId(), mapitem.getItem().getQuantity(), mapitem.getItem().getOwner())) { if ((mapitem.getItem().getQuantity() >= 50) && (mapitem.getItemId() == 2340000)) { c.setMonitored(true); } MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), true, mapitem.getDropper() instanceof MapleMonster); removeItem_Pet(chr, mapitem, petz); } } } } finally { lock.unlock(); } } public static final boolean useItem(MapleClient c, int id) { if (GameConstants.isUse(id)) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); MapleStatEffect eff = ii.getItemEffect(id); if (eff == null) { return false; } if (id / 10000 == 291) { boolean area = false; for (Rectangle rect : c.getPlayer().getMap().getAreas()) { if (rect.contains(c.getPlayer().getTruePosition())) { area = true; break; } } if ((!c.getPlayer().inPVP()) || ((c.getPlayer().getTeam() == id - 2910000) && (area))) { return false; } } int consumeval = eff.getConsume(); if (consumeval > 0) { consumeItem(c, eff); consumeItem(c, ii.getItemEffectEX(id)); c.getSession().write(CWvsContext.InfoPacket.getShowItemGain(id, (short) 1)); return true; } } return false; } public static final void consumeItem(MapleClient c, MapleStatEffect eff) { if (eff == null) { return; } if (eff.getConsume() == 2) { if ((c.getPlayer().getParty() != null) && (c.getPlayer().isAlive())) { for (MaplePartyCharacter pc : c.getPlayer().getParty().getMembers()) { MapleCharacter chr = c.getPlayer().getMap().getCharacterById(pc.getId()); if ((chr != null) && (chr.isAlive())) { eff.applyTo(chr); } } } else { eff.applyTo(c.getPlayer()); } } else if (c.getPlayer().isAlive()) { eff.applyTo(c.getPlayer()); } } public static final void removeItem_Pet(MapleCharacter chr, MapleMapItem mapitem, int pet) { mapitem.setPickedUp(true); chr.getMap().broadcastMessage(CField.removeItemFromMap(mapitem.getObjectId(), 5, chr.getId(), pet)); chr.getMap().removeMapObject(mapitem); if (mapitem.isRandDrop()) { chr.getMap().spawnRandDrop(); } } public static final void removeItem(MapleCharacter chr, MapleMapItem mapitem, MapleMapObject ob) { mapitem.setPickedUp(true); chr.getMap().broadcastMessage(CField.removeItemFromMap(mapitem.getObjectId(), 2, chr.getId()), mapitem.getPosition()); chr.getMap().removeMapObject(ob); if (mapitem.isRandDrop()) { chr.getMap().spawnRandDrop(); } } private static final void addMedalString(MapleCharacter c, StringBuilder sb) { Item medal = c.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -46); if (medal != null) { sb.append("<"); if ((medal.getItemId() == 1142257) && (GameConstants.isAdventurer(c.getJob()))) { MapleQuestStatus stat = c.getQuestNoAdd(MapleQuest.getInstance(111111)); if ((stat != null) && (stat.getCustomData() != null)) { sb.append(stat.getCustomData()); sb.append("'s Successor"); } else { sb.append(MapleItemInformationProvider.getInstance().getName(medal.getItemId())); } } else { sb.append(MapleItemInformationProvider.getInstance().getName(medal.getItemId())); } sb.append("> "); } } private static final boolean getIncubatedItems(MapleClient c, int itemId) { if ((c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNumFreeSlot() < 2) || (c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() < 2) || (c.getPlayer().getInventory(MapleInventoryType.SETUP).getNumFreeSlot() < 2)) { c.getPlayer().dropMessage(5, "Please make room in your inventory."); return false; } MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int id1 = RandomRewards.getPeanutReward(); int id2 = RandomRewards.getPeanutReward(); while (!ii.itemExists(id1)) { id1 = RandomRewards.getPeanutReward(); } while (!ii.itemExists(id2)) { id2 = RandomRewards.getPeanutReward(); } c.getSession().write(CWvsContext.getPeanutResult(id1, (short) 1, id2, (short) 1, itemId)); MapleInventoryManipulator.addById(c, id1, (short) 1, new StringBuilder().append(ii.getName(itemId)).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); MapleInventoryManipulator.addById(c, id2, (short) 1, new StringBuilder().append(ii.getName(itemId)).append(" on ").append(FileoutputUtil.CurrentReadable_Date()).toString()); c.getPlayer().dropMessage(1, new StringBuilder().append("You have gained ").append(id1).append(",").append(id2).toString()); return true; } public static final void OwlMinerva(LittleEndianAccessor slea, MapleClient c) { byte slot = (byte) slea.readShort(); int itemid = slea.readInt(); Item toUse = c.getPlayer().getInventory(MapleInventoryType.USE).getItem((short) slot); if ((toUse != null) && (toUse.getQuantity() > 0) && (toUse.getItemId() == itemid) && (itemid == 2310000) && (!c.getPlayer().hasBlockedInventory())) { int itemSearch = slea.readInt(); List hms = c.getChannelServer().searchMerchant(itemSearch); if (hms.size() > 0) { c.getSession().write(CWvsContext.getOwlSearched(itemSearch, hms)); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemid, 1, true, false); } else { c.getPlayer().dropMessage(1, "Unable to find the item."); } } c.getSession().write(CWvsContext.enableActions()); } public static final void Owl(LittleEndianAccessor slea, MapleClient c) { if ((c.getPlayer().haveItem(5230000, 1, true, false)) || (c.getPlayer().haveItem(2310000, 1, true, false))) { if ((c.getPlayer().getMapId() >= 910000000) && (c.getPlayer().getMapId() <= 910000022)) { c.getSession().write(CWvsContext.getOwlOpen()); } else { c.getPlayer().dropMessage(5, "This can only be used inside the Free Market."); c.getSession().write(CWvsContext.enableActions()); } } } public static final void OwlWarp(LittleEndianAccessor slea, MapleClient c) { if (!c.getPlayer().isAlive()) { c.getSession().write(CWvsContext.getOwlMessage(4)); return; } if (c.getPlayer().getTrade() != null) { c.getSession().write(CWvsContext.getOwlMessage(7)); return; } if ((c.getPlayer().getMapId() >= 910000000) && (c.getPlayer().getMapId() <= 910000022) && (!c.getPlayer().hasBlockedInventory())) { int id = slea.readInt(); int map = slea.readInt(); if ((map >= 910000001) && (map <= 910000022)) { c.getSession().write(CWvsContext.getOwlMessage(0)); MapleMap mapp = c.getChannelServer().getMapFactory().getMap(map); c.getPlayer().changeMap(mapp, mapp.getPortal(0)); HiredMerchant merchant = null; List<MapleMapObject> objects; switch (2) { case 0: objects = mapp.getAllHiredMerchantsThreadsafe(); for (MapleMapObject ob : objects) { if ((ob instanceof IMaplePlayerShop)) { IMaplePlayerShop ips = (IMaplePlayerShop) ob; if ((ips instanceof HiredMerchant)) { HiredMerchant merch = (HiredMerchant) ips; if (merch.getOwnerId() == id) { merchant = merch; break; } } } } break; case 1: objects = mapp.getAllHiredMerchantsThreadsafe(); for (MapleMapObject ob : objects) { if ((ob instanceof IMaplePlayerShop)) { IMaplePlayerShop ips = (IMaplePlayerShop) ob; if ((ips instanceof HiredMerchant)) { HiredMerchant merch = (HiredMerchant) ips; if (merch.getStoreId() == id) { merchant = merch; break; } } } } break; default: MapleMapObject ob = mapp.getMapObject(id, MapleMapObjectType.HIRED_MERCHANT); if ((ob instanceof IMaplePlayerShop)) { IMaplePlayerShop ips = (IMaplePlayerShop) ob; if ((ips instanceof HiredMerchant)) { merchant = (HiredMerchant) ips; } } break; } if (merchant != null) { if (merchant.isOwner(c.getPlayer())) { merchant.setOpen(false); merchant.removeAllVisitors(16, 0); c.getPlayer().setPlayerShop(merchant); c.getSession().write(PlayerShopPacket.getHiredMerch(c.getPlayer(), merchant, false)); } else if ((!merchant.isOpen()) || (!merchant.isAvailable())) { c.getPlayer().dropMessage(1, "The owner of the store is currently undergoing store maintenance. Please try again in a bit."); } else if (merchant.getFreeSlot() == -1) { c.getPlayer().dropMessage(1, "You can't enter the room due to full capacity."); } else if (merchant.isInBlackList(c.getPlayer().getName())) { c.getPlayer().dropMessage(1, "You may not enter this store."); } else { c.getPlayer().setPlayerShop(merchant); merchant.addVisitor(c.getPlayer()); c.getSession().write(PlayerShopPacket.getHiredMerch(c.getPlayer(), merchant, false)); } } else { c.getPlayer().dropMessage(1, "The room is already closed."); } } else { c.getSession().write(CWvsContext.getOwlMessage(23)); } } else { c.getSession().write(CWvsContext.getOwlMessage(23)); } } public static final void PamSong(LittleEndianAccessor slea, MapleClient c) { Item pam = c.getPlayer().getInventory(MapleInventoryType.CASH).findById(5640000); if ((slea.readByte() > 0) && (c.getPlayer().getScrolledPosition() != 0) && (pam != null) && (pam.getQuantity() > 0)) { MapleInventoryType inv = c.getPlayer().getScrolledPosition() < 0 ? MapleInventoryType.EQUIPPED : MapleInventoryType.EQUIP; Item item = c.getPlayer().getInventory(inv).getItem(c.getPlayer().getScrolledPosition()); c.getPlayer().setScrolledPosition((short) 0); if (item != null) { Equip eq = (Equip) item; eq.setUpgradeSlots((byte) (eq.getUpgradeSlots() + 1)); c.getPlayer().forceReAddItem_Flag(eq, inv); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, pam.getPosition(), (short) 1, true, false); c.getPlayer().getMap().broadcastMessage(CField.pamsSongEffect(c.getPlayer().getId())); } } else { c.getPlayer().setScrolledPosition((short) 0); } } public static final void TeleRock(LittleEndianAccessor slea, MapleClient c) { byte slot = (byte) slea.readShort(); int itemId = slea.readInt(); Item toUse = c.getPlayer().getInventory(MapleInventoryType.USE).getItem((short) slot); if ((toUse == null) || (toUse.getQuantity() < 1) || (toUse.getItemId() != itemId) || (itemId / 10000 != 232) || (c.getPlayer().hasBlockedInventory())) { c.getSession().write(CWvsContext.enableActions()); return; } boolean used = UseTeleRock(slea, c, itemId); if (used) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (short) slot, (short) 1, false); } c.getSession().write(CWvsContext.enableActions()); } public static final boolean UseTeleRock(LittleEndianAccessor slea, MapleClient c, int itemId) { boolean used = false; if ((itemId == 5041001) || (itemId == 5040004)) { slea.readByte(); } if (slea.readByte() == 0) { MapleMap target = c.getChannelServer().getMapFactory().getMap(slea.readInt()); if (((itemId == 5041000) && (c.getPlayer().isRockMap(target.getId()))) || ((itemId != 5041000) && (c.getPlayer().isRegRockMap(target.getId()))) || (((itemId == 5040004) || (itemId == 5041001)) && ((c.getPlayer().isHyperRockMap(target.getId())) || (GameConstants.isHyperTeleMap(target.getId()))) && (!FieldLimitType.VipRock.check(c.getPlayer().getMap().getFieldLimit())) && (!FieldLimitType.VipRock.check(target.getFieldLimit())) && (!c.getPlayer().isInBlockedMap()))) { c.getPlayer().changeMap(target, target.getPortal(0)); used = true; } } else { MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString()); if ((victim != null) && (!victim.isIntern()) && (c.getPlayer().getEventInstance() == null) && (victim.getEventInstance() == null) && (!FieldLimitType.VipRock.check(c.getPlayer().getMap().getFieldLimit())) && (!FieldLimitType.VipRock.check(c.getChannelServer().getMapFactory().getMap(victim.getMapId()).getFieldLimit())) && (!victim.isInBlockedMap()) && (!c.getPlayer().isInBlockedMap()) && ((itemId == 5041000) || (itemId == 5040004) || (itemId == 5041001) || (victim.getMapId() / 100000000 == c.getPlayer().getMapId() / 100000000))) { c.getPlayer().changeMap(victim.getMap(), victim.getMap().findClosestPortal(victim.getTruePosition())); used = true; } } return (used) && (itemId != 5041001) && (itemId != 5040004); } }