Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void saveToDB() {
- Connection con = DatabaseConnection.getConnection();
- try {
- 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 = ?, eventpoints = ?, participationpoints = ?, jqpoints = ?, reborns = ?, rebornpoints = ?, autorb = ?, itemvac = ? WHERE id = ?", Statement.RETURN_GENERATED_KEYS);
- if (gmLevel < 1 && level > 199) {
- ps.setInt(1, 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);
- ps.setInt(13, remainingSp);
- 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) {
- ps.setInt(24, 0);
- } else {
- MaplePortal closest = map.findClosestSpawnpoint(getPosition());
- if (closest != null) {
- ps.setInt(24, closest.getId());
- } else {
- ps.setInt(24, 0);
- }
- }
- if (party != null) {
- ps.setInt(25, party.getId());
- } else {
- ps.setInt(25, -1);
- }
- 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.setInt(48, eventpoints);
- ps.setInt(49, participationpoints);
- ps.setInt(50, jqpoints);
- ps.setInt(51, reborns);
- ps.setInt(52, rebornpoints);
- ps.setByte(53, autorb);
- ps.setByte(54, itemvac);
- ps.setInt(55, id);
- int updateRows = ps.executeUpdate();
- if (updateRows < 1) {
- throw new RuntimeException("Character not in database (" + id + ")");
- }
- for (int i = 0; i < 3; i++) {
- if (pets[i] != null) {
- pets[i].saveToDb();
- }
- }
- deleteWhereCharacterId(con, "DELETE FROM keymap WHERE characterid = ?");
- ps = con.prepareStatement("INSERT INTO keymap (characterid, `key`, `type`, `action`) VALUES (?, ?, ?, ?)");
- ps.setInt(1, id);
- for (Entry<Integer, MapleKeyBinding> keybinding : keymap.entrySet()) {
- ps.setInt(2, keybinding.getKey().intValue());
- 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);
- 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[i] != 999999999) {
- ps.setInt(1, getId());
- ps.setInt(2, trockmaps[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[i] != 999999999) {
- ps.setInt(1, getId());
- ps.setInt(2, viptrockmaps[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`, `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);
- 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.setInt(5, 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);
- ps.setInt(2, client.getAccID());
- ps.executeUpdate();
- if (cashshop != null) {
- cashshop.save();
- }
- if (storage != null) {
- storage.saveToDB();
- }
- ps.close();
- con.commit();
- } 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);
- }
- } finally {
- try {
- con.setAutoCommit(true);
- con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
- } catch (Exception e) {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement