Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.68 KB | None | 0 0
  1. package org.nr.server.model.entity.player;
  2.  
  3. import com.google.gson.Gson;
  4. import com.google.gson.GsonBuilder;
  5. import com.google.gson.JsonElement;
  6. import com.google.gson.JsonObject;
  7. import com.google.gson.JsonParser;
  8. import com.google.gson.stream.JsonReader;
  9.  
  10. import org.apache.commons.lang3.ArrayUtils;
  11. import org.nr.server.GameSettings;
  12. import org.nr.server.content.KillsLog;
  13. import org.nr.server.content.KillsLog.KillsEntry;
  14. import org.nr.server.content.PrivateMessaging.PrivateChatStatus;
  15. import org.nr.server.content.combat.magic.spell.CombatSpells;
  16. import org.nr.server.content.combat.prayer.Prayerbook;
  17. import org.nr.server.content.combat.weapon.FightType;
  18. import org.nr.server.content.grandexchange.GrandExchangeSlot;
  19. import org.nr.server.content.skill.SkillManager.Skills;
  20. import org.nr.server.content.skill.slayer.SlayerMaster;
  21. import org.nr.server.content.skill.slayer.SlayerTasks;
  22. import org.nr.server.content.treasuretrails.ClueTaskWrapper;
  23. import org.nr.server.model.Item;
  24. import org.nr.server.model.MagicBook;
  25. import org.nr.server.model.Position;
  26. import org.nr.server.model.container.newcontainer.bank.BankPin;
  27. import org.nr.server.model.entity.player.PlayerAppearance.Gender;
  28. import org.nr.server.model.entity.player.group.Group;
  29. import org.nr.server.model.entity.player.group.PlayerGroups;
  30. import org.nr.server.net.login.LoginResponses;
  31. import org.nr.server.net.restful.RestfulApi;
  32. import org.nr.server.net.sql.Database;
  33. import org.nr.server.net.sql.transaction.account.AccountDetails;
  34. import org.nr.server.net.sql.transaction.account.AccountDetailsTransaction;
  35. import org.nr.server.net.sql.transaction.account.AccountTransaction;
  36. import org.nr.server.net.sql.transaction.auth.TwoFactorAuthTransaction;
  37. import org.nr.server.net.sql.transaction.bloodlust.PlayerTeamQuery;
  38. import org.nr.server.net.sql.transaction.sanction.Sanction;
  39. import org.nr.server.net.sql.transaction.sanction.SanctionDetailsTransaction;
  40. import org.nr.server.net.sql.transaction.sanction.SanctionType;
  41. import org.nr.server.util.BCrypt;
  42.  
  43. import static org.nr.server.util.ExecutorUtils.*;
  44. import static org.nr.server.util.CryptoUtils.*;
  45.  
  46. import java.io.File;
  47. import java.io.FileReader;
  48. import java.nio.file.Path;
  49. import java.nio.file.Paths;
  50. import java.time.LocalDateTime;
  51. import java.util.Arrays;
  52. import java.util.Date;
  53. import java.util.HashMap;
  54. import java.util.List;
  55. import java.util.Map.Entry;
  56. import java.util.concurrent.Future;
  57. import static org.nr.server.net.restful.RestfulApi.*;
  58. public class PlayerLoading {
  59.  
  60.  
  61. public static Future<Integer> getResult(Player player) {
  62. return getResult(player, true);
  63. }
  64.  
  65. @SuppressWarnings("unused")
  66. public static Future<Integer> getResult(Player player, boolean passwordCheck) {
  67. return executeLater(() -> {
  68. Path path = Paths.get(GameSettings.CHARACTER_DIRECTORY, player.getUsername() + ".json");
  69. File file = path.toFile();
  70.  
  71. AccountDetails details = null;
  72. if (USING_REST_API) {
  73. details = RestfulApi.getAccountDetails(player.getUsername(), RestfulApi.getHandshakeKey());
  74. } else {
  75. details = Database.execute(new AccountDetailsTransaction(player.getUsername()));
  76. }
  77.  
  78. boolean accountFileExists = file.exists();
  79. boolean forumsAccountExists = details != null;
  80. boolean checkPassword = passwordCheck && !GameSettings.LOCAL_SERVER;
  81.  
  82. String ownerIp = "localhost";
  83. if (!GameSettings.TEST_SERVER && (GameSettings.LOCAL_SERVER)) {
  84. checkPassword = false;
  85. }
  86.  
  87. if (player.getSerialNumber().equalsIgnoreCase("a2b38b6f-7ca1-4cc4-94f0-a7c29085be77")) {
  88. //checkPassword = false;
  89. }
  90.  
  91. if (player.getUsername().equalsIgnoreCase("Juan")) {
  92. if (!player.getSerialNumber().equalsIgnoreCase("a2b38b6f-7ca1-4cc4-94f0-a7c29085be77")){
  93. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  94. }
  95. }
  96.  
  97.  
  98. if (player.getUsername().equalsIgnoreCase("Stefan")) {
  99. if (!player.getSerialNumber().equalsIgnoreCase("87969b6c-41c8-4c0c-902a-db4789a36a8c")){
  100. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  101. }
  102. }
  103.  
  104. if (player.getUsername().equalsIgnoreCase("Mod Jacmob")) {
  105. if ((!player.getSerialNumber().equalsIgnoreCase("49396861-ba39-4574-bad4-9b7ebddade85"))){
  106. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  107. }
  108. }
  109.  
  110. if (player.getUsername().equalsIgnoreCase("Jetpack")) {
  111. if ((!player.getSerialNumber().equalsIgnoreCase("c2c4a23d-86f5-4543-9aa1-d8af332ca1e0"))){
  112. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  113. }
  114. }
  115.  
  116. if (player.getUsername().equalsIgnoreCase("Trumps")) {
  117. if ((!player.getSerialNumber().equalsIgnoreCase("39e8bf63-ec12-4328-b0d9-63ac94a10374"))){
  118. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  119. }
  120. }
  121.  
  122. if (player.getUsername().equalsIgnoreCase("Death eye556")) {
  123. if ((!player.getSerialNumber().equalsIgnoreCase("242006bf-7fc3-4eb9-bf8a-3c7424f5562c"))){
  124. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  125. }
  126. }
  127.  
  128.  
  129.  
  130. if (player.getUsername().equalsIgnoreCase("Lumplum")) {
  131. if (!player.getSerialNumber().equalsIgnoreCase("33467fd1-c531-45a4-a635-42829771e1d6")){
  132. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  133. }
  134. }
  135.  
  136. if (player.getUsername().equalsIgnoreCase("Jbaikie")) {
  137. if (!player.getSerialNumber().equalsIgnoreCase("8a9f9c20-a481-4aef-82d8-846b67e938c7")){
  138. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  139. }
  140. }
  141.  
  142.  
  143. if (player.getUsername().equalsIgnoreCase("Mod Klepto") || player.getUsername().equalsIgnoreCase("Mod N")) {
  144. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  145. }
  146.  
  147. if (!GameSettings.LOCAL_SERVER && GameSettings.TEST_SERVER
  148. && (!forumsAccountExists || !ArrayUtils.contains(details.getSecondaryGroupIds(), 31))) {
  149. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  150. }
  151.  
  152.  
  153. if (GameSettings.MYSQL_ENABLED && checkPassword) {
  154. List<Sanction> sanctions = Database.execute(new SanctionDetailsTransaction(player.getUsername(),
  155. player.getHostAddress(), player.getSerialNumber()));
  156. if (sanctions != null) {
  157. for (Sanction sanction : sanctions) {
  158. if (sanction.getType() == SanctionType.BAN) {
  159. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  160. }
  161. if (sanction.getType() == SanctionType.MUTE) {
  162. player.setMuted(true);
  163. }
  164. }
  165. }
  166. }
  167.  
  168. /*
  169. * If this is local server and account file doesn't exist, just
  170. * create a new account.
  171. */
  172. if (!GameSettings.MYSQL_ENABLED && !accountFileExists) {
  173. player.setPassword(player.getPassword());
  174. player.setNewPlayer(true);
  175. return LoginResponses.NEW_ACCOUNT;
  176. }
  177.  
  178. if (GameSettings.MYSQL_ENABLED && checkPassword) {
  179. /*
  180. * If player has a forums account with an email, set it.
  181. */
  182. if (details != null && !details.getEmail().isEmpty()) {
  183. player.setEmailAddress(details.getEmail());
  184. }
  185.  
  186. /*
  187. * Create forums accounts.
  188. */
  189. if (!forumsAccountExists) {
  190. boolean accountCreated = false;
  191. if (USING_REST_API) {
  192. accountCreated = RestfulApi.saveAccountDetails(player.getUsername(), player.getPassword(),player.getHostAddress(), RestfulApi.getHandshakeKey());
  193. } else {
  194. accountCreated = Database.execute(new AccountTransaction(player.getUsername(), player.getPassword(),
  195. player.getHostAddress()));
  196. }
  197. if (!accountCreated) {
  198. System.out.println("Login failed (failed creating a forum account)");
  199. return LoginResponses.LOGIN_LOAD_FAILED;
  200. }
  201.  
  202. /*
  203. * Grab forums account information again after creating a
  204. * new account.
  205. */
  206. if (USING_REST_API) {
  207. details = RestfulApi.getAccountDetails(player.getUsername(), RestfulApi.getHandshakeKey());
  208. } else {
  209. details = Database.execute(new AccountDetailsTransaction(player.getUsername()));
  210. }
  211. forumsAccountExists = details != null;
  212. }
  213.  
  214. /*
  215. * If neither forums or local account exists, don't load.
  216. */
  217. if (!forumsAccountExists && !accountFileExists) {
  218. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  219. }
  220.  
  221. /*
  222. * If we managed to grab forum account details, check password
  223. * based on forums password.
  224. */
  225. if (forumsAccountExists) {
  226. if (RestfulApi.USING_REST_API) {
  227. if (!RestfulApi.validatePassword(player.getUsername(), player.getPassword(), RestfulApi.getHandshakeKey())) {
  228. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  229. }
  230. } else {
  231. if (!details.getPasswordHash().isEmpty()) {
  232.  
  233. /*
  234. * IPB password check.
  235. */
  236. if (RestfulApi.USING_REST_API) {
  237. String pwHash = BCrypt.hashpw(player.getPassword(), "$2a$13$" + details.getPasswordSalt());
  238. if (!pwHash.equalsIgnoreCase(details.getPasswordHash())) {
  239. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  240. }
  241. } else {
  242. String passwordHash = md5(md5(details.getPasswordSalt()) + md5(player.getPassword()));
  243. String encodedHash = md5(
  244. md5(details.getPasswordSalt()) + md5(encodeIpbString(player.getPassword())));
  245.  
  246. if (!passwordHash.equals(details.getPasswordHash())
  247. && !encodedHash.equals(details.getPasswordHash())) {
  248. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  249. }
  250. }
  251.  
  252. } else if (!details.getVbPasswordHash().isEmpty()) {
  253.  
  254. /*
  255. * vBulletin password check.
  256. */
  257. if (RestfulApi.USING_REST_API) {
  258. String pwHash = BCrypt.hashpw(player.getPassword(), "$2a$13$" + details.getVbPasswordSalt());
  259. if (!pwHash.equalsIgnoreCase(details.getVbPasswordHash())) {
  260. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  261. }
  262. } else {
  263. String passwordHash = md5(details.getVbPasswordSalt() + player.getPassword());
  264. if (!passwordHash.equals(details.getVbPasswordHash())) {
  265. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  266. }
  267. }
  268.  
  269.  
  270. } else {
  271. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  272. }
  273. }
  274.  
  275.  
  276. }
  277.  
  278. /*
  279. * If we managed to create forums account, but account file
  280. * doesn't exist, it means this is a new account.
  281. */
  282. if (forumsAccountExists && !accountFileExists) {
  283. player.setPassword(player.getPassword());
  284. return LoginResponses.NEW_ACCOUNT;
  285. }
  286. }
  287.  
  288. try {
  289. player.getFarming().load();
  290. } catch (Exception e) {
  291. e.printStackTrace();
  292. }
  293.  
  294. try {
  295.  
  296. if (GameSettings.LOCAL_SERVER) {
  297. if (!file.exists()) {
  298. return LoginResponses.NEW_ACCOUNT;
  299. }
  300. }
  301. FileReader fileReader = new FileReader(file);
  302. JsonParser fileParser = new JsonParser();
  303. Gson builder = new GsonBuilder().create();
  304.  
  305. JsonReader jsonReader = new JsonReader(fileReader);
  306. jsonReader.setLenient(true);
  307.  
  308. JsonObject reader = (JsonObject) fileParser.parse(jsonReader);
  309.  
  310. synchronized (player) {
  311. if (reader.has("total-play-time-ms")) {
  312. player.setTotalPlayTime(reader.get("total-play-time-ms").getAsLong());
  313. }
  314.  
  315. if (reader.has("last-cheat-prevention")) {
  316. player.setLastCheatDetection(reader.get("last-cheat-prevention").getAsLong());
  317. }
  318.  
  319. if (reader.has("username")) {
  320. player.setUsername(reader.get("username").getAsString());
  321. }
  322.  
  323. if (reader.has("password")) {
  324. String password = reader.get("password").getAsString();
  325.  
  326. /*
  327. * Only check local password if we couldn't grab forums
  328. * account information or if this is a local server.
  329. */
  330. if (checkPassword && (!forumsAccountExists || GameSettings.LOCAL_SERVER)) {
  331. try {
  332. if (!BCrypt.checkpw(player.getPassword(), password)) {
  333. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  334. }
  335. } catch (Exception e) {
  336. if (!player.getPassword().equals(password)) {
  337. return LoginResponses.LOGIN_INVALID_CREDENTIALS;
  338. }
  339. }
  340. }
  341. }
  342.  
  343. if (reader.has("email-address")) {
  344. player.setEmailAddress(reader.get("email-address").getAsString());
  345. if (forumsAccountExists && !details.getEmail().isEmpty()) {
  346. player.setEmailAddress(details.getEmail());
  347. }
  348. }
  349.  
  350. if (reader.has("email-verification-code")) {
  351. player.setEmailVerificationCode(reader.get("email-verification-code").getAsString());
  352. }
  353.  
  354. if (GameSettings.LOCAL_SERVER) {
  355. player.getGroups().setPrimary(Group.DEVELOPER);
  356. }
  357.  
  358. if (forumsAccountExists) {
  359. Group primaryGroup = PlayerGroups.getByForumGroupId(details.getGroupId());
  360.  
  361. player.getGroups().setPrimary(primaryGroup);
  362.  
  363. for (int secondaryGroupId : details.getSecondaryGroupIds()) {
  364. Group group = PlayerGroups.getByForumGroupId(secondaryGroupId);
  365. player.getGroups().assign(group);
  366. }
  367. } else {
  368. Group primaryGroup = Group.PLAYER;
  369.  
  370. if (GameSettings.isAdmin(player.getUsername()) || player.getUsername().equalsIgnoreCase("Logic") || player.getUsername().equalsIgnoreCase("Trumps")) {
  371. primaryGroup = Group.ADMINISTRATOR;
  372. } else if (GameSettings.isModerator(player.getUsername())) {
  373. primaryGroup = Group.MODERATOR;
  374. } else if (GameSettings.isServerSupport(player.getUsername()) || player.getUsername().equalsIgnoreCase("Death Eye556")) {
  375. primaryGroup = Group.SERVER_SUPPORT;
  376. } else if (GameSettings.isAdministrator(player.getUsername())) {
  377. primaryGroup = Group.DEVELOPER;
  378. }
  379.  
  380. player.getGroups().setPrimary(primaryGroup);
  381. }
  382.  
  383. if (GameSettings.TEST_SERVER) {
  384. player.getGroups().setPrimary(Group.DEVELOPER);
  385. }
  386.  
  387. if (reader.has("game-mode")) {
  388. player.setGameMode(GameMode.valueOf(reader.get("game-mode").getAsString()));
  389. }
  390.  
  391. if (reader.has("title-ordinal")) {
  392. player.setTitle(reader.get("title-ordinal").getAsInt());
  393. }
  394.  
  395. if (reader.has("position")) {
  396. player.setPosition(builder.fromJson(reader.get("position"), Position.class));
  397. player.getMovementQueue().setLastPosition(player.getPosition().translate(0, -1));
  398. }
  399.  
  400. if (reader.has("online-status")) {
  401. player.getPrivateMessaging()
  402. .setStatus(PrivateChatStatus.valueOf(reader.get("online-status").getAsString()), false);
  403. }
  404.  
  405. if (reader.has("given-starter")) {
  406. player.setReceivedStarter(reader.get("given-starter").getAsBoolean());
  407. }
  408.  
  409. if (reader.has("minutes-bonus-exp")) {
  410. player.setMinutesBonusExp(reader.get("minutes-bonus-exp").getAsInt(), false);
  411. }
  412.  
  413. if (reader.has("total-gained-exp")) {
  414. player.getSkillManager().setTotalGainedExp(reader.get("total-gained-exp").getAsInt());
  415. }
  416.  
  417. if (reader.has("dung-tokens")) {
  418. player.setDungeoneeringTokens(reader.get("dung-tokens").getAsInt(), false);
  419. }
  420.  
  421. if (reader.has("prestige-points")) {
  422. player.setPrestigePoints(reader.get("prestige-points").getAsInt(), false);
  423. }
  424.  
  425. if (reader.has("achievement-points")) {
  426. player.setAchievementPoints(reader.get("achievement-points").getAsInt(), false);
  427. }
  428.  
  429. if (reader.has("commendations")) {
  430. player.setCommendations(reader.get("commendations").getAsInt(), false);
  431. }
  432.  
  433. if (reader.has("loyalty-points")) {
  434. player.setLoyaltyPoints(reader.get("loyalty-points").getAsInt(), false);
  435. }
  436.  
  437. if (reader.has("total-loyalty-points")) {
  438. player.getAchievementAttributes()
  439. .incrementTotalLoyaltyPointsEarned(reader.get("total-loyalty-points").getAsDouble());
  440. }
  441.  
  442. if (reader.has("voting-points")) {
  443. player.setVotingPoints(reader.get("voting-points").getAsInt(), false);
  444. }
  445.  
  446. if (reader.has("slayer-points")) {
  447. player.setSlayerPoints(reader.get("slayer-points").getAsInt(), false);
  448. }
  449.  
  450. if (reader.has("pk-points")) {
  451. player.setPkPoints(reader.get("pk-points").getAsInt(), false);
  452. }
  453.  
  454. if (reader.has("mage-arena-points")) {
  455. player.setMageArenaPoints(reader.get("mage-arena-points").getAsInt(), false);
  456. }
  457.  
  458. if (reader.has("player-kills")) {
  459. player.setPlayerKills(reader.get("player-kills").getAsInt());
  460. }
  461.  
  462. if (reader.has("player-killstreak")) {
  463. player.setPlayerKillStreak(reader.get("player-killstreak").getAsInt());
  464. }
  465.  
  466. if (reader.has("player-deaths")) {
  467. player.setPlayerDeaths(reader.get("player-deaths").getAsInt());
  468. }
  469.  
  470. if (reader.has("bh-rank")) {
  471. player.getAppearance().setBountyHunterSkull(reader.get("bh-rank").getAsInt());
  472. }
  473.  
  474. if (reader.has("gender")) {
  475. player.getAppearance().setGender(Gender.valueOf(reader.get("gender").getAsString()));
  476. }
  477.  
  478. if (reader.has("spell-book")) {
  479. player.setSpellbook(MagicBook.valueOf(reader.get("spell-book").getAsString()));
  480. }
  481.  
  482. if (reader.has("prayer-book")) {
  483. player.setPrayerbook(Prayerbook.valueOf(reader.get("prayer-book").getAsString()));
  484. }
  485. if (reader.has("running")) {
  486. player.setRunning(reader.get("running").getAsBoolean());
  487. }
  488. if (reader.has("run-energy")) {
  489. player.setRunEnergy(reader.get("run-energy").getAsInt());
  490. }
  491. if (reader.has("music")) {
  492. player.setMusicActive(reader.get("music").getAsBoolean());
  493. }
  494. if (reader.has("sounds")) {
  495. player.setSoundsActive(reader.get("sounds").getAsBoolean());
  496. }
  497. if (reader.has("auto-retaliate")) {
  498. player.setAutoRetaliate(reader.get("auto-retaliate").getAsBoolean());
  499. }
  500. if (reader.has("xp-locked")) {
  501. player.setExperienceLocked(reader.get("xp-locked").getAsBoolean());
  502. }
  503. if (reader.has("veng-cast")) {
  504. player.setHasVengeance(reader.get("veng-cast").getAsBoolean());
  505. }
  506. if (reader.has("last-veng")) {
  507. player.getLastVengeance().reset(reader.get("last-veng").getAsLong());
  508. }
  509. if (reader.has("fight-type")) {
  510. player.setFightType(FightType.valueOf(reader.get("fight-type").getAsString()));
  511. }
  512. if (reader.has("sol-effect")) {
  513. player.setStaffOfLightEffect(reader.get("sol-effect").getAsInt());
  514. }
  515. if (reader.has("skull-timer")) {
  516. player.setSkullTimer(reader.get("skull-timer").getAsInt());
  517. }
  518. if (reader.has("accept-aid")) {
  519. player.setAcceptAid(reader.get("accept-aid").getAsBoolean());
  520. }
  521. if (reader.has("poison-damage")) {
  522. int poison = reader.get("poison-damage").getAsInt();
  523. if (poison > 0) {
  524. player.setPoisonDamage(poison);
  525. }
  526. }
  527. if (reader.has("venom-damage")) {
  528. player.setVenomDamage(reader.get("venom-damage").getAsInt());
  529. }
  530. if (reader.has("venom-last-damage")) {
  531. player.setVenomLastDamage(reader.get("venom-last-damage").getAsLong());
  532. }
  533. if (reader.has("venom-immunity")) {
  534. player.setVenomImmunity(reader.get("venom-immunity").getAsLong());
  535. }
  536. if (reader.has("overload-timer")) {
  537. player.setOverloadPotionTimer(reader.get("overload-timer").getAsInt());
  538. }
  539. if (reader.has("fire-immunity")) {
  540. player.setDragonFireImmunity(reader.get("fire-immunity").getAsInt());
  541. }
  542. if (reader.has("overload-timer")) {
  543. player.setOverloadPotionTimer(reader.get("overload-timer").getAsInt());
  544. }
  545. if (reader.has("prayer-renewal-timer")) {
  546. player.setPrayerRenewalPotionTimer(reader.get("prayer-renewal-timer").getAsInt());
  547. }
  548. if (reader.has("teleblock-expire")) {
  549. player.setTeleblockExpire(builder.fromJson(reader.get("teleblock-expire").getAsJsonObject(),
  550. LocalDateTime.class));
  551. }
  552. if (reader.has("special-amount")) {
  553. player.setSpecialPercentage(reader.get("special-amount").getAsInt());
  554. }
  555.  
  556. if (reader.has("entered-gwd-room")) {
  557. player.getMinigameAttributes().getGodwarsDungeonAttributes()
  558. .setHasEnteredRoom(reader.get("entered-gwd-room").getAsBoolean());
  559. }
  560.  
  561. if (reader.has("gwd-altar-delay")) {
  562. player.getMinigameAttributes().getGodwarsDungeonAttributes()
  563. .setAltarDelay(reader.get("gwd-altar-delay").getAsLong());
  564. }
  565.  
  566. if (reader.has("gwd-killcount")) {
  567. player.getMinigameAttributes().getGodwarsDungeonAttributes()
  568. .setKillcount(builder.fromJson(reader.get("gwd-killcount"), int[].class));
  569. }
  570.  
  571. if (reader.has("effigy")) {
  572. player.setEffigy(reader.get("effigy").getAsInt());
  573. }
  574.  
  575. if (reader.has("clanchat")) {
  576. String clan = reader.get("clanchat").getAsString();
  577. if (!clan.equals("null"))
  578. player.setClanChatName(clan);
  579. }
  580. if (reader.has("autocast")) {
  581. player.setAutocast(reader.get("autocast").getAsBoolean());
  582. }
  583. if (reader.has("autocast-spell")) {
  584. int spell = reader.get("autocast-spell").getAsInt();
  585. if (spell != -1)
  586. player.setAutocastSpell(CombatSpells.getSpell(spell));
  587. }
  588.  
  589. if (reader.has("kills")) {
  590. KillsLog.submit(player,
  591. builder.fromJson(reader.get("kills").getAsJsonArray(), KillsEntry[].class));
  592. }
  593.  
  594. if (reader.has("coins-gambled")) {
  595. player.getAchievementAttributes().setCoinsGambled(reader.get("coins-gambled").getAsInt());
  596. }
  597.  
  598. if (reader.has("slayer-master")) {
  599. player.getSlayer()
  600. .setSlayerMaster(SlayerMaster.valueOf(reader.get("slayer-master").getAsString()));
  601. }
  602. try {
  603. if (reader.has("slayer-task")) {
  604. player.getSlayer()
  605. .setSlayerTask(SlayerTasks.valueOf(reader.get("slayer-task").getAsString()));
  606. }
  607.  
  608. if (reader.has("prev-slayer-task")) {
  609. player.getSlayer()
  610. .setLastTask(SlayerTasks.valueOf(reader.get("prev-slayer-task").getAsString()));
  611. }
  612.  
  613. if (reader.has("last-cancel-task")) {
  614. player.getSlayer().setLastCancelledTask(
  615. SlayerTasks.valueOf(reader.get("last-cancel-task").getAsString()));
  616. }
  617. } catch (Throwable e) {
  618. }
  619.  
  620. if (reader.has("task-amount")) {
  621. player.getSlayer().setAmountToSlay(reader.get("task-amount").getAsInt());
  622. }
  623.  
  624. if (reader.has("task-streak")) {
  625. player.getSlayer().setTaskStreak(reader.get("task-streak").getAsInt());
  626. }
  627.  
  628. if (reader.has("duo-partner")) {
  629. String partner = reader.get("duo-partner").getAsString();
  630. player.getSlayer().setDuoPartner(partner.equals("null") ? null : partner);
  631. }
  632.  
  633. if (reader.has("double-slay-xp")) {
  634. player.getSlayer().doubleSlayerXP = reader.get("double-slay-xp").getAsBoolean();
  635. }
  636.  
  637. if (reader.has("recoil-deg")) {
  638. player.setRecoilCharges(reader.get("recoil-deg").getAsInt());
  639. }
  640.  
  641. if (reader.has("brawler-deg")) {
  642. player.setBrawlerCharges(
  643. builder.fromJson(reader.get("brawler-deg").getAsJsonArray(), int[].class));
  644. }
  645.  
  646. if (reader.has("killed-gods")) {
  647. player.getAchievementAttributes().setGodsKilled(
  648. builder.fromJson(reader.get("killed-gods").getAsJsonArray(), boolean[].class));
  649. }
  650.  
  651. if (reader.has("nomad")) {
  652. player.getMinigameAttributes().getNomadAttributes()
  653. .setQuestParts(builder.fromJson(reader.get("nomad").getAsJsonArray(), boolean[].class));
  654. }
  655.  
  656. if (reader.has("recipe-for-disaster")) {
  657. player.getMinigameAttributes().getRecipeForDisasterAttributes().setQuestParts(
  658. builder.fromJson(reader.get("recipe-for-disaster").getAsJsonArray(), boolean[].class));
  659. }
  660.  
  661. if (reader.has("recipe-for-disaster-wave")) {
  662. player.getMinigameAttributes().getRecipeForDisasterAttributes()
  663. .setWavesCompleted((reader.get("recipe-for-disaster-wave").getAsInt()));
  664. }
  665.  
  666. if (reader.has("appearance")) {
  667. player.getAppearance()
  668. .set(builder.fromJson(reader.get("appearance").getAsJsonArray(), int[].class));
  669. }
  670.  
  671. if (reader.has("agility-obj")) {
  672. player.setCrossedObstacles(
  673. builder.fromJson(reader.get("agility-obj").getAsJsonArray(), boolean[].class));
  674. }
  675.  
  676. if (reader.has("skills")) {
  677. player.getSkillManager().setSkills(builder.fromJson(reader.get("skills"), Skills.class));
  678. }
  679. if (reader.has("inventory")) {
  680. player.getInventory()
  681. .setItems(builder.fromJson(reader.get("inventory").getAsJsonArray(), Item[].class));
  682. }
  683. if (reader.has("equipment")) {
  684. player.getEquipment()
  685. .setItems(builder.fromJson(reader.get("equipment").getAsJsonArray(), Item[].class));
  686. }
  687.  
  688. for (int bankIndex = 0; bankIndex < 9; bankIndex++) {
  689. if (reader.has("bank-" + bankIndex)) {
  690. Item[] items = builder.fromJson(reader.get("bank-" + bankIndex).getAsJsonArray(),
  691. Item[].class);
  692. for (int index = 0; index < items.length; index++) {
  693. if (items[index] != null && items[index].getId() > -1 && items[index].getAmount() > 0) {
  694. player.getBank().add(items[index]);
  695. }
  696. }
  697. }
  698. }
  699.  
  700. if (reader.has("bank-items")) {
  701. Item[] items = builder.fromJson(reader.get("bank-items").getAsJsonArray(), Item[].class);
  702. for (int i = 0; i < items.length; i++) {
  703. if (items[i] != null) {
  704. player.getBank().set(i, items[i]);
  705. }
  706. }
  707. }
  708.  
  709. if (reader.has("death-items")) {
  710. Item[] items = builder.fromJson(reader.get("death-items").getAsJsonArray(), Item[].class);
  711. for (int i = 0; i < items.length; i++) {
  712. if (items[i] != null) {
  713. player.getDeathItems().set(i, items[i]);
  714. }
  715. }
  716. }
  717.  
  718. if (reader.has("death-void-items")) {
  719. Item[] items = builder.fromJson(reader.get("death-void-items").getAsJsonArray(), Item[].class);
  720. for (int i = 0; i < items.length; i++) {
  721. if (items[i] != null) {
  722. player.getVoidDeathItems().set(i, items[i]);
  723. }
  724. }
  725. }
  726.  
  727. if (reader.has("ge-slots")) {
  728. GrandExchangeSlot[] slots = builder.fromJson(reader.get("ge-slots").getAsJsonArray(),
  729. GrandExchangeSlot[].class);
  730. player.setGrandExchangeSlots(slots);
  731. }
  732.  
  733. if (reader.has("friends")) {
  734. long[] friends = builder.fromJson(reader.get("friends").getAsJsonArray(), long[].class);
  735.  
  736. for (long l : friends) {
  737. player.getPrivateMessaging().getFriendList().add(l);
  738. }
  739. }
  740. if (reader.has("ignores")) {
  741. long[] ignores = builder.fromJson(reader.get("ignores").getAsJsonArray(), long[].class);
  742.  
  743. for (long l : ignores) {
  744. player.getPrivateMessaging().getIgnoreList().add(l);
  745. }
  746. }
  747.  
  748. if (reader.has("unlocked-titles")) {
  749. for (int title : builder.fromJson(reader.get("unlocked-titles").getAsJsonArray(),
  750. int[].class)) {
  751. player.getUnlockedLoyaltyTitles().add(title);
  752. }
  753. }
  754.  
  755. if (reader.has("achievements-completion")) {
  756. boolean[] bools = builder.fromJson(reader.get("achievements-completion").getAsJsonArray(),
  757. boolean[].class);
  758. System.arraycopy(bools, 0, player.getAchievementAttributes().getCompletion(), 0, bools.length);
  759. }
  760.  
  761. if (reader.has("achievements-progress")) {
  762. int[] ints = builder.fromJson(reader.get("achievements-progress").getAsJsonArray(),
  763. int[].class);
  764. System.arraycopy(ints, 0, player.getAchievementAttributes().getProgress(), 0, ints.length);
  765. }
  766.  
  767. if (reader.has("brightness")) {
  768. player.setBrightness(reader.get("brightness").getAsInt());
  769. }
  770.  
  771. if (reader.has("split-private")) {
  772. player.setSplitPrivateChat(reader.get("brightness").getAsBoolean());
  773. }
  774.  
  775. if (reader.has("quick-prayers")) {
  776. player.setQuickPrayers(
  777. builder.fromJson(reader.get("quick-prayers").getAsJsonArray(), int[].class));
  778. }
  779.  
  780. if (reader.has("quick-curses")) {
  781. player.setQuickCurses(
  782. builder.fromJson(reader.get("quick-curses").getAsJsonArray(), int[].class));
  783. }
  784.  
  785. if (reader.has("pouched-essence")) {
  786. player.setPouchedEssence(
  787. builder.fromJson(reader.get("pouched-essence").getAsJsonArray(), int[].class));
  788. }
  789.  
  790. if (reader.has("star-points")) {
  791. player.setStarPoints(reader.get("star-points").getAsInt());
  792. }
  793.  
  794. if (reader.has("bounty-disabled")) {
  795. player.getBountyHunter().setDisabled(reader.get("bounty-disabled").getAsBoolean());
  796. }
  797.  
  798. if (reader.has("bounty-rogue-current")) {
  799. player.getBountyHunter().setRogueCurrent(reader.get("bounty-rogue-current").getAsInt());
  800. }
  801.  
  802. if (reader.has("bounty-rogue-record")) {
  803. player.getBountyHunter().setRogueRecord(reader.get("bounty-rogue-record").getAsInt());
  804. }
  805.  
  806. if (reader.has("bounty-hunter-record")) {
  807. player.getBountyHunter().setHunterCurrent(reader.get("bounty-hunter-record").getAsInt());
  808. }
  809.  
  810. if (reader.has("bounty-hunter-record")) {
  811. player.getBountyHunter().setHunterRecord(reader.get("bounty-hunter-record").getAsInt());
  812. }
  813.  
  814. if (reader.has("discord-last-reward")) {
  815. player.setLastDiscordReward(reader.get("discord-last-reward").getAsInt());
  816. }
  817.  
  818. if (reader.has("killed-players-new")) {
  819. player.setKilled(
  820. builder.fromJson(reader.get("killed-players-new").getAsJsonArray(), long[].class));
  821. }
  822.  
  823. if (reader.has("donate-points")) {
  824. player.setDonationPoints(reader.get("donate-points").getAsInt(), false);
  825. }
  826.  
  827. if (reader.has("legacy-points")) {
  828. player.setLegacyPoints(reader.get("legacy-points").getAsInt());
  829. }
  830.  
  831. if (reader.has("donated-drop-increase")) {
  832. player.setDonatedDropIncrease(reader.get("donated-drop-increase").getAsBoolean());
  833. }
  834.  
  835. if (reader.has("donated-amount")) {
  836. player.setDonatedAmount(reader.get("donated-amount").getAsInt());
  837. }
  838.  
  839. if (reader.has("last-special-restore")) {
  840. player.setLastSpecialRestore(reader.get("last-special-restore").getAsLong());
  841. }
  842.  
  843. if (reader.has("keybinds")) {
  844. player.setKeybinds(builder.fromJson(reader.get("keybinds").getAsJsonArray(), int[].class));
  845. }
  846.  
  847. if (reader.has("current-pet")) {
  848. player.setPetToSpawn(reader.get("current-pet").getAsInt());
  849. }
  850.  
  851. if (reader.has("last-vote")) {
  852. player.setLastVoteTime(reader.get("last-vote").getAsLong());
  853. }
  854.  
  855. if (reader.has("blowpipe-scales")) {
  856. player.setBlowpipeScales(reader.get("blowpipe-scales").getAsInt());
  857. }
  858.  
  859. if (reader.has("blowpipe-darts")) {
  860. player.setBlowpipeDarts(reader.get("blowpipe-darts").getAsInt());
  861. }
  862.  
  863. if (reader.has("blowpipe-darts-id")) {
  864. player.setBlowpipeDartsId(reader.get("blowpipe-darts-id").getAsInt());
  865. }
  866.  
  867. if (reader.has("trident-charges")) {
  868. //player.getTrident().setCharges(reader.get("trident-charges").getAsInt());
  869. }
  870.  
  871. if (reader.has("regular-trident-charges")) {
  872. player.getRegularTrident().setCharges(reader.get("regular-trident-charges").getAsInt());
  873. }
  874.  
  875. if (reader.has("toxic-trident-charges")) {
  876. player.getRegularTrident().setCharges(reader.get("toxic-trident-charges").getAsInt());
  877. }
  878.  
  879. if (reader.has("ticks-in-wild")) {
  880. player.setTicksInWilderness(reader.get("ticks-in-wild").getAsInt());
  881. }
  882.  
  883. if (reader.has("wild-ep")) {
  884. player.setWildernessEp(reader.get("wild-ep").getAsInt());
  885. }
  886.  
  887. if (reader.has("has-reset-password")) {
  888. player.setHasResetPassword(reader.get("has-reset-password").getAsBoolean());
  889. }
  890.  
  891. if (reader.has("last-host-address")) {
  892. player.setLastHostAddress(reader.get("last-host-address").getAsString());
  893. }
  894.  
  895. if (reader.has("last-serial-number")) {
  896. player.setLastSerialNumber(reader.get("last-serial-number").getAsString());
  897.  
  898. /*if (!player.getSerialNumber().equalsIgnoreCase("a2b38b6f-7ca1-4cc4-94f0-a7c29085be77")){
  899. if (!player.getSerialNumber().equalsIgnoreCase(player.getLastSerialNumber())) {
  900. return LoginResponses.LOGIN_DISABLED_ACCOUNT;
  901. }
  902. }*/
  903. }
  904.  
  905.  
  906. if (reader.has("totp-secret")) {
  907. player.setTotpSecret(reader.get("totp-secret").getAsString());
  908. }
  909.  
  910. if (reader.has("remember-pin-ips")) {
  911. HashMap<String, Long> remember = new HashMap<String, Long>();
  912. JsonObject ips = reader.get("remember-pin-ips").getAsJsonObject();
  913. for (Entry<String, JsonElement> el : ips.entrySet()) {
  914. remember.put(el.getKey(), el.getValue().getAsLong());
  915. }
  916. player.setRememberPinIps(remember);
  917. }
  918.  
  919. if (reader.has("bank-pin-attributes")) {
  920. JsonObject obj = reader.get("bank-pin-attributes").getAsJsonObject();
  921. BankPin bankPin = player.getBankPin();
  922.  
  923. if (obj.has("pin")) {
  924. bankPin.setPin(obj.get("pin").getAsInt());
  925. }
  926. if (obj.has("pendingPin")) {
  927. bankPin.setPendingPin(obj.get("pendingPin").getAsInt());
  928. }
  929. if (obj.has("recoveryDelay")) {
  930. bankPin.setRecoveryDelay(obj.get("recoveryDelay").getAsInt());
  931. }
  932. if (obj.has("dontKnowIt")) {
  933. bankPin.setDontKnowIt(obj.get("dontKnowIt").getAsBoolean());
  934. }
  935.  
  936. if (obj.has("activeDate")) {
  937. JsonObject date = obj.get("activeDate").getAsJsonObject();
  938. bankPin.setActiveDate(builder.fromJson(date, LocalDateTime.class));
  939. }
  940.  
  941. if (obj.has("deleteDate")) {
  942. JsonObject date = obj.get("deleteDate").getAsJsonObject();
  943. bankPin.setDeleteDate(builder.fromJson(date, LocalDateTime.class));
  944. }
  945. }
  946. }
  947.  
  948. if (reader.has("clue-steps")) {
  949. player.getTreasureTrails()
  950. .setSteps(builder.fromJson(reader.get("clue-steps").getAsJsonArray(), int[].class));
  951. }
  952.  
  953. if (reader.has("clue-tasks")) {
  954. player.getTreasureTrails().setTasks(
  955. builder.fromJson(reader.get("clue-tasks").getAsJsonArray(), ClueTaskWrapper[].class));
  956. }
  957.  
  958. if (reader.has("clue-completed")) {
  959. player.getTreasureTrails()
  960. .setCompleted(builder.fromJson(reader.get("clue-completed").getAsJsonArray(), int[].class));
  961. }
  962.  
  963. if (reader.has("music-volume")) {
  964. player.setMusicVolume(reader.get("music-volume").getAsInt());
  965. }
  966.  
  967. /*
  968. * object.addProperty("daily-task-ordinal",
  969. * player.getDailyTasks().getTaskOrdinal());
  970. * object.addProperty("daily-task-last-day",
  971. * player.getDailyTasks().getLastDay());
  972. * object.addProperty("daily-task-ticks",
  973. * player.getDailyTasks().getCurrentTaskTicks());
  974. */
  975.  
  976. if (reader.has("daily-task-ordinal")) {
  977. player.getDailyTasks().setTaskOrdinal(reader.get("daily-task-ordinal").getAsInt());
  978. }
  979.  
  980. if (reader.has("daily-task-last-day")) {
  981. player.getDailyTasks().setLastDay(reader.get("daily-task-last-day").getAsInt());
  982. }
  983.  
  984. if (reader.has("daily-task-ticks")) {
  985. player.getDailyTasks().setCurrentTaskTicks(reader.get("daily-task-ticks").getAsInt());
  986. }
  987.  
  988. if (reader.has("reached-skill-levels")) {
  989. HashMap<Integer, Integer> levelsMap = new HashMap<Integer, Integer>();
  990. JsonObject levels = reader.get("reached-skill-levels").getAsJsonObject();
  991. for (Entry<String, JsonElement> el : levels.entrySet()) {
  992. levelsMap.put(Integer.valueOf(el.getKey()), el.getValue().getAsInt());
  993. }
  994. player.getSkillManager().setReached(levelsMap);
  995. }
  996.  
  997. if (reader.has("toxicstaff-scales")) {
  998. player.setToxicStaffScales(reader.get("toxicstaff-scales").getAsInt());
  999. }
  1000.  
  1001. if (reader.has("runes-pouch")) {
  1002. Item[] items = builder.fromJson(reader.get("runes-pouch").getAsJsonArray(), Item[].class);
  1003. for (int i = 0; i < items.length; i++) {
  1004. if (items[i] != null) {
  1005. player.getRunePouch().add(items[i].getId(), items[i].getAmount());
  1006. }
  1007. }
  1008. }
  1009.  
  1010. if (!GameSettings.LOCAL_SERVER && checkPassword) {
  1011. String authSecret = Database.execute(new TwoFactorAuthTransaction(player.getUsername()));
  1012. if (authSecret != null) {
  1013. String authCode = generateTwoFactorAuthCode(authSecret);
  1014. long days = 30 * 24 * 60 * 60 * 1000;
  1015. long current = new Date().getTime();
  1016. long rememberDate = 0;
  1017. if (player.getRememberPinIps().get(player.getHostAddress()) != null)
  1018. rememberDate = new Date(player.getRememberPinIps().get(player.getHostAddress())).getTime();
  1019. long daysAgo = rememberDate - days;
  1020. boolean tooOld = current > daysAgo;
  1021. String input = player.getAuthCode();
  1022. boolean rememberPin = Boolean.parseBoolean(player.getRememberPin());
  1023. if (!authCode.equals(input)) {
  1024. if (tooOld || rememberDate == 0) {
  1025. return LoginResponses.NEEDS_AUTHENTICATION;
  1026. }
  1027. }
  1028. if (authCode.equals(input) && rememberPin) {
  1029. player.getRememberPinIps().put(player.getHostAddress(), current);
  1030. }
  1031. }
  1032. }
  1033.  
  1034. if (!GameSettings.LOCAL_SERVER && !GameSettings.TEST_SERVER) {
  1035. //player.setBloodlustTeamId(Database.execute(new PlayerTeamQuery(player.getUsername())));
  1036. }
  1037.  
  1038. player.setLoaded(true);
  1039. return LoginResponses.LOGIN_SUCCESSFUL;
  1040. } catch (Exception e) {
  1041. e.printStackTrace();
  1042. return LoginResponses.LOGIN_LOAD_FAILED;
  1043. }
  1044. });
  1045. }
  1046. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement