Search in sources :

Example 1 with MapleGuildCharacter

use of net.server.guild.MapleGuildCharacter in project HeavenMS by ronancpl.

the class MapleClient method disconnect.

public final synchronized void disconnect(boolean shutdown, boolean cashshop) {
    // once per MapleClient instance
    if (disconnecting) {
        return;
    }
    disconnecting = true;
    if (player != null && player.isLoggedin() && player.getClient() != null) {
        MapleMap map = player.getMap();
        final MapleParty party = player.getParty();
        final int idz = player.getId();
        final int messengerid = player.getMessenger() == null ? 0 : player.getMessenger().getId();
        // final int fid = player.getFamilyId();
        final BuddyList bl = player.getBuddylist();
        final MaplePartyCharacter chrp = new MaplePartyCharacter(player);
        final MapleMessengerCharacter chrm = new MapleMessengerCharacter(player, 0);
        final MapleGuildCharacter chrg = player.getMGC();
        final MapleGuild guild = player.getGuild();
        player.cancelMagicDoor();
        if (channel == -1 || shutdown) {
            if (chrg != null)
                chrg.setCharacter(null);
            removePlayer();
            player.saveCooldowns();
            player.saveToDB(true);
            player = null;
            return;
        }
        removePlayer();
        final World worlda = getWorldServer();
        try {
            if (!cashshop) {
                if (!this.serverTransition) {
                    // meaning not changing channels
                    if (messengerid > 0) {
                        worlda.leaveMessenger(messengerid, chrm);
                    }
                    /*      
						if (fid > 0) {
                                                        final MapleFamily family = worlda.getFamily(fid);
                                                        family.
                                                }
                                                */
                    for (MapleQuestStatus status : player.getStartedQuests()) {
                        // This is for those quests that you have to stay logged in for a certain amount of time
                        MapleQuest quest = status.getQuest();
                        if (quest.getTimeLimit() > 0) {
                            MapleQuestStatus newStatus = new MapleQuestStatus(quest, MapleQuestStatus.Status.NOT_STARTED);
                            newStatus.setForfeited(player.getQuest(quest).getForfeited() + 1);
                            player.updateQuest(newStatus);
                        }
                    }
                    if (guild != null) {
                        final Server server = Server.getInstance();
                        server.setGuildMemberOnline(player, false, player.getClient().getChannel());
                        player.getClient().announce(MaplePacketCreator.showGuildInfo(player));
                    }
                    if (party != null) {
                        chrp.setOnline(false);
                        worlda.updateParty(party.getId(), PartyOperation.LOG_ONOFF, chrp);
                        if (map != null && party.getLeader().getId() == idz) {
                            MaplePartyCharacter lchr = null;
                            for (MaplePartyCharacter pchr : party.getMembers()) {
                                if (pchr != null && map.getCharacterById(pchr.getId()) != null && (lchr == null || lchr.getLevel() <= pchr.getLevel())) {
                                    lchr = pchr;
                                }
                            }
                            if (lchr != null) {
                                worlda.updateParty(party.getId(), PartyOperation.CHANGE_LEADER, lchr);
                            }
                        }
                    }
                    if (bl != null) {
                        worlda.loggedOff(player.getName(), player.getId(), channel, player.getBuddylist().getBuddyIds());
                    }
                }
            } else {
                if (!this.serverTransition) {
                    // if dc inside of cash shop.
                    if (party != null) {
                        chrp.setOnline(false);
                        worlda.updateParty(party.getId(), PartyOperation.LOG_ONOFF, chrp);
                        if (map != null && party.getLeader().getId() == idz) {
                            MaplePartyCharacter lchr = null;
                            for (MaplePartyCharacter pchr : party.getMembers()) {
                                if (pchr != null && map.getCharacterById(pchr.getId()) != null && (lchr == null || lchr.getLevel() <= pchr.getLevel())) {
                                    lchr = pchr;
                                }
                            }
                            if (lchr != null) {
                                worlda.updateParty(party.getId(), PartyOperation.CHANGE_LEADER, lchr);
                            }
                        }
                    }
                    if (bl != null) {
                        worlda.loggedOff(player.getName(), player.getId(), channel, player.getBuddylist().getBuddyIds());
                    }
                }
            }
        } catch (final Exception e) {
            FilePrinter.printError(FilePrinter.ACCOUNT_STUCK, e);
        } finally {
            getChannelServer().removePlayer(player);
            if (!this.serverTransition) {
                worlda.removePlayer(player);
                player.saveCooldowns();
                player.saveToDB(true);
                if (player != null) {
                    // no idea, occur :(
                    player.empty(false);
                }
                player.logOff();
            } else {
                player.saveCooldowns();
                player.saveToDB();
            }
            player = null;
        }
    }
    if (!serverTransition && isLoggedIn()) {
        updateLoginState(MapleClient.LOGIN_NOTLOGGEDIN);
        // prevents double dcing during login
        session.removeAttribute(MapleClient.CLIENT_KEY);
        session.close(false);
    }
    engines.clear();
}
Also used : MapleQuest(server.quest.MapleQuest) Server(net.server.Server) MapleGuildCharacter(net.server.guild.MapleGuildCharacter) MapleParty(net.server.world.MapleParty) MapleMessengerCharacter(net.server.world.MapleMessengerCharacter) World(net.server.world.World) SQLException(java.sql.SQLException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) MapleGuild(net.server.guild.MapleGuild) MaplePartyCharacter(net.server.world.MaplePartyCharacter)

Example 2 with MapleGuildCharacter

use of net.server.guild.MapleGuildCharacter in project HeavenMS by ronancpl.

the class AllianceOperationHandler method changeLeaderAllianceRank.

private void changeLeaderAllianceRank(MapleAlliance alliance, MapleCharacter newLeader) {
    MapleGuildCharacter lmgc = alliance.getLeader();
    MapleCharacter leader = Server.getInstance().getWorld(newLeader.getWorld()).getPlayerStorage().getCharacterById(lmgc.getId());
    leader.getMGC().setAllianceRank(2);
    leader.saveGuildStatus();
    newLeader.getMGC().setAllianceRank(1);
    newLeader.saveGuildStatus();
    Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, newLeader.getWorld()), -1, -1);
    alliance.dropMessage("'" + newLeader.getName() + "' has been appointed as the new head of this Alliance.");
}
Also used : MapleCharacter(client.MapleCharacter) MapleGuildCharacter(net.server.guild.MapleGuildCharacter)

Example 3 with MapleGuildCharacter

use of net.server.guild.MapleGuildCharacter in project HeavenMS by ronancpl.

the class MaplePacketCreator method getGuildInfo.

private static void getGuildInfo(final MaplePacketLittleEndianWriter mplew, MapleGuild guild) {
    mplew.writeInt(guild.getId());
    mplew.writeMapleAsciiString(guild.getName());
    for (int i = 1; i <= 5; i++) {
        mplew.writeMapleAsciiString(guild.getRankTitle(i));
    }
    Collection<MapleGuildCharacter> members = guild.getMembers();
    mplew.write(members.size());
    for (MapleGuildCharacter mgc : members) {
        mplew.writeInt(mgc.getId());
    }
    for (MapleGuildCharacter mgc : members) {
        mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13));
        mplew.writeInt(mgc.getJobId());
        mplew.writeInt(mgc.getLevel());
        mplew.writeInt(mgc.getGuildRank());
        mplew.writeInt(mgc.isOnline() ? 1 : 0);
        mplew.writeInt(guild.getSignature());
        mplew.writeInt(mgc.getAllianceRank());
    }
    mplew.writeInt(guild.getCapacity());
    mplew.writeShort(guild.getLogoBG());
    mplew.write(guild.getLogoBGColor());
    mplew.writeShort(guild.getLogo());
    mplew.write(guild.getLogoColor());
    mplew.writeMapleAsciiString(guild.getNotice());
    mplew.writeInt(guild.getGP());
    mplew.writeInt(guild.getAllianceId());
}
Also used : MapleGuildCharacter(net.server.guild.MapleGuildCharacter) Point(java.awt.Point)

Example 4 with MapleGuildCharacter

use of net.server.guild.MapleGuildCharacter in project HeavenMS by ronancpl.

