Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 96.55 KB | None | 0 0
  1. package ethos.model.players;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileReader;
  8. import java.io.FileWriter;
  9. import java.io.IOException;
  10. import java.nio.file.Path;
  11. import java.nio.file.Paths;
  12. import java.util.ArrayList;
  13. import java.util.Arrays;
  14. import java.util.List;
  15. import java.util.Map;
  16. import java.util.Map.Entry;
  17.  
  18. import ethos.Config;
  19. import ethos.ServerState;
  20. import ethos.model.content.LootingBag.LootingBagItem;
  21. import ethos.model.content.Tutorial.Stage;
  22. import ethos.model.content.achievement_diary.DifficultyAchievementDiary.EntryDifficulty;
  23. import ethos.model.content.achievement_diary.ardougne.ArdougneDiaryEntry;
  24. import ethos.model.content.achievement_diary.desert.DesertDiaryEntry;
  25. import ethos.model.content.achievement_diary.falador.FaladorDiaryEntry;
  26. import ethos.model.content.achievement_diary.fremennik.FremennikDiaryEntry;
  27. import ethos.model.content.achievement_diary.kandarin.KandarinDiaryEntry;
  28. import ethos.model.content.achievement_diary.karamja.KaramjaDiaryEntry;
  29. import ethos.model.content.achievement_diary.lumbridge_draynor.LumbridgeDraynorDiaryEntry;
  30. import ethos.model.content.achievement_diary.morytania.MorytaniaDiaryEntry;
  31. import ethos.model.content.achievement_diary.varrock.VarrockDiaryEntry;
  32. import ethos.model.content.achievement_diary.western_provinces.WesternDiaryEntry;
  33. import ethos.model.content.achievement_diary.wilderness.WildernessDiaryEntry;
  34. import ethos.model.content.barrows.brothers.Brother;
  35. import ethos.model.content.dailytasks.TaskTypes;
  36. import ethos.model.content.dailytasks.DailyTasks.PossibleTasks;
  37. import ethos.model.content.kill_streaks.Killstreak;
  38. import ethos.model.content.presets.Preset;
  39. import ethos.model.content.presets.PresetContainer;
  40. import ethos.model.content.titles.Title;
  41. import ethos.model.items.GameItem;
  42. import ethos.model.items.bank.BankItem;
  43. import ethos.model.items.bank.BankTab;
  44. import ethos.model.players.mode.Mode;
  45. import ethos.model.players.mode.ModeType;
  46. import ethos.model.players.skills.farming.Farming;
  47. import ethos.model.players.skills.slayer.SlayerMaster;
  48. import ethos.model.players.skills.slayer.Task;
  49. import ethos.util.Misc;
  50. import ethos.util.log.PlayerLogging;
  51. import ethos.util.log.PlayerLogging.LogType;
  52.  
  53. import java.util.Objects;
  54. import java.util.Optional;
  55.  
  56. public class PlayerSave {
  57.  
  58. /**
  59. * Tells us whether or not the player exists for the specified name.
  60. *
  61. * @param name
  62. * @return
  63. */
  64. public static boolean playerExists(String name) {
  65. Path path = Paths.get("./data/saves/characters/", name.toLowerCase() + ".txt");
  66. File file = path.toFile();
  67. return file.exists();
  68. }
  69.  
  70. public static void addItemToFile(String name, int itemId, int itemAmount) {
  71. if (itemId < 0 || itemAmount < 0) {
  72. Misc.println("Illegal operation: Item id or item amount cannot be negative.");
  73. return;
  74. }
  75. BankItem item = new BankItem(itemId + 1, itemAmount);
  76. if (!playerExists(name)) {
  77. Misc.println("Illegal operation: Player account does not exist, validate name.");
  78. return;
  79. }
  80. if (PlayerHandler.isPlayerOn(name)) {
  81. Misc.println("Illegal operation: Attempted to modify the account of a player online.");
  82. return;
  83. }
  84. Path path = Paths.get("./data/saves/characters/", name.toLowerCase() + ".txt");
  85. File character = path.toFile();
  86. List<String> lines = new ArrayList<>();
  87. try (BufferedReader reader = new BufferedReader(new FileReader(character))) {
  88. String line;
  89. while ((line = reader.readLine()) != null) {
  90. lines.add(line);
  91. }
  92. reader.close();
  93. } catch (IOException ioe) {
  94. ioe.printStackTrace();
  95. }
  96. BankTab[] tabs = new BankTab[] { new BankTab(0), new BankTab(1), new BankTab(2), new BankTab(3), new BankTab(4),
  97. new BankTab(5), new BankTab(6), new BankTab(7), new BankTab(8), };
  98. String token, token2;
  99. String[] token3 = new String[3];
  100. int spot = 0;
  101. for (String line : lines) {
  102. if (line == null) {
  103. continue;
  104. }
  105. line = line.trim();
  106. spot = line.indexOf("=");
  107. if (spot == -1) {
  108. continue;
  109. }
  110. token = line.substring(0, spot);
  111. token = token.trim();
  112. token2 = line.substring(spot + 1);
  113. token2 = token2.trim();
  114. token3 = token2.split("\t");
  115. if (token.equals("bank-tab")) {
  116. int tabId = Integer.parseInt(token3[0]);
  117. int id = Integer.parseInt(token3[1]);
  118. int amount = Integer.parseInt(token3[2]);
  119. tabs[tabId].add(new BankItem(id, amount));
  120. }
  121. }
  122. boolean inserted = false;
  123. for (BankTab tab : tabs) {
  124. if (tab.contains(item) && tab.spaceAvailable(item)) {
  125. tab.add(item);
  126. inserted = true;
  127. break;
  128. }
  129. }
  130. if (!inserted) {
  131. for (BankTab tab : tabs) {
  132. if (tab.freeSlots() > 0) {
  133. tab.add(item);
  134. inserted = true;
  135. break;
  136. }
  137. }
  138. }
  139. if (!inserted) {
  140. Misc.println("Item could not be added to offline account, no free space in bank.");
  141. return;
  142. }
  143. int startIndex = Misc.indexOfPartialString(lines, "bank-tab");
  144. int lastIndex = Misc.lastIndexOfPartialString(lines, "bank-tab");
  145. if (lastIndex != startIndex && startIndex > 0 && lastIndex > 0) {
  146. List<String> cutout = lines.subList(startIndex, lastIndex);
  147. List<String> bankData = new ArrayList<>(lastIndex - startIndex);
  148. for (int i = 0; i < 9; i++) {
  149. for (int j = 0; j < Config.BANK_SIZE; j++) {
  150. if (j > tabs[i].size() - 1)
  151. break;
  152. BankItem bankItem = tabs[i].getItem(j);
  153. if (bankItem == null) {
  154. continue;
  155. }
  156. bankData.add("bank-tab = " + i + "\t" + bankItem.getId() + "\t" + bankItem.getAmount());
  157. }
  158. }
  159. lines.removeAll(cutout);
  160. lines.addAll(startIndex, bankData);
  161. }
  162. try (BufferedWriter writer = new BufferedWriter(new FileWriter(character))) {
  163. for (String line : lines) {
  164. writer.write(line);
  165. writer.newLine();
  166. }
  167. writer.close();
  168. } catch (IOException ioe) {
  169. ioe.printStackTrace();
  170. }
  171. }
  172.  
  173. /**
  174. * Tells us whether or not the specified name has the friend added.
  175. *
  176. * @param name
  177. * @param friend
  178. * @return
  179. */
  180. public static boolean isFriend(String name, String friend) {
  181. long nameLong = Misc.playerNameToInt64(friend);
  182. long[] friends = getFriends(name);
  183. if (friends != null && friends.length > 0) {
  184. for (int index = 0; index < friends.length; index++) {
  185. if (friends[index] == nameLong) {
  186. return true;
  187. }
  188. }
  189. }
  190. return false;
  191. }
  192.  
  193. /**
  194. * Returns a characters friends in the form of a long array.
  195. *
  196. * @param name
  197. * @return
  198. */
  199. public static long[] getFriends(String name) {
  200. String line = "";
  201. String token = "";
  202. String token2 = "";
  203. long[] readFriends = new long[200];
  204. long[] friends = null;
  205. int totalFriends = 0;
  206. int index = 0;
  207. Path path = Paths.get("./data/saves/characters/", name.toLowerCase() + ".txt");
  208. File input = path.toFile();
  209. if (!input.exists()) {
  210. return null;
  211. }
  212. try (BufferedReader reader = new BufferedReader(new FileReader(input))) {
  213. while ((line = reader.readLine()) != null) {
  214. line = line.trim();
  215. int spot = line.indexOf("=");
  216. if (spot > -1) {
  217. token = line.substring(0, spot);
  218. token = token.trim();
  219. token2 = line.substring(spot + 1);
  220. token2 = token2.trim();
  221. if (token.equals("character-friend")) {
  222. try {
  223. readFriends[index] = Long.parseLong(token2);
  224. totalFriends++;
  225. } catch (NumberFormatException nfe) {
  226. }
  227. }
  228. }
  229. }
  230. reader.close();
  231. if (totalFriends > 0) {
  232. friends = new long[totalFriends];
  233. for (int i = 0; i < totalFriends; i++) {
  234. friends[i] = readFriends[i];
  235. }
  236. return friends;
  237. }
  238. } catch (IOException ioe) {
  239. ioe.printStackTrace();
  240. }
  241. return null;
  242. }
  243.  
  244. /**
  245. * Loading
  246. **/
  247. // @SuppressWarnings("resource")
  248. public static int loadGame(Player p, String playerName, String playerPass) {
  249. String line = "";
  250. String token = "";
  251. String token2 = "";
  252. String[] token3 = new String[3];
  253. boolean EndOfFile = false;
  254. int ReadMode = 0;
  255. BufferedReader characterfile = null;
  256. boolean File1 = false;
  257. try {
  258. characterfile = new BufferedReader(new FileReader("./data/saves/characters/" + playerName.toLowerCase() + ".txt"));
  259. File1 = true;
  260. } catch (FileNotFoundException fileex1) {
  261. }
  262.  
  263. if (File1) {
  264. // new File ("./characters/"+playerName+".txt");
  265. } else {
  266. Misc.println(playerName + ": character file not found.");
  267. p.newPlayer = false;
  268. return 0;
  269. }
  270. try {
  271. line = characterfile.readLine();
  272. } catch (IOException ioexception) {
  273. Misc.println(playerName + ": error loading file.");
  274. return 3;
  275. }
  276. while (EndOfFile == false && line != null) {
  277. line = line.trim();
  278. int spot = line.indexOf("=");
  279. if (spot > -1) {
  280. token = line.substring(0, spot);
  281. token = token.trim();
  282. token2 = line.substring(spot + 1);
  283. token2 = token2.trim();
  284. token3 = token2.split("\t");
  285. switch (ReadMode) {
  286. case 1:
  287. if (token.equals("character-password")) {
  288. if (playerPass.equalsIgnoreCase(token2) || Misc.basicEncrypt(playerPass).equals(token2)
  289. || Misc.md5Hash(playerPass).equals(token2)) {
  290. playerPass = token2;
  291. } else {
  292. return 3;
  293. }
  294. }
  295. break;
  296. case 2:
  297. if (token.equals("character-height")) {
  298. p.heightLevel = Integer.parseInt(token2);
  299. } else if (token.equals("character-hp")) {
  300. p.getHealth().setAmount(Integer.parseInt(token2));
  301. if (p.getHealth().getAmount() <= 0) {
  302. p.getHealth().setAmount(10);
  303. }
  304. } else if (token.equals("character-mac-address")) {
  305. if (!p.getMacAddress().equalsIgnoreCase(token2)) {
  306. PlayerLogging.write(LogType.CHANGE_MAC_ADDRESS, p,
  307. "Mac Address Changed: previous = " + token2 + ", new = " + p.getMacAddress());
  308. }
  309. p.setMacAddress(p.getMacAddress());
  310. } else if (token.equals("character-ip-address")) {
  311. if (!p.getIpAddress().equalsIgnoreCase(token2)) {
  312. PlayerLogging.write(LogType.CHANGE_IP_ADDRESS, p,
  313. "Ip Address Changed: previous = " + token2 + ", new = " + p.getIpAddress());
  314. }
  315. p.setIpAddress(p.getIpAddress());
  316. } else if (token.equals("play-time")) {
  317. p.playTime = Integer.parseInt(token2);
  318. } else if (token.equals("last-clan")) {
  319. p.setLastClanChat(token2);
  320. } else if (token.equals("character-specRestore")) {
  321. p.specRestore = Integer.parseInt(token2);
  322. } else if (token.equals("character-posx")) {
  323. p.teleportToX = (Integer.parseInt(token2) <= 0 ? 3210 : Integer.parseInt(token2));
  324. } else if (token.equals("character-posy")) {
  325. p.teleportToY = (Integer.parseInt(token2) <= 0 ? 3424 : Integer.parseInt(token2));
  326. } else if (token.equals("character-rights")) {
  327. p.getRights().setPrimary(Right.get(Integer.parseInt(token2)));
  328. } else if (token.equals("character-rights-secondary")) { // sound like an activist group
  329. Arrays.stream(token3).forEach(right -> p.getRights().add(Right.get(Integer.parseInt(right))));
  330. } else if (token.equals("revert-option")) {
  331. p.setRevertOption(token2);
  332. } else if (token.equals("revert-delay")) {
  333. p.setRevertModeDelay(Long.parseLong(token2));
  334. } else if (token.equals("mode")) {
  335. ModeType type = null;
  336. try {
  337. if (token2.equals("NONE")) {
  338. token2 = "REGULAR";
  339. }
  340. type = Enum.valueOf(ModeType.class, token2);
  341. } catch (NullPointerException | IllegalArgumentException e) {
  342. break;
  343. }
  344. Mode mode = Mode.forType(type);
  345. p.setMode(mode);
  346. } else if (token.equals("tutorial-stage")) {
  347. Stage stage = null;
  348. try {
  349. stage = Enum.valueOf(Stage.class, token2);
  350. } catch (IllegalArgumentException | NullPointerException e) {
  351. break;
  352. }
  353. p.getTutorial().setStage(stage);
  354. } else if (token.equals("character-title-updated")) {
  355. p.getTitles().setCurrentTitle(token2);
  356. } else if (token.equals("experience-counter")) {
  357. p.setExperienceCounter(Long.parseLong(token2));
  358. } else if (token.equals("killed-players")) {
  359. if (!p.getPlayerKills().getList().contains(token2))
  360. p.getPlayerKills().getList().add(token2);
  361. } else if (token.equals("connected-from")) {
  362. p.lastConnectedFrom.add(token2);
  363. } else if (token.equals("horror-from-deep")) {
  364. p.horrorFromDeep = Integer.parseInt(token2);
  365. } else if (token.equals("run-energy")) {
  366. p.setRunEnergy(Integer.parseInt(token2));
  367. } else if (token.equals("bank-pin")) {
  368. p.getBankPin().setPin(token2);
  369. } else if (token.equals("bank-pin-cancellation")) {
  370. p.getBankPin().setAppendingCancellation(Boolean.parseBoolean(token2));
  371. } else if (token.equals("bank-pin-cancellation-delay")) {
  372. p.getBankPin().setCancellationDelay(Long.parseLong(token2));
  373. } else if (token.equals("bank-pin-unlock-delay")) {
  374. p.getBankPin().setUnlockDelay(Long.parseLong(token2));
  375. } else if (token.equals("placeholders")) {
  376. p.placeHolders = Boolean.parseBoolean(token2);
  377. } else if (token.equals("newStarter")) {
  378. p.newStarter = Boolean.parseBoolean(token2);
  379. } else if (token.equals("dailyTaskDate")) {
  380. p.dailyTaskDate = Integer.parseInt(token2);
  381. } else if (token.equals("totalDailyDone")) {
  382. p.totalDailyDone = Integer.parseInt(token2);
  383. } else if (token.equals("currentTask")) {
  384. if (token2 != null && token2.equals("") == false)
  385. p.currentTask = PossibleTasks.valueOf(token2); // Integer.parseInt(token2);
  386. } else if (token.equals("completedDailyTask")) {
  387. p.completedDailyTask = Boolean.parseBoolean(token2);
  388. } else if (token.equals("playerChoice")) {
  389. if (token2 != null && token2.equals("") == false)
  390. p.playerChoice = TaskTypes.valueOf(token2); // Integer.parseInt(token2);
  391. } else if (token.equals("dailyEnabled")) {
  392. p.dailyEnabled = Boolean.parseBoolean(token2);
  393. } else if (token.equals("show-drop-warning")) {
  394. p.setDropWarning(Boolean.parseBoolean(token2));
  395. } else if (token.equals("hourly-box-toggle")) {
  396. p.setHourlyBoxToggle(Boolean.parseBoolean(token2));
  397. } else if (token.equals("fractured-crystal-toggle")) {
  398. p.setFracturedCrystalToggle(Boolean.parseBoolean(token2));
  399. } else if (token.equals("accept-aid")) {
  400. p.acceptAid = Boolean.parseBoolean(token2);
  401. } else if (token.equals("did-you-know")) {
  402. p.didYouKnow = Boolean.parseBoolean(token2);
  403. } else if (token.equals("raidPoints")) {
  404. p.setRaidPoints(Integer.parseInt(token2));
  405. } else if (token.equals("maRound")) {
  406. p.maRound = (Integer.parseInt(token2));
  407. } else if (token.equals("raidCount")) {
  408. p.raidCount = (Integer.parseInt(token2));
  409. } else if (token.equals("lootvalue")) {
  410. p.lootValue = Integer.parseInt(token2);
  411. } else if (token.equals("startPack")) {
  412. p.startPack = Boolean.parseBoolean(token2);
  413. } else if (token.equals("crystalDrop")) {
  414. p.crystalDrop = Boolean.parseBoolean(token2);
  415. } else if (token.equals("lastLoginDate")) {
  416. p.lastLoginDate = Integer.parseInt(token2);
  417. } else if (token.equals("summonId")) {
  418. p.summonId = Integer.parseInt(token2);
  419. } else if (token.equals("has-npc")) {
  420. p.hasFollower = Boolean.parseBoolean(token2);
  421. } else if (token.equals("setPin")) {
  422. p.setPin = Boolean.parseBoolean(token2);
  423. } else if (token.equals("hasBankpin")) {
  424. p.hasBankpin = Boolean.parseBoolean(token2);
  425. } else if (token.equals("rfd-gloves")) {
  426. p.rfdGloves = Integer.parseInt(token2);
  427. } else if (token.equals("wave-id")) {
  428. p.waveId = Integer.parseInt(token2);
  429. } else if (token.equals("wave-type")) {
  430. p.waveType = Integer.parseInt(token2);
  431. } else if (token.equals("wave-info")) {
  432. for (int i = 0; i < p.waveInfo.length; i++)
  433. p.waveInfo[i] = Integer.parseInt(token3[i]);
  434. } else if (token.equals("counters")) {
  435. for (int i = 0; i < p.counters.length; i++)
  436. p.counters[i] = Integer.parseInt(token3[i]);
  437. } else if (token.equals("max-cape")) {
  438. for (int i = 0; i < p.maxCape.length; i++)
  439. p.maxCape[i] = Boolean.parseBoolean(token3[i]);
  440. } else if (token.equals("master-clue-reqs")) {
  441. for (int i = 0; i < p.masterClueRequirement.length; i++)
  442. p.masterClueRequirement[i] = Integer.parseInt(token3[i]);
  443. } else if (token.equals("quickprayer")) {
  444. for (int j = 0; j < token3.length; j++) {
  445. p.getQuick().getNormal()[j] = Boolean.parseBoolean(token3[j]);
  446. }
  447. } else if (token.equals("zulrah-best-time")) {
  448. p.setBestZulrahTime(Long.parseLong(token2));
  449. } else if (token.equals("toxic-staff")) {
  450. p.setToxicStaffOfTheDeadCharge(Integer.parseInt(token2));
  451. } else if (token.equals("toxic-pipe-ammo")) {
  452. p.setToxicBlowpipeAmmo(Integer.parseInt(token2));
  453. } else if (token.equals("toxic-pipe-amount")) {
  454. p.setToxicBlowpipeAmmoAmount(Integer.parseInt(token2));
  455. } else if (token.equals("toxic-pipe-charge")) {
  456. p.setToxicBlowpipeCharge(Integer.parseInt(token2));
  457. } else if (token.equals("serpentine-helm")) {
  458. p.setSerpentineHelmCharge(Integer.parseInt(token2));
  459. } else if (token.equals("trident-of-the-seas")) {
  460. p.setTridentCharge(Integer.parseInt(token2));
  461. } else if (token.equals("trident-of-the-swamp")) {
  462. p.setToxicTridentCharge(Integer.parseInt(token2));
  463. } else if (token.equals("arclight-charge")) {
  464. p.setArcLightCharge(Integer.parseInt(token2));
  465. } else if (token.equals("crystal-bow-shots")) {
  466. p.crystalBowArrowCount = Integer.parseInt(token2);
  467. } else if (token.equals("skull-timer")) {
  468. p.skullTimer = Integer.parseInt(token2);
  469. } else if (token.equals("magic-book")) {
  470. p.playerMagicBook = Integer.parseInt(token2);
  471. } else if (token.equals("slayer-recipe") || token.equals("slayer-helmet")) {
  472. p.getSlayer().setHelmetCreatable(Boolean.parseBoolean(token2));
  473. } else if (token.equals("slayer-imbued-helmet")) {
  474. p.getSlayer().setHelmetImbuedCreatable(Boolean.parseBoolean(token2));
  475. } else if (token.equals("bigger-boss-tasks")) {
  476. p.getSlayer().setBiggerBossTasks(Boolean.parseBoolean(token2));
  477. } else if (token.equals("cerberus-route")) {
  478. p.getSlayer().setCerberusRoute(Boolean.parseBoolean(token2));
  479. } else if (token.equals("superior-slayer")) {
  480. p.getSlayer().setBiggerAndBadder(Boolean.parseBoolean(token2));
  481. } else if (token.equals("slayer-tasks-completed")) {
  482. p.slayerTasksCompleted = Integer.parseInt(token2);
  483. } else if (token.equals("claimedReward")) {
  484. p.claimedReward = Boolean.parseBoolean(token2);
  485. } else if (p.getBarrows().getBrother(token).isPresent()) {
  486. p.getBarrows().getBrother(token).get().setDefeated(Boolean.parseBoolean(token2));
  487. } else if (token.equals("barrows-final-brother")) {
  488. p.getBarrows().setLastBrother(token2);
  489. } else if (token.equals("barrows-monsters-killcount")) {
  490. p.getBarrows().setMonstersKilled(Integer.parseInt(token2));
  491. } else if (token.equals("barrows-completed")) {
  492. p.getBarrows().setCompleted(Boolean.valueOf(token2));
  493. } else if (token.equals("special-amount")) {
  494. p.specAmount = Double.parseDouble(token2);
  495. } else if (token.equals("prayer-amount")) {
  496. p.prayerPoint = Double.parseDouble(token2);
  497. } else if (token.equals("dragonfire-shield-charge")) {
  498. p.setDragonfireShieldCharge(Integer.parseInt(token2));
  499. } else if (token.equals("pkp")) {
  500. p.pkp = Integer.parseInt(token2);
  501. } else if (token.equals("votePoints")) {
  502. p.votePoints = Integer.parseInt(token2);
  503. } else if (token.equals("bloodPoints")) {
  504. p.bloodPoints = Integer.parseInt(token2);
  505. } else if (token.equals("donP")) {
  506. p.donatorPoints = Integer.parseInt(token2);
  507. } else if (token.equals("donA")) {
  508. p.amDonated = Integer.parseInt(token2);
  509. } else if (token.equals("prestige-points")) {
  510. p.prestigePoints = Integer.parseInt(token2);
  511. } else if (token.equals("xpLock")) {
  512. p.expLock = Boolean.parseBoolean(token2);
  513. } else if (line.startsWith("KC")) {
  514. p.killcount = Integer.parseInt(token2);
  515. } else if (line.startsWith("DC")) {
  516. p.deathcount = Integer.parseInt(token2);
  517. } else if (line.startsWith("last-incentive")) {
  518. p.setLastIncentive(Long.parseLong(token2));
  519. } else if (token.equals("teleblock-length")) {
  520. p.teleBlockDelay = System.currentTimeMillis();
  521. p.teleBlockLength = Integer.parseInt(token2);
  522. } else if (token.equals("pc-points")) {
  523. p.pcPoints = Integer.parseInt(token2);
  524. } else if (token.equals("total-raids")) {
  525. p.totalRaidsFinished = Integer.parseInt(token2);
  526. } else if (token.equals("total-rogue-kills")) {
  527. p.getBH().setTotalRogueKills(Integer.parseInt(token2));
  528. } else if (token.equals("total-hunter-kills")) {
  529. p.getBH().setTotalHunterKills(Integer.parseInt(token2));
  530. } else if (token.equals("target-time-delay")) {
  531. p.getBH().setDelayedTargetTicks(Integer.parseInt(token2));
  532. } else if (token.equals("bh-penalties")) {
  533. p.getBH().setWarnings(Integer.parseInt(token2));
  534. } else if (token.equals("bh-bounties")) {
  535. p.getBH().setBounties(Integer.parseInt(token2));
  536. } else if (token.equals("statistics-visible")) {
  537. p.getBH().setStatisticsVisible(Boolean.parseBoolean(token2));
  538. } else if (token.equals("spell-accessible")) {
  539. p.getBH().setSpellAccessible(Boolean.parseBoolean(token2));
  540. } else if (token.equals("killStreak")) {
  541. p.killStreak = Integer.parseInt(token2);
  542. } else if (token.equals("achievement-points")) {
  543. p.getAchievements().setPoints(Integer.parseInt(token2));
  544. } else if (token.equals("achievement-items")) {
  545. for (int i = 0; i < token3.length; i++)
  546. p.getAchievements().setBoughtItem(i, Integer.parseInt(token3[i]));
  547. // Varrock claimed
  548. } else if (token.equals("VarrockClaimedDiaries")) {
  549. String[] claimedRaw = token2.split(",");
  550. for (String claim : claimedRaw) {
  551. EntryDifficulty.forString(claim)
  552. .ifPresent(diff -> p.getDiaryManager().getVarrockDiary().claim(diff));
  553. }
  554. } else if (token.equals("ArdougneClaimedDiaries")) {
  555. String[] claimedRaw = token2.split(",");
  556. for (String claim : claimedRaw) {
  557. EntryDifficulty.forString(claim)
  558. .ifPresent(diff -> p.getDiaryManager().getArdougneDiary().claim(diff));
  559. }
  560. } else if (token.equals("DesertClaimedDiaries")) {
  561. String[] claimedRaw = token2.split(",");
  562. for (String claim : claimedRaw) {
  563. EntryDifficulty.forString(claim)
  564. .ifPresent(diff -> p.getDiaryManager().getDesertDiary().claim(diff));
  565. }
  566. } else if (token.equals("FaladorClaimedDiaries")) {
  567. String[] claimedRaw = token2.split(",");
  568. for (String claim : claimedRaw) {
  569. EntryDifficulty.forString(claim)
  570. .ifPresent(diff -> p.getDiaryManager().getFaladorDiary().claim(diff));
  571. }
  572. } else if (token.equals("FremennikClaimedDiaries")) {
  573. String[] claimedRaw = token2.split(",");
  574. for (String claim : claimedRaw) {
  575. EntryDifficulty.forString(claim)
  576. .ifPresent(diff -> p.getDiaryManager().getFremennikDiary().claim(diff));
  577. }
  578. } else if (token.equals("KandarinClaimedDiaries")) {
  579. String[] claimedRaw = token2.split(",");
  580. for (String claim : claimedRaw) {
  581. EntryDifficulty.forString(claim)
  582. .ifPresent(diff -> p.getDiaryManager().getKandarinDiary().claim(diff));
  583. }
  584. } else if (token.equals("KaramjaClaimedDiaries")) {
  585. String[] claimedRaw = token2.split(",");
  586. for (String claim : claimedRaw) {
  587. EntryDifficulty.forString(claim)
  588. .ifPresent(diff -> p.getDiaryManager().getKaramjaDiary().claim(diff));
  589. }
  590. } else if (token.equals("LumbridgeClaimedDiaries")) {
  591. String[] claimedRaw = token2.split(",");
  592. for (String claim : claimedRaw) {
  593. EntryDifficulty.forString(claim)
  594. .ifPresent(diff -> p.getDiaryManager().getLumbridgeDraynorDiary().claim(diff));
  595. }
  596. } else if (token.equals("MorytaniaClaimedDiaries")) {
  597. String[] claimedRaw = token2.split(",");
  598. for (String claim : claimedRaw) {
  599. EntryDifficulty.forString(claim)
  600. .ifPresent(diff -> p.getDiaryManager().getMorytaniaDiary().claim(diff));
  601. }
  602. } else if (token.equals("WesternClaimedDiaries")) {
  603. String[] claimedRaw = token2.split(",");
  604. for (String claim : claimedRaw) {
  605. EntryDifficulty.forString(claim)
  606. .ifPresent(diff -> p.getDiaryManager().getWesternDiary().claim(diff));
  607. }
  608. } else if (token.equals("WildernessClaimedDiaries")) {
  609. String[] claimedRaw = token2.split(",");
  610. for (String claim : claimedRaw) {
  611. EntryDifficulty.forString(claim)
  612. .ifPresent(diff -> p.getDiaryManager().getWildernessDiary().claim(diff));
  613. }
  614. } else if (token.equals("diaries")) {
  615. try {
  616. String raw = token2;
  617. String[] components = raw.split(",");
  618. for (String comp : components) {
  619. if (comp.isEmpty()) {
  620. continue;
  621. }
  622. // Varrock
  623. Optional<VarrockDiaryEntry> varrock = VarrockDiaryEntry.fromName(comp);
  624. if (varrock.isPresent()) {
  625. p.getDiaryManager().getVarrockDiary().nonNotifyComplete(varrock.get());
  626. }
  627. // Ardougne
  628. Optional<ArdougneDiaryEntry> ardougne = ArdougneDiaryEntry.fromName(comp);
  629. if (ardougne.isPresent()) {
  630. p.getDiaryManager().getArdougneDiary().nonNotifyComplete(ardougne.get());
  631. }
  632. // Desert
  633. Optional<DesertDiaryEntry> desert = DesertDiaryEntry.fromName(comp);
  634. if (desert.isPresent()) {
  635. p.getDiaryManager().getDesertDiary().nonNotifyComplete(desert.get());
  636. }
  637. // Falador
  638. Optional<FaladorDiaryEntry> falador = FaladorDiaryEntry.fromName(comp);
  639. if (falador.isPresent()) {
  640. p.getDiaryManager().getFaladorDiary().nonNotifyComplete(falador.get());
  641. }
  642. // Fremennik
  643. Optional<FremennikDiaryEntry> fremennik = FremennikDiaryEntry.fromName(comp);
  644. if (fremennik.isPresent()) {
  645. p.getDiaryManager().getFremennikDiary().nonNotifyComplete(fremennik.get());
  646. }
  647. // Kandarin
  648. Optional<KandarinDiaryEntry> kandarin = KandarinDiaryEntry.fromName(comp);
  649. if (kandarin.isPresent()) {
  650. p.getDiaryManager().getKandarinDiary().nonNotifyComplete(kandarin.get());
  651. }
  652. // Karamja
  653. Optional<KaramjaDiaryEntry> karamja = KaramjaDiaryEntry.fromName(comp);
  654. if (karamja.isPresent()) {
  655. p.getDiaryManager().getKaramjaDiary().nonNotifyComplete(karamja.get());
  656. }
  657. // Lumbridge
  658. Optional<LumbridgeDraynorDiaryEntry> lumbridge = LumbridgeDraynorDiaryEntry
  659. .fromName(comp);
  660. if (lumbridge.isPresent()) {
  661. p.getDiaryManager().getLumbridgeDraynorDiary().nonNotifyComplete(lumbridge.get());
  662. }
  663. // Morytania
  664. Optional<MorytaniaDiaryEntry> morytania = MorytaniaDiaryEntry.fromName(comp);
  665. if (morytania.isPresent()) {
  666. p.getDiaryManager().getMorytaniaDiary().nonNotifyComplete(morytania.get());
  667. }
  668. // Western
  669. Optional<WesternDiaryEntry> western = WesternDiaryEntry.fromName(comp);
  670. if (western.isPresent()) {
  671. p.getDiaryManager().getWesternDiary().nonNotifyComplete(western.get());
  672. }
  673. // Wilderness
  674. Optional<WildernessDiaryEntry> wilderness = WildernessDiaryEntry.fromName(comp);
  675. if (wilderness.isPresent()) {
  676. p.getDiaryManager().getWildernessDiary().nonNotifyComplete(wilderness.get());
  677. }
  678. }
  679. } catch (Exception e) {
  680. e.printStackTrace();
  681. }
  682. } else if (token.equals("partialDiaries")) {
  683. String raw = token2;
  684. String[] components = raw.split(",");
  685. try {
  686. for (String comp : components) {
  687. if (comp.isEmpty()) {
  688. continue;
  689. }
  690. String[] part = comp.split(":");
  691. int stage = Integer.parseInt(part[1]);
  692. // Varrock
  693. Optional<VarrockDiaryEntry> varrock = VarrockDiaryEntry.fromName(part[0]);
  694. if (varrock.isPresent()) {
  695. p.getDiaryManager().getVarrockDiary().setAchievementStage(varrock.get(), stage,
  696. false);
  697. }
  698. // Ardougne
  699. Optional<ArdougneDiaryEntry> ardougne = ArdougneDiaryEntry.fromName(part[0]);
  700. if (ardougne.isPresent()) {
  701. p.getDiaryManager().getArdougneDiary().setAchievementStage(ardougne.get(), stage,
  702. false);
  703. }
  704. // Desert
  705. Optional<DesertDiaryEntry> desert = DesertDiaryEntry.fromName(part[0]);
  706. if (desert.isPresent()) {
  707. p.getDiaryManager().getDesertDiary().setAchievementStage(desert.get(), stage,
  708. false);
  709. }
  710. // Falador
  711. Optional<FaladorDiaryEntry> falador = FaladorDiaryEntry.fromName(part[0]);
  712. if (falador.isPresent()) {
  713. p.getDiaryManager().getFaladorDiary().setAchievementStage(falador.get(), stage,
  714. false);
  715. }
  716. // Fremennik
  717. Optional<FremennikDiaryEntry> fremennik = FremennikDiaryEntry.fromName(part[0]);
  718. if (fremennik.isPresent()) {
  719. p.getDiaryManager().getFremennikDiary().setAchievementStage(fremennik.get(), stage,
  720. false);
  721. }
  722. // Kandarin
  723. Optional<KandarinDiaryEntry> kandarin = KandarinDiaryEntry.fromName(part[0]);
  724. if (kandarin.isPresent()) {
  725. p.getDiaryManager().getKandarinDiary().setAchievementStage(kandarin.get(), stage,
  726. false);
  727. }
  728. // Karamja
  729. Optional<KaramjaDiaryEntry> karamja = KaramjaDiaryEntry.fromName(part[0]);
  730. if (karamja.isPresent()) {
  731. p.getDiaryManager().getKaramjaDiary().setAchievementStage(karamja.get(), stage,
  732. false);
  733. }
  734. // Lumbridge
  735. Optional<LumbridgeDraynorDiaryEntry> lumbridge = LumbridgeDraynorDiaryEntry
  736. .fromName(part[0]);
  737. if (lumbridge.isPresent()) {
  738. p.getDiaryManager().getLumbridgeDraynorDiary().setAchievementStage(lumbridge.get(),
  739. stage, false);
  740. }
  741. // Morytania
  742. Optional<MorytaniaDiaryEntry> morytania = MorytaniaDiaryEntry.fromName(part[0]);
  743. if (morytania.isPresent()) {
  744. p.getDiaryManager().getMorytaniaDiary().setAchievementStage(morytania.get(), stage,
  745. false);
  746. }
  747. // Western
  748. Optional<WesternDiaryEntry> western = WesternDiaryEntry.fromName(part[0]);
  749. if (western.isPresent()) {
  750. p.getDiaryManager().getWesternDiary().setAchievementStage(western.get(), stage,
  751. false);
  752. }
  753. // Wilderness
  754. Optional<WildernessDiaryEntry> wilderness = WildernessDiaryEntry.fromName(part[0]);
  755. if (wilderness.isPresent()) {
  756. p.getDiaryManager().getWildernessDiary().setAchievementStage(wilderness.get(),
  757. stage, false);
  758. }
  759. }
  760. } catch (Exception e) {
  761. e.printStackTrace();
  762. }
  763. } else if (token.equals("bonus-end")) {
  764. p.bonusXpTime = Long.parseLong(token2);
  765. } else if (token.equals("jail-end")) {
  766. p.jailEnd = Long.parseLong(token2);
  767. } else if (token.equals("mute-end")) {
  768. p.muteEnd = Long.parseLong(token2);
  769. } else if (token.equals("last-yell")) {
  770. p.lastYell = Long.parseLong(token2);
  771. } else if (token.equals("marketmute-end")) {
  772. p.marketMuteEnd = Long.parseLong(token2);
  773. } else if (token.equals("splitChat")) {
  774. p.splitChat = Boolean.parseBoolean(token2);
  775. } else if (token.equals("slayer-task")) {
  776. Optional<Task> task = SlayerMaster.get(token2);
  777. p.getSlayer().setTask(task);
  778. } else if (token.equals("slayer-master")) {
  779. p.getSlayer().setMaster(Integer.parseInt(token2));
  780. } else if (token.equals("slayerPoints")) {
  781. p.getSlayer().setPoints(Integer.parseInt(token2));
  782. } else if (token.equals("slayer-task-amount")) {
  783. p.getSlayer().setTaskAmount(Integer.parseInt(token2));
  784. } else if (token.equals("consecutive-tasks")) {
  785. p.getSlayer().setConsecutiveTasks(Integer.parseInt(token2));
  786. } else if (token.equals("mage-arena-points")) {
  787. p.setArenaPoints(Integer.parseInt(token2));
  788. } else if (token.equals("shayzien-assault-points")) {
  789. p.setShayPoints(Integer.parseInt(token2));
  790. } else if (token.equals("autoRet")) {
  791. p.autoRet = Integer.parseInt(token2);
  792. } else if (token.equals("flagged")) {
  793. p.accountFlagged = Boolean.parseBoolean(token2);
  794. } else if (token.equals("keepTitle")) {
  795. p.keepTitle = Boolean.parseBoolean(token2);
  796. } else if (token.equals("killTitle")) {
  797. p.killTitle = Boolean.parseBoolean(token2);
  798. } else if (token.equals("character-historyItems")) {
  799. for (int j = 0; j < token3.length; j++) {
  800. p.historyItems[j] = Integer.parseInt(token3[j]);
  801. p.saleItems.add(Integer.parseInt(token3[j]));
  802. }
  803. } else if (token.equals("character-historyItemsN")) {
  804. for (int j = 0; j < token3.length; j++) {
  805. p.historyItemsN[j] = Integer.parseInt(token3[j]);
  806. p.saleAmount.add(Integer.parseInt(token3[j]));
  807. }
  808. } else if (token.equals("character-historyPrice")) {
  809. for (int j = 0; j < token3.length; j++) {
  810. p.historyPrice[j] = Integer.parseInt(token3[j]);
  811. p.salePrice.add(Integer.parseInt(token3[j]));
  812. }
  813. } else if (token.equals("removed-slayer-tasks")) {
  814. if (token3.length < 4) {
  815. String[] backing = Misc.nullToEmpty(4);
  816. int index = 0;
  817. for (; index < token3.length; index++) {
  818. backing[index] = token3[index];
  819. }
  820. p.getSlayer().setRemoved(backing);
  821. } else if (token3.length == 4) {
  822. p.getSlayer().setRemoved(token3);
  823. }
  824. } else if (token.startsWith("removedTask")) {
  825. int value = Integer.parseInt(token2);
  826. if (value > -1) {
  827. p.getSlayer().setPoints(p.getSlayer().getPoints() + 100);
  828. }
  829. } else if (token.equals("wave")) {
  830. p.waveId = Integer.parseInt(token2);
  831. } else if (token.equals("void")) {
  832. for (int j = 0; j < token3.length; j++) {
  833. p.voidStatus[j] = Integer.parseInt(token3[j]);
  834. }
  835. } else if (token.equals("pouch-rune")) {
  836. for (int j = 0; j < token3.length; j++) {
  837. p.setRuneEssencePouch(j, Integer.parseInt(token3[j]));
  838. }
  839. } else if (token.equals("pouch-pure")) {
  840. for (int j = 0; j < token3.length; j++) {
  841. p.setPureEssencePouch(j, Integer.parseInt(token3[j]));
  842. }
  843. } else if (token.equals("gwkc")) {
  844. p.killCount = Integer.parseInt(token2);
  845. } else if (token.equals("fightMode")) {
  846. p.fightMode = Integer.parseInt(token2);
  847. } else if (token.equals("privatechat")) {
  848. p.setPrivateChat(Integer.parseInt(token2));
  849. } else if (token.equals("farming-poison-berry")) {
  850. p.getFarming().setLastBerryFarm(Long.parseLong(token2));
  851. } else if (token.equals("herb-patch 0")) { // Tried removing the numbers and adding a loop (didn't
  852. // work?)
  853. p.setFarmingState(0, Integer.parseInt(token3[0]));
  854. p.setFarmingSeedId(0, Integer.parseInt(token3[1]));
  855. p.setFarmingTime(0, Integer.parseInt(token3[2]));
  856. p.setOriginalFarmingTime(0, Integer.parseInt(token3[3]));
  857. p.setFarmingHarvest(0, Integer.parseInt(token3[4]));
  858. } else if (token.equals("herb-patch 1")) {
  859. p.setFarmingState(1, Integer.parseInt(token3[0]));
  860. p.setFarmingSeedId(1, Integer.parseInt(token3[1]));
  861. p.setFarmingTime(1, Integer.parseInt(token3[2]));
  862. p.setOriginalFarmingTime(1, Integer.parseInt(token3[3]));
  863. p.setFarmingHarvest(1, Integer.parseInt(token3[4]));
  864. } else if (token.equals("herb-patch 2")) {
  865. p.setFarmingState(2, Integer.parseInt(token3[0]));
  866. p.setFarmingSeedId(2, Integer.parseInt(token3[1]));
  867. p.setFarmingTime(2, Integer.parseInt(token3[2]));
  868. p.setOriginalFarmingTime(2, Integer.parseInt(token3[3]));
  869. p.setFarmingHarvest(2, Integer.parseInt(token3[4]));
  870. } else if (token.equals("herb-patch 3")) {
  871. p.setFarmingState(3, Integer.parseInt(token3[0]));
  872. p.setFarmingSeedId(3, Integer.parseInt(token3[1]));
  873. p.setFarmingTime(3, Integer.parseInt(token3[2]));
  874. p.setOriginalFarmingTime(3, Integer.parseInt(token3[3]));
  875. p.setFarmingHarvest(3, Integer.parseInt(token3[4]));
  876. } else if (token.equals("herb-patch 4")) {
  877. p.setFarmingState(4, Integer.parseInt(token3[0]));
  878. p.setFarmingSeedId(4, Integer.parseInt(token3[1]));
  879. p.setFarmingTime(4, Integer.parseInt(token3[2]));
  880. p.setOriginalFarmingTime(4, Integer.parseInt(token3[3]));
  881. p.setFarmingHarvest(4, Integer.parseInt(token3[4]));
  882. } else if (token.equals("herb-patch 5")) {
  883. p.setFarmingState(5, Integer.parseInt(token3[0]));
  884. p.setFarmingSeedId(5, Integer.parseInt(token3[1]));
  885. p.setFarmingTime(5, Integer.parseInt(token3[2]));
  886. p.setOriginalFarmingTime(5, Integer.parseInt(token3[3]));
  887. p.setFarmingHarvest(5, Integer.parseInt(token3[4]));
  888. } else if (token.equals("herb-patch 6")) {
  889. p.setFarmingState(6, Integer.parseInt(token3[0]));
  890. p.setFarmingSeedId(6, Integer.parseInt(token3[1]));
  891. p.setFarmingTime(6, Integer.parseInt(token3[2]));
  892. p.setOriginalFarmingTime(6, Integer.parseInt(token3[3]));
  893. p.setFarmingHarvest(6, Integer.parseInt(token3[4]));
  894. } else if (token.equals("herb-patch 7")) {
  895. p.setFarmingState(7, Integer.parseInt(token3[0]));
  896. p.setFarmingSeedId(7, Integer.parseInt(token3[1]));
  897. p.setFarmingTime(7, Integer.parseInt(token3[2]));
  898. p.setOriginalFarmingTime(7, Integer.parseInt(token3[3]));
  899. p.setFarmingHarvest(7, Integer.parseInt(token3[4]));
  900. } else if (token.equals("compostBin")) {
  901. p.compostBin = Integer.parseInt(token2);
  902. } else if (token.equals("halloweenOrderGiven")) {
  903. for (int i = 0; i < p.halloweenRiddleGiven.length; i++)
  904. p.halloweenRiddleGiven[i] = Integer.parseInt(token3[i]);
  905. } else if (token.equals("halloweenOrderChosen")) {
  906. for (int i = 0; i < p.halloweenRiddleChosen.length; i++)
  907. p.halloweenRiddleChosen[i] = Integer.parseInt(token3[i]);
  908. } else if (token.equals("halloweenOrderNumber")) {
  909. p.halloweenOrderNumber = Integer.parseInt(token2);
  910. } else if (token.equals("inDistrict")) {
  911. p.pkDistrict = Boolean.parseBoolean(token2);
  912. } else if (token.equals("safeBoxSlots")) {
  913. p.safeBoxSlots = Integer.parseInt(token2);
  914. } else if (token.equals("district-levels")) {
  915. for (int i = 0; i < p.playerStats.length; i++)
  916. p.playerStats[i] = Integer.parseInt(token3[i]);
  917. } else if (token.equals("lost-items")) {
  918. if (token3.length > 1) {
  919. for (int i = 0; i < token3.length; i += 2) {
  920. int itemId = Integer.parseInt(token3[i]);
  921. int itemAmount = Integer.parseInt(token3[i + 1]);
  922. p.getZulrahLostItems().add(new GameItem(itemId, itemAmount));
  923. }
  924. }
  925. } else if (token.equals("lost-items-cerberus")) {
  926. if (token3.length > 1) {
  927. for (int i = 0; i < token3.length; i += 2) {
  928. int itemId = Integer.parseInt(token3[i]);
  929. int itemAmount = Integer.parseInt(token3[i + 1]);
  930. p.getCerberusLostItems().add(new GameItem(itemId, itemAmount));
  931. }
  932. }
  933. } else if (token.equals("lost-items-skotizo")) {
  934. if (token3.length > 1) {
  935. for (int i = 0; i < token3.length; i += 2) {
  936. int itemId = Integer.parseInt(token3[i]);
  937. int itemAmount = Integer.parseInt(token3[i + 1]);
  938. p.getSkotizoLostItems().add(new GameItem(itemId, itemAmount));
  939. }
  940. }
  941. }
  942. break;
  943. case 3:
  944. if (token.equals("character-equip")) {
  945. p.playerEquipment[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  946. p.playerEquipmentN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  947. }
  948. break;
  949. case 4:
  950. if (token.equals("character-look")) {
  951. p.playerAppearance[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  952. }
  953. break;
  954. case 5:
  955. if (token.equals("character-skill")) {
  956. p.playerLevel[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  957. p.playerXP[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  958. if (token3.length > 3) {
  959. p.skillLock[Integer.parseInt(token3[0])] = Boolean.parseBoolean(token3[3]);
  960. p.prestigeLevel[Integer.parseInt(token3[0])] = Integer.parseInt(token3[4]);
  961. }
  962. }
  963. break;
  964. case 6:
  965. if (token.equals("character-item")) {
  966. p.playerItems[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  967. p.playerItemsN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  968. }
  969. break;
  970. case 46:
  971. if (token.equals("bag-item")) {
  972. int id = Integer.parseInt(token3[1]);
  973. int amt = Integer.parseInt(token3[2]);
  974. p.getLootingBag().items.add(new LootingBagItem(id, amt));
  975. }
  976. break;
  977. case 52:
  978. if (token.equals("item")) {
  979. int itemId = Integer.parseInt(token3[0]);
  980. int value = Integer.parseInt(token3[1]);
  981. String date = token3[2];
  982. p.getRechargeItems().loadItem(itemId, value, date);
  983. }
  984. break;
  985. case 55:
  986. if (token.equals("pouch-item")) {
  987. int id = Integer.parseInt(token3[1]);
  988. int amt = Integer.parseInt(token3[2]);
  989. p.getRunePouch().items.add(new LootingBagItem(id, amt));
  990. }
  991. break;
  992. case 56:
  993. if (token.equals("sack-item")) {
  994. int id = Integer.parseInt(token3[1]);
  995. int amt = Integer.parseInt(token3[2]);
  996. p.getHerbSack().items.add(new LootingBagItem(id, amt));
  997. }
  998. break;
  999. case 57:
  1000. if (token.equals("bag-item")) {
  1001. int id = Integer.parseInt(token3[1]);
  1002. int amt = Integer.parseInt(token3[2]);
  1003. p.getGemBag().items.add(new LootingBagItem(id, amt));
  1004. }
  1005. break;
  1006. case 58:
  1007. if (token.equals("safebox-item")) {
  1008. int id = Integer.parseInt(token3[1]);
  1009. int amt = Integer.parseInt(token3[2]);
  1010. p.getSafeBox().items.add(new LootingBagItem(id, amt));
  1011. }
  1012. break;
  1013. case 7:
  1014. if (token.equals("character-bank")) {
  1015. p.bankItems[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  1016. p.bankItemsN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  1017. p.getBank().getBankTab()[0]
  1018. .add(new BankItem(Integer.parseInt(token3[1]), Integer.parseInt(token3[2])));
  1019. } else if (token.equals("bank-tab")) {
  1020. int tabId = Integer.parseInt(token3[0]);
  1021. int itemId = Integer.parseInt(token3[1]);
  1022. int itemAmount = Integer.parseInt(token3[2]);
  1023. p.getBank().getBankTab()[tabId].add(new BankItem(itemId, itemAmount));
  1024. }
  1025. break;
  1026. case 8:
  1027. if (token.equals("character-friend")) {
  1028. p.getFriends().add(Long.parseLong(token3[0]));
  1029. }
  1030. break;
  1031.  
  1032. case 9:
  1033. if (token3.length < 2)
  1034. continue;
  1035. p.getAchievements().read(token, 0, Integer.parseInt(token3[0]), Boolean.parseBoolean(token3[1]));
  1036. break;
  1037. case 10:
  1038. if (token3.length < 2)
  1039. continue;
  1040. p.getAchievements().read(token, 1, Integer.parseInt(token3[0]), Boolean.parseBoolean(token3[1]));
  1041. break;
  1042. case 11:
  1043. if (token3.length < 2)
  1044. continue;
  1045. p.getAchievements().read(token, 2, Integer.parseInt(token3[0]), Boolean.parseBoolean(token3[1]));
  1046. break;
  1047. case 12:
  1048. if (token.equals("character-ignore")) {
  1049. p.getIgnores().add(Long.parseLong(token3[0]));
  1050. }
  1051. break;
  1052.  
  1053. case 13:
  1054. if (token.equals("stage")) {
  1055. p.getHolidayStages().setStage(token3[0], Integer.parseInt(token3[1]));
  1056. }
  1057. break;
  1058.  
  1059. case 14:
  1060. if (token.equals("item")) {
  1061. p.degradableItem[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  1062. } else if (token.equals("claim-state")) {
  1063. for (int i = 0; i < token3.length; i++) {
  1064. p.claimDegradableItem[i] = Boolean.parseBoolean(token3[i]);
  1065. }
  1066. }
  1067. break;
  1068.  
  1069. case 15:
  1070. if (token.startsWith("Names") && token3.length > 0) {
  1071. for (int i = 0; i < token3.length; i++) {
  1072. if (token3[i].equalsIgnoreCase("null")) {
  1073. token3[i] = "New slot";
  1074. }
  1075. Preset preset = p.getPresets().getPresets().get(i);
  1076. preset.setAlias(token3[i]);
  1077. }
  1078. } else if (token.startsWith("Inventory") || token.startsWith("Equipment")) {
  1079. if (token3.length > 2) {
  1080. int presetId = Integer.parseInt(token.split("#")[1]);
  1081. for (int i = 0; i < token3.length; i += 3) {
  1082. int slot = Integer.parseInt(token3[i]);
  1083. int itemId = Integer.parseInt(token3[i + 1]);
  1084. int amount = Integer.parseInt(token3[i + 2]);
  1085. if (token.startsWith("Inventory")) {
  1086. p.getPresets().getPresets().get(presetId).getInventory().getItems().put(slot,
  1087. new GameItem(itemId, amount));
  1088. } else {
  1089. p.getPresets().getPresets().get(presetId).getEquipment().getItems().put(slot,
  1090. new GameItem(itemId, amount));
  1091. }
  1092. }
  1093. }
  1094. }
  1095. break;
  1096.  
  1097. case 16:
  1098. try {
  1099. Killstreak.Type type = Killstreak.Type.get(token);
  1100. int value = Integer.parseInt(token2);
  1101. p.getKillstreak().getKillstreaks().put(type, value);
  1102. } catch (NullPointerException | NumberFormatException e) {
  1103. e.printStackTrace();
  1104. }
  1105. break;
  1106.  
  1107. case 17:
  1108. try {
  1109. Title title = Title.valueOf(token2);
  1110. if (title != null) {
  1111. p.getTitles().getPurchasedList().add(title);
  1112. }
  1113. } catch (Exception e) {
  1114. if (Config.SERVER_STATE == ServerState.PRIVATE) {
  1115. e.printStackTrace();
  1116. }
  1117. }
  1118. break;
  1119.  
  1120. case 18:
  1121. if (token != null && token.length() > 0) {
  1122. p.getNpcDeathTracker().getTracker().put(token, Integer.parseInt(token2));
  1123. }
  1124. break;
  1125. }
  1126. } else {
  1127. if (line.equals("[ACCOUNT]")) {
  1128. ReadMode = 1;
  1129. } else if (line.equals("[CHARACTER]")) {
  1130. ReadMode = 2;
  1131. } else if (line.equals("[EQUIPMENT]")) {
  1132. ReadMode = 3;
  1133. } else if (line.equals("[LOOK]")) {
  1134. ReadMode = 4;
  1135. } else if (line.equals("[SKILLS]")) {
  1136. ReadMode = 5;
  1137. } else if (line.equals("[ITEMS]")) {
  1138. ReadMode = 6;
  1139. } else if (line.equals("[LOOTBAG]")) {
  1140. ReadMode = 46;
  1141. } else if (line.equals("[RECHARGEITEMS]")) {
  1142. ReadMode = 52;
  1143. } else if (line.equals("[RUNEPOUCH]")) {
  1144. ReadMode = 55;
  1145. } else if (line.equals("[HERBSACK]")) {
  1146. ReadMode = 56;
  1147. } else if (line.equals("[GEMBAG]")) {
  1148. ReadMode = 57;
  1149. } else if (line.equals("[SAFEBOX]")) {
  1150. ReadMode = 58;
  1151. } else if (line.equals("[BANK]")) {
  1152. ReadMode = 7;
  1153. } else if (line.equals("[FRIENDS]")) {
  1154. ReadMode = 8;
  1155. } else if (line.equals("[ACHIEVEMENTS-TIER-1]")) {
  1156. ReadMode = 9;
  1157. } else if (line.equals("[ACHIEVEMENTS-TIER-2]")) {
  1158. ReadMode = 10;
  1159. } else if (line.equals("[ACHIEVEMENTS-TIER-3]")) {
  1160. ReadMode = 11;
  1161. } else if (line.equals("[IGNORES]")) {
  1162. ReadMode = 12;
  1163. } else if (line.equals("[HOLIDAY-EVENTS]")) {
  1164. ReadMode = 13;
  1165. } else if (line.equals("[DEGRADEABLES]")) {
  1166. ReadMode = 14;
  1167. } else if (line.equals("[PRESETS]")) {
  1168. ReadMode = 15;
  1169. } else if (line.equals("[KILLSTREAKS]")) {
  1170. ReadMode = 16;
  1171. } else if (line.equals("[TITLES]")) {
  1172. ReadMode = 17;
  1173. } else if (line.equals("[NPC-TRACKER]")) {
  1174. ReadMode = 18;
  1175. } else if (line.equals("[EOF]")) {
  1176. try {
  1177. characterfile.close();
  1178. } catch (IOException ioexception) {
  1179. if (Config.SERVER_STATE == ServerState.PRIVATE) {
  1180. ioexception.printStackTrace();
  1181. }
  1182. }
  1183. return 1;
  1184. }
  1185. }
  1186. try {
  1187. line = characterfile.readLine();
  1188. } catch (IOException ioexception1) {
  1189. EndOfFile = true;
  1190. if (Config.SERVER_STATE == ServerState.PRIVATE) {
  1191. ioexception1.printStackTrace();
  1192. }
  1193. }
  1194. }
  1195. try {
  1196. characterfile.close();
  1197. } catch (IOException ioexception) {
  1198. if (Config.SERVER_STATE == ServerState.PRIVATE) {
  1199. ioexception.printStackTrace();
  1200. }
  1201. }
  1202. return 13;
  1203. }
  1204.  
  1205. public static void save(Player p) {
  1206. saveGame(p);
  1207. }
  1208.  
  1209. /**
  1210. * Saving
  1211. **/
  1212. // @SuppressWarnings("resource")
  1213. public static boolean saveGame(Player p) {
  1214. if (!p.saveFile || p.newPlayer || !p.saveCharacter) {
  1215. // System.out.println("first");
  1216. return false;
  1217. }
  1218. if (p.playerName == null || PlayerHandler.players[p.getIndex()] == null) {
  1219. // System.out.println("second");
  1220. return false;
  1221. }
  1222. p.playerName = p.playerName2;
  1223. int tbTime = (int) (p.teleBlockDelay - System.currentTimeMillis() + p.teleBlockLength);
  1224. if (tbTime > 300000 || tbTime < 0) {
  1225. tbTime = 0;
  1226. }
  1227.  
  1228. BufferedWriter characterfile = null;
  1229. try {
  1230. characterfile = new BufferedWriter(new FileWriter(Config.CHARACTER_SAVE_DIRECTORY + p.playerName.toLowerCase() + ".txt"));
  1231.  
  1232. /* ACCOUNT */
  1233. characterfile.write("[ACCOUNT]", 0, 9);
  1234. characterfile.newLine();
  1235. characterfile.write("character-username = ", 0, 21);
  1236. characterfile.write(p.playerName, 0, p.playerName.length());
  1237. characterfile.newLine();
  1238. characterfile.write("character-password = ", 0, 21);
  1239. String passToWrite = Misc.md5Hash(p.playerPass);
  1240. characterfile.write(passToWrite, 0, passToWrite.length());
  1241. characterfile.newLine();
  1242. characterfile.newLine();
  1243.  
  1244. /* CHARACTER */
  1245. characterfile.write("[CHARACTER]", 0, 11);
  1246. characterfile.newLine();
  1247. characterfile.write("character-rights = " + p.getRights().getPrimary().getValue());
  1248. characterfile.newLine();
  1249. StringBuilder sb = new StringBuilder();
  1250. p.getRights().getSet().stream().forEach(r -> sb.append(r.getValue() + "\t"));
  1251. characterfile.write("character-rights-secondary = " + sb.substring(0, sb.length() - 1));
  1252. characterfile.newLine();
  1253. characterfile.write("character-mac-address = " + p.getMacAddress());
  1254. characterfile.newLine();
  1255. characterfile.write("character-ip-address = " + p.getIpAddress());
  1256. characterfile.newLine();
  1257. characterfile.write("revert-option = " + p.getRevertOption());
  1258. characterfile.newLine();
  1259. if (p.getRevertModeDelay() > 0) {
  1260. characterfile.write("revert-delay = " + p.getRevertModeDelay());
  1261. characterfile.newLine();
  1262. }
  1263. if (p.getMode() != null) {
  1264. characterfile.write("mode = " + p.getMode().getType().name());
  1265. characterfile.newLine();
  1266. }
  1267. if (p.getTutorial().getStage() != null) {
  1268. characterfile.write("tutorial-stage = " + p.getTutorial().getStage().name());
  1269. characterfile.newLine();
  1270. }
  1271. characterfile.write("character-height = ", 0, 19);
  1272. characterfile.write(Integer.toString(p.heightLevel), 0, Integer.toString(p.heightLevel).length());
  1273. characterfile.newLine();
  1274. characterfile.write("character-hp = " + p.getHealth().getAmount());
  1275. characterfile.newLine();
  1276. characterfile.write("play-time = ", 0, 12);
  1277. characterfile.write(Integer.toString(p.playTime), 0, Integer.toString(p.playTime).length());
  1278. characterfile.newLine();
  1279. characterfile.write("last-clan = ", 0, 12);
  1280. characterfile.write(p.getLastClanChat(), 0, p.getLastClanChat().length());
  1281. characterfile.newLine();
  1282. characterfile.write("character-specRestore = ", 0, 24);
  1283. characterfile.write(Integer.toString(p.specRestore), 0, Integer.toString(p.specRestore).length());
  1284. characterfile.newLine();
  1285. characterfile.write("character-posx = ", 0, 17);
  1286. characterfile.write(Integer.toString(p.absX), 0, Integer.toString(p.absX).length());
  1287. characterfile.newLine();
  1288. characterfile.write("character-posy = ", 0, 17);
  1289. characterfile.write(Integer.toString(p.absY), 0, Integer.toString(p.absY).length());
  1290. characterfile.newLine();
  1291. characterfile.write("bank-pin = " + p.getBankPin().getPin());
  1292. characterfile.newLine();
  1293. characterfile.write("bank-pin-cancellation = " + p.getBankPin().isAppendingCancellation());
  1294. characterfile.newLine();
  1295. characterfile.write("bank-pin-unlock-delay = " + p.getBankPin().getUnlockDelay());
  1296. characterfile.newLine();
  1297. characterfile.write("placeholders = " + p.placeHolders);
  1298. characterfile.newLine();
  1299. characterfile.write("newStarter = " + p.newStarter);
  1300. characterfile.newLine();
  1301. characterfile.write("bank-pin-cancellation-delay = " + p.getBankPin().getCancellationDelay());
  1302. characterfile.newLine();
  1303. characterfile.write("dailyTaskDate = " + p.dailyTaskDate);
  1304. characterfile.newLine();
  1305. characterfile.write("totalDailyDone = " + p.totalDailyDone);
  1306. characterfile.newLine();
  1307. characterfile.write("currentTask = ", 0, 14);
  1308. if (p.currentTask != null)
  1309. characterfile.write(p.currentTask.name(), 0, p.currentTask.name().length());
  1310. characterfile.newLine();
  1311. characterfile.write("completedDailyTask = " + p.completedDailyTask);
  1312. characterfile.newLine();
  1313. characterfile.write("playerChoice = ", 0, 15);
  1314. if (p.playerChoice != null)
  1315. characterfile.write(p.playerChoice.name(), 0, p.playerChoice.name().length());
  1316. characterfile.newLine();
  1317. characterfile.write("dailyEnabled = " + p.dailyEnabled);
  1318. characterfile.newLine();
  1319. characterfile.write("show-drop-warning = " + p.showDropWarning());
  1320. characterfile.newLine();
  1321. characterfile.write("hourly-box-toggle = " + p.getHourlyBoxToggle());
  1322. characterfile.newLine();
  1323. characterfile.write("fractured-crystal-toggle = " + p.getFracturedCrystalToggle());
  1324. characterfile.newLine();
  1325. characterfile.write("accept-aid = " + p.acceptAid);
  1326. characterfile.newLine();
  1327. characterfile.write("did-you-know = " + p.didYouKnow);
  1328. characterfile.newLine();
  1329. characterfile.write("lootvalue = " + p.lootValue);
  1330. characterfile.newLine();
  1331. characterfile.write("raidPoints = " + p.getRaidPoints());
  1332. characterfile.newLine();
  1333. characterfile.write("maRound = " + p.maRound);
  1334. characterfile.newLine();
  1335. characterfile.write("raidCount = " + p.raidCount);
  1336. characterfile.newLine();
  1337. characterfile.write("experience-counter = " + p.getExperienceCounter());
  1338. characterfile.newLine();
  1339. characterfile.write("character-title-updated = " + p.getTitles().getCurrentTitle());
  1340. characterfile.newLine();
  1341. /*
  1342. * for (int i = 0; i < p.lastConnectedFrom.size(); i++) {
  1343. * characterfile.write("connected-from = ", 0, 17);
  1344. * characterfile.write(p.lastConnectedFrom.get(i), 0,
  1345. * p.lastConnectedFrom.get(i).length()); characterfile.newLine(); }
  1346. */
  1347. for (int i = 0; i < p.getPlayerKills().getList().size(); i++) {
  1348. characterfile.write("killed-players = " + p.getPlayerKills().getList().get(i));
  1349. characterfile.newLine();
  1350. }
  1351. String[] removed = p.getSlayer().getRemoved();
  1352. characterfile.write("removed-slayer-tasks = ");
  1353. for (int index = 0; index < removed.length; index++) {
  1354. characterfile.write(removed[index]);
  1355. if (index < removed.length - 1) {
  1356. characterfile.write("\t");
  1357. }
  1358. }
  1359. characterfile.newLine();
  1360. characterfile.write("last-incentive = " + p.getLastIncentive());
  1361. characterfile.newLine();
  1362. characterfile.write("rfd-round = ", 0, 12);
  1363. characterfile.write(Integer.toString(p.rfdRound), 0, Integer.toString(p.rfdRound).length());
  1364. characterfile.newLine();
  1365. characterfile.write("run-energy = " + p.getRunEnergy());
  1366. characterfile.newLine();
  1367.  
  1368. for (int i = 0; i < p.historyItems.length; i++) {
  1369. if (p.saleItems.size() > 0)
  1370. p.historyItems[i] = p.saleItems.get(i).intValue();
  1371. }
  1372. characterfile.write("character-historyItems = ", 0, 25);
  1373. String toWrite = "";
  1374. for (int i1 = 0; i1 < p.historyItems.length; i1++) {
  1375. toWrite += p.historyItems[i1] + "\t";
  1376. }
  1377. characterfile.write(toWrite);
  1378. characterfile.newLine();
  1379. for (int i = 0; i < p.historyItemsN.length; i++) {
  1380. if (p.saleItems.size() > 0)
  1381. p.historyItemsN[i] = p.saleAmount.get(i).intValue();
  1382. }
  1383. characterfile.write("character-historyItemsN = ", 0, 26);
  1384. String toWrite2 = "";
  1385. for (int i1 = 0; i1 < p.historyItemsN.length; i1++) {
  1386. toWrite2 += p.historyItemsN[i1] + "\t";
  1387. }
  1388. characterfile.write(toWrite2);
  1389. characterfile.newLine();
  1390.  
  1391. for (int i = 0; i < p.historyPrice.length; i++) {
  1392. if (p.salePrice.size() > 0)
  1393. p.historyPrice[i] = p.salePrice.get(i).intValue();
  1394. }
  1395. characterfile.write("character-historyPrice = ", 0, 25);
  1396. String toWrite3 = "";
  1397. for (int i1 = 0; i1 < p.historyPrice.length; i1++) {
  1398. toWrite3 += p.historyPrice[i1] + "\t";
  1399. }
  1400. characterfile.write(toWrite3);
  1401. characterfile.newLine();
  1402.  
  1403. characterfile.write("lastLoginDate = ", 0, 16);
  1404. characterfile.write(Integer.toString(p.lastLoginDate), 0, Integer.toString(p.lastLoginDate).length());
  1405. characterfile.newLine();
  1406. characterfile.write("has-npc = ", 0, 10);
  1407. characterfile.write(Boolean.toString(p.hasFollower), 0, Boolean.toString(p.hasFollower).length());
  1408. characterfile.newLine();
  1409. characterfile.write("summonId = ", 0, 11);
  1410. characterfile.write(Integer.toString(p.summonId), 0, Integer.toString(p.summonId).length());
  1411. characterfile.newLine();
  1412. characterfile.write("startPack = ", 0, 12);
  1413. characterfile.write(Boolean.toString(p.startPack), 0, Boolean.toString(p.startPack).length());
  1414. characterfile.newLine();
  1415. characterfile.write("crystalDrop = ", 0, 14);
  1416. characterfile.write(Boolean.toString(p.crystalDrop), 0, Boolean.toString(p.crystalDrop).length());
  1417. characterfile.newLine();
  1418. characterfile.write("setPin = ", 0, 9);
  1419. characterfile.write(Boolean.toString(p.setPin), 0, Boolean.toString(p.setPin).length());
  1420. characterfile.newLine();
  1421. characterfile.write("slayer-helmet = " + p.getSlayer().isHelmetCreatable());
  1422. characterfile.newLine();
  1423. characterfile.write("slayer-imbued-helmet = " + p.getSlayer().isHelmetImbuedCreatable());
  1424. characterfile.newLine();
  1425. characterfile.write("bigger-boss-tasks = " + p.getSlayer().isBiggerBossTasks());
  1426. characterfile.newLine();
  1427. characterfile.write("cerberus-route = " + p.getSlayer().isCerberusRoute());
  1428. characterfile.newLine();
  1429. characterfile.write("superior-slayer = " + p.getSlayer().isBiggerAndBadder());
  1430. characterfile.newLine();
  1431. characterfile.write("slayer-tasks-completed = " + p.slayerTasksCompleted);
  1432. characterfile.newLine();
  1433. characterfile.write("claimedReward = ", 0, 16);
  1434. characterfile.write(Boolean.toString(p.claimedReward), 0, Boolean.toString(p.claimedReward).length());
  1435. characterfile.newLine();
  1436. characterfile.write("dragonfire-shield-charge = " + p.getDragonfireShieldCharge());
  1437. characterfile.newLine();
  1438. characterfile.write("rfd-gloves = " + p.rfdGloves);
  1439. characterfile.newLine();
  1440. characterfile.write("wave-id = " + p.waveId);
  1441. characterfile.newLine();
  1442. characterfile.write("wave-type = " + p.waveType);
  1443. characterfile.newLine();
  1444. characterfile.write("wave-info = " + p.waveInfo[0] + "\t" + p.waveInfo[1] + "\t" + p.waveInfo[2]);
  1445. characterfile.newLine();
  1446. characterfile.write("master-clue-reqs = " + p.masterClueRequirement[0] + "\t" + p.masterClueRequirement[1]
  1447. + "\t" + p.masterClueRequirement[2] + "\t" + p.masterClueRequirement[3]);
  1448. characterfile.newLine();
  1449. characterfile.write("counters = ");
  1450. for (int i = 0; i < p.counters.length; i++)
  1451. characterfile.write("" + p.counters[i] + ((i == p.counters.length - 1) ? "" : "\t"));
  1452. characterfile.newLine();
  1453. characterfile.write("max-cape = ");
  1454. for (int i = 0; i < p.maxCape.length; i++)
  1455. characterfile.write("" + p.maxCape[i] + ((i == p.maxCape.length - 1) ? "" : "\t"));
  1456. characterfile.newLine();
  1457. characterfile.write("zulrah-best-time = " + p.getBestZulrahTime());
  1458. characterfile.newLine();
  1459. characterfile.write("toxic-staff = " + p.getToxicStaffOfTheDeadCharge());
  1460. characterfile.newLine();
  1461. characterfile.write("toxic-pipe-ammo = " + p.getToxicBlowpipeAmmo());
  1462. characterfile.newLine();
  1463. characterfile.write("toxic-pipe-amount = " + p.getToxicBlowpipeAmmoAmount());
  1464. characterfile.newLine();
  1465. characterfile.write("toxic-pipe-charge = " + p.getToxicBlowpipeCharge());
  1466. characterfile.newLine();
  1467. characterfile.write("serpentine-helm = " + p.getSerpentineHelmCharge());
  1468. characterfile.newLine();
  1469. characterfile.write("trident-of-the-seas = " + p.getTridentCharge());
  1470. characterfile.newLine();
  1471. characterfile.write("trident-of-the-swamp = " + p.getToxicTridentCharge());
  1472. characterfile.newLine();
  1473. characterfile.write("arclight-charge = " + p.getArcLightCharge());
  1474. characterfile.newLine();
  1475. characterfile.write("slayerPoints = " + p.getSlayer().getPoints());
  1476. characterfile.newLine();
  1477. characterfile.write("crystal-bow-shots = ", 0, 20);
  1478. characterfile.write(Integer.toString(p.crystalBowArrowCount), 0,
  1479. Integer.toString(p.crystalBowArrowCount).length());
  1480. characterfile.newLine();
  1481. characterfile.write("skull-timer = ", 0, 14);
  1482. characterfile.write(Integer.toString(p.skullTimer), 0, Integer.toString(p.skullTimer).length());
  1483. characterfile.newLine();
  1484. characterfile.write("magic-book = ", 0, 13);
  1485. characterfile.write(Integer.toString(p.playerMagicBook), 0, Integer.toString(p.playerMagicBook).length());
  1486. characterfile.newLine();
  1487. for (Brother brother : p.getBarrows().getBrothers()) {
  1488. characterfile.write(brother.getName().toLowerCase() + " = " + Boolean.toString(brother.isDefeated()));
  1489. characterfile.newLine();
  1490. }
  1491. if (p.getBarrows().getLastBrother().isPresent()) {
  1492. characterfile.write("barrows-final-brother = " + p.getBarrows().getLastBrother().get().getName());
  1493. characterfile.newLine();
  1494. }
  1495. characterfile.write("barrows-monsters-killcount = " + p.getBarrows().getMonsterKillCount());
  1496. characterfile.newLine();
  1497. characterfile.write("barrows-completed = " + Boolean.toString(p.getBarrows().isCompleted()));
  1498. characterfile.newLine();
  1499. characterfile.write("special-amount = ", 0, 17);
  1500. characterfile.write(Double.toString(p.specAmount), 0, Double.toString(p.specAmount).length());
  1501. characterfile.newLine();
  1502. characterfile.write("prayer-amount = ", 0, 16);
  1503. characterfile.write(Double.toString(p.prayerPoint), 0, Double.toString(p.prayerPoint).length());
  1504. characterfile.newLine();
  1505. characterfile.write("KC = ", 0, 4);
  1506. characterfile.write(Integer.toString(p.killcount), 0, Integer.toString(p.killcount).length());
  1507. characterfile.newLine();
  1508. characterfile.write("DC = ", 0, 4);
  1509. characterfile.write(Integer.toString(p.deathcount), 0, Integer.toString(p.deathcount).length());
  1510. characterfile.newLine();
  1511. characterfile.write("total-hunter-kills = " + p.getBH().getTotalHunterKills());
  1512. characterfile.newLine();
  1513. characterfile.write("total-rogue-kills = " + p.getBH().getTotalRogueKills());
  1514. characterfile.newLine();
  1515. characterfile.write("target-time-delay = " + p.getBH().getDelayedTargetTicks());
  1516. characterfile.newLine();
  1517. characterfile.write("bh-penalties = " + p.getBH().getWarnings());
  1518. characterfile.newLine();
  1519. characterfile.write("bh-bounties = " + p.getBH().getBounties());
  1520. characterfile.newLine();
  1521. characterfile.write("statistics-visible = " + p.getBH().isStatisticsVisible());
  1522. characterfile.newLine();
  1523. characterfile.write("spell-accessible = " + p.getBH().isSpellAccessible());
  1524. characterfile.newLine();
  1525. characterfile.write("zerkAmount = ", 0, 13);
  1526. characterfile.newLine();
  1527. characterfile.write("pkp = ", 0, 6);
  1528. characterfile.write(Integer.toString(p.pkp), 0, Integer.toString(p.pkp).length());
  1529. characterfile.newLine();
  1530. characterfile.write("donP = ", 0, 6);
  1531. characterfile.write(Integer.toString(p.donatorPoints), 0, Integer.toString(p.donatorPoints).length());
  1532. characterfile.newLine();
  1533. characterfile.write("donA = ", 0, 6);
  1534. characterfile.write(Integer.toString(p.amDonated), 0, Integer.toString(p.amDonated).length());
  1535. characterfile.newLine();
  1536. characterfile.write("prestige-points = ", 0, 18);
  1537. characterfile.write(Integer.toString(p.prestigePoints), 0, Integer.toString(p.prestigePoints).length());
  1538. characterfile.newLine();
  1539. characterfile.write("votePoints = ", 0, 13);
  1540. characterfile.write(Integer.toString(p.votePoints), 0, Integer.toString(p.votePoints).length());
  1541. characterfile.newLine();
  1542. characterfile.write("bloodPoints = ", 0, 14);
  1543. characterfile.write(Integer.toString(p.bloodPoints), 0, Integer.toString(p.bloodPoints).length());
  1544. characterfile.newLine();
  1545. characterfile.write("achievement-points = " + p.getAchievements().getPoints());
  1546. characterfile.newLine();
  1547. characterfile.write("achievement-items = ");
  1548. for (int i = 0; i < p.getAchievements().getBoughtItems().length; i++)
  1549. characterfile.write("" + p.getAchievements().getBoughtItems()[i][1]
  1550. + ((i == p.getAchievements().getBoughtItems().length - 1) ? "" : "\t"));
  1551. characterfile.newLine();
  1552. characterfile.write("xpLock = ", 0, 9);
  1553. characterfile.write(Boolean.toString(p.expLock), 0, Boolean.toString(p.expLock).length());
  1554. characterfile.newLine();
  1555. characterfile.write("teleblock-length = ", 0, 19);
  1556. characterfile.write(Integer.toString(tbTime), 0, Integer.toString(tbTime).length());
  1557. characterfile.newLine();
  1558.  
  1559. // Varrock
  1560. String varrockClaimed = "VarrockClaimedDiaries = ";
  1561. characterfile.write(varrockClaimed, 0, varrockClaimed.length());
  1562. {
  1563. String prefix = "";
  1564. StringBuilder bldr = new StringBuilder();
  1565. for (EntryDifficulty entry : p.getDiaryManager().getVarrockDiary().getClaimed()) {
  1566. bldr.append(prefix);
  1567. prefix = ",";
  1568. bldr.append(entry.name());
  1569. }
  1570. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1571. }
  1572. characterfile.newLine();
  1573. // Ardougne
  1574. String ardougneClaimed = "ArdougneClaimedDiaries = ";
  1575. characterfile.write(ardougneClaimed, 0, ardougneClaimed.length());
  1576. {
  1577. String prefix = "";
  1578. StringBuilder bldr = new StringBuilder();
  1579. for (EntryDifficulty entry : p.getDiaryManager().getArdougneDiary().getClaimed()) {
  1580. bldr.append(prefix);
  1581. prefix = ",";
  1582. bldr.append(entry.name());
  1583. }
  1584. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1585. }
  1586. characterfile.newLine();
  1587. // Desert
  1588. String desertClaimed = "DesertClaimedDiaries = ";
  1589. characterfile.write(desertClaimed, 0, desertClaimed.length());
  1590. {
  1591. String prefix = "";
  1592. StringBuilder bldr = new StringBuilder();
  1593. for (EntryDifficulty entry : p.getDiaryManager().getDesertDiary().getClaimed()) {
  1594. bldr.append(prefix);
  1595. prefix = ",";
  1596. bldr.append(entry.name());
  1597. }
  1598. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1599. }
  1600. characterfile.newLine();
  1601. // Falador
  1602. String faladorClaimed = "FaladorClaimedDiaries = ";
  1603. characterfile.write(faladorClaimed, 0, faladorClaimed.length());
  1604. {
  1605. String prefix = "";
  1606. StringBuilder bldr = new StringBuilder();
  1607. for (EntryDifficulty entry : p.getDiaryManager().getFaladorDiary().getClaimed()) {
  1608. bldr.append(prefix);
  1609. prefix = ",";
  1610. bldr.append(entry.name());
  1611. }
  1612. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1613. }
  1614. characterfile.newLine();
  1615. // Fremennik
  1616. String fremennikClaimed = "FremennikClaimedDiaries = ";
  1617. characterfile.write(fremennikClaimed, 0, fremennikClaimed.length());
  1618. {
  1619. String prefix = "";
  1620. StringBuilder bldr = new StringBuilder();
  1621. for (EntryDifficulty entry : p.getDiaryManager().getFremennikDiary().getClaimed()) {
  1622. bldr.append(prefix);
  1623. prefix = ",";
  1624. bldr.append(entry.name());
  1625. }
  1626. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1627. }
  1628. characterfile.newLine();
  1629. // Kandarin
  1630. String kandarinClaimed = "KandarinClaimedDiaries = ";
  1631. characterfile.write(kandarinClaimed, 0, kandarinClaimed.length());
  1632. {
  1633. String prefix = "";
  1634. StringBuilder bldr = new StringBuilder();
  1635. for (EntryDifficulty entry : p.getDiaryManager().getKandarinDiary().getClaimed()) {
  1636. bldr.append(prefix);
  1637. prefix = ",";
  1638. bldr.append(entry.name());
  1639. }
  1640. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1641. }
  1642. characterfile.newLine();
  1643. // Karamja
  1644. String karamjaClaimed = "KaramjaClaimedDiaries = ";
  1645. characterfile.write(karamjaClaimed, 0, karamjaClaimed.length());
  1646. {
  1647. String prefix = "";
  1648. StringBuilder bldr = new StringBuilder();
  1649. for (EntryDifficulty entry : p.getDiaryManager().getKaramjaDiary().getClaimed()) {
  1650. bldr.append(prefix);
  1651. prefix = ",";
  1652. bldr.append(entry.name());
  1653. }
  1654. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1655. }
  1656. characterfile.newLine();
  1657. // Lumbridge
  1658. String lumbridgeClaimed = "LumbridgeClaimedDiaries = ";
  1659. characterfile.write(lumbridgeClaimed, 0, lumbridgeClaimed.length());
  1660. {
  1661. String prefix = "";
  1662. StringBuilder bldr = new StringBuilder();
  1663. for (EntryDifficulty entry : p.getDiaryManager().getLumbridgeDraynorDiary().getClaimed()) {
  1664. bldr.append(prefix);
  1665. prefix = ",";
  1666. bldr.append(entry.name());
  1667. }
  1668. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1669. }
  1670. characterfile.newLine();
  1671. // Morytania
  1672. String morytaniaClaimed = "MorytaniaClaimedDiaries = ";
  1673. characterfile.write(morytaniaClaimed, 0, morytaniaClaimed.length());
  1674. {
  1675. String prefix = "";
  1676. StringBuilder bldr = new StringBuilder();
  1677. for (EntryDifficulty entry : p.getDiaryManager().getMorytaniaDiary().getClaimed()) {
  1678. bldr.append(prefix);
  1679. prefix = ",";
  1680. bldr.append(entry.name());
  1681. }
  1682. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1683. }
  1684. characterfile.newLine();
  1685. // Western
  1686. String westernClaimed = "WesternClaimedDiaries = ";
  1687. characterfile.write(westernClaimed, 0, westernClaimed.length());
  1688. {
  1689. String prefix = "";
  1690. StringBuilder bldr = new StringBuilder();
  1691. for (EntryDifficulty entry : p.getDiaryManager().getWesternDiary().getClaimed()) {
  1692. bldr.append(prefix);
  1693. prefix = ",";
  1694. bldr.append(entry.name());
  1695. }
  1696. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1697. }
  1698. characterfile.newLine();
  1699. // Wilderness
  1700. String wildernessClaimed = "WildernessClaimedDiaries = ";
  1701. characterfile.write(wildernessClaimed, 0, wildernessClaimed.length());
  1702. {
  1703. String prefix = "";
  1704. StringBuilder bldr = new StringBuilder();
  1705. for (EntryDifficulty entry : p.getDiaryManager().getWildernessDiary().getClaimed()) {
  1706. bldr.append(prefix);
  1707. prefix = ",";
  1708. bldr.append(entry.name());
  1709. }
  1710. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1711. }
  1712. characterfile.newLine();
  1713.  
  1714. String diary = "diaries = ";
  1715. characterfile.write(diary, 0, diary.length());
  1716. {
  1717. String prefix = "";
  1718. StringBuilder bldr = new StringBuilder();
  1719.  
  1720. // Varrock
  1721. for (VarrockDiaryEntry entry : p.getDiaryManager().getVarrockDiary().getAchievements()) {
  1722. bldr.append(prefix);
  1723. prefix = ",";
  1724. bldr.append(entry.name());
  1725. }
  1726. // Ardougne
  1727. for (ArdougneDiaryEntry entry : p.getDiaryManager().getArdougneDiary().getAchievements()) {
  1728. bldr.append(prefix);
  1729. prefix = ",";
  1730. bldr.append(entry.name());
  1731. }
  1732. // Desert
  1733. for (DesertDiaryEntry entry : p.getDiaryManager().getDesertDiary().getAchievements()) {
  1734. bldr.append(prefix);
  1735. prefix = ",";
  1736. bldr.append(entry.name());
  1737. }
  1738. // Falador
  1739. for (FaladorDiaryEntry entry : p.getDiaryManager().getFaladorDiary().getAchievements()) {
  1740. bldr.append(prefix);
  1741. prefix = ",";
  1742. bldr.append(entry.name());
  1743. }
  1744. // Fremennik
  1745. for (FremennikDiaryEntry entry : p.getDiaryManager().getFremennikDiary().getAchievements()) {
  1746. bldr.append(prefix);
  1747. prefix = ",";
  1748. bldr.append(entry.name());
  1749. }
  1750. // Kandarin
  1751. for (KandarinDiaryEntry entry : p.getDiaryManager().getKandarinDiary().getAchievements()) {
  1752. bldr.append(prefix);
  1753. prefix = ",";
  1754. bldr.append(entry.name());
  1755. }
  1756. // Karamja
  1757. for (KaramjaDiaryEntry entry : p.getDiaryManager().getKaramjaDiary().getAchievements()) {
  1758. bldr.append(prefix);
  1759. prefix = ",";
  1760. bldr.append(entry.name());
  1761. }
  1762. // Lumbridge
  1763. for (LumbridgeDraynorDiaryEntry entry : p.getDiaryManager().getLumbridgeDraynorDiary()
  1764. .getAchievements()) {
  1765. bldr.append(prefix);
  1766. prefix = ",";
  1767. bldr.append(entry.name());
  1768. }
  1769. // Morytania
  1770. for (MorytaniaDiaryEntry entry : p.getDiaryManager().getMorytaniaDiary().getAchievements()) {
  1771. bldr.append(prefix);
  1772. prefix = ",";
  1773. bldr.append(entry.name());
  1774. }
  1775. // Western
  1776. for (WesternDiaryEntry entry : p.getDiaryManager().getWesternDiary().getAchievements()) {
  1777. bldr.append(prefix);
  1778. prefix = ",";
  1779. bldr.append(entry.name());
  1780. }
  1781. // Wilderness
  1782. for (WildernessDiaryEntry entry : p.getDiaryManager().getWildernessDiary().getAchievements()) {
  1783. bldr.append(prefix);
  1784. prefix = ",";
  1785. bldr.append(entry.name());
  1786. }
  1787. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1788. }
  1789. characterfile.newLine();
  1790.  
  1791. String partialDiary = "partialDiaries = ";
  1792. // forEachPartial
  1793. characterfile.write(partialDiary, 0, partialDiary.length()); // Saw that earlier but forgot lol, ahh ty
  1794. {
  1795. StringBuilder bldr = new StringBuilder();
  1796. String prefix = "";
  1797. // Varrock
  1798. for (Entry<VarrockDiaryEntry, Integer> keyval : p.getDiaryManager().getVarrockDiary()
  1799. .getPartialAchievements().entrySet()) {
  1800. VarrockDiaryEntry entry = keyval.getKey();
  1801. int stage = keyval.getValue();
  1802. bldr.append(prefix);
  1803. prefix = ",";
  1804. bldr.append(entry.name() + ":" + stage);
  1805. }
  1806. // Ardougne
  1807. for (Entry<ArdougneDiaryEntry, Integer> keyval : p.getDiaryManager().getArdougneDiary()
  1808. .getPartialAchievements().entrySet()) {
  1809. ArdougneDiaryEntry entry = keyval.getKey();
  1810. int stage = keyval.getValue();
  1811. bldr.append(prefix);
  1812. prefix = ",";
  1813. bldr.append(entry.name() + ":" + stage);
  1814. }
  1815. // Desert
  1816. for (Entry<DesertDiaryEntry, Integer> keyval : p.getDiaryManager().getDesertDiary()
  1817. .getPartialAchievements().entrySet()) {
  1818. DesertDiaryEntry entry = keyval.getKey();
  1819. int stage = keyval.getValue();
  1820. bldr.append(prefix);
  1821. prefix = ",";
  1822. bldr.append(entry.name() + ":" + stage);
  1823. }
  1824. // Falador
  1825. for (Entry<FaladorDiaryEntry, Integer> keyval : p.getDiaryManager().getFaladorDiary()
  1826. .getPartialAchievements().entrySet()) {
  1827. FaladorDiaryEntry entry = keyval.getKey();
  1828. int stage = keyval.getValue();
  1829. bldr.append(prefix);
  1830. prefix = ",";
  1831. bldr.append(entry.name() + ":" + stage);
  1832. }
  1833. // Fremennik
  1834. for (Entry<FremennikDiaryEntry, Integer> keyval : p.getDiaryManager().getFremennikDiary()
  1835. .getPartialAchievements().entrySet()) {
  1836. FremennikDiaryEntry entry = keyval.getKey();
  1837. int stage = keyval.getValue();
  1838. bldr.append(prefix);
  1839. prefix = ",";
  1840. bldr.append(entry.name() + ":" + stage);
  1841. }
  1842. // Kandarin
  1843. for (Entry<KandarinDiaryEntry, Integer> keyval : p.getDiaryManager().getKandarinDiary()
  1844. .getPartialAchievements().entrySet()) {
  1845. KandarinDiaryEntry entry = keyval.getKey();
  1846. int stage = keyval.getValue();
  1847. bldr.append(prefix);
  1848. prefix = ",";
  1849. bldr.append(entry.name() + ":" + stage);
  1850. }
  1851. // Karamja
  1852. for (Entry<KaramjaDiaryEntry, Integer> keyval : p.getDiaryManager().getKaramjaDiary()
  1853. .getPartialAchievements().entrySet()) {
  1854. KaramjaDiaryEntry entry = keyval.getKey();
  1855. int stage = keyval.getValue();
  1856. bldr.append(prefix);
  1857. prefix = ",";
  1858. bldr.append(entry.name() + ":" + stage);
  1859. }
  1860. // Lumbridge
  1861. for (Entry<LumbridgeDraynorDiaryEntry, Integer> keyval : p.getDiaryManager().getLumbridgeDraynorDiary()
  1862. .getPartialAchievements().entrySet()) {
  1863. LumbridgeDraynorDiaryEntry entry = keyval.getKey();
  1864. int stage = keyval.getValue();
  1865. bldr.append(prefix);
  1866. prefix = ",";
  1867. bldr.append(entry.name() + ":" + stage);
  1868. }
  1869. // Morytania
  1870. for (Entry<MorytaniaDiaryEntry, Integer> keyval : p.getDiaryManager().getMorytaniaDiary()
  1871. .getPartialAchievements().entrySet()) {
  1872. MorytaniaDiaryEntry entry = keyval.getKey();
  1873. int stage = keyval.getValue();
  1874. bldr.append(prefix);
  1875. prefix = ",";
  1876. bldr.append(entry.name() + ":" + stage);
  1877. }
  1878. // Western
  1879. for (Entry<WesternDiaryEntry, Integer> keyval : p.getDiaryManager().getWesternDiary()
  1880. .getPartialAchievements().entrySet()) {
  1881. WesternDiaryEntry entry = keyval.getKey();
  1882. int stage = keyval.getValue();
  1883. bldr.append(prefix);
  1884. prefix = ",";
  1885. bldr.append(entry.name() + ":" + stage);
  1886. }
  1887. // Wilderness
  1888. for (Entry<WildernessDiaryEntry, Integer> keyval : p.getDiaryManager().getWildernessDiary()
  1889. .getPartialAchievements().entrySet()) {
  1890. WildernessDiaryEntry entry = keyval.getKey();
  1891. int stage = keyval.getValue();
  1892. bldr.append(prefix);
  1893. prefix = ",";
  1894. bldr.append(entry.name() + ":" + stage);
  1895. }
  1896. characterfile.write(bldr.toString(), 0, bldr.toString().length());
  1897. }
  1898.  
  1899. characterfile.newLine();
  1900.  
  1901. characterfile.write("pc-points = ", 0, 12);
  1902. characterfile.write(Integer.toString(p.pcPoints), 0, Integer.toString(p.pcPoints).length());
  1903. characterfile.newLine();
  1904. characterfile.write("total-raids = ", 0, 14);
  1905. characterfile.write(Integer.toString(p.totalRaidsFinished), 0,
  1906. Integer.toString(p.totalRaidsFinished).length());
  1907. characterfile.newLine();
  1908. characterfile.write("killStreak = ", 0, 13);
  1909. characterfile.write(Integer.toString(p.killStreak), 0, Integer.toString(p.killStreak).length());
  1910. characterfile.newLine();
  1911. characterfile.write("bonus-end = ", 0, 12);
  1912. characterfile.write(Long.toString(p.bonusXpTime), 0, Long.toString(p.bonusXpTime).length());
  1913. characterfile.newLine();
  1914. characterfile.write("jail-end = ", 0, 11);
  1915. characterfile.write(Long.toString(p.jailEnd), 0, Long.toString(p.jailEnd).length());
  1916. characterfile.newLine();
  1917. characterfile.write("mute-end = ", 0, 11);
  1918. characterfile.write(Long.toString(p.muteEnd), 0, Long.toString(p.muteEnd).length());
  1919. characterfile.newLine();
  1920. characterfile.write("marketmute-end = ", 0, 17);
  1921. characterfile.write(Long.toString(p.marketMuteEnd), 0, Long.toString(p.marketMuteEnd).length());
  1922. characterfile.newLine();
  1923. characterfile.write("last-yell = " + p.lastYell);
  1924. characterfile.newLine();
  1925. characterfile.write("splitChat = ", 0, 12);
  1926. characterfile.write(Boolean.toString(p.splitChat), 0, Boolean.toString(p.splitChat).length());
  1927. characterfile.newLine();
  1928. if (p.getSlayer().getTask().isPresent()) {
  1929. Task task = p.getSlayer().getTask().get();
  1930. characterfile.write("slayer-task = " + task.getPrimaryName());
  1931. characterfile.newLine();
  1932. characterfile.write("slayer-task-amount = " + p.getSlayer().getTaskAmount());
  1933. characterfile.newLine();
  1934. }
  1935. characterfile.write("slayer-master = " + p.getSlayer().getMaster());
  1936. characterfile.newLine();
  1937. characterfile.write("consecutive-tasks = " + p.getSlayer().getConsecutiveTasks());
  1938. characterfile.newLine();
  1939. characterfile.write("mage-arena-points = " + p.getArenaPoints());
  1940. characterfile.newLine();
  1941. characterfile.write("shayzien-assault-points = " + p.getShayPoints());
  1942. characterfile.newLine();
  1943. characterfile.write("autoRet = ", 0, 10);
  1944. characterfile.write(Integer.toString(p.autoRet), 0, Integer.toString(p.autoRet).length());
  1945. characterfile.newLine();
  1946. characterfile.write("flagged = ", 0, 10);
  1947. characterfile.write(Boolean.toString(p.accountFlagged), 0, Boolean.toString(p.accountFlagged).length());
  1948. characterfile.newLine();
  1949. characterfile.write("keepTitle = ", 0, 12);
  1950. characterfile.write(Boolean.toString(p.keepTitle), 0, Boolean.toString(p.keepTitle).length());
  1951. characterfile.newLine();
  1952. characterfile.write("killTitle = ", 0, 12);
  1953. characterfile.write(Boolean.toString(p.killTitle), 0, Boolean.toString(p.killTitle).length());
  1954. characterfile.newLine();
  1955. characterfile.write("wave = ", 0, 7);
  1956. characterfile.write(Integer.toString(p.waveId), 0, Integer.toString(p.waveId).length());
  1957. characterfile.newLine();
  1958. characterfile.write("gwkc = ", 0, 7);
  1959. characterfile.write(Integer.toString(p.killCount), 0, Integer.toString(p.killCount).length());
  1960. characterfile.newLine();
  1961. characterfile.write("fightMode = ", 0, 12);
  1962. characterfile.write(Integer.toString(p.fightMode), 0, Integer.toString(p.fightMode).length());
  1963. characterfile.newLine();
  1964. characterfile.write("privatechat = ", 0, 14);
  1965. characterfile.write(Integer.toString(p.getPrivateChat()), 0, Integer.toString(p.getPrivateChat()).length());
  1966. characterfile.newLine();
  1967. characterfile.write("void = ", 0, 7);
  1968. String toWrite55 = p.voidStatus[0] + "\t" + p.voidStatus[1] + "\t" + p.voidStatus[2] + "\t"
  1969. + p.voidStatus[3] + "\t" + p.voidStatus[4];
  1970. characterfile.write(toWrite55);
  1971. characterfile.newLine();
  1972. characterfile.write("quickprayer = ", 0, 14);
  1973. String quick = "";
  1974. for (int i = 0; i < p.getQuick().getNormal().length; i++) {
  1975. quick += p.getQuick().getNormal()[i] + "\t";
  1976. }
  1977. characterfile.write(quick);
  1978. characterfile.newLine();
  1979. characterfile.write("pouch-rune = " + p.getRuneEssencePouch(0) + "\t" + p.getRuneEssencePouch(1) + "\t"
  1980. + p.getRuneEssencePouch(2));
  1981. characterfile.newLine();
  1982. characterfile.write("pouch-pure = " + p.getPureEssencePouch(0) + "\t" + p.getPureEssencePouch(1) + "\t"
  1983. + p.getPureEssencePouch(2));
  1984. characterfile.newLine();
  1985. characterfile.write("crabsKilled = ", 0, 14);
  1986. characterfile.write(Integer.toString(p.crabsKilled), 0, Integer.toString(p.crabsKilled).length());
  1987. characterfile.newLine();
  1988. characterfile.write("farming-poison-berry = " + p.getFarming().getLastBerryFarm());
  1989. characterfile.newLine();
  1990. for (int i = 0; i < Farming.MAX_PATCHES; i++) {
  1991. characterfile.write("herb-patch " + i + " = " + p.getFarmingState(i) + "\t" + p.getFarmingSeedId(i)
  1992. + "\t" + p.getFarmingTime(i) + "\t" + p.getOriginalFarmingTime(i) + "\t"
  1993. + p.getFarmingHarvest(i));
  1994. characterfile.newLine();
  1995. }
  1996. characterfile.write("compostBin = " + p.compostBin);
  1997. characterfile.newLine();
  1998. characterfile.write("halloweenOrderGiven = ");
  1999. for (int i = 0; i < p.halloweenRiddleGiven.length; i++)
  2000. characterfile
  2001. .write("" + p.halloweenRiddleGiven[i] + ((i == p.halloweenRiddleGiven.length - 1) ? "" : "\t"));
  2002. characterfile.newLine();
  2003. characterfile.write("halloweenOrderChosen = ");
  2004. for (int i = 0; i < p.halloweenRiddleChosen.length; i++)
  2005. characterfile.write(
  2006. "" + p.halloweenRiddleChosen[i] + ((i == p.halloweenRiddleChosen.length - 1) ? "" : "\t"));
  2007. characterfile.newLine();
  2008. characterfile.write("halloweenOrderNumber = ", 0, 23);
  2009. characterfile.write(Integer.toString(p.halloweenOrderNumber), 0,
  2010. Integer.toString(p.halloweenOrderNumber).length());
  2011. characterfile.newLine();
  2012. characterfile.write("district-levels = ");
  2013. for (int i = 0; i < p.playerStats.length; i++)
  2014. characterfile.write("" + p.playerStats[i] + ((i == p.playerStats.length - 1) ? "" : "\t"));
  2015. characterfile.newLine();
  2016. characterfile.write("inDistrict = ", 0, 13);
  2017. characterfile.write(Boolean.toString(p.pkDistrict), 0, Boolean.toString(p.pkDistrict).length());
  2018. characterfile.newLine();
  2019. characterfile.write("safeBoxSlots = ", 0, 15);
  2020. characterfile.write(Integer.toString(p.safeBoxSlots), 0, Integer.toString(p.safeBoxSlots).length());
  2021. characterfile.newLine();
  2022. characterfile.write("lost-items = ");
  2023. for (GameItem item : p.getZulrahLostItems()) {
  2024. if (item == null) {
  2025. continue;
  2026. }
  2027. characterfile.write(item.getId() + "\t" + item.getAmount() + "\t");
  2028. }
  2029. characterfile.newLine();
  2030. characterfile.write("lost-items-cerberus = ");
  2031. for (GameItem item : p.getCerberusLostItems()) {
  2032. if (item == null) {
  2033. continue;
  2034. }
  2035. characterfile.write(item.getId() + "\t" + item.getAmount() + "\t");
  2036. }
  2037. characterfile.newLine();
  2038. characterfile.write("lost-items-skotizo = ");
  2039. for (GameItem item : p.getSkotizoLostItems()) {
  2040. if (item == null) {
  2041. continue;
  2042. }
  2043. characterfile.write(item.getId() + "\t" + item.getAmount() + "\t");
  2044. }
  2045. characterfile.newLine();
  2046. characterfile.newLine();
  2047.  
  2048. /* EQUIPMENT */
  2049. characterfile.write("[EQUIPMENT]", 0, 11);
  2050. characterfile.newLine();
  2051. for (int i = 0; i < p.playerEquipment.length; i++) {
  2052. characterfile.write("character-equip = ", 0, 18);
  2053. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2054. characterfile.write(" ", 0, 1);
  2055. characterfile.write(Integer.toString(p.playerEquipment[i]), 0,
  2056. Integer.toString(p.playerEquipment[i]).length());
  2057. characterfile.write(" ", 0, 1);
  2058. characterfile.write(Integer.toString(p.playerEquipmentN[i]), 0,
  2059. Integer.toString(p.playerEquipmentN[i]).length());
  2060. characterfile.write(" ", 0, 1);
  2061. characterfile.newLine();
  2062. }
  2063. characterfile.newLine();
  2064.  
  2065. /* LOOK */
  2066. characterfile.write("[LOOK]", 0, 6);
  2067. characterfile.newLine();
  2068. for (int i = 0; i < p.playerAppearance.length; i++) {
  2069. characterfile.write("character-look = ", 0, 17);
  2070. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2071. characterfile.write(" ", 0, 1);
  2072. characterfile.write(Integer.toString(p.playerAppearance[i]), 0,
  2073. Integer.toString(p.playerAppearance[i]).length());
  2074. characterfile.newLine();
  2075. }
  2076. characterfile.newLine();
  2077.  
  2078. /* SKILLS */
  2079. characterfile.write("[SKILLS]", 0, 8);
  2080. characterfile.newLine();
  2081. for (int i = 0; i < p.playerLevel.length; i++) {
  2082. characterfile.write("character-skill = ", 0, 18);
  2083. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2084. characterfile.write(" ", 0, 1);
  2085. characterfile.write(Integer.toString(p.playerLevel[i]), 0, Integer.toString(p.playerLevel[i]).length());
  2086. characterfile.write(" ", 0, 1);
  2087. characterfile.write(Integer.toString(p.playerXP[i]), 0, Integer.toString(p.playerXP[i]).length());
  2088. characterfile.write(" ", 0, 1);
  2089. characterfile.write(Boolean.toString(p.skillLock[i]), 0, Boolean.toString(p.skillLock[i]).length());
  2090. characterfile.write(" ", 0, 1);
  2091. characterfile.write(Integer.toString(p.prestigeLevel[i]), 0,
  2092. Integer.toString(p.prestigeLevel[i]).length());
  2093. characterfile.newLine();
  2094. }
  2095. characterfile.newLine();
  2096.  
  2097. /* ITEMS */
  2098. characterfile.write("[ITEMS]", 0, 7);
  2099. characterfile.newLine();
  2100. for (int i = 0; i < p.playerItems.length; i++) {
  2101. if (p.playerItems[i] > 0) {
  2102. characterfile.write("character-item = ", 0, 17);
  2103. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2104. characterfile.write(" ", 0, 1);
  2105. characterfile.write(Integer.toString(p.playerItems[i]), 0,
  2106. Integer.toString(p.playerItems[i]).length());
  2107. characterfile.write(" ", 0, 1);
  2108. characterfile.write(Integer.toString(p.playerItemsN[i]), 0,
  2109. Integer.toString(p.playerItemsN[i]).length());
  2110. characterfile.newLine();
  2111. }
  2112. }
  2113. characterfile.newLine();
  2114.  
  2115. /* ITEMVALUES */
  2116. characterfile.write("[RECHARGEITEMS]", 0, 15);
  2117. characterfile.newLine();
  2118. for (int itemId : p.getRechargeItems().getItemValues().keySet()) {
  2119. int value = p.getRechargeItems().getChargesLeft(itemId);
  2120.  
  2121. String itemIdString = Integer.toString(itemId);
  2122. String valueString = Integer.toString(value);
  2123. String lastUsed = p.getRechargeItems().getItemLastUsed(itemId);
  2124.  
  2125. characterfile.write("item = ", 0, 7);
  2126. characterfile.write(" ", 0, 1);
  2127. characterfile.write(itemIdString, 0, itemIdString.length());
  2128. characterfile.write(" ", 0, 1);
  2129. characterfile.write(valueString, 0, valueString.length());
  2130. characterfile.write(" ", 0, 1);
  2131. characterfile.write(lastUsed, 0, lastUsed.length());
  2132. characterfile.newLine();
  2133. }
  2134. characterfile.newLine();
  2135.  
  2136. /* BANK */
  2137. characterfile.write("[BANK]", 0, 6);
  2138. characterfile.newLine();
  2139. for (int i = 0; i < 9; i++) {
  2140. for (int j = 0; j < Config.BANK_SIZE; j++) {
  2141. if (j > p.getBank().getBankTab()[i].size() - 1)
  2142. break;
  2143. BankItem item = p.getBank().getBankTab()[i].getItem(j);
  2144. if (item == null) {
  2145. continue;
  2146. }
  2147.  
  2148. characterfile.write("bank-tab = " + i + "\t" + item.getId() + "\t" + item.getAmount());
  2149. characterfile.newLine();
  2150. }
  2151. }
  2152.  
  2153. characterfile.newLine();
  2154. characterfile.newLine();
  2155.  
  2156. /* LOOTBAG */
  2157. characterfile.write("[LOOTBAG]", 0, 9);
  2158. characterfile.newLine();
  2159. for (int i = 0; i < p.getLootingBag().items.size(); i++) {
  2160. if (p.getLootingBag().items.get(i).getId() > 0) {
  2161. characterfile.write("bag-item = ", 0, 11);
  2162. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2163. characterfile.write(" ", 0, 1);
  2164. int id = p.getLootingBag().items.get(i).getId();
  2165. int amt = p.getLootingBag().items.get(i).getAmount();
  2166. characterfile.write(Integer.toString(id), 0, Integer.toString(id).length());
  2167. characterfile.write(" ", 0, 1);
  2168. characterfile.write(Integer.toString(amt), 0, Integer.toString(amt).length());
  2169. characterfile.newLine();
  2170. }
  2171. }
  2172. characterfile.newLine();
  2173.  
  2174. /* RUNEPOUCH */
  2175. characterfile.write("[RUNEPOUCH]", 0, 11);
  2176. characterfile.newLine();
  2177. for (int i = 0; i < p.getRunePouch().items.size(); i++) {
  2178. if (p.getRunePouch().items.get(i).getId() > 0) {
  2179. characterfile.write("pouch-item = ", 0, 13);
  2180. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2181. characterfile.write(" ", 0, 1);
  2182. int id = p.getRunePouch().items.get(i).getId();
  2183. int amt = p.getRunePouch().items.get(i).getAmount();
  2184. characterfile.write(Integer.toString(id), 0, Integer.toString(id).length());
  2185. characterfile.write(" ", 0, 1);
  2186. characterfile.write(Integer.toString(amt), 0, Integer.toString(amt).length());
  2187. characterfile.newLine();
  2188. }
  2189. }
  2190. characterfile.newLine();
  2191.  
  2192. /* HERBSACK */
  2193. characterfile.write("[HERBSACK]", 0, 10);
  2194. characterfile.newLine();
  2195. for (int i = 0; i < p.getHerbSack().items.size(); i++) {
  2196. if (p.getHerbSack().items.get(i).getId() > 0) {
  2197. characterfile.write("sack-item = ", 0, 12);
  2198. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2199. characterfile.write(" ", 0, 1);
  2200. int id = p.getHerbSack().items.get(i).getId();
  2201. int amt = p.getHerbSack().items.get(i).getAmount();
  2202. characterfile.write(Integer.toString(id), 0, Integer.toString(id).length());
  2203. characterfile.write(" ", 0, 1);
  2204. characterfile.write(Integer.toString(amt), 0, Integer.toString(amt).length());
  2205. characterfile.newLine();
  2206. }
  2207. }
  2208. characterfile.newLine();
  2209.  
  2210. /* GEMBAG */
  2211. characterfile.write("[GEMBAG]", 0, 8);
  2212. characterfile.newLine();
  2213. for (int i = 0; i < p.getGemBag().items.size(); i++) {
  2214. if (p.getGemBag().items.get(i).getId() > 0) {
  2215. characterfile.write("bag-item = ", 0, 11);
  2216. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2217. characterfile.write(" ", 0, 1);
  2218. int id = p.getGemBag().items.get(i).getId();
  2219. int amt = p.getGemBag().items.get(i).getAmount();
  2220. characterfile.write(Integer.toString(id), 0, Integer.toString(id).length());
  2221. characterfile.write(" ", 0, 1);
  2222. characterfile.write(Integer.toString(amt), 0, Integer.toString(amt).length());
  2223. characterfile.newLine();
  2224. }
  2225. }
  2226. characterfile.newLine();
  2227.  
  2228. /* SAFEBOX */
  2229. characterfile.write("[SAFEBOX]", 0, 9);
  2230. characterfile.newLine();
  2231. for (int i = 0; i < p.getSafeBox().items.size(); i++) {
  2232. if (p.getSafeBox().items.get(i).getId() > 0) {
  2233. characterfile.write("safebox-item = ", 0, 15);
  2234. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  2235. characterfile.write(" ", 0, 1);
  2236. int id = p.getSafeBox().items.get(i).getId();
  2237. int amt = p.getSafeBox().items.get(i).getAmount();
  2238. characterfile.write(Integer.toString(id), 0, Integer.toString(id).length());
  2239. characterfile.write(" ", 0, 1);
  2240. characterfile.write(Integer.toString(amt), 0, Integer.toString(amt).length());
  2241. characterfile.newLine();
  2242. }
  2243. }
  2244. characterfile.newLine();
  2245.  
  2246. /* FRIENDS */
  2247. characterfile.write("[FRIENDS]", 0, 9);
  2248. characterfile.newLine();
  2249. for (Long friend : p.getFriends().getFriends()) {
  2250. characterfile.write("character-friend = ", 0, 19);
  2251. characterfile.write(Long.toString(friend), 0, Long.toString(friend).length());
  2252. characterfile.newLine();
  2253. }
  2254. characterfile.newLine();
  2255.  
  2256. characterfile.newLine();
  2257. characterfile.write("[HOLIDAY-EVENTS]");
  2258. characterfile.newLine();
  2259. for (Entry<String, Integer> entry : p.getHolidayStages().getStages().entrySet()) {
  2260. String key = entry.getKey();
  2261. int value = entry.getValue();
  2262. if (Objects.isNull(key)) {
  2263. continue;
  2264. }
  2265. characterfile.write("stage = " + key + "\t" + value);
  2266. characterfile.newLine();
  2267. }
  2268. characterfile.newLine();
  2269.  
  2270. characterfile.write("[DEGRADEABLES]");
  2271. characterfile.newLine();
  2272. characterfile.write("claim-state = ");
  2273. for (int i = 0; i < p.claimDegradableItem.length; i++) {
  2274. characterfile.write(Boolean.toString(p.claimDegradableItem[i]));
  2275. if (i != p.claimDegradableItem.length - 1) {
  2276. characterfile.write("\t");
  2277. }
  2278. }
  2279. characterfile.newLine();
  2280. for (int i = 0; i < p.degradableItem.length; i++) {
  2281. if (p.degradableItem[i] > 0) {
  2282. characterfile.write("item = " + i + "\t" + p.degradableItem[i]);
  2283. characterfile.newLine();
  2284. }
  2285. }
  2286. characterfile.newLine();
  2287.  
  2288. characterfile.newLine();
  2289. characterfile.write("[ACHIEVEMENTS-TIER-1]");
  2290. characterfile.newLine();
  2291. p.getAchievements().print(characterfile, 0);
  2292. characterfile.newLine();
  2293.  
  2294. characterfile.newLine();
  2295. characterfile.write("[ACHIEVEMENTS-TIER-2]");
  2296. characterfile.newLine();
  2297. p.getAchievements().print(characterfile, 1);
  2298. characterfile.newLine();
  2299.  
  2300. characterfile.newLine();
  2301. characterfile.write("[ACHIEVEMENTS-TIER-3]");
  2302. characterfile.newLine();
  2303. p.getAchievements().print(characterfile, 2);
  2304. characterfile.newLine();
  2305.  
  2306. /* IGNORES */
  2307. characterfile.write("[IGNORES]", 0, 9);
  2308. characterfile.newLine();
  2309. for (Long ignore : p.getIgnores().getIgnores()) {
  2310. characterfile.write("character-ignore = ", 0, 19);
  2311. characterfile.write(Long.toString(ignore), 0, Long.toString(ignore).length());
  2312. characterfile.newLine();
  2313. }
  2314. characterfile.newLine();
  2315.  
  2316. characterfile.write("[PRESETS]");
  2317. characterfile.newLine();
  2318.  
  2319. characterfile.write("Names = ");
  2320. Map<Integer, Preset> presets = p.getPresets().getPresets();
  2321. for (Entry<Integer, Preset> entry : presets.entrySet()) {
  2322. characterfile.write(entry.getValue().getAlias() + "\t");
  2323. }
  2324. characterfile.newLine();
  2325. for (Entry<Integer, Preset> entry : presets.entrySet()) {
  2326. if (entry != null) {
  2327. Preset preset = entry.getValue();
  2328. PresetContainer inventory = preset.getInventory();
  2329. characterfile.write("Inventory#" + entry.getKey() + " = ");
  2330. for (Entry<Integer, GameItem> item : inventory.getItems().entrySet()) {
  2331. characterfile.write(item.getKey() + "\t" + item.getValue().getId() + "\t"
  2332. + item.getValue().getAmount() + "\t");
  2333. }
  2334. characterfile.newLine();
  2335. PresetContainer equipment = preset.getEquipment();
  2336. characterfile.write("Equipment#" + entry.getKey() + " = ");
  2337. for (Entry<Integer, GameItem> item : equipment.getItems().entrySet()) {
  2338. characterfile.write(item.getKey() + "\t" + item.getValue().getId() + "\t"
  2339. + item.getValue().getAmount() + "\t");
  2340. }
  2341. characterfile.newLine();
  2342. }
  2343. }
  2344. characterfile.newLine();
  2345.  
  2346. characterfile.write("[KILLSTREAKS]");
  2347. characterfile.newLine();
  2348. for (Entry<Killstreak.Type, Integer> entry : p.getKillstreak().getKillstreaks().entrySet()) {
  2349. characterfile.write(entry.getKey().name() + " = " + entry.getValue());
  2350. characterfile.newLine();
  2351. }
  2352. characterfile.newLine();
  2353.  
  2354. characterfile.write("[TITLES]");
  2355. characterfile.newLine();
  2356. for (Title title : p.getTitles().getPurchasedList()) {
  2357. characterfile.write("title = " + title.name());
  2358. characterfile.newLine();
  2359. }
  2360. characterfile.newLine();
  2361.  
  2362. characterfile.write("[NPC-TRACKER]");
  2363. characterfile.newLine();
  2364. for (Entry<String, Integer> entry : p.getNpcDeathTracker().getTracker().entrySet()) {
  2365. if (entry != null) {
  2366. if (entry.getValue() > 0) {
  2367. characterfile.write(entry.getKey().toString() + " = " + entry.getValue());
  2368. characterfile.newLine();
  2369. }
  2370. }
  2371. }
  2372. characterfile.newLine();
  2373.  
  2374. characterfile.write("[EOF]", 0, 5);
  2375. characterfile.newLine();
  2376. characterfile.newLine();
  2377. characterfile.close();
  2378. } catch (IOException ioexception) {
  2379. Misc.println(p.playerName + ": error writing file.");
  2380. if (Config.SERVER_STATE == ServerState.PRIVATE) {
  2381. ioexception.printStackTrace();
  2382. }
  2383. return false;
  2384. }
  2385. return true;
  2386. }
  2387.  
  2388. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement