Files
lakebane/src/engine/wpak/PowersParser.java
T

93 lines
3.8 KiB
Java
Raw Normal View History

2024-08-13 12:04:18 -04:00
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2024
// www.magicbane.com
package engine.wpak;
2024-08-13 12:20:27 -04:00
import engine.gameManager.ConfigManager;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.regex.Matcher;
2024-08-13 12:04:18 -04:00
import java.util.regex.Pattern;
public class PowersParser {
2024-08-13 12:20:27 -04:00
public static String powersPath = ConfigManager.DEFAULT_DATA_DIR + "wpak/Effects.cfg";
2024-08-13 12:04:18 -04:00
private static final Pattern POWER_REGEX = Pattern.compile("(?<=POWERBEGIN)(.+?)(?=POWEREND)", Pattern.DOTALL);
2024-08-13 12:20:27 -04:00
private static final Pattern STRSPLIT_REGEX = Pattern.compile("([^\"]\\S*|\"[^\"]*\")\\s*");
public static void parseWpakFile() throws IOException {
// Read .wpak file from disk
byte[] fileData = Files.readAllBytes(Paths.get(powersPath));
String fileContents = new String(fileData);
2024-08-14 16:27:51 -04:00
// Iterate over power entries from .wpak data
2024-08-13 12:20:27 -04:00
Matcher matcher = POWER_REGEX.matcher(fileContents);
while (matcher.find()) {
2024-08-14 16:46:02 -04:00
PowerEntry powerEntry = parsePowerEntry(matcher.group().trim());
2024-08-13 12:20:27 -04:00
}
}
private static PowerEntry parsePowerEntry(String powerData) {
PowerEntry powerEntry = new PowerEntry();
String[] powerEntries = powerData.trim().split("\n");
2024-08-14 16:27:51 -04:00
ArrayList<String> powerHeader = new ArrayList<>();
2024-08-13 12:20:27 -04:00
2024-08-14 16:27:51 -04:00
// Parse header
2024-08-13 12:20:27 -04:00
2024-08-14 17:32:45 -04:00
String headerString = powerEntries[0];
2024-08-14 16:27:51 -04:00
headerString = headerString.replace("\n", " ");
2024-08-13 12:20:27 -04:00
2024-08-14 16:27:51 -04:00
Matcher matcher = STRSPLIT_REGEX.matcher(headerString);
2024-08-13 12:20:27 -04:00
2024-08-14 16:27:51 -04:00
while (matcher.find())
2024-08-14 16:46:02 -04:00
powerHeader.add(matcher.group().trim());
2024-08-14 16:27:51 -04:00
2024-08-14 16:53:07 -04:00
powerEntry.power_id = powerHeader.get(0);
2024-08-14 17:21:26 -04:00
powerEntry.power_name = powerHeader.get(1).replaceAll("\"", "");
2024-08-14 16:53:07 -04:00
powerEntry.power_type = powerHeader.get(2);
powerEntry.skill_id = Integer.parseInt(powerHeader.get(3));
2024-08-14 17:21:26 -04:00
powerEntry.skill_name = powerHeader.get(4).replaceAll("\"", "");
2024-08-14 16:53:07 -04:00
powerEntry.target_type = powerHeader.get(5);
2024-08-14 17:00:19 -04:00
powerEntry.range = Integer.parseInt(powerHeader.get(6));
2024-08-14 17:11:38 -04:00
powerEntry.radiusType = powerHeader.get(7);
powerEntry.radius = Integer.parseInt(powerHeader.get(8));
2024-08-14 17:29:13 -04:00
powerEntry.groupReq = powerHeader.get(9);
powerEntry.costType = powerHeader.get(10);
2024-08-15 16:01:50 -04:00
powerEntry.cost = Float.parseFloat(powerHeader.get(11));
2024-08-14 17:29:13 -04:00
powerEntry.unknown01 = Integer.parseInt(powerHeader.get(12));
powerEntry.unknown02 = Integer.parseInt(powerHeader.get(13));
powerEntry.cast_time = Float.parseFloat(powerHeader.get(14));
powerEntry.cool_down = Float.parseFloat(powerHeader.get(15));
powerEntry.recycle_time = Float.parseFloat(powerHeader.get(16));
2024-08-15 16:08:33 -04:00
powerEntry.unknown03 = Integer.parseInt(powerHeader.get(17));
powerEntry.combatRequirement = powerHeader.get(18);
powerEntry.unknown04 = Integer.parseInt(powerHeader.get(19));
powerEntry.unknown05 = Integer.parseInt(powerHeader.get(20));
powerEntry.targetRequirement = powerHeader.get(21);
2024-08-14 16:53:07 -04:00
2024-08-14 16:27:51 -04:00
for (int x = 2; x < powerEntries.length; x++) {
// Parse key/pair values
2024-08-14 17:33:06 -04:00
// via switch
2024-08-13 12:20:27 -04:00
}
2024-08-14 16:27:51 -04:00
2024-08-13 12:20:27 -04:00
return powerEntry;
}
2024-08-13 12:04:18 -04:00
}
2024-08-13 12:20:27 -04:00