Search in sources :

Example 1 with DueyPackages

use of server.DueyPackages in project HeavenMS by ronancpl.

the class DueyHandler method handlePacket.

@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
    if (!ServerConstants.USE_DUEY) {
        c.announce(MaplePacketCreator.enableActions());
        return;
    }
    byte operation = slea.readByte();
    if (operation == Actions.TOSERVER_SEND_ITEM.getCode()) {
        final int fee = 5000;
        byte inventId = slea.readByte();
        short itemPos = slea.readShort();
        short amount = slea.readShort();
        int mesos = slea.readInt();
        String recipient = slea.readMapleAsciiString();
        if (mesos < 0 || ((long) mesos + fee + getFee(mesos)) > Integer.MAX_VALUE || (amount < 1 && mesos == 0)) {
            AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with duey.");
            FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use duey with mesos " + mesos + " and amount " + amount + "\r\n");
            c.disconnect(true, false);
            return;
        }
        int finalcost = mesos + fee + getFee(mesos);
        boolean send = false;
        if (c.getPlayer().getMeso() >= finalcost) {
            int accid = getAccIdFromCNAME(recipient, true);
            if (accid != -1) {
                if (accid != c.getAccID()) {
                    send = true;
                } else {
                    c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_SEND_SAMEACC_ERROR.getCode()));
                }
            } else {
                c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode()));
            }
        } else {
            c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_SEND_NOT_ENOUGH_MESOS.getCode()));
        }
        MapleClient rClient = null;
        int channel = c.getWorldServer().find(recipient);
        if (channel > -1) {
            Channel rcserv = c.getWorldServer().getChannel(channel);
            rClient = rcserv.getPlayerStorage().getCharacterByName(recipient).getClient();
        }
        if (send) {
            if (inventId > 0) {
                MapleInventoryType inv = MapleInventoryType.getByType(inventId);
                Item item = c.getPlayer().getInventory(inv).getItem(itemPos);
                if (item != null && c.getPlayer().getItemQuantity(item.getItemId(), false) >= amount) {
                    c.getPlayer().gainMeso(-finalcost, false);
                    c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_SEND_SUCCESSFULLY_SENT.getCode()));
                    if (ItemConstants.isRechargable(item.getItemId())) {
                        MapleInventoryManipulator.removeFromSlot(c, inv, itemPos, item.getQuantity(), true);
                    } else {
                        MapleInventoryManipulator.removeFromSlot(c, inv, itemPos, amount, true, false);
                    }
                    addItemToDB(item, amount, mesos, c.getPlayer().getName(), getAccIdFromCNAME(recipient, false));
                } else {
                    if (item != null) {
                        c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_SEND_INCORRECT_REQUEST.getCode()));
                    }
                    return;
                }
            } else {
                c.getPlayer().gainMeso(-finalcost, false);
                c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_SEND_SUCCESSFULLY_SENT.getCode()));
                addMesoToDB(mesos, c.getPlayer().getName(), getAccIdFromCNAME(recipient, false));
            }
            if (rClient != null && rClient.isLoggedIn() && !rClient.getPlayer().isAwayFromWorld()) {
                showDueyNotification(rClient, rClient.getPlayer());
            }
        }
    } else if (operation == Actions.TOSERVER_REMOVE_PACKAGE.getCode()) {
        int packageid = slea.readInt();
        removeItemFromDB(packageid);
        c.announce(MaplePacketCreator.removeItemFromDuey(true, packageid));
    } else if (operation == Actions.TOSERVER_CLAIM_PACKAGE.getCode()) {
        int packageid = slea.readInt();
        List<DueyPackages> packages = new LinkedList<>();
        DueyPackages dp = null;
        Connection con = null;
        try {
            con = DatabaseConnection.getConnection();
            DueyPackages dueypack;
            try (PreparedStatement ps = con.prepareStatement("SELECT * FROM dueypackages LEFT JOIN dueyitems USING (PackageId) WHERE PackageId = ?")) {
                ps.setInt(1, packageid);
                try (ResultSet rs = ps.executeQuery()) {
                    dueypack = null;
                    if (rs.next()) {
                        dueypack = getItemByPID(rs);
                        dueypack.setSender(rs.getString("SenderName"));
                        dueypack.setMesos(rs.getInt("Mesos"));
                        dueypack.setSentTime(rs.getString("TimeStamp"));
                        packages.add(dueypack);
                    }
                }
            }
            dp = dueypack;
            if (dp == null) {
                c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode()));
                FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to receive package from duey with id " + packageid + "\r\n");
                return;
            }
            if (dp.getItem() != null) {
                if (!MapleInventoryManipulator.checkSpace(c, dp.getItem().getItemId(), dp.getItem().getQuantity(), dp.getItem().getOwner())) {
                    int itemid = dp.getItem().getItemId();
                    if (MapleItemInformationProvider.getInstance().isPickupRestricted(itemid) && c.getPlayer().getInventory(ItemConstants.getInventoryType(itemid)).findById(itemid) != null) {
                        c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_RECEIVER_WITH_UNIQUE.getCode()));
                    } else {
                        c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_NO_FREE_SLOTS.getCode()));
                    }
                    return;
                } else {
                    MapleInventoryManipulator.addFromDrop(c, dp.getItem(), false);
                }
            }
            long gainmesos = 0;
            long totalmesos = (long) dp.getMesos() + (long) c.getPlayer().getMeso();
            if (totalmesos < 0 || dp.getMesos() < 0)
                gainmesos = 0;
            else {
                totalmesos = Math.min(totalmesos, Integer.MAX_VALUE);
                gainmesos = totalmesos - c.getPlayer().getMeso();
            }
            c.getPlayer().gainMeso((int) gainmesos, false);
            removeItemFromDB(packageid);
            c.announce(MaplePacketCreator.removeItemFromDuey(false, packageid));
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
Also used : SQLException(java.sql.SQLException) Channel(net.server.channel.Channel) DatabaseConnection(tools.DatabaseConnection) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) LinkedList(java.util.LinkedList) Item(client.inventory.Item) DueyPackages(server.DueyPackages) MapleInventoryType(client.inventory.MapleInventoryType) ResultSet(java.sql.ResultSet) MapleClient(client.MapleClient)

