// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2026 // https://www.magicbane.com package engine.parsers.wpak; import engine.mbEnums; import engine.parsers.objects.wpak.StartingKitTemplate; import org.pmw.tinylog.Logger; import java.util.ArrayList; // Loads StartingKitTable.cfg (client loader ArcBaseKitManager_LoadStartingKitTable 0x620250). public class StartingKitParser { private static final String fileName = "StartingKitTable.cfg"; private static final int maxKitItems = 10; public static ArrayList parseStartingKitFile() { ArrayList kits = new ArrayList<>(); ArrayList lines; StartingKitTemplate kit; String race = null; mbEnums.SexType sex = null; String baseClass = null; int kitNumber = 0; int failedCount = 0; try { lines = WpakFileReader.readLines(fileName); } catch (Exception e) { Logger.error(fileName + ": " + e.getMessage()); return null; } for (WpakLine line : lines) { try { if (line.token(0).equals("RACE=")) { race = line.token(1); sex = line.enumToken(mbEnums.SexType.class, 2); baseClass = line.token(3); kitNumber = 0; continue; } if (race == null) throw line.error("kit line before the first RACE="); if (line.size() > maxKitItems) throw line.error("kit has " + line.size() + " items; the client reads at most " + maxKitItems); kit = new StartingKitTemplate(); kit.race = race; kit.sex = sex; kit.base_class = baseClass; kit.kit_number = kitNumber++; kit.item_ids.addAll(line.intTokensFrom(0)); kits.add(kit); } catch (WpakFormatException e) { Logger.error(e.getMessage()); failedCount++; } } Logger.info("Loaded " + kits.size() + " starting kits"); if (failedCount > 0) return null; return kits; } }