the class MaplePacketCreator method showGuildInfo.

public static byte[] showGuildInfo(MapleCharacter c) {
    final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
    mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue());
    // signature for showing guild info
    mplew.write(0x1A);
    if (c == null) {
        // show empty guild (used for leaving, expelled)
        mplew.write(0);
        return mplew.getPacket();
    }
    MapleGuild g = c.getClient().getWorldServer().getGuild(c.getMGC());
    if (g == null) {
        // failed to read from DB - don't show a guild
        mplew.write(0);
        return mplew.getPacket();
    }
    // bInGuild
    mplew.write(1);
    mplew.writeInt(g.getId());
    mplew.writeMapleAsciiString(g.getName());
    for (int i = 1; i <= 5; i++) {
        mplew.writeMapleAsciiString(g.getRankTitle(i));
    }
    Collection<MapleGuildCharacter> members = g.getMembers();
    // then it is the size of all the members
    mplew.write(members.size());
    for (MapleGuildCharacter mgc : members) {
        // and each of their character ids o_O
        mplew.writeInt(mgc.getId());
    }
    for (MapleGuildCharacter mgc : members) {
        mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13));
        mplew.writeInt(mgc.getJobId());
        mplew.writeInt(mgc.getLevel());
        mplew.writeInt(mgc.getGuildRank());
        mplew.writeInt(mgc.isOnline() ? 1 : 0);
        mplew.writeInt(g.getSignature());
        mplew.writeInt(mgc.getAllianceRank());
    }
    mplew.writeInt(g.getCapacity());
    mplew.writeShort(g.getLogoBG());
    mplew.write(g.getLogoBGColor());
    mplew.writeShort(g.getLogo());
    mplew.write(g.getLogoColor());
    mplew.writeMapleAsciiString(g.getNotice());
    mplew.writeInt(g.getGP());
    mplew.writeInt(g.getAllianceId());
    return mplew.getPacket();
}
Also used : MaplePacketLittleEndianWriter(tools.data.output.MaplePacketLittleEndianWriter) MapleGuildCharacter(net.server.guild.MapleGuildCharacter) MapleGuild(net.server.guild.MapleGuild) Point(java.awt.Point)

Example 5 with MapleGuildCharacter

use of net.server.guild.MapleGuildCharacter in project HeavenMS by ronancpl.

the class MapleCharacter method loadCharFromDB.

public static MapleCharacter loadCharFromDB(int charid, MapleClient client, boolean channelserver) throws SQLException {
    try {
        MapleCharacter ret = new MapleCharacter();
        ret.client = client;
        ret.id = charid;
        Connection con = DatabaseConnection.getConnection();
        PreparedStatement ps = con.prepareStatement("SELECT * FROM characters WHERE id = ?");
        ps.setInt(1, charid);
        ResultSet rs = ps.executeQuery();
        if (!rs.next()) {
            rs.close();
            ps.close();
            throw new RuntimeException("Loading char failed (not found)");
        }
        ret.name = rs.getString("name");
        ret.level = rs.getInt("level");
        ret.fame = rs.getInt("fame");
        ret.quest_fame = rs.getInt("fquest");
        ret.str = rs.getInt("str");
        ret.dex = rs.getInt("dex");
        ret.int_ = rs.getInt("int");
        ret.luk = rs.getInt("luk");
        ret.exp.set(rs.getInt("exp"));
        ret.gachaexp.set(rs.getInt("gachaexp"));
        ret.hp = rs.getInt("hp");
        ret.maxhp = rs.getInt("maxhp");
        ret.mp = rs.getInt("mp");
        ret.maxmp = rs.getInt("maxmp");
        ret.hpMpApUsed = rs.getInt("hpMpUsed");
        ret.hasMerchant = rs.getInt("HasMerchant") == 1;
        String[] skillPoints = rs.getString("sp").split(",");
        for (int i = 0; i < ret.remainingSp.length; i++) {
            ret.remainingSp[i] = Integer.parseInt(skillPoints[i]);
        }
        ret.remainingAp = rs.getInt("ap");
        ret.meso.set(rs.getInt("meso"));
        ret.merchantmeso = rs.getInt("MerchantMesos");
        ret.gmLevel = rs.getInt("gm");
        ret.skinColor = MapleSkinColor.getById(rs.getInt("skincolor"));
        ret.gender = rs.getInt("gender");
        ret.job = MapleJob.getById(rs.getInt("job"));
        ret.finishedDojoTutorial = rs.getInt("finishedDojoTutorial") == 1;
        ret.vanquisherKills = rs.getInt("vanquisherKills");
        ret.omokwins = rs.getInt("omokwins");
        ret.omoklosses = rs.getInt("omoklosses");
        ret.omokties = rs.getInt("omokties");
        ret.matchcardwins = rs.getInt("matchcardwins");
        ret.matchcardlosses = rs.getInt("matchcardlosses");
        ret.matchcardties = rs.getInt("matchcardties");
        ret.hair = rs.getInt("hair");
        ret.face = rs.getInt("face");
        ret.accountid = rs.getInt("accountid");
        ret.mapid = rs.getInt("map");
        ret.jailExpiration = rs.getLong("jailexpire");
        ret.initialSpawnPoint = rs.getInt("spawnpoint");
        ret.world = rs.getByte("world");
        ret.rank = rs.getInt("rank");
        ret.rankMove = rs.getInt("rankMove");
        ret.jobRank = rs.getInt("jobRank");
        ret.jobRankMove = rs.getInt("jobRankMove");
        int mountexp = rs.getInt("mountexp");
        int mountlevel = rs.getInt("mountlevel");
        int mounttiredness = rs.getInt("mounttiredness");
        ret.guildid = rs.getInt("guildid");
        ret.guildRank = rs.getInt("guildrank");
        ret.allianceRank = rs.getInt("allianceRank");
        ret.familyId = rs.getInt("familyId");
        ret.bookCover = rs.getInt("monsterbookcover");
        ret.monsterbook = new MonsterBook();
        ret.monsterbook.loadCards(charid);
        ret.vanquisherStage = rs.getInt("vanquisherStage");
        ret.dojoPoints = rs.getInt("dojoPoints");
        ret.dojoStage = rs.getInt("lastDojoStage");
        ret.dataString = rs.getString("dataString");
        ret.mgc = new MapleGuildCharacter(ret);
        int buddyCapacity = rs.getInt("buddyCapacity");
        ret.buddylist = new BuddyList(buddyCapacity);
        ret.getInventory(MapleInventoryType.EQUIP).setSlotLimit(rs.getByte("equipslots"));
        ret.getInventory(MapleInventoryType.USE).setSlotLimit(rs.getByte("useslots"));
        ret.getInventory(MapleInventoryType.SETUP).setSlotLimit(rs.getByte("setupslots"));
        ret.getInventory(MapleInventoryType.ETC).setSlotLimit(rs.getByte("etcslots"));
        for (Pair<Item, MapleInventoryType> item : ItemFactory.INVENTORY.loadItems(ret.id, !channelserver)) {
            ret.getInventory(item.getRight()).addFromDB(item.getLeft());
            Item itemz = item.getLeft();
            if (itemz.getPetId() > -1) {
                MaplePet pet = itemz.getPet();
                if (pet != null && pet.isSummoned()) {
                    ret.addPet(pet);
                }
                continue;
            }
            if (item.getRight().equals(MapleInventoryType.EQUIP) || item.getRight().equals(MapleInventoryType.EQUIPPED)) {
                Equip equip = (Equip) item.getLeft();
                if (equip.getRingId() > -1) {
                    MapleRing ring = MapleRing.loadFromDb(equip.getRingId());
                    if (item.getRight().equals(MapleInventoryType.EQUIPPED)) {
                        ring.equip();
                    }
                    if (ring.getItemId() > 1112012) {
                        ret.addFriendshipRing(ring);
                    } else {
                        ret.addCrushRing(ring);
                    }
                }
            }
        }
        NewYearCardRecord.loadPlayerNewYearCards(ret);
        PreparedStatement ps2, ps3;
        ResultSet rs2, rs3;
        ps3 = con.prepareStatement("SELECT petid FROM inventoryitems WHERE characterid = ? AND petid > -1");
        ps3.setInt(1, charid);
        rs3 = ps3.executeQuery();
        while (rs3.next()) {
            int petId = rs3.getInt("petid");
            ps2 = con.prepareStatement("SELECT itemid FROM petignores WHERE petid = ?");
            ps2.setInt(1, petId);
            ret.resetExcluded(petId);
            rs2 = ps2.executeQuery();
            while (rs2.next()) {
                ret.addExcluded(petId, rs2.getInt("itemid"));
            }
            ps2.close();
            rs2.close();
        }
        ps3.close();
        rs3.close();
        ret.commitExcludedItems();
        if (channelserver) {
            MapleMapFactory mapFactory = client.getChannelServer().getMapFactory();
            ret.map = mapFactory.getMap(ret.mapid);
            if (ret.map == null) {
                ret.map = mapFactory.getMap(100000000);
            }
            MaplePortal portal = ret.map.getPortal(ret.initialSpawnPoint);
            if (portal == null) {
                portal = ret.map.getPortal(0);
                ret.initialSpawnPoint = 0;
            }
            ret.setPosition(portal.getPosition());
            int partyid = rs.getInt("party");
            MapleParty party = Server.getInstance().getWorld(ret.world).getParty(partyid);
            if (party != null) {
                ret.mpc = party.getMemberById(ret.id);
                if (ret.mpc != null) {
                    ret.mpc = new MaplePartyCharacter(ret);
                    ret.party = party;
                }
            }
            int messengerid = rs.getInt("messengerid");
            int position = rs.getInt("messengerposition");
            if (messengerid > 0 && position < 4 && position > -1) {
                MapleMessenger messenger = Server.getInstance().getWorld(ret.world).getMessenger(messengerid);
                if (messenger != null) {
                    ret.messenger = messenger;
                    ret.messengerposition = position;
                }
            }
            ret.loggedIn = true;
        }
        rs.close();
        ps.close();
        ps = con.prepareStatement("SELECT mapid,vip FROM trocklocations WHERE characterid = ? LIMIT 15");
        ps.setInt(1, charid);
        rs = ps.executeQuery();
        byte v = 0;
        byte r = 0;
        while (rs.next()) {
            if (rs.getInt("vip") == 1) {
                ret.viptrockmaps.add(rs.getInt("mapid"));
                v++;
            } else {
                ret.trockmaps.add(rs.getInt("mapid"));
                r++;
            }
        }
        while (v < 10) {
            ret.viptrockmaps.add(999999999);
            v++;
        }
        while (r < 5) {
            ret.trockmaps.add(999999999);
            r++;
        }
        rs.close();
        ps.close();
        ps = con.prepareStatement("SELECT name FROM accounts WHERE id = ?", Statement.RETURN_GENERATED_KEYS);
        ps.setInt(1, ret.accountid);
        rs = ps.executeQuery();
        if (rs.next()) {
            ret.getClient().setAccountName(rs.getString("name"));
        }
        rs.close();
        ps.close();
        ps = con.prepareStatement("SELECT `area`,`info` FROM area_info WHERE charid = ?");
        ps.setInt(1, ret.id);
        rs = ps.executeQuery();
        while (rs.next()) {
            ret.area_info.put(rs.getShort("area"), rs.getString("info"));
        }
        rs.close();
        ps.close();
        ps = con.prepareStatement("SELECT `name`,`info` FROM eventstats WHERE characterid = ?");
        ps.setInt(1, ret.id);
        rs = ps.executeQuery();
        while (rs.next()) {
            String name = rs.getString("name");
            if (rs.getString("name").equals("rescueGaga")) {
                ret.events.put(name, new RescueGaga(rs.getInt("info")));
            }
        // ret.events = new MapleEvents(new RescueGaga(rs.getInt("rescuegaga")), new ArtifactHunt(rs.getInt("artifacthunt")));
        }
        rs.close();
        ps.close();
        ret.cashshop = new CashShop(ret.accountid, ret.id, ret.getJobType());
        ret.autoban = new AutobanManager(ret);
        // for now
        ret.marriageRing = null;
        ps = con.prepareStatement("SELECT name, level FROM characters WHERE accountid = ? AND id != ? ORDER BY level DESC limit 1");
        ps.setInt(1, ret.accountid);
        ps.setInt(2, charid);
        rs = ps.executeQuery();
        if (rs.next()) {
            ret.linkedName = rs.getString("name");
            ret.linkedLevel = rs.getInt("level");
        }
        rs.close();
        ps.close();
        if (channelserver) {
            ps = con.prepareStatement("SELECT * FROM queststatus WHERE characterid = ?");
            ps.setInt(1, charid);
            rs = ps.executeQuery();
            PreparedStatement psf;
            try (PreparedStatement pse = con.prepareStatement("SELECT * FROM questprogress WHERE queststatusid = ?")) {
                psf = con.prepareStatement("SELECT mapid FROM medalmaps WHERE queststatusid = ?");
                while (rs.next()) {
                    MapleQuest q = MapleQuest.getInstance(rs.getShort("quest"));
                    MapleQuestStatus status = new MapleQuestStatus(q, MapleQuestStatus.Status.getById(rs.getInt("status")));
                    long cTime = rs.getLong("time");
                    if (cTime > -1) {
                        status.setCompletionTime(cTime * 1000);
                    }
                    long eTime = rs.getLong("expires");
                    if (eTime > 0) {
                        status.setExpirationTime(eTime);
                    }
                    status.setForfeited(rs.getInt("forfeited"));
                    ret.quests.put(q.getId(), status);
                    pse.setInt(1, rs.getInt("queststatusid"));
                    try (ResultSet rsProgress = pse.executeQuery()) {
                        while (rsProgress.next()) {
                            status.setProgress(rsProgress.getInt("progressid"), rsProgress.getString("progress"));
                        }
                    }
                    psf.setInt(1, rs.getInt("queststatusid"));
                    try (ResultSet medalmaps = psf.executeQuery()) {
                        while (medalmaps.next()) {
                            status.addMedalMap(medalmaps.getInt("mapid"));
                        }
                    }
                }
                rs.close();
                ps.close();
            }
            psf.close();
            ps = con.prepareStatement("SELECT skillid,skilllevel,masterlevel,expiration FROM skills WHERE characterid = ?");
            ps.setInt(1, charid);
            rs = ps.executeQuery();
            while (rs.next()) {
                ret.skills.put(SkillFactory.getSkill(rs.getInt("skillid")), new SkillEntry(rs.getByte("skilllevel"), rs.getInt("masterlevel"), rs.getLong("expiration")));
            }
            rs.close();
            ps.close();
            ps = con.prepareStatement("SELECT SkillID,StartTime,length FROM cooldowns WHERE charid = ?");
            ps.setInt(1, ret.getId());
            rs = ps.executeQuery();
            while (rs.next()) {
                final int skillid = rs.getInt("SkillID");
                final long length = rs.getLong("length"), startTime = rs.getLong("StartTime");
                if (skillid != 5221999 && (length + startTime < System.currentTimeMillis())) {
                    continue;
                }
                ret.giveCoolDowns(skillid, startTime, length);
            }
            rs.close();
            ps.close();
            ps = con.prepareStatement("DELETE FROM cooldowns WHERE charid = ?");
            ps.setInt(1, ret.getId());
            ps.executeUpdate();
            ps.close();
            ps = con.prepareStatement("SELECT * FROM skillmacros WHERE characterid = ?");
            ps.setInt(1, charid);
            rs = ps.executeQuery();
            while (rs.next()) {
                int position = rs.getInt("position");
                SkillMacro macro = new SkillMacro(rs.getInt("skill1"), rs.getInt("skill2"), rs.getInt("skill3"), rs.getString("name"), rs.getInt("shout"), position);
                ret.skillMacros[position] = macro;
            }
            rs.close();
            ps.close();
            ps = con.prepareStatement("SELECT `key`,`type`,`action` FROM keymap WHERE characterid = ?");
            ps.setInt(1, charid);
            rs = ps.executeQuery();
            while (rs.next()) {
                int key = rs.getInt("key");
                int type = rs.getInt("type");
                int action = rs.getInt("action");
                ret.keymap.put(Integer.valueOf(key), new MapleKeyBinding(type, action));
            }
            rs.close();
            ps.close();
            ps = con.prepareStatement("SELECT `locationtype`,`map`,`portal` FROM savedlocations WHERE characterid = ?");
            ps.setInt(1, charid);
            rs = ps.executeQuery();
            while (rs.next()) {
                ret.savedLocations[SavedLocationType.valueOf(rs.getString("locationtype")).ordinal()] = new SavedLocation(rs.getInt("map"), rs.getInt("portal"));
            }
            rs.close();
            ps.close();
            ps = con.prepareStatement("SELECT `characterid_to`,`when` FROM famelog WHERE characterid = ? AND DATEDIFF(NOW(),`when`) < 30");
            ps.setInt(1, charid);
            rs = ps.executeQuery();
            ret.lastfametime = 0;
            ret.lastmonthfameids = new ArrayList<>(31);
            while (rs.next()) {
                ret.lastfametime = Math.max(ret.lastfametime, rs.getTimestamp("when").getTime());
                ret.lastmonthfameids.add(Integer.valueOf(rs.getInt("characterid_to")));
            }
            rs.close();
            ps.close();
            ret.buddylist.loadFromDb(charid);
            ret.storage = MapleStorage.loadOrCreateFromDB(ret.accountid, ret.world);
            ret.recalcLocalStats();
            // ret.resetBattleshipHp();
            ret.silentEnforceMaxHpMp();
        }
        int mountid = ret.getJobType() * 10000000 + 1004;
        if (ret.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -18) != null) {
            ret.maplemount = new MapleMount(ret, ret.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -18).getItemId(), mountid);
        } else {
            ret.maplemount = new MapleMount(ret, 0, mountid);
        }
        ret.maplemount.setExp(mountexp);
        ret.maplemount.setLevel(mountlevel);
        ret.maplemount.setTiredness(mounttiredness);
        ret.maplemount.setActive(false);
        con.close();
        return ret;
    } catch (SQLException | RuntimeException e) {
        e.printStackTrace();
    }
    return null;
}
Also used : MapleQuest(server.quest.MapleQuest) AutobanManager(client.autoban.AutobanManager) SQLException(java.sql.SQLException) MapleGuildCharacter(net.server.guild.MapleGuildCharacter) RescueGaga(server.events.RescueGaga) MapleMapFactory(server.maps.MapleMapFactory) MapleMapItem(server.maps.MapleMapItem) Item(client.inventory.Item) MaplePlayerShopItem(server.maps.MaplePlayerShopItem) Equip(client.inventory.Equip) MapleInventoryType(client.inventory.MapleInventoryType) ResultSet(java.sql.ResultSet) MaplePet(client.inventory.MaplePet) CashShop(server.CashShop) DatabaseConnection(tools.DatabaseConnection) Connection(java.sql.Connection) SavedLocation(server.maps.SavedLocation) MapleParty(net.server.world.MapleParty) PreparedStatement(java.sql.PreparedStatement) Point(java.awt.Point) MaplePortal(server.MaplePortal) MaplePartyCharacter(net.server.world.MaplePartyCharacter) MapleMessenger(net.server.world.MapleMessenger)

Aggregations

MapleGuildCharacter (net.server.guild.MapleGuildCharacter)6 Point (java.awt.Point)4 SQLException (java.sql.SQLException)3 Connection (java.sql.Connection)2 PreparedStatement (java.sql.PreparedStatement)2 ResultSet (java.sql.ResultSet)2 MapleGuild (net.server.guild.MapleGuild)2 MapleParty (net.server.world.MapleParty)2 MaplePartyCharacter (net.server.world.MaplePartyCharacter)2 MapleQuest (server.quest.MapleQuest)2 DatabaseConnection (tools.DatabaseConnection)2 MapleCharacter (client.MapleCharacter)1 AutobanManager (client.autoban.AutobanManager)1 Equip (client.inventory.Equip)1 Item (client.inventory.Item)1 MapleInventoryType (client.inventory.MapleInventoryType)1 MaplePet (client.inventory.MaplePet)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1 Server (net.server.Server)1 MapleMessenger (net.server.world.MapleMessenger)1