Advertisement
Guest User

Untitled

a guest
May 29th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.26 KB | None | 0 0
  1. public void saveToDB(boolean update) {
  2. Connection con = DatabaseConnection.getConnection();
  3. try {
  4. con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
  5. con.setAutoCommit(false);
  6. PreparedStatement ps;
  7. if (update) {
  8. ps = con.prepareStatement("UPDATE characters SET level = ?, fame = ?, str = ?, dex = ?, luk = ?, `int` = ?, exp = ?, 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 = ?, cygnuslink = ?, watchedcygnusintro = ?, vanquisherStage = ?, dojoPoints = ?, lastDojoStage = ?, finishedDojoTutorial = ?, vanquisherKills = ?, matchcardwins = ?, matchcardlosses = ?, matchcardties = ?, omokwins = ?, omoklosses = ?, omokties = ?, reborns = ?, pvpkills = ?, pvpdeaths = ? WHERE id = ?");
  9. } else {
  10. ps = con.prepareStatement("INSERT INTO characters (level, fame, str, dex, luk, `int`, exp, hp, mp, maxhp, maxmp, sp, ap, gm, skincolor, gender, job, hair, face, map, meso, hpMpUsed, spawnpoint, party, buddyCapacity, messengerid, messengerposition, mountlevel, mounttiredness, mountexp, equipslots, useslots, setupslots, etcslots, monsterbookcover, cygnuslink, watchedcygnusintro, vanquisherStage, dojopoints, lastDojoStage, finishedDojoTutorial, vanquisherKills, matchcardwins, matchcardlosses, matchcardties, omokwins, omoklosses, omokties, reborns, pvpkills, pvpdeaths, accountid, name, world) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
  11. }
  12. if (gmLevel < 1 && level > 199) {
  13. ps.setInt(1, isCygnus() ? getClient().getChannelServer().getCygnusLC() : getClient().getChannelServer().getExplorerLC());
  14. } else {
  15. ps.setInt(1, level);
  16. }
  17. ps.setInt(2, fame);
  18. ps.setInt(3, str);
  19. ps.setInt(4, dex);
  20. ps.setInt(5, luk);
  21. ps.setInt(6, int_);
  22. ps.setInt(7, Math.abs(exp.get()));
  23. ps.setInt(8, hp);
  24. ps.setInt(9, mp);
  25. ps.setInt(10, maxhp);
  26. ps.setInt(11, maxmp);
  27. ps.setInt(12, remainingSp);
  28. ps.setInt(13, remainingAp);
  29. ps.setInt(14, gmLevel);
  30. ps.setInt(15, skinColor.getId());
  31. ps.setInt(16, gender);
  32. ps.setInt(17, job.getId());
  33. ps.setInt(18, hair);
  34. ps.setInt(19, face);
  35. if (map == null) {
  36. ps.setInt(20, 0);
  37. } else if (map.getForcedReturnId() != 999999999) {
  38. ps.setInt(20, map.getForcedReturnId());
  39. } else {
  40. ps.setInt(20, map.getId());
  41. }
  42. ps.setInt(21, meso.get());
  43. ps.setInt(22, hpMpApUsed);
  44. if (map == null || map.getId() == 610020000 || map.getId() == 610020001) {
  45. ps.setInt(23, 0);
  46. } else {
  47. MaplePortal closest = map.findClosestSpawnpoint(getPosition());
  48. if (closest != null) {
  49. ps.setInt(23, closest.getId());
  50. } else {
  51. ps.setInt(23, 0);
  52. }
  53. }
  54. if (party != null) {
  55. ps.setInt(24, party.getId());
  56. } else {
  57. ps.setInt(24, -1);
  58. }
  59. ps.setInt(25, buddylist.getCapacity());
  60. if (messenger != null) {
  61. ps.setInt(26, messenger.getId());
  62. ps.setInt(27, messengerposition);
  63. } else {
  64. ps.setInt(26, 0);
  65. ps.setInt(27, 4);
  66. }
  67. if (maplemount != null) {
  68. ps.setInt(28, maplemount.getLevel());
  69. ps.setInt(29, maplemount.getExp());
  70. ps.setInt(30, maplemount.getTiredness());
  71. } else {
  72. ps.setInt(28, 1);
  73. ps.setInt(29, 0);
  74. ps.setInt(30, 0);
  75. }
  76. for (int i = 31; i < 35; i++) {
  77. ps.setInt(i, getInventory(MapleInventoryType.getByType((byte) (i - 30))).getSlotLimit());
  78. }
  79. if (update) {
  80. monsterbook.saveCards(getId());
  81. }
  82. ps.setInt(35, bookCover);
  83. ps.setInt(36, cygnusLinkId);
  84. ps.setInt(37, watchedCygnusIntro ? 1 : 0);
  85. ps.setInt(38, vanquisherStage);
  86. ps.setInt(39, dojoPoints);
  87. ps.setInt(40, dojoStage);
  88. ps.setInt(41, finishedDojoTutorial ? 1 : 0);
  89. ps.setInt(42, vanquisherKills);
  90. ps.setInt(43, matchcardwins);
  91. ps.setInt(44, matchcardlosses);
  92. ps.setInt(45, matchcardties);
  93. ps.setInt(46, omokwins);
  94. ps.setInt(47, omoklosses);
  95. ps.setInt(48, omokties);
  96. ps.setInt(49, reborns);
  97. ps.setInt(50, pvpkills);
  98. ps.setInt(51, pvpdeaths);
  99. if (update) {
  100. ps.setInt(52, id);
  101. } else {
  102. ps.setInt(52, accountid);
  103. ps.setString(53, name);
  104. ps.setInt(54, world);
  105. }
  106.  
  107. int updateRows = ps.executeUpdate();
  108. if (!update) {
  109. ResultSet rs = ps.getGeneratedKeys();
  110. if (rs.next()) {
  111. this.id = rs.getInt(1);
  112. } else {
  113. throw new RuntimeException("Inserting char failed.");
  114. }
  115. } else if (updateRows < 1) {
  116. throw new RuntimeException("Character not in database (" + id + ")");
  117. }
  118. for (int i = 0; i < 3; i++) {
  119. if (pets[i] != null) {
  120. pets[i].saveToDb();
  121. }
  122. }
  123. deleteWhereCharacterId(con, "DELETE FROM keymap WHERE characterid = ?");
  124. ps = con.prepareStatement("INSERT INTO keymap (characterid, `key`, `type`, `action`) VALUES (?, ?, ?, ?)");
  125. ps.setInt(1, id);
  126. for (Entry<Integer, MapleKeyBinding> keybinding : keymap.entrySet()) {
  127. ps.setInt(2, keybinding.getKey().intValue());
  128. ps.setInt(3, keybinding.getValue().getType());
  129. ps.setInt(4, keybinding.getValue().getAction());
  130. ps.addBatch();
  131. }
  132. ps.executeBatch();
  133. deleteWhereCharacterId(con, "DELETE FROM skillmacros WHERE characterid = ?");
  134. ps = con.prepareStatement("INSERT INTO skillmacros (characterid, skill1, skill2, skill3, name, shout, position) VALUES (?, ?, ?, ?, ?, ?, ?)");
  135. ps.setInt(1, getId());
  136. for (int i = 0; i < 5; i++) {
  137. SkillMacro macro = skillMacros[i];
  138. if (macro != null) {
  139. ps.setInt(2, macro.getSkill1());
  140. ps.setInt(3, macro.getSkill2());
  141. ps.setInt(4, macro.getSkill3());
  142. ps.setString(5, macro.getName());
  143. ps.setInt(6, macro.getShout());
  144. ps.setInt(7, i);
  145. ps.addBatch();
  146. }
  147. }
  148. ps.executeBatch();
  149. deleteWhereCharacterId(con, "DELETE FROM inventoryitems WHERE characterid = ?");
  150. ps = con.prepareStatement("INSERT INTO inventoryitems (characterid, itemid, inventorytype, position, quantity, owner, petid, expiredate) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
  151. PreparedStatement pse = con.prepareStatement("INSERT INTO inventoryequipment VALUES (DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
  152. for (MapleInventory iv : inventory) {
  153. ps.setInt(3, iv.getType().getType());
  154. for (IItem item : iv.list()) {
  155. ps.setInt(1, id);
  156. ps.setInt(2, item.getItemId());
  157. ps.setInt(4, item.getPosition());
  158. ps.setInt(5, item.getQuantity());
  159. ps.setString(6, item.getOwner());
  160. ps.setInt(7, item.getPetId());
  161. ps.setLong(8, item.getExpiration());
  162. ps.executeUpdate();
  163. ResultSet rs = ps.getGeneratedKeys();
  164. int itemid;
  165. if (rs.next()) {
  166. itemid = rs.getInt(1);
  167. } else {
  168. rs.close();
  169. throw new RuntimeException("Inserting char failed.");
  170. }
  171. if (iv.getType().equals(MapleInventoryType.EQUIP) || iv.getType().equals(MapleInventoryType.EQUIPPED)) {
  172. pse.setInt(1, itemid);
  173. IEquip equip = (IEquip) item;
  174. pse.setInt(2, equip.getUpgradeSlots());
  175. pse.setInt(3, equip.getLevel());
  176. pse.setInt(4, equip.getStr());
  177. pse.setInt(5, equip.getDex());
  178. pse.setInt(6, equip.getInt());
  179. pse.setInt(7, equip.getLuk());
  180. pse.setInt(8, equip.getHp());
  181. pse.setInt(9, equip.getMp());
  182. pse.setInt(10, equip.getWatk());
  183. pse.setInt(11, equip.getMatk());
  184. pse.setInt(12, equip.getWdef());
  185. pse.setInt(13, equip.getMdef());
  186. pse.setInt(14, equip.getAcc());
  187. pse.setInt(15, equip.getAvoid());
  188. pse.setInt(16, equip.getHands());
  189. pse.setInt(17, equip.getSpeed());
  190. pse.setInt(18, equip.getJump());
  191. pse.setInt(19, equip.getRingId());
  192. pse.setInt(20, 0);
  193. pse.setInt(21, equip.getVicious());
  194. pse.setInt(22, item.getFlag());
  195. pse.setInt(23, equip.getItemExp());
  196. pse.executeUpdate();
  197. }
  198. rs.close();
  199. }
  200. }
  201. pse.close();
  202. deleteWhereCharacterId(con, "DELETE FROM skills WHERE characterid = ?");
  203. ps = con.prepareStatement("INSERT INTO skills (characterid, skillid, skilllevel, masterlevel) VALUES (?, ?, ?, ?)");
  204. ps.setInt(1, id);
  205. for (Entry<ISkill, SkillEntry> skill : skills.entrySet()) {
  206. ps.setInt(2, skill.getKey().getId());
  207. ps.setInt(3, skill.getValue().skillevel);
  208. ps.setInt(4, skill.getValue().masterlevel);
  209. ps.addBatch();
  210. }
  211. ps.executeBatch();
  212. deleteWhereCharacterId(con, "DELETE FROM savedlocations WHERE characterid = ?");
  213. ps = con.prepareStatement("INSERT INTO savedlocations (characterid, `locationtype`, `map`, `portal`) VALUES (?, ?, ?, ?)");
  214. ps.setInt(1, id);
  215. for (SavedLocationType savedLocationType : SavedLocationType.values()) {
  216. if (savedLocations[savedLocationType.ordinal()] != null) {
  217. ps.setString(2, savedLocationType.name());
  218. ps.setInt(3, savedLocations[savedLocationType.ordinal()].getMapId());
  219. ps.setInt(4, savedLocations[savedLocationType.ordinal()].getPortal());
  220. ps.addBatch();
  221. }
  222. }
  223. ps.executeBatch();
  224. deleteWhereCharacterId(con, "DELETE FROM buddies WHERE characterid = ? AND pending = 0");
  225. ps = con.prepareStatement("INSERT INTO buddies (characterid, `buddyid`, `pending`, `group`) VALUES (?, ?, 0, ?)");
  226. ps.setInt(1, id);
  227. for (BuddylistEntry entry : buddylist.getBuddies()) {
  228. if (entry.isVisible()) {
  229. ps.setInt(2, entry.getCharacterId());
  230. ps.setString(3, entry.getGroup());
  231. ps.addBatch();
  232. }
  233. }
  234. ps.executeBatch();
  235. deleteWhereCharacterId(con, "DELETE FROM queststatus WHERE characterid = ?");
  236. ps = con.prepareStatement("INSERT INTO queststatus (`queststatusid`, `characterid`, `quest`, `status`, `time`, `forfeited`) VALUES (DEFAULT, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
  237. pse = con.prepareStatement("INSERT INTO queststatusmobs VALUES (DEFAULT, ?, ?, ?)");
  238. ps.setInt(1, id);
  239. for (MapleQuestStatus q : quests.values()) {
  240. ps.setInt(2, q.getQuest().getId());
  241. ps.setInt(3, q.getStatus().getId());
  242. ps.setInt(4, (int) (q.getCompletionTime() / 1000));
  243. ps.setInt(5, q.getForfeited());
  244. ps.executeUpdate();
  245. ResultSet rs = ps.getGeneratedKeys();
  246. rs.next();
  247. for (int mob : q.getMobKills().keySet()) {
  248. pse.setInt(1, rs.getInt(1));
  249. pse.setInt(2, mob);
  250. pse.setInt(3, q.getMobKills(mob));
  251. pse.addBatch();
  252. }
  253. pse.executeBatch();
  254. rs.close();
  255. }
  256. pse.close();
  257. ps = con.prepareStatement("UPDATE accounts SET `paypalNX` = ?, `mPoints` = ?, `cardNX` = ?, gm = ? WHERE id = ?");
  258. ps.setInt(1, paypalnx);
  259. ps.setInt(2, maplepoints);
  260. ps.setInt(3, cardnx);
  261. ps.setInt(4, gmLevel);
  262. ps.setInt(4, votingpoints);
  263. ps.setInt(4, dpoints);
  264. ps.setInt(5, client.getAccID());
  265. ps.executeUpdate();
  266. if (storage != null) {
  267. storage.saveToDB();
  268. }
  269. ps = con.prepareStatement("DELETE FROM wishlist WHERE `charid` = ?");
  270. ps.setInt(1, id);
  271. ps.executeUpdate();
  272. ps = con.prepareStatement("INSERT INTO wishlist(`sn`, `charid`) VALUES(?, ?)");
  273. for (int sn : wishList) {
  274. ps.setInt(1, sn);
  275. ps.setInt(2, id);
  276. ps.addBatch();
  277. }
  278. ps.executeBatch();
  279. ps.close();
  280. if (gmLevel > 0) {
  281. ps = con.prepareStatement("INSERT INTO gmlog (`cid`, `command`) VALUES (?, ?)");
  282. ps.setInt(1, id);
  283. for (String com : commands) {
  284. ps.setString(2, com);
  285. ps.addBatch();
  286. }
  287. ps.executeBatch();
  288. }
  289. ps.close();
  290. con.commit();
  291. } catch (Exception e) {
  292. e.printStackTrace();
  293. try {
  294. con.rollback();
  295. } catch (SQLException se) {
  296. }
  297. } finally {
  298. try {
  299. con.setAutoCommit(true);
  300. con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
  301. } catch (Exception e) {
  302. }
  303. }
  304. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement