Public Repository for the Magicbane Shadowbane Emulator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
6.4 KiB

// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2024
// www.magicbane.com
package engine.ConfigParsing;
9 months ago
import engine.ConfigParsing.EffectsData.Condition;
import engine.ConfigParsing.EffectsData.EffectData;
import engine.ConfigParsing.EffectsData.Mod;
import engine.gameManager.ConfigManager;
import engine.mbEnums;
9 months ago
import org.pmw.tinylog.Logger;
import java.io.IOException;
9 months ago
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class EffectsParser {
9 months ago
public static String EffectsPath = ConfigManager.DEFAULT_DATA_DIR + "wpak/Effects.cfg";
9 months ago
public static HashMap<String, EffectData> effect_data = new HashMap<>();
public static void init() throws IOException {
9 months ago
ArrayList<ArrayList<String>> compiledData = new ArrayList<>();
9 months ago
List<String> fileData = Files.readAllLines(Paths.get(EffectsPath));
ArrayList<String> modData = new ArrayList<>();
for (String line : fileData) {
if (line.contains("EFFECTBEGIN")) {
modData = new ArrayList<>();
continue;
}
9 months ago
if (line.contains("EFFECTEND"))
compiledData.add(modData);
else
modData.add(line);
}
9 months ago
CreateBlocks(compiledData);
}
9 months ago
public static void CreateBlocks(ArrayList<ArrayList<String>> compiledData) {
for (ArrayList<String> compiledLines : compiledData) {
9 months ago
EffectData effectData = new EffectData();
effectData.id = compiledLines.get(1).replace(" ", "").split(" ")[0];
effectData.sources = new ArrayList<>();
effectData.mods = new ArrayList<>();
effectData.conditions = new ArrayList<>();
try {
String rawData = compiledLines.get(1).replace(" ", "");
if(rawData.contains("\"")){
int startIndex = rawData.indexOf('"');
int endIndex = rawData.lastIndexOf('"');
char[] nameValue = rawData.toCharArray();
String name = "";
for(int i = startIndex; i < endIndex; i++){
name += nameValue[i];
}
effectData.name = name;
}
int iconID;
try {
iconID = Integer.parseInt(compiledLines.get(1).replace(" ", "").split(" ")[2]);
} catch(Exception e){
iconID = 0;
}
effectData.icon = iconID;
9 months ago
} catch (Exception e) {
Logger.error(e);
}
9 months ago
int index = 0;
9 months ago
//log all sources
for (String line : compiledLines) {
if (line.contains("SOURCEBEGIN"))
effectData.sources.add(mbEnums.EffectSourceType.valueOf(compiledLines.get(index + 1).replace(" ", "")));
index++;
}
//log all mods
9 months ago
index = 0;
9 months ago
for (String line : compiledLines) {
if (line.contains("MODSBEGIN")) {
int extra = 1;
Mod mod = new Mod();
9 months ago
while (!compiledLines.get(index + extra).contains("MODSEND")) {
//data.mods.add(lines[index + extra].Replace(" ", ""));
9 months ago
mod.type = mbEnums.ModType.valueOf(compiledLines.get(index + extra).replace(" ", "").split(" ")[0]);
GenerateModValues(mod, compiledLines.get(index + extra).replace(" ", "").replace(" ", "").split(" "));
extra++;
}
9 months ago
effectData.mods.add(mod);
}
index++;
}
//log all conditions
9 months ago
index = 0;
9 months ago
for (String line : compiledLines) {
if (line.contains("CONDITIONBEGIN")) {
int extra = 1;
9 months ago
while (!compiledLines.get(index + extra).contains("CONDITIONEND")) {
if (!compiledLines.get(index + extra).contains("#")) {
//data.conditions.add(lines[index + extra].Replace(" ", ""));
Condition condition = new Condition();
9 months ago
condition.type = compiledLines.get(index + extra).replace(" ", "").split(" ")[0];
condition.value = compiledLines.get(index + extra).replace(" ", "").split(" ")[1];
}
extra++;
}
}
index++;
}
9 months ago
effect_data.put(effectData.id, effectData);
}
Logger.info("Effects.cfg Parsing Completed");
}
9 months ago
public static void GenerateModValues(Mod inMod, String[] data) {
int maxValue = 5;
if(inMod.type != null && inMod.type.name().equals("Health")){
maxValue = 7;
}
if(data.length < maxValue)
maxValue = data.length;
inMod.values = new ArrayList<>();
9 months ago
for (int i = 1; i < data.length; i++)
if (!data[i].isEmpty()) {
if (i >= maxValue)
continue;
if (i == maxValue - 1)
try {
String entry = "";
for (int j = i; j < data.length; j ++){
entry += data[j] + " ";
}
entry = entry.trim();
inMod.values.add(entry.trim());
} catch (Exception e) {
inMod.values.add(data[i]);
}
else
inMod.values.add(data[i]);
}
}
}