Search in sources :

Example 41 with Pair

use of tools.Pair in project HeavenMS by ronancpl.

the class UseCashItemHandler method handlePacket.

@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
    final MapleCharacter player = c.getPlayer();
    if (System.currentTimeMillis() - player.getLastUsedCashItem() < 3000) {
        player.dropMessage(1, "You have used a cash item recently. Wait a moment, then try again.");
        c.announce(MaplePacketCreator.enableActions());
        return;
    }
    player.setLastUsedCashItem(System.currentTimeMillis());
    MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
    slea.readShort();
    int itemId = slea.readInt();
    int itemType = itemId / 10000;
    Item toUse = c.getPlayer().getInventory(MapleInventoryType.CASH).getItem(c.getPlayer().getInventory(MapleInventoryType.CASH).findById(itemId).getPosition());
    String medal = "";
    Item medalItem = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((short) -49);
    if (medalItem != null) {
        medal = "<" + ii.getName(medalItem.getItemId()) + "> ";
    }
    if (toUse == null || toUse.getItemId() != itemId || toUse.getQuantity() < 1) {
        c.announce(MaplePacketCreator.enableActions());
        return;
    }
    if (itemType == 505) {
        // AP/SP reset
        if (!player.isAlive()) {
            c.announce(MaplePacketCreator.enableActions());
            return;
        }
        if (itemId > 5050000) {
            int SPTo = slea.readInt();
            int SPFrom = slea.readInt();
            Skill skillSPTo = SkillFactory.getSkill(SPTo);
            Skill skillSPFrom = SkillFactory.getSkill(SPFrom);
            byte curLevel = player.getSkillLevel(skillSPTo);
            byte curLevelSPFrom = player.getSkillLevel(skillSPFrom);
            if ((curLevel < skillSPTo.getMaxLevel()) && curLevelSPFrom > 0) {
                player.changeSkillLevel(skillSPFrom, (byte) (curLevelSPFrom - 1), player.getMasterLevel(skillSPFrom), -1);
                player.changeSkillLevel(skillSPTo, (byte) (curLevel + 1), player.getMasterLevel(skillSPTo), -1);
            }
        } else {
            List<Pair<MapleStat, Integer>> statupdate = new ArrayList<>(2);
            int APTo = slea.readInt();
            int APFrom = slea.readInt();
            switch(APFrom) {
                case // str
                64:
                    if (player.getStr() < 5) {
                        c.getPlayer().message("You don't have the minimum STR required to swap.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                    player.addStat(1, -1);
                    break;
                case // dex
                128:
                    if (player.getDex() < 5) {
                        c.getPlayer().message("You don't have the minimum DEX required to swap.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                    player.addStat(2, -1);
                    break;
                case // int
                256:
                    if (player.getInt() < 5) {
                        c.getPlayer().message("You don't have the minimum INT required to swap.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                    player.addStat(3, -1);
                    break;
                case // luk
                512:
                    if (player.getLuk() < 5) {
                        c.getPlayer().message("You don't have the minimum LUK required to swap.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                    player.addStat(4, -1);
                    break;
                case // HP
                2048:
                    if (ServerConstants.USE_ENFORCE_HPMP_SWAP) {
                        if (APTo != 8192) {
                            c.getPlayer().message("You can only swap HP ability points to MP.");
                            c.announce(MaplePacketCreator.enableActions());
                            return;
                        }
                    }
                    if (player.getHpMpApUsed() < 1) {
                        c.getPlayer().message("You don't have enough HPMP stat points to spend on AP Reset.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                    int hp = player.getMaxHp();
                    int level_ = player.getLevel();
                    boolean canWash_ = true;
                    if (hp < level_ * 14 + 148) {
                        canWash_ = false;
                    }
                    if (!canWash_) {
                        c.getPlayer().message("You don't have the minimum HP pool required to swap.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                    player.setHpMpApUsed(player.getHpMpApUsed() - 1);
                    int hplose = -DistributeAPHandler.takeHp(player, player.getJob());
                    int nextHp = Math.max(1, player.getHp() + hplose), nextMaxHp = Math.max(50, player.getMaxHp() + hplose);
                    player.setHp(nextHp);
                    player.setMaxHp(nextMaxHp);
                    statupdate.add(new Pair<>(MapleStat.HP, nextHp));
                    statupdate.add(new Pair<>(MapleStat.MAXHP, nextMaxHp));
                    break;
                case // MP
                8192:
                    if (ServerConstants.USE_ENFORCE_HPMP_SWAP) {
                        if (APTo != 2048) {
                            c.getPlayer().message("You can only swap MP ability points to HP.");
                            c.announce(MaplePacketCreator.enableActions());
                            return;
                        }
                    }
                    if (player.getHpMpApUsed() < 1) {
                        c.getPlayer().message("You don't have enough HPMP stat points to spend on AP Reset.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                    int mp = player.getMaxMp();
                    int level = player.getLevel();
                    MapleJob job = player.getJob();
                    boolean canWash = true;
                    if (job.isA(MapleJob.SPEARMAN) && mp < 4 * level + 156) {
                        canWash = false;
                    } else if (job.isA(MapleJob.FIGHTER) && mp < 4 * level + 56) {
                        canWash = false;
                    } else if (job.isA(MapleJob.THIEF) && job.getId() % 100 > 0 && mp < level * 14 - 4) {
                        canWash = false;
                    } else if (mp < level * 14 + 148) {
                        canWash = false;
                    }
                    if (!canWash) {
                        c.getPlayer().message("You don't have the minimum MP pool required to swap.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                    player.setHpMpApUsed(player.getHpMpApUsed() - 1);
                    int mplose = -DistributeAPHandler.takeMp(player, job);
                    int nextMp = Math.max(0, player.getMp() + mplose), nextMaxMp = Math.max(5, player.getMaxMp() + mplose);
                    player.setMp(nextMp);
                    player.setMaxMp(nextMaxMp);
                    statupdate.add(new Pair<>(MapleStat.MP, nextMp));
                    statupdate.add(new Pair<>(MapleStat.MAXMP, nextMaxMp));
                    break;
                default:
                    c.announce(MaplePacketCreator.updatePlayerStats(MaplePacketCreator.EMPTY_STATUPDATE, true, c.getPlayer()));
                    return;
            }
            DistributeAPHandler.addStat(c, APTo, true);
            c.announce(MaplePacketCreator.updatePlayerStats(statupdate, true, c.getPlayer()));
        }
        remove(c, itemId);
    } else if (itemType == 506) {
        Item eq = null;
        if (itemId == 5060000) {
            // Item tag.
            int equipSlot = slea.readShort();
            if (equipSlot == 0) {
                return;
            }
            eq = player.getInventory(MapleInventoryType.EQUIPPED).getItem((short) equipSlot);
            eq.setOwner(player.getName());
        } else if (itemId == 5060001 || itemId == 5061000 || itemId == 5061001 || itemId == 5061002 || itemId == 5061003) {
            // Sealing lock
            MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt());
            eq = c.getPlayer().getInventory(type).getItem((short) slea.readInt());
            if (eq == null) {
                // Check if the type is EQUIPMENT?
                return;
            }
            byte flag = eq.getFlag();
            flag |= ItemConstants.LOCK;
            if (eq.getExpiration() > -1) {
                // No perma items pls
                return;
            }
            eq.setFlag(flag);
            long period = 0;
            if (itemId == 5061000) {
                period = 7;
            } else if (itemId == 5061001) {
                period = 30;
            } else if (itemId == 5061002) {
                period = 90;
            } else if (itemId == 5061003) {
                period = 365;
            }
            if (period > 0) {
                eq.setExpiration(System.currentTimeMillis() + (period * 60 * 60 * 24 * 1000));
            }
            remove(c, itemId);
        } else if (itemId == 5060002) {
            // Incubator
            byte inventory2 = (byte) slea.readInt();
            short slot2 = (short) slea.readInt();
            Item item2 = c.getPlayer().getInventory(MapleInventoryType.getByType(inventory2)).getItem(slot2);
            if (// hacking
            item2 == null) {
                return;
            }
            if (getIncubatedItem(c, itemId)) {
                MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.getByType(inventory2), slot2, (short) 1, false);
                remove(c, itemId);
            }
            return;
        }
        // time stamp
        slea.readInt();
        if (eq != null) {
            player.forceUpdateItem(eq);
            remove(c, itemId);
        }
    } else if (itemType == 507) {
        boolean whisper;
        switch(itemId / 1000 % 10) {
            case // Megaphone
            1:
                if (player.getLevel() > 9) {
                    player.getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(2, medal + player.getName() + " : " + slea.readMapleAsciiString()));
                } else {
                    player.dropMessage(1, "You may not use this until you're level 10.");
                }
                break;
            case // Super megaphone
            2:
                Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + slea.readMapleAsciiString(), (slea.readByte() != 0)));
                break;
            case // Maple TV
            5:
                int tvType = itemId % 10;
                boolean megassenger = false;
                boolean ear = false;
                MapleCharacter victim = null;
                if (tvType != 1) {
                    if (tvType >= 3) {
                        megassenger = true;
                        if (tvType == 3) {
                            slea.readByte();
                        }
                        ear = 1 == slea.readByte();
                    } else if (tvType != 2) {
                        slea.readByte();
                    }
                    if (tvType != 4) {
                        victim = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString());
                    }
                }
                List<String> messages = new LinkedList<>();
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < 5; i++) {
                    String message = slea.readMapleAsciiString();
                    if (megassenger) {
                        builder.append(" ").append(message);
                    }
                    messages.add(message);
                }
                slea.readInt();
                if (megassenger) {
                    Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + builder.toString(), ear));
                }
                if (!MapleTVEffect.isActive()) {
                    new MapleTVEffect(player, victim, messages, tvType);
                    remove(c, itemId);
                } else {
                    player.dropMessage(1, "MapleTV is already in use.");
                    return;
                }
                break;
            case // item megaphone
            6:
                String msg = medal + c.getPlayer().getName() + " : " + slea.readMapleAsciiString();
                whisper = slea.readByte() == 1;
                Item item = null;
                if (slea.readByte() == 1) {
                    // item
                    item = c.getPlayer().getInventory(MapleInventoryType.getByType((byte) slea.readInt())).getItem((short) slea.readInt());
                    if (// hack
                    item == null) {
                        return;
                    } else if (((item.getFlag() & ItemConstants.UNTRADEABLE) == ItemConstants.UNTRADEABLE) || ii.isDropRestricted(item.getItemId())) {
                        player.dropMessage(1, "You cannot trade this item.");
                        c.announce(MaplePacketCreator.enableActions());
                        return;
                    }
                }
                Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.itemMegaphone(msg, whisper, c.getChannel(), item));
                break;
            case // triple megaphone
            7:
                int lines = slea.readByte();
                if (// hack
                lines < 1 || lines > 3) {
                    return;
                }
                String[] msg2 = new String[lines];
                for (int i = 0; i < lines; i++) {
                    msg2[i] = medal + c.getPlayer().getName() + " : " + slea.readMapleAsciiString();
                }
                whisper = slea.readByte() == 1;
                Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.getMultiMegaphone(msg2, c.getChannel(), whisper));
                break;
        }
        remove(c, itemId);
    } else if (itemType == 508) {
        // graduation banner
        // message, separated by 0A for lines
        slea.readMapleAsciiString();
        c.announce(MaplePacketCreator.enableActions());
    } else if (itemType == 509) {
        String sendTo = slea.readMapleAsciiString();
        String msg = slea.readMapleAsciiString();
        try {
            player.sendNote(sendTo, msg, (byte) 0);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        remove(c, itemId);
    } else if (itemType == 510) {
        player.getMap().broadcastMessage(MaplePacketCreator.musicChange("Jukebox/Congratulation"));
        remove(c, itemId);
    } else if (itemType == 512) {
        if (ii.getStateChangeItem(itemId) != 0) {
            for (MapleCharacter mChar : c.getPlayer().getMap().getCharacters()) {
                ii.getItemEffect(ii.getStateChangeItem(itemId)).applyTo(mChar);
            }
        }
        player.getMap().startMapEffect(ii.getMsg(itemId).replaceFirst("%s", c.getPlayer().getName()).replaceFirst("%s", slea.readMapleAsciiString()), itemId);
        remove(c, itemId);
    } else if (itemType == 517) {
        MaplePet pet = player.getPet(0);
        if (pet == null) {
            c.announce(MaplePacketCreator.enableActions());
            return;
        }
        String newName = slea.readMapleAsciiString();
        pet.setName(newName);
        pet.saveToDb();
        Item item = player.getInventory(MapleInventoryType.CASH).getItem(pet.getPosition());
        if (item != null)
            player.forceUpdateItem(item);
        player.getMap().broadcastMessage(player, MaplePacketCreator.changePetName(player, newName, 1), true);
        c.announce(MaplePacketCreator.enableActions());
        remove(c, itemId);
    } else if (itemType == 504) {
        // vip teleport rock
        String error1 = "Either the player could not be found or you were trying to teleport to an illegal location.";
        boolean vip = slea.readByte() == 1;
        remove(c, itemId);
        if (!vip) {
            int mapId = slea.readInt();
            if (c.getChannelServer().getMapFactory().getMap(mapId).getForcedReturnId() == 999999999) {
                player.changeMap(c.getChannelServer().getMapFactory().getMap(mapId));
            } else {
                MapleInventoryManipulator.addById(c, itemId, (short) 1);
                c.getPlayer().dropMessage(1, error1);
                c.announce(MaplePacketCreator.enableActions());
            }
        } else {
            String name = slea.readMapleAsciiString();
            MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(name);
            boolean success = false;
            if (victim != null) {
                MapleMap target = victim.getMap();
                if (c.getChannelServer().getMapFactory().getMap(victim.getMapId()).getForcedReturnId() == 999999999 || victim.getMapId() < 100000000) {
                    if (victim.gmLevel() <= player.gmLevel()) {
                        if (itemId == 5041000 || victim.getMapId() / player.getMapId() == 1) {
                            // viprock & same continent
                            player.changeMap(target, target.findClosestPlayerSpawnpoint(victim.getPosition()));
                            success = true;
                        } else {
                            player.dropMessage(1, "You cannot teleport between continents with this teleport rock.");
                        }
                    } else {
                        player.dropMessage(1, error1);
                    }
                } else {
                    player.dropMessage(1, "You cannot teleport to this map.");
                }
            } else {
                player.dropMessage(1, "Player could not be found in this channel.");
            }
            if (!success) {
                MapleInventoryManipulator.addById(c, itemId, (short) 1);
                c.announce(MaplePacketCreator.enableActions());
            }
        }
    } else if (itemType == 520) {
        player.gainMeso(ii.getMeso(itemId), true, false, true);
        remove(c, itemId);
        c.announce(MaplePacketCreator.enableActions());
    } else if (itemType == 523) {
        int itemid = slea.readInt();
        if (!ServerConstants.USE_ENFORCE_OWL_SUGGESTIONS)
            c.getWorldServer().addOwlItemSearch(itemid);
        player.setOwlSearch(itemid);
        List<Pair<MaplePlayerShopItem, AbstractMapleMapObject>> hmsAvailable = c.getWorldServer().getAvailableItemBundles(itemid);
        if (!hmsAvailable.isEmpty())
            remove(c, itemId);
        c.announce(MaplePacketCreator.owlOfMinerva(c, itemid, hmsAvailable));
        c.announce(MaplePacketCreator.enableActions());
    } else if (itemType == 524) {
        for (byte i = 0; i < 3; i++) {
            MaplePet pet = player.getPet(i);
            if (pet != null) {
                if (pet.canConsume(itemId)) {
                    pet.gainClosenessFullness(player, 100, 100, 1);
                    remove(c, itemId);
                    break;
                }
            } else {
                break;
            }
        }
        c.announce(MaplePacketCreator.enableActions());
    } else if (itemType == 530) {
        ii.getItemEffect(itemId).applyTo(player);
        remove(c, itemId);
    } else if (itemType == 533) {
        NPCScriptManager.getInstance().start(c, 9010009, null);
    } else if (itemType == 537) {
        player.setChalkboard(slea.readMapleAsciiString());
        player.getMap().broadcastMessage(MaplePacketCreator.useChalkboard(player, false));
        player.getClient().announce(MaplePacketCreator.enableActions());
    } else if (itemType == 539) {
        List<String> strLines = new LinkedList<>();
        for (int i = 0; i < 4; i++) {
            strLines.add(slea.readMapleAsciiString());
        }
        final int world = c.getWorld();
        Server.getInstance().broadcastMessage(world, MaplePacketCreator.getAvatarMega(c.getPlayer(), medal, c.getChannel(), itemId, strLines, (slea.readByte() != 0)));
        TimerManager.getInstance().schedule(new Runnable() {

            @Override
            public void run() {
                Server.getInstance().broadcastMessage(world, MaplePacketCreator.byeAvatarMega());
            }
        }, 1000 * 10);
        remove(c, itemId);
    } else if (itemType == 545) {
        // MiuMiu's travel store
        if (player.getShop() == null) {
            MapleShop shop = MapleShopFactory.getInstance().getShop(1338);
            if (shop != null) {
                shop.sendShop(c);
                remove(c, itemId);
            }
        } else {
            c.announce(MaplePacketCreator.enableActions());
        }
    } else if (itemType == 550) {
        // Extend item expiration
        c.announce(MaplePacketCreator.enableActions());
    } else if (itemType == 552) {
        MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt());
        short slot = (short) slea.readInt();
        Item item = c.getPlayer().getInventory(type).getItem(slot);
        if (item == null || item.getQuantity() <= 0 || (item.getFlag() & ItemConstants.KARMA) > 0 && ii.isKarmaAble(item.getItemId())) {
            c.announce(MaplePacketCreator.enableActions());
            return;
        }
        if (!type.equals(MapleInventoryType.USE)) {
            item.setFlag((byte) ItemConstants.KARMA);
        }
        c.getPlayer().forceUpdateItem(item);
        remove(c, itemId);
        c.announce(MaplePacketCreator.enableActions());
    } else if (itemType == 552) {
        // DS EGG THING
        c.announce(MaplePacketCreator.enableActions());
    } else if (itemType == 557) {
        slea.readInt();
        int itemSlot = slea.readInt();
        slea.readInt();
        final Equip equip = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) itemSlot);
        if (equip.getVicious() == 2 || c.getPlayer().getInventory(MapleInventoryType.CASH).findById(5570000) == null) {
            return;
        }
        equip.setVicious(equip.getVicious() + 1);
        equip.setUpgradeSlots(equip.getUpgradeSlots() + 1);
        remove(c, itemId);
        c.announce(MaplePacketCreator.enableActions());
        c.announce(MaplePacketCreator.sendHammerData(equip.getVicious()));
        player.forceUpdateItem(equip);
    } else if (itemType == 561) {
        // VEGA'S SPELL
        if (slea.readInt() != 1) {
            return;
        }
        final byte eSlot = (byte) slea.readInt();
        final Item eitem = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem(eSlot);
        if (slea.readInt() != 2) {
            return;
        }
        final byte uSlot = (byte) slea.readInt();
        final Item uitem = c.getPlayer().getInventory(MapleInventoryType.USE).getItem(uSlot);
        if (eitem == null || uitem == null) {
            return;
        }
        Equip toScroll = (Equip) eitem;
        if (toScroll.getUpgradeSlots() < 1) {
            c.getSession().write(MaplePacketCreator.getInventoryFull());
            return;
        }
        // should have a check here against PE hacks
        if (itemId / 1000000 != 5)
            itemId = 0;
        c.getPlayer().toggleBlockCashShop();
        final int curlevel = toScroll.getLevel();
        c.getSession().write(MaplePacketCreator.sendVegaScroll(0x40));
        final Equip scrolled = (Equip) ii.scrollEquipWithId(toScroll, uitem.getItemId(), false, itemId, c.getPlayer().isGM());
        c.getSession().write(MaplePacketCreator.sendVegaScroll(scrolled.getLevel() > curlevel ? 0x41 : 0x43));
        // opcodes 0x42, 0x44: "this item cannot be used"; 0x39, 0x45: crashes
        MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, uSlot, (short) 1, false);
        remove(c, itemId);
        final MapleClient client = c;
        TimerManager.getInstance().schedule(new Runnable() {

            @Override
            public void run() {
                if (!player.isLoggedin())
                    return;
                player.toggleBlockCashShop();
                final List<ModifyInventory> mods = new ArrayList<>();
                mods.add(new ModifyInventory(3, scrolled));
                mods.add(new ModifyInventory(0, scrolled));
                client.announce(MaplePacketCreator.modifyInventory(true, mods));
                ScrollResult scrollResult = scrolled.getLevel() > curlevel ? ScrollResult.SUCCESS : ScrollResult.FAIL;
                player.getMap().broadcastMessage(MaplePacketCreator.getScrollEffect(player.getId(), scrollResult, false));
                if (eSlot < 0 && (scrollResult == ScrollResult.SUCCESS)) {
                    player.equipChanged();
                }
                client.getSession().write(MaplePacketCreator.enableActions());
            }
        }, 1000 * 3);
    } else {
        System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea.toString());
        c.announce(MaplePacketCreator.enableActions());
    }
}
Also used : MapleCharacter(client.MapleCharacter) SQLException(java.sql.SQLException) ArrayList(java.util.ArrayList) MaplePlayerShopItem(server.maps.MaplePlayerShopItem) Item(client.inventory.Item) MapleMap(server.maps.MapleMap) Equip(client.inventory.Equip) MapleInventoryType(client.inventory.MapleInventoryType) ScrollResult(client.inventory.Equip.ScrollResult) MapleItemInformationProvider(server.MapleItemInformationProvider) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) List(java.util.List) MaplePet(client.inventory.MaplePet) Pair(tools.Pair) MapleTVEffect(server.maps.MapleTVEffect) MapleShop(server.MapleShop) LinkedList(java.util.LinkedList) ModifyInventory(client.inventory.ModifyInventory) Skill(client.Skill) MapleClient(client.MapleClient) MapleJob(client.MapleJob)