Example 2 with DueyPackages

use of server.DueyPackages in project HeavenMS by ronancpl.

the class DueyHandler method loadItems.

public static List<DueyPackages> loadItems(MapleCharacter chr) {
    List<DueyPackages> packages = new LinkedList<>();
    Connection con = null;
    try {
        con = DatabaseConnection.getConnection();
        try (PreparedStatement ps = con.prepareStatement("SELECT * FROM dueypackages dp LEFT JOIN dueyitems di ON dp.PackageId=di.PackageId WHERE RecieverId = ?")) {
            ps.setInt(1, chr.getId());
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    DueyPackages dueypack = getItemByPID(rs);
                    dueypack.setSender(rs.getString("SenderName"));
                    dueypack.setMesos(rs.getInt("Mesos"));
                    dueypack.setSentTime(rs.getString("TimeStamp"));
                    packages.add(dueypack);
                }
            }
        }
        con.close();
        return packages;
    } catch (SQLException e) {
        e.printStackTrace();
        return null;
    }
}
Also used : DueyPackages(server.DueyPackages) SQLException(java.sql.SQLException) DatabaseConnection(tools.DatabaseConnection) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) LinkedList(java.util.LinkedList)

Example 3 with DueyPackages

use of server.DueyPackages in project HeavenMS by ronancpl.

the class DueyHandler method getItemByPID.

