Search in sources :

Example 6 with Item

use of client.inventory.Item in project HeavenMS by ronancpl.

the class MapleCharacter method saveToDB.

public synchronized void saveToDB(boolean notAutosave) {
    if (!loggedIn)
        return;
    Calendar c = Calendar.getInstance();
    if (notAutosave)
        FilePrinter.print(FilePrinter.SAVING_CHARACTER, "Attempting to save " + name + " at " + c.getTime().toString());
    else
        FilePrinter.print(FilePrinter.AUTOSAVING_CHARACTER, "Attempting to autosave " + name + " at " + c.getTime().toString());
    Connection con = null;
    try {
        con = DatabaseConnection.getConnection();
        con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
        con.setAutoCommit(false);
        PreparedStatement ps;
        ps = con.prepareStatement("UPDATE characters SET level = ?, fame = ?, str = ?, dex = ?, luk = ?, `int` = ?, exp = ?, gachaexp = ?, hp = ?, mp = ?, maxhp = ?, maxmp = ?, sp = ?, ap = ?, gm = ?, skincolor = ?, gender = ?, job = ?, hair = ?, face = ?, map = ?, meso = ?, hpMpUsed = ?, spawnpoint = ?, party = ?, buddyCapacity = ?, messengerid = ?, messengerposition = ?, mountlevel = ?, mountexp = ?, mounttiredness= ?, equipslots = ?, useslots = ?, setupslots = ?, etcslots = ?,  monsterbookcover = ?, vanquisherStage = ?, dojoPoints = ?, lastDojoStage = ?, finishedDojoTutorial = ?, vanquisherKills = ?, matchcardwins = ?, matchcardlosses = ?, matchcardties = ?, omokwins = ?, omoklosses = ?, omokties = ?, dataString = ?, fquest = ?, jailexpire = ? WHERE id = ?", Statement.RETURN_GENERATED_KEYS);
        if (gmLevel < 1 && level > 199) {
            ps.setInt(1, isCygnus() ? 120 : 200);
        } else {
            ps.setInt(1, level);
        }
        ps.setInt(2, fame);
        ps.setInt(3, str);
        ps.setInt(4, dex);
        ps.setInt(5, luk);
        ps.setInt(6, int_);
        ps.setInt(7, Math.abs(exp.get()));
        ps.setInt(8, Math.abs(gachaexp.get()));
        ps.setInt(9, hp);
        ps.setInt(10, mp);
        ps.setInt(11, maxhp);
        ps.setInt(12, maxmp);
        StringBuilder sps = new StringBuilder();
        for (int i = 0; i < remainingSp.length; i++) {
            sps.append(remainingSp[i]);
            sps.append(",");
        }
        String sp = sps.toString();
        ps.setString(13, sp.substring(0, sp.length() - 1));
        ps.setInt(14, remainingAp);
        ps.setInt(15, gmLevel);
        ps.setInt(16, skinColor.getId());
        ps.setInt(17, gender);
        ps.setInt(18, job.getId());
        ps.setInt(19, hair);
        ps.setInt(20, face);
        if (map == null || (cashshop != null && cashshop.isOpened())) {
            ps.setInt(21, mapid);
        } else {
            if (map.getForcedReturnId() != 999999999) {
                ps.setInt(21, map.getForcedReturnId());
            } else {
                ps.setInt(21, getHp() < 1 ? map.getReturnMapId() : map.getId());
            }
        }
        ps.setInt(22, meso.get());
        ps.setInt(23, hpMpApUsed);
        if (map == null || map.getId() == 610020000 || map.getId() == 610020001) {
            // reset to first spawnpoint on those maps
            ps.setInt(24, 0);
        } else {
            MaplePortal closest = map.findClosestPlayerSpawnpoint(getPosition());
            if (closest != null) {
                ps.setInt(24, closest.getId());
            } else {
                ps.setInt(24, 0);
            }
        }
        prtLock.lock();
        try {
            if (party != null) {
                ps.setInt(25, party.getId());
            } else {
                ps.setInt(25, -1);
            }
        } finally {
            prtLock.unlock();
        }
        ps.setInt(26, buddylist.getCapacity());
        if (messenger != null) {
            ps.setInt(27, messenger.getId());
            ps.setInt(28, messengerposition);
        } else {
            ps.setInt(27, 0);
            ps.setInt(28, 4);
        }
        if (maplemount != null) {
            ps.setInt(29, maplemount.getLevel());
            ps.setInt(30, maplemount.getExp());
            ps.setInt(31, maplemount.getTiredness());
        } else {
            ps.setInt(29, 1);
            ps.setInt(30, 0);
            ps.setInt(31, 0);
        }
        for (int i = 1; i < 5; i++) {
            ps.setInt(i + 31, getSlots(i));
        }
        monsterbook.saveCards(getId());
        ps.setInt(36, bookCover);
        ps.setInt(37, vanquisherStage);
        ps.setInt(38, dojoPoints);
        ps.setInt(39, dojoStage);
        ps.setInt(40, finishedDojoTutorial ? 1 : 0);
        ps.setInt(41, vanquisherKills);
        ps.setInt(42, matchcardwins);
        ps.setInt(43, matchcardlosses);
        ps.setInt(44, matchcardties);
        ps.setInt(45, omokwins);
        ps.setInt(46, omoklosses);
        ps.setInt(47, omokties);
        ps.setString(48, dataString);
        ps.setInt(49, quest_fame);
        ps.setLong(50, jailExpiration);
        ps.setInt(51, id);
        int updateRows = ps.executeUpdate();
        if (updateRows < 1) {
            throw new RuntimeException("Character not in database (" + id + ")");
        }
        petLock.lock();
        try {
            for (int i = 0; i < 3; i++) {
                if (pets[i] != null) {
                    pets[i].saveToDb();
                }
            }
        } finally {
            petLock.unlock();
        }
        for (Entry<Integer, Set<Integer>> es : getExcluded().entrySet()) {
            // this set is already protected
            try (PreparedStatement ps2 = con.prepareStatement("DELETE FROM petignores WHERE petid=?")) {
                ps2.setInt(1, es.getKey());
                ps2.executeUpdate();
            }
            try (PreparedStatement ps2 = con.prepareStatement("INSERT INTO petignores (petid, itemid) VALUES (?, ?)")) {
                ps2.setInt(1, es.getKey());
                for (Integer x : es.getValue()) {
                    ps2.setInt(2, x);
                    ps2.addBatch();
                }
                ps2.executeBatch();
            }
        }
        deleteWhereCharacterId(con, "DELETE FROM keymap WHERE characterid = ?");
        ps = con.prepareStatement("INSERT INTO keymap (characterid, `key`, `type`, `action`) VALUES (?, ?, ?, ?)");
        ps.setInt(1, id);
        Set<Entry<Integer, MapleKeyBinding>> keybindingItems = Collections.unmodifiableSet(keymap.entrySet());
        for (Entry<Integer, MapleKeyBinding> keybinding : keybindingItems) {
            ps.setInt(2, keybinding.getKey());
            ps.setInt(3, keybinding.getValue().getType());
            ps.setInt(4, keybinding.getValue().getAction());
            ps.addBatch();
        }
        ps.executeBatch();
        deleteWhereCharacterId(con, "DELETE FROM skillmacros WHERE characterid = ?");
        ps = con.prepareStatement("INSERT INTO skillmacros (characterid, skill1, skill2, skill3, name, shout, position) VALUES (?, ?, ?, ?, ?, ?, ?)");
        ps.setInt(1, getId());
        for (int i = 0; i < 5; i++) {
            SkillMacro macro = skillMacros[i];
            if (macro != null) {
                ps.setInt(2, macro.getSkill1());
                ps.setInt(3, macro.getSkill2());
                ps.setInt(4, macro.getSkill3());
                ps.setString(5, macro.getName());
                ps.setInt(6, macro.getShout());
                ps.setInt(7, i);
                ps.addBatch();
            }
        }
        ps.executeBatch();
        List<Pair<Item, MapleInventoryType>> itemsWithType = new ArrayList<>();
        for (MapleInventory iv : inventory) {
            for (Item item : iv.list()) {
                itemsWithType.add(new Pair<>(item, iv.getType()));
            }
        }
        ItemFactory.INVENTORY.saveItems(itemsWithType, id, con);
        deleteWhereCharacterId(con, "DELETE FROM skills WHERE characterid = ?");
        ps = con.prepareStatement("INSERT INTO skills (characterid, skillid, skilllevel, masterlevel, expiration) VALUES (?, ?, ?, ?, ?)");
        ps.setInt(1, id);
        for (Entry<Skill, SkillEntry> skill : skills.entrySet()) {
            ps.setInt(2, skill.getKey().getId());
            ps.setInt(3, skill.getValue().skillevel);
            ps.setInt(4, skill.getValue().masterlevel);
            ps.setLong(5, skill.getValue().expiration);
            ps.addBatch();
        }
        ps.executeBatch();
        deleteWhereCharacterId(con, "DELETE FROM savedlocations WHERE characterid = ?");
        ps = con.prepareStatement("INSERT INTO savedlocations (characterid, `locationtype`, `map`, `portal`) VALUES (?, ?, ?, ?)");
        ps.setInt(1, id);
        for (SavedLocationType savedLocationType : SavedLocationType.values()) {
            if (savedLocations[savedLocationType.ordinal()] != null) {
                ps.setString(2, savedLocationType.name());
                ps.setInt(3, savedLocations[savedLocationType.ordinal()].getMapId());
                ps.setInt(4, savedLocations[savedLocationType.ordinal()].getPortal());
                ps.addBatch();
            }
        }
        ps.executeBatch();
        deleteWhereCharacterId(con, "DELETE FROM trocklocations WHERE characterid = ?");
        ps = con.prepareStatement("INSERT INTO trocklocations(characterid, mapid, vip) VALUES (?, ?, 0)");
        for (int i = 0; i < getTrockSize(); i++) {
            if (trockmaps.get(i) != 999999999) {
                ps.setInt(1, getId());
                ps.setInt(2, trockmaps.get(i));
                ps.addBatch();
            }
        }
        ps.executeBatch();
        ps = con.prepareStatement("INSERT INTO trocklocations(characterid, mapid, vip) VALUES (?, ?, 1)");
        for (int i = 0; i < getVipTrockSize(); i++) {
            if (viptrockmaps.get(i) != 999999999) {
                ps.setInt(1, getId());
                ps.setInt(2, viptrockmaps.get(i));
                ps.addBatch();
            }
        }
        ps.executeBatch();
        deleteWhereCharacterId(con, "DELETE FROM buddies WHERE characterid = ? AND pending = 0");
        ps = con.prepareStatement("INSERT INTO buddies (characterid, `buddyid`, `pending`, `group`) VALUES (?, ?, 0, ?)");
        ps.setInt(1, id);
        for (BuddylistEntry entry : buddylist.getBuddies()) {
            if (entry.isVisible()) {
                ps.setInt(2, entry.getCharacterId());
                ps.setString(3, entry.getGroup());
                ps.addBatch();
            }
        }
        ps.executeBatch();
        deleteWhereCharacterId(con, "DELETE FROM area_info WHERE charid = ?");
        ps = con.prepareStatement("INSERT INTO area_info (id, charid, area, info) VALUES (DEFAULT, ?, ?, ?)");
        ps.setInt(1, id);
        for (Entry<Short, String> area : area_info.entrySet()) {
            ps.setInt(2, area.getKey());
            ps.setString(3, area.getValue());
            ps.addBatch();
        }
        ps.executeBatch();
        deleteWhereCharacterId(con, "DELETE FROM eventstats WHERE characterid = ?");
        deleteWhereCharacterId(con, "DELETE FROM queststatus WHERE characterid = ?");
        ps = con.prepareStatement("INSERT INTO queststatus (`queststatusid`, `characterid`, `quest`, `status`, `time`, `expires`, `forfeited`) VALUES (DEFAULT, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
        PreparedStatement psf;
        try (PreparedStatement pse = con.prepareStatement("INSERT INTO questprogress VALUES (DEFAULT, ?, ?, ?)")) {
            psf = con.prepareStatement("INSERT INTO medalmaps VALUES (DEFAULT, ?, ?)");
            ps.setInt(1, id);
            synchronized (quests) {
                for (MapleQuestStatus q : quests.values()) {
                    ps.setInt(2, q.getQuest().getId());
                    ps.setInt(3, q.getStatus().getId());
                    ps.setInt(4, (int) (q.getCompletionTime() / 1000));
                    ps.setLong(5, q.getExpirationTime());
                    ps.setInt(6, q.getForfeited());
                    ps.executeUpdate();
                    try (ResultSet rs = ps.getGeneratedKeys()) {
                        rs.next();
                        for (int mob : q.getProgress().keySet()) {
                            pse.setInt(1, rs.getInt(1));
                            pse.setInt(2, mob);
                            pse.setString(3, q.getProgress(mob));
                            pse.addBatch();
                        }
                        for (int i = 0; i < q.getMedalMaps().size(); i++) {
                            psf.setInt(1, rs.getInt(1));
                            psf.setInt(2, q.getMedalMaps().get(i));
                            psf.addBatch();
                        }
                        pse.executeBatch();
                        psf.executeBatch();
                    }
                }
            }
        }
        psf.close();
        ps = con.prepareStatement("UPDATE accounts SET gm = ? WHERE id = ?");
        ps.setInt(1, gmLevel > 1 ? 1 : 0);
        ps.setInt(2, client.getAccID());
        ps.executeUpdate();
        ps.close();
        con.commit();
        con.setAutoCommit(true);
        if (cashshop != null) {
            cashshop.save(con);
        }
        if (storage != null) {
            storage.saveToDB(con);
        }
    } catch (SQLException | RuntimeException t) {
        FilePrinter.printError(FilePrinter.SAVE_CHAR, t, "Error saving " + name + " Level: " + level + " Job: " + job.getId());
        try {
            con.rollback();
        } catch (SQLException se) {
            FilePrinter.printError(FilePrinter.SAVE_CHAR, se, "Error trying to rollback " + name);
        }
    } catch (Exception e) {
        FilePrinter.printError(FilePrinter.SAVE_CHAR, e, "Error saving " + name + " Level: " + level + " Job: " + job.getId());
    } finally {
        try {
            con.setAutoCommit(true);
            con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Also used : ResultSet(java.sql.ResultSet) Set(java.util.Set) LinkedHashSet(java.util.LinkedHashSet) SQLException(java.sql.SQLException) ArrayList(java.util.ArrayList) MapleMapItem(server.maps.MapleMapItem) Item(client.inventory.Item) MaplePlayerShopItem(server.maps.MaplePlayerShopItem) Entry(java.util.Map.Entry) ResultSet(java.sql.ResultSet) Pair(tools.Pair) Calendar(java.util.Calendar) DatabaseConnection(tools.DatabaseConnection) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) SavedLocationType(server.maps.SavedLocationType) MapleInventory(client.inventory.MapleInventory) Point(java.awt.Point) SQLException(java.sql.SQLException) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MobSkill(server.life.MobSkill) MaplePortal(server.MaplePortal)

Example 7 with Item

use of client.inventory.Item in project HeavenMS by ronancpl.

the class MapleCharacter method recalcLocalStats.

private void recalcLocalStats() {
    int oldmaxhp = localmaxhp;
    localmaxhp = getMaxHp();
    localmaxmp = getMaxMp();
    localdex = getDex();
    localint_ = getInt();
    localstr = getStr();
    localluk = getLuk();
    int speed = 100, jump = 100;
    magic = localint_;
    watk = 0;
    for (Item item : getInventory(MapleInventoryType.EQUIPPED)) {
        Equip equip = (Equip) item;
        localmaxhp += equip.getHp();
        localmaxmp += equip.getMp();
        localdex += equip.getDex();
        localint_ += equip.getInt();
        localstr += equip.getStr();
        localluk += equip.getLuk();
        magic += equip.getMatk() + equip.getInt();
        watk += equip.getWatk();
        speed += equip.getSpeed();
        jump += equip.getJump();
    }
    magic = Math.min(magic, 2000);
    Integer hbhp = getBuffedValue(MapleBuffStat.HYPERBODYHP);
    if (hbhp != null) {
        localmaxhp += (hbhp.doubleValue() / 100) * localmaxhp;
    }
    Integer hbmp = getBuffedValue(MapleBuffStat.HYPERBODYMP);
    if (hbmp != null) {
        localmaxmp += (hbmp.doubleValue() / 100) * localmaxmp;
    }
    localmaxhp = Math.min(30000, localmaxhp);
    localmaxmp = Math.min(30000, localmaxmp);
    Integer watkbuff = getBuffedValue(MapleBuffStat.WATK);
    if (watkbuff != null) {
        watk += watkbuff.intValue();
    }
    MapleStatEffect combo = getBuffEffect(MapleBuffStat.ARAN_COMBO);
    if (combo != null) {
        watk += combo.getX();
    }
    if (energybar == 15000) {
        Skill energycharge = isCygnus() ? SkillFactory.getSkill(ThunderBreaker.ENERGY_CHARGE) : SkillFactory.getSkill(Marauder.ENERGY_CHARGE);
        MapleStatEffect ceffect = energycharge.getEffect(getSkillLevel(energycharge));
        watk += ceffect.getWatk();
    }
    Integer mwarr = getBuffedValue(MapleBuffStat.MAPLE_WARRIOR);
    if (mwarr != null) {
        localstr += getStr() * mwarr / 100;
        localdex += getDex() * mwarr / 100;
        localint_ += getInt() * mwarr / 100;
        localluk += getLuk() * mwarr / 100;
    }
    if (job.isA(MapleJob.BOWMAN)) {
        Skill expert = null;
        if (job.isA(MapleJob.MARKSMAN)) {
            expert = SkillFactory.getSkill(3220004);
        } else if (job.isA(MapleJob.BOWMASTER)) {
            expert = SkillFactory.getSkill(3120005);
        }
        if (expert != null) {
            int boostLevel = getSkillLevel(expert);
            if (boostLevel > 0) {
                watk += expert.getEffect(boostLevel).getX();
            }
        }
    }
    Integer matkbuff = getBuffedValue(MapleBuffStat.MATK);
    if (matkbuff != null) {
        magic += matkbuff.intValue();
    }
    Integer speedbuff = getBuffedValue(MapleBuffStat.SPEED);
    if (speedbuff != null) {
        speed += speedbuff.intValue();
    }
    Integer jumpbuff = getBuffedValue(MapleBuffStat.JUMP);
    if (jumpbuff != null) {
        jump += jumpbuff.intValue();
    }
    Integer blessing = getSkillLevel(10000000 * getJobType() + 12);
    if (blessing > 0) {
        watk += blessing;
        magic += blessing * 2;
    }
    if (job.isA(MapleJob.THIEF) || job.isA(MapleJob.BOWMAN) || job.isA(MapleJob.PIRATE) || job.isA(MapleJob.NIGHTWALKER1) || job.isA(MapleJob.WINDARCHER1)) {
        Item weapon_item = getInventory(MapleInventoryType.EQUIPPED).getItem((short) -11);
        if (weapon_item != null) {
            MapleWeaponType weapon = ii.getWeaponType(weapon_item.getItemId());
            boolean bow = weapon == MapleWeaponType.BOW;
            boolean crossbow = weapon == MapleWeaponType.CROSSBOW;
            boolean claw = weapon == MapleWeaponType.CLAW;
            boolean gun = weapon == MapleWeaponType.GUN;
            if (bow || crossbow || claw || gun) {
                // Also calc stars into this.
                MapleInventory inv = getInventory(MapleInventoryType.USE);
                for (short i = 1; i <= inv.getSlotLimit(); i++) {
                    Item item = inv.getItem(i);
                    if (item != null) {
                        if ((claw && ItemConstants.isThrowingStar(item.getItemId())) || (gun && ItemConstants.isBullet(item.getItemId())) || (bow && ItemConstants.isArrowForBow(item.getItemId())) || (crossbow && ItemConstants.isArrowForCrossBow(item.getItemId()))) {
                            if (item.getQuantity() > 0) {
                                // Finally there!
                                watk += ii.getWatkForProjectile(item.getItemId());
                                break;
                            }
                        }
                    }
                }
            }
        }
    // Add throwing stars to dmg.
    }
    if (oldmaxhp != 0 && oldmaxhp != localmaxhp) {
        updatePartyMemberHP();
    }
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MapleMapItem(server.maps.MapleMapItem) Item(client.inventory.Item) MaplePlayerShopItem(server.maps.MaplePlayerShopItem) Equip(client.inventory.Equip) MobSkill(server.life.MobSkill) MapleStatEffect(server.MapleStatEffect) MapleWeaponType(client.inventory.MapleWeaponType) MapleInventory(client.inventory.MapleInventory) Point(java.awt.Point)

Example 8 with Item

use of client.inventory.Item in project HeavenMS by ronancpl.

the class MapleCharacter method standaloneSell.

private int standaloneSell(MapleClient c, MapleItemInformationProvider ii, MapleInventoryType type, short slot, short quantity) {
    if (quantity == 0xFFFF || quantity == 0) {
        quantity = 1;
    }
    Item item = getInventory(type).getItem((short) slot);
    if (item == null) {
        // Basic check
        return (0);
    }
    if (ItemConstants.isRechargable(item.getItemId())) {
        quantity = item.getQuantity();
    }
    if (quantity < 0) {
        return (0);
    }
    short iQuant = item.getQuantity();
    if (iQuant == 0xFFFF) {
        iQuant = 1;
    }
    if (quantity <= iQuant && iQuant > 0) {
        MapleInventoryManipulator.removeFromSlot(c, type, (byte) slot, quantity, false);
        double price;
        if (ItemConstants.isRechargable(item.getItemId())) {
            price = ii.getWholePrice(item.getItemId()) / (double) ii.getSlotMax(c, item.getItemId());
        } else {
            price = ii.getPrice(item.getItemId());
        }
        int recvMesos = (int) Math.max(Math.ceil(price * quantity), 0);
        if (price != -1 && recvMesos > 0) {
            gainMeso(recvMesos, false);
            return (recvMesos);
        }
    }
    return (0);
}
Also used : MapleMapItem(server.maps.MapleMapItem) Item(client.inventory.Item) MaplePlayerShopItem(server.maps.MaplePlayerShopItem) Point(java.awt.Point)

Example 9 with Item

use of client.inventory.Item in project HeavenMS by ronancpl.

the class MapleCharacter method sellAllItemsFromName.

public int sellAllItemsFromName(byte invTypeId, String name) {
    // player decides from which inventory items should be sold.
    MapleInventoryType type = MapleInventoryType.getByType(invTypeId);
    Item it = getInventory(type).findByName(name);
    if (it == null) {
        return (-1);
    }
    return (sellAllItemsFromPosition(ii, type, it.getPosition()));
}
Also used : MapleMapItem(server.maps.MapleMapItem) Item(client.inventory.Item) MaplePlayerShopItem(server.maps.MaplePlayerShopItem) MapleInventoryType(client.inventory.MapleInventoryType)

Example 10 with Item

use of client.inventory.Item in project HeavenMS by ronancpl.

the class MapleCharacter method setActiveCoupons.

private void setActiveCoupons() {
    activeCoupons.clear();
    activeCouponRates.clear();
    Map<Integer, Integer> coupons = Server.getInstance().getCouponRates();
    List<Integer> active = Server.getInstance().getActiveCoupons();
    for (Item it : this.getInventory(MapleInventoryType.CASH).list()) {
        if (ItemConstants.isRateCoupon(it.getItemId()) && active.contains(it.getItemId())) {
            Integer count = activeCoupons.get(it.getItemId());
            if (count != null)
                activeCoupons.put(it.getItemId(), count + 1);
            else {
                activeCoupons.put(it.getItemId(), 1);
                activeCouponRates.put(it.getItemId(), coupons.get(it.getItemId()));
            }
        }
    }
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MapleMapItem(server.maps.MapleMapItem) Item(client.inventory.Item) MaplePlayerShopItem(server.maps.MaplePlayerShopItem)

Aggregations

Item (client.inventory.Item)124 MapleMapItem (server.maps.MapleMapItem)33 Equip (client.inventory.Equip)31 ArrayList (java.util.ArrayList)31 MaplePlayerShopItem (server.maps.MaplePlayerShopItem)31 Point (java.awt.Point)29 SQLException (java.sql.SQLException)25 MapleCharacter (client.MapleCharacter)21 MapleInventoryType (client.inventory.MapleInventoryType)20 PreparedStatement (java.sql.PreparedStatement)20 Connection (java.sql.Connection)19 DatabaseConnection (tools.DatabaseConnection)19 MapleInventory (client.inventory.MapleInventory)18 MapleItemInformationProvider (server.MapleItemInformationProvider)18 ResultSet (java.sql.ResultSet)16 Pair (tools.Pair)15 CashItem (server.CashShop.CashItem)13 SpecialCashItem (server.CashShop.SpecialCashItem)12 MapleShopItem (server.MapleShopItem)12 MaplePacketLittleEndianWriter (tools.data.output.MaplePacketLittleEndianWriter)11