|
|
|
@ -9,12 +9,8 @@
@@ -9,12 +9,8 @@
|
|
|
|
|
|
|
|
|
|
package engine.ConfigParsing; |
|
|
|
|
|
|
|
|
|
import engine.ConfigParsing.EffectsData.Condition; |
|
|
|
|
import engine.ConfigParsing.EffectsData.EffectData; |
|
|
|
|
import engine.ConfigParsing.EffectsData.Mod; |
|
|
|
|
import engine.gameManager.ConfigManager; |
|
|
|
|
import engine.mbEnums; |
|
|
|
|
import org.pmw.tinylog.Logger; |
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.nio.file.Files; |
|
|
|
@ -22,179 +18,29 @@ import java.nio.file.Paths;
@@ -22,179 +18,29 @@ import java.nio.file.Paths;
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.regex.Matcher; |
|
|
|
|
import java.util.regex.Pattern; |
|
|
|
|
|
|
|
|
|
public class EffectsParser { |
|
|
|
|
|
|
|
|
|
public static String EffectsPath = ConfigManager.DEFAULT_DATA_DIR + "wpak/Effects.cfg"; |
|
|
|
|
public static HashMap<String, EffectData> effect_data = new HashMap<>(); |
|
|
|
|
private static final Pattern EFFECT_REGEX = Pattern.compile("<EFFECTBEGIN>(.+?)</EFFECTEND>", Pattern.DOTALL); |
|
|
|
|
private static final Pattern SOURCE_REGEX = Pattern.compile("<SOURCEBEGIN>(.+?)</SOURCEEND>", Pattern.DOTALL); |
|
|
|
|
private static final Pattern MODS_REGEX = Pattern.compile("<MODSBEGIN>(.+?)</MODSEND>", Pattern.DOTALL); |
|
|
|
|
|
|
|
|
|
public static void init() throws IOException { |
|
|
|
|
|
|
|
|
|
ArrayList<ArrayList<String>> compiledData = new ArrayList<>(); |
|
|
|
|
List<String> fileData = Files.readAllLines(Paths.get(EffectsPath)); |
|
|
|
|
ArrayList<String> modData = new ArrayList<>(); |
|
|
|
|
byte[] fileData = Files.readAllBytes(Paths.get(EffectsPath)); |
|
|
|
|
String fileContents = new String(fileData); |
|
|
|
|
|
|
|
|
|
for (String line : fileData) { |
|
|
|
|
final List<String> effectEntries = new ArrayList<>(); |
|
|
|
|
final Matcher matcher = EFFECT_REGEX.matcher(fileContents); |
|
|
|
|
|
|
|
|
|
if (line.contains("EFFECTBEGIN")) { |
|
|
|
|
modData = new ArrayList<>(); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (line.contains("EFFECTEND")) |
|
|
|
|
compiledData.add(modData); |
|
|
|
|
else |
|
|
|
|
modData.add(line); |
|
|
|
|
while (matcher.find()) { |
|
|
|
|
effectEntries.add(matcher.group(1)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CreateBlocks(compiledData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void CreateBlocks(ArrayList<ArrayList<String>> compiledData) { |
|
|
|
|
|
|
|
|
|
for (ArrayList<String> compiledLines : compiledData) { |
|
|
|
|
|
|
|
|
|
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('"') + 1; |
|
|
|
|
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; |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
Logger.error(e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int index = 0; |
|
|
|
|
|
|
|
|
|
//log all sources
|
|
|
|
|
|
|
|
|
|
for (String line : compiledLines) { |
|
|
|
|
String rawValue; |
|
|
|
|
if (line.contains("SOURCEBEGIN")) { |
|
|
|
|
rawValue = compiledLines.get(index + 1).replace(" ", ""); |
|
|
|
|
switch (rawValue) { |
|
|
|
|
case "Crush": |
|
|
|
|
rawValue = "Crushing"; |
|
|
|
|
break; |
|
|
|
|
case "Slash": |
|
|
|
|
rawValue = "Slashing"; |
|
|
|
|
break; |
|
|
|
|
case "Pierce": |
|
|
|
|
rawValue = "Piercing"; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
effectData.sources.add(mbEnums.EffectSourceType.valueOf(rawValue)); |
|
|
|
|
} |
|
|
|
|
index++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//log all mods
|
|
|
|
|
|
|
|
|
|
index = 0; |
|
|
|
|
|
|
|
|
|
for (String line : compiledLines) { |
|
|
|
|
|
|
|
|
|
if (line.contains("MODSBEGIN")) { |
|
|
|
|
|
|
|
|
|
int extra = 1; |
|
|
|
|
Mod mod = new Mod(); |
|
|
|
|
|
|
|
|
|
while (!compiledLines.get(index + extra).contains("MODSEND")) { |
|
|
|
|
//data.mods.add(lines[index + extra].Replace(" ", ""));
|
|
|
|
|
String rawValue = compiledLines.get(index + extra).replace(" ", "").split(" ")[0]; |
|
|
|
|
try { |
|
|
|
|
mod.type = mbEnums.ModType.valueOf(rawValue); |
|
|
|
|
}catch(Exception e){ |
|
|
|
|
mod.type = mbEnums.ModType.None; |
|
|
|
|
} |
|
|
|
|
GenerateModValues(mod, compiledLines.get(index + extra).replace(" ", "").replace(" ", "").split(" ")); |
|
|
|
|
extra++; |
|
|
|
|
} |
|
|
|
|
effectData.mods.add(mod); |
|
|
|
|
} |
|
|
|
|
index++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//log all conditions
|
|
|
|
|
|
|
|
|
|
index = 0; |
|
|
|
|
for (String line : compiledLines) { |
|
|
|
|
|
|
|
|
|
if (line.contains("CONDITIONBEGIN")) { |
|
|
|
|
|
|
|
|
|
int extra = 1; |
|
|
|
|
|
|
|
|
|
while (!compiledLines.get(index + extra).contains("CONDITIONEND")) { |
|
|
|
|
|
|
|
|
|
if (!compiledLines.get(index + extra).contains("#")) { |
|
|
|
|
//data.conditions.add(lines[index + extra].Replace(" ", ""));
|
|
|
|
|
Condition condition = new Condition(); |
|
|
|
|
condition.type = compiledLines.get(index + extra).replace(" ", "").split(" ")[0]; |
|
|
|
|
condition.value = compiledLines.get(index + extra).replace(" ", "").split(" ")[1]; |
|
|
|
|
} |
|
|
|
|
extra++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
index++; |
|
|
|
|
} |
|
|
|
|
effect_data.put(effectData.id, effectData); |
|
|
|
|
} |
|
|
|
|
Logger.info("Effects.cfg Parsing Completed"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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<>(); |
|
|
|
|
|
|
|
|
|
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]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|