private static DueyPackages getItemByPID(ResultSet rs) {
    try {
        DueyPackages dueypack;
        if (rs.getInt("type") == 1) {
            Equip eq = new Equip(rs.getInt("itemid"), (byte) 0, -1);
            eq.setUpgradeSlots((byte) rs.getInt("upgradeslots"));
            eq.setLevel((byte) rs.getInt("level"));
            eq.setStr((short) rs.getInt("str"));
            eq.setDex((short) rs.getInt("dex"));
            eq.setInt((short) rs.getInt("int"));
            eq.setLuk((short) rs.getInt("luk"));
            eq.setHp((short) rs.getInt("hp"));
            eq.setMp((short) rs.getInt("mp"));
            eq.setWatk((short) rs.getInt("watk"));
            eq.setMatk((short) rs.getInt("matk"));
            eq.setWdef((short) rs.getInt("wdef"));
            eq.setMdef((short) rs.getInt("mdef"));
            eq.setAcc((short) rs.getInt("acc"));
            eq.setAvoid((short) rs.getInt("avoid"));
            eq.setHands((short) rs.getInt("hands"));
            eq.setSpeed((short) rs.getInt("speed"));
            eq.setJump((short) rs.getInt("jump"));
            eq.setOwner(rs.getString("owner"));
            dueypack = new DueyPackages(rs.getInt("PackageId"), eq);
        } else if (rs.getInt("type") == 2) {
            Item newItem = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
            newItem.setOwner(rs.getString("owner"));
            dueypack = new DueyPackages(rs.getInt("PackageId"), newItem);
        } else {
            dueypack = new DueyPackages(rs.getInt("PackageId"));
        }
        return dueypack;
    } catch (SQLException se) {
        se.printStackTrace();
        return null;
    }
}
Also used : DueyPackages(server.DueyPackages) Equip(client.inventory.Equip) Item(client.inventory.Item) SQLException(java.sql.SQLException)

Example 4 with DueyPackages

use of server.DueyPackages in project HeavenMS by ronancpl.

the class MaplePacketCreator method sendDuey.

public static byte[] sendDuey(byte operation, List<DueyPackages> packages) {
    final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
    mplew.writeShort(SendOpcode.PARCEL.getValue());
    mplew.write(operation);
    if (operation == 8) {
        mplew.write(0);
        mplew.write(packages.size());
        for (DueyPackages dp : packages) {
            mplew.writeInt(dp.getPackageId());
            mplew.writeAsciiString(dp.getSender());
            for (int i = dp.getSender().length(); i < 13; i++) {
                mplew.write(0);
            }
            mplew.writeInt(dp.getMesos());
            mplew.writeLong(getTime(dp.sentTimeInMilliseconds()));
            // Contains message o____o.
            mplew.writeLong(0);
            for (int i = 0; i < 48; i++) {
                mplew.writeInt(Randomizer.nextInt(Integer.MAX_VALUE));
            }
            mplew.writeInt(0);
            mplew.write(0);
            if (dp.getItem() != null) {
                mplew.write(1);
                addItemInfo(mplew, dp.getItem(), true);
            } else {
                mplew.write(0);
            }
        }
        mplew.write(0);
    }
    return mplew.getPacket();
}
Also used : DueyPackages(server.DueyPackages) MaplePacketLittleEndianWriter(tools.data.output.MaplePacketLittleEndianWriter) Point(java.awt.Point)

Aggregations

DueyPackages (server.DueyPackages)4 SQLException (java.sql.SQLException)3 Item (client.inventory.Item)2 Connection (java.sql.Connection)2 PreparedStatement (java.sql.PreparedStatement)2 ResultSet (java.sql.ResultSet)2 LinkedList (java.util.LinkedList)2 DatabaseConnection (tools.DatabaseConnection)2 MapleClient (client.MapleClient)1 Equip (client.inventory.Equip)1 MapleInventoryType (client.inventory.MapleInventoryType)1 Point (java.awt.Point)1 Channel (net.server.channel.Channel)1 MaplePacketLittleEndianWriter (tools.data.output.MaplePacketLittleEndianWriter)1