Example 42 with Pair

use of tools.Pair in project HeavenMS by ronancpl.

the class World method getAvailableItemBundles.

public List<Pair<MaplePlayerShopItem, AbstractMapleMapObject>> getAvailableItemBundles(int itemid) {
    List<Pair<MaplePlayerShopItem, AbstractMapleMapObject>> hmsAvailable = new ArrayList<>();
    for (MapleHiredMerchant hm : getActiveMerchants()) {
        List<MaplePlayerShopItem> itemBundles = hm.sendAvailableBundles(itemid);
        for (MaplePlayerShopItem mpsi : itemBundles) {
            hmsAvailable.add(new Pair<>(mpsi, (AbstractMapleMapObject) hm));
        }
    }
    for (MaplePlayerShop ps : getActivePlayerShops()) {
        List<MaplePlayerShopItem> itemBundles = ps.sendAvailableBundles(itemid);
        for (MaplePlayerShopItem mpsi : itemBundles) {
            hmsAvailable.add(new Pair<>(mpsi, (AbstractMapleMapObject) ps));
        }
    }
    Collections.sort(hmsAvailable, new Comparator<Pair<MaplePlayerShopItem, AbstractMapleMapObject>>() {

        @Override
        public int compare(Pair<MaplePlayerShopItem, AbstractMapleMapObject> p1, Pair<MaplePlayerShopItem, AbstractMapleMapObject> p2) {
            return p1.getLeft().getPrice() - p2.getLeft().getPrice();
        }
    });
    // truncates the list to have up to 200 elements
    hmsAvailable.subList(0, Math.min(hmsAvailable.size(), 200));
    return hmsAvailable;
}
Also used : MapleHiredMerchant(server.maps.MapleHiredMerchant) ArrayList(java.util.ArrayList) MaplePlayerShop(server.maps.MaplePlayerShop) AbstractMapleMapObject(server.maps.AbstractMapleMapObject) MaplePlayerShopItem(server.maps.MaplePlayerShopItem) CharacterIdChannelPair(net.server.channel.CharacterIdChannelPair) Pair(tools.Pair)

Example 43 with Pair

use of tools.Pair in project HeavenMS by ronancpl.

the class PetAutoPotHandler method calcEffectivePool.

private Pair<Short, Short> calcEffectivePool(MapleCharacter chr) {
    short hp = 0, mp = 0;
    if (ServerConstants.USE_EQUIPS_ON_AUTOPOT) {
        for (Item i : chr.getInventory(MapleInventoryType.EQUIPPED).list()) {
            Equip e = (Equip) i;
            hp += e.getHp();
            mp += e.getMp();
        }
    }
    hp = (short) Math.min(chr.getMaxHp() + hp, 30000);
    mp = (short) Math.min(chr.getMaxMp() + mp, 30000);
    return new Pair<>(hp, mp);
}
Also used : Item(client.inventory.Item) Equip(client.inventory.Equip) Pair(tools.Pair)

Example 44 with Pair

use of tools.Pair in project HeavenMS by ronancpl.

the class MapleHiredMerchant method saveItems.

public void saveItems(boolean shutdown) throws SQLException {
    List<Pair<Item, MapleInventoryType>> itemsWithType = new ArrayList<>();
    List<Short> bundles = new ArrayList<>();
    for (MaplePlayerShopItem pItems : getItems()) {
        Item newItem = pItems.getItem();
        short newBundle = pItems.getBundles();
        if (shutdown) {
            // is "shutdown" really necessary?
            newItem.setQuantity((short) (pItems.getItem().getQuantity()));
        } else {
            newItem.setQuantity((short) (pItems.getItem().getQuantity()));
        }
        if (newBundle > 0) {
            itemsWithType.add(new Pair<>(newItem, newItem.getInventoryType()));
            bundles.add(newBundle);
        }
    }
    Connection con = DatabaseConnection.getConnection();
    ItemFactory.MERCHANT.saveItems(itemsWithType, bundles, this.ownerId, con);
    con.close();
}
Also used : Item(client.inventory.Item) ArrayList(java.util.ArrayList) DatabaseConnection(tools.DatabaseConnection) Connection(java.sql.Connection) Pair(tools.Pair)

Example 45 with Pair

use of tools.Pair in project HeavenMS by ronancpl.

the class MapleHiredMerchant method check.

private static boolean check(MapleCharacter chr, List<MaplePlayerShopItem> items) {
    List<Pair<Item, MapleInventoryType>> li = new ArrayList<>();
    for (MaplePlayerShopItem item : items) {
        Item it = item.getItem().copy();
        it.setQuantity((short) (it.getQuantity() * item.getBundles()));
        li.add(new Pair<>(it, it.getInventoryType()));
    }
    return MapleInventory.checkSpotsAndOwnership(chr, li);
}
Also used : Item(client.inventory.Item) ArrayList(java.util.ArrayList) Pair(tools.Pair)

Aggregations

Pair (tools.Pair)51 ArrayList (java.util.ArrayList)34 Point (java.awt.Point)16 Item (client.inventory.Item)15 LinkedList (java.util.LinkedList)12 MapleData (provider.MapleData)11 SQLException (java.sql.SQLException)10 PreparedStatement (java.sql.PreparedStatement)7 List (java.util.List)7 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)7 MobSkill (server.life.MobSkill)6 MapleCharacter (client.MapleCharacter)5 Connection (java.sql.Connection)5 ResultSet (java.sql.ResultSet)5 MapleMap (server.maps.MapleMap)5 LinkedHashMap (java.util.LinkedHashMap)4 CharacterIdChannelPair (net.server.channel.CharacterIdChannelPair)4 MaplePartyCharacter (net.server.world.MaplePartyCharacter)4 MapleStatEffect (server.MapleStatEffect)4 DatabaseConnection (tools.DatabaseConnection)4