Guest User

Untitled

a guest
Dec 10th, 2017
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. package org.dementhium.mysql.impl;
  2.  
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5.  
  6. import org.dementhium.RS2ServerBootstrap;
  7. import org.dementhium.content.misc.PunishHandler;
  8. import org.dementhium.model.World;
  9. import org.dementhium.model.definition.PlayerDefinition;
  10. import org.dementhium.model.player.Player;
  11. import org.dementhium.mysql.DatabaseManager;
  12. import org.dementhium.mysql.MD5Encryption;
  13. import org.dementhium.net.GameSession;
  14. import org.dementhium.util.Constants;
  15. import org.dementhium.util.Misc;
  16.  
  17. /**
  18. *
  19. * @author 'Mystic Flow <Steven@rune-server.org>
  20. */
  21. public class PlayerLoader {
  22.  
  23. public class PlayerLoadResult {
  24.  
  25. private final Player player;
  26. private final int returnCode;
  27.  
  28. private PlayerLoadResult(Player player, int returnCode) {
  29. this.returnCode = returnCode;
  30. this.player = player;
  31. }
  32.  
  33. public Player getPlayer() {
  34. return player;
  35. }
  36.  
  37. public int getReturnCode() {
  38. return returnCode;
  39. }
  40.  
  41. }
  42.  
  43. public static final String PLAYER_TABLE = "users";
  44.  
  45. private DatabaseManager database;
  46.  
  47. public PlayerLoader() {
  48. try {
  49. database = DatabaseManager.create("*,*,*,*");
  50. database.establishConnection();
  51. } catch (SQLException e) {
  52. if (Misc.isWindows()) {
  53. RS2ServerBootstrap.sqlDisabled = true;
  54. }
  55. e.printStackTrace();
  56. }
  57. }
  58.  
  59.  
  60. public PlayerLoadResult load(GameSession connection, PlayerDefinition def) {
  61. int code = 2;
  62. Player player = null;
  63. if (!passwordMatch(def.getName(), def.getPassword())) {
  64. code = Constants.INVALID_PASSWORD;
  65. }
  66. if(code == 2) {
  67. Player lobbyPlayer = World.getWorld().getPlayerOutOfLobby(def.getName());
  68. if (World.getWorld().isOnList(def.getName()) && lobbyPlayer == null) {
  69. code = Constants.ALREADY_ONLINE;
  70. }
  71. int count = 2;
  72. String ip = PunishHandler.formatIp(connection.getChannel().getRemoteAddress().toString());
  73. for (Player pl : World.getWorld().getPlayers()) {
  74. if (pl != null && pl.getLastConnectIp().equals(ip)) {
  75. if (--count == 0) {
  76. code = 9;
  77. }
  78. }
  79. }
  80. }
  81. if (code == 2) {
  82. player = new Player(connection, def);
  83. if (player.getRights() != 2 && World.getWorld().getPunishHandler().isBanned(player)) {
  84. code = Constants.BANNED;
  85. }
  86. acquireRights(def);
  87. }
  88. return new PlayerLoadResult(player, code);
  89. }
  90.  
  91. private void acquireRights(PlayerDefinition def) {
  92. if (RS2ServerBootstrap.sqlDisabled) {
  93. def.setRights(2);
  94. return;
  95. }
  96. ResultSet sql = null;
  97. try {
  98. sql = database.executeQuery("SELECT usergroup FROM " + PLAYER_TABLE + " WHERE username='" + def.getName() + "' LIMIT 1");
  99. if (sql.next()) {
  100. int usergroup = sql.getInt("usergroup");
  101. switch (usergroup) {
  102. case 6:
  103. def.setRights(2);
  104. break;
  105. case 5:
  106. case 19:
  107. def.setRights(1);
  108. break;
  109. case 16://Respected Donor
  110. def.setDonor(1);
  111. break;
  112. case 17://Grand Donor
  113. def.setDonor(2);
  114. break;
  115. case 18://Elite Donor
  116. def.setDonor(3);
  117. break;
  118. }
  119. }
  120. } catch (SQLException e) {
  121. e.printStackTrace();
  122. } finally {
  123. if (sql != null) {
  124. close(sql);
  125. }
  126. sql = null;
  127. }
  128. }
  129.  
  130. public boolean load(Player player) {
  131. ResultSet resultSet = null;
  132. try {
  133. resultSet = database.executeQuery("SELECT * FROM " + PLAYER_TABLE + " WHERE username='" + player.getUsername() + "' LIMIT 1");
  134. if (resultSet.next()) {
  135. player.loadSQL(resultSet);
  136. return true;
  137. }
  138. } catch (Exception e) {
  139. e.printStackTrace();
  140. } finally {
  141. if (resultSet != null) {
  142. close(resultSet);
  143. }
  144. resultSet = null;
  145. }
  146. return false;
  147. }
  148.  
  149. public boolean save(Player player) {
  150. if (RS2ServerBootstrap.sqlDisabled) {
  151. return true;
  152. }
  153. if (player.getAttribute("dontSave") == Boolean.TRUE) {
  154. return true;
  155. }
  156. StringBuilder sb = player.saveSQL(PLAYER_TABLE);
  157. String completeQuery = sb.toString();
  158. try {
  159. database.executeUpdate(completeQuery);
  160. return true;
  161. } catch (Exception e) {
  162. e.printStackTrace();
  163. }
  164. return false;
  165. }
  166.  
  167.  
  168. public boolean passwordMatch(String name, String password) {
  169. if (RS2ServerBootstrap.sqlDisabled) {
  170. return true;
  171. }
  172. try {
  173. ResultSet result = database.executeQuery("SELECT password FROM " + PLAYER_TABLE+ " WHERE username='" + name +"'");
  174. if (result.next()) {
  175. String passwordResult = result.getString("password");
  176. String encryptedPassword = MD5Encryption.encrypt(password);
  177. if (encryptedPassword.equals(passwordResult)) {
  178. return true;
  179. }
  180. }
  181. } catch (SQLException e) {
  182. //ignore
  183. }
  184. return false;
  185. }
  186.  
  187. public void close(ResultSet resultSet) {
  188. try {
  189. resultSet.close();
  190. } catch (SQLException e) {
  191. e.printStackTrace();
  192. }
  193. }
  194.  
  195. }
Add Comment
Please, Sign In to add comment