Hello all.
If i click on Rooms than i reloading from the client.
Can someone help me?
![]()
If i click on Rooms than i reloading from the client.
Can someone help me?

public int getnx() {
return getPlayer().getnx();
}
public void setnx(int amount) {
getPlayer().setnx(getPlayer().getnx() + amount);
getPlayer().saveToDB();
}
private int nx;
public static MapleCharacter getDefault(MapleClient c) {
MapleCharacter ret = new MapleCharacter();
ret.client = c;
ret.gmLevel = c.gmLevel();
ret.hp = 50;
ret.maxhp = 50;
ret.mp = 5;
ret.maxmp = 5;
ret.str = 12;
ret.dex = 5;
ret.int_ = 4;
ret.luk = 4;
ret.map = null;
ret.job = MapleJob.BEGINNER;
ret.level = 1;
ret.accountid = c.getAccID();
ret.buddylist = new BuddyList(20);
ret.maplemount = null;
ret.getInventory(MapleInventoryType.EQUIP).setSlotLimit(96);
ret.getInventory(MapleInventoryType.USE).setSlotLimit(96);
ret.getInventory(MapleInventoryType.SETUP).setSlotLimit(96);
ret.getInventory(MapleInventoryType.ETC).setSlotLimit(96);
try {
try (PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("SELECT name, nxCredit, maplePoint, nxPrepaid, votepoints FROM accounts WHERE id = ?")) {
ps.setInt(1, ret.accountid);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
ret.client.setAccountName(rs.getString("name"));
ret.nx = rs.getInt("nxCredit");
ret.maplePoint = rs.getInt("maplePoint");
ret.nxPrepaid = rs.getInt("nxPrepaid");
ret.votepoints = rs.getInt("votepoints");
}
rs.close();
}
} catch (Exception e) {
}
for (int i = 0; i < DEFAULT_KEY.length; i++) {
ret.keymap.put(DEFAULT_KEY[i], new MapleKeyBinding(DEFAULT_TYPE[i], DEFAULT_ACTION[i]));
}
//to fix the map 0 lol
for (int i = 0; i < 5; i++) {
ret.trockmaps[i] = 999999999;
}
for (int i = 0; i < 10; i++) {
ret.viptrockmaps[i] = 999999999;
}
if (ret.isGM()) {
ret.job = MapleJob.SUPERGM;
ret.level = 200;
//int[] gmskills = {9001000, 9001001, 9001000, 9101000, 9101001, 9101002, 9101003, 9101004, 9101005, 9101006, 9101007, 9101008};
}
return ret;
}
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.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;
ret.remainingSp = rs.getInt("sp");
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.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.whitechat = ret.gmLevel >= 1;
if (ret.guildid > 0) {
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);
}
}
}
}
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.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 name, nxCredit, maplePoint, nxPrepaid, votepoints FROM accounts WHERE id = ?");
ps.setInt(1, ret.accountid);
rs = ps.executeQuery();
if (rs.next()) {
ret.client.setAccountName(rs.getString("name"));
ret.nx = rs.getInt("nxCredit");
ret.maplePoint = rs.getInt("maplePoint");
ret.nxPrepaid = rs.getInt("nxPrepaid");
ret.votepoints = rs.getInt("votepoints");
}
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[v] = rs.getInt("mapid");
v++;
} else {
ret.trockmaps[r] = rs.getInt("mapid");
r++;
}
}
while (v < 10) {
ret.viptrockmaps[v] = 999999999;
v++;
}
while (r < 5) {
ret.trockmaps[r] = 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);
ret.marriageRing = null; //for now
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);
}
status.setForfeited(rs.getInt("forfeited"));
ret.quests.put(q, 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((byte) -18) != null) {
ret.maplemount = new MapleMount(ret, ret.getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -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);
return ret;
} catch (SQLException | RuntimeException e) {
e.printStackTrace();
}
return null;
}
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 = ? 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);
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, 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 `nxCredit` = ?, `maplePoint` = ?, `nxPrepaid` = ?, gm = ?, `votepoints` = ? WHERE id = ?");
ps.setInt(1, nx);
ps.setInt(2, maplePoint);
ps.setInt(3, nxPrepaid);
ps.setInt(4, gmLevel);
ps.setInt(5, votepoints);
ps.setInt(6, client.getAccID());
ps.executeUpdate();
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 (SQLException e) {
}
}
}
public void setnx(int amount) {
nx = amount;
}
public void gainnx(int add) {
nx = nx + add;
}
case"setnx":{
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
victim.setnx(Integer.parseInt(sub[2]));
victim.saveToDB();
player.dropMessage("You have given " + sub[1] + " " + sub[2] + " nx cash.");
victim.dropMessage(5, player.getName() + " has given you " + sub[2] + " nx cash.");
break;
}