Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.astrect.rs2.saving;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.IOException;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.nio.file.Paths;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import com.astrect.AstrectConstants;
- import com.astrect.rs2.commands.Command;
- import com.astrect.rs2.commands.CommandHandler;
- import com.astrect.rs2.model.Location;
- import com.astrect.rs2.model.item.Item;
- import com.astrect.rs2.model.players.DonatorStatus;
- import com.astrect.rs2.model.players.PkStatus;
- import com.astrect.rs2.model.players.Player;
- import com.astrect.rs2.model.players.PlayerRights;
- import com.astrect.rs2.util.TextUtils;
- public class PlayerSaving
- {
- /**
- * The saving directory.
- */
- public static final File CHARACTER_FILE_DIRECTORY = new File(System.getProperty("user.home"), ""+AstrectConstants.SERVER_NAME+"-data/users/");
- /**
- * The buffer size used for saving and loading.
- */
- public static final int BUFFER_SIZE = 1024;
- /**
- * The single thread work service used for queued saving.
- */
- private final ExecutorService saveThread = Executors.newSingleThreadExecutor();
- /**
- * The PlayerSaving singleton.
- */
- private final static PlayerSaving singleton = new PlayerSaving();
- public static void saveGame(Player player) {
- String username = player.getName();
- Path path = Paths.get(CHARACTER_FILE_DIRECTORY + File.separator + username.charAt(0) + "/", username + ".txt");
- if (Files.notExists(path)) {
- try {
- Files.createDirectories(path.getParent());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- try (BufferedWriter writer = Files.newBufferedWriter(path)) {
- writer.write("PLAYER_INFO"); writer.newLine();
- writer.write("username = " + username); writer.newLine();
- writer.write("password = " + player.getPassword()); writer.newLine();
- writer.write("ip-address = " + player.getFullIP()); writer.newLine();
- writer.write("rights = " + player.getRights().toString()); writer.newLine();
- writer.write("donator-rights = " + player.getDonatorStatus().toString()); writer.newLine();
- writer.write("location = " + player.getLocation().getX() + "\t" + player.getLocation().getY() + "\t" + player.getLocation().getZ()); writer.newLine();
- writer.write("PLAYER_POINTS"); writer.newLine();
- writer.write("donator-points = " + player.getPoints().getDonatorPoints()); writer.newLine();
- writer.write("total-donated = " + player.getPoints().getDonatorPointsBought()); writer.newLine();
- writer.write("killcount = " + player.getKillCount()); writer.newLine();
- writer.write("death-count = " + player.getDeathCount()); writer.newLine();
- writer.write("pk-points = " + player.getPoints().getPkPoints()); writer.newLine();
- writer.write("bounty-points = " + player.getPoints().getBountyPoints()); writer.newLine();
- writer.write("loyalty-points = " + player.getPoints().getLoyaltyPoints()); writer.newLine();
- writer.write("vote-points = " + player.getPoints().getVotingPoints()); writer.newLine();
- writer.write("PLAYER_MISC"); writer.newLine();
- writer.write("godwars-kills = " + player.godWarsKillCount[0] + "\t" + player.godWarsKillCount[1] + "\t" + player.godWarsKillCount[2] + "\t" + player.godWarsKillCount[3]); writer.newLine();
- writer.write("attack-type = " + player.getCombatEntity().getAtkType()); writer.newLine();
- writer.write("clan-chat = " + player.getAttribute().getString("clan_chat_name")); writer.newLine();
- writer.write("player-diced = " + player.getDiced()); writer.newLine();
- writer.write("earning-potential = " + player.earningPotential); writer.newLine();
- writer.write("energy = " + player.getAttribute().getInt("ENERGY")); writer.newLine();
- writer.write("fight-caves-wave = " + player.fightCavesWave); writer.newLine();
- writer.write("exp-lock = " + player.xpLock); writer.newLine();
- writer.write("bounty-hunting = " + player.isBountyHunting()); writer.newLine();
- writer.write("skull-timer = " + player.getSkullTimer()); writer.newLine();
- writer.write("special-energy = " + player.getSpecBar().getAmount()); writer.newLine();
- writer.write("slayer-task = " + player.slayerTask); writer.newLine();
- writer.write("slayer-amount = " + player.slayerAm); writer.newLine();
- writer.write("pk-status = " + player.getPkStatus().name()); writer.newLine();
- writer.write("magic-book = " + player.getSpellBook().toInteger()); writer.newLine();
- writer.write("prayer-book = " + player.getPrayers().isDefaultPrayerbook());
- writer.write("last-voted = " + player.getLastVoted()); writer.newLine();
- writer.write("new-character = " + player.isNew()); writer.newLine();
- writer.write("PLAYER_APPEARANCE"); writer.newLine();
- for (int i = 0; i < player.getAppearance().getLook().length; i++) {
- writer.write("character-look = " + i + "\t" + player.getAppearance().getLook()[i]);
- writer.newLine();
- }
- writer.newLine();
- writer.write("PLAYER_INVENTORY"); writer.newLine();
- for (int i = 0; i < player.getInventory().toArray().length; i++) {
- Item item = player.getInventory().toArray()[i];
- if (item != null) {
- writer.write("inventory-slot = " + i + "\t" + item.getId() + "\t" + item.getCount());
- writer.newLine();
- }
- }
- writer.newLine();
- writer.write("PLAYER_EQUIPMENT");
- writer.newLine();
- for (int i = 0; i < player.getEquipment().toArray().length; i++) {
- Item item = player.getEquipment().toArray()[i];
- writer.write("equip-slot = " + i + "\t" + item.getId() + "\t" + item.getCount());
- writer.newLine();
- }
- writer.newLine();
- writer.write("PLAYER_BANK");
- writer.newLine();
- for (int i = 0; i < player.getBank().toArray().length; i++) {
- Item item = player.getBank().toArray()[i];
- if (item != null) {
- writer.write("bank-slot = " + i + "\t" + item.getId() + "\t" + item.getCount());
- writer.newLine();
- }
- }
- writer.newLine();
- writer.write("PLAYER_CUSTOM_EQUIPMENT");
- writer.newLine();
- for (int i = 0; i < player.getCustomEquipment().toArray().length; i++) {
- Item item = player.getCustomEquipment().toArray()[i];
- if (item != null) {
- writer.write("custom-equip-slot = " + i + "\t" + item.getId() + "\t" + item.getCount());
- writer.newLine();
- }
- }
- writer.newLine();
- writer.write("PLAYER_FRIENDS"); writer.newLine();
- for (int i = 0; i < player.getFriends().toArray().length; i++) {
- if (player.getFriends().toArray()[i] > 0) {
- writer.write("character-friend = ");
- writer.write(Integer.toString(i));
- writer.write("\t");
- writer.write(Long.toString(player.getFriends().toArray()[i]));
- writer.newLine();
- }
- }
- writer.newLine();
- /*
- * Dont add anything after this
- */
- writer.write("[EOF]");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- private static final int PLAYER_DETAILS = 0, PLAYER_POINTS = 1, PLAYER_MISC = 2, PLAYER_INVENTORY = 3, PLAYER_EQUIPMENT = 4, PLAYER_BANK = 5, PLAYER_CUSTOM_EQUIPMENT = 6, PLAYER_APPEARANCE = 7, PLAYER_SKILLS = 8, PLAYER_FRIENDS = 9;
- public static boolean loadGame(Player player, String password) {
- String username = player.getName();
- Path path = Paths.get(CHARACTER_FILE_DIRECTORY + File.separator + username.charAt(0) + "/", username + ".txt");
- if (Files.notExists(path)) {
- return false;
- }
- try (BufferedReader reader = Files.newBufferedReader(path)) {
- String line;
- int mode = 0;
- while ((line = reader.readLine()) != null) {
- line = line.trim();
- int spot = line.indexOf("=");
- if (spot > -1) {
- String key = line.substring(0, spot).trim();
- String dataValue = line.substring(spot + 1).trim();
- String[] dataValues = dataValue.split("\t");
- switch (mode) {
- case PLAYER_DETAILS:
- switch (key) {
- case "password":
- if (!password.equalsIgnoreCase(dataValue)) {
- return false;
- }
- break;
- case "rights":
- PlayerRights rights = PlayerRights.PLAYER;
- try {
- rights = PlayerRights.valueOf(dataValue);
- } catch (Exception e) {
- }
- player.setRights(rights);
- break;
- case "donator-rights":
- DonatorStatus donator = DonatorStatus.NON_DONATOR;
- try {
- donator = DonatorStatus.valueOf(dataValue);
- } catch (Exception e) {
- }
- player.setDonatorStatus(donator);
- break;
- case "location":
- int x = Integer.parseInt(dataValues[0]);
- int y = Integer.parseInt(dataValues[1]);
- int z = Integer.parseInt(dataValues[2]);
- player.setLocation(Location.create(x, y, z));
- break;
- }
- case PLAYER_POINTS:
- switch (key) {
- case "donator-points":
- player.getPoints().setDonatorPoints(Integer.parseInt(dataValue));
- break;
- case "total-donated":
- player.getPoints().setDonatorsBought(Integer.parseInt(dataValue));
- break;
- case "killcount":
- player.setKillCount(Integer.parseInt(dataValue));
- break;
- case "death-count":
- player.setDeathCount(Integer.parseInt(dataValue));
- break;
- case "pk-points":
- player.getPoints().setPkPoints(Integer.parseInt(dataValue));
- break;
- case "bounty-points":
- player.getPoints().setBountyPoints(Integer.parseInt(dataValue));
- break;
- case "loyalty-points":
- player.getPoints().setLoyaltyPoints(Integer.parseInt(dataValue));
- break;
- case "vote-points":
- player.getPoints().setVotingPoints(Integer.parseInt(dataValue));
- break;
- }
- case PLAYER_MISC:
- switch (key) {
- case "godwars-kills":
- for (int i = 0; i < dataValues.length; i++) {
- player.godWarsKillCount[i] = Integer.parseInt(dataValues[i]);
- }
- break;
- case "attack-type":
- player.getCombatEntity().setAtkType(Integer.parseInt(dataValue));
- break;
- case "clan-chat":
- player.getAttribute().put("clan_chat_name", dataValue);
- break;
- case "player-diced":
- player.setDiced(Integer.parseInt(dataValue));
- break;
- case "earning-potential":
- player.earningPotential = Integer.parseInt(dataValue);
- break;
- case "energy":
- player.getAttribute().put("ENERGY", Integer.parseInt(dataValue));
- break;
- case "fight-caves-wave":
- player.fightCavesWave = Integer.parseInt(dataValue);
- break;
- case "exp-lock":
- player.xpLock = Boolean.parseBoolean(dataValue);
- break;
- case "bounty-hunting":
- player.setBountyHunting(Boolean.parseBoolean(dataValue));
- break;
- case "skull-timer":
- player.setSkullTimer(Integer.parseInt(dataValue));
- break;
- case "special-energy":
- player.getSpecBar().setAmount(Integer.parseInt(dataValue));
- break;
- case "slayer-task":
- player.slayerTask = Integer.parseInt(dataValue);
- break;
- case "slayer-amount":
- player.slayerAm = Integer.parseInt(dataValue);
- break;
- case "pk-status":
- player.setStatus(PkStatus.valueOf(dataValue));
- break;
- case "magic-book":
- player.getSpellBook().changeSpellBook(Integer.parseInt(dataValue));
- break;
- case "prayer-book":
- player.getPrayers().setPrayerbook(Boolean.parseBoolean(dataValue));
- break;
- case "last-voted":
- player.setLastVoted(Long.parseLong(dataValue));
- break;
- case "new-character":
- player.newCharacter = Boolean.parseBoolean(dataValue);
- break;
- }
- break;
- case PLAYER_APPEARANCE:
- if (key.equals("character-look")) {
- player.getAppearance().getLook()[Integer.parseInt(dataValues[0])] = Integer.parseInt(dataValues[1]);
- }
- break;
- case PLAYER_SKILLS:
- if (key.equals("character-skill")) {
- final int level = Integer.parseInt(dataValues[1]);
- double experience = Double.parseDouble(dataValues[2]);
- if (experience < 0) {
- experience = 0;
- } else if (experience > 200000000) {
- experience = 200000000;
- }
- player.getSkills().setLevel(Integer.parseInt(dataValues[0]), level);
- player.getSkills().setExperience(Integer.parseInt(dataValues[0]), (int) experience);
- }
- break;
- case PLAYER_INVENTORY:
- if (key.equals("inventory-slot")) {
- int index = Integer.parseInt(dataValues[0]);
- int id = Integer.parseInt(dataValues[1]);
- int amount = Integer.parseInt(dataValues[2]);
- player.getInventory().add(new Item(id, amount), index);
- }
- break;
- case PLAYER_EQUIPMENT:
- if (key.equals("equip-slot")) {
- int index = Integer.parseInt(dataValues[0]);
- int item = Integer.parseInt(dataValues[1]);
- int amount = Integer.parseInt(dataValues[2]);
- player.getEquipment().set(index, new Item(item, amount));
- }
- break;
- case PLAYER_BANK:
- if (key.equals("bank-slot")) {
- int index = Integer.parseInt(dataValues[0]);
- int id = Integer.parseInt(dataValues[1]);
- int amount = Integer.parseInt(dataValues[2]);
- player.getBank().add(new Item(id, amount), index);
- }
- break;
- case PLAYER_CUSTOM_EQUIPMENT:
- if (key.equals("custom-equip-slot")) {
- int index = Integer.parseInt(dataValues[0]);
- int id = Integer.parseInt(dataValues[1]);
- int amount = Integer.parseInt(dataValues[2]);
- player.getCustomEquipment().add(new Item(id, amount), index);
- }
- break;
- case PLAYER_FRIENDS:
- if (key.equals("character-friend")) {
- player.getFriends().toArray()[Integer.parseInt(dataValues[0])] = Long.parseLong(dataValues[1]);
- }
- break;
- }
- } else {
- if (line.equals("PLAYER_DETAILS")) {
- mode = PLAYER_DETAILS;
- } else if (line.equals("PLAYER_POINTS")) {
- mode = PLAYER_POINTS;
- } else if (line.equals("PLAYER_MISC")) {
- mode = PLAYER_MISC;
- } else if (line.equals("PLAYER_EQUIPMENT")) {
- mode = PLAYER_EQUIPMENT;
- } else if (line.equals("PLAYER_APPEARANCE")) {
- mode = PLAYER_APPEARANCE;
- } else if (line.equals("PLAYER_SKILLS")) {
- mode = PLAYER_SKILLS;
- } else if (line.equals("PLAYER_INVENTORY")) {
- mode = PLAYER_INVENTORY;
- } else if (line.equals("PLAYER_BANK")) {
- mode = PLAYER_BANK;
- } else if (line.equals("CUSTOM_EQUIPMENT")) {
- mode = PLAYER_CUSTOM_EQUIPMENT;
- } else if (line.equals("FRIENDS")) {
- mode = PLAYER_FRIENDS;
- }else if (line.equals("[EOF]")) {
- try {
- reader.close();
- return true;
- } catch (IOException ignored) {
- }
- }
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return true;
- }
- /**
- * @param player
- * @param message
- */
- public void save(Player player, String message)
- {
- if (player.getRights().superiorTo(PlayerRights.ADMINISTRATOR))
- {
- player.getActionSender().sendMessage(message);
- }
- save(player);
- }
- /**
- * Saves the player's data to his character file.
- *
- * @param player
- * @return true if successful, false if not
- */
- public boolean save(Player player)
- {
- // try (BufferedWriter out = new BufferedWriter(new FileWriter(getCharFile(player)), BUFFER_SIZE))
- // {
- // for (SaveObject so : saveList)
- // {
- // boolean saved = so.save(player, out);
- //
- // if (saved)
- // {
- // out.newLine();
- // }
- // }
- //
- // return true;
- // }
- // catch (IOException ex)
- // {
- // System.out.println("Player's name: " + player.getName());
- // ex.printStackTrace();
- // return false;
- // }
- saveGame(player);
- return true;
- }
- public void saveLog(final String file, LinkedList<String> lines)
- {
- saveLog(new File(file), lines);
- }
- /**
- * Saves a line to the specified log file.
- *
- * @param file
- * @param line
- */
- public void saveLog(final File file, List<String> lines)
- {
- String[] stringArray = new String[lines.size()];
- int idx = 0;
- for (String line : lines)
- {
- stringArray[idx++] = line;
- }
- saveLog(file, stringArray);
- }
- /**
- * Saves a line to the specified log file.
- *
- * @param file
- * @param line
- */
- public void saveLog(final String file, final String... lines)
- {
- saveLog(new File(file), lines);
- }
- public void saveLog(final File file, final String... lines)
- {
- Runnable runnable = () -> TextUtils.writeToFile(file, lines);
- saveThread.submit(runnable);
- }
- /**
- * Executes the runnable on the save thread.
- *
- * @param runnable
- */
- public void submit(Runnable runnable)
- {
- saveThread.submit(runnable);
- }
- /**
- * Gets the character file for specified player.
- *
- * @param username The player username.
- * @returns The players save file.
- */
- public static File getCharFile(String username)
- {
- return new File(CHARACTER_FILE_DIRECTORY + File.separator + username.charAt(0) + "/", username + ".txt");
- }
- /**
- * Gets the character file for specified player.
- *
- * @param player The player.
- * @returns The players save file.
- */
- public static File getCharFile(Player player)
- {
- String username = player.getName();
- return getCharFile(username);
- }
- /**
- * Gets the PlayerSaving singleton.
- */
- public static PlayerSaving getSaving()
- {
- return singleton;
- }
- static
- {
- CommandHandler.submit(new Command("create", PlayerRights.OWNER)
- {
- @Override
- public boolean execute(Player player, String input) throws Exception
- {
- System.out.println("Creating!");
- PlayerSaving.getSaving().save(player);
- return false;
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement